[SETUPAPI] Fix the coding style, annotations and debug messages
[reactos.git] / dll / win32 / setupapi / cfgmgr.c
index 6d68087..c2044d9 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "setupapi_private.h"
 
+#include <dbt.h>
 #include <pnp_c.h>
 
 #include "rpc_private.h"
@@ -59,7 +60,37 @@ typedef struct _LOG_CONF_INFO
 #define LOG_CONF_MAGIC 0x464E434C  /* "LCNF" */
 
 
-static BOOL GuidToString(LPGUID Guid, LPWSTR String)
+typedef struct _NOTIFY_DATA
+{
+    ULONG ulMagic;
+    ULONG ulNotifyData;
+} NOTIFY_DATA, *PNOTIFY_DATA;
+
+#define NOTIFY_MAGIC 0x44556677
+
+
+typedef struct _INTERNAL_RANGE
+{
+    LIST_ENTRY ListEntry;
+    DWORDLONG ullStart;
+    DWORDLONG ullEnd;
+} INTERNAL_RANGE, *PINTERNAL_RANGE;
+
+typedef struct _INTERNAL_RANGE_LIST
+{
+    ULONG ulMagic;
+    HANDLE hMutex;
+    LIST_ENTRY ListHead;
+} INTERNAL_RANGE_LIST, *PINTERNAL_RANGE_LIST;
+
+#define RANGE_LIST_MAGIC 0x33445566
+
+
+static
+BOOL
+GuidToString(
+    _In_ LPGUID Guid,
+    _Out_ LPWSTR String)
 {
     LPWSTR lpString;
 
@@ -78,25 +109,374 @@ static BOOL GuidToString(LPGUID Guid, LPWSTR String)
 }
 
 
-static CONFIGRET
-RpcStatusToCmStatus(RPC_STATUS Status)
+static
+CONFIGRET
+RpcStatusToCmStatus(
+    _In_ RPC_STATUS Status)
 {
     return CR_FAILURE;
 }
 
 
+static
+ULONG
+GetRegistryPropertyType(
+    _In_ ULONG ulProperty)
+{
+    switch (ulProperty)
+    {
+        case CM_DRP_DEVICEDESC:
+        case CM_DRP_SERVICE:
+        case CM_DRP_CLASS:
+        case CM_DRP_CLASSGUID:
+        case CM_DRP_DRIVER:
+        case CM_DRP_MFG:
+        case CM_DRP_FRIENDLYNAME:
+        case CM_DRP_LOCATION_INFORMATION:
+        case CM_DRP_PHYSICAL_DEVICE_OBJECT_NAME:
+        case CM_DRP_ENUMERATOR_NAME:
+        case CM_DRP_SECURITY_SDS:
+        case CM_DRP_UI_NUMBER_DESC_FORMAT:
+            return REG_SZ;
+
+        case CM_DRP_HARDWAREID:
+        case CM_DRP_COMPATIBLEIDS:
+        case CM_DRP_UPPERFILTERS:
+        case CM_DRP_LOWERFILTERS:
+            return REG_MULTI_SZ;
+
+        case CM_DRP_CONFIGFLAGS:
+        case CM_DRP_CAPABILITIES:
+        case CM_DRP_UI_NUMBER:
+        case CM_DRP_LEGACYBUSTYPE:
+        case CM_DRP_BUSNUMBER:
+        case CM_DRP_DEVTYPE:
+        case CM_DRP_EXCLUSIVE:
+        case CM_DRP_CHARACTERISTICS:
+        case CM_DRP_ADDRESS:
+        case CM_DRP_REMOVAL_POLICY:
+        case CM_DRP_REMOVAL_POLICY_HW_DEFAULT:
+        case CM_DRP_REMOVAL_POLICY_OVERRIDE:
+        case CM_DRP_INSTALL_STATE:
+            return REG_DWORD;
+
+        case CM_DRP_BUSTYPEGUID:
+        case CM_DRP_SECURITY:
+        case CM_DRP_DEVICE_POWER_DATA:
+        default:
+            return REG_BINARY;
+    }
+
+    return REG_NONE;
+}
+
+
+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_ 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;
+}
+
+
+/***********************************************************************
+ * CMP_GetBlockedDriverInfo [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CMP_GetBlockedDriverInfo(
+    _Out_opt_ LPWSTR pszNames,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
+{
+    RPC_BINDING_HANDLE BindingHandle = NULL;
+    ULONG ulTransferLength;
+    CONFIGRET ret;
+
+    TRACE("CMP_GetBlockedDriverInfo(%p %p %lx %p)\n",
+          pszNames, pulLength, ulFlags, hMachine);
+
+    if (hMachine != NULL)
+    {
+        BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
+        if (BindingHandle == NULL)
+            return CR_FAILURE;
+    }
+    else
+    {
+        if (!PnpGetLocalHandles(&BindingHandle, NULL))
+            return CR_FAILURE;
+    }
+
+    ulTransferLength = *pulLength;
+
+    RpcTryExcept
+    {
+        ret = PNP_GetBlockedDriverInfo(BindingHandle,
+                                       (PBYTE)pszNames,
+                                       &ulTransferLength,
+                                       pulLength,
+                                       ulFlags);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        ret = RpcStatusToCmStatus(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return ret;
+}
+
+
+/***********************************************************************
+ * CMP_GetServerSideDeviceInstallFlags [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CMP_GetServerSideDeviceInstallFlags(
+    _Out_ PULONG pulSSDIFlags,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
+{
+    RPC_BINDING_HANDLE BindingHandle = NULL;
+    CONFIGRET ret;
+
+    TRACE("CMP_GetServerSideDeviceInstallFlags(%p %lx %p)\n",
+          pulSSDIFlags, ulFlags, hMachine);
+
+    if (pulSSDIFlags == NULL)
+        return CR_INVALID_POINTER;
+
+    if (ulFlags != 0)
+        return CR_INVALID_FLAG;
+
+    if (hMachine != NULL)
+    {
+        BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
+        if (BindingHandle == NULL)
+            return CR_FAILURE;
+    }
+    else
+    {
+        if (!PnpGetLocalHandles(&BindingHandle, NULL))
+            return CR_FAILURE;
+    }
+
+    RpcTryExcept
+    {
+        ret = PNP_GetServerSideDeviceInstallFlags(BindingHandle,
+                                                  pulSSDIFlags,
+                                                  ulFlags);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        ret = RpcStatusToCmStatus(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return ret;
+}
+
+
 /***********************************************************************
  * CMP_Init_Detection [SETUPAPI.@]
  */
-CONFIGRET WINAPI CMP_Init_Detection(
-    DWORD dwMagic)
+CONFIGRET
+WINAPI
+CMP_Init_Detection(
+    _In_ ULONG ulMagic)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
 
-    TRACE("%lu\n", dwMagic);
+    TRACE("CMP_Init_Detection(%lu)\n", ulMagic);
 
-    if (dwMagic != CMP_MAGIC)
+    if (ulMagic != CMP_MAGIC)
         return CR_INVALID_DATA;
 
     if (!PnpGetLocalHandles(&BindingHandle, NULL))
@@ -121,30 +501,95 @@ CONFIGRET WINAPI CMP_Init_Detection(
  */
 CONFIGRET
 WINAPI
-CMP_RegisterNotification(IN HANDLE hRecipient,
-                         IN LPVOID lpvNotificationFilter,
-                         IN DWORD dwFlags,
-                         OUT PULONG pluhDevNotify)
+CMP_RegisterNotification(
+    _In_ HANDLE hRecipient,
+    _In_ LPVOID lpvNotificationFilter,
+    _In_ ULONG ulFlags,
+    _Out_ PHDEVNOTIFY phDevNotify)
 {
-    FIXME("Stub %p %p %lu %p\n", hRecipient, lpvNotificationFilter, dwFlags, pluhDevNotify);
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return CR_FAILURE;
+    RPC_BINDING_HANDLE BindingHandle = NULL;
+    PNOTIFY_DATA pNotifyData = NULL;
+    CONFIGRET ret = CR_SUCCESS;
+
+    TRACE("CMP_RegisterNotification(%p %p %lu %p)\n",
+          hRecipient, lpvNotificationFilter, ulFlags, phDevNotify);
+
+    if ((hRecipient == NULL) ||
+        (lpvNotificationFilter == NULL) ||
+        (phDevNotify == NULL))
+        return CR_INVALID_POINTER;
+
+    if (ulFlags & ~0x7)
+        return CR_INVALID_FLAG;
+
+    if (((PDEV_BROADCAST_HDR)lpvNotificationFilter)->dbch_size < sizeof(DEV_BROADCAST_HDR))
+        return CR_INVALID_DATA;
+
+    if (!PnpGetLocalHandles(&BindingHandle, NULL))
+        return CR_FAILURE;
+
+    pNotifyData = HeapAlloc(GetProcessHeap(),
+                            HEAP_ZERO_MEMORY,
+                            sizeof(NOTIFY_DATA));
+    if (pNotifyData == NULL)
+        return CR_OUT_OF_MEMORY;
+
+    pNotifyData->ulMagic = NOTIFY_MAGIC;
+
+/*
+    if (dwFlags & DEVICE_NOTIFY_SERVICE_HANDLE == DEVICE_NOTYFY_WINDOW_HANDLE)
+    {
+
+    }
+    else if (dwFlags & DEVICE_NOTIFY_SERVICE_HANDLE == DEVICE_NOTYFY_SERVICE_HANDLE)
+    {
+
+    }
+*/
+
+    RpcTryExcept
+    {
+        ret = PNP_RegisterNotification(BindingHandle,
+                                       ulFlags,
+                                       &pNotifyData->ulNotifyData);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        ret = RpcStatusToCmStatus(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    if (ret == CR_SUCCESS)
+    {
+        *phDevNotify = (HDEVNOTIFY)pNotifyData;
+    }
+    else
+    {
+        if (pNotifyData != NULL)
+            HeapFree(GetProcessHeap(), 0, pNotifyData);
+
+        *phDevNotify = (HDEVNOTIFY)NULL;
+    }
+
+    return ret;
 }
 
 
 /***********************************************************************
  * CMP_Report_LogOn [SETUPAPI.@]
  */
-CONFIGRET WINAPI CMP_Report_LogOn(
-    DWORD dwMagic,
-    DWORD dwProcessId)
+CONFIGRET
+WINAPI
+CMP_Report_LogOn(
+    _In_ DWORD dwMagic,
+    _In_ DWORD dwProcessId)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret = CR_SUCCESS;
     BOOL bAdmin;
     DWORD i;
 
-    TRACE("%lu\n", dwMagic);
+    TRACE("CMP_Report_LogOn(%lu %lu)\n", dwMagic, dwProcessId);
 
     if (dwMagic != CMP_MAGIC)
         return CR_INVALID_DATA;
@@ -183,22 +628,55 @@ CONFIGRET WINAPI CMP_Report_LogOn(
  */
 CONFIGRET
 WINAPI
-CMP_UnregisterNotification(IN HDEVNOTIFY handle)
+CMP_UnregisterNotification(
+    _In_ HDEVNOTIFY hDevNotify)
 {
-    FIXME("Stub %p\n", handle);
-    return CR_SUCCESS;
+    RPC_BINDING_HANDLE BindingHandle = NULL;
+    PNOTIFY_DATA pNotifyData;
+    CONFIGRET ret = CR_SUCCESS;
+
+    TRACE("CMP_UnregisterNotification(%p)\n", hDevNotify);
+
+    pNotifyData = (PNOTIFY_DATA)hDevNotify;
+
+    if ((pNotifyData == NULL) ||
+        (pNotifyData->ulMagic != NOTIFY_MAGIC))
+        return CR_INVALID_POINTER;
+
+    if (!PnpGetLocalHandles(&BindingHandle, NULL))
+        return CR_FAILURE;
+
+    RpcTryExcept
+    {
+        ret = PNP_UnregisterNotification(BindingHandle,
+                                         pNotifyData->ulNotifyData);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        ret = RpcStatusToCmStatus(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    if (ret == CR_SUCCESS)
+        HeapFree(GetProcessHeap(), 0, pNotifyData);
+
+    return ret;
 }
 
 
 /***********************************************************************
  * CMP_WaitNoPendingInstallEvents [SETUPAPI.@]
  */
-DWORD WINAPI CMP_WaitNoPendingInstallEvents(
-    DWORD dwTimeout)
+DWORD
+WINAPI
+CMP_WaitNoPendingInstallEvents(
+    _In_ DWORD dwTimeout)
 {
     HANDLE hEvent;
     DWORD ret;
 
+    TRACE("CMP_WaitNoPendingInstallEvents(%lu)\n", dwTimeout);
+
     hEvent = OpenEventW(SYNCHRONIZE, FALSE, L"Global\\PnP_No_Pending_Install_Events");
     if (hEvent == NULL)
        return WAIT_FAILED;
@@ -214,14 +692,26 @@ DWORD WINAPI CMP_WaitNoPendingInstallEvents(
  */
 CONFIGRET
 WINAPI
-CMP_WaitServicesAvailable(HMACHINE hMachine)
+CMP_WaitServicesAvailable(
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret = CR_SUCCESS;
     WORD Version;
 
-    if (!PnpGetLocalHandles(&BindingHandle, NULL))
-        return CR_FAILURE;
+    TRACE("CMP_WaitServicesAvailable(%p)\n", hMachine);
+
+    if (hMachine != NULL)
+    {
+        BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
+        if (BindingHandle == NULL)
+            return CR_FAILURE;
+    }
+    else
+    {
+        if (!PnpGetLocalHandles(&BindingHandle, NULL))
+            return CR_FAILURE;
+    }
 
     RpcTryExcept
     {
@@ -240,11 +730,17 @@ CMP_WaitServicesAvailable(HMACHINE hMachine)
 /***********************************************************************
  * 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);
 }
@@ -253,9 +749,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;
@@ -264,7 +764,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())
@@ -340,10 +840,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);
 }
 
@@ -351,10 +857,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);
 }
 
@@ -362,13 +874,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;
@@ -384,15 +902,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;
@@ -443,15 +967,83 @@ CONFIGRET WINAPI CM_Add_ID_ExW(
 }
 
 
+/***********************************************************************
+ * CM_Add_Range [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Add_Range(
+    _In_ DWORDLONG ullStartValue,
+    _In_ DWORDLONG ullEndValue,
+    _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);
+
+    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);
 }
@@ -460,11 +1052,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)
-{
-    FIXME("%p %p %lu %p %lu %lx %p\n", prdResDes, lcLogConf, ResourceID,
+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("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;
@@ -474,13 +1074,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);
@@ -499,12 +1103,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;
@@ -555,7 +1163,7 @@ CONFIGRET WINAPI CM_Connect_MachineW(
         }
     }
 
-    phMachine = (PHMACHINE)pMachine;
+    *phMachine = (PHMACHINE)pMachine;
 
     return CR_SUCCESS;
 }
@@ -564,12 +1172,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);
 }
@@ -578,12 +1191,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);
 }
@@ -592,14 +1210,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))
@@ -617,9 +1240,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;
@@ -627,7 +1255,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())
@@ -694,13 +1322,62 @@ CONFIGRET WINAPI CM_Create_DevNode_ExW(
 }
 
 
+/***********************************************************************
+ * CM_Create_Range_List [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Create_Range_List(
+    _Out_ PRANGE_LIST prlh,
+    _In_ ULONG ulFlags)
+{
+    PINTERNAL_RANGE_LIST pRangeList = NULL;
+
+    FIXME("CM_Create_Range_List(%p %lx)\n",
+          prlh, ulFlags);
+
+    if (ulFlags != 0)
+        return CR_INVALID_FLAG;
+
+    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;
+
+    /* 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;
+
+    return CR_SUCCESS;
+}
+
+
 /***********************************************************************
  * 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);
 }
 
@@ -708,14 +1385,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;
@@ -757,10 +1439,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);
 }
@@ -769,24 +1457,51 @@ 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;
 }
 
 
+/***********************************************************************
+ * CM_Delete_Range [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Delete_Range(
+    _In_ DWORDLONG ullStartValue,
+    _In_ DWORDLONG ullEndValue,
+    _In_ RANGE_LIST rlh,
+    _In_ ULONG ulFlags)
+{
+    FIXME("CM_Delete_Range(%I64u %I64u %p %lx)\n",
+          ullStartValue, ullEndValue, rlh, ulFlags);
+
+    return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
 /***********************************************************************
  * 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);
 }
 
@@ -794,15 +1509,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;
@@ -854,11 +1574,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)
@@ -879,13 +1602,35 @@ CONFIGRET WINAPI CM_Disconnect_Machine(HMACHINE hMachine)
 }
 
 
+/***********************************************************************
+ * CM_Dup_Range_List [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Dup_Range_List(
+    _In_ RANGE_LIST rlhOld,
+    _In_ RANGE_LIST rlhNew,
+    _In_ ULONG ulFlags)
+{
+    FIXME("CM_Dup_Range_List(%p %p %lx)\n",
+          rlhOld, rlhNew, ulFlags);
+
+    return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
 /***********************************************************************
  * 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);
 }
 
@@ -893,15 +1638,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;
@@ -953,10 +1703,16 @@ CONFIGRET WINAPI CM_Enable_DevNode_Ex(
 /***********************************************************************
  * CM_Enumerate_Classes [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Enumerate_Classes(
-    ULONG ulClassIndex, LPGUID ClassGuid, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Enumerate_Classes(
+    _In_ ULONG ulClassIndex,
+    _Out_ LPGUID ClassGuid,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%lx %p %lx\n", ulClassIndex, ClassGuid, ulFlags);
+    TRACE("CM_Enumerate_Classes(%lx %p %lx)\n",
+          ulClassIndex, ClassGuid, ulFlags);
+
     return CM_Enumerate_Classes_Ex(ulClassIndex, ClassGuid, ulFlags, NULL);
 }
 
@@ -964,15 +1720,21 @@ CONFIGRET WINAPI CM_Enumerate_Classes(
 /***********************************************************************
  * CM_Enumerate_Classes_Ex [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Enumerate_Classes_Ex(
-    ULONG ulClassIndex, LPGUID ClassGuid, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Enumerate_Classes_Ex(
+    _In_ ULONG ulClassIndex,
+    _Out_ LPGUID ClassGuid,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     WCHAR szBuffer[MAX_GUID_STRING_LEN];
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret = CR_SUCCESS;
     ULONG ulLength = MAX_GUID_STRING_LEN;
 
-    TRACE("%lx %p %lx %p\n", ulClassIndex, ClassGuid, ulFlags, hMachine);
+    TRACE("CM_Enumerate_Classes_Ex(%lx %p %lx %p)\n",
+          ulClassIndex, ClassGuid, ulFlags, hMachine);
 
     if (ClassGuid == NULL)
         return CR_INVALID_POINTER;
@@ -1025,10 +1787,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);
 }
@@ -1037,10 +1806,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);
 }
@@ -1049,17 +1825,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;
@@ -1095,15 +1876,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;
@@ -1145,13 +1931,97 @@ CONFIGRET WINAPI CM_Enumerate_Enumerators_ExW(
 }
 
 
+/***********************************************************************
+ * CM_Find_Range [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Find_Range(
+    _Out_ PDWORDLONG pullStart,
+    _In_ DWORDLONG ullStart,
+    _In_ ULONG ulLength,
+    _In_ DWORDLONG ullAlignment,
+    _In_ DWORDLONG ullEnd,
+    _In_ RANGE_LIST rlh,
+    _In_ ULONG ulFlags)
+{
+    FIXME("CM_Find_Range(%p %I64u %lu %I64u %I64u %p %lx)\n",
+          pullStart, ullStart, ulLength, ullAlignment, ullEnd, rlh, ulFlags);
+
+    return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
+/***********************************************************************
+ * CM_First_Range [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_First_Range(
+    _In_ RANGE_LIST rlh,
+    _Out_ PDWORDLONG pullStart,
+    _Out_ PDWORDLONG pullEnd,
+    _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);
+
+    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);
 }
 
@@ -1159,8 +2029,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;
@@ -1168,7 +2042,8 @@ 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;
@@ -1211,25 +2086,75 @@ CONFIGRET WINAPI CM_Free_Log_Conf_Ex(
     }
     RpcEndExcept;
 
-    return ret;
+    return ret;
+}
+
+
+/***********************************************************************
+ * CM_Free_Log_Conf_Handle [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Free_Log_Conf_Handle(
+    _In_ LOG_CONF lcLogConf)
+{
+    PLOG_CONF_INFO pLogConfInfo;
+
+    TRACE("CM_Free_Log_Conf_Handle(%lx)\n", lcLogConf);
+
+    pLogConfInfo = (PLOG_CONF_INFO)lcLogConf;
+    if (pLogConfInfo == NULL || pLogConfInfo->ulMagic != LOG_CONF_MAGIC)
+        return CR_INVALID_LOG_CONF;
+
+    HeapFree(GetProcessHeap(), 0, pLogConfInfo);
+
+    return CR_SUCCESS;
 }
 
 
 /***********************************************************************
- * CM_Free_Log_Conf_Handle [SETUPAPI.@]
+ * CM_Free_Range_List [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Free_Log_Conf_Handle(
-    LOG_CONF lcLogConf)
+CONFIGRET
+WINAPI
+CM_Free_Range_List(
+    _In_ RANGE_LIST RangeList,
+    _In_ ULONG ulFlags)
 {
-    PLOG_CONF_INFO pLogConfInfo;
+    PINTERNAL_RANGE_LIST pRangeList;
+    PINTERNAL_RANGE pRange;
+    PLIST_ENTRY ListEntry;
 
-    TRACE("%lx\n", lcLogConf);
+    FIXME("CM_Free_Range_List(%p %lx)\n",
+          RangeList, ulFlags);
 
-    pLogConfInfo = (PLOG_CONF_INFO)lcLogConf;
-    if (pLogConfInfo == NULL || pLogConfInfo->ulMagic != LOG_CONF_MAGIC)
-        return CR_INVALID_LOG_CONF;
+    pRangeList = (PINTERNAL_RANGE_LIST)RangeList;
 
-    HeapFree(GetProcessHeap(), 0, pLogConfInfo);
+    if (!IsValidRangeList(pRangeList))
+        return CR_INVALID_RANGE_LIST;
+
+    if (ulFlags != 0)
+        return CR_INVALID_FLAG;
+
+    /* 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;
 }
@@ -1238,10 +2163,16 @@ CONFIGRET WINAPI CM_Free_Log_Conf_Handle(
 /***********************************************************************
  * 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);
 }
 
@@ -1249,11 +2180,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;
 }
@@ -1262,10 +2198,12 @@ 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;
 }
@@ -1274,10 +2212,16 @@ CONFIGRET WINAPI CM_Free_Res_Des_Handle(
 /***********************************************************************
  * 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);
 }
 
@@ -1285,8 +2229,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;
@@ -1295,7 +2244,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;
@@ -1361,11 +2311,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);
 }
@@ -1374,11 +2330,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);
 }
@@ -1387,16 +2349,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)
@@ -1430,11 +2397,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)
-{
-    TRACE("%p %p %p %lx %lx\n",
+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("CM_Get_Class_Key_Name_ExW(%p %p %p %lx %p)\n",
           ClassGuid, pszKeyName, pulLength, ulFlags, hMachine);
 
     if (ClassGuid == NULL || pszKeyName == NULL || pulLength == NULL)
@@ -1461,10 +2433,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);
 }
@@ -1473,10 +2452,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);
 }
@@ -1485,16 +2471,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)
@@ -1528,16 +2519,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)
@@ -1584,23 +2579,95 @@ 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)
 {
-    FIXME("%p %lu %p %p %p %lx %lx\n",
+    PWSTR BufferW = NULL;
+    ULONG ulLength = 0;
+    ULONG ulType;
+    CONFIGRET ret;
+
+    TRACE("CM_Get_Class_Registry_PropertyA(%p %lu %p %p %p %lx %p)\n",
           ClassGuid, ulProperty, pulRegDataType, Buffer, pulLength,
           ulFlags, hMachine);
-    return CR_CALL_NOT_IMPLEMENTED;
+
+    if (pulLength == NULL)
+        return CR_INVALID_POINTER;
+
+    if (ulProperty < CM_CRP_MIN || ulProperty > CM_CRP_MAX)
+        return CR_INVALID_PROPERTY;
+
+    ulType = GetRegistryPropertyType(ulProperty);
+    if (ulType == REG_SZ || ulType == REG_MULTI_SZ)
+    {
+        /* Get the required buffer size */
+        ret = CM_Get_Class_Registry_PropertyW(ClassGuid, ulProperty, pulRegDataType,
+                                              NULL, &ulLength, ulFlags, hMachine);
+        if (ret != CR_BUFFER_SMALL)
+            return ret;
+
+        /* Allocate the unicode buffer */
+        BufferW = HeapAlloc(GetProcessHeap(), 0, ulLength);
+        if (BufferW == NULL)
+            return CR_OUT_OF_MEMORY;
+
+        /* Get the property */
+        ret = CM_Get_Class_Registry_PropertyW(ClassGuid, ulProperty, pulRegDataType,
+                                              BufferW, &ulLength, ulFlags, hMachine);
+        if (ret != CR_SUCCESS)
+        {
+            HeapFree(GetProcessHeap(), 0, BufferW);
+            return ret;
+        }
+
+        /* Do W->A conversion */
+        *pulLength = WideCharToMultiByte(CP_ACP,
+                                         0,
+                                         BufferW,
+                                         lstrlenW(BufferW) + 1,
+                                         Buffer,
+                                         *pulLength,
+                                         NULL,
+                                         NULL);
+
+        /* Release the unicode buffer */
+        HeapFree(GetProcessHeap(), 0, BufferW);
+
+        if (*pulLength == 0)
+            ret = CR_FAILURE;
+    }
+    else
+    {
+        /* Get the property */
+        ret = CM_Get_Class_Registry_PropertyW(ClassGuid, ulProperty, pulRegDataType,
+                                              Buffer, pulLength, ulFlags, hMachine);
+    }
+
+    return ret;
 }
 
 
 /***********************************************************************
  * 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];
@@ -1608,7 +2675,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);
 
@@ -1670,10 +2737,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);
 }
 
@@ -1681,15 +2754,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)
@@ -1741,12 +2819,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)
-{
-    TRACE("%lx %s %p %p %p %lx\n", dnDevInst, pszCustomPropertyName,
-          pulRegDataType, Buffer, pulLength, 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("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);
@@ -1756,12 +2842,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)
-{
-    TRACE("%lx %s %p %p %p %lx\n", dnDevInst, debugstr_w(pszCustomPropertyName),
-          pulRegDataType, Buffer, pulLength, 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("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);
@@ -1771,9 +2865,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;
@@ -1781,8 +2882,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;
@@ -1851,9 +2953,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;
@@ -1862,9 +2971,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;
@@ -1929,11 +3038,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)
-{
-    TRACE("%lx %lu %p %p %p %lx\n",
+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("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,
@@ -1945,11 +3060,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)
-{
-    TRACE("%lx %lu %p %p %p %lx\n",
+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("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,
@@ -1961,16 +3082,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);
 
@@ -2034,9 +3162,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;
@@ -2045,7 +3180,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);
 
@@ -2120,12 +3255,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);
 }
@@ -2134,17 +3274,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)
@@ -2197,11 +3341,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);
 }
 
@@ -2209,11 +3359,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);
 }
 
@@ -2221,14 +3377,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)
@@ -2259,13 +3420,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)
@@ -2302,10 +3468,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);
 }
@@ -2314,10 +3487,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);
 }
@@ -2326,15 +3506,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));
@@ -2386,14 +3571,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)
@@ -2437,10 +3627,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);
 }
 
@@ -2448,10 +3644,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);
 }
 
@@ -2459,13 +3661,19 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_SizeW(
 /***********************************************************************
  * CM_Get_Device_ID_List_Size_ExA [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExA(
-    PULONG pulLen, PCSTR pszFilter, ULONG ulFlags, HMACHINE hMachine)
+CONFIGRET
+WINAPI
+CM_Get_Device_ID_List_Size_ExA(
+    _Out_ PULONG pulLen,
+    _In_opt_ PCSTR pszFilter,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
 {
     LPWSTR pszFilterW = NULL;
     CONFIGRET ret = CR_SUCCESS;
 
-    FIXME("%p %s %lx %lx\n", pulLen, pszFilter, ulFlags, hMachine);
+    FIXME("CM_Get_Device_ID_List_Size_ExA(%p %s %lx %p)\n",
+          pulLen, debugstr_a(pszFilter), ulFlags, hMachine);
 
     if (pszFilter == NULL)
     {
@@ -2494,13 +3702,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;
@@ -2542,10 +3756,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);
 }
 
@@ -2553,13 +3773,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;
@@ -2598,11 +3824,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)
-{
-    TRACE("%p %p %p %p %lu\n", pszDeviceInterface, AliasInterfaceGuid,
+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("CM_Get_Device_Interface_AliasA(%p %p %p %p %lx)\n",
+          pszDeviceInterface, AliasInterfaceGuid,
           pszAliasDeviceInterface, pulLength, ulFlags);
 
     return CM_Get_Device_Interface_Alias_ExA(pszDeviceInterface,
@@ -2614,11 +3846,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)
-{
-    TRACE("%p %p %p %p %lu\n", pszDeviceInterface, AliasInterfaceGuid,
+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("CM_Get_Device_Interface_AliasW(%p %p %p %p %lx)\n",
+          pszDeviceInterface, AliasInterfaceGuid,
           pszAliasDeviceInterface, pulLength, ulFlags);
 
     return CM_Get_Device_Interface_Alias_ExW(pszDeviceInterface,
@@ -2630,11 +3868,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)
-{
-    FIXME("%p %p %p %p %lu %lx\n", pszDeviceInterface, AliasInterfaceGuid,
+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("CM_Get_Device_Interface_Alias_ExA(%p %p %p %p %lx %p)\n",
+          pszDeviceInterface, AliasInterfaceGuid,
           pszAliasDeviceInterface, pulLength, ulFlags, hMachine);
 
     return CR_CALL_NOT_IMPLEMENTED;
@@ -2644,15 +3889,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 ||
@@ -2701,12 +3953,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);
@@ -2716,12 +3974,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);
@@ -2731,16 +3995,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)
@@ -2789,16 +4060,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)
@@ -2844,52 +4122,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;
     }
 
@@ -2908,15 +4199,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;
@@ -2943,7 +4239,7 @@ CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExW(
         ret = PNP_GetInterfaceDeviceListSize(BindingHandle,
                                              pulLen,
                                              InterfaceClassGuid,
-                                             pDeviceId,
+                                             pDeviceID,
                                              ulFlags);
     }
     RpcExcept(EXCEPTION_EXECUTE_HANDLER)
@@ -2959,10 +4255,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);
 }
 
@@ -2970,8 +4272,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;
@@ -2980,7 +4287,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;
@@ -3049,10 +4357,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);
 }
 
@@ -3060,13 +4373,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;
@@ -3103,12 +4421,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);
@@ -3118,12 +4440,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);
@@ -3133,15 +4459,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)
     {
@@ -3162,15 +4493,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;
@@ -3210,10 +4546,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);
@@ -3223,10 +4564,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);
@@ -3236,14 +4582,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;
@@ -3273,14 +4624,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;
@@ -3318,10 +4674,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);
 }
 
@@ -3329,9 +4691,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;
@@ -3339,7 +4705,8 @@ 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)
@@ -3393,10 +4760,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);
 }
 
@@ -3404,9 +4777,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;
@@ -3416,7 +4793,8 @@ 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;
@@ -3487,12 +4865,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);
 }
@@ -3501,12 +4885,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;
 }
@@ -3515,10 +4905,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);
 }
 
@@ -3526,8 +4922,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;
@@ -3536,7 +4937,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;
@@ -3602,10 +5004,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);
 }
 
@@ -3613,11 +5022,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;
 }
 
@@ -3625,10 +5041,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);
 }
 
@@ -3636,10 +5058,17 @@ 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("%p %p %lx %lx\n", pulSize, rdResDes, ulFlags, hMachine);
+    TRACE("CM_Get_Res_Des_Data_Size_Ex(%p %p %lx %p)\n",
+          pulSize, rdResDes, ulFlags, hMachine);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -3647,10 +5076,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);
 }
 
@@ -3658,8 +5093,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;
@@ -3668,7 +5108,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;
@@ -3734,9 +5175,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);
 }
 
@@ -3744,13 +5188,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)
     {
@@ -3781,13 +5228,53 @@ WORD WINAPI CM_Get_Version_Ex(HMACHINE hMachine)
 }
 
 
+/***********************************************************************
+ * CM_Intersect_Range_List [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Intersect_Range_List(
+    _In_ RANGE_LIST rlhOld1,
+    _In_ RANGE_LIST rlhOld2,
+    _In_ RANGE_LIST rlhNew,
+    _In_ ULONG ulFlags)
+{
+    FIXME("CM_Intersect_Range_List(%p %p %p %lx)\n",
+          rlhOld1, rlhOld2, rlhNew, ulFlags);
+
+    return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
+/***********************************************************************
+ * CM_Invert_Range_List [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Invert_Range_List(
+    _In_ RANGE_LIST rlhOld,
+    _In_ RANGE_LIST rlhNew,
+    _In_ DWORDLONG ullMaxValue,
+    _In_ ULONG ulFlags)
+{
+    FIXME("CM_Invert_Range_List(%p %p %I64u %lx)\n",
+          rlhOld, rlhNew, ullMaxValue, ulFlags);
+
+    return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
 /***********************************************************************
  * 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);
 }
 
@@ -3795,13 +5282,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;
@@ -3838,10 +5329,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);
 }
 
@@ -3849,14 +5344,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;
@@ -3893,10 +5392,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);
 }
 
@@ -3904,10 +5409,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);
 }
 
@@ -3915,13 +5426,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)
     {
@@ -3941,15 +5458,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;
@@ -4022,14 +5545,40 @@ CONFIGRET WINAPI CM_Locate_DevNode_ExW(
 
 
 /***********************************************************************
- * CM_Modify_Res_Des [SETUPAPI.@]
+ * CM_Merge_Range_List [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Modify_Res_Des(
-    PRES_DES prdResDes, RES_DES rdResDes, RESOURCEID ResourceID,
-    PCVOID ResourceData, ULONG ResourceLen, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Merge_Range_List(
+    _In_ RANGE_LIST rlhOld1,
+    _In_ RANGE_LIST rlhOld2,
+    _In_ RANGE_LIST rlhNew,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %p %lx %p %lu %lx", prdResDes, rdResDes, ResourceID, ResourceData,
+    FIXME("CM_Merge_Range_List(%p %p %p %lx)\n",
+          rlhOld1, rlhOld2, rlhNew, ulFlags);
+
+    return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
+/***********************************************************************
+ * CM_Modify_Res_Des [SETUPAPI.@]
+ */
+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("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);
 }
@@ -4038,12 +5587,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)
-{
-    FIXME("%p %p %lx %p %lu %lx %lx", prdResDes, rdResDes, ResourceID, ResourceData,
+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("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;
 }
 
@@ -4051,10 +5609,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);
 }
 
@@ -4062,9 +5626,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;
@@ -4072,7 +5640,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())
@@ -4127,14 +5695,38 @@ CONFIGRET WINAPI CM_Move_DevNode_Ex(
 
 
 /***********************************************************************
- * CM_Open_Class_KeyA [SETUPAPI.@]
+ * CM_Next_Range [SETUPAPI.@]
  */
-CONFIGRET WINAPI CM_Open_Class_KeyA(
-    LPGUID pClassGuid, LPCSTR pszClassName, REGSAM samDesired,
-    REGDISPOSITION Disposition, PHKEY phkClass, ULONG ulFlags)
+CONFIGRET
+WINAPI
+CM_Next_Range(
+    _Inout_ PRANGE_ELEMENT preElement,
+    _Out_ PDWORDLONG pullStart,
+    _Out_ PDWORDLONG pullEnd,
+    _In_ ULONG ulFlags)
 {
-    TRACE("%p %s %lx %lx %p %lx\n",
-          debugstr_guid(pClassGuid), pszClassName,
+    FIXME("CM_Next_Range(%p %p %p %lx)\n",
+          preElement, pullStart, pullEnd, ulFlags);
+
+    return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
+/***********************************************************************
+ * CM_Open_Class_KeyA [SETUPAPI.@]
+ */
+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("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,
@@ -4145,11 +5737,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)
-{
-    TRACE("%p %s %lx %lx %p %lx\n",
+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("CM_Open_Class_KeyW%p %s %lx %lx %p %lx)\n",
           debugstr_guid(pClassGuid), debugstr_w(pszClassName),
           samDesired, Disposition, phkClass, ulFlags);
 
@@ -4161,16 +5759,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)
@@ -4192,10 +5796,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;
@@ -4203,7 +5813,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);
 
@@ -4228,9 +5838,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)
@@ -4288,12 +5899,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);
 }
@@ -4302,27 +5920,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);
@@ -4332,12 +6088,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);
@@ -4347,15 +6108,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;
@@ -4388,17 +6156,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;
@@ -4451,12 +6226,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);
@@ -4466,21 +6246,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;
@@ -4533,10 +6315,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);
@@ -4546,17 +6334,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;
@@ -4610,10 +6403,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;
 }
 
@@ -4623,10 +6421,16 @@ 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;
 }
 
@@ -4634,10 +6438,15 @@ CONFIGRET WINAPI CM_Query_Remove_SubTree_Ex(
 /***********************************************************************
  * 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);
 }
 
@@ -4647,14 +6456,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;
@@ -4700,14 +6512,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)
-{
-    TRACE("%lx %s %s %p %p %lx\n", dnDevInst, debugstr_guid(InterfaceClassGuid),
+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("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,
@@ -4719,11 +6614,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)
-{
-    TRACE("%lx %s %s %p %p %lx\n", dnDevInst, debugstr_guid(InterfaceClassGuid),
+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("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,
@@ -4735,17 +6637,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;
@@ -4801,9 +6711,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;
@@ -4811,8 +6728,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;
@@ -4868,81 +6786,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;
 }
 
@@ -4952,10 +6809,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;
 }
 
@@ -4963,12 +6826,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);
 }
@@ -4977,12 +6846,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);
 }
@@ -4991,15 +6866,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;
@@ -5032,17 +6913,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;
@@ -5095,9 +6982,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);
 }
 
@@ -5105,13 +6995,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)
     {
@@ -5142,10 +7034,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);
 }
 
@@ -5153,13 +7048,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;
@@ -5197,12 +7096,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)
-{
-    FIXME("%p %lx %p %lu %lx %p\n",
+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("CM_Set_Class_Registry_PropertyA(%p %lx %p %lu %lx %p)\n",
           ClassGuid, ulProperty, Buffer, ulLength, ulFlags, hMachine);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -5210,12 +7116,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)
-{
-    FIXME("%p %lx %p %lu %lx %p\n",
+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("CM_Set_Class_Registry_PropertyW(%p %lx %p %lu %lx %p)\n",
           ClassGuid, ulProperty, Buffer, ulLength, ulFlags, hMachine);
+
     return CR_CALL_NOT_IMPLEMENTED;
 }
 
@@ -5223,10 +7136,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);
 }
 
@@ -5234,15 +7153,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;
@@ -5290,12 +7215,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);
@@ -5305,12 +7236,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)
-{
-    TRACE("%lx %lu %p %lx %lx\n",
+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("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);
@@ -5320,20 +7257,29 @@ 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)
         return CR_INVALID_POINTER;
 
+    if (ulProperty < CM_DRP_MIN || ulProperty > CM_DRP_MAX)
+        return CR_INVALID_PROPERTY;
+
     if (Buffer == NULL)
     {
         ret = CM_Set_DevNode_Registry_Property_ExW(dnDevInst,
@@ -5346,87 +7292,7 @@ CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExA(
     else
     {
         /* Get property type */
-        switch (ulProperty)
-        {
-            case CM_DRP_DEVICEDESC:
-                ulType = REG_SZ;
-                break;
-
-            case CM_DRP_HARDWAREID:
-                ulType = REG_MULTI_SZ;
-                break;
-
-            case CM_DRP_COMPATIBLEIDS:
-                ulType = REG_MULTI_SZ;
-                break;
-
-            case CM_DRP_SERVICE:
-                ulType = REG_SZ;
-                break;
-
-            case CM_DRP_CLASS:
-                ulType = REG_SZ;
-                break;
-
-            case CM_DRP_CLASSGUID:
-                ulType = REG_SZ;
-                break;
-
-            case CM_DRP_DRIVER:
-                ulType = REG_SZ;
-                break;
-
-            case CM_DRP_CONFIGFLAGS:
-                ulType = REG_DWORD;
-                break;
-
-            case CM_DRP_MFG:
-                ulType = REG_SZ;
-                break;
-
-            case CM_DRP_FRIENDLYNAME:
-                ulType = REG_SZ;
-                break;
-
-            case CM_DRP_LOCATION_INFORMATION:
-                ulType = REG_SZ;
-                break;
-
-            case CM_DRP_UPPERFILTERS:
-                ulType = REG_MULTI_SZ;
-                break;
-
-            case CM_DRP_LOWERFILTERS:
-                ulType = REG_MULTI_SZ;
-                break;
-
-            case CM_DRP_SECURITY:
-                ulType = REG_BINARY;
-                break;
-
-            case CM_DRP_DEVTYPE:
-                ulType = REG_DWORD;
-                break;
-
-            case CM_DRP_EXCLUSIVE:
-                ulType = REG_DWORD;
-                break;
-
-            case CM_DRP_CHARACTERISTICS:
-                ulType = REG_DWORD;
-                break;
-
-            case CM_DRP_UI_NUMBER_DESC_FORMAT:
-                ulType = REG_SZ;
-                break;
-
-            case CM_DRP_REMOVAL_POLICY_OVERRIDE:
-                ulType = REG_DWORD;
-                break;
-
-            default:
-                return CR_INVALID_PROPERTY;
-        }
+        ulType = GetRegistryPropertyType(ulProperty);
 
         /* Allocate buffer if needed */
         if (ulType == REG_SZ ||
@@ -5477,9 +7343,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;
@@ -5487,7 +7359,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)
@@ -5522,87 +7394,8 @@ CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExW(
     if (lpDevInst == NULL)
         return CR_INVALID_DEVNODE;
 
-    switch (ulProperty)
-    {
-        case CM_DRP_DEVICEDESC:
-            ulType = REG_SZ;
-            break;
-
-        case CM_DRP_HARDWAREID:
-            ulType = REG_MULTI_SZ;
-            break;
-
-        case CM_DRP_COMPATIBLEIDS:
-            ulType = REG_MULTI_SZ;
-            break;
-
-        case CM_DRP_SERVICE:
-            ulType = REG_SZ;
-            break;
-
-        case CM_DRP_CLASS:
-            ulType = REG_SZ;
-            break;
-
-        case CM_DRP_CLASSGUID:
-            ulType = REG_SZ;
-            break;
-
-        case CM_DRP_DRIVER:
-            ulType = REG_SZ;
-            break;
-
-        case CM_DRP_CONFIGFLAGS:
-            ulType = REG_DWORD;
-            break;
-
-        case CM_DRP_MFG:
-            ulType = REG_SZ;
-            break;
-
-        case CM_DRP_FRIENDLYNAME:
-            ulType = REG_SZ;
-            break;
-
-        case CM_DRP_LOCATION_INFORMATION:
-            ulType = REG_SZ;
-            break;
-
-        case CM_DRP_UPPERFILTERS:
-            ulType = REG_MULTI_SZ;
-            break;
-
-        case CM_DRP_LOWERFILTERS:
-            ulType = REG_MULTI_SZ;
-            break;
-
-        case CM_DRP_SECURITY:
-            ulType = REG_BINARY;
-            break;
-
-        case CM_DRP_DEVTYPE:
-            ulType = REG_DWORD;
-            break;
-
-        case CM_DRP_EXCLUSIVE:
-            ulType = REG_DWORD;
-            break;
-
-        case CM_DRP_CHARACTERISTICS:
-            ulType = REG_DWORD;
-            break;
-
-        case CM_DRP_UI_NUMBER_DESC_FORMAT:
-            ulType = REG_SZ;
-            break;
-
-        case CM_DRP_REMOVAL_POLICY_OVERRIDE:
-            ulType = REG_DWORD;
-            break;
-
-        default:
-            return CR_INVALID_PROPERTY;
-    }
+    /* Get property type */
+    ulType = GetRegistryPropertyType(ulProperty);
 
     RpcTryExcept
     {
@@ -5627,10 +7420,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);
 }
 
@@ -5638,13 +7436,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;
@@ -5681,12 +7484,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);
 }
@@ -5695,12 +7503,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);
 }
@@ -5709,15 +7522,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)
     {
@@ -5738,15 +7556,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;
@@ -5786,10 +7609,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);
 }
 
@@ -5797,15 +7625,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;
@@ -5854,13 +7687,35 @@ CONFIGRET WINAPI CM_Setup_DevNode_Ex(
 }
 
 
+/***********************************************************************
+ * CM_Test_Range_Available [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CM_Test_Range_Available(
+    _In_ DWORDLONG ullStartValue,
+    _In_ DWORDLONG ullEndValue,
+    _In_ RANGE_LIST rlh,
+    _In_ ULONG ulFlags)
+{
+    FIXME("CM_Test_Range_Available(%I64u %I64u %p %lx)\n",
+          ullStartValue, ullEndValue, rlh, ulFlags);
+    return CR_CALL_NOT_IMPLEMENTED;
+}
+
+
 /***********************************************************************
  * 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);
 }
 
@@ -5868,15 +7723,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;
@@ -5923,10 +7783,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);
@@ -5936,10 +7800,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);
@@ -5949,13 +7817,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;
@@ -5976,13 +7849,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;