[PATCH 1/3] mmdevapi: support VT_CLSID in MMDevice_SetPropValue

Claire Girka wine at gitlab.winehq.org
Sat Jul 2 04:53:45 CDT 2022


From: Claire Girka <claire at sitedethib.com>

Note that while Windows also stores the property in that registry key, it
serializes it as binary instead of storing the string representation.
---
 dlls/mmdevapi/devenum.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/dlls/mmdevapi/devenum.c b/dlls/mmdevapi/devenum.c
index bfeb3f3ecd8..19caf36e8d3 100644
--- a/dlls/mmdevapi/devenum.c
+++ b/dlls/mmdevapi/devenum.c
@@ -225,6 +225,17 @@ static HRESULT MMDevice_SetPropValue(const GUID *devguid, DWORD flow, REFPROPERT
             ret = RegSetValueExW(regkey, buffer, 0, REG_SZ, (const BYTE*)pv->pwszVal, sizeof(WCHAR)*(1+lstrlenW(pv->pwszVal)));
             break;
         }
+        case VT_CLSID:
+        {
+            WCHAR guidstr[39 /* MAX_GUID_STRING_LEN */];
+            /* While this shouldn't be an issue in practice, that serialization is not how Windows do it.
+               Instead, Windows outputs VT_CLSID followed by 2 unknown bytes, a DWORD with value 1, then
+               the binary representation of the ID */
+            FIXME("Type VT_CLSID should be serialized as binary rather than as a string\n");
+            StringFromGUID2(pv->puuid, guidstr, ARRAY_SIZE(guidstr));
+            ret = RegSetValueExW(regkey, buffer, 0, REG_SZ, (const BYTE*)guidstr, sizeof(WCHAR) * 39);
+            break;
+        }
         default:
             ret = 0;
             FIXME("Unhandled type %u\n", pv->vt);
-- 
GitLab


https://gitlab.winehq.org/wine/wine/-/merge_requests/359



More information about the wine-devel mailing list