29static const WCHAR DotCoInstallers[] = {
'.',
'C',
'o',
'I',
'n',
's',
't',
'a',
'l',
'l',
'e',
'r',
's',0};
35static const WCHAR VersionFormat[] = {
'%',
'u',
'.',
'%',
'u',
'.',
'%',
'u',
'.',
'%',
'u',0};
37static const WCHAR REGSTR_DRIVER_DATE[] = {
'D',
'r',
'i',
'v',
'e',
'r',
'D',
'a',
't',
'e',0};
38static const WCHAR REGSTR_DRIVER_DATE_DATA[] = {
'D',
'r',
'i',
'v',
'e',
'r',
'D',
'a',
't',
'e',
'D',
'a',
't',
'a',0};
39static const WCHAR REGSTR_DRIVER_VERSION[] = {
'D',
'r',
'i',
'v',
'e',
'r',
'V',
'e',
'r',
's',
'i',
'o',
'n',0};
41static const WCHAR REGSTR_UI_NUMBER_DESC_FORMAT[] = {
'U',
'I',
'N',
'u',
'm',
'b',
'e',
'r',
'D',
'e',
's',
'c',
'F',
'o',
'r',
'm',
'a',
't',0};
83 static const WCHAR fmt[] = {
'{',
'%',
'0',
'8',
'X',
'-',
'%',
'0',
'4',
'X',
'-',
84 '%',
'0',
'4',
'X',
'-',
'%',
'0',
'2',
'X',
'%',
'0',
'2',
'X',
'-',
'%',
'0',
'2',
85 'X',
'%',
'0',
'2',
'X',
'%',
'0',
'2',
'X',
'%',
'0',
'2',
'X',
'%',
'0',
'2',
'X',
'%',
137 LPCWSTR pExtensionArchitecture;
143 static const WCHAR ExtensionPlatformNT[] = {
'.',
'N',
'T',0};
144 static const WCHAR ExtensionPlatformWindows[] = {
'.',
'W',
'i',
'n',0};
146 static const WCHAR ExtensionArchitectureNone[] = {0};
147 static const WCHAR ExtensionArchitecturealpha[] = {
'a',
'l',
'p',
'h',
'a',0};
148 static const WCHAR ExtensionArchitectureamd64[] = {
'A',
'M',
'D',
'6',
'4',0};
149 static const WCHAR ExtensionArchitectureia64[] = {
'I',
'A',
'6',
'4',0};
150 static const WCHAR ExtensionArchitecturemips[] = {
'm',
'i',
'p',
's',0};
151 static const WCHAR ExtensionArchitectureppc[] = {
'p',
'p',
'c',0};
152 static const WCHAR ExtensionArchitecturex86[] = {
'x',
'8',
'6',0};
154 TRACE(
"%s(%s %p 0x%x 0x%x)\n",
157 *ScorePlatform = *ScoreMajorVersion = *ScoreMinorVersion = *ScoreProductType = *ScoreSuiteMask = 0;
162 TRACE(
"pSetupDuplicateString() failed\n");
167 switch (PlatformInfo->Platform)
176 ERR(
"Unknown platform 0x%lx\n", PlatformInfo->Platform);
180 switch (PlatformInfo->ProcessorArchitecture)
183 pExtensionArchitecture = ExtensionArchitecturealpha;
186 pExtensionArchitecture = ExtensionArchitectureamd64;
189 pExtensionArchitecture = ExtensionArchitectureia64;
192 pExtensionArchitecture = ExtensionArchitecturex86;
195 pExtensionArchitecture = ExtensionArchitecturemips;
198 pExtensionArchitecture = ExtensionArchitectureppc;
201 ERR(
"Unknown processor architecture 0x%x\n", PlatformInfo->ProcessorArchitecture);
203 pExtensionArchitecture = ExtensionArchitectureNone;
217 if (Fields[0] ==
NULL)
219 TRACE(
"No extension found\n");
220 *ScorePlatform = *ScoreMajorVersion = *ScoreMinorVersion = *ScoreProductType = *ScoreSuiteMask =
ULONG_MAX;
224 Fields[1] = Fields[0] + 1;
225 Fields[2] = Fields[3] = Fields[4] = Fields[5] =
NULL;
226 for (
i = 2; Fields[
i - 1] !=
NULL &&
i < 6;
i++)
228 Fields[
i] =
wcschr(Fields[
i - 1],
'.');
236 if (
strncmpiW(Fields[0], ExtensionPlatformWindows,
strlenW(ExtensionPlatformWindows)) == 0)
240 TRACE(
"Mismatch on platform field\n");
243 Fields[1] +=
wcslen(ExtensionPlatformWindows) - 1;
245 else if (
strncmpiW(Fields[0], ExtensionPlatformNT,
strlenW(ExtensionPlatformNT)) == 0)
249 TRACE(
"Mismatch on platform field\n");
252 Fields[1] +=
wcslen(ExtensionPlatformNT) - 1;
257 *ScorePlatform |= 0x02;
259 if (
strcmpiW(Fields[1], ExtensionArchitectureNone) == 0)
262 *ScorePlatform |= 0x01;
264 else if (
strcmpiW(Fields[1], pExtensionArchitecture) != 0)
266 TRACE(
"Mismatch on architecture field ('%s' and '%s')\n",
272 if (Fields[2] && *Fields[2])
282 if (Fields[3] && *Fields[3])
295 TRACE(
"Mismatch on version field (%lu.%lu and %lu.%lu)\n",
299 *ScoreMajorVersion =
MajorVersion - PlatformInfo->MajorVersion;
301 *ScoreMinorVersion =
MinorVersion - PlatformInfo->MinorVersion;
305 else if (Fields[3] && *Fields[3])
307 TRACE(
"Minor version found without major version\n");
312 *ScoreMajorVersion = PlatformInfo->MajorVersion;
313 *ScoreMinorVersion = PlatformInfo->MinorVersion;
316 if (Fields[4] && *Fields[4])
318 DWORD CurrentProductType;
320 if ((CurrentProductType == 0 || CurrentProductType ==
ULONG_MAX) &&
326 if (CurrentProductType != ProductType)
328 TRACE(
"Mismatch on product type (0x%08lx and 0x%08x)\n",
329 CurrentProductType, ProductType);
334 *ScoreProductType = 1;
336 if (Fields[5] && *Fields[5])
338 DWORD CurrentSuiteMask;
340 if ((CurrentSuiteMask == 0 || CurrentSuiteMask ==
ULONG_MAX) &&
346 if ((CurrentSuiteMask & ~SuiteMask) != 0)
348 TRACE(
"Mismatch on suite mask (0x%08lx and 0x%08x)\n",
349 CurrentSuiteMask, SuiteMask);
352 *ScoreSuiteMask = SuiteMask & ~CurrentSuiteMask;
355 *ScoreSuiteMask = SuiteMask;
370 DWORD Score1, Score2, Score3, Score4, Score5;
373 if (SectionName[
info->PrefixLength] !=
'.')
377 &SectionName[
info->PrefixLength],
381 &Score1, &Score2, &Score3, &Score4, &Score5);
387 if (Score1 >
info->BestScore1)
goto done;
388 if (Score1 < info->
BestScore1)
goto bettersection;
389 if (Score2 >
info->BestScore2)
goto done;
390 if (Score2 < info->
BestScore2)
goto bettersection;
391 if (Score3 >
info->BestScore3)
goto done;
392 if (Score3 < info->
BestScore3)
goto bettersection;
393 if (Score4 >
info->BestScore4)
goto done;
394 if (Score4 < info->
BestScore4)
goto bettersection;
395 if (Score5 >
info->BestScore5)
goto done;
396 if (Score5 < info->
BestScore5)
goto bettersection;
401 info->BestScore1 = Score1;
402 info->BestScore2 = Score2;
403 info->BestScore3 = Score3;
404 info->BestScore4 = Score4;
405 info->BestScore5 = Score5;
420 IN DWORD InfSectionWithExtSize,
428 AlternatePlatformInfo, InfSectionWithExt, InfSectionWithExtSize,
433 else if (!InfSectionName)
435 else if (AlternatePlatformInfo && AlternatePlatformInfo->cbSize !=
sizeof(
SP_ALTPLATFORM_INFO))
442 static BYTE CurrentProductType = 0;
443 static WORD CurrentSuiteMask = 0;
451 if (AlternatePlatformInfo)
453 pPlatformInfo = AlternatePlatformInfo;
487 TRACE(
"EnumerateSectionsStartingWith(InfSectionName = %S)\n", InfSectionName);
503 if (InfSectionWithExtSize > 0)
505 if (InfSectionWithExtSize < dwFullLength + 1)
567 *pDeviceInfo = deviceInfo;
624 if (
list->hmodClassPropPageProvider)
730 GUID CurrentClassGuid;
733 DWORD dwGuidListIndex = 0;
761 for (dwIndex = 0; ; dwIndex++)
791 TRACE(
"'NoUseClass' value found!\n");
804 TRACE(
"'NoInstallClass' value found!\n");
817 TRACE(
"'NoDisplayClass' value found!\n");
826 ClassGuidList[dwGuidListIndex] = CurrentClassGuid;
904 if (ClassNameW ==
NULL)
910 if (MachineNameW ==
NULL)
945 DWORD dwGuidListIndex = 0;
972 for (dwIndex = 0; ; dwIndex++)
983 TRACE(
"RegEnumKeyExW() returns %d\n", lError);
986 TRACE(
"Key name: %p\n", szKeyName);
1010 TRACE(
"Found matching class name\n");
1012 TRACE(
"Guid: %p\n", szKeyName);
1015 if (szKeyName[0] ==
'{' && szKeyName[37] ==
'}')
1019 TRACE(
"Guid: %p\n", &szKeyName[1]);
1022 &ClassGuidList[dwGuidListIndex]);
1056 DWORD ClassNameSize,
1070 DWORD ClassNameSize,
1084 DWORD ClassNameSize,
1101 if (
len == 0 ||
len > ClassNameSize)
1117 DWORD ClassNameSize,
1139 if ((ClassNameSize > 0) && (ClassName ==
NULL))
1178 if ((ClassName !=
NULL) && (
dwLength <= ClassNameSize))
1229 if (MachineNameW ==
NULL)
1304 sizeof(
list->ClassGuid));
1317 list->szData[0] =
list->szData[1] =
'\\';
1360 PCSTR InfSectionName)
1366 HwProfile, KeyType, InfHandle,
debugstr_a(InfSectionName));
1370 if (!InfSectionName)
1382 HwProfile, KeyType, InfHandle, InfSectionNameW);
1414 HwProfile, KeyType, InfHandle,
debugstr_w(InfSectionName));
1442 if (InfHandle && !InfSectionName)
1447 if (!InfHandle && InfSectionName)
1467#if _WIN32_WINNT >= 0x502
1480 L"Device Parameters",
1498#if _WIN32_WINNT >= 0x502
1510 FIXME(
"Need to install section %s in file %p\n",
1551 if (DeviceDescriptionW ==
NULL)
1562 MyFree(DeviceDescriptionW);
1694 if (deviceInfo !=
NULL)
1716 PVOID CompareContext,
1726 CompareProc, CompareContext, DupDeviceInfoData);
1754 FIXME(
"Unimplemented codepath!\n");
1811 while (ItemList != &
list->ListHead &&
index-- > 0)
1812 ItemList = ItemList->
Flink;
1813 if (ItemList == &
list->ListHead)
1841 PSTR DeviceInstanceId,
1842 DWORD DeviceInstanceIdSize,
1852 if (!DeviceInstanceId && DeviceInstanceIdSize > 0)
1883 if (
len > DeviceInstanceIdSize)
1910 PWSTR DeviceInstanceId,
1911 DWORD DeviceInstanceIdSize,
1937 if (!DeviceInstanceId && DeviceInstanceIdSize > 0)
1942 if (DeviceInstanceId && DeviceInstanceIdSize == 0)
1966 PCSTR InfSectionName,
1967 PSTR InfSectionWithExt,
1968 DWORD InfSectionWithExtSize,
1983 PWSTR InfSectionWithExt,
1984 DWORD InfSectionWithExtSize,
2002 IN DWORD InfSectionWithExtSize,
2017 if (InfSectionNameW ==
NULL)
2020 if (InfSectionWithExt)
2022 InfSectionWithExtW =
MyMalloc(InfSectionWithExtSize *
sizeof(
WCHAR));
2023 if (InfSectionWithExtW ==
NULL)
2028 InfHandle, InfSectionNameW, AlternatePlatformInfo,
2029 InfSectionWithExt ? InfSectionWithExtW :
NULL,
2030 InfSectionWithExtSize,
2035 if (bResult && InfSectionWithExt)
2038 InfSectionWithExtSize,
NULL,
NULL) != 0;
2042 if (ExtensionW ==
NULL)
2045 *
Extension = &InfSectionWithExt[ExtensionW - InfSectionWithExtW];
2050 MyFree(InfSectionWithExtW);
2060 PSTR ClassDescription,
2061 DWORD ClassDescriptionSize,
2065 ClassDescriptionSize,
2074 PWSTR ClassDescription,
2075 DWORD ClassDescriptionSize,
2079 ClassDescriptionSize,
2088 PSTR ClassDescription,
2089 DWORD ClassDescriptionSize,
2101 if (ClassDescriptionSize > 0)
2103 ClassDescriptionW =
MyMalloc(ClassDescriptionSize *
sizeof(
WCHAR));
2104 if (!ClassDescriptionW)
2127 if (
len == 0 ||
len > ClassDescriptionSize)
2135 MyFree(ClassDescriptionW);
2145 PWSTR ClassDescription,
2146 DWORD ClassDescriptionSize,
2168 if (!ClassDescription && ClassDescriptionSize > 0)
2210 if ((ClassDescription !=
NULL) && (
dwLength <= ClassDescriptionSize))
2224 if ((ClassDescription ==
NULL) || (
dwLength > ClassDescriptionSize))
2339 hDeviceInfo = deviceset;
2352 FIXME(
": flag DIGCF_PROFILE ignored\n");
2373 pClassGuid = &
list->ClassGuid;
2393 pClassGuid = &
list->ClassGuid;
2449 if (
set->MachineName)
2490 if (
set->MachineName)
2506 DWORD CreationFlags,
2514 CreationFlags, DeviceInterfaceData);
2519 if (ReferenceStringW ==
NULL)
return FALSE;
2524 DeviceInterfaceData);
2526 MyFree(ReferenceStringW);
2539 DWORD CreationFlags,
2545 CreationFlags, DeviceInterfaceData);
2571 CreationFlags, DeviceInterfaceData);
2585 PCSTR InfSectionName)
2591 samDesired, InfHandle, InfSectionName);
2594 if (!InfSectionName)
2600 if (!InfSectionNameW)
2604 DeviceInterfaceData,
Reserved, samDesired, InfHandle,
2625 WCHAR bracedGuidString[39];
2630 samDesired, InfHandle, InfSectionName);
2638 if (!DeviceInterfaceData ||
2645 if (InfHandle && !InfSectionName)
2701 if (InfHandle && InfSectionName)
2710 set->SelectedDevice->InstallParams.InstallMsgHandler,
2711 set->SelectedDevice->InstallParams.InstallMsgHandlerContext,
2744 if (!DeviceInterfaceData ||
2805 if (!DeviceInterfaceData ||
2822 InterfaceListEntry = InterfaceListEntry->Flink;
2825 if (MemberIndex-- == 0)
2836 InterfaceListEntry = InterfaceListEntry->Flink;
2845 while (ItemList != &
set->ListHead && !found)
2856 InterfaceListEntry = InterfaceListEntry->
Flink;
2859 if (MemberIndex-- == 0)
2870 InterfaceListEntry = InterfaceListEntry->
Flink;
2872 ItemList = ItemList->
Flink;
2921 DWORD DeviceInterfaceDetailDataSize,
2931 DeviceInterfaceData, DeviceInterfaceDetailData,
2940 if (!DeviceInterfaceData ||
2953 if((DeviceInterfaceDetailDataSize != 0) &&
2960 if (!DeviceInterfaceDetailData && DeviceInterfaceDetailDataSize)
2967 if (DeviceInterfaceDetailData !=
NULL)
2972 if (!DeviceInterfaceDetailDataW)
2978 if (!DeviceInterfaceDetailData || (DeviceInterfaceDetailData && DeviceInterfaceDetailDataW))
2982 DeviceInterfaceData,
2983 DeviceInterfaceDetailDataW,
2991 if (
ret && DeviceInterfaceDetailData && DeviceInterfaceDetailDataSize >= bytesNeeded)
3003 MyFree(DeviceInterfaceDetailDataW);
3015 DWORD DeviceInterfaceDetailDataSize,
3023 DeviceInterfaceData, DeviceInterfaceDetailData,
3032 if (!DeviceInterfaceData ||
3044 if (!DeviceInterfaceDetailData && DeviceInterfaceDetailDataSize)
3054 if ((DeviceInterfaceDetailData !=
NULL)
3067 if (sizeRequired > DeviceInterfaceDetailDataSize)
3149 BOOL bIsStringProperty;
3151 DWORD RequiredSizeA, RequiredSizeW;
3152 DWORD PropertyBufferSizeW = 0;
3163 if (!PropertyBufferW)
3175 PropertyBufferSizeW,
3182 if (bIsStringProperty)
3183 RequiredSizeA = RequiredSizeW /
sizeof(
WCHAR);
3185 RequiredSizeA = RequiredSizeW;
3424 ERR(
"Property 0x%lx not implemented\n",
Property);
3503 if (InfFileNameW ==
NULL)
3577 ERR(
"RegCreateKeyExW(%s) failed\n",
debugstr_w(FullBuffer));
3581 TRACE(
"The class key %s was successfully created\n",
debugstr_w(FullBuffer));
3583 TRACE(
"The class key %s was successfully opened\n",
debugstr_w(FullBuffer));
3646 if (MachineNameW ==
NULL)
3700 ERR(
"Invalid Flags parameter!\n");
3723 WCHAR bracedGuidString[39];
3807 if (DevicePath[0] !=
L'\\' ||
3808 DevicePath[1] !=
L'\\' ||
3809 (DevicePath[2] !=
L'?' && DevicePath[2] !=
L'.') ||
3810 DevicePath[3] !=
L'\\')
3818 pEnd =
wcschr(&DevicePath[4],
L'\\');
3845 ItemList =
list->ListHead.Flink;
3846 while (ItemList != &
list->ListHead)
3855 InterfaceListEntry = InterfaceListEntry->
Flink;
3861 if (DeviceInterfaceData)
3864 DeviceInterfaceData->
Flags = deviceInterface->
Flags;
3889 InstancePath[0] = 0;
3890 dwKeyName =
sizeof(InstancePath);
3908 dwKeyName =
sizeof(SymBuffer);
3909 SymBuffer[0] =
L'\0';
3918 if (!
wcsicmp(SymBuffer, DevicePath))
3928 if (deviceInterface)
3941 if (DeviceInterfaceData)
3944 DeviceInterfaceData->
Flags = deviceInterface->
Flags;
3988 if (DevicePathW ==
NULL)
3992 DevicePathW, OpenFlags, DeviceInterfaceData);
4046#define CLASS_COINSTALLER 0x1
4047#define DEVICE_COINSTALLER 0x2
4048#define CLASS_INSTALLER 0x4
4049 UCHAR CanHandle = 0;
4052 switch (InstallFunction)
4131 ERR(
"Install function %u not supported\n", InstallFunction);
4164 if (KeyBuffer !=
NULL)
4201 WCHAR szGuidString[40];
4208 if (KeyBuffer !=
NULL)
4245 if (KeyBuffer !=
NULL)
4325 while (
ListEntry != &ClassCoInstallersListHead)
4341 while (
ListEntry != &DeviceCoInstallersListHead)
4402 &deviceInstallParamsW,
4502 DWORD SupportedFlags =
4517 DWORD SupportedFlagsEx =
4523 DI_FLAGSEX_INSTALLEDDRIVER;
4620 ERR(
"DrivePath is NULL\n");
4679 ret = hHWProfileKey;
4682 if (hHWProfilesKey !=
NULL)
4684 if (hHWProfileKey !=
NULL && hHWProfileKey !=
ret)
4758 if (DeviceInstanceIdW ==
NULL)
4764 MyFree(DeviceInstanceIdW);
4791 FIXME(
"DIOD_CANCEL_REMOVE flag not implemented\n");
4797 else if (!DeviceInstanceId)
4814 while (ItemList != &
list->ListHead)
4820 ItemList = ItemList->
Flink;
4916 else if (
list->SelectedDevice ==
NULL)
4925 &
list->SelectedDevice->ClassGuid,
5101 switch (PropChange->StateChange)
5107 hRootKey =
set->HKLM;
5158 || PropChange->HwProfile == 0
5177 ERR(
"Unknown StateChange 0x%lx\n", PropChange->StateChange);
5238 DWORD SectionNameLength = 0;
5248 if (SelectedDriver ==
NULL)
5272#if _WIN32_WINNT >= 0x502
5321 *IsOEMLocation =
FALSE;
5342 if (*Windir && Windir[
strlenW(Windir) - 1] !=
'\\')
5349 *IsOEMLocation =
FALSE;
5354 *IsOEMLocation =
TRUE;
5376 DWORD SectionNameLength = 0;
5386 BOOL NeedtoCopyFile;
5419 DWORD ConfigFlags, regType;
5425 (
PBYTE)&ConfigFlags,
5426 sizeof(ConfigFlags),
5438 (
PBYTE)&ConfigFlags,
5439 sizeof(ConfigFlags));
5451 if (SelectedDriver ==
NULL)
5465 pSectionName = &SectionName[
strlenW(SectionName)];
5475 if (!lpFullGuidString)
5480 lpFullGuidString[0] =
'{';
5507 if (!newInfFileDetails)
5523#if _WIN32_WINNT >= 0x502
5542 *pSectionName =
'\0';
5556 TRACE(
"Write information to driver key\n");
5613 RebootRequired =
TRUE;
5634 TRACE(
"Write information to enum key\n");
5732 strcpyW(&DriverKey[1], lpGuidString);
5733 pDeviceInstance = &DriverKey[
strlenW(DriverKey)];
5734 *pDeviceInstance++ =
'}';
5735 *pDeviceInstance++ =
'\\';
5739 while (
Index <= 9999)
5877 else if (dwRegType !=
REG_SZ)
5948 Scope, HwProfile, KeyType, samDesired);
5999 L"Device Parameters",
6011 WARN(
"unknown KeyType %d\n", KeyType);
6102 WARN(
"unknown KeyType %d\n", KeyType);
6171 DWORD ConfigFlags = 0, PropertySize;
6251 DWORD ConfigFlags = 0, PropertySize;
static const WCHAR nameW[]
#define RegCloseKey(hKey)
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
#define CR_INVALID_PROPERTY
#define MAX_CLASS_NAME_LEN
#define CM_OPEN_CLASS_KEY_INSTALLER
#define CM_Create_DevInst_Ex
#define CR_INVALID_DEVICE_ID
#define CM_CREATE_DEVINST_GENERATE_ID
#define CM_CREATE_DEVINST_PHANTOM
_Null_terminated_ WCHAR * DEVINSTID_W
#define RegDisposition_OpenExisting
#define CR_INVALID_DEVINST
#define CM_DRP_DEVICEDESC
#define CM_Get_DevInst_Custom_Property_ExA
#define CR_INVALID_MACHINENAME
#define CM_Locate_DevInst_ExW
#define CR_ALREADY_SUCH_DEVINST
#define CM_CUSTOMDEVPROP_MERGE_MULTISZ
#define CM_LOCATE_DEVINST_NORMAL
#define CM_Create_DevInst_ExW
#define CR_NO_SUCH_DEVNODE
#define CM_Get_DevInst_Custom_Property_ExW
#define CR_CALL_NOT_IMPLEMENTED
#define CR_INVALID_POINTER
#define CM_LOCATE_DEVNODE_PHANTOM
#define CM_CREATE_DEVINST_DO_NOT_INSTALL
#define CR_NO_SUCH_REGISTRY_KEY
#define CR_INVALID_DEVNODE
#define CR_REGISTRY_ERROR
#define CM_CREATE_DEVINST_NORMAL
#define CM_Get_Device_ID_Ex
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)
CONFIGRET WINAPI CM_Disconnect_Machine(_In_opt_ 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)
CONFIGRET WINAPI CM_Get_Parent_Ex(_Out_ PDEVINST pdnDevInst, _In_ DEVINST dnDevInst, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
CONFIGRET WINAPI CM_Connect_MachineW(_In_opt_ PCWSTR UNCServerName, _Out_ PHMACHINE phMachine)
CONFIGRET WINAPI CM_Disable_DevNode_Ex(_In_ DEVINST dnDevInst, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
CONFIGRET WINAPI CM_Locate_DevNode_ExW(_Out_ PDEVINST pdnDevInst, _In_opt_ DEVINSTID_W pDeviceID, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
CONFIGRET WINAPI CM_Enumerate_Classes_Ex(_In_ ULONG ulClassIndex, _Out_ LPGUID ClassGuid, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
CONFIGRET WINAPI CM_Enable_DevNode_Ex(_In_ DEVINST dnDevInst, _In_ ULONG ulFlags, _In_opt_ HMACHINE hMachine)
static const WCHAR szClassName[]
#define ERROR_NOT_ENOUGH_MEMORY
#define ERROR_INSUFFICIENT_BUFFER
#define MAX_DEVICE_ID_LEN
#define MAX_GUID_STRING_LEN
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
LONG WINAPI RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE *lpData, DWORD cbData)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
LONG WINAPI RegConnectRegistryW(LPCWSTR lpMachineName, HKEY hKey, PHKEY phkResult)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
#define ERROR_CALL_NOT_IMPLEMENTED
#define ERROR_INVALID_PARAMETER
#define INVALID_HANDLE_VALUE
#define ERROR_NO_MORE_ITEMS
#define ERROR_NOT_SUPPORTED
#define HeapFree(x, y, z)
#define ERROR_INVALID_HANDLE
#define WideCharToMultiByte
#define MultiByteToWideChar
#define ERROR_ACCESS_DENIED
static DWORD DWORD * dwLength
static void cleanup(void)
PVOID QueryRegistryValue(HANDLE RegHandle, PWCHAR ValueName, LPDWORD RegistryType, LPDWORD Length)
UINT WINAPI GetSystemWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
VOID WINAPI GetSystemInfo(IN LPSYSTEM_INFO lpSystemInfo)
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
static const WCHAR sizeW[]
LONG SETUP_CreateDevicesList(IN OUT struct DeviceInfoSet *list, IN PCWSTR MachineName OPTIONAL, IN CONST GUID *Class OPTIONAL, IN PCWSTR Enumerator OPTIONAL)
static const WCHAR ClassGUID[]
BOOL WINAPI SetupDiInstallClassExW(IN HWND hwndParent OPTIONAL, IN PCWSTR InfFileName OPTIONAL, IN DWORD Flags, IN HSPFILEQ FileQueue OPTIONAL, IN CONST GUID *InterfaceClassGuid OPTIONAL, IN PVOID Reserved1, IN PVOID Reserved2)
static const WCHAR InstanceKeyFormat[]
static BOOL InfIsFromOEMLocation(IN PCWSTR FullName, OUT LPBOOL IsOEMLocation)
BOOL WINAPI SetupDiSetClassInstallParamsA(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PSP_CLASSINSTALL_HEADER ClassInstallParams, DWORD ClassInstallParamsSize)
static BOOL DestroyDeviceInfo(struct DeviceInfo *deviceInfo)
BOOL WINAPI SetupDiOpenDeviceInfoA(IN HDEVINFO DeviceInfoSet, IN PCSTR DeviceInstanceId, IN HWND hwndParent OPTIONAL, IN DWORD OpenFlags, OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL)
#define CLASS_COINSTALLER
HDEVINFO WINAPI SetupDiGetClassDevsExA(const GUID *class, PCSTR enumstr, HWND parent, DWORD flags, HDEVINFO deviceset, PCSTR machine, PVOID reserved)
static const WCHAR DateFormat[]
BOOL WINAPI SetupDiGetActualSectionToInstallExA(IN HINF InfHandle, IN PCSTR InfSectionName, IN PSP_ALTPLATFORM_INFO AlternatePlatformInfo OPTIONAL, OUT PSTR InfSectionWithExt OPTIONAL, IN DWORD InfSectionWithExtSize, OUT PDWORD RequiredSize OPTIONAL, OUT PSTR *Extension OPTIONAL, IN PVOID Reserved)
BOOL WINAPI SetupDiRegisterCoDeviceInstallers(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData)
BOOL WINAPI SetupDiCreateDeviceInterfaceA(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, const GUID *InterfaceClassGuid, PCSTR ReferenceString, DWORD CreationFlags, PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData)
BOOL WINAPI SetupDiRestartDevices(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData)
HDEVINFO WINAPI SetupDiCreateDeviceInfoListExW(const GUID *ClassGuid, HWND hwndParent, PCWSTR MachineName, PVOID Reserved)
static BOOL CheckSectionValid(IN LPCWSTR SectionName, IN PSP_ALTPLATFORM_INFO PlatformInfo, IN BYTE ProductType, IN WORD SuiteMask, OUT PDWORD ScorePlatform, OUT PDWORD ScoreMajorVersion, OUT PDWORD ScoreMinorVersion, OUT PDWORD ScoreProductType, OUT PDWORD ScoreSuiteMask)
BOOL WINAPI SetupDiBuildClassInfoListExW(DWORD Flags, LPGUID ClassGuidList, DWORD ClassGuidListSize, PDWORD RequiredSize, LPCWSTR MachineName, PVOID Reserved)
BOOL WINAPI SetupDiOpenDeviceInterfaceA(HDEVINFO DeviceInfoSet, PCSTR DevicePath, DWORD OpenFlags, PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData)
BOOL WINAPI SetupDiGetClassDescriptionExA(const GUID *ClassGuid, PSTR ClassDescription, DWORD ClassDescriptionSize, PDWORD RequiredSize, PCSTR MachineName, PVOID Reserved)
BOOL WINAPI SetupDiBuildClassInfoList(DWORD Flags, LPGUID ClassGuidList, DWORD ClassGuidListSize, PDWORD RequiredSize)
BOOL WINAPI SetupDiGetDeviceRegistryPropertyA(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Property, PDWORD PropertyRegDataType, PBYTE PropertyBuffer, DWORD PropertyBufferSize, PDWORD RequiredSize)
static HKEY OpenHardwareProfileKey(IN HKEY HKLM, IN DWORD HwProfile, IN DWORD samDesired)
BOOL WINAPI SetupDiInstallClassExA(IN HWND hwndParent OPTIONAL, IN PCSTR InfFileName OPTIONAL, IN DWORD Flags, IN HSPFILEQ FileQueue OPTIONAL, IN CONST GUID *InterfaceClassGuid OPTIONAL, IN PVOID Reserved1, IN PVOID Reserved2)
static BOOL SETUPDI_DeleteDrvKey(HKEY RootKey, struct DeviceInfo *devInfo)
BOOL WINAPI SetupDiSetDeviceInstallParamsW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN PSP_DEVINSTALL_PARAMS_W DeviceInstallParams)
BOOL WINAPI SetupDiClassGuidsFromNameExA(LPCSTR ClassName, LPGUID ClassGuidList, DWORD ClassGuidListSize, PDWORD RequiredSize, LPCSTR MachineName, PVOID Reserved)
DWORD GetErrorCodeFromCrCode(const IN CONFIGRET cr)
BOOL WINAPI SetupDiGetClassDescriptionExW(const GUID *ClassGuid, PWSTR ClassDescription, DWORD ClassDescriptionSize, PDWORD RequiredSize, PCWSTR MachineName, PVOID Reserved)
BOOL WINAPI SetupDiEnumDeviceInfo(HDEVINFO devinfo, DWORD index, PSP_DEVINFO_DATA info)
BOOL WINAPI SetupDiInstallClassA(HWND hwndParent, PCSTR InfFileName, DWORD Flags, HSPFILEQ FileQueue)
HKEY WINAPI SetupDiCreateDevRegKeyW(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Scope, DWORD HwProfile, DWORD KeyType, HINF InfHandle, PCWSTR InfSectionName)
BOOL WINAPI SetupDiGetDeviceInstallParamsW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, OUT PSP_DEVINSTALL_PARAMS_W DeviceInstallParams)
BOOL WINAPI SetupDiCreateDeviceInfoA(HDEVINFO DeviceInfoSet, PCSTR DeviceName, CONST GUID *ClassGuid, PCSTR DeviceDescription, HWND hwndParent, DWORD CreationFlags, PSP_DEVINFO_DATA DeviceInfoData)
static const WCHAR DotServices[]
BOOL WINAPI SetupDiCallClassInstaller(DI_FUNCTION InstallFunction, HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData)
BOOL WINAPI SetupDiRegisterDeviceInfo(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Flags, PSP_DETSIG_CMPPROC CompareProc, PVOID CompareContext, PSP_DEVINFO_DATA DupDeviceInfoData)
BOOL(WINAPI * DEFAULT_CLASS_INSTALL_PROC)(IN HDEVINFO DeviceInfoSet, IN OUT PSP_DEVINFO_DATA DeviceInfoData)
BOOL WINAPI SetupDiDeleteDeviceInterfaceRegKey(HDEVINFO DeviceInfoSet, PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, DWORD Reserved)
HKEY SETUPDI_CreateDrvKey(HKEY RootKey, struct DeviceInfo *devInfo, UUID *ClassGuid, REGSAM samDesired)
HKEY SETUPDI_OpenDevKey(HKEY RootKey, struct DeviceInfo *devInfo, REGSAM samDesired)
BOOL WINAPI SetupDiCreateDeviceInfoW(HDEVINFO DeviceInfoSet, PCWSTR DeviceName, CONST GUID *ClassGuid, PCWSTR DeviceDescription, HWND hwndParent, DWORD CreationFlags, PSP_DEVINFO_DATA DeviceInfoData)
BOOL WINAPI SetupDiGetDeviceInfoListDetailW(HDEVINFO DeviceInfoSet, PSP_DEVINFO_LIST_DETAIL_DATA_W DevInfoData)
BOOL WINAPI SetupDiEnumDeviceInterfaces(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, CONST GUID *InterfaceClassGuid, DWORD MemberIndex, PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData)
BOOL WINAPI SetupDiSelectDevice(IN HDEVINFO DeviceInfoSet, IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL)
BOOL WINAPI SetupDiClassNameFromGuidA(const GUID *ClassGuid, PSTR ClassName, DWORD ClassNameSize, PDWORD RequiredSize)
BOOL WINAPI SetupDiGetClassDescriptionA(const GUID *ClassGuid, PSTR ClassDescription, DWORD ClassDescriptionSize, PDWORD RequiredSize)
static const WCHAR REGSTR_DRIVER_VERSION[]
BOOL WINAPI SetupDiSetDeviceRegistryPropertyA(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Property, const BYTE *PropertyBuffer, DWORD PropertyBufferSize)
BOOL WINAPI SetupDiGetActualSectionToInstallW(HINF InfHandle, PCWSTR InfSectionName, PWSTR InfSectionWithExt, DWORD InfSectionWithExtSize, PDWORD RequiredSize, PWSTR *Extension)
BOOL WINAPI SetupDiInstallClassW(HWND hwndParent, PCWSTR InfFileName, DWORD Flags, HSPFILEQ FileQueue)
BOOL WINAPI SetupDiGetDeviceRegistryPropertyW(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Property, PDWORD PropertyRegDataType, PBYTE PropertyBuffer, DWORD PropertyBufferSize, PDWORD RequiredSize)
BOOL WINAPI SetupDiClassGuidsFromNameExW(LPCWSTR ClassName, LPGUID ClassGuidList, DWORD ClassGuidListSize, PDWORD RequiredSize, LPCWSTR MachineName, PVOID Reserved)
static BOOL DestroyDeviceInfoSet(struct DeviceInfoSet *list)
static void SETUPDI_GuidToString(const GUID *guid, LPWSTR guidStr)
BOOL WINAPI SetupDiGetClassDescriptionW(const GUID *ClassGuid, PWSTR ClassDescription, DWORD ClassDescriptionSize, PDWORD RequiredSize)
static const WCHAR REGSTR_UI_NUMBER_DESC_FORMAT[]
BOOL WINAPI SetupDiCreateDeviceInterfaceW(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, const GUID *InterfaceClassGuid, PCWSTR ReferenceString, DWORD CreationFlags, PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData)
HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyA(HDEVINFO DeviceInfoSet, PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, DWORD Reserved, REGSAM samDesired, HINF InfHandle, PCSTR InfSectionName)
HDEVINFO WINAPI SetupDiGetClassDevsW(CONST GUID *class, LPCWSTR enumstr, HWND parent, DWORD flags)
static const WCHAR REGSTR_DRIVER_DATE[]
BOOL WINAPI SetupDiGetCustomDevicePropertyA(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData, IN PCSTR CustomPropertyName, IN DWORD Flags, OUT PDWORD PropertyRegDataType OPTIONAL, OUT PBYTE PropertyBuffer, IN DWORD PropertyBufferSize, OUT PDWORD RequiredSize OPTIONAL)
static BOOL DestroyClassInstallParams(struct ClassInstallParams *installParams)
BOOL WINAPI SetupDiDeleteDevRegKey(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Scope, DWORD HwProfile, DWORD KeyType)
static BOOL GetSectionCallback(IN LPCWSTR SectionName, IN PVOID Context)
BOOL WINAPI IntSetupDiSetDeviceRegistryPropertyAW(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Property, const BYTE *PropertyBuffer, DWORD PropertyBufferSize, BOOL isAnsi)
BOOL WINAPI SetupDiClassGuidsFromNameA(LPCSTR ClassName, LPGUID ClassGuidList, DWORD ClassGuidListSize, PDWORD RequiredSize)
static const WCHAR BackSlash[]
HDEVINFO WINAPI SetupDiGetClassDevsExW(CONST GUID *class, PCWSTR enumstr, HWND parent, DWORD flags, HDEVINFO deviceset, PCWSTR machine, PVOID reserved)
static BOOL SETUPDI_DeleteDevKey(HKEY RootKey, struct DeviceInfo *devInfo)
BOOL WINAPI SetupDiGetActualSectionToInstallA(HINF InfHandle, PCSTR InfSectionName, PSTR InfSectionWithExt, DWORD InfSectionWithExtSize, PDWORD RequiredSize, PSTR *Extension)
HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyW(HDEVINFO DeviceInfoSet, PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, DWORD Reserved, REGSAM samDesired, HINF InfHandle, PCWSTR InfSectionName)
BOOL WINAPI SetupDiDeleteDeviceInfo(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData)
BOOL WINAPI SetupDiChangeState(IN HDEVINFO DeviceInfoSet, IN OUT PSP_DEVINFO_DATA DeviceInfoData)
BOOL WINAPI SetupDiInstallDevice(IN HDEVINFO DeviceInfoSet, IN OUT PSP_DEVINFO_DATA DeviceInfoData)
BOOL WINAPI SetupDiOpenDeviceInterfaceW(HDEVINFO DeviceInfoSet, PCWSTR DevicePath, DWORD OpenFlags, PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData)
HDEVINFO WINAPI SetupDiCreateDeviceInfoListExA(const GUID *ClassGuid, HWND hwndParent, PCSTR MachineName, PVOID Reserved)
HKEY SETUPDI_OpenDrvKey(HKEY RootKey, struct DeviceInfo *devInfo, REGSAM samDesired)
BOOL WINAPI SetupDiOpenDeviceInfoW(IN HDEVINFO DeviceInfoSet, IN PCWSTR DeviceInstanceId, IN HWND hwndParent OPTIONAL, IN DWORD OpenFlags, OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL)
BOOL WINAPI SetupDiGetDeviceInstanceIdW(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PWSTR DeviceInstanceId, DWORD DeviceInstanceIdSize, PDWORD RequiredSize)
DWORD(CALLBACK * COINSTALLER_PROC)(IN DI_FUNCTION InstallFunction, IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN OUT PCOINSTALLER_CONTEXT_DATA Context)
static BOOL ResetDevice(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData)
BOOL WINAPI SetupDiSetDeviceInstallParamsA(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PSP_DEVINSTALL_PARAMS_A DeviceInstallParams)
HKEY WINAPI SetupDiOpenDevRegKey(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Scope, DWORD HwProfile, DWORD KeyType, REGSAM samDesired)
static BOOL IsDeviceInfoInDeviceInfoSet(struct DeviceInfoSet *deviceInfoSet, struct DeviceInfo *deviceInfo)
static BOOL WINAPI IntSetupDiRegisterDeviceInfo(IN HDEVINFO DeviceInfoSet, IN OUT PSP_DEVINFO_DATA DeviceInfoData)
HKEY WINAPI SetupDiCreateDevRegKeyA(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Scope, DWORD HwProfile, DWORD KeyType, HINF InfHandle, PCSTR InfSectionName)
BOOL WINAPI SetupDiClassNameFromGuidW(const GUID *ClassGuid, PWSTR ClassName, DWORD ClassNameSize, PDWORD RequiredSize)
static const WCHAR REGSTR_SECURITY[]
BOOL WINAPI SetupDiSetDeviceRegistryPropertyW(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Property, const BYTE *PropertyBuffer, DWORD PropertyBufferSize)
HKEY SETUP_CreateClassKey(HINF hInf)
BOOL WINAPI SetupDiClassGuidsFromNameW(LPCWSTR ClassName, LPGUID ClassGuidList, DWORD ClassGuidListSize, PDWORD RequiredSize)
BOOL WINAPI SetupDiClassNameFromGuidExW(const GUID *ClassGuid, PWSTR ClassName, DWORD ClassNameSize, PDWORD RequiredSize, PCWSTR MachineName, PVOID Reserved)
static const WCHAR VersionFormat[]
DWORD(CALLBACK * CLASS_INSTALL_PROC)(IN DI_FUNCTION InstallFunction, IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL)
BOOL WINAPI SetupDiBuildClassInfoListExA(DWORD Flags, LPGUID ClassGuidList, DWORD ClassGuidListSize, PDWORD RequiredSize, LPCSTR MachineName, PVOID Reserved)
static DWORD SETUPAPI_GetCurrentHwProfile(IN HDEVINFO DeviceInfoSet)
BOOL WINAPI SetupDiSetSelectedDevice(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData)
BOOL WINAPI SetupDiGetCustomDevicePropertyW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData, IN PCWSTR CustomPropertyName, IN DWORD Flags, OUT PDWORD PropertyRegDataType OPTIONAL, OUT PBYTE PropertyBuffer, IN DWORD PropertyBufferSize, OUT PDWORD RequiredSize OPTIONAL)
BOOL WINAPI SetupDiGetDeviceInterfaceDetailA(HDEVINFO DeviceInfoSet, PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, PSP_DEVICE_INTERFACE_DETAIL_DATA_A DeviceInterfaceDetailData, DWORD DeviceInterfaceDetailDataSize, PDWORD RequiredSize, PSP_DEVINFO_DATA DeviceInfoData)
static const WCHAR REGSTR_DRIVER_DATE_DATA[]
BOOL WINAPI SetupDiGetDeviceInterfaceDetailW(HDEVINFO DeviceInfoSet, PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData, DWORD DeviceInterfaceDetailDataSize, PDWORD RequiredSize, PSP_DEVINFO_DATA DeviceInfoData)
static struct PropertyMapEntry PropertyMap[]
BOOL WINAPI SetupDiClassNameFromGuidExA(const GUID *ClassGuid, PSTR ClassName, DWORD ClassNameSize, PDWORD RequiredSize, PCSTR MachineName, PVOID Reserved)
BOOL WINAPI SetupDiGetSelectedDevice(IN HDEVINFO DeviceInfoSet, OUT PSP_DEVINFO_DATA DeviceInfoData)
static const WCHAR InfDirectory[]
HDEVINFO WINAPI SetupDiGetClassDevsA(CONST GUID *class, LPCSTR enumstr, HWND parent, DWORD flags)
HKEY SETUPDI_CreateDevKey(HKEY RootKey, struct DeviceInfo *devInfo, REGSAM samDesired)
BOOL WINAPI SetupDiGetDeviceInstallParamsA(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PSP_DEVINSTALL_PARAMS_A DeviceInstallParams)
static const WCHAR DotHW[]
HKEY WINAPI SetupDiOpenClassRegKey(const GUID *ClassGuid, REGSAM samDesired)
static BOOL StopDevice(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData)
BOOL WINAPI SetupDiGetDeviceInfoListDetailA(HDEVINFO DeviceInfoSet, PSP_DEVINFO_LIST_DETAIL_DATA_A DevInfoData)
BOOL WINAPI SetupDiGetActualSectionToInstallExW(IN HINF InfHandle, IN PCWSTR InfSectionName, IN PSP_ALTPLATFORM_INFO AlternatePlatformInfo OPTIONAL, OUT PWSTR InfSectionWithExt OPTIONAL, IN DWORD InfSectionWithExtSize, OUT PDWORD RequiredSize OPTIONAL, OUT PWSTR *Extension OPTIONAL, IN PVOID Reserved)
static BOOL CheckDeviceInstallParameters(IN PSP_DEVINSTALL_PARAMS_W DeviceInstallParams)
BOOL WINAPI SetupDiDestroyDeviceInfoList(HDEVINFO devinfo)
BOOL WINAPI SetupDiGetDeviceInstanceIdA(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PSTR DeviceInstanceId, DWORD DeviceInstanceIdSize, PDWORD RequiredSize)
HKEY WINAPI SetupDiOpenClassRegKeyExW(const GUID *ClassGuid, REGSAM samDesired, DWORD Flags, PCWSTR MachineName, PVOID Reserved)
HKEY WINAPI SetupDiOpenClassRegKeyExA(const GUID *ClassGuid, REGSAM samDesired, DWORD Flags, PCSTR MachineName, PVOID Reserved)
HDEVINFO WINAPI SetupDiCreateDeviceInfoList(const GUID *ClassGuid, HWND hwndParent)
BOOL WINAPI SetupDiGetDeviceInfoListClass(IN HDEVINFO DeviceInfoSet, OUT LPGUID ClassGuid)
BOOL CreateDeviceInfo(IN struct DeviceInfoSet *list, IN LPCWSTR InstancePath, IN LPCGUID pClassGuid, OUT struct DeviceInfo **pDeviceInfo)
static const WCHAR DotCoInstallers[]
#define DEVICE_COINSTALLER
BOOL WINAPI SetupDiInstallDriverFiles(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData)
struct InfFileDetails * CreateInfFileDetails(IN LPCWSTR FullInfFileName)
BOOL DestroyDriverInfoElement(struct DriverInfoElement *driverInfo)
BOOL WINAPI SetupDiSelectBestCompatDrv(IN HDEVINFO DeviceInfoSet, IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL)
VOID DereferenceInfFile(struct InfFileDetails *infFile)
BOOL WINAPI SetupInstallFromInfSectionW(HWND owner, HINF hinf, PCWSTR section, UINT flags, HKEY key_root, PCWSTR src_root, UINT copy_flags, PSP_FILE_CALLBACK_W callback, PVOID context, HDEVINFO devinfo, PSP_DEVINFO_DATA devinfo_data)
BOOL WINAPI SetupCopyOEMInfW(IN PCWSTR SourceInfFileName, IN PCWSTR OEMSourceMediaLocation, IN DWORD OEMSourceMediaType, IN DWORD CopyStyle, OUT PWSTR DestinationInfFileName OPTIONAL, IN DWORD DestinationInfFileNameSize, OUT PDWORD RequiredSize OPTIONAL, OUT PWSTR *DestinationInfFileNameComponent OPTIONAL)
BOOL WINAPI SetupInstallServicesFromInfSectionExW(_In_ HINF InfHandle, _In_ PCWSTR SectionName, _In_ DWORD Flags, _In_opt_ HDEVINFO DeviceInfoSet, _In_opt_ PSP_DEVINFO_DATA DeviceInfoData, _Reserved_ PVOID Reserved1, _Reserved_ PVOID Reserved2)
BOOL DestroyDeviceInterface(struct DeviceInterface *deviceInterface)
static const WCHAR SymbolicLink[]
BOOL WINAPI SetupDiInstallDeviceInterfaces(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData)
LONG SETUP_CreateInterfaceList(struct DeviceInfoSet *list, PCWSTR MachineName, CONST GUID *InterfaceGuid, PCWSTR DeviceInstanceW, BOOL OnlyPresentInterfaces)
LPWSTR WINAPI pSetupMultiByteToUnicode(LPCSTR lpMultiByteStr, UINT uCodePage)
DWORD FreeFunctionPointer(IN HMODULE ModulePointer, IN PVOID FunctionPointer)
LPVOID WINAPI MyMalloc(DWORD dwSize)
VOID WINAPI MyFree(LPVOID lpMem)
LPWSTR WINAPI pSetupDuplicateString(LPCWSTR lpSrc)
DWORD WINAPI pSetupStringFromGuid(LPGUID lpGUID, PWSTR pString, DWORD dwStringLen)
DWORD GetFunctionPointer(IN PWSTR InstallerName, OUT HMODULE *ModulePointer, OUT PVOID *FunctionPointer)
BOOL EnumerateSectionsStartingWith(IN HINF hInf, IN LPCWSTR pStr, IN FIND_CALLBACK Callback, IN PVOID Context)
BOOL WINAPI SetupDiGetINFClassW(IN PCWSTR InfName, OUT LPGUID ClassGuid, OUT PWSTR ClassName, IN DWORD ClassNameSize, OUT PDWORD RequiredSize OPTIONAL)
BOOL WINAPI SetupGetLineTextW(PINFCONTEXT context, HINF hinf, PCWSTR section_name, PCWSTR key_name, PWSTR buffer, DWORD size, PDWORD required)
UINT WINAPI SetupDefaultQueueCallbackW(PVOID context, UINT notification, UINT_PTR param1, UINT_PTR param2)
void WINAPI SetupTermDefaultQueueCallback(PVOID context)
PVOID WINAPI SetupInitDefaultQueueCallback(HWND owner)
BOOL WINAPI SetupDiUnremoveDevice(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData)
BOOL WINAPI SetupDiRemoveDevice(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define IsListEmpty(ListHead)
#define RemoveHeadList(ListHead)
#define InitializeListHead(ListHead)
_Inout_opt_ PUNICODE_STRING Extension
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
#define EXCEPTION_EXECUTE_HANDLER
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
#define memcpy(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
static const WCHAR machineW[]
static const char machine[]
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
_In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Reserved_ ULONG _In_opt_ PUNICODE_STRING _In_ ULONG _Out_opt_ PULONG Disposition
#define PROCESSOR_ARCHITECTURE_IA64
#define PROCESSOR_ARCHITECTURE_ALPHA
#define PROCESSOR_ARCHITECTURE_UNKNOWN
#define PROCESSOR_ARCHITECTURE_MIPS
#define PROCESSOR_ARCHITECTURE_PPC
#define PROCESSOR_ARCHITECTURE_AMD64
#define PROCESSOR_ARCHITECTURE_INTEL
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
#define VER_PLATFORM_WIN32_NT
#define VER_PLATFORM_WIN32_WINDOWS
#define KEY_CREATE_SUB_KEY
#define REG_OPTION_NON_VOLATILE
#define REG_CREATED_NEW_KEY
#define KEY_ENUMERATE_SUB_KEYS
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define strncmpiW(s1, s2, n)
#define strtoulW(s1, s2, b)
static const WCHAR HKLM[]
#define REGSTR_VAL_LOWERFILTERS
#define REGSTR_VAL_DRVDESC
#define REGSTR_KEY_CURRENT
#define REGSTR_VAL_INFPATH
#define REGSTR_VAL_INSTALLER_32
#define REGSTR_VAL_UI_NUMBER
#define REGSTR_VAL_CAPABILITIES
#define REGSTR_VAL_NOINSTALLCLASS
#define REGSTR_VAL_DEVDESC
#define REGSTR_VAL_CLASSGUID
#define REGSTR_VAL_COMPATIBLEIDS
#define REGSTR_PATH_DEVICE_CLASSES
#define CSCONFIGFLAG_DISABLED
#define REGSTR_VAL_INFSECTIONEXT
#define REGSTR_VAL_CURRENTCONFIG
#define CONFIGFLAG_FAILEDINSTALL
#define REGSTR_VAL_DRIVER
#define REGSTR_VAL_FRIENDLYNAME
#define REGSTR_VAL_SERVICE
#define REGSTR_VAL_HARDWAREID
#define REGSTR_VAL_NODISPLAYCLASS
#define REGSTR_VAL_COINSTALLERS_32
#define REGSTR_PATH_SYSTEMENUM
#define REGSTR_VAL_MATCHINGDEVID
#define REGSTR_VAL_CSCONFIGFLAGS
#define REGSTR_VAL_NOUSECLASS
#define REGSTR_VAL_LOCATION_INFORMATION
#define REGSTR_PATH_CLASS_NT
#define REGSTR_PATH_HWPROFILES
#define REGSTR_VAL_CONFIGFLAGS
#define REGSTR_PATH_IDCONFIGDB
#define REGSTR_VAL_UPPERFILTERS
#define REGSTR_VAL_INFSECTION
#define REGSTR_VAL_PROVIDER_NAME
#define REGSTR_PATH_CODEVICEINSTALLERS
#define CONFIGFLAG_DISABLED
RPC_STATUS WINAPI UuidToStringW(UUID *Uuid, RPC_WSTR *StringUuid)
RPC_STATUS WINAPI RpcStringFreeW(RPC_WSTR *String)
RPC_STATUS WINAPI UuidFromStringW(RPC_WSTR s, UUID *uuid)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define DI_FLAGSEX_CI_FAILED
#define DI_FLAGSEX_NO_DRVREG_MODIFY
#define ERROR_DI_POSTPROCESSING_REQUIRED
#define ERROR_NO_ASSOCIATED_CLASS
#define SPDRP_MAXIMUM_PROPERTY
#define SP_MAX_MACHINENAME_LENGTH
#define ERROR_INVALID_DEVINST_NAME
#define ERROR_INVALID_MACHINENAME
#define SP_COPY_NOOVERWRITE
#define ERROR_DEVINST_ALREADY_EXISTS
_In_ DWORD _Out_ PDWORD _In_opt_ PCSTR MachineName
#define DI_NODI_DEFAULTACTION
#define SetupInstallFromInfSection
#define ERROR_INVALID_CLASS
#define DIBCI_NODISPLAYCLASS
#define DIF_NEWDEVICEWIZARD_PRESELECT
_In_opt_ PSP_DEVINFO_DATA _In_ DWORD ClassInstallParamsSize
#define SPINST_PROFILEITEMS
_In_ DWORD _Out_opt_ PDWORD PropertyRegDataType
#define DIF_REGISTERDEVICE
#define DI_CLASSINSTALLPARAMS
#define ERROR_INVALID_REG_PROPERTY
#define DIF_INSTALLDEVICEFILES
_In_ DWORD ClassGuidListSize
#define DIF_ADDREMOTEPROPERTYPAGE_ADVANCED
#define ERROR_NO_SUCH_DEVINST
#define ERROR_NO_DEVICE_SELECTED
#define DI_RESOURCEPAGE_ADDED
SP_ALTPLATFORM_INFO_V1 SP_ALTPLATFORM_INFO
#define DIGCF_DEVICEINTERFACE
#define DI_FLAGSEX_DIDCOMPATINFO
#define DI_FLAGSEX_SETFAILEDINSTALL
struct _SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_DEVICE_INTERFACE_DETAIL_DATA_W
#define DIF_NEWDEVICEWIZARD_SELECT
#define ERROR_SECTION_NOT_FOUND
#define ERROR_NO_DRIVER_SELECTED
#define DIF_REGISTER_COINSTALLERS
#define DI_DRIVERPAGE_ADDED
#define DIF_INSTALLINTERFACES
#define DIOD_INHERIT_CLASSDRVS
struct _SP_DEVINSTALL_PARAMS_W SP_DEVINSTALL_PARAMS_W
#define DICS_FLAG_CONFIGSPECIFIC
_In_opt_ PSP_DEVINFO_DATA DeviceInfoData
#define ERROR_DI_DO_DEFAULT
#define DIOD_CANCEL_REMOVE
#define ERROR_CLASS_MISMATCH
#define DIF_NEWDEVICEWIZARD_PREANALYZE
#define DI_FLAGSEX_DIDINFOLIST
_In_ DWORD _Out_opt_ PDWORD _In_ DWORD PropertyBufferSize
struct _SP_DEVICE_INTERFACE_DETAIL_DATA_W * PSP_DEVICE_INTERFACE_DETAIL_DATA_W
#define DIF_INSTALLDEVICE
#define DIBCI_NOINSTALLCLASS
#define DIF_ALLOW_INSTALL
#define DIF_DESTROYPRIVATEDATA
#define DI_PROPERTIES_CHANGE
#define DI_FLAGSEX_ALLOWEXCLUDEDDRVS
#define DIF_SELECTBESTCOMPATDRV
#define SPDRP_CONFIGFLAGS
#define DIF_POWERMESSAGEWAKE
DWORD(CALLBACK * PSP_DETSIG_CMPPROC)(HDEVINFO, PSP_DEVINFO_DATA, PSP_DEVINFO_DATA, PVOID)
#define DIF_PROPERTYCHANGE
#define DIF_ADDPROPERTYPAGE_ADVANCED
#define SPDRP_PHYSICAL_DEVICE_OBJECT_NAME
#define DICD_INHERIT_CLASSDRVS
#define DIF_NEWDEVICEWIZARD_POSTANALYZE
#define DIF_TROUBLESHOOTER
#define DICUSTOMDEVPROP_MERGE_MULTISZ
#define DI_DONOTCALLCONFIGMG
#define DIF_NEWDEVICEWIZARD_FINISHINSTALL
#define SETUP_DEVICE_INFO_SET_MAGIC
OSVERSIONINFOEXW OsVersionInfo
PULONG MinorVersion OPTIONAL
PSP_PROPCHANGE_PARAMS PropChangeParams
PSP_ADDPROPERTYPAGE_DATA AddPropertyPageData
COINSTALLER_PROC Function
SP_DEVINSTALL_PARAMS_W InstallParams
WCHAR szData[ANYSIZE_ARRAY]
LIST_ENTRY InterfaceListHead
struct ClassInstallParams ClassInstallParams
WCHAR Data[ANYSIZE_ARRAY]
HMODULE hmodDevicePropPageProvider
SP_DEVINSTALL_PARAMS_W InstallParams
LIST_ENTRY DriverListHead
struct DeviceInfoSet * set
struct DeviceInfo * DeviceInfo
WCHAR SymbolicLink[ANYSIZE_ARRAY]
struct InfFileDetails * InfFileDetails
SP_DRVINFO_DETAIL_DATA_W Details
SP_DRVINFO_DATA_V2_W Info
ULARGE_INTEGER DriverDate
WCHAR BestSection[LINE_LEN+1]
PSP_ALTPLATFORM_INFO PlatformInfo
struct _LIST_ENTRY * Flink
CHAR DevicePath[ANYSIZE_ARRAY]
WCHAR DevicePath[ANYSIZE_ARRAY]
HANDLE RemoteMachineHandle
CHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH]
HANDLE RemoteMachineHandle
WCHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH]
ULONG_PTR ClassInstallReserved
WCHAR DriverPath[MAX_PATH]
WCHAR ProviderName[LINE_LEN]
WCHAR Description[LINE_LEN]
WCHAR SectionName[LINE_LEN]
WCHAR InfFileName[MAX_PATH]
WORD wProcessorArchitecture
#define FIELD_OFFSET(t, f)
#define CONTAINING_RECORD(address, type, field)
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ CONST GUID _In_opt_ PCUNICODE_STRING ReferenceString
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ ULONG _Out_ PVOID PropertyBuffer
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ ULONG _Out_ PVOID _Out_ PULONG RequiredSize
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE _In_ USHORT _In_ USHORT Version
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING DeviceDescription
DWORD WINAPI GetLastError(void)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
_Reserved_ PVOID Reserved
#define ERROR_INVALID_USER_BUFFER
#define ERROR_BAD_PATHNAME
#define ERROR_GEN_FAILURE
#define ERROR_FILE_EXISTS
#define ERROR_SUCCESS_REBOOT_REQUIRED
#define ERROR_INVALID_FLAGS
#define ERROR_INVALID_COMPUTERNAME
#define ERROR_INVALID_DATA
#define HKEY_LOCAL_MACHINE
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
_Must_inspect_result_ _In_ ULONG Flags
_In_ CONST GUID * InterfaceClassGuid