X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=dll%2Fwin32%2Fsetupapi%2Fcfgmgr.c;h=c2044d98fa0062e84dfe64382cb5ff5f1a800ca5;hp=d6beff2b3f6ae28ce9aaa4559c6c4d86e5793ced;hb=60a218948efe35180b351b0b5b1494fbb996dad9;hpb=7712bdbae943afe4a3868997fa52b33144e75f2c diff --git a/dll/win32/setupapi/cfgmgr.c b/dll/win32/setupapi/cfgmgr.c index d6beff2b3f6..c2044d98fa0 100644 --- a/dll/win32/setupapi/cfgmgr.c +++ b/dll/win32/setupapi/cfgmgr.c @@ -21,7 +21,10 @@ #include "setupapi_private.h" -WINE_DEFAULT_DEBUG_CHANNEL(setupapi); +#include +#include + +#include "rpc_private.h" /* Registry key and value names */ static const WCHAR Backslash[] = {'\\', 0}; @@ -57,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; @@ -76,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)) @@ -119,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; @@ -181,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; @@ -212,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 { @@ -238,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); } @@ -251,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; @@ -262,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()) @@ -338,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); } @@ -349,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); } @@ -360,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; @@ -382,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; @@ -441,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); } @@ -458,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; @@ -472,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); @@ -497,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; @@ -553,7 +1163,7 @@ CONFIGRET WINAPI CM_Connect_MachineW( } } - phMachine = (PHMACHINE)pMachine; + *phMachine = (PHMACHINE)pMachine; return CR_SUCCESS; } @@ -562,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); } @@ -576,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); } @@ -590,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)) @@ -615,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; @@ -625,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()) @@ -681,7 +1311,9 @@ CONFIGRET WINAPI CM_Create_DevNode_ExW( if (ret == CR_SUCCESS) { - *pdnDevInst = pSetupStringTableAddString(StringTable, pDeviceID, 1); + /* If CM_CREATE_DEVINST_GENERATE_ID was passed in, PNP_CreateDevInst + * will return the generated device ID in szLocalDeviceID */ + *pdnDevInst = pSetupStringTableAddString(StringTable, szLocalDeviceID, 1); if (*pdnDevInst == 0) ret = CR_NO_SUCH_DEVNODE; } @@ -690,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); } @@ -704,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; @@ -753,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); } @@ -765,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); } @@ -790,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; @@ -850,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) @@ -875,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); } @@ -889,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; @@ -949,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); } @@ -960,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; @@ -1021,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); } @@ -1033,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); } @@ -1045,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; @@ -1091,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; @@ -1141,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); } @@ -1155,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; @@ -1164,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; @@ -1207,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; } @@ -1234,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); } @@ -1245,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; } @@ -1258,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; } @@ -1270,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); } @@ -1281,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; @@ -1291,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; @@ -1357,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); } @@ -1370,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); } @@ -1383,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) @@ -1426,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) @@ -1457,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); } @@ -1469,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); } @@ -1481,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) @@ -1524,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) @@ -1580,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]; @@ -1604,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); @@ -1666,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); } @@ -1677,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) @@ -1737,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); @@ -1752,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); @@ -1767,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; @@ -1777,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; @@ -1847,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; @@ -1858,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; @@ -1925,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, @@ -1941,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, @@ -1957,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); @@ -2030,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; @@ -2041,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); @@ -2116,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); } @@ -2130,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) @@ -2193,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); } @@ -2205,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); } @@ -2217,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) @@ -2255,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) @@ -2298,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); } @@ -2310,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); } @@ -2322,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)); @@ -2382,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) @@ -2433,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); } @@ -2444,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); } @@ -2455,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) { @@ -2490,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; @@ -2538,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); } @@ -2549,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; @@ -2594,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, @@ -2610,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, @@ -2626,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; @@ -2640,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 || @@ -2697,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); @@ -2712,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); @@ -2727,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) @@ -2785,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) @@ -2840,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; } @@ -2904,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; @@ -2939,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) @@ -2955,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); } @@ -2966,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; @@ -2976,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; @@ -3045,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); } @@ -3056,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; @@ -3099,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); @@ -3114,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); @@ -3129,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) { @@ -3158,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; @@ -3206,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); @@ -3219,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); @@ -3232,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; @@ -3269,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; @@ -3314,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); } @@ -3325,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; @@ -3335,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) @@ -3389,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); } @@ -3400,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; @@ -3412,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; @@ -3483,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); } @@ -3497,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; } @@ -3511,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); } @@ -3522,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; @@ -3532,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; @@ -3598,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); } @@ -3609,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; } @@ -3621,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); } @@ -3632,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; } @@ -3643,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); } @@ -3654,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; @@ -3664,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; @@ -3730,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); } @@ -3740,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) { @@ -3777,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); } @@ -3791,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; @@ -3834,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); } @@ -3845,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; @@ -3889,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); } @@ -3900,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); } @@ -3911,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) { @@ -3937,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; @@ -4018,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); } @@ -4034,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; } @@ -4047,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); } @@ -4058,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; @@ -4068,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()) @@ -4123,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, @@ -4141,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); @@ -4157,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) @@ -4188,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; @@ -4199,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); @@ -4224,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) @@ -4284,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); } @@ -4298,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); @@ -4328,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); @@ -4343,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; @@ -4384,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; @@ -4447,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); @@ -4462,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; @@ -4529,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); @@ -4542,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; @@ -4606,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; } @@ -4619,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; } @@ -4630,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); } @@ -4643,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; @@ -4696,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, @@ -4715,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, @@ -4731,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; @@ -4797,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; @@ -4807,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; @@ -4864,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; } @@ -4948,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; } @@ -4959,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); } @@ -4973,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); } @@ -4987,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; @@ -5028,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; @@ -5091,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); } @@ -5101,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) { @@ -5138,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); } @@ -5149,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; @@ -5193,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; } @@ -5206,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; } @@ -5219,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); } @@ -5230,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; @@ -5286,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); @@ -5301,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); @@ -5316,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, @@ -5342,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 || @@ -5473,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; @@ -5483,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) @@ -5518,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 { @@ -5623,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); } @@ -5634,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; @@ -5677,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); } @@ -5691,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); } @@ -5705,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) { @@ -5734,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; @@ -5782,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); } @@ -5793,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; @@ -5850,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); } @@ -5864,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; @@ -5919,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); @@ -5932,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); @@ -5945,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; @@ -5972,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;