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)
561 static BYTE CurrentProductType = 0;
562 static WORD CurrentSuiteMask = 0;
571 DWORD FieldCount,
i, dwFullLength;
574 AlternatePlatformInfo, InfSectionWithExt, InfSectionWithExtSize,
583 if (AlternatePlatformInfo &&
591 if (AlternatePlatformInfo)
593 pPlatformInfo = AlternatePlatformInfo;
599 if (CurrentPlatform.
cbSize !=
sizeof(CurrentPlatform))
603 CurrentPlatform.
cbSize =
sizeof(CurrentPlatform);
612 pPlatformInfo = &CurrentPlatform;
629 for (
i = 2;
i <= FieldCount;
i++)
632 DWORD Score1, Score2, Score3, Score4, Score5;
642 if (Candidate[0] !=
'.')
649 &Score1, &Score2, &Score3, &Score4, &Score5))
685 if (InfSectionWithExtSize > 0)
687 if (InfSectionWithExtSize < dwFullLength + 1)
737 if (InfSectionWithExtSize > 0)
748 Buffer, InfSectionWithExtSize,
760 InfSectionWithExt, InfSectionWithExtSize,
810 *pDeviceInfo = deviceInfo;
867 if (
list->hmodClassPropPageProvider)
973 GUID CurrentClassGuid;
976 DWORD dwGuidListIndex = 0;
1004 for (dwIndex = 0; ; dwIndex++)
1034 TRACE(
"'NoUseClass' value found!\n");
1047 TRACE(
"'NoInstallClass' value found!\n");
1060 TRACE(
"'NoDisplayClass' value found!\n");
1069 ClassGuidList[dwGuidListIndex] = CurrentClassGuid;
1147 if (ClassNameW ==
NULL)
1153 if (MachineNameW ==
NULL)
1181 WCHAR szKeyName[40];
1188 DWORD dwGuidListIndex = 0;
1215 for (dwIndex = 0; ; dwIndex++)
1226 TRACE(
"RegEnumKeyExW() returns %d\n", lError);
1229 TRACE(
"Key name: %p\n", szKeyName);
1253 TRACE(
"Found matching class name\n");
1255 TRACE(
"Guid: %p\n", szKeyName);
1258 if (szKeyName[0] ==
'{' && szKeyName[37] ==
'}')
1262 TRACE(
"Guid: %p\n", &szKeyName[1]);
1265 &ClassGuidList[dwGuidListIndex]);
1299 DWORD ClassNameSize,
1313 DWORD ClassNameSize,
1327 DWORD ClassNameSize,
1344 if (
len == 0 ||
len > ClassNameSize)
1360 DWORD ClassNameSize,
1382 if ((ClassNameSize > 0) && (ClassName ==
NULL))
1421 if ((ClassName !=
NULL) && (
dwLength <= ClassNameSize))
1472 if (MachineNameW ==
NULL)
1547 sizeof(
list->ClassGuid));
1560 list->szData[0] =
list->szData[1] =
'\\';
1603 PCSTR InfSectionName)
1609 HwProfile, KeyType, InfHandle,
debugstr_a(InfSectionName));
1613 if (!InfSectionName)
1625 HwProfile, KeyType, InfHandle, InfSectionNameW);
1657 HwProfile, KeyType, InfHandle,
debugstr_w(InfSectionName));
1685 if (InfHandle && !InfSectionName)
1690 if (!InfHandle && InfSectionName)
1710#if _WIN32_WINNT >= 0x502
1723 L"Device Parameters",
1741#if _WIN32_WINNT >= 0x502
1753 FIXME(
"Need to install section %s in file %p\n",
1794 if (DeviceDescriptionW ==
NULL)
1805 MyFree(DeviceDescriptionW);
1937 if (deviceInfo !=
NULL)
1959 PVOID CompareContext,
1969 CompareProc, CompareContext, DupDeviceInfoData);
1997 FIXME(
"Unimplemented codepath!\n");
2054 while (ItemList != &
list->ListHead &&
index-- > 0)
2055 ItemList = ItemList->
Flink;
2056 if (ItemList == &
list->ListHead)
2084 PSTR DeviceInstanceId,
2085 DWORD DeviceInstanceIdSize,
2095 if (!DeviceInstanceId && DeviceInstanceIdSize > 0)
2126 if (
len > DeviceInstanceIdSize)
2153 PWSTR DeviceInstanceId,
2154 DWORD DeviceInstanceIdSize,
2180 if (!DeviceInstanceId && DeviceInstanceIdSize > 0)
2185 if (DeviceInstanceId && DeviceInstanceIdSize == 0)
2209 PCSTR InfSectionName,
2210 PSTR InfSectionWithExt,
2211 DWORD InfSectionWithExtSize,
2226 PWSTR InfSectionWithExt,
2227 DWORD InfSectionWithExtSize,
2245 IN DWORD InfSectionWithExtSize,
2260 if (InfSectionNameW ==
NULL)
2263 if (InfSectionWithExt)
2265 InfSectionWithExtW =
MyMalloc(InfSectionWithExtSize *
sizeof(
WCHAR));
2266 if (InfSectionWithExtW ==
NULL)
2271 InfHandle, InfSectionNameW, AlternatePlatformInfo,
2272 InfSectionWithExt ? InfSectionWithExtW :
NULL,
2273 InfSectionWithExtSize,
2278 if (bResult && InfSectionWithExt)
2281 InfSectionWithExtSize,
NULL,
NULL) != 0;
2285 if (ExtensionW ==
NULL)
2288 *
Extension = &InfSectionWithExt[ExtensionW - InfSectionWithExtW];
2293 MyFree(InfSectionWithExtW);
2303 PSTR ClassDescription,
2304 DWORD ClassDescriptionSize,
2308 ClassDescriptionSize,
2317 PWSTR ClassDescription,
2318 DWORD ClassDescriptionSize,
2322 ClassDescriptionSize,
2331 PSTR ClassDescription,
2332 DWORD ClassDescriptionSize,
2344 if (ClassDescriptionSize > 0)
2346 ClassDescriptionW =
MyMalloc(ClassDescriptionSize *
sizeof(
WCHAR));
2347 if (!ClassDescriptionW)
2370 if (
len == 0 ||
len > ClassDescriptionSize)
2378 MyFree(ClassDescriptionW);
2388 PWSTR ClassDescription,
2389 DWORD ClassDescriptionSize,
2411 if (!ClassDescription && ClassDescriptionSize > 0)
2453 if ((ClassDescription !=
NULL) && (
dwLength <= ClassDescriptionSize))
2467 if ((ClassDescription ==
NULL) || (
dwLength > ClassDescriptionSize))
2582 hDeviceInfo = deviceset;
2595 FIXME(
": flag DIGCF_PROFILE ignored\n");
2616 pClassGuid = &
list->ClassGuid;
2636 pClassGuid = &
list->ClassGuid;
2692 if (
set->MachineName)
2733 if (
set->MachineName)
2749 DWORD CreationFlags,
2757 CreationFlags, DeviceInterfaceData);
2762 if (ReferenceStringW ==
NULL)
return FALSE;
2767 DeviceInterfaceData);
2769 MyFree(ReferenceStringW);
2782 DWORD CreationFlags,
2788 CreationFlags, DeviceInterfaceData);
2814 CreationFlags, DeviceInterfaceData);
2828 PCSTR InfSectionName)
2834 samDesired, InfHandle, InfSectionName);
2837 if (!InfSectionName)
2843 if (!InfSectionNameW)
2847 DeviceInterfaceData,
Reserved, samDesired, InfHandle,
2864 HKEY hKey, hDevKey, hRefKey, hDevParamKey;
2868 WCHAR bracedGuidString[39];
2873 samDesired, InfHandle, InfSectionName);
2881 if (!DeviceInterfaceData ||
2888 if (InfHandle && !InfSectionName)
2988 if (InfHandle && InfSectionName)
2999 set->SelectedDevice->InstallParams.InstallMsgHandler,
3000 set->SelectedDevice->InstallParams.InstallMsgHandlerContext,
3011 return hDevParamKey;
3033 if (!DeviceInterfaceData ||
3094 if (!DeviceInterfaceData ||
3111 InterfaceListEntry = InterfaceListEntry->Flink;
3114 if (MemberIndex-- == 0)
3125 InterfaceListEntry = InterfaceListEntry->Flink;
3134 while (ItemList != &
set->ListHead && !found)
3145 InterfaceListEntry = InterfaceListEntry->
Flink;
3148 if (MemberIndex-- == 0)
3159 InterfaceListEntry = InterfaceListEntry->
Flink;
3161 ItemList = ItemList->
Flink;
3210 DWORD DeviceInterfaceDetailDataSize,
3220 DeviceInterfaceData, DeviceInterfaceDetailData,
3229 if (!DeviceInterfaceData ||
3242 if((DeviceInterfaceDetailDataSize != 0) &&
3249 if (!DeviceInterfaceDetailData && DeviceInterfaceDetailDataSize)
3256 if (DeviceInterfaceDetailData !=
NULL)
3261 if (!DeviceInterfaceDetailDataW)
3267 if (!DeviceInterfaceDetailData || (DeviceInterfaceDetailData && DeviceInterfaceDetailDataW))
3271 DeviceInterfaceData,
3272 DeviceInterfaceDetailDataW,
3280 if (
ret && DeviceInterfaceDetailData && DeviceInterfaceDetailDataSize >= bytesNeeded)
3292 MyFree(DeviceInterfaceDetailDataW);
3304 DWORD DeviceInterfaceDetailDataSize,
3312 DeviceInterfaceData, DeviceInterfaceDetailData,
3321 if (!DeviceInterfaceData ||
3333 if (!DeviceInterfaceDetailData && DeviceInterfaceDetailDataSize)
3343 if ((DeviceInterfaceDetailData !=
NULL)
3356 if (sizeRequired > DeviceInterfaceDetailDataSize)
3438 BOOL bIsStringProperty;
3440 DWORD RequiredSizeA, RequiredSizeW;
3441 DWORD PropertyBufferSizeW = 0;
3452 if (!PropertyBufferW)
3464 PropertyBufferSizeW,
3471 if (bIsStringProperty)
3472 RequiredSizeA = RequiredSizeW /
sizeof(
WCHAR);
3474 RequiredSizeA = RequiredSizeW;
3713 ERR(
"Property 0x%lx not implemented\n",
Property);
3792 if (InfFileNameW ==
NULL)
3866 ERR(
"RegCreateKeyExW(%s) failed\n",
debugstr_w(FullBuffer));
3870 TRACE(
"The class key %s was successfully created\n",
debugstr_w(FullBuffer));
3872 TRACE(
"The class key %s was successfully opened\n",
debugstr_w(FullBuffer));
3935 if (MachineNameW ==
NULL)
3989 ERR(
"Invalid Flags parameter!\n");
4012 WCHAR bracedGuidString[39];
4134 ItemList =
list->ListHead.Flink;
4135 while (ItemList != &
list->ListHead)
4144 InterfaceListEntry = InterfaceListEntry->
Flink;
4150 if (DeviceInterfaceData)
4153 DeviceInterfaceData->
Flags = deviceInterface->
Flags;
4178 InstancePath[0] = 0;
4179 dwKeyName =
sizeof(InstancePath);
4197 dwKeyName =
sizeof(SymBuffer);
4198 SymBuffer[0] =
L'\0';
4217 if (deviceInterface)
4230 if (DeviceInterfaceData)
4233 DeviceInterfaceData->
Flags = deviceInterface->
Flags;
4277 if (DevicePathW ==
NULL)
4281 DevicePathW, OpenFlags, DeviceInterfaceData);
4335#define CLASS_COINSTALLER 0x1
4336#define DEVICE_COINSTALLER 0x2
4337#define CLASS_INSTALLER 0x4
4338 UCHAR CanHandle = 0;
4341 switch (InstallFunction)
4420 ERR(
"Install function %u not supported\n", InstallFunction);
4453 if (KeyBuffer !=
NULL)
4490 WCHAR szGuidString[40];
4497 if (KeyBuffer !=
NULL)
4534 if (KeyBuffer !=
NULL)
4614 while (
ListEntry != &ClassCoInstallersListHead)
4630 while (
ListEntry != &DeviceCoInstallersListHead)
4691 &deviceInstallParamsW,
4791 DWORD SupportedFlags =
4806 DWORD SupportedFlagsEx =
4812 DI_FLAGSEX_INSTALLEDDRIVER;
4909 ERR(
"DrivePath is NULL\n");
4968 ret = hHWProfileKey;
4971 if (hHWProfilesKey !=
NULL)
4973 if (hHWProfileKey !=
NULL && hHWProfileKey !=
ret)
5047 if (DeviceInstanceIdW ==
NULL)
5053 MyFree(DeviceInstanceIdW);
5080 FIXME(
"DIOD_CANCEL_REMOVE flag not implemented\n");
5086 else if (!DeviceInstanceId)
5103 while (ItemList != &
list->ListHead)
5109 ItemList = ItemList->
Flink;
5205 else if (
list->SelectedDevice ==
NULL)
5214 &
list->SelectedDevice->ClassGuid,
5390 switch (PropChange->StateChange)
5396 hRootKey =
set->HKLM;
5447 || PropChange->HwProfile == 0
5466 ERR(
"Unknown StateChange 0x%lx\n", PropChange->StateChange);
5527 DWORD SectionNameLength = 0;
5537 if (SelectedDriver ==
NULL)
5561#if _WIN32_WINNT >= 0x502
5610 *IsOEMLocation =
FALSE;
5631 if (*Windir && Windir[
strlenW(Windir) - 1] !=
'\\')
5638 *IsOEMLocation =
FALSE;
5643 *IsOEMLocation =
TRUE;
5665 DWORD SectionNameLength = 0;
5675 BOOL NeedtoCopyFile;
5708 DWORD ConfigFlags, regType;
5714 (
PBYTE)&ConfigFlags,
5715 sizeof(ConfigFlags),
5727 (
PBYTE)&ConfigFlags,
5728 sizeof(ConfigFlags));
5740 if (SelectedDriver ==
NULL)
5754 pSectionName = &SectionName[
strlenW(SectionName)];
5764 if (!lpFullGuidString)
5769 lpFullGuidString[0] =
'{';
5796 if (!newInfFileDetails)
5812#if _WIN32_WINNT >= 0x502
5831 *pSectionName =
'\0';
5845 TRACE(
"Write information to driver key\n");
5902 RebootRequired =
TRUE;
5923 TRACE(
"Write information to enum key\n");
6021 strcpyW(&DriverKey[1], lpGuidString);
6022 pDeviceInstance = &DriverKey[
strlenW(DriverKey)];
6023 *pDeviceInstance++ =
'}';
6024 *pDeviceInstance++ =
'\\';
6028 while (
Index <= 9999)
6166 else if (dwRegType !=
REG_SZ)
6237 Scope, HwProfile, KeyType, samDesired);
6288 L"Device Parameters",
6300 WARN(
"unknown KeyType %d\n", KeyType);
6391 WARN(
"unknown KeyType %d\n", KeyType);
6460 DWORD ConfigFlags = 0, PropertySize;
6540 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
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
#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[]
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
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 SetupDiGetActualModelsSectionA(_In_ PINFCONTEXT Context, _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo, _Out_writes_opt_(InfSectionWithExtSize) PSTR InfSectionWithExt, _In_ DWORD InfSectionWithExtSize, _Out_opt_ PDWORD RequiredSize, _Reserved_ PVOID Reserved)
ANSI version of SetupDiGetActualModelsSectionW.
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 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)
BOOL WINAPI SetupDiDeleteDeviceInfo(_In_ HDEVINFO DeviceInfoSet, _In_ PSP_DEVINFO_DATA DeviceInfoData)
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)
BOOL WINAPI SetupDiGetActualModelsSectionW(_In_ PINFCONTEXT Context, _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo, _Out_writes_opt_(InfSectionWithExtSize) PWSTR InfSectionWithExt, _In_ DWORD InfSectionWithExtSize, _Out_opt_ PDWORD RequiredSize, _Reserved_ PVOID Reserved)
Returns the appropriate decorated INF Models section for a device.
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
#define EXCEPTION_EXECUTE_HANDLER
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
static const LARGE_INTEGER *static const HANDLE const LARGE_INTEGER *static PSLIST_ENTRY PSLIST_ENTRY last
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
_In_ PIOMMU_DEVICE_PATH DevicePath
#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
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
_In_ PMEMORY_AREA _In_ PVOID _In_ BOOLEAN _Inout_ PMM_REQUIRED_RESOURCES Required
#define _Out_writes_opt_(s)
#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(...)
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)
#define DI_FLAGSEX_CI_FAILED
_In_ DWORD _Out_opt_ PDWORD _In_ DWORD PropertyBufferSize
#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 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
_In_opt_ PSP_DEVINFO_DATA DeviceInfoData
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
#define ERROR_DI_DO_DEFAULT
#define DIOD_CANCEL_REMOVE
#define ERROR_CLASS_MISMATCH
#define DIF_NEWDEVICEWIZARD_PREANALYZE
#define DI_FLAGSEX_DIDINFOLIST
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)
BOOL WINAPI SetupGetStringFieldW(IN PINFCONTEXT Context, IN ULONG FieldIndex, OUT PWSTR ReturnBuffer, IN ULONG ReturnBufferSize, OUT PULONG RequiredSize)
ULONG WINAPI SetupGetFieldCount(IN PINFCONTEXT Context)
_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)
_Reserved_ PVOID Reserved
#define strncmpiW(s1, s2, n)
#define strtoulW(s1, s2, b)
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
#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
_In_ CONST GUID * InterfaceClassGuid