Index: dll/win32/winmm/mci.c =================================================================== --- dll/win32/winmm/mci.c (revision 66079) +++ dll/win32/winmm/mci.c (working copy) @@ -1728,6 +1728,7 @@ WCHAR buf[2048], *s = buf, *p; LPWINE_MCIDRIVER wmd; HKEY hKey; + DWORD dwRealFlags; if (lpParms == NULL || lpParms->lpstrReturn == NULL) return MCIERR_NULL_PARAMETER_BLOCK; @@ -1735,10 +1736,13 @@ TRACE("(%08x, %08X, %p[num=%d, wDevTyp=%u])\n", uDevID, dwFlags, lpParms, lpParms->dwNumber, lpParms->wDeviceType); - switch (dwFlags & ~MCI_SYSINFO_OPEN) { + /* MCI_TEST, MCI_WAIT and MCI_NOTIFY are ignored on MCI_SYSINFO, so remove them from the flags */ + dwRealFlags = dwFlags & ~(MCI_TEST | MCI_WAIT | MCI_NOTIFY); + + switch (dwRealFlags & ~MCI_SYSINFO_OPEN) { case MCI_SYSINFO_QUANTITY: if (lpParms->wDeviceType < MCI_DEVTYPE_FIRST || lpParms->wDeviceType > MCI_DEVTYPE_LAST) { - if (dwFlags & MCI_SYSINFO_OPEN) { + if (dwRealFlags & MCI_SYSINFO_OPEN) { TRACE("MCI_SYSINFO_QUANTITY: # of open MCI drivers\n"); EnterCriticalSection(&WINMM_cs); for (wmd = MciDrivers; wmd; wmd = wmd->lpNext) { @@ -1756,7 +1760,7 @@ for (s = buf; *s; s += strlenW(s) + 1) cnt++; } } else { - if (dwFlags & MCI_SYSINFO_OPEN) { + if (dwRealFlags & MCI_SYSINFO_OPEN) { TRACE("MCI_SYSINFO_QUANTITY: # of open MCI drivers of type %u\n", lpParms->wDeviceType); EnterCriticalSection(&WINMM_cs); for (wmd = MciDrivers; wmd; wmd = wmd->lpNext) { @@ -1786,7 +1790,7 @@ break; case MCI_SYSINFO_NAME: TRACE("MCI_SYSINFO_NAME\n"); - if (dwFlags & MCI_SYSINFO_OPEN) { + if (dwRealFlags & MCI_SYSINFO_OPEN) { FIXME("Don't handle MCI_SYSINFO_NAME|MCI_SYSINFO_OPEN (yet)\n"); ret = MCIERR_UNRECOGNIZED_COMMAND; } else { @@ -1819,7 +1823,7 @@ TRACE("(%d) => %s\n", lpParms->dwNumber, debugstr_w(lpParms->lpstrReturn)); break; default: - TRACE("Unsupported flag value=%08x\n", dwFlags); + TRACE("Unsupported flag value=%08x\n", dwRealFlags); ret = MCIERR_UNRECOGNIZED_COMMAND; } return ret;