[SETUPAPI] Fix a typo in CM_Query_Resource_Conflict_List.
[reactos.git] / dll / win32 / setupapi / cfgmgr.c
index 898b755..d33a649 100644 (file)
@@ -69,21 +69,33 @@ typedef struct _NOTIFY_DATA
 #define NOTIFY_MAGIC 0x44556677
 
 
-typedef struct _INTERNAL_RANGE_ELEMENT
+typedef struct _INTERNAL_RANGE
 {
-    struct _INTERNAL_RANGE_ELEMENT *Next;
-    ULONG ulDummy;
-} INTERNAL_RANGE_ELEMENT, *PINTERNAL_RANGE_ELEMENT;
+    LIST_ENTRY ListEntry;
+    struct _INTERNAL_RANGE_LIST *pRangeList;
+    DWORDLONG ullStart;
+    DWORDLONG ullEnd;
+} INTERNAL_RANGE, *PINTERNAL_RANGE;
 
 typedef struct _INTERNAL_RANGE_LIST
 {
     ULONG ulMagic;
-    PINTERNAL_RANGE_ELEMENT Current;
-    PINTERNAL_RANGE_ELEMENT First;
+    HANDLE hMutex;
+    LIST_ENTRY ListHead;
 } INTERNAL_RANGE_LIST, *PINTERNAL_RANGE_LIST;
 
 #define RANGE_LIST_MAGIC 0x33445566
 
+typedef struct _CONFLICT_DATA
+{
+    ULONG ulMagic;
+    PPNP_CONFLICT_LIST pConflictList;
+} CONFLICT_DATA, *PCONFLICT_DATA;
+
+#define CONFLICT_MAGIC 0x11225588
+
+
+/* FUNCTIONS ****************************************************************/
 
 static
 BOOL
@@ -225,19 +237,64 @@ GetDeviceInstanceKeyPath(
     {
         /* Software Key Path */
 
-        if (ulFlags & CM_REGISTRY_CONFIG)
+        ulTransferLength = 300 * sizeof(WCHAR);
+        ulLength = 300 * sizeof(WCHAR);
+
+        RpcTryExcept
         {
-            SplitDeviceInstanceId(pszDeviceInst,
-                                  pszBuffer,
-                                  pszInstancePath);
+            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)
+        {
+            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);
+
+        SplitDeviceInstanceId(pszBuffer,
+                              pszBuffer,
+                              pszInstancePath);
+
+        TRACE("szBuffer: %S\n", pszBuffer);
 
+        if (ulFlags & CM_REGISTRY_CONFIG)
+        {
             if (ulHardwareProfile == 0)
             {
                 wsprintfW(pszKeyPath,
                           L"%s\\%s\\%s\\%s",
                           L"System\\CurrentControlSet\\Hardware Profiles",
                           L"Current",
-                          L"System\\CurrentControlSet\\Enum",
+                          L"System\\CurrentControlSet\\Control\\Class",
                           pszBuffer);
             }
             else
@@ -246,29 +303,15 @@ GetDeviceInstanceKeyPath(
                           L"%s\\%04lu\\%s\\%s",
                           L"System\\CurrentControlSet\\Hardware Profiles",
                           ulHardwareProfile,
-                          L"System\\CurrentControlSet\\Enum",
+                          L"System\\CurrentControlSet\\Control\\Class",
                           pszBuffer);
             }
         }
-        else if (ulFlags & CM_REGISTRY_USER)
-        {
-            wsprintfW(pszKeyPath,
-                      L"%s\\%s",
-                      L"System\\CurrentControlSet\\Enum",
-                      pszDeviceInst);
-
-            wcscpy(pszInstancePath,
-                   L"Device Parameters");
-        }
         else
         {
-            SplitDeviceInstanceId(pszDeviceInst,
-                                  pszBuffer,
-                                  pszInstancePath);
-
             wsprintfW(pszKeyPath,
                       L"%s\\%s",
-                      L"System\\CurrentControlSet\\Enum",
+                      L"System\\CurrentControlSet\\Control\\Class",
                       pszBuffer);
         }
     }
@@ -276,39 +319,19 @@ GetDeviceInstanceKeyPath(
     {
         /* Hardware Key Path */
 
-        ulTransferLength = 300 * sizeof(WCHAR);
-        ulLength = 300 * sizeof(WCHAR);
-        ret = PNP_GetDeviceRegProp(BindingHandle,
-                                   pszDeviceInst,
-                                   CM_DRP_DRIVER,
-                                   &ulType,
-                                   (PVOID)pszBuffer,
-                                   &ulTransferLength,
-                                   &ulLength,
-                                   0);
-        if (ret != CR_SUCCESS)
-        {
-            ERR("PNP_GetDeviceRegProp() failed (Error %lu)\n", ret);
-            goto done;
-        }
-
-        TRACE("szBuffer: %S\n", pszBuffer);
-
-        SplitDeviceInstanceId(pszBuffer,
-                              pszBuffer,
-                              pszInstancePath);
-
-        TRACE("szBuffer: %S\n", pszBuffer);
-
         if (ulFlags & CM_REGISTRY_CONFIG)
         {
+            SplitDeviceInstanceId(pszDeviceInst,
+                                  pszBuffer,
+                                  pszInstancePath);
+
             if (ulHardwareProfile == 0)
             {
                 wsprintfW(pszKeyPath,
                           L"%s\\%s\\%s\\%s",
                           L"System\\CurrentControlSet\\Hardware Profiles",
                           L"Current",
-                          L"System\\CurrentControlSet\\Control\\Class",
+                          L"System\\CurrentControlSet\\Enum",
                           pszBuffer);
             }
             else
@@ -317,15 +340,29 @@ GetDeviceInstanceKeyPath(
                           L"%s\\%04lu\\%s\\%s",
                           L"System\\CurrentControlSet\\Hardware Profiles",
                           ulHardwareProfile,
-                          L"System\\CurrentControlSet\\Control\\Class",
+                          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
         {
+            SplitDeviceInstanceId(pszDeviceInst,
+                                  pszBuffer,
+                                  pszInstancePath);
+
             wsprintfW(pszKeyPath,
                       L"%s\\%s",
-                      L"System\\CurrentControlSet\\Control\\Class",
+                      L"System\\CurrentControlSet\\Enum",
                       pszBuffer);
         }
     }
@@ -338,6 +375,78 @@ done:
 }
 
 
+BOOL
+IsValidRangeList(
+    _In_opt_ PINTERNAL_RANGE_LIST pRangeList)
+{
+    BOOL bValid = TRUE;
+
+    if (pRangeList == NULL)
+        return FALSE;
+
+    _SEH2_TRY
+    {
+        if (pRangeList->ulMagic != RANGE_LIST_MAGIC)
+            bValid = FALSE;
+    }
+    _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+    {
+        bValid = FALSE;
+    }
+    _SEH2_END;
+
+    return bValid;
+}
+
+
+BOOL
+IsValidLogConf(
+    _In_opt_ PLOG_CONF_INFO pLogConfInfo)
+{
+    BOOL bValid = TRUE;
+
+    if (pLogConfInfo == NULL)
+        return FALSE;
+
+    _SEH2_TRY
+    {
+        if (pLogConfInfo->ulMagic != LOG_CONF_MAGIC)
+            bValid = FALSE;
+    }
+    _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+    {
+        bValid = FALSE;
+    }
+    _SEH2_END;
+
+    return bValid;
+}
+
+
+BOOL
+IsValidConflictData(
+    _In_opt_ PCONFLICT_DATA pConflictData)
+{
+    BOOL bValid = TRUE;
+
+    if (pConflictData == NULL)
+        return FALSE;
+
+    _SEH2_TRY
+    {
+        if (pConflictData->ulMagic != CONFLICT_MAGIC)
+            bValid = FALSE;
+    }
+    _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+    {
+        bValid = FALSE;
+    }
+    _SEH2_END;
+
+    return bValid;
+}
+
+
 /***********************************************************************
  * CMP_GetBlockedDriverInfo [SETUPAPI.@]
  */
@@ -715,6 +824,7 @@ CM_Add_Empty_Log_Conf(
 {
     TRACE("CM_Add_Empty_Log_Conf(%p %p %lu %lx)\n",
           plcLogConf, dnDevInst, Priority, ulFlags);
+
     return CM_Add_Empty_Log_Conf_Ex(plcLogConf, dnDevInst, Priority,
                                     ulFlags, NULL);
 }
@@ -724,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,
@@ -822,7 +933,8 @@ CM_Add_IDA(
     _In_ ULONG ulFlags)
 {
     TRACE("CM_Add_IDA(%p %s %lx)\n",
-          dnDevInst, pszID, ulFlags);
+          dnDevInst, debugstr_a(pszID), ulFlags);
+
     return CM_Add_ID_ExA(dnDevInst, pszID, ulFlags, NULL);
 }
 
@@ -839,6 +951,7 @@ CM_Add_IDW(
 {
     TRACE("CM_Add_IDW(%p %s %lx)\n",
           dnDevInst, debugstr_w(pszID), ulFlags);
+
     return CM_Add_ID_ExW(dnDevInst, pszID, ulFlags, NULL);
 }
 
@@ -858,7 +971,7 @@ CM_Add_ID_ExA(
     CONFIGRET ret;
 
     TRACE("CM_Add_ID_ExA(%p %s %lx %p)\n",
-          dnDevInst, pszID, ulFlags, hMachine);
+          dnDevInst, debugstr_a(pszID), ulFlags, hMachine);
 
     if (pSetupCaptureAndConvertAnsiArg(pszID, &pszIDW))
         return CR_INVALID_DATA;
@@ -950,9 +1063,55 @@ CM_Add_Range(
     _In_ RANGE_LIST rlh,
     _In_ ULONG ulFlags)
 {
+    PINTERNAL_RANGE_LIST pRangeList;
+    PINTERNAL_RANGE pRange;
+    CONFIGRET ret = CR_SUCCESS;
+
     FIXME("CM_Add_Range(%I64u %I64u %p %lx)\n",
           ullStartValue, ullEndValue, rlh, ulFlags);
-    return CR_CALL_NOT_IMPLEMENTED;
+
+    pRangeList = (PINTERNAL_RANGE_LIST)rlh;
+
+    if (!IsValidRangeList(pRangeList))
+        return CR_INVALID_RANGE_LIST;
+
+    if (ulFlags & ~CM_ADD_RANGE_BITS)
+        return CR_INVALID_FLAG;
+
+    if (ullEndValue < ullStartValue)
+        return CR_INVALID_RANGE;
+
+    /* Lock the range list */
+    WaitForSingleObject(pRangeList->hMutex, INFINITE);
+
+    /* Allocate the new range */
+    pRange = HeapAlloc(GetProcessHeap(), 0, sizeof(INTERNAL_RANGE));
+    if (pRange == NULL)
+    {
+        ret = CR_OUT_OF_MEMORY;
+        goto done;
+    }
+
+    pRange->pRangeList = pRangeList;
+    pRange->ullStart = ullStartValue;
+    pRange->ullEnd = ullEndValue;
+
+    /* Insert the range */
+    if (IsListEmpty(&pRangeList->ListHead))
+    {
+        InsertTailList(&pRangeList->ListHead, &pRange->ListEntry);
+    }
+    else
+    {
+        HeapFree(GetProcessHeap(), 0, pRange);
+        UNIMPLEMENTED;
+    }
+
+done:
+    /* Unlock the range list */
+    ReleaseMutex(pRangeList->hMutex);
+
+    return ret;
 }
 
 
@@ -965,12 +1124,13 @@ CM_Add_Res_Des(
     _Out_opt_ PRES_DES prdResDes,
     _In_ LOG_CONF lcLogConf,
     _In_ RESOURCEID ResourceID,
-    _In_ PCVOID ResourceData,
+    _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
     _In_ ULONG ResourceLen,
     _In_ ULONG ulFlags)
 {
     TRACE("CM_Add_Res_Des(%p %p %lu %p %lu %lx)\n",
           prdResDes, lcLogConf, ResourceID, ResourceData, ResourceLen, ulFlags);
+
     return CM_Add_Res_Des_Ex(prdResDes, lcLogConf, ResourceID, ResourceData,
                              ResourceLen, ulFlags, NULL);
 }
@@ -985,7 +1145,7 @@ CM_Add_Res_Des_Ex(
     _Out_opt_ PRES_DES prdResDes,
     _In_ LOG_CONF lcLogConf,
     _In_ RESOURCEID ResourceID,
-    _In_ PCVOID ResourceData,
+    _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
     _In_ ULONG ResourceLen,
     _In_ ULONG ulFlags,
     _In_opt_ HMACHINE hMachine)
@@ -1011,7 +1171,7 @@ CM_Connect_MachineA(
     CONFIGRET ret;
 
     TRACE("CM_Connect_MachineA(%s %p)\n",
-          UNCServerName, phMachine);
+          debugstr_a(UNCServerName), phMachine);
 
     if (UNCServerName == NULL || *UNCServerName == 0)
         return CM_Connect_MachineW(NULL, phMachine);
@@ -1109,6 +1269,7 @@ CM_Create_DevNodeA(
 {
     TRACE("CM_Create_DevNodeA(%p %s %p %lx)\n",
           pdnDevInst, debugstr_a(pDeviceID), dnParent, ulFlags);
+
     return CM_Create_DevNode_ExA(pdnDevInst, pDeviceID, dnParent,
                                  ulFlags, NULL);
 }
@@ -1127,6 +1288,7 @@ CM_Create_DevNodeW(
 {
     TRACE("CM_Create_DevNodeW(%p %s %p %lx)\n",
           pdnDevInst, debugstr_w(pDeviceID), dnParent, ulFlags);
+
     return CM_Create_DevNode_ExW(pdnDevInst, pDeviceID, dnParent,
                                  ulFlags, NULL);
 }
@@ -1258,7 +1420,8 @@ CM_Create_Range_List(
 {
     PINTERNAL_RANGE_LIST pRangeList = NULL;
 
-    FIXME("CM_Create_Range_List(%p %lx)\n", prlh, ulFlags);
+    FIXME("CM_Create_Range_List(%p %lx)\n",
+          prlh, ulFlags);
 
     if (ulFlags != 0)
         return CR_INVALID_FLAG;
@@ -1266,13 +1429,23 @@ CM_Create_Range_List(
     if (prlh == NULL)
         return CR_INVALID_POINTER;
 
+    /* Allocate the range list */
     pRangeList = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(INTERNAL_RANGE_LIST));
     if (pRangeList == NULL)
         return CR_OUT_OF_MEMORY;
 
+    /* Set the magic value */
     pRangeList->ulMagic = RANGE_LIST_MAGIC;
 
-    // TODO: More initialization
+    /* Initialize the mutex for synchonized access */
+    pRangeList->hMutex = CreateMutex(NULL, FALSE, NULL);
+    if (pRangeList->hMutex == NULL)
+    {
+        HeapFree(GetProcessHeap(), 0, pRangeList);
+        return CR_FAILURE;
+    }
+
+    InitializeListHead(&pRangeList->ListHead);
 
     *prlh = (RANGE_LIST)pRangeList;
 
@@ -1291,6 +1464,7 @@ CM_Delete_Class_Key(
 {
     TRACE("CM_Delete_Class_Key(%p %lx)\n",
           ClassGuid, ulFlags);
+
     return CM_Delete_Class_Key_Ex(ClassGuid, ulFlags, NULL);
 }
 
@@ -1309,7 +1483,7 @@ CM_Delete_Class_Key_Ex(
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
 
-    TRACE("CM_Delete_Class_Key_Ex(%p %lx %lx)\n",
+    TRACE("CM_Delete_Class_Key_Ex(%p %lx %p)\n",
           ClassGuid, ulFlags, hMachine);
 
     if (ClassGuid == NULL)
@@ -1361,6 +1535,7 @@ CM_Delete_DevNode_Key(
 {
     TRACE("CM_Delete_DevNode_Key(%p %lu %lx)\n",
           dnDevNode, ulHardwareProfile, ulFlags);
+
     return CM_Delete_DevNode_Key_Ex(dnDevNode, ulHardwareProfile, ulFlags,
                                     NULL);
 }
@@ -1397,6 +1572,56 @@ CM_Delete_Range(
 {
     FIXME("CM_Delete_Range(%I64u %I64u %p %lx)\n",
           ullStartValue, ullEndValue, rlh, ulFlags);
+
+    return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
+/***********************************************************************
+ * CM_Detect_Resource_Conflict [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Detect_Resource_Conflict(
+    _In_ DEVINST dnDevInst,
+    _In_ RESOURCEID ResourceID,
+    _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
+    _In_ ULONG ResourceLen,
+    _Out_ PBOOL pbConflictDetected,
+    _In_ ULONG ulFlags)
+{
+    TRACE("CM_Detect_Resource_Conflict(%p %lu %p %lu %p 0x%lx)\n",
+          dnDevInst, ResourceID, ResourceData, ResourceLen,
+          pbConflictDetected, ulFlags);
+
+    return CM_Detect_Resource_Conflict_Ex(dnDevInst,
+                                          ResourceID,
+                                          ResourceData,
+                                          ResourceLen,
+                                          pbConflictDetected,
+                                          ulFlags,
+                                          NULL);
+}
+
+
+/***********************************************************************
+ * CM_Detect_Resource_Conflict_Ex [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Detect_Resource_Conflict_Ex(
+    _In_ DEVINST dnDevInst,
+    _In_ RESOURCEID ResourceID,
+    _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
+    _In_ ULONG ResourceLen,
+    _Out_ PBOOL pbConflictDetected,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
+{
+    FIXME("CM_Detect_Resource_Conflict_Ex(%p %lu %p %lu %p 0x%lx %p)\n",
+          dnDevInst, ResourceID, ResourceData, ResourceLen,
+          pbConflictDetected, ulFlags, hMachine);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -1404,10 +1629,15 @@ CM_Delete_Range(
 /***********************************************************************
  * CM_Disable_DevNode [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Disable_DevNode(
-    DEVINST dnDevInst, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Disable_DevNode(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %lx\n", dnDevInst, ulFlags);
+    TRACE("CM_Disable_DevNode(%p %lx)\n",
+          dnDevInst, ulFlags);
+
     return CM_Disable_DevNode_Ex(dnDevInst, ulFlags, NULL);
 }
 
@@ -1415,15 +1645,20 @@ CONFIGRET WINAPI CM_Disable_DevNode(
 /***********************************************************************
  * CM_Disable_DevNode_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Disable_DevNode_Ex(
-    DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Disable_DevNode_Ex(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
     LPWSTR lpDevInst;
     CONFIGRET ret;
 
-    FIXME("%p %lx %p\n", dnDevInst, ulFlags, hMachine);
+    FIXME("CM_Disable_DevNode_Ex(%p %lx %p)\n",
+          dnDevInst, ulFlags, hMachine);
 
     if (!pSetupIsUserAdmin())
         return CR_ACCESS_DENIED;
@@ -1475,11 +1710,14 @@ CONFIGRET WINAPI CM_Disable_DevNode_Ex(
 /***********************************************************************
  * CM_Disconnect_Machine [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Disconnect_Machine(HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Disconnect_Machine(
+    _In_opt_ HMACHINE hMachine)
 {
     PMACHINE_INFO pMachine;
 
-    TRACE("%lx\n", hMachine);
+    TRACE("CM_Disconnect_Machine(%p)\n", hMachine);
 
     pMachine = (PMACHINE_INFO)hMachine;
     if (pMachine == NULL)
@@ -1512,6 +1750,7 @@ CM_Dup_Range_List(
 {
     FIXME("CM_Dup_Range_List(%p %p %lx)\n",
           rlhOld, rlhNew, ulFlags);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -1519,10 +1758,15 @@ CM_Dup_Range_List(
 /***********************************************************************
  * CM_Enable_DevNode [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Enable_DevNode(
-    DEVINST dnDevInst, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Enable_DevNode(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %lx\n", dnDevInst, ulFlags);
+    TRACE("CM_Enable_DevNode(%p %lx)\n",
+          dnDevInst, ulFlags);
+
     return CM_Enable_DevNode_Ex(dnDevInst, ulFlags, NULL);
 }
 
@@ -1530,15 +1774,20 @@ CONFIGRET WINAPI CM_Enable_DevNode(
 /***********************************************************************
  * CM_Enable_DevNode_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Enable_DevNode_Ex(
-    DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Enable_DevNode_Ex(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
     LPWSTR lpDevInst;
     CONFIGRET ret;
 
-    TRACE("%p %lx %p\n", dnDevInst, ulFlags, hMachine);
+    TRACE("CM_Enable_DevNode_Ex(%p %lx %p)\n",
+          dnDevInst, ulFlags, hMachine);
 
     if (!pSetupIsUserAdmin())
         return CR_ACCESS_DENIED;
@@ -1590,10 +1839,16 @@ CONFIGRET WINAPI CM_Enable_DevNode_Ex(
 /***********************************************************************
  * CM_Enumerate_Classes [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Enumerate_Classes(
-    ULONG ulClassIndex, LPGUID ClassGuid, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Enumerate_Classes(
+    _In_ ULONG ulClassIndex,
+    _Out_ LPGUID ClassGuid,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %p %lx\n", ulClassIndex, ClassGuid, ulFlags);
+    TRACE("CM_Enumerate_Classes(%lx %p %lx)\n",
+          ulClassIndex, ClassGuid, ulFlags);
+
     return CM_Enumerate_Classes_Ex(ulClassIndex, ClassGuid, ulFlags, NULL);
 }
 
@@ -1601,15 +1856,21 @@ CONFIGRET WINAPI CM_Enumerate_Classes(
 /***********************************************************************
  * CM_Enumerate_Classes_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Enumerate_Classes_Ex(
-    ULONG ulClassIndex, LPGUID ClassGuid, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Enumerate_Classes_Ex(
+    _In_ ULONG ulClassIndex,
+    _Out_ LPGUID ClassGuid,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     WCHAR szBuffer[MAX_GUID_STRING_LEN];
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret = CR_SUCCESS;
     ULONG ulLength = MAX_GUID_STRING_LEN;
 
-    TRACE("%lx %p %lx %p\n", ulClassIndex, ClassGuid, ulFlags, hMachine);
+    TRACE("CM_Enumerate_Classes_Ex(%lx %p %lx %p)\n",
+          ulClassIndex, ClassGuid, ulFlags, hMachine);
 
     if (ClassGuid == NULL)
         return CR_INVALID_POINTER;
@@ -1662,10 +1923,17 @@ CONFIGRET WINAPI CM_Enumerate_Classes_Ex(
 /***********************************************************************
  * CM_Enumerate_EnumeratorsA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Enumerate_EnumeratorsA(
-    ULONG ulEnumIndex, PCHAR Buffer, PULONG pulLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Enumerate_EnumeratorsA(
+    _In_ ULONG ulEnumIndex,
+    _Out_writes_(*pulLength) PCHAR Buffer,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lu %p %p %lx\n", ulEnumIndex, Buffer, pulLength, ulFlags);
+    TRACE("CM_Enumerate_EnumeratorsA(%lu %p %p %lx)\n",
+          ulEnumIndex, Buffer, pulLength, ulFlags);
+
     return CM_Enumerate_Enumerators_ExA(ulEnumIndex, Buffer, pulLength,
                                         ulFlags, NULL);
 }
@@ -1674,10 +1942,17 @@ CONFIGRET WINAPI CM_Enumerate_EnumeratorsA(
 /***********************************************************************
  * CM_Enumerate_EnumeratorsW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Enumerate_EnumeratorsW(
-    ULONG ulEnumIndex, PWCHAR Buffer, PULONG pulLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Enumerate_EnumeratorsW(
+    _In_ ULONG ulEnumIndex,
+    _Out_writes_(*pulLength) PWCHAR Buffer,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lu %p %p %lx\n", ulEnumIndex, Buffer, pulLength, ulFlags);
+    TRACE("CM_Enumerate_EnumeratorsW(%lu %p %p %lx)\n",
+          ulEnumIndex, Buffer, pulLength, ulFlags);
+
     return CM_Enumerate_Enumerators_ExW(ulEnumIndex, Buffer, pulLength,
                                         ulFlags, NULL);
 }
@@ -1686,17 +1961,22 @@ CONFIGRET WINAPI CM_Enumerate_EnumeratorsW(
 /***********************************************************************
  * CM_Enumerate_Enumerators_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Enumerate_Enumerators_ExA(
-    ULONG ulEnumIndex, PCHAR Buffer, PULONG pulLength, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Enumerate_Enumerators_ExA(
+    _In_ ULONG ulEnumIndex,
+    _Out_writes_(*pulLength) PCHAR Buffer,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     WCHAR szBuffer[MAX_DEVICE_ID_LEN];
     ULONG ulOrigLength;
     ULONG ulLength;
     CONFIGRET ret = CR_SUCCESS;
 
-    TRACE("%lu %p %p %lx %lx\n", ulEnumIndex, Buffer, pulLength, ulFlags,
-          hMachine);
+    TRACE("CM_Enumerate_Enumerators_ExA(%lu %p %p %lx %p)\n",
+          ulEnumIndex, Buffer, pulLength, ulFlags, hMachine);
 
     if (Buffer == NULL || pulLength == NULL)
         return CR_INVALID_POINTER;
@@ -1732,15 +2012,20 @@ CONFIGRET WINAPI CM_Enumerate_Enumerators_ExA(
 /***********************************************************************
  * CM_Enumerate_Enumerators_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Enumerate_Enumerators_ExW(
-    ULONG ulEnumIndex, PWCHAR Buffer, PULONG pulLength, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Enumerate_Enumerators_ExW(
+    _In_ ULONG ulEnumIndex,
+    _Out_writes_(*pulLength) PWCHAR Buffer,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
 
-    TRACE("%lu %p %p %lx %lx\n", ulEnumIndex, Buffer, pulLength, ulFlags,
-          hMachine);
+    TRACE("CM_Enumerate_Enumerators_ExW(%lu %p %p %lx %p)\n",
+          ulEnumIndex, Buffer, pulLength, ulFlags, hMachine);
 
     if (Buffer == NULL || pulLength == NULL)
         return CR_INVALID_POINTER;
@@ -1798,6 +2083,7 @@ CM_Find_Range(
 {
     FIXME("CM_Find_Range(%p %I64u %lu %I64u %I64u %p %lx)\n",
           pullStart, ullStart, ulLength, ullAlignment, ullEnd, rlh, ulFlags);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -1814,19 +2100,64 @@ CM_First_Range(
     _Out_ PRANGE_ELEMENT preElement,
     _In_ ULONG ulFlags)
 {
+    PINTERNAL_RANGE_LIST pRangeList;
+    PINTERNAL_RANGE pRange;
+    PLIST_ENTRY ListEntry;
+    CONFIGRET ret = CR_SUCCESS;
+
     FIXME("CM_First_Range(%p %p %p %p %lx)\n",
           rlh, pullStart, pullEnd, preElement, ulFlags);
-    return CR_CALL_NOT_IMPLEMENTED;
+
+    pRangeList = (PINTERNAL_RANGE_LIST)rlh;
+
+    if (!IsValidRangeList(pRangeList))
+        return CR_INVALID_RANGE_LIST;
+
+    if (pullStart == NULL || pullEnd == NULL || preElement == NULL)
+        return CR_INVALID_POINTER;
+
+    if (ulFlags != 0)
+        return CR_INVALID_FLAG;
+
+    /* Lock the range list */
+    WaitForSingleObject(pRangeList->hMutex, INFINITE);
+
+    /* Fail, if the list is empty */
+    if (IsListEmpty(&pRangeList->ListHead))
+    {
+        ret = CR_FAILURE;
+        goto done;
+    }
+
+    /* Get the first range */
+    ListEntry = pRangeList->ListHead.Flink;
+    pRange = CONTAINING_RECORD(ListEntry, INTERNAL_RANGE, ListEntry);
+
+    /* Return the range data */
+    *pullStart = pRange->ullStart;
+    *pullEnd = pRange->ullEnd;
+    *preElement = (RANGE_ELEMENT)pRange;
+
+done:
+    /* Unlock the range list */
+    ReleaseMutex(pRangeList->hMutex);
+
+    return ret;
 }
 
 
 /***********************************************************************
  * CM_Free_Log_Conf [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Free_Log_Conf(
-    LOG_CONF lcLogConfToBeFreed, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Free_Log_Conf(
+    _In_ LOG_CONF lcLogConfToBeFreed,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %lx\n", lcLogConfToBeFreed, ulFlags);
+    TRACE("CM_Free_Log_Conf(%lx %lx)\n",
+          lcLogConfToBeFreed, ulFlags);
+
     return CM_Free_Log_Conf_Ex(lcLogConfToBeFreed, ulFlags, NULL);
 }
 
@@ -1834,8 +2165,12 @@ CONFIGRET WINAPI CM_Free_Log_Conf(
 /***********************************************************************
  * CM_Free_Log_Conf_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Free_Log_Conf_Ex(
-    LOG_CONF lcLogConfToBeFreed, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Free_Log_Conf_Ex(
+    _In_ LOG_CONF lcLogConfToBeFreed,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
@@ -1843,13 +2178,14 @@ CONFIGRET WINAPI CM_Free_Log_Conf_Ex(
     PLOG_CONF_INFO pLogConfInfo;
     CONFIGRET ret;
 
-    TRACE("%lx %lx %lx\n", lcLogConfToBeFreed, ulFlags, hMachine);
+    TRACE("CM_Free_Log_Conf_Ex(%lx %lx %p)\n",
+          lcLogConfToBeFreed, ulFlags, hMachine);
 
     if (!pSetupIsUserAdmin())
         return CR_ACCESS_DENIED;
 
     pLogConfInfo = (PLOG_CONF_INFO)lcLogConfToBeFreed;
-    if (pLogConfInfo == NULL || pLogConfInfo->ulMagic != LOG_CONF_MAGIC)
+    if (!IsValidLogConf(pLogConfInfo))
         return CR_INVALID_LOG_CONF;
 
     if (ulFlags != 0)
@@ -1893,15 +2229,17 @@ CONFIGRET WINAPI CM_Free_Log_Conf_Ex(
 /***********************************************************************
  * CM_Free_Log_Conf_Handle [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Free_Log_Conf_Handle(
-    LOG_CONF lcLogConf)
+CONFIGRET
+WINAPI
+CM_Free_Log_Conf_Handle(
+    _In_ LOG_CONF lcLogConf)
 {
     PLOG_CONF_INFO pLogConfInfo;
 
-    TRACE("%lx\n", lcLogConf);
+    TRACE("CM_Free_Log_Conf_Handle(%lx)\n", lcLogConf);
 
     pLogConfInfo = (PLOG_CONF_INFO)lcLogConf;
-    if (pLogConfInfo == NULL || pLogConfInfo->ulMagic != LOG_CONF_MAGIC)
+    if (!IsValidLogConf(pLogConfInfo))
         return CR_INVALID_LOG_CONF;
 
     HeapFree(GetProcessHeap(), 0, pLogConfInfo);
@@ -1920,19 +2258,38 @@ CM_Free_Range_List(
     _In_ ULONG ulFlags)
 {
     PINTERNAL_RANGE_LIST pRangeList;
+    PINTERNAL_RANGE pRange;
+    PLIST_ENTRY ListEntry;
 
-    FIXME("CM_Free_Range_List(%p %lx)\n", RangeList, ulFlags);
+    FIXME("CM_Free_Range_List(%p %lx)\n",
+          RangeList, ulFlags);
 
     pRangeList = (PINTERNAL_RANGE_LIST)RangeList;
 
-    if (pRangeList == NULL || pRangeList->ulMagic != RANGE_LIST_MAGIC)
+    if (!IsValidRangeList(pRangeList))
         return CR_INVALID_RANGE_LIST;
 
     if (ulFlags != 0)
         return CR_INVALID_FLAG;
 
-    // TODO: Free the list of ranges
+    /* Lock the range list */
+    WaitForSingleObject(pRangeList->hMutex, INFINITE);
 
+    /* Free the list of ranges */
+    while (!IsListEmpty(&pRangeList->ListHead))
+    {
+        ListEntry = RemoveHeadList(&pRangeList->ListHead);
+        pRange = CONTAINING_RECORD(ListEntry, INTERNAL_RANGE, ListEntry);
+        HeapFree(GetProcessHeap(), 0, pRange);
+    }
+
+    /* Unlock the range list */
+    ReleaseMutex(pRangeList->hMutex);
+
+    /* Close the mutex */
+    CloseHandle(pRangeList->hMutex);
+
+    /* Free the range list */
     HeapFree(GetProcessHeap(), 0, pRangeList);
 
     return CR_SUCCESS;
@@ -1942,10 +2299,16 @@ CM_Free_Range_List(
 /***********************************************************************
  * CM_Free_Res_Des [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Free_Res_Des(
-   PRES_DES prdResDes, RES_DES rdResDes, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Free_Res_Des(
+    _Out_ PRES_DES prdResDes,
+    _In_ RES_DES rdResDes,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %lx\n", prdResDes, rdResDes, ulFlags);
+    TRACE("CM_Free_Res_Des(%p %p %lx)\n",
+          prdResDes, rdResDes, ulFlags);
+
     return CM_Free_Res_Des_Ex(prdResDes, rdResDes, ulFlags, NULL);
 }
 
@@ -1953,11 +2316,16 @@ CONFIGRET WINAPI CM_Free_Res_Des(
 /***********************************************************************
  * CM_Free_Res_Des_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Free_Res_Des_Ex(
-    PRES_DES prdResDes, RES_DES rdResDes, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Free_Res_Des_Ex(
+    _Out_ PRES_DES prdResDes,
+    _In_ RES_DES rdResDes,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
-    FIXME("%p %p %lx %lx\n", prdResDes, rdResDes, ulFlags, hMachine);
+    FIXME("CM_Free_Res_Des_Ex(%p %p %lx %p)\n",
+          prdResDes, rdResDes, ulFlags, hMachine);
 
     return CR_CALL_NOT_IMPLEMENTED;
 }
@@ -1966,22 +2334,56 @@ CONFIGRET WINAPI CM_Free_Res_Des_Ex(
 /***********************************************************************
  * CM_Free_Res_Des_Handle [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Free_Res_Des_Handle(
-    RES_DES rdResDes)
+CONFIGRET
+WINAPI
+CM_Free_Res_Des_Handle(
+    _In_ RES_DES rdResDes)
 {
-    FIXME("%p\n", rdResDes);
+    FIXME("CM_Free_Res_Des_Handle(%p)\n", rdResDes);
 
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
 
+/***********************************************************************
+ * CM_Free_Resource_Conflict_Handle [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Free_Resource_Conflict_Handle(
+    _In_ CONFLICT_LIST clConflictList)
+{
+    PCONFLICT_DATA pConflictData;
+
+    FIXME("CM_Free_Resource_Conflict_Handle(%p)\n",
+          clConflictList);
+
+    pConflictData = (PCONFLICT_DATA)clConflictList;
+    if (!IsValidConflictData(pConflictData))
+        return CR_INVALID_CONFLICT_LIST;
+
+    if (pConflictData->pConflictList != NULL)
+        MyFree(pConflictData->pConflictList);
+
+    MyFree(pConflictData);
+
+    return CR_SUCCESS;
+}
+
+
 /***********************************************************************
  * CM_Get_Child [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Child(
-    PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Child(
+    _Out_ PDEVINST pdnDevInst,
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %lx\n", pdnDevInst, dnDevInst, ulFlags);
+    TRACE("CM_Get_Child(%p %p %lx)\n",
+          pdnDevInst, dnDevInst, ulFlags);
+
     return CM_Get_Child_Ex(pdnDevInst, dnDevInst, ulFlags, NULL);
 }
 
@@ -1989,8 +2391,13 @@ CONFIGRET WINAPI CM_Get_Child(
 /***********************************************************************
  * CM_Get_Child_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Child_Ex(
-    PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Child_Ex(
+    _Out_ PDEVINST pdnDevInst,
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     WCHAR szRelatedDevInst[MAX_DEVICE_ID_LEN];
     RPC_BINDING_HANDLE BindingHandle = NULL;
@@ -1999,7 +2406,8 @@ CONFIGRET WINAPI CM_Get_Child_Ex(
     DWORD dwIndex, dwLength = MAX_DEVICE_ID_LEN;
     CONFIGRET ret;
 
-    TRACE("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine);
+    TRACE("CM_Get_Child_Ex(%p %lx %lx %p)\n",
+          pdnDevInst, dnDevInst, ulFlags, hMachine);
 
     if (pdnDevInst == NULL)
         return CR_INVALID_POINTER;
@@ -2065,11 +2473,17 @@ CONFIGRET WINAPI CM_Get_Child_Ex(
 /***********************************************************************
  * CM_Get_Class_Key_NameA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Class_Key_NameA(
-    LPGUID ClassGuid, LPSTR pszKeyName, PULONG pulLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Class_Key_NameA(
+    _In_ LPGUID ClassGuid,
+    _Out_writes_opt_(*pulLength) LPSTR pszKeyName,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %p %lx\n",
+    TRACE("CM_Get_Class_Key_NameA(%p %p %p %lx)\n",
           ClassGuid, pszKeyName, pulLength, ulFlags);
+
     return CM_Get_Class_Key_Name_ExA(ClassGuid, pszKeyName, pulLength,
                                      ulFlags, NULL);
 }
@@ -2078,11 +2492,17 @@ CONFIGRET WINAPI CM_Get_Class_Key_NameA(
 /***********************************************************************
  * CM_Get_Class_Key_NameW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Class_Key_NameW(
-    LPGUID ClassGuid, LPWSTR pszKeyName, PULONG pulLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Class_Key_NameW(
+    _In_ LPGUID ClassGuid,
+    _Out_writes_opt_(*pulLength) LPWSTR pszKeyName,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %p %lx\n",
+    TRACE("CM_Get_Class_Key_NameW(%p %p %p %lx)\n",
           ClassGuid, pszKeyName, pulLength, ulFlags);
+
     return CM_Get_Class_Key_Name_ExW(ClassGuid, pszKeyName, pulLength,
                                      ulFlags, NULL);
 }
@@ -2091,16 +2511,21 @@ CONFIGRET WINAPI CM_Get_Class_Key_NameW(
 /***********************************************************************
  * CM_Get_Class_Key_Name_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Class_Key_Name_ExA(
-    LPGUID ClassGuid, LPSTR pszKeyName, PULONG pulLength, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Class_Key_Name_ExA(
+    _In_ LPGUID ClassGuid,
+    _Out_writes_opt_(*pulLength) LPSTR pszKeyName,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     WCHAR szBuffer[MAX_GUID_STRING_LEN];
     CONFIGRET ret = CR_SUCCESS;
     ULONG ulLength;
     ULONG ulOrigLength;
 
-    TRACE("%p %p %p %lx %lx\n",
+    TRACE("CM_Get_Class_Key_Name_ExA(%p %p %p %lx %p)\n",
           ClassGuid, pszKeyName, pulLength, ulFlags, hMachine);
 
     if (ClassGuid == NULL || pszKeyName == NULL || pulLength == NULL)
@@ -2134,11 +2559,16 @@ CONFIGRET WINAPI CM_Get_Class_Key_Name_ExA(
 /***********************************************************************
  * CM_Get_Class_Key_Name_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Class_Key_Name_ExW(
-    LPGUID ClassGuid, LPWSTR pszKeyName, PULONG pulLength, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Class_Key_Name_ExW(
+    _In_ LPGUID ClassGuid,
+    _Out_writes_opt_(*pulLength) LPWSTR pszKeyName,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
-    TRACE("%p %p %p %lx %lx\n",
+    TRACE("CM_Get_Class_Key_Name_ExW(%p %p %p %lx %p)\n",
           ClassGuid, pszKeyName, pulLength, ulFlags, hMachine);
 
     if (ClassGuid == NULL || pszKeyName == NULL || pulLength == NULL)
@@ -2165,10 +2595,17 @@ CONFIGRET WINAPI CM_Get_Class_Key_Name_ExW(
 /***********************************************************************
  * CM_Get_Class_NameA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Class_NameA(
-    LPGUID ClassGuid, PCHAR Buffer, PULONG pulLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Class_NameA(
+    _In_ LPGUID ClassGuid,
+    _Out_writes_opt_(*pulLength) PCHAR Buffer,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %p %lx\n", ClassGuid, Buffer, pulLength, ulFlags);
+    TRACE("CM_Get_Class_NameA(%p %p %p %lx)\n",
+          ClassGuid, Buffer, pulLength, ulFlags);
+
     return CM_Get_Class_Name_ExA(ClassGuid, Buffer, pulLength, ulFlags,
                                  NULL);
 }
@@ -2177,10 +2614,17 @@ CONFIGRET WINAPI CM_Get_Class_NameA(
 /***********************************************************************
  * CM_Get_Class_NameW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Class_NameW(
-    LPGUID ClassGuid, PWCHAR Buffer, PULONG pulLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Class_NameW(
+    _In_ LPGUID ClassGuid,
+    _Out_writes_opt_(*pulLength) PWCHAR Buffer,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %p %lx\n", ClassGuid, Buffer, pulLength, ulFlags);
+    TRACE("CM_Get_Class_NameW(%p %p %p %lx)\n",
+          ClassGuid, Buffer, pulLength, ulFlags);
+
     return CM_Get_Class_Name_ExW(ClassGuid, Buffer, pulLength, ulFlags,
                                  NULL);
 }
@@ -2189,16 +2633,21 @@ CONFIGRET WINAPI CM_Get_Class_NameW(
 /***********************************************************************
  * CM_Get_Class_Name_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Class_Name_ExA(
-    LPGUID ClassGuid, PCHAR Buffer, PULONG pulLength, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Class_Name_ExA(
+    _In_ LPGUID ClassGuid,
+    _Out_writes_opt_(*pulLength) PCHAR Buffer,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     WCHAR szBuffer[MAX_CLASS_NAME_LEN];
     CONFIGRET ret = CR_SUCCESS;
     ULONG ulLength;
     ULONG ulOrigLength;
 
-    TRACE("%p %p %p %lx %lx\n",
+    TRACE("CM_Get_Class_Name_ExA(%p %p %p %lx %p)\n",
           ClassGuid, Buffer, pulLength, ulFlags, hMachine);
 
     if (ClassGuid == NULL || Buffer == NULL || pulLength == NULL)
@@ -2232,16 +2681,20 @@ CONFIGRET WINAPI CM_Get_Class_Name_ExA(
 /***********************************************************************
  * CM_Get_Class_Name_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI
+CONFIGRET
+WINAPI
 CM_Get_Class_Name_ExW(
-    LPGUID ClassGuid, PWCHAR Buffer, PULONG pulLength, ULONG ulFlags,
-    HMACHINE hMachine)
+    _In_ LPGUID ClassGuid,
+    _Out_writes_opt_(*pulLength) PWCHAR Buffer,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     WCHAR szGuidString[MAX_GUID_STRING_LEN];
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
 
-    TRACE("%p %p %p %lx %lx\n",
+    TRACE("CM_Get_Class_Name_ExW(%p %p %p %lx %p\n",
           ClassGuid, Buffer, pulLength, ulFlags, hMachine);
 
     if (ClassGuid == NULL || Buffer == NULL || pulLength == NULL)
@@ -2288,16 +2741,23 @@ CM_Get_Class_Name_ExW(
 /***********************************************************************
  * CM_Get_Class_Registry_PropertyA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Class_Registry_PropertyA(
-    LPGUID ClassGuid, ULONG ulProperty, PULONG pulRegDataType,
-    PVOID Buffer, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Class_Registry_PropertyA(
+    LPGUID ClassGuid,
+    ULONG ulProperty,
+    PULONG pulRegDataType,
+    PVOID Buffer,
+    PULONG pulLength,
+    ULONG ulFlags,
+    HMACHINE hMachine)
 {
     PWSTR BufferW = NULL;
     ULONG ulLength = 0;
     ULONG ulType;
     CONFIGRET ret;
 
-    TRACE("%p %lu %p %p %p %lx %lx\n",
+    TRACE("CM_Get_Class_Registry_PropertyA(%p %lu %p %p %p %lx %p)\n",
           ClassGuid, ulProperty, pulRegDataType, Buffer, pulLength,
           ulFlags, hMachine);
 
@@ -2360,9 +2820,16 @@ CONFIGRET WINAPI CM_Get_Class_Registry_PropertyA(
 /***********************************************************************
  * CM_Get_Class_Registry_PropertyW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Class_Registry_PropertyW(
-    LPGUID ClassGuid, ULONG ulProperty, PULONG pulRegDataType,
-    PVOID Buffer, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Class_Registry_PropertyW(
+    LPGUID ClassGuid,
+    ULONG ulProperty,
+    PULONG pulRegDataType,
+    PVOID Buffer,
+    PULONG pulLength,
+    ULONG ulFlags,
+    HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     WCHAR szGuidString[PNP_MAX_GUID_STRING_LEN + 1];
@@ -2370,7 +2837,7 @@ CONFIGRET WINAPI CM_Get_Class_Registry_PropertyW(
     ULONG ulTransferLength = 0;
     CONFIGRET ret;
 
-    TRACE("%p %lu %p %p %p %lx %lx\n",
+    TRACE("CM_Get_Class_Registry_PropertyW(%p %lu %p %p %p %lx %p)\n",
           ClassGuid, ulProperty, pulRegDataType, Buffer, pulLength,
           ulFlags, hMachine);
 
@@ -2432,10 +2899,16 @@ CONFIGRET WINAPI CM_Get_Class_Registry_PropertyW(
 /***********************************************************************
  * CM_Get_Depth [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Depth(
-    PULONG pulDepth, DEVINST dnDevInst, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Depth(
+    _Out_ PULONG pulDepth,
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %lx %lx\n", pulDepth, dnDevInst, ulFlags);
+    TRACE("CM_Get_Depth(%p %lx %lx)\n",
+          pulDepth, dnDevInst, ulFlags);
+
     return CM_Get_Depth_Ex(pulDepth, dnDevInst, ulFlags, NULL);
 }
 
@@ -2443,15 +2916,20 @@ CONFIGRET WINAPI CM_Get_Depth(
 /***********************************************************************
  * CM_Get_Depth_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Depth_Ex(
-    PULONG pulDepth, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Depth_Ex(
+    _Out_ PULONG pulDepth,
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
     LPWSTR lpDevInst;
     CONFIGRET ret;
 
-    TRACE("%p %lx %lx %lx\n",
+    TRACE("CM_Get_Depth_Ex(%p %lx %lx %p)\n",
           pulDepth, dnDevInst, ulFlags, hMachine);
 
     if (pulDepth == NULL)
@@ -2503,12 +2981,20 @@ CONFIGRET WINAPI CM_Get_Depth_Ex(
 /***********************************************************************
  * CM_Get_DevNode_Custom_PropertyA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_DevNode_Custom_PropertyA(
-    DEVINST dnDevInst, PCSTR pszCustomPropertyName, PULONG pulRegDataType,
-    PVOID Buffer, PULONG pulLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Custom_PropertyA(
+    _In_ DEVINST dnDevInst,
+    _In_ PCSTR pszCustomPropertyName,
+    _Out_opt_ PULONG pulRegDataType,
+    _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %s %p %p %p %lx\n", dnDevInst, pszCustomPropertyName,
-          pulRegDataType, Buffer, pulLength, ulFlags);
+    TRACE("CM_Get_DevNode_Custom_PropertyA(%lx %s %p %p %p %lx)\n",
+          dnDevInst, pszCustomPropertyName, pulRegDataType,
+          Buffer, pulLength, ulFlags);
+
     return CM_Get_DevNode_Custom_Property_ExA(dnDevInst, pszCustomPropertyName,
                                               pulRegDataType, Buffer,
                                               pulLength, ulFlags, NULL);
@@ -2518,12 +3004,20 @@ CONFIGRET WINAPI CM_Get_DevNode_Custom_PropertyA(
 /***********************************************************************
  * CM_Get_DevNode_Custom_PropertyW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_DevNode_Custom_PropertyW(
-    DEVINST dnDevInst, PCWSTR pszCustomPropertyName, PULONG pulRegDataType,
-    PVOID Buffer, PULONG pulLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Custom_PropertyW(
+    _In_ DEVINST dnDevInst,
+    _In_ PCWSTR pszCustomPropertyName,
+    _Out_opt_ PULONG pulRegDataType,
+    _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %s %p %p %p %lx\n", dnDevInst, debugstr_w(pszCustomPropertyName),
-          pulRegDataType, Buffer, pulLength, ulFlags);
+    TRACE("CM_Get_DevNode_Custom_PropertyW(%lx %s %p %p %p %lx)\n",
+          dnDevInst, debugstr_w(pszCustomPropertyName), pulRegDataType,
+          Buffer, pulLength, ulFlags);
+
     return CM_Get_DevNode_Custom_Property_ExW(dnDevInst, pszCustomPropertyName,
                                               pulRegDataType, Buffer,
                                               pulLength, ulFlags, NULL);
@@ -2533,9 +3027,16 @@ CONFIGRET WINAPI CM_Get_DevNode_Custom_PropertyW(
 /***********************************************************************
  * CM_Get_DevNode_Custom_Property_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_DevNode_Custom_Property_ExA(
-    DEVINST dnDevInst, PCSTR pszCustomPropertyName, PULONG pulRegDataType,
-    PVOID Buffer, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Custom_Property_ExA(
+    _In_ DEVINST dnDevInst,
+    _In_ PCSTR pszCustomPropertyName,
+    _Out_opt_ PULONG pulRegDataType,
+    _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     LPWSTR pszPropertyNameW = NULL;
     PVOID BufferW;
@@ -2543,8 +3044,9 @@ CONFIGRET WINAPI CM_Get_DevNode_Custom_Property_ExA(
     ULONG ulDataType = REG_NONE;
     CONFIGRET ret;
 
-    TRACE("%lx %s %p %p %p %lx %p\n", dnDevInst, pszCustomPropertyName,
-          pulRegDataType, Buffer, pulLength, ulFlags, hMachine);
+    TRACE("CM_Get_DevNode_Custom_Property_ExA(%lx %s %p %p %p %lx %p)\n",
+          dnDevInst, pszCustomPropertyName, pulRegDataType,
+          Buffer, pulLength, ulFlags, hMachine);
 
     if (!pulLength)
         return CR_INVALID_POINTER;
@@ -2613,9 +3115,16 @@ CONFIGRET WINAPI CM_Get_DevNode_Custom_Property_ExA(
 /***********************************************************************
  * CM_Get_DevNode_Custom_Property_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_DevNode_Custom_Property_ExW(
-    DEVINST dnDevInst, PCWSTR pszCustomPropertyName, PULONG pulRegDataType,
-    PVOID Buffer, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Custom_Property_ExW(
+    _In_ DEVINST dnDevInst,
+    _In_ PCWSTR pszCustomPropertyName,
+    _Out_opt_ PULONG pulRegDataType,
+    _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
@@ -2624,9 +3133,9 @@ CONFIGRET WINAPI CM_Get_DevNode_Custom_Property_ExW(
     ULONG ulTransferLength;
     CONFIGRET ret = CR_SUCCESS;
 
-    TRACE("%lx %s %p %p %p %lx %p\n", dnDevInst,
-          debugstr_w(pszCustomPropertyName), pulRegDataType, Buffer,
-          pulLength, ulFlags, hMachine);
+    TRACE("CM_Get_DevNode_Custom_Property_ExW(%lx %s %p %p %p %lx %p)\n",
+          dnDevInst, debugstr_w(pszCustomPropertyName), pulRegDataType,
+          Buffer, pulLength, ulFlags, hMachine);
 
     if (dnDevInst == 0)
         return CR_INVALID_DEVNODE;
@@ -2691,11 +3200,17 @@ CONFIGRET WINAPI CM_Get_DevNode_Custom_Property_ExW(
 /***********************************************************************
  * CM_Get_DevNode_Registry_PropertyA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyA(
-    DEVINST dnDevInst, ULONG ulProperty, PULONG pulRegDataType,
-    PVOID Buffer, PULONG pulLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Registry_PropertyA(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulProperty,
+    _Out_opt_ PULONG pulRegDataType,
+    _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %lu %p %p %p %lx\n",
+    TRACE("CM_Get_DevNode_Registry_PropertyA(%lx %lu %p %p %p %lx)\n",
           dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags);
 
     return CM_Get_DevNode_Registry_Property_ExA(dnDevInst, ulProperty,
@@ -2707,11 +3222,17 @@ CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyA(
 /***********************************************************************
  * CM_Get_DevNode_Registry_PropertyW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyW(
-    DEVINST dnDevInst, ULONG ulProperty, PULONG pulRegDataType,
-    PVOID Buffer, PULONG pulLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Registry_PropertyW(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulProperty,
+    _Out_opt_ PULONG pulRegDataType,
+    _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %lu %p %p %p %lx\n",
+    TRACE("CM_Get_DevNode_Registry_PropertyW(%lx %lu %p %p %p %lx)\n",
           dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength, ulFlags);
 
     return CM_Get_DevNode_Registry_Property_ExW(dnDevInst, ulProperty,
@@ -2723,16 +3244,23 @@ CONFIGRET WINAPI CM_Get_DevNode_Registry_PropertyW(
 /***********************************************************************
  * CM_Get_DevNode_Registry_Property_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExA(
-    DEVINST dnDevInst, ULONG ulProperty, PULONG pulRegDataType,
-    PVOID Buffer, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Registry_Property_ExA(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulProperty,
+    _Out_opt_ PULONG pulRegDataType,
+    _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     PVOID BufferW;
     ULONG LengthW;
     ULONG ulDataType = REG_NONE;
     CONFIGRET ret;
 
-    TRACE("%lx %lu %p %p %p %lx %lx\n",
+    TRACE("CM_Get_DevNode_Registry_Property_ExA(%lx %lu %p %p %p %lx %p)\n",
           dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength,
           ulFlags, hMachine);
 
@@ -2796,9 +3324,16 @@ CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExA(
 /***********************************************************************
  * CM_Get_DevNode_Registry_Property_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExW(
-    DEVINST dnDevInst, ULONG ulProperty, PULONG pulRegDataType,
-    PVOID Buffer, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Registry_Property_ExW(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulProperty,
+    _Out_opt_ PULONG pulRegDataType,
+    _Out_writes_bytes_opt_(*pulLength) PVOID Buffer,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
@@ -2807,7 +3342,7 @@ CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExW(
     ULONG ulDataType = REG_NONE;
     ULONG ulTransferLength = 0;
 
-    TRACE("%lx %lu %p %p %p %lx %lx\n",
+    TRACE("CM_Get_DevNode_Registry_Property_ExW(%lx %lu %p %p %p %lx %p)\n",
           dnDevInst, ulProperty, pulRegDataType, Buffer, pulLength,
           ulFlags, hMachine);
 
@@ -2882,12 +3417,17 @@ CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExW(
 /***********************************************************************
  * CM_Get_DevNode_Status [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_DevNode_Status(
-    PULONG pulStatus, PULONG pulProblemNumber, DEVINST dnDevInst,
-    ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_DevNode_Status(
+    _Out_ PULONG pulStatus,
+    _Out_ PULONG pulProblemNumber,
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %lx %lx\n",
+    TRACE("CM_Get_DevNode_Status(%p %p %lx %lx)\n",
           pulStatus, pulProblemNumber, dnDevInst, ulFlags);
+
     return CM_Get_DevNode_Status_Ex(pulStatus, pulProblemNumber, dnDevInst,
                                     ulFlags, NULL);
 }
@@ -2896,17 +3436,21 @@ CONFIGRET WINAPI CM_Get_DevNode_Status(
 /***********************************************************************
  * CM_Get_DevNode_Status_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI
+CONFIGRET
+WINAPI
 CM_Get_DevNode_Status_Ex(
-    PULONG pulStatus, PULONG pulProblemNumber, DEVINST dnDevInst,
-    ULONG ulFlags, HMACHINE hMachine)
+    _Out_ PULONG pulStatus,
+    _Out_ PULONG pulProblemNumber,
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
     LPWSTR lpDevInst;
     CONFIGRET ret;
 
-    TRACE("%p %p %lx %lx %lx\n",
+    TRACE("CM_Get_DevNode_Status_Ex(%p %p %lx %lx %p)\n",
           pulStatus, pulProblemNumber, dnDevInst, ulFlags, hMachine);
 
     if (pulStatus == NULL || pulProblemNumber == NULL)
@@ -2959,11 +3503,17 @@ CM_Get_DevNode_Status_Ex(
 /***********************************************************************
  * CM_Get_Device_IDA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_IDA(
-    DEVINST dnDevInst, PCHAR Buffer, ULONG BufferLen, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Device_IDA(
+    _In_ DEVINST dnDevInst,
+    _Out_writes_(BufferLen) PCHAR Buffer,
+    _In_ ULONG BufferLen,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %p %ld %ld\n",
+    TRACE("CM_Get_Device_IDA(%lx %p %lu %lx)\n",
           dnDevInst, Buffer, BufferLen, ulFlags);
+
     return CM_Get_Device_ID_ExA(dnDevInst, Buffer, BufferLen, ulFlags, NULL);
 }
 
@@ -2971,11 +3521,17 @@ CONFIGRET WINAPI CM_Get_Device_IDA(
 /***********************************************************************
  * CM_Get_Device_IDW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_IDW(
-    DEVINST dnDevInst, PWCHAR Buffer, ULONG BufferLen, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Device_IDW(
+    _In_ DEVINST dnDevInst,
+    _Out_writes_(BufferLen) PWCHAR Buffer,
+    _In_ ULONG BufferLen,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %p %ld %ld\n",
+    TRACE("CM_Get_Device_IDW(%lx %p %lu %lx)\n",
           dnDevInst, Buffer, BufferLen, ulFlags);
+
     return CM_Get_Device_ID_ExW(dnDevInst, Buffer, BufferLen, ulFlags, NULL);
 }
 
@@ -2983,14 +3539,19 @@ CONFIGRET WINAPI CM_Get_Device_IDW(
 /***********************************************************************
  * CM_Get_Device_ID_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_ID_ExA(
-    DEVINST dnDevInst, PCHAR Buffer, ULONG BufferLen, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_ExA(
+    _In_ DEVINST dnDevInst,
+    _Out_writes_(BufferLen) PCHAR Buffer,
+    _In_ ULONG BufferLen,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     WCHAR szBufferW[MAX_DEVICE_ID_LEN];
     CONFIGRET ret = CR_SUCCESS;
 
-    TRACE("%lx %p %ld %ld %lx\n",
+    TRACE("CM_Get_Device_ID_ExA(%lx %p %lu %lx %p)\n",
           dnDevInst, Buffer, BufferLen, ulFlags, hMachine);
 
     if (Buffer == NULL)
@@ -3021,13 +3582,18 @@ CONFIGRET WINAPI CM_Get_Device_ID_ExA(
 /***********************************************************************
  * CM_Get_Device_ID_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_ID_ExW(
-    DEVINST dnDevInst, PWCHAR Buffer, ULONG BufferLen, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_ExW(
+    _In_ DEVINST dnDevInst,
+    _Out_writes_(BufferLen) PWCHAR Buffer,
+    _In_ ULONG BufferLen,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     HSTRING_TABLE StringTable = NULL;
 
-    TRACE("%lx %p %ld %ld %lx\n",
+    TRACE("CM_Get_Device_ID_ExW(%lx %p %lu %lx %p)\n",
           dnDevInst, Buffer, BufferLen, ulFlags, hMachine);
 
     if (dnDevInst == 0)
@@ -3064,10 +3630,17 @@ CONFIGRET WINAPI CM_Get_Device_ID_ExW(
 /***********************************************************************
  * CM_Get_Device_ID_ListA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_ID_ListA(
-    PCSTR pszFilter, PCHAR Buffer, ULONG BufferLen, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_ListA(
+    _In_ PCSTR pszFilter,
+    _Out_writes_(BufferLen) PCHAR Buffer,
+    _In_ ULONG BufferLen,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %ld %ld\n", pszFilter, Buffer, BufferLen, ulFlags);
+    TRACE("CM_Get_Device_ID_ListA(%p %p %lu %lx)\n",
+          pszFilter, Buffer, BufferLen, ulFlags);
+
     return CM_Get_Device_ID_List_ExA(pszFilter, Buffer, BufferLen,
                                      ulFlags, NULL);
 }
@@ -3076,10 +3649,17 @@ CONFIGRET WINAPI CM_Get_Device_ID_ListA(
 /***********************************************************************
  * CM_Get_Device_ID_ListW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_ID_ListW(
-    PCWSTR pszFilter, PWCHAR Buffer, ULONG BufferLen, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_ListW(
+    _In_ PCWSTR pszFilter,
+    _Out_writes_(BufferLen) PWCHAR Buffer,
+    _In_ ULONG BufferLen,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %ld %ld\n", pszFilter, Buffer, BufferLen, ulFlags);
+    TRACE("CM_Get_Device_ID_ListW(%p %p %lu %lx)\n",
+          pszFilter, Buffer, BufferLen, ulFlags);
+
     return CM_Get_Device_ID_List_ExW(pszFilter, Buffer, BufferLen,
                                      ulFlags, NULL);
 }
@@ -3088,15 +3668,20 @@ CONFIGRET WINAPI CM_Get_Device_ID_ListW(
 /***********************************************************************
  * CM_Get_Device_ID_List_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_ID_List_ExA(
-    PCSTR pszFilter, PCHAR Buffer, ULONG BufferLen, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_ExA(
+    _In_ PCSTR pszFilter,
+    _Out_writes_(BufferLen) PCHAR Buffer,
+    _In_ ULONG BufferLen,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     LPWSTR BufferW = NULL;
     LPWSTR pszFilterW = NULL;
     CONFIGRET ret = CR_SUCCESS;
 
-    TRACE("%p %p %ld %ld %lx\n",
+    TRACE("CM_Get_Device_ID_List_ExA(%p %p %lu %lx %p)\n",
           pszFilter, Buffer, BufferLen, ulFlags, hMachine);
 
     BufferW = MyMalloc(BufferLen * sizeof(WCHAR));
@@ -3148,14 +3733,19 @@ Done:
 /***********************************************************************
  * CM_Get_Device_ID_List_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_ID_List_ExW(
-    PCWSTR pszFilter, PWCHAR Buffer, ULONG BufferLen, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_ExW(
+    _In_ PCWSTR pszFilter,
+    _Out_writes_(BufferLen) PWCHAR Buffer,
+    _In_ ULONG BufferLen,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
 
-    TRACE("%p %p %ld %ld %lx\n",
+    TRACE("CM_Get_Device_ID_List_ExW(%p %p %lu %lx %p)\n",
           pszFilter, Buffer, BufferLen, ulFlags, hMachine);
 
     if (Buffer == NULL || BufferLen == 0)
@@ -3199,10 +3789,16 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_ExW(
 /***********************************************************************
  * CM_Get_Device_ID_List_SizeA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_ID_List_SizeA(
-    PULONG pulLen, PCSTR pszFilter, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_SizeA(
+    _Out_ PULONG pulLen,
+    _In_opt_ PCSTR pszFilter,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %s %ld\n", pulLen, pszFilter, ulFlags);
+    TRACE("CM_Get_Device_ID_List_SizeA(%p %s %lx)\n",
+          pulLen, debugstr_a(pszFilter), ulFlags);
+
     return CM_Get_Device_ID_List_Size_ExA(pulLen, pszFilter, ulFlags, NULL);
 }
 
@@ -3210,10 +3806,16 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_SizeA(
 /***********************************************************************
  * CM_Get_Device_ID_List_SizeW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_ID_List_SizeW(
-    PULONG pulLen, PCWSTR pszFilter, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_SizeW(
+    _Out_ PULONG pulLen,
+    _In_opt_ PCWSTR pszFilter,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %s %ld\n", pulLen, debugstr_w(pszFilter), ulFlags);
+    TRACE("CM_Get_Device_ID_List_SizeW(%p %s %lx)\n",
+          pulLen, debugstr_w(pszFilter), ulFlags);
+
     return CM_Get_Device_ID_List_Size_ExW(pulLen, pszFilter, ulFlags, NULL);
 }
 
@@ -3221,13 +3823,19 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_SizeW(
 /***********************************************************************
  * CM_Get_Device_ID_List_Size_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExA(
-    PULONG pulLen, PCSTR pszFilter, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_Size_ExA(
+    _Out_ PULONG pulLen,
+    _In_opt_ PCSTR pszFilter,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     LPWSTR pszFilterW = NULL;
     CONFIGRET ret = CR_SUCCESS;
 
-    FIXME("%p %s %lx %lx\n", pulLen, pszFilter, ulFlags, hMachine);
+    FIXME("CM_Get_Device_ID_List_Size_ExA(%p %s %lx %p)\n",
+          pulLen, debugstr_a(pszFilter), ulFlags, hMachine);
 
     if (pszFilter == NULL)
     {
@@ -3256,13 +3864,19 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExA(
 /***********************************************************************
  * CM_Get_Device_ID_List_Size_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExW(
-    PULONG pulLen, PCWSTR pszFilter, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_Size_ExW(
+    _Out_ PULONG pulLen,
+    _In_opt_ PCWSTR pszFilter,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
 
-    FIXME("%p %s %ld %lx\n", pulLen, debugstr_w(pszFilter), ulFlags, hMachine);
+    FIXME("CM_Get_Device_ID_List_Size_ExW(%p %s %lx %p)\n",
+          pulLen, debugstr_w(pszFilter), ulFlags, hMachine);
 
     if (pulLen == NULL)
         return CR_INVALID_POINTER;
@@ -3304,10 +3918,16 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExW(
 /***********************************************************************
  * CM_Get_Device_ID_Size [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_ID_Size(
-    PULONG pulLen, DEVINST dnDevInst, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_Size(
+    _Out_ PULONG pulLen,
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %lx %lx\n", pulLen, dnDevInst, ulFlags);
+    TRACE("CM_Get_Device_ID_Size(%p %lx %lx)\n",
+          pulLen, dnDevInst, ulFlags);
+
     return CM_Get_Device_ID_Size_Ex(pulLen, dnDevInst, ulFlags, NULL);
 }
 
@@ -3315,13 +3935,19 @@ CONFIGRET WINAPI CM_Get_Device_ID_Size(
 /***********************************************************************
  * CM_Get_Device_ID_Size_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_ID_Size_Ex(
-    PULONG pulLen, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_Size_Ex(
+    _Out_ PULONG pulLen,
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     HSTRING_TABLE StringTable = NULL;
     LPWSTR DeviceId;
 
-    TRACE("%p %lx %lx %lx\n", pulLen, dnDevInst, ulFlags, hMachine);
+    TRACE("CM_Get_Device_ID_Size_Ex(%p %lx %lx %p)\n",
+          pulLen, dnDevInst, ulFlags, hMachine);
 
     if (pulLen == NULL)
         return CR_INVALID_POINTER;
@@ -3360,11 +3986,17 @@ CONFIGRET WINAPI CM_Get_Device_ID_Size_Ex(
 /***********************************************************************
  * CM_Get_Device_Interface_AliasA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_Interface_AliasA(
-    LPCSTR pszDeviceInterface, LPGUID AliasInterfaceGuid,
-    LPSTR pszAliasDeviceInterface, PULONG pulLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_AliasA(
+    _In_ LPCSTR pszDeviceInterface,
+    _In_ LPGUID AliasInterfaceGuid,
+    _Out_writes_(*pulLength) LPSTR pszAliasDeviceInterface,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %p %p %lu\n", pszDeviceInterface, AliasInterfaceGuid,
+    TRACE("CM_Get_Device_Interface_AliasA(%p %p %p %p %lx)\n",
+          pszDeviceInterface, AliasInterfaceGuid,
           pszAliasDeviceInterface, pulLength, ulFlags);
 
     return CM_Get_Device_Interface_Alias_ExA(pszDeviceInterface,
@@ -3376,11 +4008,17 @@ CONFIGRET WINAPI CM_Get_Device_Interface_AliasA(
 /***********************************************************************
  * CM_Get_Device_Interface_AliasW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_Interface_AliasW(
-    LPCWSTR pszDeviceInterface, LPGUID AliasInterfaceGuid,
-    LPWSTR pszAliasDeviceInterface, PULONG pulLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_AliasW(
+    _In_ LPCWSTR pszDeviceInterface,
+    _In_ LPGUID AliasInterfaceGuid,
+    _Out_writes_(*pulLength) LPWSTR pszAliasDeviceInterface,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %p %p %lu\n", pszDeviceInterface, AliasInterfaceGuid,
+    TRACE("CM_Get_Device_Interface_AliasW(%p %p %p %p %lx)\n",
+          pszDeviceInterface, AliasInterfaceGuid,
           pszAliasDeviceInterface, pulLength, ulFlags);
 
     return CM_Get_Device_Interface_Alias_ExW(pszDeviceInterface,
@@ -3392,11 +4030,18 @@ CONFIGRET WINAPI CM_Get_Device_Interface_AliasW(
 /***********************************************************************
  * CM_Get_Device_Interface_Alias_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_Interface_Alias_ExA(
-    LPCSTR pszDeviceInterface, LPGUID AliasInterfaceGuid, LPSTR pszAliasDeviceInterface,
-    PULONG pulLength, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_Alias_ExA(
+    _In_ LPCSTR pszDeviceInterface,
+    _In_ LPGUID AliasInterfaceGuid,
+    _Out_writes_(*pulLength) LPSTR pszAliasDeviceInterface,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
-    FIXME("%p %p %p %p %lu %lx\n", pszDeviceInterface, AliasInterfaceGuid,
+    FIXME("CM_Get_Device_Interface_Alias_ExA(%p %p %p %p %lx %p)\n",
+          pszDeviceInterface, AliasInterfaceGuid,
           pszAliasDeviceInterface, pulLength, ulFlags, hMachine);
 
     return CR_CALL_NOT_IMPLEMENTED;
@@ -3406,15 +4051,22 @@ CONFIGRET WINAPI CM_Get_Device_Interface_Alias_ExA(
 /***********************************************************************
  * CM_Get_Device_Interface_Alias_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_Interface_Alias_ExW(
-    LPCWSTR pszDeviceInterface, LPGUID AliasInterfaceGuid, LPWSTR pszAliasDeviceInterface,
-    PULONG pulLength, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_Alias_ExW(
+    _In_ LPCWSTR pszDeviceInterface,
+    _In_ LPGUID AliasInterfaceGuid,
+    _Out_writes_(*pulLength) LPWSTR pszAliasDeviceInterface,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     ULONG ulTransferLength;
     CONFIGRET ret = CR_SUCCESS;
 
-    TRACE("%p %p %p %p %lu %lx\n", pszDeviceInterface, AliasInterfaceGuid,
+    TRACE("CM_Get_Device_Interface_Alias_ExW(%p %p %p %p %lx %p)\n",
+          pszDeviceInterface, AliasInterfaceGuid,
           pszAliasDeviceInterface, pulLength, ulFlags, hMachine);
 
     if (pszDeviceInterface == NULL ||
@@ -3463,12 +4115,18 @@ CONFIGRET WINAPI CM_Get_Device_Interface_Alias_ExW(
 /***********************************************************************
  *      CM_Get_Device_Interface_ListA (SETUPAPI.@)
  */
-CONFIGRET WINAPI CM_Get_Device_Interface_ListA(
-    LPGUID InterfaceClassGuid, DEVINSTID_A pDeviceID, PCHAR Buffer,
-    ULONG BufferLen, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_ListA(
+    _In_ LPGUID InterfaceClassGuid,
+    _In_opt_ DEVINSTID_A pDeviceID,
+    _Out_writes_(BufferLen) PCHAR Buffer,
+    _In_ ULONG BufferLen,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%s %s %p %lu 0x%08lx\n", debugstr_guid(InterfaceClassGuid),
-          pDeviceID, Buffer, BufferLen, ulFlags);
+    TRACE("CM_Get_Device_Interface_ListA(%s %s %p %lu 0x%08lx)\n",
+          debugstr_guid(InterfaceClassGuid), debugstr_a(pDeviceID),
+          Buffer, BufferLen, ulFlags);
 
     return CM_Get_Device_Interface_List_ExA(InterfaceClassGuid, pDeviceID,
                                             Buffer, BufferLen, ulFlags, NULL);
@@ -3478,12 +4136,18 @@ CONFIGRET WINAPI CM_Get_Device_Interface_ListA(
 /***********************************************************************
  *      CM_Get_Device_Interface_ListW (SETUPAPI.@)
  */
-CONFIGRET WINAPI CM_Get_Device_Interface_ListW(
-    LPGUID InterfaceClassGuid, DEVINSTID_W pDeviceID, PWCHAR Buffer,
-    ULONG BufferLen, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_ListW(
+    _In_ LPGUID InterfaceClassGuid,
+    _In_opt_ DEVINSTID_W pDeviceID,
+    _Out_writes_(BufferLen) PWCHAR Buffer,
+    _In_ ULONG BufferLen,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%s %s %p %lu 0x%08lx\n", debugstr_guid(InterfaceClassGuid),
-          debugstr_w(pDeviceID), Buffer, BufferLen, ulFlags);
+    TRACE("CM_Get_Device_Interface_ListW(%s %s %p %lu 0x%08lx)\n",
+          debugstr_guid(InterfaceClassGuid), debugstr_w(pDeviceID),
+          Buffer, BufferLen, ulFlags);
 
     return CM_Get_Device_Interface_List_ExW(InterfaceClassGuid, pDeviceID,
                                             Buffer, BufferLen, ulFlags, NULL);
@@ -3493,16 +4157,23 @@ CONFIGRET WINAPI CM_Get_Device_Interface_ListW(
 /***********************************************************************
  *      CM_Get_Device_Interface_List_ExA (SETUPAPI.@)
  */
-CONFIGRET WINAPI CM_Get_Device_Interface_List_ExA(
-    LPGUID InterfaceClassGuid, DEVINSTID_A pDeviceID, PCHAR Buffer,
-    ULONG BufferLen, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_ExA(
+    _In_ LPGUID InterfaceClassGuid,
+    _In_opt_ DEVINSTID_A pDeviceID,
+    _Out_writes_(BufferLen) PCHAR Buffer,
+    _In_ ULONG BufferLen,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     DEVINSTID_W pDeviceIdW = NULL;
     PWCHAR BufferW = NULL;
     CONFIGRET ret = CR_SUCCESS;
 
-    TRACE("%s %s %p %lu 0x%08lx %p\n", debugstr_guid(InterfaceClassGuid),
-          pDeviceID, Buffer, BufferLen, ulFlags, hMachine);
+    TRACE("CM_Get_Device_Interface_List_ExA(%s %s %p %lu 0x%08lx %p)\n",
+          debugstr_guid(InterfaceClassGuid), debugstr_a(pDeviceID),
+          Buffer, BufferLen, ulFlags, hMachine);
 
     if (Buffer == NULL ||
         BufferLen == 0)
@@ -3551,16 +4222,23 @@ Done:
 /***********************************************************************
  *      CM_Get_Device_Interface_List_ExW (SETUPAPI.@)
  */
-CONFIGRET WINAPI CM_Get_Device_Interface_List_ExW(
-    LPGUID InterfaceClassGuid, DEVINSTID_W pDeviceID, PWCHAR Buffer,
-    ULONG BufferLen, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_ExW(
+    _In_ LPGUID InterfaceClassGuid,
+    _In_opt_ DEVINSTID_W pDeviceID,
+    _Out_writes_(BufferLen) PWCHAR Buffer,
+    _In_ ULONG BufferLen,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     PNP_RPC_BUFFER_SIZE BufferSize = 0;
     CONFIGRET ret = CR_SUCCESS;
 
-    TRACE("%s %s %p %lu 0x%08lx %p\n", debugstr_guid(InterfaceClassGuid),
-          debugstr_w(pDeviceID), Buffer, BufferLen, ulFlags, hMachine);
+    TRACE("CM_Get_Device_Interface_List_ExW(%s %s %p %lu 0x%08lx %p)\n",
+          debugstr_guid(InterfaceClassGuid), debugstr_w(pDeviceID),
+          Buffer, BufferLen, ulFlags, hMachine);
 
     if (Buffer == NULL ||
         BufferLen == 0)
@@ -3606,52 +4284,65 @@ CONFIGRET WINAPI CM_Get_Device_Interface_List_ExW(
 /***********************************************************************
  *      CM_Get_Device_Interface_List_SizeA (SETUPAPI.@)
  */
-CONFIGRET WINAPI CM_Get_Device_Interface_List_SizeA(
-    PULONG pulLen, LPGUID InterfaceClassGuid, DEVINSTID_A pDeviceId,
-    ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_SizeA(
+    _Out_ PULONG pulLen,
+    _In_ LPGUID InterfaceClassGuid,
+    _In_opt_ DEVINSTID_A pDeviceID,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %s 0x%08lx\n", pulLen, InterfaceClassGuid,
-          pDeviceId, ulFlags);
+    TRACE("CM_Get_Device_Interface_List_SizeA(%p %p %s 0x%08lx)\n",
+          pulLen, InterfaceClassGuid, debugstr_a(pDeviceID), ulFlags);
 
     return CM_Get_Device_Interface_List_Size_ExA(pulLen, InterfaceClassGuid,
-                                                 pDeviceId, ulFlags, NULL);
+                                                 pDeviceID, ulFlags, NULL);
 }
 
 
 /***********************************************************************
  *      CM_Get_Device_Interface_List_SizeW (SETUPAPI.@)
  */
-CONFIGRET WINAPI CM_Get_Device_Interface_List_SizeW(
-    PULONG pulLen, LPGUID InterfaceClassGuid, DEVINSTID_W pDeviceId,
-    ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_SizeW(
+    _Out_ PULONG pulLen,
+    _In_ LPGUID InterfaceClassGuid,
+    _In_opt_ DEVINSTID_W pDeviceID,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %s 0x%08lx\n", pulLen, InterfaceClassGuid,
-          debugstr_w(pDeviceId), ulFlags);
+    TRACE("CM_Get_Device_Interface_List_SizeW(%p %p %s 0x%08lx)\n",
+          pulLen, InterfaceClassGuid, debugstr_w(pDeviceID), ulFlags);
 
     return CM_Get_Device_Interface_List_Size_ExW(pulLen, InterfaceClassGuid,
-                                                 pDeviceId, ulFlags, NULL);
+                                                 pDeviceID, ulFlags, NULL);
 }
 
 
 /***********************************************************************
  *      CM_Get_Device_Interface_List_Size_ExA (SETUPAPI.@)
  */
-CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExA(
-    PULONG pulLen, LPGUID InterfaceClassGuid, DEVINSTID_A pDeviceId,
-    ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_Size_ExA(
+    _Out_ PULONG pulLen,
+    _In_ LPGUID InterfaceClassGuid,
+    _In_opt_ DEVINSTID_A pDeviceID,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     DEVINSTID_W pDeviceIdW = NULL;
     CONFIGRET ret = CR_SUCCESS;
 
-    TRACE("%p %p %s 0x%08lx %p\n", pulLen, InterfaceClassGuid,
-          pDeviceId, ulFlags, hMachine);
+    TRACE("CM_Get_Device_Interface_List_Size_ExA(%p %p %s 0x%08lx %p)\n",
+          pulLen, InterfaceClassGuid, debugstr_a(pDeviceID), ulFlags, hMachine);
 
     if (pulLen == NULL)
         return CR_INVALID_POINTER;
 
-    if (pDeviceId != NULL)
+    if (pDeviceID != NULL)
     {
-        if (!pSetupCaptureAndConvertAnsiArg(pDeviceId, &pDeviceIdW))
+        if (!pSetupCaptureAndConvertAnsiArg(pDeviceID, &pDeviceIdW))
             return CR_INVALID_DEVICE_ID;
     }
 
@@ -3670,15 +4361,20 @@ CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExA(
 /***********************************************************************
  *      CM_Get_Device_Interface_List_Size_ExW (SETUPAPI.@)
  */
-CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExW(
-    PULONG pulLen, LPGUID InterfaceClassGuid, DEVINSTID_W pDeviceId,
-    ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Device_Interface_List_Size_ExW(
+    _Out_ PULONG pulLen,
+    _In_ LPGUID InterfaceClassGuid,
+    _In_opt_ DEVINSTID_W pDeviceID,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret = CR_SUCCESS;
 
-    TRACE("%p %p %s 0x%08lx %p\n", pulLen, InterfaceClassGuid,
-          debugstr_w(pDeviceId), ulFlags, hMachine);
+    TRACE("CM_Get_Device_Interface_List_Size_ExW(%p %p %s 0x%08lx %p)\n",
+          pulLen, InterfaceClassGuid, debugstr_w(pDeviceID), ulFlags, hMachine);
 
     if (pulLen == NULL)
         return CR_INVALID_POINTER;
@@ -3705,7 +4401,7 @@ CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExW(
         ret = PNP_GetInterfaceDeviceListSize(BindingHandle,
                                              pulLen,
                                              InterfaceClassGuid,
-                                             pDeviceId,
+                                             pDeviceID,
                                              ulFlags);
     }
     RpcExcept(EXCEPTION_EXECUTE_HANDLER)
@@ -3721,10 +4417,16 @@ CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExW(
 /***********************************************************************
  * CM_Get_First_Log_Conf [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_First_Log_Conf(
-    PLOG_CONF plcLogConf, DEVINST dnDevInst, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_First_Log_Conf(
+    _Out_opt_ PLOG_CONF plcLogConf,
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %lx %lx\n", plcLogConf, dnDevInst, ulFlags);
+    TRACE("CM_Get_First_Log_Conf(%p %lx %lx)\n",
+          plcLogConf, dnDevInst, ulFlags);
+
     return CM_Get_First_Log_Conf_Ex(plcLogConf, dnDevInst, ulFlags, NULL);
 }
 
@@ -3732,8 +4434,13 @@ CONFIGRET WINAPI CM_Get_First_Log_Conf(
 /***********************************************************************
  * CM_Get_First_Log_Conf_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_First_Log_Conf_Ex(
-    PLOG_CONF plcLogConf, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_First_Log_Conf_Ex(
+    _Out_opt_ PLOG_CONF plcLogConf,
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
@@ -3742,7 +4449,8 @@ CONFIGRET WINAPI CM_Get_First_Log_Conf_Ex(
     ULONG ulTag;
     PLOG_CONF_INFO pLogConfInfo;
 
-    FIXME("%p %lx %lx %lx\n", plcLogConf, dnDevInst, ulFlags, hMachine);
+    FIXME("CM_Get_First_Log_Conf_Ex(%p %lx %lx %p)\n",
+          plcLogConf, dnDevInst, ulFlags, hMachine);
 
     if (dnDevInst == 0)
         return CR_INVALID_DEVINST;
@@ -3811,10 +4519,15 @@ CONFIGRET WINAPI CM_Get_First_Log_Conf_Ex(
 /***********************************************************************
  * CM_Get_Global_State [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Global_State(
-    PULONG pulState, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Global_State(
+    _Out_ PULONG pulState,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %lx\n", pulState, ulFlags);
+    TRACE("CM_Get_Global_State(%p %lx)\n",
+          pulState, ulFlags);
+
     return CM_Get_Global_State_Ex(pulState, ulFlags, NULL);
 }
 
@@ -3822,13 +4535,18 @@ CONFIGRET WINAPI CM_Get_Global_State(
 /***********************************************************************
  * CM_Get_Global_State_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Global_State_Ex(
-    PULONG pulState, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Global_State_Ex(
+    _Out_ PULONG pulState,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
 
-    TRACE("%p %lx %lx\n", pulState, ulFlags, hMachine);
+    TRACE("CM_Get_Global_State_Ex(%p %lx %p)\n",
+          pulState, ulFlags, hMachine);
 
     if (pulState == NULL)
         return CR_INVALID_POINTER;
@@ -3865,12 +4583,16 @@ CONFIGRET WINAPI CM_Get_Global_State_Ex(
 /***********************************************************************
  * CM_Get_HW_Prof_FlagsA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_HW_Prof_FlagsA(
-    DEVINSTID_A szDevInstName, ULONG ulHardwareProfile, PULONG pulValue,
-    ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_HW_Prof_FlagsA(
+    _In_ DEVINSTID_A szDevInstName,
+    _In_ ULONG ulHardwareProfile,
+    _Out_ PULONG pulValue,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%s %lu %p %lx\n", szDevInstName,
-          ulHardwareProfile, pulValue, ulFlags);
+    TRACE("CM_Get_HW_Prof_FlagsA(%s %lu %p %lx)\n",
+          debugstr_a(szDevInstName), ulHardwareProfile, pulValue, ulFlags);
 
     return CM_Get_HW_Prof_Flags_ExA(szDevInstName, ulHardwareProfile,
                                     pulValue, ulFlags, NULL);
@@ -3880,12 +4602,16 @@ CONFIGRET WINAPI CM_Get_HW_Prof_FlagsA(
 /***********************************************************************
  * CM_Get_HW_Prof_FlagsW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_HW_Prof_FlagsW(
-    DEVINSTID_W szDevInstName, ULONG ulHardwareProfile, PULONG pulValue,
-    ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_HW_Prof_FlagsW(
+    _In_ DEVINSTID_W szDevInstName,
+    _In_ ULONG ulHardwareProfile,
+    _Out_ PULONG pulValue,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%s %lu %p %lx\n", debugstr_w(szDevInstName),
-          ulHardwareProfile, pulValue, ulFlags);
+    TRACE("CM_Get_HW_Prof_FlagsW(%s %lu %p %lx)\n",
+          debugstr_w(szDevInstName), ulHardwareProfile, pulValue, ulFlags);
 
     return CM_Get_HW_Prof_Flags_ExW(szDevInstName, ulHardwareProfile,
                                     pulValue, ulFlags, NULL);
@@ -3895,15 +4621,20 @@ CONFIGRET WINAPI CM_Get_HW_Prof_FlagsW(
 /***********************************************************************
  * CM_Get_HW_Prof_Flags_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_HW_Prof_Flags_ExA(
-    DEVINSTID_A szDevInstName, ULONG ulHardwareProfile, PULONG pulValue,
-    ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_HW_Prof_Flags_ExA(
+    _In_ DEVINSTID_A szDevInstName,
+    _In_ ULONG ulHardwareProfile,
+    _Out_ PULONG pulValue,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     DEVINSTID_W pszDevIdW = NULL;
     CONFIGRET ret = CR_SUCCESS;
 
-    TRACE("%s %lu %p %lx %lx\n", szDevInstName,
-          ulHardwareProfile, pulValue, ulFlags, hMachine);
+    TRACE("CM_Get_HW_Prof_Flags_ExA(%s %lu %p %lx %p)\n",
+          debugstr_a(szDevInstName), ulHardwareProfile, pulValue, ulFlags, hMachine);
 
     if (szDevInstName != NULL)
     {
@@ -3924,15 +4655,20 @@ CONFIGRET WINAPI CM_Get_HW_Prof_Flags_ExA(
 /***********************************************************************
  * CM_Get_HW_Prof_Flags_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_HW_Prof_Flags_ExW(
-    DEVINSTID_W szDevInstName, ULONG ulHardwareProfile, PULONG pulValue,
-    ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_HW_Prof_Flags_ExW(
+    _In_ DEVINSTID_W szDevInstName,
+    _In_ ULONG ulHardwareProfile,
+    _Out_ PULONG pulValue,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
 
-    FIXME("%s %lu %p %lx %lx\n", debugstr_w(szDevInstName),
-          ulHardwareProfile, pulValue, ulFlags, hMachine);
+    FIXME("CM_Get_HW_Prof_Flags_ExW(%s %lu %p %lx %p)\n",
+          debugstr_w(szDevInstName), ulHardwareProfile, pulValue, ulFlags, hMachine);
 
     if ((szDevInstName == NULL) || (pulValue == NULL))
         return CR_INVALID_POINTER;
@@ -3972,10 +4708,15 @@ CONFIGRET WINAPI CM_Get_HW_Prof_Flags_ExW(
 /***********************************************************************
  * CM_Get_Hardware_Profile_InfoA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Hardware_Profile_InfoA(
-    ULONG ulIndex, PHWPROFILEINFO_A pHWProfileInfo, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Hardware_Profile_InfoA(
+    _In_ ULONG ulIndex,
+    _Out_ PHWPROFILEINFO_A pHWProfileInfo,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lu %p %lx\n", ulIndex, pHWProfileInfo, ulFlags);
+    TRACE("CM_Get_Hardware_Profile_InfoA(%lu %p %lx)\n",
+          ulIndex, pHWProfileInfo, ulFlags);
 
     return CM_Get_Hardware_Profile_Info_ExA(ulIndex, pHWProfileInfo,
                                             ulFlags, NULL);
@@ -3985,10 +4726,15 @@ CONFIGRET WINAPI CM_Get_Hardware_Profile_InfoA(
 /***********************************************************************
  * CM_Get_Hardware_Profile_InfoW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Hardware_Profile_InfoW(
-    ULONG ulIndex, PHWPROFILEINFO_W pHWProfileInfo, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Hardware_Profile_InfoW(
+    _In_ ULONG ulIndex,
+    _Out_ PHWPROFILEINFO_W pHWProfileInfo,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lu %p %lx\n", ulIndex, pHWProfileInfo, ulFlags);
+    TRACE("CM_Get_Hardware_Profile_InfoW(%lu %p %lx)\n",
+          ulIndex, pHWProfileInfo, ulFlags);
 
     return CM_Get_Hardware_Profile_Info_ExW(ulIndex, pHWProfileInfo,
                                             ulFlags, NULL);
@@ -3998,14 +4744,19 @@ CONFIGRET WINAPI CM_Get_Hardware_Profile_InfoW(
 /***********************************************************************
  * CM_Get_Hardware_Profile_Info_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Hardware_Profile_Info_ExA(
-    ULONG ulIndex, PHWPROFILEINFO_A pHWProfileInfo, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Hardware_Profile_Info_ExA(
+    _In_ ULONG ulIndex,
+    _Out_ PHWPROFILEINFO_A pHWProfileInfo,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     HWPROFILEINFO_W LocalProfileInfo;
     CONFIGRET ret;
 
-    TRACE("%lu %p %lx %lx\n", ulIndex, pHWProfileInfo, ulFlags, hMachine);
+    TRACE("CM_Get_Hardware_Profile_Info_ExA(%lu %p %lx %p)\n",
+          ulIndex, pHWProfileInfo, ulFlags, hMachine);
 
     if (pHWProfileInfo == NULL)
         return CR_INVALID_POINTER;
@@ -4035,14 +4786,19 @@ CONFIGRET WINAPI CM_Get_Hardware_Profile_Info_ExA(
 /***********************************************************************
  * CM_Get_Hardware_Profile_Info_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Hardware_Profile_Info_ExW(
-    ULONG ulIndex, PHWPROFILEINFO_W pHWProfileInfo, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Hardware_Profile_Info_ExW(
+    _In_ ULONG ulIndex,
+    _Out_ PHWPROFILEINFO_W pHWProfileInfo,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
 
-    TRACE("%lu %p %lx %lx\n", ulIndex, pHWProfileInfo, ulFlags, hMachine);
+    TRACE("CM_Get_Hardware_Profile_Info_ExW(%lu %p %lx %p)\n",
+          ulIndex, pHWProfileInfo, ulFlags, hMachine);
 
     if (pHWProfileInfo == NULL)
         return CR_INVALID_POINTER;
@@ -4080,10 +4836,16 @@ CONFIGRET WINAPI CM_Get_Hardware_Profile_Info_ExW(
 /***********************************************************************
  * CM_Get_Log_Conf_Priority [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Log_Conf_Priority(
-    LOG_CONF lcLogConf, PPRIORITY pPriority, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Log_Conf_Priority(
+    _In_ LOG_CONF lcLogConf,
+    _Out_ PPRIORITY pPriority,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %lx\n", lcLogConf, pPriority, ulFlags);
+    TRACE("CM_Get_Log_Conf_Priority(%p %p %lx)\n",
+          lcLogConf, pPriority, ulFlags);
+
     return CM_Get_Log_Conf_Priority_Ex(lcLogConf, pPriority, ulFlags, NULL);
 }
 
@@ -4091,9 +4853,13 @@ CONFIGRET WINAPI CM_Get_Log_Conf_Priority(
 /***********************************************************************
  * CM_Get_Log_Conf_Priority_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Log_Conf_Priority_Ex(
-    LOG_CONF lcLogConf, PPRIORITY pPriority, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Log_Conf_Priority_Ex(
+    _In_ LOG_CONF lcLogConf,
+    _Out_ PPRIORITY pPriority,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
@@ -4101,10 +4867,11 @@ CONFIGRET WINAPI CM_Get_Log_Conf_Priority_Ex(
     LPWSTR lpDevInst;
     CONFIGRET ret;
 
-    FIXME("%p %p %lx %lx\n", lcLogConf, pPriority, ulFlags, hMachine);
+    FIXME("CM_Get_Log_Conf_Priority_Ex(%p %p %lx %p)\n",
+          lcLogConf, pPriority, ulFlags, hMachine);
 
     pLogConfInfo = (PLOG_CONF_INFO)lcLogConf;
-    if (pLogConfInfo == NULL || pLogConfInfo->ulMagic != LOG_CONF_MAGIC)
+    if (!IsValidLogConf(pLogConfInfo))
         return CR_INVALID_LOG_CONF;
 
     if (pPriority == NULL)
@@ -4155,10 +4922,16 @@ CONFIGRET WINAPI CM_Get_Log_Conf_Priority_Ex(
 /***********************************************************************
  * CM_Get_Next_Log_Conf [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Next_Log_Conf(
-    PLOG_CONF plcLogConf, LOG_CONF lcLogConf, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Next_Log_Conf(
+    _Out_opt_ PLOG_CONF plcLogConf,
+    _In_ LOG_CONF lcLogConf,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %lx\n", plcLogConf, lcLogConf, ulFlags);
+    TRACE("CM_Get_Next_Log_Conf(%p %p %lx)\n",
+          plcLogConf, lcLogConf, ulFlags);
+
     return CM_Get_Next_Log_Conf_Ex(plcLogConf, lcLogConf, ulFlags, NULL);
 }
 
@@ -4166,9 +4939,13 @@ CONFIGRET WINAPI CM_Get_Next_Log_Conf(
 /***********************************************************************
  * CM_Get_Next_Log_Conf_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Next_Log_Conf_Ex(
-    PLOG_CONF plcLogConf, LOG_CONF lcLogConf, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Next_Log_Conf_Ex(
+    _Out_opt_ PLOG_CONF plcLogConf,
+    _In_ LOG_CONF lcLogConf,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
@@ -4178,13 +4955,14 @@ CONFIGRET WINAPI CM_Get_Next_Log_Conf_Ex(
     LPWSTR lpDevInst;
     CONFIGRET ret;
 
-    FIXME("%p %p %lx %lx\n", plcLogConf, lcLogConf, ulFlags, hMachine);
+    FIXME("CM_Get_Next_Log_Conf_Ex(%p %p %lx %p)\n",
+          plcLogConf, lcLogConf, ulFlags, hMachine);
 
     if (plcLogConf)
         *plcLogConf = 0;
 
     pLogConfInfo = (PLOG_CONF_INFO)lcLogConf;
-    if (pLogConfInfo == NULL || pLogConfInfo->ulMagic != LOG_CONF_MAGIC)
+    if (!IsValidLogConf(pLogConfInfo))
         return CR_INVALID_LOG_CONF;
 
     if (ulFlags != 0)
@@ -4249,12 +5027,18 @@ CONFIGRET WINAPI CM_Get_Next_Log_Conf_Ex(
 /***********************************************************************
  * CM_Get_Next_Re_Des [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Next_Res_Des(
-    PRES_DES prdResDes, RES_DES rdResDes, RESOURCEID ForResource,
-    PRESOURCEID pResourceID, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Next_Res_Des(
+    _Out_ PRES_DES prdResDes,
+    _In_ RES_DES rdResDes,
+    _In_ RESOURCEID ForResource,
+    _Out_opt_ PRESOURCEID pResourceID,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %lu %p %lx\n", prdResDes, rdResDes, ForResource,
-          pResourceID, ulFlags);
+    TRACE("CM_Get_Next_Res_Des(%p %p %lu %p %lx)\n",
+          prdResDes, rdResDes, ForResource, pResourceID, ulFlags);
+
     return CM_Get_Next_Res_Des_Ex(prdResDes, rdResDes, ForResource,
                                   pResourceID, ulFlags, NULL);
 }
@@ -4263,12 +5047,18 @@ CONFIGRET WINAPI CM_Get_Next_Res_Des(
 /***********************************************************************
  * CM_Get_Next_Re_Des_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Next_Res_Des_Ex(
-    PRES_DES prdResDes, RES_DES rdResDes, RESOURCEID ForResource,
-    PRESOURCEID pResourceID, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Next_Res_Des_Ex(
+    _Out_ PRES_DES prdResDes,
+    _In_ RES_DES rdResDes,
+    _In_ RESOURCEID ForResource,
+    _Out_opt_ PRESOURCEID pResourceID,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
-    FIXME("%p %p %lu %p %lx %lx\n", prdResDes, rdResDes, ForResource,
-          pResourceID, ulFlags, hMachine);
+    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;
 }
@@ -4277,10 +5067,16 @@ CONFIGRET WINAPI CM_Get_Next_Res_Des_Ex(
 /***********************************************************************
  * CM_Get_Parent [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Parent(
-    PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Parent(
+    _Out_ PDEVINST pdnDevInst,
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %lx\n", pdnDevInst, dnDevInst, ulFlags);
+    TRACE("CM_Get_Parent(%p %p %lx)\n",
+          pdnDevInst, dnDevInst, ulFlags);
+
     return CM_Get_Parent_Ex(pdnDevInst, dnDevInst, ulFlags, NULL);
 }
 
@@ -4288,8 +5084,13 @@ CONFIGRET WINAPI CM_Get_Parent(
 /***********************************************************************
  * CM_Get_Parent_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Parent_Ex(
-    PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Parent_Ex(
+    _Out_ PDEVINST pdnDevInst,
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     WCHAR szRelatedDevInst[MAX_DEVICE_ID_LEN];
     RPC_BINDING_HANDLE BindingHandle = NULL;
@@ -4298,7 +5099,8 @@ CONFIGRET WINAPI CM_Get_Parent_Ex(
     DWORD dwIndex, dwLength = MAX_DEVICE_ID_LEN;
     CONFIGRET ret;
 
-    TRACE("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine);
+    TRACE("CM_Get_Parent_Ex(%p %lx %lx %p)\n",
+          pdnDevInst, dnDevInst, ulFlags, hMachine);
 
     if (pdnDevInst == NULL)
         return CR_INVALID_POINTER;
@@ -4364,10 +5166,17 @@ CONFIGRET WINAPI CM_Get_Parent_Ex(
 /***********************************************************************
  * CM_Get_Res_Des_Data [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Res_Des_Data(
-    RES_DES rdResDes, PVOID Buffer, ULONG BufferLen, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Res_Des_Data(
+    _In_ RES_DES rdResDes,
+    _Out_writes_bytes_(BufferLen) PVOID Buffer,
+    _In_ ULONG BufferLen,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %l %lx\n", rdResDes, Buffer, BufferLen, ulFlags);
+    TRACE("CM_Get_Res_Des_Data(%p %p %lu %lx)\n",
+          rdResDes, Buffer, BufferLen, ulFlags);
+
     return CM_Get_Res_Des_Data_Ex(rdResDes, Buffer, BufferLen, ulFlags, NULL);
 }
 
@@ -4375,11 +5184,18 @@ CONFIGRET WINAPI CM_Get_Res_Des_Data(
 /***********************************************************************
  * CM_Get_Res_Des_Data_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Res_Des_Data_Ex(
-    RES_DES rdResDes, PVOID Buffer, ULONG BufferLen, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Res_Des_Data_Ex(
+    _In_ RES_DES rdResDes,
+    _Out_writes_bytes_(BufferLen) PVOID Buffer,
+    _In_ ULONG BufferLen,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
-    FIXME("%p %p %l %lx %lx\n", rdResDes, Buffer, BufferLen, ulFlags, hMachine);
+    FIXME("CM_Get_Res_Des_Data_Ex(%p %p %lu %lx %p)\n",
+          rdResDes, Buffer, BufferLen, ulFlags, hMachine);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -4387,10 +5203,16 @@ CONFIGRET WINAPI CM_Get_Res_Des_Data_Ex(
 /***********************************************************************
  * CM_Get_Res_Des_Size [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Res_Des_Data_Size(
-    PULONG pulSize, RES_DES rdResDes, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Res_Des_Data_Size(
+    _Out_ PULONG pulSize,
+    _In_ RES_DES rdResDes,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %lx\n", pulSize, rdResDes, ulFlags);
+    TRACE("CM_Get_Res_Des_Data_Size(%p %p %lx)\n",
+          pulSize, rdResDes, ulFlags);
+
     return CM_Get_Res_Des_Data_Size_Ex(pulSize, rdResDes, ulFlags, NULL);
 }
 
@@ -4398,10 +5220,78 @@ CONFIGRET WINAPI CM_Get_Res_Des_Data_Size(
 /***********************************************************************
  * CM_Get_Res_Des_Size_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Res_Des_Data_Size_Ex(
-    PULONG pulSize, RES_DES rdResDes, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Res_Des_Data_Size_Ex(
+    _Out_ PULONG pulSize,
+    _In_ RES_DES rdResDes,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
+{
+    TRACE("CM_Get_Res_Des_Data_Size_Ex(%p %p %lx %p)\n",
+          pulSize, rdResDes, ulFlags, hMachine);
+
+    return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
+/***********************************************************************
+ * CM_Get_Resource_Conflict_Count [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Get_Resource_Conflict_Count(
+    _In_ CONFLICT_LIST clConflictList,
+    _Out_ PULONG pulCount)
+{
+    PCONFLICT_DATA pConflictData;
+
+    FIXME("CM_Get_Resource_Conflict_Count(%p %p)\n",
+          clConflictList, pulCount);
+
+    pConflictData = (PCONFLICT_DATA)clConflictList;
+    if (!IsValidConflictData(pConflictData))
+        return CR_INVALID_CONFLICT_LIST;
+
+    if (pulCount == NULL)
+        return CR_INVALID_POINTER;
+
+    *pulCount = pConflictData->pConflictList->ConflictsListed;
+
+    return CR_SUCCESS;
+}
+
+
+/***********************************************************************
+ * CM_Get_Resource_Conflict_DetailsA [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Get_Resource_Conflict_DetailsA(
+    _In_ CONFLICT_LIST clConflictList,
+    _In_ ULONG ulIndex,
+    _Inout_ PCONFLICT_DETAILS_A pConflictDetails)
+{
+    FIXME("CM_Get_Resource_Conflict_CountA(%p %lu %p)\n",
+          clConflictList, ulIndex, pConflictDetails);
+
+    return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
+/***********************************************************************
+ * CM_Get_Resource_Conflict_DetailsW [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Get_Resource_Conflict_DetailsW(
+    _In_ CONFLICT_LIST clConflictList,
+    _In_ ULONG ulIndex,
+    _Inout_ PCONFLICT_DETAILS_W pConflictDetails)
 {
-    TRACE("%p %p %lx %lx\n", pulSize, rdResDes, ulFlags, hMachine);
+    FIXME("CM_Get_Resource_Conflict_CountW(%p %lu %p)\n",
+          clConflictList, ulIndex, pConflictDetails);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -4409,10 +5299,16 @@ CONFIGRET WINAPI CM_Get_Res_Des_Data_Size_Ex(
 /***********************************************************************
  * CM_Get_Sibling [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Sibling(
-    PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Get_Sibling(
+    _Out_ PDEVINST pdnDevInst,
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %lx\n", pdnDevInst, dnDevInst, ulFlags);
+    TRACE("CM_Get_Sibling(%p %p %lx)\n",
+          pdnDevInst, dnDevInst, ulFlags);
+
     return CM_Get_Sibling_Ex(pdnDevInst, dnDevInst, ulFlags, NULL);
 }
 
@@ -4420,8 +5316,13 @@ CONFIGRET WINAPI CM_Get_Sibling(
 /***********************************************************************
  * CM_Get_Sibling_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Sibling_Ex(
-    PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Sibling_Ex(
+    _Out_ PDEVINST pdnDevInst,
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     WCHAR szRelatedDevInst[MAX_DEVICE_ID_LEN];
     RPC_BINDING_HANDLE BindingHandle = NULL;
@@ -4430,7 +5331,8 @@ CONFIGRET WINAPI CM_Get_Sibling_Ex(
     DWORD dwIndex, dwLength = MAX_DEVICE_ID_LEN;
     CONFIGRET ret;
 
-    TRACE("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine);
+    TRACE("CM_Get_Sibling_Ex(%p %lx %lx %p)\n",
+          pdnDevInst, dnDevInst, ulFlags, hMachine);
 
     if (pdnDevInst == NULL)
         return CR_INVALID_POINTER;
@@ -4496,9 +5398,12 @@ CONFIGRET WINAPI CM_Get_Sibling_Ex(
 /***********************************************************************
  * CM_Get_Version [SETUPAPI.@]
  */
-WORD WINAPI CM_Get_Version(VOID)
+WORD
+WINAPI
+CM_Get_Version(VOID)
 {
-    TRACE("\n");
+    TRACE("CM_Get_Version()\n");
+
     return CM_Get_Version_Ex(NULL);
 }
 
@@ -4506,13 +5411,16 @@ WORD WINAPI CM_Get_Version(VOID)
 /***********************************************************************
  * CM_Get_Version_Ex [SETUPAPI.@]
  */
-WORD WINAPI CM_Get_Version_Ex(HMACHINE hMachine)
+WORD
+WINAPI
+CM_Get_Version_Ex(
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     WORD Version = 0;
     CONFIGRET ret;
 
-    TRACE("%lx\n", hMachine);
+    TRACE("CM_Get_Version_Ex(%p)\n", hMachine);
 
     if (hMachine != NULL)
     {
@@ -4556,6 +5464,7 @@ CM_Intersect_Range_List(
 {
     FIXME("CM_Intersect_Range_List(%p %p %p %lx)\n",
           rlhOld1, rlhOld2, rlhNew, ulFlags);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -4573,6 +5482,7 @@ CM_Invert_Range_List(
 {
     FIXME("CM_Invert_Range_List(%p %p %I64u %lx)\n",
           rlhOld, rlhNew, ullMaxValue, ulFlags);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -4587,6 +5497,7 @@ CM_Is_Dock_Station_Present(
 {
     TRACE("CM_Is_Dock_Station_Present(%p)\n",
           pbPresent);
+
     return CM_Is_Dock_Station_Present_Ex(pbPresent, NULL);
 }
 
@@ -4603,7 +5514,7 @@ CM_Is_Dock_Station_Present_Ex(
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
 
-    TRACE("CM_Is_Dock_Station_Present_Ex(%p %lx)\n",
+    TRACE("CM_Is_Dock_Station_Present_Ex(%p %p)\n",
           pbPresent, hMachine);
 
     if (pbPresent == NULL)
@@ -4648,6 +5559,7 @@ CM_Is_Version_Available(
 {
     TRACE("CM_Is_Version_Available(%hu)\n",
           wVersion);
+
     return CM_Is_Version_Available_Ex(wVersion, NULL);
 }
 
@@ -4665,7 +5577,7 @@ CM_Is_Version_Available_Ex(
     WORD wServerVersion;
     CONFIGRET ret;
 
-    TRACE("CM_Is_Version_Available_Ex(%hu %lx)\n",
+    TRACE("CM_Is_Version_Available_Ex(%hu %p)\n",
           wVersion, hMachine);
 
     if (wVersion <= 0x400)
@@ -4710,8 +5622,9 @@ CM_Locate_DevNodeA(
     _In_opt_ DEVINSTID_A pDeviceID,
     _In_ ULONG ulFlags)
 {
-    TRACE("CM_Locate_DevNodeA(%p %s %lu)\n",
-          pdnDevInst, pDeviceID, ulFlags);
+    TRACE("CM_Locate_DevNodeA(%p %s %lx)\n",
+          pdnDevInst, debugstr_a(pDeviceID), ulFlags);
+
     return CM_Locate_DevNode_ExA(pdnDevInst, pDeviceID, ulFlags, NULL);
 }
 
@@ -4726,8 +5639,9 @@ CM_Locate_DevNodeW(
     _In_opt_ DEVINSTID_W pDeviceID,
     _In_ ULONG ulFlags)
 {
-    TRACE("CM_Locate_DevNodeW(%p %s %lu)\n",
+    TRACE("CM_Locate_DevNodeW(%p %s %lx)\n",
           pdnDevInst, debugstr_w(pDeviceID), ulFlags);
+
     return CM_Locate_DevNode_ExW(pdnDevInst, pDeviceID, ulFlags, NULL);
 }
 
@@ -4746,8 +5660,8 @@ CM_Locate_DevNode_ExA(
     DEVINSTID_W pDevIdW = NULL;
     CONFIGRET ret = CR_SUCCESS;
 
-    TRACE("CM_Locate_DevNode_ExA(%p %s %lu %lx)\n",
-          pdnDevInst, pDeviceID, ulFlags, hMachine);
+    TRACE("CM_Locate_DevNode_ExA(%p %s %lx %p)\n",
+          pdnDevInst, debugstr_a(pDeviceID), ulFlags, hMachine);
 
     if (pDeviceID != NULL)
     {
@@ -4780,7 +5694,7 @@ CM_Locate_DevNode_ExW(
     HSTRING_TABLE StringTable = NULL;
     CONFIGRET ret = CR_SUCCESS;
 
-    TRACE("CM_Locate_DevNode_ExW(%p %s %lu %lx)\n",
+    TRACE("CM_Locate_DevNode_ExW(%p %s %lx %p)\n",
           pdnDevInst, debugstr_w(pDeviceID), ulFlags, hMachine);
 
     if (pdnDevInst == NULL)
@@ -4866,6 +5780,7 @@ CM_Merge_Range_List(
 {
     FIXME("CM_Merge_Range_List(%p %p %p %lx)\n",
           rlhOld1, rlhOld2, rlhNew, ulFlags);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -4879,13 +5794,14 @@ CM_Modify_Res_Des(
     _Out_ PRES_DES prdResDes,
     _In_ RES_DES rdResDes,
     _In_ RESOURCEID ResourceID,
-    _In_ PCVOID ResourceData,
+    _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
     _In_ ULONG ResourceLen,
     _In_ ULONG ulFlags)
 {
     TRACE("CM_Modify_Res_Des(%p %p %lx %p %lu %lx)\n",
           prdResDes, rdResDes, ResourceID, ResourceData,
           ResourceLen, ulFlags);
+
     return CM_Modify_Res_Des_Ex(prdResDes, rdResDes, ResourceID, ResourceData,
                                 ResourceLen, ulFlags, NULL);
 }
@@ -4900,14 +5816,15 @@ CM_Modify_Res_Des_Ex(
     _Out_ PRES_DES prdResDes,
     _In_ RES_DES rdResDes,
     _In_ RESOURCEID ResourceID,
-    _In_ PCVOID ResourceData,
+    _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
     _In_ ULONG ResourceLen,
     _In_ ULONG ulFlags,
     _In_opt_ HMACHINE hMachine)
 {
-    FIXME("CM_Modify_Res_Des_Ex(%p %p %lx %p %lu %lx %lx)\n",
+    FIXME("CM_Modify_Res_Des_Ex(%p %p %lx %p %lu %lx %p)\n",
           prdResDes, rdResDes, ResourceID, ResourceData,
           ResourceLen, ulFlags, hMachine);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -4924,6 +5841,7 @@ CM_Move_DevNode(
 {
     TRACE("CM_Move_DevNode(%lx %lx %lx)\n",
           dnFromDevInst, dnToDevInst, ulFlags);
+
     return CM_Move_DevNode_Ex(dnFromDevInst, dnToDevInst, ulFlags, NULL);
 }
 
@@ -4945,7 +5863,7 @@ CM_Move_DevNode_Ex(
     LPWSTR lpToDevInst;
     CONFIGRET ret;
 
-    FIXME("CM_Move_DevNode_Ex(%lx %lx %lx %lx)\n",
+    FIXME("CM_Move_DevNode_Ex(%lx %lx %lx %p)\n",
           dnFromDevInst, dnToDevInst, ulFlags, hMachine);
 
     if (!pSetupIsUserAdmin())
@@ -5010,9 +5928,51 @@ CM_Next_Range(
     _Out_ PDWORDLONG pullEnd,
     _In_ ULONG ulFlags)
 {
+    PINTERNAL_RANGE_LIST pRangeList;
+    PINTERNAL_RANGE pRange;
+    PLIST_ENTRY ListEntry;
+    CONFIGRET ret = CR_SUCCESS;
+
     FIXME("CM_Next_Range(%p %p %p %lx)\n",
           preElement, pullStart, pullEnd, ulFlags);
-    return CR_CALL_NOT_IMPLEMENTED;
+
+    pRange = (PINTERNAL_RANGE)preElement;
+
+    if (pRange == NULL || pRange->pRangeList == NULL)
+        return CR_FAILURE;
+
+    if (pullStart == NULL || pullEnd == NULL)
+        return CR_INVALID_POINTER;
+
+    if (ulFlags != 0)
+        return CR_INVALID_FLAG;
+
+    pRangeList = pRange->pRangeList;
+
+    /* Lock the range list */
+    WaitForSingleObject(pRangeList->hMutex, INFINITE);
+
+    /* Fail, if we reached the end of the list */
+    if (pRange->ListEntry.Flink == &pRangeList->ListHead)
+    {
+        ret = CR_FAILURE;
+        goto done;
+    }
+
+    /* Get the next range */
+    ListEntry = pRangeList->ListHead.Flink;
+    pRange = CONTAINING_RECORD(ListEntry, INTERNAL_RANGE, ListEntry);
+
+    /* Return the range data */
+    *pullStart = pRange->ullStart;
+    *pullEnd = pRange->ullEnd;
+    *preElement = (RANGE_ELEMENT)pRange;
+
+done:
+    /* Unlock the range list */
+    ReleaseMutex(pRangeList->hMutex);
+
+    return ret;
 }
 
 
@@ -5030,7 +5990,7 @@ CM_Open_Class_KeyA(
     _In_ ULONG ulFlags)
 {
     TRACE("CM_Open_Class_KeyA(%p %s %lx %lx %p %lx)\n",
-          debugstr_guid(pClassGuid), pszClassName,
+          debugstr_guid(pClassGuid), debugstr_a(pszClassName),
           samDesired, Disposition, phkClass, ulFlags);
 
     return CM_Open_Class_Key_ExA(pClassGuid, pszClassName, samDesired,
@@ -5077,8 +6037,8 @@ CM_Open_Class_Key_ExA(
     LPWSTR pszClassNameW = NULL;
     CONFIGRET ret;
 
-    TRACE("CM_Open_Class_Key_ExA(%p %s %lx %lx %p %lx %lx)\n",
-          debugstr_guid(pClassGuid), pszClassName,
+    TRACE("CM_Open_Class_Key_ExA(%p %s %lx %lx %p %lx %p)\n",
+          debugstr_guid(pClassGuid), debugstr_a(pszClassName),
           samDesired, Disposition, phkClass, ulFlags, hMachine);
 
     if (pszClassName != NULL)
@@ -5117,7 +6077,7 @@ CM_Open_Class_Key_ExW(
     DWORD dwError;
     HKEY hKey;
 
-    TRACE("CM_Open_Class_Key_ExW(%p %s %lx %lx %p %lx %lx)\n",
+    TRACE("CM_Open_Class_Key_ExW(%p %s %lx %lx %p %lx %p)\n",
           debugstr_guid(pClassGuid), debugstr_w(pszClassName),
           samDesired, Disposition, phkClass, ulFlags, hMachine);
 
@@ -5215,6 +6175,7 @@ CM_Open_DevNode_Key(
 {
     TRACE("CM_Open_DevNode_Key(%lx %lx %lu %lx %p %lx)\n",
           dnDevNode, samDesired, ulHardwareProfile, Disposition, phkDevice, ulFlags);
+
     return CM_Open_DevNode_Key_Ex(dnDevNode, samDesired, ulHardwareProfile,
                                   Disposition, phkDevice, ulFlags, NULL);
 }
@@ -5242,7 +6203,7 @@ CM_Open_DevNode_Key_Ex(
     HKEY hRootKey = NULL;
     CONFIGRET ret = CR_CALL_NOT_IMPLEMENTED;
 
-    TRACE("CM_Open_DevNode_Key_Ex(%lx %lx %lu %lx %p %lx %lx)\n",
+    TRACE("CM_Open_DevNode_Key_Ex(%lx %lx %lu %lx %p %lx %p)\n",
           dnDevNode, samDesired, ulHardwareProfile, Disposition, phkDevice, ulFlags, hMachine);
 
     if (phkDevice == NULL)
@@ -5371,12 +6332,17 @@ done:
 /***********************************************************************
  * CM_Query_And_Remove_SubTreeA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Query_And_Remove_SubTreeA(
-    DEVINST dnAncestor, PPNP_VETO_TYPE pVetoType, LPSTR pszVetoName,
-    ULONG ulNameLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Query_And_Remove_SubTreeA(
+    _In_ DEVINST dnAncestor,
+    _Out_opt_ PPNP_VETO_TYPE pVetoType,
+    _Out_writes_opt_(ulNameLength) LPSTR pszVetoName,
+    _In_ ULONG ulNameLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %p %s %lu %lx\n", dnAncestor, pVetoType, pszVetoName,
-          ulNameLength, ulFlags);
+    TRACE("CM_Query_And_Remove_SubTreeA(%lx %p %s %lu %lx)\n",
+          dnAncestor, pVetoType, pszVetoName, ulNameLength, ulFlags);
 
     return CM_Query_And_Remove_SubTree_ExA(dnAncestor, pVetoType, pszVetoName,
                                            ulNameLength, ulFlags, NULL);
@@ -5386,12 +6352,17 @@ CONFIGRET WINAPI CM_Query_And_Remove_SubTreeA(
 /***********************************************************************
  * CM_Query_And_Remove_SubTreeW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Query_And_Remove_SubTreeW(
-    DEVINST dnAncestor, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName,
-    ULONG ulNameLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Query_And_Remove_SubTreeW(
+    _In_ DEVINST dnAncestor,
+    _Out_opt_ PPNP_VETO_TYPE pVetoType,
+    _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName,
+    _In_ ULONG ulNameLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %p %s %lu %lx\n", dnAncestor, pVetoType,
-          debugstr_w(pszVetoName), ulNameLength, ulFlags);
+    TRACE("CM_Query_And_Remove_SubTreeW(%lx %p %s %lu %lx)\n",
+          dnAncestor, pVetoType, debugstr_w(pszVetoName), ulNameLength, ulFlags);
 
     return CM_Query_And_Remove_SubTree_ExW(dnAncestor, pVetoType, pszVetoName,
                                            ulNameLength, ulFlags, NULL);
@@ -5401,15 +6372,22 @@ CONFIGRET WINAPI CM_Query_And_Remove_SubTreeW(
 /***********************************************************************
  * CM_Query_And_Remove_SubTree_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Query_And_Remove_SubTree_ExA(
-    DEVINST dnAncestor, PPNP_VETO_TYPE pVetoType, LPSTR pszVetoName,
-    ULONG ulNameLength, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Query_And_Remove_SubTree_ExA(
+    _In_ DEVINST dnAncestor,
+    _Out_opt_ PPNP_VETO_TYPE pVetoType,
+    _Out_writes_opt_(ulNameLength) LPSTR pszVetoName,
+    _In_ ULONG ulNameLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     LPWSTR lpLocalVetoName;
     CONFIGRET ret;
 
-    TRACE("%lx %p %s %lu %lx %lx\n", dnAncestor, pVetoType, pszVetoName,
-          ulNameLength, ulFlags, hMachine);
+    TRACE("CM_Query_And_Remove_SubTree_ExA(%lx %p %s %lu %lx %p)\n",
+          dnAncestor, pVetoType, debugstr_a(pszVetoName), ulNameLength,
+          ulFlags, hMachine);
 
     if (pszVetoName == NULL && ulNameLength == 0)
         return CR_INVALID_POINTER;
@@ -5442,17 +6420,24 @@ CONFIGRET WINAPI CM_Query_And_Remove_SubTree_ExA(
 /***********************************************************************
  * CM_Query_And_Remove_SubTree_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Query_And_Remove_SubTree_ExW(
-    DEVINST dnAncestor, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName,
-    ULONG ulNameLength, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Query_And_Remove_SubTree_ExW(
+    _In_ DEVINST dnAncestor,
+    _Out_opt_ PPNP_VETO_TYPE pVetoType,
+    _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName,
+    _In_ ULONG ulNameLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
     LPWSTR lpDevInst;
     CONFIGRET ret;
 
-    TRACE("%lx %p %s %lu %lx %lx\n", dnAncestor, pVetoType,
-          debugstr_w(pszVetoName), ulNameLength, ulFlags, hMachine);
+    TRACE("CM_Query_And_Remove_SubTree_ExW(%lx %p %s %lu %lx %p)\n",
+          dnAncestor, pVetoType, debugstr_w(pszVetoName), ulNameLength,
+          ulFlags, hMachine);
 
     if (dnAncestor == 0)
         return CR_INVALID_DEVNODE;
@@ -5505,12 +6490,17 @@ CONFIGRET WINAPI CM_Query_And_Remove_SubTree_ExW(
 /***********************************************************************
  * CM_Query_Arbitrator_Free_Data [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Query_Arbitrator_Free_Data(
-    PVOID pData, ULONG DataLen, DEVINST dnDevInst, RESOURCEID ResourceID,
-    ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Query_Arbitrator_Free_Data(
+    _Out_writes_bytes_(DataLen) PVOID pData,
+    _In_ ULONG DataLen,
+    _In_ DEVINST dnDevInst,
+    _In_ RESOURCEID ResourceID,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %lu %lx %lu 0x%08lx\n", pData, DataLen, dnDevInst,
-          ResourceID, ulFlags);
+    TRACE("CM_Query_Arbitrator_Free_Data(%p %lu %lx %lu 0x%08lx)\n",
+          pData, DataLen, dnDevInst, ResourceID, ulFlags);
 
     return CM_Query_Arbitrator_Free_Data_Ex(pData, DataLen, dnDevInst,
                                             ResourceID, ulFlags, NULL);
@@ -5520,21 +6510,23 @@ CONFIGRET WINAPI CM_Query_Arbitrator_Free_Data(
 /***********************************************************************
  * CM_Query_Arbitrator_Free_Data_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Query_Arbitrator_Free_Data_Ex(
-  OUT PVOID pData,
-  IN ULONG DataLen,
-  IN DEVINST dnDevInst,
-  IN RESOURCEID ResourceID,
-  IN ULONG ulFlags,
-  IN HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Query_Arbitrator_Free_Data_Ex(
+    _Out_writes_bytes_(DataLen) PVOID pData,
+    _In_ ULONG DataLen,
+    _In_ DEVINST dnDevInst,
+    _In_ RESOURCEID ResourceID,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
     LPWSTR lpDevInst;
     CONFIGRET ret;
 
-    TRACE("%p %lu %lx %lu 0x%08lx %p\n", pData, DataLen, dnDevInst,
-          ResourceID, ulFlags, hMachine);
+    TRACE("CM_Query_Arbitrator_Free_Data_Ex(%p %lu %lx %lu 0x%08lx %p)\n",
+          pData, DataLen, dnDevInst, ResourceID, ulFlags, hMachine);
 
     if (pData == NULL || DataLen == 0)
         return CR_INVALID_POINTER;
@@ -5587,10 +6579,16 @@ CONFIGRET WINAPI CM_Query_Arbitrator_Free_Data_Ex(
 /***********************************************************************
  * CM_Query_Arbitrator_Free_Size [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Query_Arbitrator_Free_Size(
-    PULONG pulSize, DEVINST dnDevInst, RESOURCEID ResourceID, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Query_Arbitrator_Free_Size(
+    _Out_ PULONG pulSize,
+    _In_ DEVINST dnDevInst,
+    _In_ RESOURCEID ResourceID,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %lu %lx 0x%08lx\n", pulSize, dnDevInst,ResourceID, ulFlags);
+    TRACE("CM_Query_Arbitrator_Free_Size(%p %lu %lx 0x%08lx)\n",
+          pulSize, dnDevInst,ResourceID, ulFlags);
 
     return CM_Query_Arbitrator_Free_Size_Ex(pulSize, dnDevInst, ResourceID,
                                             ulFlags, NULL);
@@ -5600,17 +6598,22 @@ CONFIGRET WINAPI CM_Query_Arbitrator_Free_Size(
 /***********************************************************************
  * CM_Query_Arbitrator_Free_Size_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Query_Arbitrator_Free_Size_Ex(
-      PULONG pulSize, DEVINST dnDevInst, RESOURCEID ResourceID,
-      ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Query_Arbitrator_Free_Size_Ex(
+    _Out_ PULONG pulSize,
+    _In_ DEVINST dnDevInst,
+    _In_ RESOURCEID ResourceID,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
     LPWSTR lpDevInst;
     CONFIGRET ret;
 
-    TRACE("%p %lu %lx 0x%08lx %p\n", pulSize, dnDevInst,ResourceID, ulFlags,
-          hMachine);
+    TRACE("CM_Query_Arbitrator_Free_Size_Ex(%p %lu %lx 0x%08lx %p)\n",
+          pulSize, dnDevInst,ResourceID, ulFlags, hMachine);
 
     if (pulSize == NULL)
         return CR_INVALID_POINTER;
@@ -5664,10 +6667,15 @@ CONFIGRET WINAPI CM_Query_Arbitrator_Free_Size_Ex(
  *
  * This function is obsolete in Windows XP and above.
  */
-CONFIGRET WINAPI CM_Query_Remove_SubTree(
-    DEVINST dnAncestor, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Query_Remove_SubTree(
+    _In_ DEVINST dnAncestor,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %lx\n", dnAncestor, ulFlags);
+    TRACE("CM_Query_Remove_SubTree(%lx %lx)\n",
+          dnAncestor, ulFlags);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -5677,21 +6685,150 @@ CONFIGRET WINAPI CM_Query_Remove_SubTree(
  *
  * This function is obsolete in Windows XP and above.
  */
-CONFIGRET WINAPI CM_Query_Remove_SubTree_Ex(
-    DEVINST dnAncestor, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Query_Remove_SubTree_Ex(
+    _In_ DEVINST dnAncestor,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
-    TRACE("%lx %lx %lx\n", dnAncestor, ulFlags, hMachine);
+    TRACE("CM_Query_Remove_SubTree_Ex(%lx %lx %p)\n",
+          dnAncestor, ulFlags, hMachine);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
 
+/***********************************************************************
+ * CM_Query_Resource_Conflict_List [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Query_Resource_Conflict_List(
+    _Out_ PCONFLICT_LIST pclConflictList,
+    _In_ DEVINST dnDevInst,
+    _In_ RESOURCEID ResourceID,
+    _In_ PCVOID ResourceData,
+    _In_ ULONG ResourceLen,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
+{
+    RPC_BINDING_HANDLE BindingHandle = NULL;
+    HSTRING_TABLE StringTable = NULL;
+    PPNP_CONFLICT_LIST pConflictBuffer = NULL;
+    PCONFLICT_DATA pConflictData = NULL;
+    ULONG ulBufferLength;
+    LPWSTR lpDevInst;
+    CONFIGRET ret;
+
+    FIXME("CM_Query_Resource_Conflict_List(%p %lx %lu %p %lu %lx %p)\n",
+          pclConflictList, dnDevInst, ResourceID, ResourceData,
+          ResourceLen, ulFlags, hMachine);
+
+    if (dnDevInst == 0)
+        return CR_INVALID_DEVNODE;
+
+    if (ulFlags & ~CM_RESDES_WIDTH_BITS)
+        return CR_INVALID_FLAG;
+
+    if (pclConflictList == NULL ||
+        ResourceData == NULL ||
+        ResourceLen == 0)
+        return CR_INVALID_POINTER;
+
+    if (ResourceID == 0)
+        return CR_INVALID_RESOURCEID;
+
+    *pclConflictList = 0;
+
+    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;
+
+    pConflictData = MyMalloc(sizeof(PCONFLICT_DATA));
+    if (pConflictData == NULL)
+    {
+        ret = CR_OUT_OF_MEMORY;
+        goto done;
+    }
+
+    ulBufferLength = sizeof(PNP_CONFLICT_LIST) +
+                     sizeof(PNP_CONFLICT_STRINGS) +
+                     (sizeof(wchar_t) * 200);
+    pConflictBuffer = MyMalloc(ulBufferLength);
+    if (pConflictBuffer == NULL)
+    {
+        ret = CR_OUT_OF_MEMORY;
+        goto done;
+    }
+
+    RpcTryExcept
+    {
+        ret = PNP_QueryResConfList(BindingHandle,
+                                   lpDevInst,
+                                   ResourceID,
+                                   (PBYTE)ResourceData,
+                                   ResourceLen,
+                                   (PBYTE)pConflictBuffer,
+                                   ulBufferLength,
+                                   ulFlags);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        ret = RpcStatusToCmStatus(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    if (ret != CR_SUCCESS)
+        goto done;
+
+    pConflictData->ulMagic = CONFLICT_MAGIC;
+    pConflictData->pConflictList = pConflictBuffer;
+
+    *pclConflictList = (CONFLICT_LIST)pConflictData;
+
+done:
+    if (ret != CR_SUCCESS)
+    {
+        if (pConflictBuffer != NULL)
+            MyFree(pConflictBuffer);
+
+        if (pConflictData != NULL)
+            MyFree(pConflictData);
+    }
+
+    return ret;
+}
+
+
 /***********************************************************************
  * CM_Reenumerate_DevNode [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Reenumerate_DevNode(
-    DEVINST dnDevInst, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Reenumerate_DevNode(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %lx\n", dnDevInst, ulFlags);
+    TRACE("CM_Reenumerate_DevNode(%lx %lx)\n",
+          dnDevInst, ulFlags);
+
     return CM_Reenumerate_DevNode_Ex(dnDevInst, ulFlags, NULL);
 }
 
@@ -5701,14 +6838,17 @@ CONFIGRET WINAPI CM_Reenumerate_DevNode(
  */
 CONFIGRET WINAPI
 CM_Reenumerate_DevNode_Ex(
-    DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
     LPWSTR lpDevInst;
     CONFIGRET ret;
 
-    FIXME("%lx %lx %lx\n", dnDevInst, ulFlags, hMachine);
+    FIXME("CM_Reenumerate_DevNode_Ex(%lx %lx %p)\n",
+          dnDevInst, ulFlags, hMachine);
 
     if (dnDevInst == 0)
         return CR_INVALID_DEVNODE;
@@ -5754,14 +6894,97 @@ CM_Reenumerate_DevNode_Ex(
 }
 
 
+/***********************************************************************
+ * CM_Register_Device_Driver [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Register_Device_Driver(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags)
+{
+    TRACE("CM_Register_Device_Driver(%lx 0x%08lx)\n",
+          dnDevInst, ulFlags);
+
+    return CM_Register_Device_Driver_Ex(dnDevInst, ulFlags, NULL);
+}
+
+
+/***********************************************************************
+ * CM_Register_Device_Driver_Ex [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Register_Device_Driver_Ex(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
+{
+    RPC_BINDING_HANDLE BindingHandle = NULL;
+    HSTRING_TABLE StringTable = NULL;
+    LPWSTR lpDevInst;
+    CONFIGRET ret;
+
+    TRACE("CM_Register_Device_Driver_Ex(%lx 0x%08lx %p)\n",
+          dnDevInst, ulFlags, hMachine);
+
+    if (dnDevInst == 0)
+        return CR_INVALID_DEVNODE;
+
+    if (ulFlags & ~CM_REGISTER_DEVICE_DRIVER_BITS)
+        return CR_INVALID_FLAG;
+
+    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_RegisterDriver(BindingHandle,
+                                 lpDevInst,
+                                 ulFlags);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        ret = RpcStatusToCmStatus(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return ret;
+}
+
+
 /***********************************************************************
  * CM_Register_Device_InterfaceA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Register_Device_InterfaceA(
-    DEVINST dnDevInst, LPGUID InterfaceClassGuid, LPCSTR pszReference,
-    LPSTR pszDeviceInterface, PULONG pulLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Register_Device_InterfaceA(
+    _In_ DEVINST dnDevInst,
+    _In_ LPGUID InterfaceClassGuid,
+    _In_opt_ LPCSTR pszReference,
+    _Out_writes_(*pulLength) LPSTR pszDeviceInterface,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %s %s %p %p %lx\n", dnDevInst, debugstr_guid(InterfaceClassGuid),
+    TRACE("CM_Register_Device_InterfaceA(%lx %s %s %p %p %lx)\n",
+          dnDevInst, debugstr_guid(InterfaceClassGuid),
           pszReference, pszDeviceInterface, pulLength, ulFlags);
 
     return CM_Register_Device_Interface_ExA(dnDevInst, InterfaceClassGuid,
@@ -5773,11 +6996,18 @@ CONFIGRET WINAPI CM_Register_Device_InterfaceA(
 /***********************************************************************
  * CM_Register_Device_InterfaceW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Register_Device_InterfaceW(
-    DEVINST dnDevInst, LPGUID InterfaceClassGuid, LPCWSTR pszReference,
-    LPWSTR pszDeviceInterface, PULONG pulLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Register_Device_InterfaceW(
+    _In_ DEVINST dnDevInst,
+    _In_ LPGUID InterfaceClassGuid,
+    _In_opt_ LPCWSTR pszReference,
+    _Out_writes_(*pulLength) LPWSTR pszDeviceInterface,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %s %s %p %p %lx\n", dnDevInst, debugstr_guid(InterfaceClassGuid),
+    TRACE("CM_Register_Device_InterfaceW(%lx %s %s %p %p %lx)\n",
+          dnDevInst, debugstr_guid(InterfaceClassGuid),
           debugstr_w(pszReference), pszDeviceInterface, pulLength, ulFlags);
 
     return CM_Register_Device_Interface_ExW(dnDevInst, InterfaceClassGuid,
@@ -5789,17 +7019,25 @@ CONFIGRET WINAPI CM_Register_Device_InterfaceW(
 /***********************************************************************
  * CM_Register_Device_Interface_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Register_Device_Interface_ExA(
-    DEVINST dnDevInst, LPGUID InterfaceClassGuid, LPCSTR pszReference,
-    LPSTR pszDeviceInterface, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Register_Device_Interface_ExA(
+    _In_ DEVINST dnDevInst,
+    _In_ LPGUID InterfaceClassGuid,
+    _In_opt_ LPCSTR pszReference,
+    _Out_writes_(*pulLength) LPSTR pszDeviceInterface,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     LPWSTR pszReferenceW = NULL;
     LPWSTR pszDeviceInterfaceW = NULL;
     ULONG ulLength;
     CONFIGRET ret;
 
-    TRACE("%lx %s %s %p %p %lx %lx\n", dnDevInst, debugstr_guid(InterfaceClassGuid),
-          pszReference, pszDeviceInterface, pulLength, ulFlags, hMachine);
+    TRACE("CM_Register_Device_Interface_ExA(%lx %s %s %p %p %lx %p)\n",
+          dnDevInst, debugstr_guid(InterfaceClassGuid), debugstr_a(pszReference),
+          pszDeviceInterface, pulLength, ulFlags, hMachine);
 
     if (pulLength == NULL || pszDeviceInterface == NULL)
         return CR_INVALID_POINTER;
@@ -5855,9 +7093,16 @@ Done:
 /***********************************************************************
  * CM_Register_Device_Interface_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Register_Device_Interface_ExW(
-    DEVINST dnDevInst, LPGUID InterfaceClassGuid, LPCWSTR pszReference,
-    LPWSTR pszDeviceInterface, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Register_Device_Interface_ExW(
+    _In_ DEVINST dnDevInst,
+    _In_ LPGUID InterfaceClassGuid,
+    _In_opt_ LPCWSTR pszReference,
+    _Out_writes_(*pulLength) LPWSTR pszDeviceInterface,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
@@ -5865,8 +7110,9 @@ CONFIGRET WINAPI CM_Register_Device_Interface_ExW(
     ULONG ulTransferLength;
     CONFIGRET ret;
 
-    TRACE("%lx %s %s %p %p %lx %lx\n", dnDevInst, debugstr_guid(InterfaceClassGuid),
-          debugstr_w(pszReference), pszDeviceInterface, pulLength, ulFlags, hMachine);
+    TRACE("CM_Register_Device_Interface_ExW(%lx %s %s %p %p %lx %p)\n",
+          dnDevInst, debugstr_guid(InterfaceClassGuid), debugstr_w(pszReference),
+          pszDeviceInterface, pulLength, ulFlags, hMachine);
 
     if (dnDevInst == 0)
         return CR_INVALID_DEVNODE;
@@ -5922,81 +7168,20 @@ CONFIGRET WINAPI CM_Register_Device_Interface_ExW(
 }
 
 
-/***********************************************************************
- * CM_Register_Device_Driver [SETUPAPI.@]
- */
-CONFIGRET WINAPI CM_Register_Device_Driver(
-    DEVINST dnDevInst, ULONG ulFlags)
-{
-    TRACE("%lx 0x%08lx\n", dnDevInst, ulFlags);
-    return CM_Register_Device_Driver_Ex(dnDevInst, ulFlags, NULL);
-}
-
-
-/***********************************************************************
- * CM_Register_Device_Driver [SETUPAPI.@]
- */
-CONFIGRET WINAPI CM_Register_Device_Driver_Ex(
-    DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
-{
-    RPC_BINDING_HANDLE BindingHandle = NULL;
-    HSTRING_TABLE StringTable = NULL;
-    LPWSTR lpDevInst;
-    CONFIGRET ret;
-
-    TRACE("%lx 0x%08lx %p\n", dnDevInst, ulFlags, hMachine);
-
-    if (dnDevInst == 0)
-        return CR_INVALID_DEVNODE;
-
-    if (ulFlags & ~CM_REGISTER_DEVICE_DRIVER_BITS)
-        return CR_INVALID_FLAG;
-
-    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_RegisterDriver(BindingHandle,
-                                 lpDevInst,
-                                 ulFlags);
-    }
-    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
-    {
-        ret = RpcStatusToCmStatus(RpcExceptionCode());
-    }
-    RpcEndExcept;
-
-    return ret;
-}
-
-
 /***********************************************************************
  * CM_Remove_SubTree [SETUPAPI.@]
  *
  * This function is obsolete in Windows XP and above.
  */
-CONFIGRET WINAPI CM_Remove_SubTree(
-    DEVINST dnAncestor, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Remove_SubTree(
+    _In_ DEVINST dnAncestor,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %lx\n", dnAncestor, ulFlags);
+    TRACE("CM_Remove_SubTree(%lx %lx)\n",
+          dnAncestor, ulFlags);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -6006,10 +7191,16 @@ CONFIGRET WINAPI CM_Remove_SubTree(
  *
  * This function is obsolete in Windows XP and above.
  */
-CONFIGRET WINAPI CM_Remove_SubTree_Ex(
-    DEVINST dnAncestor, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Remove_SubTree_Ex(
+    _In_ DEVINST dnAncestor,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
-    TRACE("%lx %lx %lx\n", dnAncestor, ulFlags, hMachine);
+    TRACE("CM_Remove_SubTree_Ex(%lx %lx %p)\n",
+          dnAncestor, ulFlags, hMachine);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -6017,12 +7208,18 @@ CONFIGRET WINAPI CM_Remove_SubTree_Ex(
 /***********************************************************************
  * CM_Request_Device_EjectA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Request_Device_EjectA(
-    DEVINST dnDevInst, PPNP_VETO_TYPE pVetoType, LPSTR pszVetoName,
-    ULONG ulNameLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Request_Device_EjectA(
+    _In_ DEVINST dnDevInst,
+    _Out_opt_ PPNP_VETO_TYPE pVetoType,
+    _Out_writes_opt_(ulNameLength) LPSTR pszVetoName,
+    _In_ ULONG ulNameLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %p %s %lu %lx\n", dnDevInst, pVetoType, pszVetoName,
-          ulNameLength, ulFlags);
+    TRACE("CM_Request_Device_EjectA(%lx %p %s %lu %lx)\n",
+          dnDevInst, pVetoType, debugstr_a(pszVetoName), ulNameLength, ulFlags);
+
     return CM_Request_Device_Eject_ExA(dnDevInst, pVetoType, pszVetoName,
                                        ulNameLength, ulFlags, NULL);
 }
@@ -6031,12 +7228,18 @@ CONFIGRET WINAPI CM_Request_Device_EjectA(
 /***********************************************************************
  * CM_Request_Device_EjectW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Request_Device_EjectW(
-    DEVINST dnDevInst, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName,
-    ULONG ulNameLength, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Request_Device_EjectW(
+    _In_ DEVINST dnDevInst,
+    _Out_opt_ PPNP_VETO_TYPE pVetoType,
+    _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName,
+    _In_ ULONG ulNameLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %p %s %lu %lx\n", dnDevInst, pVetoType, debugstr_w(pszVetoName),
-          ulNameLength, ulFlags);
+    TRACE("CM_Request_Device_EjectW(%lx %p %s %lu %lx)\n",
+          dnDevInst, pVetoType, debugstr_w(pszVetoName), ulNameLength, ulFlags);
+
     return CM_Request_Device_Eject_ExW(dnDevInst, pVetoType, pszVetoName,
                                        ulNameLength, ulFlags, NULL);
 }
@@ -6045,15 +7248,21 @@ CONFIGRET WINAPI CM_Request_Device_EjectW(
 /***********************************************************************
  * CM_Request_Device_Eject_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Request_Device_Eject_ExA(
-    DEVINST dnDevInst, PPNP_VETO_TYPE pVetoType, LPSTR pszVetoName,
-    ULONG ulNameLength, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Request_Device_Eject_ExA(
+    _In_ DEVINST dnDevInst,
+    _Out_opt_ PPNP_VETO_TYPE pVetoType,
+    _Out_writes_opt_(ulNameLength) LPSTR pszVetoName,
+    _In_ ULONG ulNameLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     LPWSTR lpLocalVetoName;
     CONFIGRET ret;
 
-    TRACE("%lx %p %s %lu %lx %lx\n", dnDevInst, pVetoType, pszVetoName,
-          ulNameLength, ulFlags, hMachine);
+    TRACE("CM_Request_Device_Eject_ExA(%lx %p %s %lu %lx %p)\n",
+          dnDevInst, pVetoType, debugstr_a(pszVetoName), ulNameLength, ulFlags, hMachine);
 
     if (pszVetoName == NULL && ulNameLength == 0)
         return CR_INVALID_POINTER;
@@ -6086,17 +7295,23 @@ CONFIGRET WINAPI CM_Request_Device_Eject_ExA(
 /***********************************************************************
  * CM_Request_Device_Eject_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Request_Device_Eject_ExW(
-    DEVINST dnDevInst, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName,
-    ULONG ulNameLength, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Request_Device_Eject_ExW(
+    _In_ DEVINST dnDevInst,
+    _Out_opt_ PPNP_VETO_TYPE pVetoType,
+    _Out_writes_opt_(ulNameLength) LPWSTR pszVetoName,
+    _In_ ULONG ulNameLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
     LPWSTR lpDevInst;
     CONFIGRET ret;
 
-    TRACE("%lx %p %s %lu %lx %lx\n", dnDevInst, pVetoType,
-          debugstr_w(pszVetoName), ulNameLength, ulFlags, hMachine);
+    TRACE("CM_Request_Device_Eject_ExW(%lx %p %s %lu %lx %p)\n",
+          dnDevInst, pVetoType, debugstr_w(pszVetoName), ulNameLength, ulFlags, hMachine);
 
     if (dnDevInst == 0)
         return CR_INVALID_DEVNODE;
@@ -6149,9 +7364,12 @@ CONFIGRET WINAPI CM_Request_Device_Eject_ExW(
 /***********************************************************************
  * CM_Request_Eject_PC [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Request_Eject_PC(VOID)
+CONFIGRET
+WINAPI
+CM_Request_Eject_PC(VOID)
 {
-    TRACE("\n");
+    TRACE("CM_Request_Eject_PC()\n");
+
     return CM_Request_Eject_PC_Ex(NULL);
 }
 
@@ -6159,13 +7377,15 @@ CONFIGRET WINAPI CM_Request_Eject_PC(VOID)
 /***********************************************************************
  * CM_Request_Eject_PC_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Request_Eject_PC_Ex(
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Request_Eject_PC_Ex(
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
 
-    TRACE("%lx\n", hMachine);
+    TRACE("CM_Request_Eject_PC_Ex(%p)\n", hMachine);
 
     if (hMachine != NULL)
     {
@@ -6196,10 +7416,13 @@ CONFIGRET WINAPI CM_Request_Eject_PC_Ex(
 /***********************************************************************
  * CM_Run_Detection [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Run_Detection(
-    ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Run_Detection(
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx\n", ulFlags);
+    TRACE("CM_Run_Detection(%lx)\n", ulFlags);
+
     return CM_Run_Detection_Ex(ulFlags, NULL);
 }
 
@@ -6207,13 +7430,17 @@ CONFIGRET WINAPI CM_Run_Detection(
 /***********************************************************************
  * CM_Run_Detection_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Run_Detection_Ex(
-    ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Run_Detection_Ex(
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
 
-    TRACE("%lx %lx\n", ulFlags, hMachine);
+    TRACE("CM_Run_Detection_Ex(%lx %p)\n",
+          ulFlags, hMachine);
 
     if (!pSetupIsUserAdmin())
         return CR_ACCESS_DENIED;
@@ -6251,12 +7478,19 @@ CONFIGRET WINAPI CM_Run_Detection_Ex(
 /***********************************************************************
  * CM_Set_Class_Registry_PropertyA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Set_Class_Registry_PropertyA(
-    LPGUID ClassGuid, ULONG ulProperty, PCVOID Buffer, ULONG ulLength,
-    ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Set_Class_Registry_PropertyA(
+    _In_ LPGUID ClassGuid,
+    _In_ ULONG ulProperty,
+    _In_reads_bytes_opt_(ulLength) PCVOID Buffer,
+    _In_ ULONG ulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
-    FIXME("%p %lx %p %lu %lx %p\n",
+    FIXME("CM_Set_Class_Registry_PropertyA(%p %lx %p %lu %lx %p)\n",
           ClassGuid, ulProperty, Buffer, ulLength, ulFlags, hMachine);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -6264,12 +7498,19 @@ CONFIGRET WINAPI CM_Set_Class_Registry_PropertyA(
 /***********************************************************************
  * CM_Set_Class_Registry_PropertyW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Set_Class_Registry_PropertyW(
-    LPGUID ClassGuid, ULONG ulProperty, PCVOID Buffer, ULONG ulLength,
-    ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Set_Class_Registry_PropertyW(
+    _In_ LPGUID ClassGuid,
+    _In_ ULONG ulProperty,
+    _In_reads_bytes_opt_(ulLength) PCVOID Buffer,
+    _In_ ULONG ulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
-    FIXME("%p %lx %p %lu %lx %p\n",
+    FIXME("CM_Set_Class_Registry_PropertyW(%p %lx %p %lu %lx %p)\n",
           ClassGuid, ulProperty, Buffer, ulLength, ulFlags, hMachine);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -6277,10 +7518,16 @@ CONFIGRET WINAPI CM_Set_Class_Registry_PropertyW(
 /***********************************************************************
  * CM_Set_DevNode_Problem [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Set_DevNode_Problem(
-    DEVINST dnDevInst, ULONG ulProblem, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Problem(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulProblem,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %lx %lx\n", dnDevInst, ulProblem, ulFlags);
+    TRACE("CM_Set_DevNode_Problem(%lx %lx %lx)\n",
+          dnDevInst, ulProblem, ulFlags);
+
     return CM_Set_DevNode_Problem_Ex(dnDevInst, ulProblem, ulFlags, NULL);
 }
 
@@ -6288,15 +7535,21 @@ CONFIGRET WINAPI CM_Set_DevNode_Problem(
 /***********************************************************************
  * CM_Set_DevNode_Problem_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Set_DevNode_Problem_Ex(
-    DEVINST dnDevInst, ULONG ulProblem, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Problem_Ex(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulProblem,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
     LPWSTR lpDevInst;
     CONFIGRET ret;
 
-    TRACE("%lx %lx %lx %lx\n", dnDevInst, ulProblem, ulFlags, hMachine);
+    TRACE("CM_Set_DevNode_Problem_Ex(%lx %lx %lx %p)\n",
+          dnDevInst, ulProblem, ulFlags, hMachine);
 
     if (dnDevInst == 0)
         return CR_INVALID_DEVNODE;
@@ -6344,12 +7597,18 @@ CONFIGRET WINAPI CM_Set_DevNode_Problem_Ex(
 /***********************************************************************
  * CM_Set_DevNode_Registry_PropertyA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Set_DevNode_Registry_PropertyA(
-    DEVINST dnDevInst, ULONG ulProperty, PCVOID Buffer, ULONG ulLength,
-    ULONG ulFlags)
-{
-    TRACE("%lx %lu %p %lx %lx\n",
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Registry_PropertyA(
+  _In_ DEVINST dnDevInst,
+  _In_ ULONG ulProperty,
+  _In_reads_bytes_opt_(ulLength) PCVOID Buffer,
+  _In_ ULONG ulLength,
+  _In_ ULONG ulFlags)
+{
+    TRACE("CM_Set_DevNode_Registry_PropertyA(%lx %lu %p %lx %lx)\n",
           dnDevInst, ulProperty, Buffer, ulLength, ulFlags);
+
     return CM_Set_DevNode_Registry_Property_ExA(dnDevInst, ulProperty,
                                                 Buffer, ulLength,
                                                 ulFlags, NULL);
@@ -6359,12 +7618,18 @@ CONFIGRET WINAPI CM_Set_DevNode_Registry_PropertyA(
 /***********************************************************************
  * CM_Set_DevNode_Registry_PropertyW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Set_DevNode_Registry_PropertyW(
-    DEVINST dnDevInst, ULONG ulProperty, PCVOID Buffer, ULONG ulLength,
-    ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Registry_PropertyW(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulProperty,
+    _In_reads_bytes_opt_(ulLength) PCVOID Buffer,
+    _In_ ULONG ulLength,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %lu %p %lx %lx\n",
+    TRACE("CM_Set_DevNode_Registry_PropertyW(%lx %lu %p %lx %lx)\n",
           dnDevInst, ulProperty, Buffer, ulLength, ulFlags);
+
     return CM_Set_DevNode_Registry_Property_ExW(dnDevInst, ulProperty,
                                                 Buffer, ulLength,
                                                 ulFlags, NULL);
@@ -6374,15 +7639,21 @@ CONFIGRET WINAPI CM_Set_DevNode_Registry_PropertyW(
 /***********************************************************************
  * CM_Set_DevNode_Registry_Property_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExA(
-    DEVINST dnDevInst, ULONG ulProperty, PCVOID Buffer, ULONG ulLength,
-    ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Registry_Property_ExA(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulProperty,
+    _In_reads_bytes_opt_(ulLength) PCVOID Buffer,
+    _In_ ULONG ulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     CONFIGRET ret = CR_SUCCESS;
     LPWSTR lpBuffer;
     ULONG ulType;
 
-    FIXME("%lx %lu %p %lx %lx %lx\n",
+    FIXME("CM_Set_DevNode_Registry_Property_ExA(%lx %lu %p %lx %lx %p)\n",
           dnDevInst, ulProperty, Buffer, ulLength, ulFlags, hMachine);
 
     if (Buffer == NULL && ulLength != 0)
@@ -6454,9 +7725,15 @@ CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExA(
 /***********************************************************************
  * CM_Set_DevNode_Registry_Property_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExW(
-    DEVINST dnDevInst, ULONG ulProperty, PCVOID Buffer, ULONG ulLength,
-    ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Set_DevNode_Registry_Property_ExW(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulProperty,
+    _In_reads_bytes_opt_(ulLength) PCVOID Buffer,
+    _In_ ULONG ulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
@@ -6464,7 +7741,7 @@ CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExW(
     ULONG ulType;
     CONFIGRET ret;
 
-    TRACE("%lx %lu %p %lx %lx %lx\n",
+    TRACE("CM_Set_DevNode_Registry_Property_ExW(%lx %lu %p %lx %lx %p)\n",
           dnDevInst, ulProperty, Buffer, ulLength, ulFlags, hMachine);
 
     if (dnDevInst == 0)
@@ -6525,10 +7802,15 @@ CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExW(
 /***********************************************************************
  * CM_Set_HW_Prof [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Set_HW_Prof(
-    ULONG ulHardwareProfile, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof(
+    _In_ ULONG ulHardwareProfile,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lu %lu\n", ulHardwareProfile, ulFlags);
+    TRACE("CM_Set_HW_Prof(%lu %lx)\n",
+          ulHardwareProfile, ulFlags);
+
     return CM_Set_HW_Prof_Ex(ulHardwareProfile, ulFlags, NULL);
 }
 
@@ -6536,13 +7818,18 @@ CONFIGRET WINAPI CM_Set_HW_Prof(
 /***********************************************************************
  * CM_Set_HW_Prof_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Set_HW_Prof_Ex(
-    ULONG ulHardwareProfile, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof_Ex(
+    _In_ ULONG ulHardwareProfile,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
 
-    TRACE("%lu %lu %lx\n", ulHardwareProfile, ulFlags, hMachine);
+    TRACE("CM_Set_HW_Prof_Ex(%lu %lx %p)\n",
+          ulHardwareProfile, ulFlags, hMachine);
 
     if (!pSetupIsUserAdmin())
         return CR_ACCESS_DENIED;
@@ -6579,12 +7866,17 @@ CONFIGRET WINAPI CM_Set_HW_Prof_Ex(
 /***********************************************************************
  * CM_Set_HW_Prof_FlagsA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Set_HW_Prof_FlagsA(
-    DEVINSTID_A szDevInstName, ULONG ulConfig, ULONG ulValue,
-    ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof_FlagsA(
+    _In_ DEVINSTID_A szDevInstName,
+    _In_ ULONG ulConfig,
+    _In_ ULONG ulValue,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%s %lu %lu %lx\n", szDevInstName,
-          ulConfig, ulValue, ulFlags);
+    TRACE("CM_Set_HW_Prof_FlagsA(%s %lu %lu %lx)\n",
+          debugstr_a(szDevInstName), ulConfig, ulValue, ulFlags);
+
     return CM_Set_HW_Prof_Flags_ExA(szDevInstName, ulConfig, ulValue,
                                     ulFlags, NULL);
 }
@@ -6593,12 +7885,17 @@ CONFIGRET WINAPI CM_Set_HW_Prof_FlagsA(
 /***********************************************************************
  * CM_Set_HW_Prof_FlagsW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Set_HW_Prof_FlagsW(
-    DEVINSTID_W szDevInstName, ULONG ulConfig, ULONG ulValue,
-    ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof_FlagsW(
+    _In_ DEVINSTID_W szDevInstName,
+    _In_ ULONG ulConfig,
+    _In_ ULONG ulValue,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%s %lu %lu %lx\n", debugstr_w(szDevInstName),
-          ulConfig, ulValue, ulFlags);
+    TRACE("CM_Set_HW_Prof_FlagsW(%s %lu %lu %lx)\n",
+          debugstr_w(szDevInstName), ulConfig, ulValue, ulFlags);
+
     return CM_Set_HW_Prof_Flags_ExW(szDevInstName, ulConfig, ulValue,
                                     ulFlags, NULL);
 }
@@ -6607,15 +7904,20 @@ CONFIGRET WINAPI CM_Set_HW_Prof_FlagsW(
 /***********************************************************************
  * CM_Set_HW_Prof_Flags_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Set_HW_Prof_Flags_ExA(
-    DEVINSTID_A szDevInstName, ULONG ulConfig, ULONG ulValue,
-    ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof_Flags_ExA(
+    _In_ DEVINSTID_A szDevInstName,
+    _In_ ULONG ulConfig,
+    _In_ ULONG ulValue,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     DEVINSTID_W pszDevIdW = NULL;
     CONFIGRET ret = CR_SUCCESS;
 
-    TRACE("%s %lu %lu %lx %lx\n", szDevInstName,
-          ulConfig, ulValue, ulFlags, hMachine);
+    TRACE("CM_Set_HW_Prof_Flags_ExA(%s %lu %lu %lx %p)\n",
+          debugstr_a(szDevInstName), ulConfig, ulValue, ulFlags, hMachine);
 
     if (szDevInstName != NULL)
     {
@@ -6636,15 +7938,20 @@ CONFIGRET WINAPI CM_Set_HW_Prof_Flags_ExA(
 /***********************************************************************
  * CM_Set_HW_Prof_Flags_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Set_HW_Prof_Flags_ExW(
-    DEVINSTID_W szDevInstName, ULONG ulConfig, ULONG ulValue,
-    ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof_Flags_ExW(
+    _In_ DEVINSTID_W szDevInstName,
+    _In_ ULONG ulConfig,
+    _In_ ULONG ulValue,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
 
-    FIXME("%s %lu %lu %lx %lx\n", debugstr_w(szDevInstName),
-          ulConfig, ulValue, ulFlags, hMachine);
+    FIXME("CM_Set_HW_Prof_Flags_ExW(%s %lu %lu %lx %p)\n",
+          debugstr_w(szDevInstName), ulConfig, ulValue, ulFlags, hMachine);
 
     if (szDevInstName == NULL)
         return CR_INVALID_POINTER;
@@ -6684,10 +7991,15 @@ CONFIGRET WINAPI CM_Set_HW_Prof_Flags_ExW(
 /***********************************************************************
  * CM_Setup_DevNode [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Setup_DevNode(
-    DEVINST dnDevInst, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Setup_DevNode(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %lx\n", dnDevInst, ulFlags);
+    TRACE("CM_Setup_DevNode(%lx %lx)\n",
+          dnDevInst, ulFlags);
+
     return CM_Setup_DevNode_Ex(dnDevInst, ulFlags, NULL);
 }
 
@@ -6695,15 +8007,20 @@ CONFIGRET WINAPI CM_Setup_DevNode(
 /***********************************************************************
  * CM_Setup_DevNode_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Setup_DevNode_Ex(
-    DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Setup_DevNode_Ex(
+    _In_ DEVINST dnDevInst,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
     LPWSTR lpDevInst;
     CONFIGRET ret;
 
-    FIXME("%lx %lx %lx\n", dnDevInst, ulFlags, hMachine);
+    FIXME("CM_Setup_DevNode_Ex(%lx %lx %p)\n",
+          dnDevInst, ulFlags, hMachine);
 
     if (!pSetupIsUserAdmin())
         return CR_ACCESS_DENIED;
@@ -6772,10 +8089,15 @@ CM_Test_Range_Available(
 /***********************************************************************
  * CM_Uninstall_DevNode [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Uninstall_DevNode(
-    DEVINST dnPhantom, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Uninstall_DevNode(
+    _In_ DEVINST dnPhantom,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %lx\n", dnPhantom, ulFlags);
+    TRACE("CM_Uninstall_DevNode(%lx %lx)\n",
+          dnPhantom, ulFlags);
+
     return CM_Uninstall_DevNode_Ex(dnPhantom, ulFlags, NULL);
 }
 
@@ -6783,15 +8105,20 @@ CONFIGRET WINAPI CM_Uninstall_DevNode(
 /***********************************************************************
  * CM_Uninstall_DevNode_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Uninstall_DevNode_Ex(
-    DEVINST dnPhantom, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Uninstall_DevNode_Ex(
+    _In_ DEVINST dnPhantom,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
     LPWSTR lpDevInst;
     CONFIGRET ret;
 
-    TRACE("%lx %lx %lx\n", dnPhantom, ulFlags, hMachine);
+    TRACE("CM_Uninstall_DevNode_Ex(%lx %lx %p)\n",
+          dnPhantom, ulFlags, hMachine);
 
     if (dnPhantom == 0)
         return CR_INVALID_DEVNODE;
@@ -6838,10 +8165,14 @@ CONFIGRET WINAPI CM_Uninstall_DevNode_Ex(
 /***********************************************************************
  * CM_Unregister_Device_InterfaceA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Unregister_Device_InterfaceA(
-    LPCSTR pszDeviceInterface, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Unregister_Device_InterfaceA(
+    _In_ LPCSTR pszDeviceInterface,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%s %lx\n", pszDeviceInterface, ulFlags);
+    TRACE("CM_Unregister_Device_InterfaceA(%s %lx)\n",
+          debugstr_a(pszDeviceInterface), ulFlags);
 
     return CM_Unregister_Device_Interface_ExA(pszDeviceInterface,
                                               ulFlags, NULL);
@@ -6851,10 +8182,14 @@ CONFIGRET WINAPI CM_Unregister_Device_InterfaceA(
 /***********************************************************************
  * CM_Unregister_Device_InterfaceW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Unregister_Device_InterfaceW(
-    LPCWSTR pszDeviceInterface, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Unregister_Device_InterfaceW(
+    _In_ LPCWSTR pszDeviceInterface,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%s %lx\n", debugstr_w(pszDeviceInterface), ulFlags);
+    TRACE("CM_Unregister_Device_InterfaceW(%s %lx)\n",
+          debugstr_w(pszDeviceInterface), ulFlags);
 
     return CM_Unregister_Device_Interface_ExW(pszDeviceInterface,
                                               ulFlags, NULL);
@@ -6864,13 +8199,18 @@ CONFIGRET WINAPI CM_Unregister_Device_InterfaceW(
 /***********************************************************************
  * CM_Unregister_Device_Interface_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Unregister_Device_Interface_ExA(
-    LPCSTR pszDeviceInterface, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Unregister_Device_Interface_ExA(
+    _In_ LPCSTR pszDeviceInterface,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     LPWSTR pszDeviceInterfaceW = NULL;
     CONFIGRET ret;
 
-    TRACE("%s %lx %lx\n", pszDeviceInterface, ulFlags, hMachine);
+    TRACE("CM_Unregister_Device_Interface_ExA(%s %lx %p)\n",
+          debugstr_a(pszDeviceInterface), ulFlags, hMachine);
 
     if (pszDeviceInterface == NULL)
         return CR_INVALID_POINTER;
@@ -6891,13 +8231,18 @@ CONFIGRET WINAPI CM_Unregister_Device_Interface_ExA(
 /***********************************************************************
  * CM_Unregister_Device_Interface_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Unregister_Device_Interface_ExW(
-    LPCWSTR pszDeviceInterface, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Unregister_Device_Interface_ExW(
+    _In_ LPCWSTR pszDeviceInterface,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
 
-    TRACE("%s %lx %lx\n", debugstr_w(pszDeviceInterface), ulFlags, hMachine);
+    TRACE("CM_Unregister_Device_Interface_ExW(%s %lx %p)\n",
+          debugstr_w(pszDeviceInterface), ulFlags, hMachine);
 
     if (pszDeviceInterface == NULL)
         return CR_INVALID_POINTER;