Add MCI_SYSINFO command W to A mapping.
This commit is contained in:
parent
446d8321a7
commit
123ce73d6b
|
@ -901,8 +901,29 @@ static int MCI_MapMsgWtoA(UINT msg, DWORD_PTR dwParam1, DWORD_PTR *dwParam2)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case MCI_INFO:
|
|
||||||
case MCI_SYSINFO:
|
case MCI_SYSINFO:
|
||||||
|
{
|
||||||
|
MCI_SYSINFO_PARMSW *mci_sysinfoW = (MCI_SYSINFO_PARMSW *)*dwParam2;
|
||||||
|
MCI_SYSINFO_PARMSA *mci_sysinfoA;
|
||||||
|
DWORD_PTR *ptr;
|
||||||
|
|
||||||
|
ptr = HeapAlloc(GetProcessHeap(), 0, sizeof(*mci_sysinfoA) + sizeof(DWORD_PTR));
|
||||||
|
if (!ptr) return -1;
|
||||||
|
|
||||||
|
*ptr++ = *dwParam2; /* save the previous pointer */
|
||||||
|
*dwParam2 = (DWORD_PTR)ptr;
|
||||||
|
mci_sysinfoA = (MCI_SYSINFO_PARMSA *)ptr;
|
||||||
|
|
||||||
|
if (dwParam1 & MCI_NOTIFY)
|
||||||
|
mci_sysinfoA->dwCallback = mci_sysinfoW->dwCallback;
|
||||||
|
|
||||||
|
mci_sysinfoA->dwRetSize = mci_sysinfoW->dwRetSize; /* FIXME */
|
||||||
|
mci_sysinfoA->lpstrReturn = HeapAlloc(GetProcessHeap(), 0, mci_sysinfoA->dwRetSize);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
case MCI_INFO:
|
||||||
case MCI_SAVE:
|
case MCI_SAVE:
|
||||||
case MCI_LOAD:
|
case MCI_LOAD:
|
||||||
case MCI_ESCAPE:
|
case MCI_ESCAPE:
|
||||||
|
@ -913,7 +934,8 @@ static int MCI_MapMsgWtoA(UINT msg, DWORD_PTR dwParam1, DWORD_PTR *dwParam2)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MCI_UnmapMsgWtoA(UINT msg, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
|
static DWORD MCI_UnmapMsgWtoA(UINT msg, DWORD_PTR dwParam1, DWORD_PTR dwParam2,
|
||||||
|
DWORD result)
|
||||||
{
|
{
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
|
@ -951,10 +973,32 @@ static void MCI_UnmapMsgWtoA(UINT msg, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MCI_SYSINFO:
|
||||||
|
{
|
||||||
|
DWORD_PTR *ptr = (DWORD_PTR *)dwParam2 - 1;
|
||||||
|
MCI_SYSINFO_PARMSW *mci_sysinfoW = (MCI_SYSINFO_PARMSW *)*ptr;
|
||||||
|
MCI_SYSINFO_PARMSA *mci_sysinfoA = (MCI_SYSINFO_PARMSA *)(ptr + 1);
|
||||||
|
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
mci_sysinfoW->dwNumber = mci_sysinfoA->dwNumber;
|
||||||
|
mci_sysinfoW->wDeviceType = mci_sysinfoA->wDeviceType;
|
||||||
|
MultiByteToWideChar(CP_ACP, 0,
|
||||||
|
mci_sysinfoA->lpstrReturn, mci_sysinfoA->dwRetSize,
|
||||||
|
mci_sysinfoW->lpstrReturn, mci_sysinfoW->dwRetSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
HeapFree(GetProcessHeap(), 0, mci_sysinfoA->lpstrReturn);
|
||||||
|
HeapFree(GetProcessHeap(), 0, ptr);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
FIXME("Message 0x%04x needs unmapping\n", msg);
|
FIXME("Message 0x%04x needs unmapping\n", msg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -980,7 +1024,7 @@ DWORD WINAPI mciSendCommandW(MCIDEVICEID wDevID, UINT wMsg, DWORD_PTR dwParam1,
|
||||||
}
|
}
|
||||||
ret = mciSendCommandA(wDevID, wMsg, dwParam1, dwParam2);
|
ret = mciSendCommandA(wDevID, wMsg, dwParam1, dwParam2);
|
||||||
if (mapped)
|
if (mapped)
|
||||||
MCI_UnmapMsgWtoA(wMsg, dwParam1, dwParam2);
|
MCI_UnmapMsgWtoA(wMsg, dwParam1, dwParam2, ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue