From adc9bd48b7abe263b82dbcd9bfdb70c5bb4a9bbf Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Thu, 6 Jun 2019 19:08:43 +0200 Subject: [PATCH] [SETUPAPI] GetDeviceInstanceKeyPath: Create a new driver instance property if needed and SEH-protect calls to umpnpmgr. --- dll/win32/setupapi/cfgmgr.c | 48 ++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/dll/win32/setupapi/cfgmgr.c b/dll/win32/setupapi/cfgmgr.c index 6af41f29103..8215d47ac63 100644 --- a/dll/win32/setupapi/cfgmgr.c +++ b/dll/win32/setupapi/cfgmgr.c @@ -239,18 +239,43 @@ GetDeviceInstanceKeyPath( ulTransferLength = 300 * sizeof(WCHAR); ulLength = 300 * sizeof(WCHAR); - ret = PNP_GetDeviceRegProp(BindingHandle, - pszDeviceInst, - CM_DRP_DRIVER, - &ulType, - (PVOID)pszBuffer, - &ulTransferLength, - &ulLength, - 0); + + RpcTryExcept + { + ret = PNP_GetDeviceRegProp(BindingHandle, + pszDeviceInst, + CM_DRP_DRIVER, + &ulType, + (PVOID)pszBuffer, + &ulTransferLength, + &ulLength, + 0); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ret = RpcStatusToCmStatus(RpcExceptionCode()); + } + RpcEndExcept; + if (ret != CR_SUCCESS) { - ERR("PNP_GetDeviceRegProp() failed (Error %lu)\n", ret); - goto done; + RpcTryExcept + { + ret = PNP_GetClassInstance(BindingHandle, + pszDeviceInst, + (PVOID)pszBuffer, + 300); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ret = RpcStatusToCmStatus(RpcExceptionCode()); + } + RpcEndExcept; + + if (ret != CR_SUCCESS) + { + goto done; + } } TRACE("szBuffer: %S\n", pszBuffer); @@ -809,7 +834,8 @@ CM_Add_Empty_Log_Conf( * CM_Add_Empty_Log_Conf_Ex [SETUPAPI.@] */ CONFIGRET -WINAPI CM_Add_Empty_Log_Conf_Ex( +WINAPI +CM_Add_Empty_Log_Conf_Ex( _Out_ PLOG_CONF plcLogConf, _In_ DEVINST dnDevInst, _In_ PRIORITY Priority,