Home | Info | Community | Development | myReactOS | Contact Us
[static]
Definition at line 248 of file mci.c.
Referenced by mciSendCommandA().
{ if (msg < DRV_RESERVED) return 0; switch (msg) { case MCI_CLOSE: case MCI_CONFIGURE: case MCI_PLAY: case MCI_SEEK: case MCI_STOP: case MCI_PAUSE: case MCI_GETDEVCAPS: case MCI_SPIN: case MCI_SET: case MCI_STEP: case MCI_RECORD: case MCI_BREAK: case MCI_SOUND: case MCI_STATUS: case MCI_CUE: case MCI_REALIZE: case MCI_PUT: case MCI_WHERE: case MCI_FREEZE: case MCI_UNFREEZE: case MCI_CUT: case MCI_COPY: case MCI_PASTE: case MCI_UPDATE: case MCI_RESUME: case MCI_DELETE: case MCI_MONITOR: case MCI_SETAUDIO: case MCI_SIGNAL: case MCI_SETVIDEO: case MCI_LIST: return 0; case MCI_OPEN: { MCI_OPEN_PARMSA *mci_openA = (MCI_OPEN_PARMSA*)*dwParam2; MCI_OPEN_PARMSW *mci_openW; DWORD_PTR *ptr; ptr = HeapAlloc(GetProcessHeap(), 0, sizeof(DWORD_PTR) + sizeof(*mci_openW) + 2 * sizeof(DWORD)); if (!ptr) return -1; *ptr++ = *dwParam2; /* save the previous pointer */ *dwParam2 = (DWORD_PTR)ptr; mci_openW = (MCI_OPEN_PARMSW *)ptr; if (dwParam1 & MCI_NOTIFY) mci_openW->dwCallback = mci_openA->dwCallback; if (dwParam1 & MCI_OPEN_TYPE) { if (dwParam1 & MCI_OPEN_TYPE_ID) mci_openW->lpstrDeviceType = (LPCWSTR)mci_openA->lpstrDeviceType; else mci_openW->lpstrDeviceType = MCI_strdupAtoW(mci_openA->lpstrDeviceType); } if (dwParam1 & MCI_OPEN_ELEMENT) { if (dwParam1 & MCI_OPEN_ELEMENT_ID) mci_openW->lpstrElementName = (LPCWSTR)mci_openA->lpstrElementName; else mci_openW->lpstrElementName = MCI_strdupAtoW(mci_openA->lpstrElementName); } if (dwParam1 & MCI_OPEN_ALIAS) mci_openW->lpstrAlias = MCI_strdupAtoW(mci_openA->lpstrAlias); /* FIXME: this is only needed for specific types of MCI devices, and * may cause a segfault if the two DWORD:s don't exist at the end of * mci_openA */ memcpy(mci_openW + 1, mci_openA + 1, 2 * sizeof(DWORD)); } return 1; case MCI_WINDOW: if (dwParam1 & MCI_ANIM_WINDOW_TEXT) { MCI_ANIM_WINDOW_PARMSA *mci_windowA = (MCI_ANIM_WINDOW_PARMSA *)*dwParam2; MCI_ANIM_WINDOW_PARMSW *mci_windowW; mci_windowW = HeapAlloc(GetProcessHeap(), 0, sizeof(*mci_windowW)); if (!mci_windowW) return -1; *dwParam2 = (DWORD_PTR)mci_windowW; mci_windowW->lpstrText = MCI_strdupAtoW(mci_windowA->lpstrText); if (dwParam1 & MCI_NOTIFY) mci_windowW->dwCallback = mci_windowA->dwCallback; if (dwParam1 & MCI_ANIM_WINDOW_HWND) mci_windowW->hWnd = mci_windowA->hWnd; if (dwParam1 & MCI_ANIM_WINDOW_STATE) mci_windowW->nCmdShow = mci_windowA->nCmdShow; return 1; } return 0; case MCI_SYSINFO: { MCI_SYSINFO_PARMSA *mci_sysinfoA = (MCI_SYSINFO_PARMSA *)*dwParam2; MCI_SYSINFO_PARMSW *mci_sysinfoW; DWORD_PTR *ptr; ptr = HeapAlloc(GetProcessHeap(), 0, sizeof(*mci_sysinfoW) + sizeof(DWORD_PTR)); if (!ptr) return -1; *ptr++ = *dwParam2; /* save the previous pointer */ *dwParam2 = (DWORD_PTR)ptr; mci_sysinfoW = (MCI_SYSINFO_PARMSW *)ptr; if (dwParam1 & MCI_NOTIFY) mci_sysinfoW->dwCallback = mci_sysinfoA->dwCallback; mci_sysinfoW->dwRetSize = mci_sysinfoA->dwRetSize; mci_sysinfoW->lpstrReturn = HeapAlloc(GetProcessHeap(), 0, mci_sysinfoW->dwRetSize); mci_sysinfoW->dwNumber = mci_sysinfoA->dwNumber; mci_sysinfoW->wDeviceType = mci_sysinfoA->wDeviceType; return 1; } case MCI_INFO: { MCI_INFO_PARMSA *mci_infoA = (MCI_INFO_PARMSA *)*dwParam2; MCI_INFO_PARMSW *mci_infoW; DWORD_PTR *ptr; ptr = HeapAlloc(GetProcessHeap(), 0, sizeof(*mci_infoW) + sizeof(DWORD_PTR)); if (!ptr) return -1; *ptr++ = *dwParam2; /* save the previous pointer */ *dwParam2 = (DWORD_PTR)ptr; mci_infoW = (MCI_INFO_PARMSW *)ptr; if (dwParam1 & MCI_NOTIFY) mci_infoW->dwCallback = mci_infoA->dwCallback; mci_infoW->dwRetSize = mci_infoA->dwRetSize * sizeof(WCHAR); /* it's not the same as SYSINFO !!! */ mci_infoW->lpstrReturn = HeapAlloc(GetProcessHeap(), 0, mci_infoW->dwRetSize); return 1; } case MCI_SAVE: { MCI_SAVE_PARMSA *mci_saveA = (MCI_SAVE_PARMSA *)*dwParam2; MCI_SAVE_PARMSW *mci_saveW; mci_saveW = HeapAlloc(GetProcessHeap(), 0, sizeof(*mci_saveW)); if (!mci_saveW) return -1; *dwParam2 = (DWORD_PTR)mci_saveW; if (dwParam1 & MCI_NOTIFY) mci_saveW->dwCallback = mci_saveA->dwCallback; mci_saveW->lpfilename = MCI_strdupAtoW(mci_saveA->lpfilename); return 1; } case MCI_LOAD: { MCI_LOAD_PARMSA *mci_loadA = (MCI_LOAD_PARMSA *)*dwParam2; MCI_LOAD_PARMSW *mci_loadW; mci_loadW = HeapAlloc(GetProcessHeap(), 0, sizeof(*mci_loadW)); if (!mci_loadW) return -1; *dwParam2 = (DWORD_PTR)mci_loadW; if (dwParam1 & MCI_NOTIFY) mci_loadW->dwCallback = mci_loadA->dwCallback; mci_loadW->lpfilename = MCI_strdupAtoW(mci_loadA->lpfilename); return 1; } case MCI_ESCAPE: { MCI_VD_ESCAPE_PARMSA *mci_vd_escapeA = (MCI_VD_ESCAPE_PARMSA *)*dwParam2; MCI_VD_ESCAPE_PARMSW *mci_vd_escapeW; mci_vd_escapeW = HeapAlloc(GetProcessHeap(), 0, sizeof(*mci_vd_escapeW)); if (!mci_vd_escapeW) return -1; *dwParam2 = (DWORD_PTR)mci_vd_escapeW; if (dwParam1 & MCI_NOTIFY) mci_vd_escapeW->dwCallback = mci_vd_escapeA->dwCallback; mci_vd_escapeW->lpstrCommand = MCI_strdupAtoW(mci_vd_escapeA->lpstrCommand); return 1; } default: FIXME("Message %s needs translation\n", MCI_MessageToString(msg)); return -1; } }