https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d57b0ef91e32e9ab160ade...
commit d57b0ef91e32e9ab160ade36cb1f8003fd810702 Author: Eric Kohl eric.kohl@reactos.org AuthorDate: Sun Nov 5 17:31:34 2017 +0100
[SETUPAPI] GetDeviceInstanceKeyPath: Fix temporary buffer allocation, add missing code paths and fix registry paths. This should fix parts of CORE-13944. --- dll/win32/setupapi/cfgmgr.c | 46 ++++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 15 deletions(-)
diff --git a/dll/win32/setupapi/cfgmgr.c b/dll/win32/setupapi/cfgmgr.c index ef7ba947c7..80b535c3da 100644 --- a/dll/win32/setupapi/cfgmgr.c +++ b/dll/win32/setupapi/cfgmgr.c @@ -213,6 +213,14 @@ GetDeviceInstanceKeyPath(
TRACE("GetDeviceInstanceKeyPath()\n");
+ /* Allocate a buffer for the device id */ + pszBuffer = MyMalloc(300 * sizeof(WCHAR)); + if (pszBuffer == NULL) + { + ERR("MyMalloc() failed\n"); + return CR_OUT_OF_MEMORY; + } + if (ulFlags & CM_REGISTRY_SOFTWARE) { /* Software Key Path */ @@ -229,7 +237,7 @@ GetDeviceInstanceKeyPath( L"%s\%s\%s\%s", L"System\CurrentControlSet\Hardware Profiles", L"Current", - L"System\CurrentControlSet\Control\Enum", + L"System\CurrentControlSet\Enum", pszBuffer); } else @@ -238,13 +246,30 @@ GetDeviceInstanceKeyPath( L"%s\%04lu\%s\%s", L"System\CurrentControlSet\Hardware Profiles", ulHardwareProfile, - L"System\CurrentControlSet\Control\Enum", + L"System\CurrentControlSet\Enum", pszBuffer); } } + else if (ulFlags & CM_REGISTRY_USER) + { + wsprintfW(pszKeyPath, + L"%s\%s", + L"System\CurrentControlSet\Enum", + pszDeviceInst); + + wcscpy(pszInstancePath, + L"Device Parameters"); + } else { - ret = CR_CALL_NOT_IMPLEMENTED; + SplitDeviceInstanceId(pszDeviceInst, + pszBuffer, + pszInstancePath); + + wsprintfW(pszKeyPath, + L"%s\%s", + L"System\CurrentControlSet\Enum", + pszBuffer); } } else @@ -253,15 +278,6 @@ GetDeviceInstanceKeyPath(
ulTransferLength = 300 * sizeof(WCHAR); ulLength = 300 * sizeof(WCHAR); - - pszBuffer = MyMalloc(ulTransferLength); - if (pszBuffer == NULL) - { - ERR("MyMalloc() failed\n"); - ret = CR_OUT_OF_MEMORY; - goto done; - } - ret = PNP_GetDeviceRegProp(BindingHandle, pszDeviceInst, CM_DRP_DRIVER, @@ -5288,13 +5304,13 @@ CM_Open_DevNode_Key_Ex( if (ret != CR_SUCCESS) goto done;
- TRACE("pszKeyPath: %S\n", pszKeyPath); - TRACE("pszInstancePath: %S\n", pszInstancePath); + ERR("pszKeyPath: %S\n", pszKeyPath); + ERR("pszInstancePath: %S\n", pszInstancePath);
wcscat(pszKeyPath, L"\"); wcscat(pszKeyPath, pszInstancePath);
- TRACE("pszKeyPath: %S\n", pszKeyPath); + ERR("pszKeyPath: %S\n", pszKeyPath);
if (hMachine == NULL) {