/************************************************************************** * 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; }
/************************************************************************** * 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; }
/************************************************************************** * 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; }