[SETUPAPI] Fix broken control definition.
[reactos.git] / dll / win32 / setupapi / cfgmgr.c
index f2ad0d7..c7087e6 100644 (file)
@@ -69,23 +69,38 @@ 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;
+    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
+
 
-static BOOL GuidToString(LPGUID Guid, LPWSTR String)
+/* FUNCTIONS ****************************************************************/
+
+static
+BOOL
+GuidToString(
+    _In_ LPGUID Guid,
+    _Out_ LPWSTR String)
 {
     LPWSTR lpString;
 
@@ -104,8 +119,10 @@ static BOOL GuidToString(LPGUID Guid, LPWSTR String)
 }
 
 
-static CONFIGRET
-RpcStatusToCmStatus(RPC_STATUS Status)
+static
+CONFIGRET
+RpcStatusToCmStatus(
+    _In_ RPC_STATUS Status)
 {
     return CR_FAILURE;
 }
@@ -114,7 +131,7 @@ RpcStatusToCmStatus(RPC_STATUS Status)
 static
 ULONG
 GetRegistryPropertyType(
-    ULONG ulProperty)
+    _In_ ULONG ulProperty)
 {
     switch (ulProperty)
     {
@@ -164,6 +181,246 @@ GetRegistryPropertyType(
 }
 
 
+static
+VOID
+SplitDeviceInstanceId(
+    _In_ PWSTR pszDeviceInstanceId,
+    _Out_ PWSTR pszDeviceId,
+    _Out_ PWSTR pszInstanceId)
+{
+    PWCHAR ptr;
+
+    wcscpy(pszDeviceId, pszDeviceInstanceId);
+
+    ptr = wcschr(pszDeviceId, L'\\');
+    if (ptr != NULL)
+    {
+        *ptr = UNICODE_NULL;
+        ptr++;
+
+        wcscpy(pszInstanceId, ptr);
+    }
+    else
+    {
+        *pszInstanceId = UNICODE_NULL;
+    }
+}
+
+
+static
+CONFIGRET
+GetDeviceInstanceKeyPath(
+    _In_ RPC_BINDING_HANDLE BindingHandle,
+    _In_ PWSTR pszDeviceInst,
+    _Out_ PWSTR pszKeyPath,
+    _Out_ PWSTR pszInstancePath,
+    _In_ ULONG ulHardwareProfile,
+    _In_ ULONG ulFlags)
+{
+    PWSTR pszBuffer = NULL;
+    ULONG ulType = 0;
+    ULONG ulTransferLength, ulLength;
+    CONFIGRET ret = CR_SUCCESS;
+
+    TRACE("GetDeviceInstanceKeyPath()\n");
+
+    /* Allocate a buffer for the device id */
+    pszBuffer = MyMalloc(300 * sizeof(WCHAR));
+    if (pszBuffer == NULL)
+    {
+        ERR("MyMalloc() failed\n");
+        return CR_OUT_OF_MEMORY;
+    }
+
+    if (ulFlags & CM_REGISTRY_SOFTWARE)
+    {
+        /* Software Key Path */
+
+        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\\Enum",
+                          pszBuffer);
+            }
+            else
+            {
+                wsprintfW(pszKeyPath,
+                          L"%s\\%04lu\\%s\\%s",
+                          L"System\\CurrentControlSet\\Hardware Profiles",
+                          ulHardwareProfile,
+                          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\\Enum",
+                      pszBuffer);
+        }
+    }
+    else
+    {
+        /* 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)
+        {
+            if (ulHardwareProfile == 0)
+            {
+                wsprintfW(pszKeyPath,
+                          L"%s\\%s\\%s\\%s",
+                          L"System\\CurrentControlSet\\Hardware Profiles",
+                          L"Current",
+                          L"System\\CurrentControlSet\\Control\\Class",
+                          pszBuffer);
+            }
+            else
+            {
+                wsprintfW(pszKeyPath,
+                          L"%s\\%04lu\\%s\\%s",
+                          L"System\\CurrentControlSet\\Hardware Profiles",
+                          ulHardwareProfile,
+                          L"System\\CurrentControlSet\\Control\\Class",
+                          pszBuffer);
+            }
+        }
+        else
+        {
+            wsprintfW(pszKeyPath,
+                      L"%s\\%s",
+                      L"System\\CurrentControlSet\\Control\\Class",
+                      pszBuffer);
+        }
+    }
+
+done:
+    if (pszBuffer != NULL)
+        MyFree(pszBuffer);
+
+    return ret;
+}
+
+
+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.@]
  */
@@ -531,11 +788,17 @@ CMP_WaitServicesAvailable(
 /***********************************************************************
  * CM_Add_Empty_Log_Conf [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Add_Empty_Log_Conf(
-    PLOG_CONF plcLogConf, DEVINST dnDevInst, PRIORITY Priority,
-    ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Add_Empty_Log_Conf(
+    _Out_ PLOG_CONF plcLogConf,
+    _In_ DEVINST dnDevInst,
+    _In_ PRIORITY Priority,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %lu %lx\n", plcLogConf, dnDevInst, Priority, ulFlags);
+    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);
 }
@@ -544,9 +807,13 @@ CONFIGRET WINAPI CM_Add_Empty_Log_Conf(
 /***********************************************************************
  * CM_Add_Empty_Log_Conf_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Add_Empty_Log_Conf_Ex(
-    PLOG_CONF plcLogConf, DEVINST dnDevInst, PRIORITY Priority,
-    ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI CM_Add_Empty_Log_Conf_Ex(
+    _Out_ PLOG_CONF plcLogConf,
+    _In_ DEVINST dnDevInst,
+    _In_ PRIORITY Priority,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
@@ -555,7 +822,7 @@ CONFIGRET WINAPI CM_Add_Empty_Log_Conf_Ex(
     PLOG_CONF_INFO pLogConfInfo;
     CONFIGRET ret = CR_SUCCESS;
 
-    FIXME("%p %p %lu %lx %p\n",
+    FIXME("CM_Add_Empty_Log_Conf_Ex(%p %p %lu %lx %p)\n",
           plcLogConf, dnDevInst, Priority, ulFlags, hMachine);
 
     if (!pSetupIsUserAdmin())
@@ -631,10 +898,16 @@ CONFIGRET WINAPI CM_Add_Empty_Log_Conf_Ex(
 /***********************************************************************
  * CM_Add_IDA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Add_IDA(
-    DEVINST dnDevInst, PSTR pszID, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Add_IDA(
+    _In_ DEVINST dnDevInst,
+    _In_ PSTR pszID,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %s %lx\n", dnDevInst, pszID, ulFlags);
+    TRACE("CM_Add_IDA(%p %s %lx)\n",
+          dnDevInst, debugstr_a(pszID), ulFlags);
+
     return CM_Add_ID_ExA(dnDevInst, pszID, ulFlags, NULL);
 }
 
@@ -642,10 +915,16 @@ CONFIGRET WINAPI CM_Add_IDA(
 /***********************************************************************
  * CM_Add_IDW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Add_IDW(
-    DEVINST dnDevInst, PWSTR pszID, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Add_IDW(
+    _In_ DEVINST dnDevInst,
+    _In_ PWSTR pszID,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %s %lx\n", dnDevInst, debugstr_w(pszID), ulFlags);
+    TRACE("CM_Add_IDW(%p %s %lx)\n",
+          dnDevInst, debugstr_w(pszID), ulFlags);
+
     return CM_Add_ID_ExW(dnDevInst, pszID, ulFlags, NULL);
 }
 
@@ -653,13 +932,19 @@ CONFIGRET WINAPI CM_Add_IDW(
 /***********************************************************************
  * CM_Add_ID_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Add_ID_ExA(
-    DEVINST dnDevInst, PSTR pszID, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Add_ID_ExA(
+    _In_ DEVINST dnDevInst,
+    _In_ PSTR pszID,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     PWSTR pszIDW;
     CONFIGRET ret;
 
-    TRACE("%p %s %lx %p\n", dnDevInst, pszID, ulFlags, hMachine);
+    TRACE("CM_Add_ID_ExA(%p %s %lx %p)\n",
+          dnDevInst, debugstr_a(pszID), ulFlags, hMachine);
 
     if (pSetupCaptureAndConvertAnsiArg(pszID, &pszIDW))
         return CR_INVALID_DATA;
@@ -675,15 +960,21 @@ CONFIGRET WINAPI CM_Add_ID_ExA(
 /***********************************************************************
  * CM_Add_ID_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Add_ID_ExW(
-    DEVINST dnDevInst, PWSTR pszID, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Add_ID_ExW(
+    _In_ DEVINST dnDevInst,
+    _In_ PWSTR pszID,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
     LPWSTR lpDevInst;
     CONFIGRET ret;
 
-    TRACE("%p %s %lx %p\n", dnDevInst, debugstr_w(pszID), ulFlags, hMachine);
+    TRACE("CM_Add_ID_ExW(%p %s %lx %p)\n",
+          dnDevInst, debugstr_w(pszID), ulFlags, hMachine);
 
     if (!pSetupIsUserAdmin())
         return CR_ACCESS_DENIED;
@@ -745,21 +1036,72 @@ 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->ullStart = ullStartValue;
+    pRange->ullEnd = ullEndValue;
+
+    /* Insert the range */
+    if (IsListEmpty(&pRangeList->ListHead))
+    {
+        InsertTailList(&pRangeList->ListHead, &pRange->ListEntry);
+    }
+    else
+    {
+
+    }
+
+done:
+    /* Unlock the range list */
+    ReleaseMutex(pRangeList->hMutex);
+
+    return ret;
 }
 
 
 /***********************************************************************
  * CM_Add_Res_Des [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Add_Res_Des(
-    PRES_DES prdResDes, LOG_CONF lcLogConf, RESOURCEID ResourceID,
-    PCVOID ResourceData, ULONG ResourceLen, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Add_Res_Des(
+    _Out_opt_ PRES_DES prdResDes,
+    _In_ LOG_CONF lcLogConf,
+    _In_ RESOURCEID ResourceID,
+    _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
+    _In_ ULONG ResourceLen,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %lu %p %lu %lx\n", prdResDes, lcLogConf, ResourceID,
-          ResourceData, ResourceLen, 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);
 }
@@ -768,11 +1110,19 @@ CONFIGRET WINAPI CM_Add_Res_Des(
 /***********************************************************************
  * CM_Add_Res_Des_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Add_Res_Des_Ex(
-    PRES_DES prdResDes, LOG_CONF lcLogConf, RESOURCEID ResourceID,
-    PCVOID ResourceData, ULONG ResourceLen, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Add_Res_Des_Ex(
+    _Out_opt_ PRES_DES prdResDes,
+    _In_ LOG_CONF lcLogConf,
+    _In_ RESOURCEID ResourceID,
+    _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
+    _In_ ULONG ResourceLen,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
-    FIXME("%p %p %lu %p %lu %lx %p\n", prdResDes, lcLogConf, ResourceID,
+    FIXME("CM_Add_Res_Des_Ex(%p %p %lu %p %lu %lx %p)\n",
+          prdResDes, lcLogConf, ResourceID,
           ResourceData, ResourceLen, ulFlags, hMachine);
 
     return CR_CALL_NOT_IMPLEMENTED;
@@ -782,13 +1132,17 @@ CONFIGRET WINAPI CM_Add_Res_Des_Ex(
 /***********************************************************************
  * CM_Connect_MachineA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Connect_MachineA(
-    PCSTR UNCServerName, PHMACHINE phMachine)
+CONFIGRET
+WINAPI
+CM_Connect_MachineA(
+    _In_opt_ PCSTR UNCServerName,
+    _Out_ PHMACHINE phMachine)
 {
     PWSTR pServerNameW;
     CONFIGRET ret;
 
-    TRACE("%s %p\n", UNCServerName, phMachine);
+    TRACE("CM_Connect_MachineA(%s %p)\n",
+          debugstr_a(UNCServerName), phMachine);
 
     if (UNCServerName == NULL || *UNCServerName == 0)
         return CM_Connect_MachineW(NULL, phMachine);
@@ -807,12 +1161,16 @@ CONFIGRET WINAPI CM_Connect_MachineA(
 /***********************************************************************
  * CM_Connect_MachineW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Connect_MachineW(
-    PCWSTR UNCServerName, PHMACHINE phMachine)
+CONFIGRET
+WINAPI
+CM_Connect_MachineW(
+    _In_opt_ PCWSTR UNCServerName,
+    _Out_ PHMACHINE phMachine)
 {
     PMACHINE_INFO pMachine;
 
-    TRACE("%s %p\n", debugstr_w(UNCServerName), phMachine);
+    TRACE("CM_Connect_MachineW(%s %p)\n",
+          debugstr_w(UNCServerName), phMachine);
 
     if (phMachine == NULL)
         return CR_INVALID_POINTER;
@@ -872,12 +1230,17 @@ CONFIGRET WINAPI CM_Connect_MachineW(
 /***********************************************************************
  * CM_Create_DevNodeA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Create_DevNodeA(
-    PDEVINST pdnDevInst, DEVINSTID_A pDeviceID, DEVINST dnParent,
-    ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Create_DevNodeA(
+    _Out_ PDEVINST pdnDevInst,
+    _In_ DEVINSTID_A pDeviceID,
+    _In_ DEVINST dnParent,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %s %p %lx\n",
+    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);
 }
@@ -886,12 +1249,17 @@ CONFIGRET WINAPI CM_Create_DevNodeA(
 /***********************************************************************
  * CM_Create_DevNodeW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Create_DevNodeW(
-    PDEVINST pdnDevInst, DEVINSTID_W pDeviceID, DEVINST dnParent,
-    ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Create_DevNodeW(
+    _Out_ PDEVINST pdnDevInst,
+    _In_ DEVINSTID_W pDeviceID,
+    _In_ DEVINST dnParent,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %s %p %lx\n",
+    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);
 }
@@ -900,14 +1268,19 @@ CONFIGRET WINAPI CM_Create_DevNodeW(
 /***********************************************************************
  * CM_Create_DevNode_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Create_DevNode_ExA(
-    PDEVINST pdnDevInst, DEVINSTID_A pDeviceID, DEVINST dnParent,
-    ULONG ulFlags, HANDLE hMachine)
+CONFIGRET
+WINAPI
+CM_Create_DevNode_ExA(
+    _Out_ PDEVINST pdnDevInst,
+    _In_ DEVINSTID_A pDeviceID,
+    _In_ DEVINST dnParent,
+    _In_ ULONG ulFlags,
+    _In_opt_ HANDLE hMachine)
 {
     DEVINSTID_W pDeviceIDW;
     CONFIGRET ret;
 
-    TRACE("%p %s %p %lx %p\n",
+    TRACE("CM_Create_DevNode_ExA(%p %s %p %lx %p)\n",
           pdnDevInst, debugstr_a(pDeviceID), dnParent, ulFlags, hMachine);
 
     if (pSetupCaptureAndConvertAnsiArg(pDeviceID, &pDeviceIDW))
@@ -925,9 +1298,14 @@ CONFIGRET WINAPI CM_Create_DevNode_ExA(
 /***********************************************************************
  * CM_Create_DevNode_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Create_DevNode_ExW(
-    PDEVINST pdnDevInst, DEVINSTID_W pDeviceID, DEVINST dnParent,
-    ULONG ulFlags, HANDLE hMachine)
+CONFIGRET
+WINAPI
+CM_Create_DevNode_ExW(
+    _Out_ PDEVINST pdnDevInst,
+    _In_ DEVINSTID_W pDeviceID,
+    _In_ DEVINST dnParent,
+    _In_ ULONG ulFlags,
+    _In_opt_ HANDLE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
@@ -935,7 +1313,7 @@ CONFIGRET WINAPI CM_Create_DevNode_ExW(
     CONFIGRET ret = CR_SUCCESS;
     WCHAR szLocalDeviceID[MAX_DEVICE_ID_LEN];
 
-    TRACE("%p %s %p %lx %p\n",
+    TRACE("CM_Create_DevNode_ExW(%p %s %p %lx %p)\n",
           pdnDevInst, debugstr_w(pDeviceID), dnParent, ulFlags, hMachine);
 
     if (!pSetupIsUserAdmin())
@@ -1013,7 +1391,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;
@@ -1021,13 +1400,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;
 
@@ -1038,10 +1427,15 @@ CM_Create_Range_List(
 /***********************************************************************
  * CM_Delete_Class_Key [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Delete_Class_Key(
-    LPGUID ClassGuid, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Delete_Class_Key(
+    _In_ LPGUID ClassGuid,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %lx\n", ClassGuid, ulFlags);
+    TRACE("CM_Delete_Class_Key(%p %lx)\n",
+          ClassGuid, ulFlags);
+
     return CM_Delete_Class_Key_Ex(ClassGuid, ulFlags, NULL);
 }
 
@@ -1049,14 +1443,19 @@ CONFIGRET WINAPI CM_Delete_Class_Key(
 /***********************************************************************
  * CM_Delete_Class_Key_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Delete_Class_Key_Ex(
-    LPGUID ClassGuid, ULONG ulFlags, HANDLE hMachine)
+CONFIGRET
+WINAPI
+CM_Delete_Class_Key_Ex(
+    _In_ LPGUID ClassGuid,
+    _In_ ULONG ulFlags,
+    _In_opt_ HANDLE hMachine)
 {
     WCHAR szGuidString[MAX_GUID_STRING_LEN];
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
 
-    TRACE("%p %lx %lx\n", ClassGuid, ulFlags, hMachine);
+    TRACE("CM_Delete_Class_Key_Ex(%p %lx %p)\n",
+          ClassGuid, ulFlags, hMachine);
 
     if (ClassGuid == NULL)
         return CR_INVALID_POINTER;
@@ -1098,10 +1497,16 @@ CONFIGRET WINAPI CM_Delete_Class_Key_Ex(
 /***********************************************************************
  * CM_Delete_DevNode_Key [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Delete_DevNode_Key(
-    DEVNODE dnDevNode, ULONG ulHardwareProfile, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Delete_DevNode_Key(
+    _In_ DEVNODE dnDevNode,
+    _In_ ULONG ulHardwareProfile,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %lu %lx\n", dnDevNode, ulHardwareProfile, ulFlags);
+    TRACE("CM_Delete_DevNode_Key(%p %lu %lx)\n",
+          dnDevNode, ulHardwareProfile, ulFlags);
+
     return CM_Delete_DevNode_Key_Ex(dnDevNode, ulHardwareProfile, ulFlags,
                                     NULL);
 }
@@ -1110,11 +1515,15 @@ CONFIGRET WINAPI CM_Delete_DevNode_Key(
 /***********************************************************************
  * CM_Delete_DevNode_Key_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Delete_DevNode_Key_Ex(
-    DEVNODE dnDevNode, ULONG ulHardwareProfile, ULONG ulFlags,
-    HANDLE hMachine)
+CONFIGRET
+WINAPI
+CM_Delete_DevNode_Key_Ex(
+    _In_ DEVNODE dnDevNode,
+    _In_ ULONG ulHardwareProfile,
+    _In_ ULONG ulFlags,
+    _In_opt_ HANDLE hMachine)
 {
-    FIXME("%p %lu %lx %p\n",
+    FIXME("CM_Delete_DevNode_Key_Ex(%p %lu %lx %p)\n",
           dnDevNode, ulHardwareProfile, ulFlags, hMachine);
 
     return CR_CALL_NOT_IMPLEMENTED;
@@ -1134,6 +1543,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;
 }
 
@@ -1141,10 +1600,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);
 }
 
@@ -1152,15 +1616,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;
@@ -1212,11 +1681,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)
@@ -1249,6 +1721,7 @@ CM_Dup_Range_List(
 {
     FIXME("CM_Dup_Range_List(%p %p %lx)\n",
           rlhOld, rlhNew, ulFlags);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -1256,10 +1729,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);
 }
 
@@ -1267,15 +1745,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;
@@ -1327,26 +1810,38 @@ CONFIGRET WINAPI CM_Enable_DevNode_Ex(
 /***********************************************************************
  * CM_Enumerate_Classes [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Enumerate_Classes(
-    ULONG ulClassIndex, LPGUID ClassGuid, ULONG ulFlags)
-{
-    TRACE("%lx %p %lx\n", ulClassIndex, ClassGuid, ulFlags);
-    return CM_Enumerate_Classes_Ex(ulClassIndex, ClassGuid, ulFlags, NULL);
+CONFIGRET
+WINAPI
+CM_Enumerate_Classes(
+    _In_ ULONG ulClassIndex,
+    _Out_ LPGUID ClassGuid,
+    _In_ ULONG ulFlags)
+{
+    TRACE("CM_Enumerate_Classes(%lx %p %lx)\n",
+          ulClassIndex, ClassGuid, ulFlags);
+
+    return CM_Enumerate_Classes_Ex(ulClassIndex, ClassGuid, ulFlags, NULL);
 }
 
 
 /***********************************************************************
  * 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;
@@ -1399,10 +1894,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);
 }
@@ -1411,10 +1913,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);
 }
@@ -1423,17 +1932,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;
@@ -1469,15 +1983,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;
@@ -1535,6 +2054,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;
 }
 
@@ -1551,19 +2071,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);
 }
 
@@ -1571,8 +2136,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;
@@ -1580,13 +2149,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)
@@ -1630,15 +2200,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);
@@ -1657,19 +2229,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;
@@ -1679,10 +2270,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);
 }
 
@@ -1690,11 +2287,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;
 }
@@ -1703,22 +2305,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);
 }
 
@@ -1726,8 +2362,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;
@@ -1736,7 +2377,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;
@@ -1802,11 +2444,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);
 }
@@ -1815,11 +2463,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);
 }
@@ -1828,16 +2482,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)
@@ -1871,11 +2530,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)
@@ -1902,10 +2566,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);
 }
@@ -1914,10 +2585,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);
 }
@@ -1926,16 +2604,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)
@@ -1969,16 +2652,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)
@@ -2025,16 +2712,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);
 
@@ -2097,9 +2791,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];
@@ -2107,7 +2808,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);
 
@@ -2169,10 +2870,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);
 }
 
@@ -2180,15 +2887,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)
@@ -2240,12 +2952,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);
@@ -2255,12 +2975,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);
@@ -2270,9 +2998,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;
@@ -2280,8 +3015,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;
@@ -2350,9 +3086,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;
@@ -2361,9 +3104,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;
@@ -2428,11 +3171,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,
@@ -2444,11 +3193,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,
@@ -2460,16 +3215,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);
 
@@ -2533,9 +3295,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;
@@ -2544,7 +3313,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);
 
@@ -2619,12 +3388,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);
 }
@@ -2633,17 +3407,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)
@@ -2696,11 +3474,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);
 }
 
@@ -2708,11 +3492,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);
 }
 
@@ -2720,14 +3510,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)
@@ -2758,13 +3553,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)
@@ -2801,10 +3601,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);
 }
@@ -2813,10 +3620,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);
 }
@@ -2825,15 +3639,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));
@@ -2885,14 +3704,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)
@@ -2936,10 +3760,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);
 }
 
@@ -2947,10 +3777,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);
 }
 
@@ -2958,13 +3794,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)
-{
-    LPWSTR pszFilterW = NULL;
-    CONFIGRET ret = CR_SUCCESS;
+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)
     {
@@ -2993,13 +3835,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;
@@ -3041,10 +3889,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);
 }
 
@@ -3052,13 +3906,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;
@@ -3097,11 +3957,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,
@@ -3113,11 +3979,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,
@@ -3129,11 +4001,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;
@@ -3143,15 +4022,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 ||
@@ -3200,12 +4086,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);
@@ -3215,12 +4107,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);
@@ -3230,16 +4128,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)
@@ -3288,16 +4193,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)
@@ -3343,52 +4255,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;
     }
 
@@ -3407,15 +4332,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;
@@ -3442,7 +4372,7 @@ CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExW(
         ret = PNP_GetInterfaceDeviceListSize(BindingHandle,
                                              pulLen,
                                              InterfaceClassGuid,
-                                             pDeviceId,
+                                             pDeviceID,
                                              ulFlags);
     }
     RpcExcept(EXCEPTION_EXECUTE_HANDLER)
@@ -3458,10 +4388,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);
 }
 
@@ -3469,8 +4405,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;
@@ -3479,7 +4420,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;
@@ -3548,10 +4490,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);
 }
 
@@ -3559,13 +4506,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;
@@ -3602,12 +4554,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);
@@ -3617,12 +4573,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);
@@ -3632,15 +4592,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)
     {
@@ -3661,15 +4626,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;
@@ -3709,10 +4679,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);
@@ -3722,10 +4697,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);
@@ -3735,14 +4715,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;
@@ -3772,14 +4757,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;
@@ -3817,10 +4807,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);
 }
 
@@ -3828,9 +4824,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;
@@ -3838,10 +4838,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)
@@ -3892,10 +4893,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);
 }
 
@@ -3903,9 +4910,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;
@@ -3915,13 +4926,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)
@@ -3986,12 +4998,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);
 }
@@ -4000,12 +5018,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;
 }
@@ -4014,10 +5038,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);
 }
 
@@ -4025,8 +5055,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;
@@ -4035,7 +5070,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;
@@ -4101,10 +5137,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);
 }
 
@@ -4112,11 +5155,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;
 }
 
@@ -4124,10 +5174,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);
 }
 
@@ -4135,10 +5191,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;
 }
 
@@ -4146,10 +5270,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);
 }
 
@@ -4157,8 +5287,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;
@@ -4167,7 +5302,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;
@@ -4233,9 +5369,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);
 }
 
@@ -4243,13 +5382,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)
     {
@@ -4293,6 +5435,7 @@ CM_Intersect_Range_List(
 {
     FIXME("CM_Intersect_Range_List(%p %p %p %lx)\n",
           rlhOld1, rlhOld2, rlhNew, ulFlags);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -4310,6 +5453,7 @@ CM_Invert_Range_List(
 {
     FIXME("CM_Invert_Range_List(%p %p %I64u %lx)\n",
           rlhOld, rlhNew, ullMaxValue, ulFlags);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -4317,10 +5461,14 @@ CM_Invert_Range_List(
 /***********************************************************************
  * CM_Is_Dock_Station_Present [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Is_Dock_Station_Present(
-    PBOOL pbPresent)
+CONFIGRET
+WINAPI
+CM_Is_Dock_Station_Present(
+    _Out_ PBOOL pbPresent)
 {
-    TRACE("%p\n", pbPresent);
+    TRACE("CM_Is_Dock_Station_Present(%p)\n",
+          pbPresent);
+
     return CM_Is_Dock_Station_Present_Ex(pbPresent, NULL);
 }
 
@@ -4328,13 +5476,17 @@ CONFIGRET WINAPI CM_Is_Dock_Station_Present(
 /***********************************************************************
  * CM_Is_Dock_Station_Present_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Is_Dock_Station_Present_Ex(
-    PBOOL pbPresent, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Is_Dock_Station_Present_Ex(
+    _Out_ PBOOL pbPresent,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
 
-    TRACE("%p %lx\n", pbPresent, hMachine);
+    TRACE("CM_Is_Dock_Station_Present_Ex(%p %p)\n",
+          pbPresent, hMachine);
 
     if (pbPresent == NULL)
         return CR_INVALID_POINTER;
@@ -4371,10 +5523,14 @@ CONFIGRET WINAPI CM_Is_Dock_Station_Present_Ex(
 /***********************************************************************
  * CM_Is_Version_Available_Ex [SETUPAPI.@]
  */
-BOOL WINAPI CM_Is_Version_Available(
-     WORD wVersion)
+BOOL
+WINAPI
+CM_Is_Version_Available(
+     _In_ WORD wVersion)
 {
-    TRACE("%hu\n", wVersion);
+    TRACE("CM_Is_Version_Available(%hu)\n",
+          wVersion);
+
     return CM_Is_Version_Available_Ex(wVersion, NULL);
 }
 
@@ -4382,14 +5538,18 @@ BOOL WINAPI CM_Is_Version_Available(
 /***********************************************************************
  * CM_Is_Version_Available_Ex [SETUPAPI.@]
  */
-BOOL WINAPI CM_Is_Version_Available_Ex(
-    WORD wVersion, HMACHINE hMachine)
+BOOL
+WINAPI
+CM_Is_Version_Available_Ex(
+    _In_ WORD wVersion,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     WORD wServerVersion;
     CONFIGRET ret;
 
-    TRACE("%hu %lx\n", wVersion, hMachine);
+    TRACE("CM_Is_Version_Available_Ex(%hu %p)\n",
+          wVersion, hMachine);
 
     if (wVersion <= 0x400)
         return TRUE;
@@ -4426,10 +5586,16 @@ BOOL WINAPI CM_Is_Version_Available_Ex(
 /***********************************************************************
  * CM_Locate_DevNodeA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Locate_DevNodeA(
-    PDEVINST pdnDevInst, DEVINSTID_A pDeviceID, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Locate_DevNodeA(
+    _Out_ PDEVINST pdnDevInst,
+    _In_opt_ DEVINSTID_A pDeviceID,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%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);
 }
 
@@ -4437,10 +5603,16 @@ CONFIGRET WINAPI CM_Locate_DevNodeA(
 /***********************************************************************
  * CM_Locate_DevNodeW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Locate_DevNodeW(
-    PDEVINST pdnDevInst, DEVINSTID_W pDeviceID, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Locate_DevNodeW(
+    _Out_ PDEVINST pdnDevInst,
+    _In_opt_ DEVINSTID_W pDeviceID,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %s %lu\n", pdnDevInst, debugstr_w(pDeviceID), ulFlags);
+    TRACE("CM_Locate_DevNodeW(%p %s %lx)\n",
+          pdnDevInst, debugstr_w(pDeviceID), ulFlags);
+
     return CM_Locate_DevNode_ExW(pdnDevInst, pDeviceID, ulFlags, NULL);
 }
 
@@ -4448,13 +5620,19 @@ CONFIGRET WINAPI CM_Locate_DevNodeW(
 /***********************************************************************
  * CM_Locate_DevNode_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Locate_DevNode_ExA(
-    PDEVINST pdnDevInst, DEVINSTID_A pDeviceID, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Locate_DevNode_ExA(
+    _Out_ PDEVINST pdnDevInst,
+    _In_opt_ DEVINSTID_A pDeviceID,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     DEVINSTID_W pDevIdW = NULL;
     CONFIGRET ret = CR_SUCCESS;
 
-    TRACE("%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)
     {
@@ -4474,15 +5652,21 @@ CONFIGRET WINAPI CM_Locate_DevNode_ExA(
 /***********************************************************************
  * CM_Locate_DevNode_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Locate_DevNode_ExW(
-    PDEVINST pdnDevInst, DEVINSTID_W pDeviceID, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Locate_DevNode_ExW(
+    _Out_ PDEVINST pdnDevInst,
+    _In_opt_ DEVINSTID_W pDeviceID,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     WCHAR DeviceIdBuffer[MAX_DEVICE_ID_LEN];
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
     CONFIGRET ret = CR_SUCCESS;
 
-    TRACE("%p %s %lu %lx\n", pdnDevInst, debugstr_w(pDeviceID), ulFlags, hMachine);
+    TRACE("CM_Locate_DevNode_ExW(%p %s %lx %p)\n",
+          pdnDevInst, debugstr_w(pDeviceID), ulFlags, hMachine);
 
     if (pdnDevInst == NULL)
         return CR_INVALID_POINTER;
@@ -4567,6 +5751,7 @@ CM_Merge_Range_List(
 {
     FIXME("CM_Merge_Range_List(%p %p %p %lx)\n",
           rlhOld1, rlhOld2, rlhNew, ulFlags);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -4574,12 +5759,20 @@ CM_Merge_Range_List(
 /***********************************************************************
  * CM_Modify_Res_Des [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Modify_Res_Des(
-    PRES_DES prdResDes, RES_DES rdResDes, RESOURCEID ResourceID,
-    PCVOID ResourceData, ULONG ResourceLen, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Modify_Res_Des(
+    _Out_ PRES_DES prdResDes,
+    _In_ RES_DES rdResDes,
+    _In_ RESOURCEID ResourceID,
+    _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
+    _In_ ULONG ResourceLen,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %lx %p %lu %lx", prdResDes, rdResDes, ResourceID, ResourceData,
+    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);
 }
@@ -4588,12 +5781,21 @@ CONFIGRET WINAPI CM_Modify_Res_Des(
 /***********************************************************************
  * CM_Modify_Res_Des_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Modify_Res_Des_Ex(
-    PRES_DES prdResDes, RES_DES rdResDes, RESOURCEID ResourceID, PCVOID ResourceData,
-    ULONG ResourceLen, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Modify_Res_Des_Ex(
+    _Out_ PRES_DES prdResDes,
+    _In_ RES_DES rdResDes,
+    _In_ RESOURCEID ResourceID,
+    _In_reads_bytes_(ResourceLen) PCVOID ResourceData,
+    _In_ ULONG ResourceLen,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
-    FIXME("%p %p %lx %p %lu %lx %lx", prdResDes, rdResDes, ResourceID, ResourceData,
+    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;
 }
 
@@ -4601,10 +5803,16 @@ CONFIGRET WINAPI CM_Modify_Res_Des_Ex(
 /***********************************************************************
  * CM_Move_DevNode [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Move_DevNode(
-    DEVINST dnFromDevInst, DEVINST dnToDevInst, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Move_DevNode(
+    _In_ DEVINST dnFromDevInst,
+    _In_ DEVINST dnToDevInst,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %lx %lx\n", dnFromDevInst, dnToDevInst, ulFlags);
+    TRACE("CM_Move_DevNode(%lx %lx %lx)\n",
+          dnFromDevInst, dnToDevInst, ulFlags);
+
     return CM_Move_DevNode_Ex(dnFromDevInst, dnToDevInst, ulFlags, NULL);
 }
 
@@ -4612,9 +5820,13 @@ CONFIGRET WINAPI CM_Move_DevNode(
 /***********************************************************************
  * CM_Move_DevNode_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Move_DevNode_Ex(
-    DEVINST dnFromDevInst, DEVINST dnToDevInst, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Move_DevNode_Ex(
+    _In_ DEVINST dnFromDevInst,
+    _In_ DEVINST dnToDevInst,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     HSTRING_TABLE StringTable = NULL;
@@ -4622,7 +5834,7 @@ CONFIGRET WINAPI CM_Move_DevNode_Ex(
     LPWSTR lpToDevInst;
     CONFIGRET ret;
 
-    FIXME("%lx %lx %lx %lx\n",
+    FIXME("CM_Move_DevNode_Ex(%lx %lx %lx %p)\n",
           dnFromDevInst, dnToDevInst, ulFlags, hMachine);
 
     if (!pSetupIsUserAdmin())
@@ -4689,6 +5901,7 @@ CM_Next_Range(
 {
     FIXME("CM_Next_Range(%p %p %p %lx)\n",
           preElement, pullStart, pullEnd, ulFlags);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -4696,12 +5909,18 @@ CM_Next_Range(
 /***********************************************************************
  * CM_Open_Class_KeyA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Open_Class_KeyA(
-    LPGUID pClassGuid, LPCSTR pszClassName, REGSAM samDesired,
-    REGDISPOSITION Disposition, PHKEY phkClass, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Open_Class_KeyA(
+    _In_opt_ LPGUID pClassGuid,
+    _In_opt_ LPCSTR pszClassName,
+    _In_ REGSAM samDesired,
+    _In_ REGDISPOSITION Disposition,
+    _Out_ PHKEY phkClass,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %s %lx %lx %p %lx\n",
-          debugstr_guid(pClassGuid), pszClassName,
+    TRACE("CM_Open_Class_KeyA(%p %s %lx %lx %p %lx)\n",
+          debugstr_guid(pClassGuid), debugstr_a(pszClassName),
           samDesired, Disposition, phkClass, ulFlags);
 
     return CM_Open_Class_Key_ExA(pClassGuid, pszClassName, samDesired,
@@ -4712,11 +5931,17 @@ CONFIGRET WINAPI CM_Open_Class_KeyA(
 /***********************************************************************
  * CM_Open_Class_KeyW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Open_Class_KeyW(
-    LPGUID pClassGuid, LPCWSTR pszClassName, REGSAM samDesired,
-    REGDISPOSITION Disposition, PHKEY phkClass, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Open_Class_KeyW(
+    _In_opt_ LPGUID pClassGuid,
+    _In_opt_ LPCWSTR pszClassName,
+    _In_ REGSAM samDesired,
+    _In_ REGDISPOSITION Disposition,
+    _Out_ PHKEY phkClass,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %s %lx %lx %p %lx\n",
+    TRACE("CM_Open_Class_KeyW%p %s %lx %lx %p %lx)\n",
           debugstr_guid(pClassGuid), debugstr_w(pszClassName),
           samDesired, Disposition, phkClass, ulFlags);
 
@@ -4728,16 +5953,22 @@ CONFIGRET WINAPI CM_Open_Class_KeyW(
 /***********************************************************************
  * CM_Open_Class_Key_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Open_Class_Key_ExA(
-    LPGUID pClassGuid, LPCSTR pszClassName, REGSAM samDesired,
-    REGDISPOSITION Disposition, PHKEY phkClass, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Open_Class_Key_ExA(
+    _In_opt_ LPGUID pClassGuid,
+    _In_opt_ LPCSTR pszClassName,
+    _In_ REGSAM samDesired,
+    _In_ REGDISPOSITION Disposition,
+    _Out_ PHKEY phkClass,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     LPWSTR pszClassNameW = NULL;
     CONFIGRET ret;
 
-    TRACE("%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)
@@ -4759,10 +5990,16 @@ CONFIGRET WINAPI CM_Open_Class_Key_ExA(
 /***********************************************************************
  * CM_Open_Class_Key_ExW [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Open_Class_Key_ExW(
-    LPGUID pClassGuid, LPCWSTR pszClassName, REGSAM samDesired,
-    REGDISPOSITION Disposition, PHKEY phkClass, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Open_Class_Key_ExW(
+    _In_opt_ LPGUID pClassGuid,
+    _In_opt_ LPCWSTR pszClassName,
+    _In_ REGSAM samDesired,
+    _In_ REGDISPOSITION Disposition,
+    _Out_ PHKEY phkClass,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     WCHAR szKeyName[MAX_PATH];
     LPWSTR lpGuidString;
@@ -4770,7 +6007,7 @@ CONFIGRET WINAPI CM_Open_Class_Key_ExW(
     DWORD dwError;
     HKEY hKey;
 
-    TRACE("%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);
 
@@ -4795,9 +6032,10 @@ CONFIGRET WINAPI CM_Open_Class_Key_ExW(
     }
     else
     {
-       if (RegConnectRegistryW(((PMACHINE_INFO)hMachine)->szMachineName,
-                               HKEY_LOCAL_MACHINE, &hKey))
-           return CR_REGISTRY_ERROR;
+        if (RegConnectRegistryW(((PMACHINE_INFO)hMachine)->szMachineName,
+                                HKEY_LOCAL_MACHINE,
+                                &hKey))
+            return CR_REGISTRY_ERROR;
     }
 
     if (ulFlags & CM_OPEN_CLASS_KEY_INTERFACE)
@@ -4855,12 +6093,19 @@ CONFIGRET WINAPI CM_Open_Class_Key_ExW(
 /***********************************************************************
  * CM_Open_DevNode_Key [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Open_DevNode_Key(
-    DEVINST dnDevNode, REGSAM samDesired, ULONG ulHardwareProfile,
-    REGDISPOSITION Disposition, PHKEY phkDevice, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Open_DevNode_Key(
+    _In_ DEVINST dnDevNode,
+    _In_ REGSAM samDesired,
+    _In_ ULONG ulHardwareProfile,
+    _In_ REGDISPOSITION Disposition,
+    _Out_ PHKEY phkDevice,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %lx %lu %lx %p %lx\n", dnDevNode, samDesired,
-          ulHardwareProfile, Disposition, phkDevice, ulFlags);
+    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);
 }
@@ -4869,27 +6114,165 @@ CONFIGRET WINAPI CM_Open_DevNode_Key(
 /***********************************************************************
  * CM_Open_DevNode_Key_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Open_DevNode_Key_Ex(
-    DEVINST dnDevNode, REGSAM samDesired, ULONG ulHardwareProfile,
-    REGDISPOSITION Disposition, PHKEY phkDevice, ULONG ulFlags,
-    HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Open_DevNode_Key_Ex(
+    _In_ DEVINST dnDevNode,
+    _In_ REGSAM samDesired,
+    _In_ ULONG ulHardwareProfile,
+    _In_ REGDISPOSITION Disposition,
+    _Out_ PHKEY phkDevice,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
-    FIXME("%lx %lx %lu %lx %p %lx %lx\n", dnDevNode, samDesired,
-          ulHardwareProfile, Disposition, phkDevice, ulFlags, hMachine);
+    RPC_BINDING_HANDLE BindingHandle = NULL;
+    HSTRING_TABLE StringTable = NULL;
+    LPWSTR pszDevInst, pszKeyPath = NULL, pszInstancePath = NULL;
+    LONG lError;
+    DWORD dwDisposition;
+    HKEY hRootKey = NULL;
+    CONFIGRET ret = CR_CALL_NOT_IMPLEMENTED;
 
-    return CR_CALL_NOT_IMPLEMENTED;
+    TRACE("CM_Open_DevNode_Key_Ex(%lx %lx %lu %lx %p %lx %p)\n",
+          dnDevNode, samDesired, ulHardwareProfile, Disposition, phkDevice, ulFlags, hMachine);
+
+    if (phkDevice == NULL)
+        return CR_INVALID_POINTER;
+
+    *phkDevice = NULL;
+
+    if (dnDevNode == 0)
+        return CR_INVALID_DEVNODE;
+
+    if (ulFlags & ~CM_REGISTRY_BITS)
+        return CR_INVALID_FLAG;
+
+    if (Disposition & ~RegDisposition_Bits)
+        return CR_INVALID_DATA;
+
+    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;
+    }
+
+    pszDevInst = pSetupStringTableStringFromId(StringTable, dnDevNode);
+    if (pszDevInst == NULL)
+        return CR_INVALID_DEVNODE;
+
+    TRACE("pszDevInst: %S\n", pszDevInst);
+
+    pszKeyPath = MyMalloc(512 * sizeof(WCHAR));
+    if (pszKeyPath == NULL)
+    {
+        ret = CR_OUT_OF_MEMORY;
+        goto done;
+    }
+
+    pszInstancePath = MyMalloc(512 * sizeof(WCHAR));
+    if (pszInstancePath == NULL)
+    {
+        ret = CR_OUT_OF_MEMORY;
+        goto done;
+    }
+
+    ret = GetDeviceInstanceKeyPath(BindingHandle,
+                                   pszDevInst,
+                                   pszKeyPath,
+                                   pszInstancePath,
+                                   ulHardwareProfile,
+                                   ulFlags);
+    if (ret != CR_SUCCESS)
+        goto done;
+
+    TRACE("pszKeyPath: %S\n", pszKeyPath);
+    TRACE("pszInstancePath: %S\n", pszInstancePath);
+
+    wcscat(pszKeyPath, L"\\");
+    wcscat(pszKeyPath, pszInstancePath);
+
+    TRACE("pszKeyPath: %S\n", pszKeyPath);
+
+    if (hMachine == NULL)
+    {
+        hRootKey = HKEY_LOCAL_MACHINE;
+    }
+    else
+    {
+        if (RegConnectRegistryW(((PMACHINE_INFO)hMachine)->szMachineName,
+                                HKEY_LOCAL_MACHINE,
+                                &hRootKey))
+        {
+            ret = CR_REGISTRY_ERROR;
+            goto done;
+        }
+    }
+
+    if (Disposition == RegDisposition_OpenAlways)
+    {
+        lError = RegCreateKeyExW(hRootKey,
+                                 pszKeyPath,
+                                 0,
+                                 NULL,
+                                 0,
+                                 samDesired,
+                                 NULL,
+                                 phkDevice,
+                                 &dwDisposition);
+    }
+    else
+    {
+        lError = RegOpenKeyExW(hRootKey,
+                               pszKeyPath,
+                               0,
+                               samDesired,
+                               phkDevice);
+    }
+
+    if (lError != ERROR_SUCCESS)
+    {
+        *phkDevice = NULL;
+        ret = CR_NO_SUCH_REGISTRY_KEY;
+    }
+
+done:
+    if ((hRootKey != NULL) && (hRootKey != HKEY_LOCAL_MACHINE))
+        RegCloseKey(hRootKey);
+
+    if (pszInstancePath != NULL)
+        MyFree(pszInstancePath);
+
+    if (pszKeyPath != NULL)
+        MyFree(pszKeyPath);
+
+    return ret;
 }
 
 
 /***********************************************************************
  * 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);
@@ -4899,12 +6282,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);
@@ -4914,15 +6302,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;
@@ -4955,17 +6350,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;
@@ -5018,12 +6420,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);
@@ -5033,21 +6440,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;
@@ -5100,10 +6509,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);
@@ -5113,17 +6528,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;
@@ -5177,10 +6597,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;
 }
 
@@ -5190,21 +6615,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);
 }
 
@@ -5214,14 +6768,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;
@@ -5267,14 +6824,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,
@@ -5286,11 +6926,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,
@@ -5302,17 +6949,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;
@@ -5368,9 +7023,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;
@@ -5378,8 +7040,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;
@@ -5435,81 +7098,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;
 }
 
@@ -5519,10 +7121,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;
 }
 
@@ -5530,12 +7138,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);
 }
@@ -5544,12 +7158,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);
 }
@@ -5558,15 +7178,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;
@@ -5599,17 +7225,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;
@@ -5662,9 +7294,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);
 }
 
@@ -5672,13 +7307,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)
     {
@@ -5709,10 +7346,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);
 }
 
@@ -5720,13 +7360,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;
@@ -5764,12 +7408,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;
 }
 
@@ -5777,12 +7428,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;
 }
 
@@ -5790,10 +7448,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);
 }
 
@@ -5801,15 +7465,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;
@@ -5857,12 +7527,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);
@@ -5872,12 +7548,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);
@@ -5887,15 +7569,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)
@@ -5967,9 +7655,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;
@@ -5977,7 +7671,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)
@@ -6038,10 +7732,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);
 }
 
@@ -6049,13 +7748,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;
@@ -6092,12 +7796,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);
 }
@@ -6106,12 +7815,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);
 }
@@ -6120,15 +7834,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)
     {
@@ -6149,15 +7868,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;
@@ -6197,10 +7921,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);
 }
 
@@ -6208,15 +7937,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;
@@ -6285,10 +8019,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);
 }
 
@@ -6296,15 +8035,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;
@@ -6351,10 +8095,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);
@@ -6364,10 +8112,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);
@@ -6377,13 +8129,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;
@@ -6404,13 +8161,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;