https://git.reactos.org/?p=reactos.git;a=commitdiff;h=adc9bd48b7abe263b82dbcd9bfdb70c5bb4a9bbf

commit adc9bd48b7abe263b82dbcd9bfdb70c5bb4a9bbf
Author:     Eric Kohl <[email protected]>
AuthorDate: Thu Jun 6 19:08:43 2019 +0200
Commit:     Eric Kohl <[email protected]>
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,

Reply via email to