26 static const WCHAR DotCoInstallers[] = {
'.',
'C',
'o',
'I',
'n',
's',
't',
'a',
'l',
'l',
'e',
'r',
's',0};
30 static 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)
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,
SP_DRVINFO_DATA_V2_W * PSP_DRVINFO_DATA_W
#define ERROR_INVALID_PARAMETER
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
#define DICD_INHERIT_CLASSDRVS
BOOL WINAPI SetupFindFirstLineW(IN HINF InfHandle, IN PCWSTR Section, IN PCWSTR Key, IN OUT PINFCONTEXT Context)
BOOL WINAPI SetupDiSelectBestCompatDrv(IN HDEVINFO DeviceInfoSet, IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL)
static BOOL GetVersionInformationFromInfFile(IN HINF hInf, OUT LPGUID ClassGuid, OUT LPWSTR *pProviderName, OUT FILETIME *DriverDate, OUT DWORDLONG *DriverVersion)
static const WCHAR ClassGUID[]
UINT WINAPI GetSystemWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
BOOL WINAPI SetupDiGetActualSectionToInstallW(HINF InfHandle, PCWSTR InfSectionName, PWSTR InfSectionWithExt, DWORD InfSectionWithExtSize, PDWORD RequiredSize, PWSTR *Extension)
SP_DRVINSTALL_PARAMS Params
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
struct _SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_V2_W
#define WideCharToMultiByte
static const WCHAR DotCoInstallers[]
#define ERROR_NO_MORE_ITEMS
BOOL WINAPI SetupDiSetDeviceInstallParamsW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN PSP_DEVINSTALL_PARAMS_W DeviceInstallParams)
BOOL WINAPI SetupDiEnumDriverInfoW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN DWORD DriverType, IN DWORD MemberIndex, OUT PSP_DRVINFO_DATA_W DriverInfoData)
struct _LIST_ENTRY * Blink
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
WINE_UNICODE_INLINE WCHAR * strchrW(const WCHAR *str, WCHAR ch)
#define ERROR_INVALID_HANDLE
#define ERROR_DATATYPE_MISMATCH
BOOL WINAPI SetupDiGetDeviceRegistryPropertyW(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Property, PDWORD PropertyRegDataType, PBYTE PropertyBuffer, DWORD PropertyBufferSize, PDWORD RequiredSize)
#define REGSTR_VAL_INFPATH
BOOL WINAPI SetupDiEnumDriverInfoA(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN DWORD DriverType, IN DWORD MemberIndex, OUT PSP_DRVINFO_DATA_A DriverInfoData)
#define ERROR_NOT_ENOUGH_MEMORY
#define INVALID_HANDLE_VALUE
#define RRF_RT_REG_EXPAND_SZ
DWORD WINAPI GetLastError(VOID)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
static const WCHAR INF_PROVIDER[]
SP_DEVINSTALL_PARAMS_W InstallParams
SP_DEVINSTALL_PARAMS_W InstallParams
#define DI_FLAGSEX_ALLOWEXCLUDEDDRVS
static LONG WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
#define InsertTailList(ListHead, Entry)
HINF WINAPI SetupOpenInfFileW(PCWSTR name, PCWSTR class, DWORD style, UINT *error)
#define RRF_RT_REG_MULTI_SZ
static const WCHAR InfDirectory[]
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
#define SETUP_DEVICE_INFO_SET_MAGIC
VOID WINAPI SetupCloseInfFile(IN HINF InfHandle)
struct InfFileDetails * InfFileDetails
#define ERROR_INVALID_USER_BUFFER
BOOL WINAPI SetupGetInfFileListW(IN PCWSTR DirectoryPath OPTIONAL, IN DWORD InfStyle, IN OUT PWSTR ReturnBuffer OPTIONAL, IN DWORD ReturnBufferSize OPTIONAL, OUT PDWORD RequiredSize OPTIONAL)
PSP_FILE_CALLBACK_W InstallMsgHandler
static const WCHAR BackSlash[]
RPC_STATUS WINAPI UuidFromStringW(RPC_WSTR s, UUID *uuid)
static VOID RegpApplyRestrictions(DWORD dwFlags, DWORD dwType, DWORD cbData, PLONG ret)
SP_DRVINFO_DATA_V2_W Info
BOOL WINAPI SetupDiGetDeviceInstallParamsW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, OUT PSP_DEVINSTALL_PARAMS_W DeviceInstallParams)
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)
struct _SP_DRVINFO_DATA_V2_A * PSP_DRVINFO_DATA_V2_A
ULONG_PTR ClassInstallReserved
_In_ ULONG _In_opt_ PVOID pvData
PVOID InstallMsgHandlerContext
_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
FORCEINLINE PLIST_ENTRY RemoveHeadList(_Inout_ PLIST_ENTRY ListHead)
WCHAR Description[LINE_LEN]
#define SPDIT_COMPATDRIVER
#define ERROR_UNSUPPORTED_TYPE
#define ERROR_FILE_NOT_FOUND
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
static const WCHAR HKLM[]
struct _LIST_ENTRY * Flink
ULONG_PTR ClassInstallReserved
BOOL WINAPI SetupDiGetSelectedDriverA(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, OUT PSP_DRVINFO_DATA_A DriverInfoData)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
struct _SP_DRVINFO_DATA_V1_W SP_DRVINFO_DATA_V1_W
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
BOOL DestroyDriverInfoElement(struct DriverInfoElement *driverInfo)
#define RRF_ZEROONFAILURE
#define MAX_GUID_STRING_LEN
WCHAR HardwareID[ANYSIZE_ARRAY]
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)
_In_opt_ PSP_DEVINFO_DATA DeviceInfoData
static VOID ReferenceInfFile(struct InfFileDetails *infFile)
IN PVOID IN PVOID IN USHORT Version
static const WCHAR INF_MANUFACTURER[]
#define ERROR_NO_DRIVER_SELECTED
struct _LARGE_INTEGER::@2249 u
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)
WCHAR ProviderName[LINE_LEN]
ULONG WINAPI SetupGetFieldCount(IN PINFCONTEXT Context)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
WCHAR DriverPath[MAX_PATH]
#define InterlockedDecrement
LIST_ENTRY DriverListHead
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_W
UINT WINAPI SetupDefaultQueueCallbackW(PVOID context, UINT notification, UINT_PTR param1, UINT_PTR param2)
#define memcpy(s1, s2, n)
void WINAPI SetupTermDefaultQueueCallback(PVOID context)
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING DeviceID
HKEY SETUPDI_OpenDrvKey(HKEY RootKey, struct DeviceInfo *devInfo, REGSAM samDesired)
static const WCHAR Cleanup[]
BOOL WINAPI SetupDiSetSelectedDriverW(IN HDEVINFO DeviceInfoSet, IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN OUT PSP_DRVINFO_DATA_W DriverInfoData OPTIONAL)
#define DI_FLAGSEX_DIDINFOLIST
struct _SP_DRVINFO_DETAIL_DATA_A SP_DRVINFO_DETAIL_DATA_A
ULARGE_INTEGER DriverDate
WINE_UNICODE_INLINE WCHAR * strrchrW(const WCHAR *str, WCHAR ch)
BOOL WINAPI SetupDiDestroyDriverInfoList(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN DWORD DriverType)
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
BOOL WINAPI SetupDiGetSelectedDriverW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, OUT PSP_DRVINFO_DATA_W DriverInfoData)
#define SPDRP_COMPATIBLEIDS
static unsigned __int64 next
int WINAPI lstrlenA(LPCSTR lpString)
#define InterlockedIncrement
#define REGSTR_VAL_INFSECTION
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 DI_FLAGSEX_DIDCOMPATINFO
PVOID WINAPI SetupInitDefaultQueueCallback(HWND owner)
BOOL WINAPI SetupDiSetSelectedDriverA(IN HDEVINFO DeviceInfoSet, IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN OUT PSP_DRVINFO_DATA_A DriverInfoData OPTIONAL)
WINE_UNICODE_INLINE WCHAR * strcatW(WCHAR *dst, const WCHAR *src)
#define FIELD_OFFSET(t, f)
WCHAR ProviderName[LINE_LEN]
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)
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
BOOL WINAPI SetupFindNextLine(IN PINFCONTEXT ContextIn, OUT PINFCONTEXT ContextOut)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
WCHAR SectionName[LINE_LEN]
struct _SP_DRVINFO_DETAIL_DATA_W SP_DRVINFO_DETAIL_DATA_W
static const WCHAR INF_DRIVER_VER[]
#define MultiByteToWideChar
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING HardwareID
struct _SP_DEVINSTALL_PARAMS_W SP_DEVINSTALL_PARAMS_W
unsigned long long DWORDLONG
struct tagContext Context
WINE_UNICODE_INLINE int strcmpW(const WCHAR *str1, const WCHAR *str2)
BOOL WINAPI SetupDiBuildDriverInfoList(IN HDEVINFO DeviceInfoSet, IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN DWORD DriverType)
SP_DRVINFO_DETAIL_DATA_W Details
VOID DereferenceInfFile(struct InfFileDetails *infFile)
#define SPDIT_CLASSDRIVER
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
struct InfFileDetails * CreateInfFileDetails(IN LPCWSTR FullInfFileName)
char * cleanup(char *str)
WCHAR DrvDescription[LINE_LEN]
BOOL WINAPI SetupDiGetDriverInstallParamsW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN PSP_DRVINFO_DATA_W DriverInfoData, OUT PSP_DRVINSTALL_PARAMS DriverInstallParams)
LPVOID WINAPI MyMalloc(DWORD dwSize)
#define RtlCopyMemory(Destination, Source, Length)
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)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ ULONG _Out_ PVOID _Out_ PULONG RequiredSize
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
#define ERROR_GEN_FAILURE
BOOL WINAPI SetupDiInstallDriverFiles(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData)
WCHAR szData[ANYSIZE_ARRAY]
WCHAR Description[LINE_LEN]
VOID WINAPI MyFree(LPVOID lpMem)
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 GetFileTime(IN HANDLE hFile, OUT LPFILETIME lpCreationTime OPTIONAL, OUT LPFILETIME lpLastAccessTime OPTIONAL, OUT LPFILETIME lpLastWriteTime OPTIONAL)
#define HeapFree(x, y, z)
#define RegCloseKey(hKey)
#define IsEqualIID(riid1, riid2)
WCHAR InfFileName[MAX_PATH]
struct _SP_DRVINSTALL_PARAMS SP_DRVINSTALL_PARAMS
WINE_UNICODE_INLINE int atoiW(const WCHAR *str)
_In_ DWORD _Out_writes_bytes_to_opt_ pcbData void _Inout_ DWORD * pcbData
#define HKEY_LOCAL_MACHINE
#define RRF_RT_REG_BINARY
#define ERROR_INSUFFICIENT_BUFFER
BOOL WINAPI SetupGetLineTextW(PINFCONTEXT context, HINF hinf, PCWSTR section_name, PCWSTR key_name, PWSTR buffer, DWORD size, PDWORD required)
PULONG MinorVersion OPTIONAL
BOOL WINAPI SetupGetStringFieldW(IN PINFCONTEXT Context, IN ULONG FieldIndex, OUT PWSTR ReturnBuffer, IN ULONG ReturnBufferSize, OUT PULONG RequiredSize)