https://git.reactos.org/?p=reactos.git;a=commitdiff;h=adc9bd48b7abe263b82db…
commit adc9bd48b7abe263b82dbcd9bfdb70c5bb4a9bbf
Author: Eric Kohl <eric.kohl(a)reactos.org>
AuthorDate: Thu Jun 6 19:08:43 2019 +0200
Commit: Eric Kohl <eric.kohl(a)reactos.org>
CommitDate: Thu Jun 6 19:08:43 2019 +0200
[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,