Changeset 6648 for trunk/src/msacm32/driver.c
- Timestamp:
- Sep 5, 2001, 3:19:02 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/msacm32/driver.c
r5434 r6648 1 1 /* -*- tab-width: 8; c-basic-offset: 4 -*- */ 2 2 /* $Id: driver.c,v 1.2 2001-09-05 13:11:25 bird Exp $ */ 3 3 /* 4 4 * MSACM32 library 5 5 * 6 6 * Copyright 1998 Patrik Stridvall 7 * 1999Eric Pouech7 * 1999 Eric Pouech 8 8 */ 9 9 … … 29 29 30 30 DEFAULT_DEBUG_CHANNEL(msacm); 31 31 32 32 /*********************************************************************** 33 33 * acmDriverAddA (MSACM32.2) 34 34 */ 35 35 MMRESULT WINAPI acmDriverAddA(PHACMDRIVERID phadid, HINSTANCE hinstModule, 36 36 LPARAM lParam, DWORD dwPriority, DWORD fdwAdd) 37 37 { 38 38 if (!phadid) 39 40 39 return MMSYSERR_INVALPARAM; 40 41 41 /* Check if any unknown flags */ 42 if (fdwAdd & 43 44 45 46 42 if (fdwAdd & 43 ~(ACM_DRIVERADDF_FUNCTION|ACM_DRIVERADDF_NOTIFYHWND| 44 ACM_DRIVERADDF_GLOBAL)) 45 return MMSYSERR_INVALFLAG; 46 47 47 /* Check if any incompatible flags */ 48 if ((fdwAdd & ACM_DRIVERADDF_FUNCTION) && 49 50 51 52 /* FIXME: in fact, should GetModuleFileName(hinstModule) and do a 48 if ((fdwAdd & ACM_DRIVERADDF_FUNCTION) && 49 (fdwAdd & ACM_DRIVERADDF_NOTIFYHWND)) 50 return MMSYSERR_INVALFLAG; 51 52 /* FIXME: in fact, should GetModuleFileName(hinstModule) and do a 53 53 * LoadDriver on it, to be sure we can call SendDriverMessage on the 54 54 * hDrvr handle. 55 55 */ 56 56 *phadid = (HACMDRIVERID) MSACM_RegisterDriver(NULL, NULL, hinstModule); 57 57 58 58 /* FIXME: lParam, dwPriority and fdwAdd ignored */ 59 59 60 60 return MMSYSERR_NOERROR; 61 61 } … … 67 67 */ 68 68 MMRESULT WINAPI acmDriverAddW(PHACMDRIVERID phadid, HINSTANCE hinstModule, 69 69 LPARAM lParam, DWORD dwPriority, DWORD fdwAdd) 70 70 { 71 71 FIXME("(%p, 0x%08x, %ld, %ld, %ld): stub\n", 72 73 72 phadid, hinstModule, lParam, dwPriority, fdwAdd); 73 74 74 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 75 75 return MMSYSERR_ERROR; … … 81 81 MMRESULT WINAPI acmDriverClose(HACMDRIVER had, DWORD fdwClose) 82 82 { 83 PWINE_ACMDRIVER 84 PWINE_ACMDRIVERID 85 PWINE_ACMDRIVER* 83 PWINE_ACMDRIVER pad; 84 PWINE_ACMDRIVERID padid; 85 PWINE_ACMDRIVER* tpad; 86 86 87 87 if (fdwClose) 88 89 88 return MMSYSERR_INVALFLAG; 89 90 90 pad = MSACM_GetDriver(had); 91 91 if (!pad) 92 92 return MMSYSERR_INVALHANDLE; 93 93 94 94 padid = pad->obj.pACMDriverID; … … 96 96 /* remove driver from list */ 97 97 for (tpad = &(padid->pACMDriverList); *tpad; *tpad = (*tpad)->pNextACMDriver) { 98 99 100 101 102 } 103 98 if (*tpad == pad) { 99 *tpad = (*tpad)->pNextACMDriver; 100 break; 101 } 102 } 103 104 104 /* close driver if it has been opened */ 105 105 if (pad->hDrvr && !padid->hInstModule) 106 107 106 CloseDriver(pad->hDrvr, 0, 0); 107 108 108 HeapFree(MSACM_hHeap, 0, pad); 109 109 110 110 return MMSYSERR_NOERROR; 111 111 } … … 117 117 { 118 118 MMRESULT mmr; 119 ACMDRIVERDETAILSW 120 119 ACMDRIVERDETAILSW addw; 120 121 121 addw.cbStruct = sizeof(addw); 122 122 mmr = acmDriverDetailsW(hadid, &addw, fdwDetails); 123 123 if (mmr == 0) { 124 padd->fccType = addw.fccType; 125 padd->fccComp = addw.fccComp; 126 padd->wMid = addw.wMid; 127 padd->wPid = addw.wPid; 128 padd->vdwACM = addw.vdwACM; 129 padd->vdwDriver = addw.vdwDriver; 130 padd->fdwSupport = addw.fdwSupport; 131 padd->cFormatTags = addw.cFormatTags; 132 padd->cFilterTags = addw.cFilterTags; 133 padd->hicon = addw.hicon; 124 padd->fccType = addw.fccType; 125 padd->fccComp = addw.fccComp; 126 padd->wMid = addw.wMid; 127 padd->wPid = addw.wPid; 128 padd->vdwACM = addw.vdwACM; 129 padd->vdwDriver = addw.vdwDriver; 130 padd->fdwSupport = addw.fdwSupport; 131 padd->cFormatTags = addw.cFormatTags; 132 padd->cFilterTags = addw.cFilterTags; 133 padd->hicon = addw.hicon; 134 134 WideCharToMultiByte( CP_ACP, 0, addw.szShortName, -1, padd->szShortName, 135 135 sizeof(padd->szShortName), NULL, NULL ); … … 153 153 HACMDRIVER acmDrvr; 154 154 MMRESULT mmr; 155 155 156 156 if (fdwDetails) 157 158 157 return MMSYSERR_INVALFLAG; 158 159 159 mmr = acmDriverOpen(&acmDrvr, hadid, 0); 160 160 if (mmr == MMSYSERR_NOERROR) { 161 162 163 164 } 165 161 mmr = (MMRESULT)MSACM_Message(acmDrvr, ACMDM_DRIVER_DETAILS, (LPARAM)padd, 0); 162 163 acmDriverClose(acmDrvr, 0); 164 } 165 166 166 return mmr; 167 167 } … … 172 172 MMRESULT WINAPI acmDriverEnum(ACMDRIVERENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum) 173 173 { 174 PWINE_ACMDRIVERID 175 ACMDRIVERDETAILSW 174 PWINE_ACMDRIVERID p; 175 ACMDRIVERDETAILSW add; 176 176 177 177 if (!fnCallback) return MMSYSERR_INVALPARAM; 178 178 179 179 if (fdwEnum && ~(ACM_DRIVERENUMF_NOLOCAL|ACM_DRIVERENUMF_DISABLED)) 180 181 180 return MMSYSERR_INVALFLAG; 181 182 182 add.cbStruct = sizeof(add); 183 183 for (p = MSACM_pFirstACMDriverID; p; p = p->pNextACMDriverID) { 184 185 186 187 188 189 190 191 192 193 194 } 195 184 if (acmDriverDetailsW((HACMDRIVERID)p, &add, 0) != MMSYSERR_NOERROR) 185 continue; 186 if (!p->bEnabled) { 187 if (fdwEnum & ACM_DRIVERENUMF_DISABLED) 188 add.fdwSupport |= ACMDRIVERDETAILS_SUPPORTF_DISABLED; 189 else 190 continue; 191 } 192 if (!(*fnCallback)((HACMDRIVERID)p, dwInstance, add.fdwSupport)) 193 break; 194 } 195 196 196 return MMSYSERR_NOERROR; 197 197 } … … 203 203 { 204 204 PWINE_ACMOBJ pao; 205 205 206 206 if (!phadid) 207 208 207 return MMSYSERR_INVALPARAM; 208 209 209 if (fdwDriverID) 210 211 210 return MMSYSERR_INVALFLAG; 211 212 212 pao = MSACM_GetObj(hao, WINE_ACMOBJ_DONTCARE); 213 213 if (!pao) 214 215 214 return MMSYSERR_INVALHANDLE; 215 216 216 *phadid = (HACMDRIVERID) pao->pACMDriverID; 217 217 218 218 return MMSYSERR_NOERROR; 219 219 } … … 226 226 { 227 227 if ((uMsg >= ACMDM_USER && uMsg < ACMDM_RESERVED_LOW) || 228 229 230 231 228 uMsg == ACMDM_DRIVER_ABOUT || 229 uMsg == DRV_QUERYCONFIGURE || 230 uMsg == DRV_CONFIGURE) 231 return MSACM_Message(had, uMsg, lParam1, lParam2); 232 232 return MMSYSERR_INVALPARAM; 233 233 } … … 239 239 MMRESULT WINAPI acmDriverOpen(PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen) 240 240 { 241 PWINE_ACMDRIVERID 242 PWINE_ACMDRIVER 241 PWINE_ACMDRIVERID padid; 242 PWINE_ACMDRIVER pad; 243 243 244 244 TRACE("(%p, %x, %08lu)\n", phad, hadid, fdwOpen); 245 245 246 246 if (!phad) 247 248 247 return MMSYSERR_INVALPARAM; 248 249 249 if (fdwOpen) 250 251 252 padid = MSACM_GetDriverID(hadid); 250 return MMSYSERR_INVALFLAG; 251 252 padid = MSACM_GetDriverID(hadid); 253 253 if (!padid) 254 255 254 return MMSYSERR_INVALHANDLE; 255 256 256 pad = HeapAlloc(MSACM_hHeap, 0, sizeof(WINE_ACMDRIVER)); 257 257 if (!pad) return MMSYSERR_NOMEM; … … 259 259 pad->obj.dwType = WINE_ACMOBJ_DRIVER; 260 260 pad->obj.pACMDriverID = padid; 261 261 262 262 if (!(pad->hDrvr = padid->hInstModule) && padid->pszDriverAlias) 263 263 pad->hDrvr = OpenDriverA(padid->pszDriverAlias, NULL, 0); 264 264 if (!pad->hDrvr) { 265 266 265 HeapFree(MSACM_hHeap, 0, pad); 266 return MMSYSERR_ERROR; 267 267 } 268 268 … … 289 289 HKEY hPriorityKey; 290 290 DWORD dwPriorityCounter; 291 291 292 292 padid = MSACM_GetDriverID(hadid); 293 293 if (!padid) 294 295 294 return MMSYSERR_INVALHANDLE; 295 296 296 /* Check for unknown flags */ 297 if (fdwPriority & 298 299 300 301 297 if (fdwPriority & 298 ~(ACM_DRIVERPRIORITYF_ENABLE|ACM_DRIVERPRIORITYF_DISABLE| 299 ACM_DRIVERPRIORITYF_BEGIN|ACM_DRIVERPRIORITYF_END)) 300 return MMSYSERR_INVALFLAG; 301 302 302 /* Check for incompatible flags */ 303 303 if ((fdwPriority & ACM_DRIVERPRIORITYF_ENABLE) && 304 305 306 304 (fdwPriority & ACM_DRIVERPRIORITYF_DISABLE)) 305 return MMSYSERR_INVALFLAG; 306 307 307 /* Check for incompatible flags */ 308 308 if ((fdwPriority & ACM_DRIVERPRIORITYF_BEGIN) && 309 310 311 312 lError = RegOpenKeyA(HKEY_CURRENT_USER, 313 314 315 316 309 (fdwPriority & ACM_DRIVERPRIORITYF_END)) 310 return MMSYSERR_INVALFLAG; 311 312 lError = RegOpenKeyA(HKEY_CURRENT_USER, 313 "Software\\Microsoft\\Multimedia\\" 314 "Audio Compression Manager\\Priority v4.00", 315 &hPriorityKey 316 ); 317 317 /* FIXME: Create key */ 318 318 if (lError != ERROR_SUCCESS) 319 320 321 for (dwPriorityCounter = 1; ; dwPriorityCounter++) 322 323 324 325 326 327 FIXME("(0x%08x, %ld, %ld): stub (partial)\n", 328 329 330 } 331 319 return MMSYSERR_ERROR; 320 321 for (dwPriorityCounter = 1; ; dwPriorityCounter++) { 322 snprintf(szSubKey, 17, "Priorty%ld", dwPriorityCounter); 323 lError = RegQueryValueA(hPriorityKey, szSubKey, szBuffer, &lBufferLength); 324 if (lError != ERROR_SUCCESS) 325 break; 326 327 FIXME("(0x%08x, %ld, %ld): stub (partial)\n", 328 hadid, dwPriority, fdwPriority); 329 break; 330 } 331 332 332 RegCloseKey(hPriorityKey); 333 333 334 334 return MMSYSERR_ERROR; 335 335 } … … 341 341 { 342 342 PWINE_ACMDRIVERID padid; 343 343 344 344 padid = MSACM_GetDriverID(hadid); 345 345 if (!padid) 346 347 346 return MMSYSERR_INVALHANDLE; 347 348 348 if (fdwRemove) 349 350 349 return MMSYSERR_INVALFLAG; 350 351 351 MSACM_UnregisterDriver(padid); 352 353 return MMSYSERR_NOERROR; 354 } 355 352 353 return MMSYSERR_NOERROR; 354 } 355
Note:
See TracChangeset
for help on using the changeset viewer.