26static const WCHAR DotCoInstallers[] = {
'.',
'C',
'o',
'I',
'n',
's',
't',
'a',
'l',
'l',
'e',
'r',
's',0};
30static const WCHAR INF_MANUFACTURER[] = {
'M',
'a',
'n',
'u',
'f',
'a',
'c',
't',
'u',
'r',
'e',
'r',0};
176 TRACE(
"Adding driver '%s' [%s/%s] (Rank 0x%lx)\n",
202 PreviousEntry = DriverListHead->
Flink;
203 while (PreviousEntry != DriverListHead)
214 PreviousEntry = PreviousEntry->
Flink;
216 if (PreviousEntry == DriverListHead)
276 if (!DriverDescription)
305 MyFree(DriverDescription);
333 guidW,
sizeof(guidW),
368 *pProviderName = ProviderName;
400 pComma =
strchrW(DriverVer,
',');
404 pVersion = pComma + 1;
409 && (DriverVer[2] ==
'-' || DriverVer[2] ==
'/')
410 && (DriverVer[5] ==
'-' || DriverVer[5] ==
'/'))
414 SystemTime.
wMonth = ((DriverVer[0] -
'0') * 10) + DriverVer[1] -
'0';
415 SystemTime.
wDay = ((DriverVer[3] -
'0') * 10) + DriverVer[4] -
'0';
416 SystemTime.
wYear = ((DriverVer[6] -
'0') * 1000) + ((DriverVer[7] -
'0') * 100) + ((DriverVer[8] -
'0') * 10) + DriverVer[9] -
'0';
427 pMinor =
strchrW(pVersion,
'.');
431 pRevision =
strchrW(++pMinor,
'.');
437 pBuild =
strchrW(++pRevision,
'.');
444 Build =
atoiW(pBuild);
446 Major =
atoiW(pVersion);
447 fullVersion.
u.HighPart = Major << 16 |
Minor;
448 fullVersion.
u.LowPart =
Revision << 16 | Build;
458 *pProviderName =
NULL;
514 *pHardwareIDs = HardwareIDs;
515 if (pHardwareIDsRequiredSize)
536 (
PBYTE)CompatibleIDs,
546 CompatibleIDs =
NULL;
553 *pCompatibleIDs = CompatibleIDs;
554 if (pCompatibleIDsRequiredSize)
636 if (!HardwareIDs && !CompatibleIDs)
656 len =
sizeof(InfFileName) /
sizeof(InfFileName[0]);
660 if (*InfFileName && InfFileName[
strlenW(InfFileName) - 1] !=
'\\')
675 &InfFileName[
strlenW(InfFileName)],
714 L"DriverDescription",
779 if (!FullInfFileName)
781 pFullFilename = &FullInfFileName[0];
791 if (!FullInfFileName)
796 if (*FullInfFileName && FullInfFileName[
strlenW(FullInfFileName) - 1] !=
'\\')
798 pFullFilename = &FullInfFileName[
strlenW(FullInfFileName)];
808 if (!FullInfFileName)
813 if (*FullInfFileName && FullInfFileName[
strlenW(FullInfFileName) - 1] !=
'\\')
816 pFullFilename = &FullInfFileName[
strlenW(FullInfFileName)];
821 INFCONTEXT ContextManufacturer, ContextDevice;
828 if (!currentInfFileDetails)
832 currentInfFileDetails->
hInf,
839 currentInfFileDetails =
NULL;
858 FIXME(
"ExcludeFromSelect list ignored\n");
865 &ContextManufacturer,
873 if (!ManufacturerName)
879 &ContextManufacturer,
886 &ContextManufacturer,
898 TRACE(
"Enumerating devices in manufacturer %s\n",
debugstr_w(ManufacturerSection));
912 currentInfFileDetails,
917 DriverDate, DriverVersion,
930 BOOL DriverAlreadyAdded;
932 for (
i = 2;
i <= FieldCount;
i++)
959 DriverAlreadyAdded =
FALSE;
962 for (DriverRank = 0, currentId = (
LPCWSTR)HardwareIDs; !DriverAlreadyAdded && *currentId; currentId +=
strlenW(currentId) + 1, DriverRank++)
964 if (
strcmpiW(DeviceId, currentId) == 0)
971 currentInfFileDetails,
976 DriverDate, DriverVersion,
977 DriverRank + (
i == 2 ? 0 : 0x1000 +
i - 3));
978 DriverAlreadyAdded =
TRUE;
984 for (DriverRank = 0, currentId = (
LPCWSTR)CompatibleIDs; !DriverAlreadyAdded && *currentId; currentId +=
strlenW(currentId) + 1, DriverRank++)
986 if (
strcmpiW(DeviceId, currentId) == 0)
993 currentInfFileDetails,
998 DriverDate, DriverVersion,
999 DriverRank + (
i == 2 ? 0x2000 : 0x3000 +
i - 3));
1000 DriverAlreadyAdded =
TRUE;
1011 ManufacturerName =
NULL;
1019 ProviderName = ExcludeFromSelect =
NULL;
1022 currentInfFileDetails =
NULL;
1050 if (currentInfFileDetails)
1106 InstallParams.
FlagsEx &= ~DI_FLAGSEX_DIDINFOLIST;
1158 if (DriverInfoData ==
NULL)
1171 DriverInfoData->DriverType = driverInfoData2W.
DriverType;
1172 DriverInfoData->Reserved = driverInfoData2W.
Reserved;
1176 DriverInfoData->Description[0] =
'\0';
1182 DriverInfoData->MfgName[0] =
'\0';
1188 DriverInfoData->ProviderName[0] =
'\0';
1194 DriverInfoData->DriverDate = driverInfoData2W.
DriverDate;
1195 DriverInfoData->DriverVersion = driverInfoData2W.
DriverVersion;
1250 while (ItemList !=
ListHead && MemberIndex-- > 0)
1251 ItemList = ItemList->
Flink;
1259 &DriverInfoData->DriverType,
1282 if (DriverInfoData ==
NULL)
1297 DriverInfoData->DriverType = driverInfoData2W.
DriverType;
1298 DriverInfoData->Reserved = driverInfoData2W.
Reserved;
1302 DriverInfoData->Description[0] =
'\0';
1308 DriverInfoData->MfgName[0] =
'\0';
1314 DriverInfoData->ProviderName[0] =
'\0';
1320 DriverInfoData->DriverDate = driverInfoData2W.
DriverDate;
1321 DriverInfoData->DriverVersion = driverInfoData2W.
DriverVersion;
1366 &DriverInfoData->DriverType,
1391 if (DriverInfoData !=
NULL)
1401 DriverInfoDataW.
Reserved = DriverInfoData->Reserved;
1405 DriverInfoDataW.
DriverType = DriverInfoData->DriverType;
1410 DriverInfoData->Description,
1416 DriverInfoData->ProviderName,
1432 if (
ret && pDriverInfoDataW !=
NULL)
1434 DriverInfoData->Reserved = DriverInfoDataW.
Reserved;
1479 if (!DriverInfoData)
1481 *pDriverInfo =
NULL;
1487 ItemList = ListHead->
Flink;
1488 while (ItemList != ListHead)
1490 if (DriverInfoData->Reserved != 0)
1492 if (DriverInfoData->Reserved == (
ULONG_PTR)ItemList)
1506 ItemList = ItemList->
Flink;
1508 if (ItemList == ListHead)
1513 DriverInfoData->Reserved = (
ULONG_PTR)ItemList;
1515 TRACE(
"Choosing driver whose rank is 0x%lx\n",
1516 (*pDriverInfo)->Params.Rank);
1536 IN DWORD DriverInfoDetailDataSize,
1542 DWORD HardwareIDLen = 0;
1546 if (DriverInfoData ==
NULL ||
1547 (DriverInfoDetailData ==
NULL && DriverInfoDetailDataSize != 0) ||
1548 (DriverInfoDetailData !=
NULL &&
1570 DriverInfoDataW.
DriverType = DriverInfoData->DriverType;
1571 DriverInfoDataW.
Reserved = DriverInfoData->Reserved;
1576 DriverInfoData->Description,
1582 DriverInfoData->MfgName,
1588 DriverInfoData->ProviderName,
1599 if (DriverInfoDetailData !=
NULL)
1604 (HardwareIDLen *
sizeof(
WCHAR));
1607 if (DriverInfoDetailDataW ==
NULL)
1623 DriverInfoDetailDataW,
1629 if (DriverInfoDetailDataW !=
NULL)
1633 DriverInfoDetailData->InfDate = DriverInfoDetailDataW->
InfDate;
1634 DriverInfoDetailData->Reserved = DriverInfoDetailDataW->
Reserved;
1639 DriverInfoDetailData->SectionName,
1647 DriverInfoDetailData->InfFileName,
1655 DriverInfoDetailData->DrvDescription,
1663 DriverInfoDetailData->HardwareID,
1669 DWORD hwidlen = HardwareIDLen;
1670 CHAR *
s = DriverInfoDetailData->HardwareID;
1695 DriverInfoDetailData->CompatIDsOffset =
lstrlenA(DriverInfoDetailData->HardwareID) + 1;
1696 DriverInfoDetailData->CompatIDsLength = (
DWORD)(
s - DriverInfoDetailData->HardwareID) -
1697 DriverInfoDetailData->CompatIDsOffset + 1;
1701 DriverInfoDetailData->CompatIDsOffset = 0;
1702 DriverInfoDetailData->CompatIDsLength = 0;
1720 if (DriverInfoDetailDataW !=
NULL)
1722 MyFree(DriverInfoDetailDataW);
1737 IN DWORD DriverInfoDetailDataSize,
1743 DriverInfoData, DriverInfoDetailData,
1754 else if (!DriverInfoData)
1756 else if (!DriverInfoDetailData && DriverInfoDetailDataSize != 0)
1762 else if (DriverInfoData->Reserved == 0)
1771 ULONG HardwareIDsSize, CompatibleIDsSize;
1781 &HardwareIDs, &HardwareIDsSize,
1782 &CompatibleIDs, &CompatibleIDsSize);
1787 + HardwareIDsSize + CompatibleIDsSize;
1791 if (!DriverInfoDetailData)
1798 DriverInfoDetailData,
1801 DriverInfoDetailData->CompatIDsOffset = 0;
1802 DriverInfoDetailData->CompatIDsLength = 0;
1805 pBuffer = DriverInfoDetailData->HardwareID;
1814 sizeLeft -=
size + 1;
1815 DriverInfoDetailData->CompatIDsOffset +=
size + 1;
1821 DriverInfoDetailData->CompatIDsOffset++;
1831 sizeLeft -=
size + 1;
1832 DriverInfoDetailData->CompatIDsLength +=
size + 1;
1838 DriverInfoDetailData->CompatIDsLength++;
1841 if (sizeNeeded > DriverInfoDetailDataSize)
1869 if (!
DeviceInfoSet || !DriverInfoData || !DriverInstallParams)
1895 DriverInstallParams,
1897 DriverInstallParams->
cbSize);
1972 DWORD SectionNameLength = 0;
1973 PVOID InstallMsgHandler;
1974 PVOID InstallMsgHandlerContext;
1983 if (!SelectedDriver)
2007 InstallMsgHandlerContext =
Context;
2012 InstallMsgHandler, InstallMsgHandlerContext,
2022 InstallMsgHandler, InstallMsgHandlerContext,
#define InterlockedIncrement
#define InterlockedDecrement
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
#define ERROR_NOT_ENOUGH_MEMORY
#define ERROR_INSUFFICIENT_BUFFER
#define MAX_GUID_STRING_LEN
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
#define ERROR_INVALID_PARAMETER
#define INVALID_HANDLE_VALUE
#define ERROR_NO_MORE_ITEMS
#define HeapFree(x, y, z)
#define ERROR_INVALID_HANDLE
#define WideCharToMultiByte
#define MultiByteToWideChar
static void cleanup(void)
BOOL WINAPI GetFileTime(IN HANDLE hFile, OUT LPFILETIME lpCreationTime OPTIONAL, OUT LPFILETIME lpLastAccessTime OPTIONAL, OUT LPFILETIME lpLastWriteTime OPTIONAL)
UINT WINAPI GetSystemWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
BOOL WINAPI SetupDiSetDeviceInstallParamsW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN PSP_DEVINSTALL_PARAMS_W DeviceInstallParams)
BOOL WINAPI SetupDiGetDeviceInstallParamsW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, OUT PSP_DEVINSTALL_PARAMS_W DeviceInstallParams)
BOOL WINAPI SetupDiGetActualSectionToInstallW(HINF InfHandle, PCWSTR InfSectionName, PWSTR InfSectionWithExt, DWORD InfSectionWithExtSize, PDWORD RequiredSize, PWSTR *Extension)
BOOL WINAPI SetupDiGetDeviceRegistryPropertyW(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Property, PDWORD PropertyRegDataType, PBYTE PropertyBuffer, DWORD PropertyBufferSize, PDWORD RequiredSize)
HKEY SETUPDI_OpenDrvKey(HKEY RootKey, struct DeviceInfo *devInfo, REGSAM samDesired)
static const WCHAR INF_DRIVER_VER[]
BOOL WINAPI SetupDiSetSelectedDriverA(IN HDEVINFO DeviceInfoSet, IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN OUT PSP_DRVINFO_DATA_A DriverInfoData OPTIONAL)
static const WCHAR ClassGUID[]
BOOL WINAPI SetupDiGetSelectedDriverW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, OUT PSP_DRVINFO_DATA_W DriverInfoData)
static const WCHAR INF_PROVIDER[]
BOOL WINAPI SetupDiGetDriverInstallParamsW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN PSP_DRVINFO_DATA_W DriverInfoData, OUT PSP_DRVINSTALL_PARAMS DriverInstallParams)
BOOL WINAPI SetupDiEnumDriverInfoA(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN DWORD DriverType, IN DWORD MemberIndex, OUT PSP_DRVINFO_DATA_A DriverInfoData)
static BOOL AddKnownDriverToList(IN PLIST_ENTRY DriverListHead, IN DWORD DriverType, IN LPGUID ClassGuid, IN struct InfFileDetails *InfFileDetails, IN LPCWSTR InfFile, IN LPCWSTR SectionName, IN LPCWSTR DriverDescription, IN LPCWSTR ProviderName, IN LPCWSTR ManufacturerName, IN LPCWSTR MatchingId, IN FILETIME DriverDate, IN DWORDLONG DriverVersion, IN DWORD Rank)
static const WCHAR INF_MANUFACTURER[]
BOOL WINAPI SetupDiInstallDriverFiles(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData)
static const WCHAR BackSlash[]
struct InfFileDetails * CreateInfFileDetails(IN LPCWSTR FullInfFileName)
BOOL DestroyDriverInfoElement(struct DriverInfoElement *driverInfo)
BOOL WINAPI SetupDiSetSelectedDriverW(IN HDEVINFO DeviceInfoSet, IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN OUT PSP_DRVINFO_DATA_W DriverInfoData OPTIONAL)
static BOOL GetHardwareAndCompatibleIDsLists(IN HDEVINFO DeviceInfoSet, IN OUT PSP_DEVINFO_DATA DeviceInfoData, OUT LPWSTR *pHardwareIDs OPTIONAL, OUT LPDWORD pHardwareIDsRequiredSize OPTIONAL, OUT LPWSTR *pCompatibleIDs OPTIONAL, OUT LPDWORD pCompatibleIDsRequiredSize OPTIONAL)
static VOID ReferenceInfFile(struct InfFileDetails *infFile)
BOOL WINAPI SetupDiBuildDriverInfoList(IN HDEVINFO DeviceInfoSet, IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN DWORD DriverType)
BOOL WINAPI SetupDiGetDriverInfoDetailW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN PSP_DRVINFO_DATA_W DriverInfoData, IN OUT PSP_DRVINFO_DETAIL_DATA_W DriverInfoDetailData OPTIONAL, IN DWORD DriverInfoDetailDataSize, OUT PDWORD RequiredSize OPTIONAL)
BOOL WINAPI SetupDiGetSelectedDriverA(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, OUT PSP_DRVINFO_DATA_A DriverInfoData)
static BOOL AddDriverToList(IN PLIST_ENTRY DriverListHead, IN DWORD DriverType, IN LPGUID ClassGuid, IN INFCONTEXT ContextDevice, IN struct InfFileDetails *InfFileDetails, IN LPCWSTR InfFile, IN LPCWSTR ProviderName, IN LPCWSTR ManufacturerName, IN LPCWSTR MatchingId, IN FILETIME DriverDate, IN DWORDLONG DriverVersion, IN DWORD Rank)
BOOL WINAPI SetupDiGetDriverInfoDetailA(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN PSP_DRVINFO_DATA_A DriverInfoData, IN OUT PSP_DRVINFO_DETAIL_DATA_A DriverInfoDetailData OPTIONAL, IN DWORD DriverInfoDetailDataSize, OUT PDWORD RequiredSize OPTIONAL)
BOOL WINAPI SetupDiEnumDriverInfoW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN DWORD DriverType, IN DWORD MemberIndex, OUT PSP_DRVINFO_DATA_W DriverInfoData)
static const WCHAR InfDirectory[]
BOOL WINAPI SetupDiSelectBestCompatDrv(IN HDEVINFO DeviceInfoSet, IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL)
BOOL WINAPI SetupDiDestroyDriverInfoList(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN DWORD DriverType)
static BOOL GetVersionInformationFromInfFile(IN HINF hInf, OUT LPGUID ClassGuid, OUT LPWSTR *pProviderName, OUT FILETIME *DriverDate, OUT DWORDLONG *DriverVersion)
VOID DereferenceInfFile(struct InfFileDetails *infFile)
static const WCHAR DotCoInstallers[]
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)
LPVOID WINAPI MyMalloc(DWORD dwSize)
VOID WINAPI MyFree(LPVOID lpMem)
HINF WINAPI SetupOpenInfFileW(PCWSTR name, PCWSTR class, DWORD style, UINT *error)
BOOL WINAPI SetupGetInfFileListW(IN PCWSTR DirectoryPath OPTIONAL, IN DWORD InfStyle, IN OUT PWSTR ReturnBuffer OPTIONAL, IN DWORD ReturnBufferSize OPTIONAL, 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)
static const WCHAR Cleanup[]
#define InsertTailList(ListHead, Entry)
#define InsertHeadList(ListHead, Entry)
#define IsListEmpty(ListHead)
#define RemoveHeadList(ListHead)
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
unsigned long long DWORDLONG
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
int WINAPI lstrlenA(LPCSTR lpString)
#define memcpy(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
#define IsEqualIID(riid1, riid2)
static unsigned __int64 next
static const WCHAR HKLM[]
#define REGSTR_VAL_INFPATH
#define REGSTR_VAL_INFSECTION
RPC_STATUS WINAPI UuidFromStringW(RPC_WSTR s, UUID *uuid)
struct _SP_DRVINFO_DATA_V1_W SP_DRVINFO_DATA_V1_W
#define SPDIT_CLASSDRIVER
#define SPDRP_COMPATIBLEIDS
#define DI_FLAGSEX_DIDCOMPATINFO
struct _SP_DRVINFO_DETAIL_DATA_W SP_DRVINFO_DETAIL_DATA_W
#define ERROR_NO_DRIVER_SELECTED
SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_W
struct _SP_DEVINSTALL_PARAMS_W SP_DEVINSTALL_PARAMS_W
_In_opt_ PSP_DEVINFO_DATA DeviceInfoData
struct _SP_DRVINSTALL_PARAMS SP_DRVINSTALL_PARAMS
struct _SP_DRVINFO_DATA_V2_A * PSP_DRVINFO_DATA_V2_A
#define DI_FLAGSEX_DIDINFOLIST
SP_DRVINFO_DATA_V2_W * PSP_DRVINFO_DATA_W
struct _SP_DRVINFO_DETAIL_DATA_A SP_DRVINFO_DETAIL_DATA_A
#define DI_FLAGSEX_ALLOWEXCLUDEDDRVS
struct _SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_V2_W
#define DICD_INHERIT_CLASSDRVS
#define SPDIT_COMPATDRIVER
#define SETUP_DEVICE_INFO_SET_MAGIC
PULONG MinorVersion OPTIONAL
SP_DEVINSTALL_PARAMS_W InstallParams
SP_DEVINSTALL_PARAMS_W InstallParams
LIST_ENTRY DriverListHead
struct InfFileDetails * InfFileDetails
SP_DRVINFO_DETAIL_DATA_W Details
SP_DRVINFO_DATA_V2_W Info
ULARGE_INTEGER DriverDate
SP_DRVINSTALL_PARAMS Params
WCHAR szData[ANYSIZE_ARRAY]
struct _LIST_ENTRY * Blink
struct _LIST_ENTRY * Flink
ULONG_PTR ClassInstallReserved
ULONG_PTR ClassInstallReserved
PVOID InstallMsgHandlerContext
PSP_FILE_CALLBACK_W InstallMsgHandler
WCHAR DriverPath[MAX_PATH]
WCHAR ProviderName[LINE_LEN]
WCHAR Description[LINE_LEN]
WCHAR ProviderName[LINE_LEN]
WCHAR Description[LINE_LEN]
WCHAR DrvDescription[LINE_LEN]
WCHAR HardwareID[ANYSIZE_ARRAY]
WCHAR SectionName[LINE_LEN]
WCHAR InfFileName[MAX_PATH]
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define CONTAINING_RECORD(address, type, field)
struct _LARGE_INTEGER::@2464 u
BOOL WINAPI SetupGetStringFieldW(IN PINFCONTEXT Context, IN ULONG FieldIndex, OUT PWSTR ReturnBuffer, IN ULONG ReturnBufferSize, OUT PULONG RequiredSize)
BOOL WINAPI SetupFindFirstLineW(IN HINF InfHandle, IN PCWSTR Section, IN PCWSTR Key, IN OUT PINFCONTEXT Context)
ULONG WINAPI SetupGetFieldCount(IN PINFCONTEXT Context)
BOOL WINAPI SetupFindNextLine(IN PINFCONTEXT ContextIn, OUT PINFCONTEXT ContextOut)
VOID WINAPI SetupCloseInfFile(IN HINF InfHandle)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ ULONG _Out_ PVOID _Out_ PULONG RequiredSize
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE _In_ USHORT _In_ USHORT Version
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING HardwareID
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING DeviceID
DWORD WINAPI GetLastError(void)
#define ERROR_INVALID_USER_BUFFER
#define ERROR_GEN_FAILURE
#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