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

commit 6efb3cbe03b346ad2f250b8a7de3c504ef6a6d41
Author:     Eric Kohl <[email protected]>
AuthorDate: Sun May 17 19:37:49 2020 +0200
Commit:     Eric Kohl <[email protected]>
CommitDate: Sun May 17 20:04:26 2020 +0200

    [SETUPAPI] Implement CM_Get_Next_Res_Des_Ex() partially (WIP)
---
 dll/win32/setupapi/cfgmgr.c | 96 ++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 87 insertions(+), 9 deletions(-)

diff --git a/dll/win32/setupapi/cfgmgr.c b/dll/win32/setupapi/cfgmgr.c
index 3b341c5c620..fdbcc8cfb1b 100644
--- a/dll/win32/setupapi/cfgmgr.c
+++ b/dll/win32/setupapi/cfgmgr.c
@@ -61,7 +61,7 @@ typedef struct _LOG_CONF_INFO
 {
     ULONG ulMagic;
     DEVINST dnDevInst;
-    ULONG ulFlags;
+    ULONG ulType;
     ULONG ulTag;
 } LOG_CONF_INFO, *PLOG_CONF_INFO;
 
@@ -947,7 +947,7 @@ CM_Add_Empty_Log_Conf_Ex(
         {
             pLogConfInfo->ulMagic = LOG_CONF_MAGIC;
             pLogConfInfo->dnDevInst = dnDevInst;
-            pLogConfInfo->ulFlags = ulFlags;
+            pLogConfInfo->ulType = ulFlags;
             pLogConfInfo->ulTag = ulLogConfTag;
 
             *plcLogConf = (LOG_CONF)pLogConfInfo;
@@ -2353,8 +2353,11 @@ CM_Free_Log_Conf_Ex(
 
     RpcTryExcept
     {
-        ret = PNP_FreeLogConf(BindingHandle, lpDevInst, pLogConfInfo->ulFlags,
-                              pLogConfInfo->ulTag, 0);
+        ret = PNP_FreeLogConf(BindingHandle,
+                              lpDevInst,
+                              pLogConfInfo->ulType,
+                              pLogConfInfo->ulTag,
+                              0);
     }
     RpcExcept(EXCEPTION_EXECUTE_HANDLER)
     {
@@ -4646,7 +4649,7 @@ CM_Get_First_Log_Conf_Ex(
 
         pLogConfInfo->ulMagic = LOG_CONF_MAGIC;
         pLogConfInfo->dnDevInst = dnDevInst;
-        pLogConfInfo->ulFlags = ulFlags;
+        pLogConfInfo->ulType = ulFlags;
         pLogConfInfo->ulTag = ulTag;
 
         *plcLogConf = (LOG_CONF)pLogConfInfo;
@@ -5044,7 +5047,7 @@ CM_Get_Log_Conf_Priority_Ex(
     {
         ret = PNP_GetLogConfPriority(BindingHandle,
                                      lpDevInst,
-                                     pLogConfInfo->ulFlags,
+                                     pLogConfInfo->ulType,
                                      pLogConfInfo->ulTag,
                                      pPriority,
                                      0);
@@ -5132,7 +5135,7 @@ CM_Get_Next_Log_Conf_Ex(
     {
         ret = PNP_GetNextLogConf(BindingHandle,
                                  lpDevInst,
-                                 pLogConfInfo->ulFlags,
+                                 pLogConfInfo->ulType,
                                  pLogConfInfo->ulTag,
                                  &ulNewTag,
                                  0);
@@ -5154,7 +5157,7 @@ CM_Get_Next_Log_Conf_Ex(
 
         pNewLogConfInfo->ulMagic = LOG_CONF_MAGIC;
         pNewLogConfInfo->dnDevInst = pLogConfInfo->dnDevInst;
-        pNewLogConfInfo->ulFlags = pLogConfInfo->ulFlags;
+        pNewLogConfInfo->ulType = pLogConfInfo->ulType;
         pNewLogConfInfo->ulTag = ulNewTag;
 
         *plcLogConf = (LOG_CONF)pNewLogConfInfo;
@@ -5197,10 +5200,85 @@ CM_Get_Next_Res_Des_Ex(
     _In_ ULONG ulFlags,
     _In_opt_ HMACHINE hMachine)
 {
+    RPC_BINDING_HANDLE BindingHandle = NULL;
+    HSTRING_TABLE StringTable = NULL;
+    ULONG ulInTag, ulOutTag = 0;
+    ULONG ulInType, ulOutType = 0;
+    LPWSTR lpDevInst;
+    DEVINST dnDevInst;
+    CONFIGRET ret;
+
     FIXME("CM_Get_Next_Res_Des_Ex(%p %p %lu %p %lx %p)\n",
           prdResDes, rdResDes, ForResource, pResourceID, ulFlags, hMachine);
 
-    return CR_CALL_NOT_IMPLEMENTED;
+    if (prdResDes == NULL)
+        return CR_INVALID_POINTER;
+
+    if (IsValidLogConf((PLOG_CONF_INFO)rdResDes))
+    {
+        FIXME("LogConf found!\n");
+        dnDevInst = ((PLOG_CONF_INFO)rdResDes)->dnDevInst;
+        ulInTag = ((PLOG_CONF_INFO)rdResDes)->ulTag;
+        ulInType = ((PLOG_CONF_INFO)rdResDes)->ulType;
+    }
+#if 0
+    else if (IsValidResDes((PRES_DES_INFO)rdResDes))
+    {
+        FIXME("ResDes found!\n");
+        dnDevInst = ((PRES_DES_INFO)rdResDes)->dnDevInst;
+        ulInTag = ((PRES_DES_INFO)rdResDes)->ulTag;
+        ulInType = ((PRES_DES_INFO)rdResDes)->ulType;
+    }
+#endif
+    else
+    {
+        return CR_INVALID_RES_DES;
+    }
+
+    if (hMachine != NULL)
+    {
+        BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
+        if (BindingHandle == NULL)
+            return CR_FAILURE;
+
+        StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
+        if (StringTable == 0)
+            return CR_FAILURE;
+    }
+    else
+    {
+        if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
+            return CR_FAILURE;
+    }
+
+    lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst);
+    if (lpDevInst == NULL)
+        return CR_INVALID_DEVNODE;
+
+    RpcTryExcept
+    {
+        ret = PNP_GetNextResDes(BindingHandle,
+                                lpDevInst,
+                                ulInTag,
+                                ulInType,
+                                ForResource,
+                                0, /* unsigned long ulResourceTag, */
+                                &ulOutTag,
+                                &ulOutType,
+                                0);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        ret = RpcStatusToCmStatus(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    if (ret != CR_SUCCESS)
+        return ret;
+
+    /* FIXME: Create the ResDes handle */
+
+    return CR_SUCCESS;
 }
 
 

Reply via email to