/************************************************************************** * MCIQTZ_drvClose [internal] */ static DWORD MCIQTZ_drvClose(DWORD dwDevID) { WINE_MCIQTZ* wma; TRACE("(%04x)\n", dwDevID); wma = MCIQTZ_mciGetOpenDev(dwDevID); if (wma) { /* finish all outstanding things */ MCIQTZ_relayTaskMessage(dwDevID, MCI_CLOSE_DRIVER, MCI_WAIT, 0); mciFreeCommandResource(wma->command_table); MCIQTZ_relayTaskMessage(dwDevID, MCI_CLOSE, MCI_WAIT, 0); WaitForSingleObject(wma->task.thread, INFINITE); CloseHandle(wma->task.notify); CloseHandle(wma->task.done); CloseHandle(wma->task.thread); wma->cs.DebugInfo->Spare[0] = 0; DeleteCriticalSection(&wma->cs); mciSetDriverData(dwDevID, 0); CloseHandle(wma->stop_event); HeapFree(GetProcessHeap(), 0, wma); return 1; } return (dwDevID == 0xFFFFFFFF) ? 1 : 0; }
/************************************************************************** * MCICDA_drvOpen [internal] */ static DWORD MCICDA_drvOpen(LPCWSTR str, LPMCI_OPEN_DRIVER_PARMSW modp) { static HMODULE dsHandle; WINE_MCICDAUDIO* wmcda; if (!modp) return 0xFFFFFFFF; /* FIXME: MCIERR_CANNOT_LOAD_DRIVER if there's no drive of type CD-ROM */ wmcda = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINE_MCICDAUDIO)); if (!wmcda) return 0; if (!dsHandle) { dsHandle = LoadLibraryA("dsound.dll"); if(dsHandle) pDirectSoundCreate = (LPDIRECTSOUNDCREATE)GetProcAddress(dsHandle, "DirectSoundCreate"); } wmcda->wDevID = modp->wDeviceID; mciSetDriverData(wmcda->wDevID, (DWORD_PTR)wmcda); modp->wCustomCommandTable = MCI_NO_COMMAND_TABLE; modp->wType = MCI_DEVTYPE_CD_AUDIO; InitializeCriticalSection(&wmcda->cs); return modp->wDeviceID; }
/************************************************************************** * MCIAVI_drvOpen [internal] */ static DWORD MCIAVI_drvOpen(LPCWSTR str, LPMCI_OPEN_DRIVER_PARMSW modp) { WINE_MCIAVI* wma; static const WCHAR mciAviWStr[] = {'M','C','I','A','V','I',0}; TRACE("%s, %p\n", debugstr_w(str), modp); /* session instance */ if (!modp) return 0xFFFFFFFF; if (!MCIAVI_RegisterClass()) return 0; wma = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINE_MCIAVI)); if (!wma) return 0; InitializeCriticalSection(&wma->cs); wma->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": WINE_MCIAVI.cs"); wma->hStopEvent = CreateEventW(NULL, FALSE, FALSE, NULL); wma->wDevID = modp->wDeviceID; wma->wCommandTable = mciLoadCommandResource(MCIAVI_hInstance, mciAviWStr, 0); wma->dwStatus = MCI_MODE_NOT_READY; modp->wCustomCommandTable = wma->wCommandTable; modp->wType = MCI_DEVTYPE_DIGITAL_VIDEO; mciSetDriverData(wma->wDevID, (DWORD_PTR)wma); return modp->wDeviceID; }
/************************************************************************** * MCIAVI_drvClose [internal] */ static DWORD MCIAVI_drvClose(DWORD dwDevID) { WINE_MCIAVI *wma; TRACE("%04x\n", dwDevID); /* finish all outstanding things */ MCIAVI_mciClose(dwDevID, MCI_WAIT, NULL); wma = (WINE_MCIAVI*)mciGetDriverData(dwDevID); if (wma) { MCIAVI_UnregisterClass(); EnterCriticalSection(&wma->cs); mciSetDriverData(dwDevID, 0); mciFreeCommandResource(wma->wCommandTable); CloseHandle(wma->hStopEvent); LeaveCriticalSection(&wma->cs); wma->cs.DebugInfo->Spare[0] = 0; DeleteCriticalSection(&wma->cs); HeapFree(GetProcessHeap(), 0, wma); return 1; } return (dwDevID == 0xFFFFFFFF) ? 1 : 0; }
/************************************************************************** * MCICDA_drvClose [internal] */ static DWORD MCICDA_drvClose(DWORD dwDevID) { WINE_MCICDAUDIO* wmcda = (WINE_MCICDAUDIO*)mciGetDriverData(dwDevID); if (wmcda) { HeapFree(GetProcessHeap(), 0, wmcda); mciSetDriverData(dwDevID, 0); } return (dwDevID == 0xFFFFFFFF) ? 1 : 0; }
/************************************************************************** * MCICDA_drvOpen [internal] */ static DWORD MCICDA_drvOpen(LPSTR str, LPMCI_OPEN_DRIVER_PARMSA modp) { WINE_MCICDAUDIO* wmcda; if (!modp) return 0xFFFFFFFF; wmcda = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINE_MCICDAUDIO)); if (!wmcda) return 0; wmcda->wDevID = modp->wDeviceID; mciSetDriverData(wmcda->wDevID, (DWORD)wmcda); modp->wCustomCommandTable = MCI_NO_COMMAND_TABLE; modp->wType = MCI_DEVTYPE_CD_AUDIO; return modp->wDeviceID; }
/************************************************************************** * MCIQTZ_drvClose [internal] */ static DWORD MCIQTZ_drvClose(DWORD dwDevID) { WINE_MCIQTZ* wma; TRACE("(%04x)\n", dwDevID); wma = MCIQTZ_mciGetOpenDev(dwDevID); if (wma) { /* finish all outstanding things */ MCIQTZ_mciClose(dwDevID, MCI_WAIT, NULL); mciFreeCommandResource(wma->command_table); mciSetDriverData(dwDevID, 0); HeapFree(GetProcessHeap(), 0, wma); return 1; } return (dwDevID == 0xFFFFFFFF) ? 1 : 0; }
/************************************************************************** * MCIQTZ_drvOpen [internal] */ static DWORD MCIQTZ_drvOpen(LPCWSTR str, LPMCI_OPEN_DRIVER_PARMSW modp) { WINE_MCIQTZ* wma; static const WCHAR mciAviWStr[] = {'M','C','I','A','V','I',0}; TRACE("(%s, %p)\n", debugstr_w(str), modp); /* session instance */ if (!modp) return 0xFFFFFFFF; wma = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINE_MCIQTZ)); if (!wma) return 0; modp->wType = MCI_DEVTYPE_DIGITAL_VIDEO; wma->wDevID = modp->wDeviceID; modp->wCustomCommandTable = wma->command_table = mciLoadCommandResource(MCIQTZ_hInstance, mciAviWStr, 0); mciSetDriverData(wma->wDevID, (DWORD_PTR)wma); return modp->wDeviceID; }
/************************************************************************** * MCIQTZ_drvOpen [internal] */ static DWORD MCIQTZ_drvOpen(LPCWSTR str, LPMCI_OPEN_DRIVER_PARMSW modp) { WINE_MCIQTZ* wma; static const WCHAR mciAviWStr[] = {'M','C','I','A','V','I',0}; TRACE("(%s, %p)\n", debugstr_w(str), modp); /* session instance */ if (!modp) return 0xFFFFFFFF; wma = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINE_MCIQTZ)); if (!wma) return 0; wma->stop_event = CreateEventW(NULL, FALSE, FALSE, NULL); wma->task.notify = CreateEventW(NULL, FALSE, FALSE, NULL); if (!wma->task.notify) goto err; wma->task.done = CreateEventW(NULL, FALSE, FALSE, NULL); if (!wma->task.done) goto err; wma->task.thread = CreateThread(NULL, 0, MCIQTZ_taskThread, &wma->task, 0, NULL); if (!wma->task.thread) goto err; InitializeCriticalSection(&wma->cs); wma->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": WINE_MCIQTZ"); modp->wType = MCI_DEVTYPE_DIGITAL_VIDEO; wma->wDevID = modp->wDeviceID; modp->wCustomCommandTable = wma->command_table = mciLoadCommandResource(MCIQTZ_hInstance, mciAviWStr, 0); mciSetDriverData(wma->wDevID, (DWORD_PTR)wma); return modp->wDeviceID; err: if (wma->task.notify) CloseHandle(wma->task.notify); if (wma->task.done) CloseHandle(wma->task.done); HeapFree(GetProcessHeap(), 0, wma); return 0; }
/************************************************************************** * mciSetDriverData [MMSYSTEM.707] */ BOOL16 WINAPI mciSetDriverData16(UINT16 uDeviceID, DWORD data) { return mciSetDriverData(uDeviceID, data); }