1a) fixes a too short memory allocation on 64bit (DRVCONFIGINFO is 20 byte large while only 16 bytes were allocated) 1b) incidentally, removes a bunch of GCC11 warnings (generated by 1a) 2) introduces DRVCONFIGINFOEX (note, in SDK, it's defined in mmiscapi.h; since it doesn't exist yet in Wine, I added the structure to mmsystem.h, where DRVCONFIGINFO already exists) 3) initializes the missing field
Note: my testing don't show on Win10's msacm32 that DRV_CONFIGURE uses the DRVCONFIGINFOEX structure. So, maybe (wild guess here), the extended structure is only used when the driver is linked to some hardware.
Signed-off-by: Eric Pouech eric.pouech@gmail.com
--- dlls/msacm32/driver.c | 18 +++++++++--------- include/mmsystem.h | 6 ++++++ 2 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/dlls/msacm32/driver.c b/dlls/msacm32/driver.c index a8d6f3cf6d7..036461800b1 100644 --- a/dlls/msacm32/driver.c +++ b/dlls/msacm32/driver.c @@ -400,7 +400,7 @@ LRESULT WINAPI acmDriverMessage(HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARA { PWINE_ACMDRIVERID padid; LRESULT lResult; - LPDRVCONFIGINFO pConfigInfo = NULL; + LPDRVCONFIGINFOEX pConfigInfo = NULL; LPWSTR section_name = NULL; LPWSTR alias_name = NULL;
@@ -425,16 +425,15 @@ LRESULT WINAPI acmDriverMessage(HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARA }
if (pAlias != NULL) { - /* DRVCONFIGINFO is only 12 bytes long, but native msacm - * reports a 16-byte structure to codecs, so allocate 16 bytes, - * just to be on the safe side. - */ - const unsigned int iStructSize = 16; - pConfigInfo = HeapAlloc(MSACM_hHeap, 0, iStructSize); + pConfigInfo = HeapAlloc(MSACM_hHeap, 0, sizeof(*pConfigInfo)); if (!pConfigInfo) { - ERR("OOM while supplying DRVCONFIGINFO for DRV_CONFIGURE, using NULL\n"); + ERR("OOM while supplying DRVCONFIGINFOEX for DRV_CONFIGURE, using NULL\n"); } else { - pConfigInfo->dwDCISize = iStructSize; + /* In some cases (seen in the 32bit world), a DRVCONFIGINFOEX struct is passed + * (with extended size) instead of the documented DRVCONFIGINFO. + * So, always pass a DRVCONFIGINFOEX to be one the safe side + */ + pConfigInfo->dwDCISize = sizeof(*pConfigInfo);
section_name = HeapAlloc(MSACM_hHeap, 0, sizeof(L"Drivers32")); if (section_name) lstrcpyW(section_name, L"Drivers32"); @@ -442,6 +441,7 @@ LRESULT WINAPI acmDriverMessage(HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARA alias_name = HeapAlloc(MSACM_hHeap, 0, (lstrlenW(pAlias) + 1) * sizeof(WCHAR)); if (alias_name) lstrcpyW(alias_name, pAlias); pConfigInfo->lpszDCIAliasName = alias_name; + pConfigInfo->dnDevNode = 0; /* FIXME */
if (pConfigInfo->lpszDCISectionName == NULL || pConfigInfo->lpszDCIAliasName == NULL) { HeapFree(MSACM_hHeap, 0, alias_name); diff --git a/include/mmsystem.h b/include/mmsystem.h index 2a0782d0cb9..5684ff20683 100644 --- a/include/mmsystem.h +++ b/include/mmsystem.h @@ -225,6 +225,12 @@ typedef struct tagDRVCONFIGINFO { LPCWSTR lpszDCIAliasName; } DRVCONFIGINFO, *LPDRVCONFIGINFO;
+typedef struct tagDRVCONFIGINFOEX { + DWORD dwDCISize; + LPCWSTR lpszDCISectionName; + LPCWSTR lpszDCIAliasName; + DWORD dnDevNode; +} DRVCONFIGINFOEX, *LPDRVCONFIGINFOEX;
LRESULT WINAPI DefDriverProc(DWORD_PTR,HDRVR,UINT,LPARAM,LPARAM); /* this sounds odd, but it's the way it is. OpenDriverA even disappeared
Signed-off-by: Andrew Eikum aeikum@codeweavers.com
On Fri, Feb 11, 2022 at 06:49:45PM +0100, Eric Pouech wrote:
1a) fixes a too short memory allocation on 64bit (DRVCONFIGINFO is 20 byte large while only 16 bytes were allocated) 1b) incidentally, removes a bunch of GCC11 warnings (generated by 1a) 2) introduces DRVCONFIGINFOEX (note, in SDK, it's defined in mmiscapi.h; since it doesn't exist yet in Wine, I added the structure to mmsystem.h, where DRVCONFIGINFO already exists) 3) initializes the missing field
Note: my testing don't show on Win10's msacm32 that DRV_CONFIGURE uses the DRVCONFIGINFOEX structure. So, maybe (wild guess here), the extended structure is only used when the driver is linked to some hardware.
Signed-off-by: Eric Pouech eric.pouech@gmail.com
dlls/msacm32/driver.c | 18 +++++++++--------- include/mmsystem.h | 6 ++++++ 2 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/dlls/msacm32/driver.c b/dlls/msacm32/driver.c index a8d6f3cf6d7..036461800b1 100644 --- a/dlls/msacm32/driver.c +++ b/dlls/msacm32/driver.c @@ -400,7 +400,7 @@ LRESULT WINAPI acmDriverMessage(HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARA { PWINE_ACMDRIVERID padid; LRESULT lResult;
LPDRVCONFIGINFO pConfigInfo = NULL;
LPDRVCONFIGINFOEX pConfigInfo = NULL; LPWSTR section_name = NULL; LPWSTR alias_name = NULL;
@@ -425,16 +425,15 @@ LRESULT WINAPI acmDriverMessage(HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARA }
if (pAlias != NULL) {
/* DRVCONFIGINFO is only 12 bytes long, but native msacm
* reports a 16-byte structure to codecs, so allocate 16 bytes,
* just to be on the safe side.
*/
const unsigned int iStructSize = 16;
pConfigInfo = HeapAlloc(MSACM_hHeap, 0, iStructSize);
pConfigInfo = HeapAlloc(MSACM_hHeap, 0, sizeof(*pConfigInfo)); if (!pConfigInfo) {
ERR("OOM while supplying DRVCONFIGINFO for DRV_CONFIGURE, using NULL\n");
ERR("OOM while supplying DRVCONFIGINFOEX for DRV_CONFIGURE, using NULL\n"); } else {
pConfigInfo->dwDCISize = iStructSize;
/* In some cases (seen in the 32bit world), a DRVCONFIGINFOEX struct is passed
* (with extended size) instead of the documented DRVCONFIGINFO.
* So, always pass a DRVCONFIGINFOEX to be one the safe side
*/
pConfigInfo->dwDCISize = sizeof(*pConfigInfo); section_name = HeapAlloc(MSACM_hHeap, 0, sizeof(L"Drivers32")); if (section_name) lstrcpyW(section_name, L"Drivers32");
@@ -442,6 +441,7 @@ LRESULT WINAPI acmDriverMessage(HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARA alias_name = HeapAlloc(MSACM_hHeap, 0, (lstrlenW(pAlias) + 1) * sizeof(WCHAR)); if (alias_name) lstrcpyW(alias_name, pAlias); pConfigInfo->lpszDCIAliasName = alias_name;
pConfigInfo->dnDevNode = 0; /* FIXME */ if (pConfigInfo->lpszDCISectionName == NULL || pConfigInfo->lpszDCIAliasName == NULL) { HeapFree(MSACM_hHeap, 0, alias_name);
diff --git a/include/mmsystem.h b/include/mmsystem.h index 2a0782d0cb9..5684ff20683 100644 --- a/include/mmsystem.h +++ b/include/mmsystem.h @@ -225,6 +225,12 @@ typedef struct tagDRVCONFIGINFO { LPCWSTR lpszDCIAliasName; } DRVCONFIGINFO, *LPDRVCONFIGINFO;
+typedef struct tagDRVCONFIGINFOEX {
- DWORD dwDCISize;
- LPCWSTR lpszDCISectionName;
- LPCWSTR lpszDCIAliasName;
- DWORD dnDevNode;
+} DRVCONFIGINFOEX, *LPDRVCONFIGINFOEX;
LRESULT WINAPI DefDriverProc(DWORD_PTR,HDRVR,UINT,LPARAM,LPARAM); /* this sounds odd, but it's the way it is. OpenDriverA even disappeared