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)
568#if _WIN32_WINNT < 0x0600
574#define RRF_RT_REG_NONE (1 << 0)
575#define RRF_RT_REG_SZ (1 << 1)
576#define RRF_RT_REG_EXPAND_SZ (1 << 2)
577#define RRF_RT_REG_BINARY (1 << 3)
578#define RRF_RT_REG_DWORD (1 << 4)
579#define RRF_RT_REG_MULTI_SZ (1 << 5)
580#define RRF_RT_REG_QWORD (1 << 6)
581#define RRF_RT_DWORD (RRF_RT_REG_BINARY | RRF_RT_REG_DWORD)
582#define RRF_RT_QWORD (RRF_RT_REG_BINARY | RRF_RT_REG_QWORD)
583#define RRF_NOEXPAND (1 << 28)
584#define RRF_ZEROONFAILURE (1 << 29)
618 if (cbExpect && cbData != cbExpect)
635 TRACE(
"(%p,%s,%s,%ld,%p,%p,%p=%ld)\n",
642 if (pszSubKey && pszSubKey[0])
668 &dwType, pvBuf, &cbData);
699 if (pszSubKey && pszSubKey[0])
707 if (pdwType) *pdwType = dwType;
782 if (!HardwareIDs && !CompatibleIDs)
802 len =
sizeof(InfFileName) /
sizeof(InfFileName[0]);
806 if (*InfFileName && InfFileName[
strlenW(InfFileName) - 1] !=
'\\')
821 &InfFileName[
strlenW(InfFileName)],
860 L"DriverDescription",
925 if (!FullInfFileName)
927 pFullFilename = &FullInfFileName[0];
937 if (!FullInfFileName)
942 if (*FullInfFileName && FullInfFileName[
strlenW(FullInfFileName) - 1] !=
'\\')
944 pFullFilename = &FullInfFileName[
strlenW(FullInfFileName)];
954 if (!FullInfFileName)
959 if (*FullInfFileName && FullInfFileName[
strlenW(FullInfFileName) - 1] !=
'\\')
962 pFullFilename = &FullInfFileName[
strlenW(FullInfFileName)];
967 INFCONTEXT ContextManufacturer, ContextDevice;
974 if (!currentInfFileDetails)
978 currentInfFileDetails->
hInf,
985 currentInfFileDetails =
NULL;
1004 FIXME(
"ExcludeFromSelect list ignored\n");
1011 &ContextManufacturer,
1019 if (!ManufacturerName)
1025 &ContextManufacturer,
1032 &ContextManufacturer,
1044 TRACE(
"Enumerating devices in manufacturer %s\n",
debugstr_w(ManufacturerSection));
1058 currentInfFileDetails,
1063 DriverDate, DriverVersion,
1076 BOOL DriverAlreadyAdded;
1078 for (
i = 2;
i <= FieldCount;
i++)
1105 DriverAlreadyAdded =
FALSE;
1108 for (DriverRank = 0, currentId = (
LPCWSTR)HardwareIDs; !DriverAlreadyAdded && *currentId; currentId +=
strlenW(currentId) + 1, DriverRank++)
1110 if (
strcmpiW(DeviceId, currentId) == 0)
1117 currentInfFileDetails,
1122 DriverDate, DriverVersion,
1123 DriverRank + (
i == 2 ? 0 : 0x1000 +
i - 3));
1124 DriverAlreadyAdded =
TRUE;
1130 for (DriverRank = 0, currentId = (
LPCWSTR)CompatibleIDs; !DriverAlreadyAdded && *currentId; currentId +=
strlenW(currentId) + 1, DriverRank++)
1132 if (
strcmpiW(DeviceId, currentId) == 0)
1139 currentInfFileDetails,
1144 DriverDate, DriverVersion,
1145 DriverRank + (
i == 2 ? 0x2000 : 0x3000 +
i - 3));
1146 DriverAlreadyAdded =
TRUE;
1157 ManufacturerName =
NULL;
1165 ProviderName = ExcludeFromSelect =
NULL;
1168 currentInfFileDetails =
NULL;
1196 if (currentInfFileDetails)
1252 InstallParams.
FlagsEx &= ~DI_FLAGSEX_DIDINFOLIST;
1304 if (DriverInfoData ==
NULL)
1317 DriverInfoData->DriverType = driverInfoData2W.
DriverType;
1318 DriverInfoData->Reserved = driverInfoData2W.
Reserved;
1322 DriverInfoData->Description[0] =
'\0';
1328 DriverInfoData->MfgName[0] =
'\0';
1334 DriverInfoData->ProviderName[0] =
'\0';
1340 DriverInfoData->DriverDate = driverInfoData2W.
DriverDate;
1341 DriverInfoData->DriverVersion = driverInfoData2W.
DriverVersion;
1396 while (ItemList !=
ListHead && MemberIndex-- > 0)
1397 ItemList = ItemList->
Flink;
1405 &DriverInfoData->DriverType,
1428 if (DriverInfoData ==
NULL)
1443 DriverInfoData->DriverType = driverInfoData2W.
DriverType;
1444 DriverInfoData->Reserved = driverInfoData2W.
Reserved;
1448 DriverInfoData->Description[0] =
'\0';
1454 DriverInfoData->MfgName[0] =
'\0';
1460 DriverInfoData->ProviderName[0] =
'\0';
1466 DriverInfoData->DriverDate = driverInfoData2W.
DriverDate;
1467 DriverInfoData->DriverVersion = driverInfoData2W.
DriverVersion;
1512 &DriverInfoData->DriverType,
1537 if (DriverInfoData !=
NULL)
1547 DriverInfoDataW.
Reserved = DriverInfoData->Reserved;
1551 DriverInfoDataW.
DriverType = DriverInfoData->DriverType;
1556 DriverInfoData->Description,
1562 DriverInfoData->ProviderName,
1578 if (
ret && pDriverInfoDataW !=
NULL)
1580 DriverInfoData->Reserved = DriverInfoDataW.
Reserved;
1625 if (!DriverInfoData)
1627 *pDriverInfo =
NULL;
1633 ItemList = ListHead->
Flink;
1634 while (ItemList != ListHead)
1636 if (DriverInfoData->Reserved != 0)
1638 if (DriverInfoData->Reserved == (
ULONG_PTR)ItemList)
1652 ItemList = ItemList->
Flink;
1654 if (ItemList == ListHead)
1659 DriverInfoData->Reserved = (
ULONG_PTR)ItemList;
1661 TRACE(
"Choosing driver whose rank is 0x%lx\n",
1662 (*pDriverInfo)->Params.Rank);
1682 IN DWORD DriverInfoDetailDataSize,
1688 DWORD HardwareIDLen = 0;
1692 if (DriverInfoData ==
NULL ||
1693 (DriverInfoDetailData ==
NULL && DriverInfoDetailDataSize != 0) ||
1694 (DriverInfoDetailData !=
NULL &&
1716 DriverInfoDataW.
DriverType = DriverInfoData->DriverType;
1717 DriverInfoDataW.
Reserved = DriverInfoData->Reserved;
1722 DriverInfoData->Description,
1728 DriverInfoData->MfgName,
1734 DriverInfoData->ProviderName,
1745 if (DriverInfoDetailData !=
NULL)
1750 (HardwareIDLen *
sizeof(
WCHAR));
1753 if (DriverInfoDetailDataW ==
NULL)
1769 DriverInfoDetailDataW,
1775 if (DriverInfoDetailDataW !=
NULL)
1779 DriverInfoDetailData->InfDate = DriverInfoDetailDataW->
InfDate;
1780 DriverInfoDetailData->Reserved = DriverInfoDetailDataW->
Reserved;
1785 DriverInfoDetailData->SectionName,
1793 DriverInfoDetailData->InfFileName,
1801 DriverInfoDetailData->DrvDescription,
1809 DriverInfoDetailData->HardwareID,
1815 DWORD hwidlen = HardwareIDLen;
1816 CHAR *
s = DriverInfoDetailData->HardwareID;
1841 DriverInfoDetailData->CompatIDsOffset =
lstrlenA(DriverInfoDetailData->HardwareID) + 1;
1842 DriverInfoDetailData->CompatIDsLength = (
DWORD)(
s - DriverInfoDetailData->HardwareID) -
1843 DriverInfoDetailData->CompatIDsOffset + 1;
1847 DriverInfoDetailData->CompatIDsOffset = 0;
1848 DriverInfoDetailData->CompatIDsLength = 0;
1866 if (DriverInfoDetailDataW !=
NULL)
1868 MyFree(DriverInfoDetailDataW);
1883 IN DWORD DriverInfoDetailDataSize,
1889 DriverInfoData, DriverInfoDetailData,
1900 else if (!DriverInfoData)
1902 else if (!DriverInfoDetailData && DriverInfoDetailDataSize != 0)
1908 else if (DriverInfoData->Reserved == 0)
1917 ULONG HardwareIDsSize, CompatibleIDsSize;
1927 &HardwareIDs, &HardwareIDsSize,
1928 &CompatibleIDs, &CompatibleIDsSize);
1933 + HardwareIDsSize + CompatibleIDsSize;
1937 if (!DriverInfoDetailData)
1944 DriverInfoDetailData,
1947 DriverInfoDetailData->CompatIDsOffset = 0;
1948 DriverInfoDetailData->CompatIDsLength = 0;
1951 pBuffer = DriverInfoDetailData->HardwareID;
1960 sizeLeft -=
size + 1;
1961 DriverInfoDetailData->CompatIDsOffset +=
size + 1;
1967 DriverInfoDetailData->CompatIDsOffset++;
1977 sizeLeft -=
size + 1;
1978 DriverInfoDetailData->CompatIDsLength +=
size + 1;
1984 DriverInfoDetailData->CompatIDsLength++;
1987 if (sizeNeeded > DriverInfoDetailDataSize)
2015 if (!
DeviceInfoSet || !DriverInfoData || !DriverInstallParams)
2041 DriverInstallParams,
2043 DriverInstallParams->
cbSize);
2118 DWORD SectionNameLength = 0;
2119 PVOID InstallMsgHandler;
2120 PVOID InstallMsgHandlerContext;
2129 if (!SelectedDriver)
2153 InstallMsgHandlerContext =
Context;
2158 InstallMsgHandler, InstallMsgHandlerContext,
2168 InstallMsgHandler, InstallMsgHandlerContext,
#define InterlockedIncrement
#define InterlockedDecrement
#define RegCloseKey(hKey)
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
#define ERROR_NOT_ENOUGH_MEMORY
#define ERROR_INSUFFICIENT_BUFFER
#define MAX_GUID_STRING_LEN
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, 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_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)
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
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)
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)
#define RRF_RT_REG_BINARY
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)
#define RRF_ZEROONFAILURE
#define RRF_RT_REG_MULTI_SZ
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)
static LONG WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
static VOID RegpApplyRestrictions(DWORD dwFlags, DWORD dwType, DWORD cbData, PLONG ret)
BOOL WINAPI SetupDiGetSelectedDriverA(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, OUT PSP_DRVINFO_DATA_A DriverInfoData)
#define RRF_RT_REG_EXPAND_SZ
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
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
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)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
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::@2299 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)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
_In_ DWORD _Out_writes_bytes_to_opt_ pcbData void _Inout_ DWORD * pcbData
_In_ ULONG _In_opt_ PVOID pvData
#define ERROR_INVALID_USER_BUFFER
#define ERROR_UNSUPPORTED_TYPE
#define ERROR_GEN_FAILURE
#define ERROR_DATATYPE_MISMATCH
#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