53 BOOL FoundHardwareId, FoundAtLeastOneDevice =
FALSE;
58 TRACE(
"UpdateDriverForPlugAndPlayDevicesW(%p %s %s 0x%x %p)\n",
109 TRACE(
"SetupDiGetDeviceRegistryPropertyW() failed with error 0x%x\n",
GetLastError());
126 FoundHardwareId =
FALSE;
127 for (CurrentHardwareId =
Buffer; *CurrentHardwareId !=
UNICODE_NULL; CurrentHardwareId +=
wcslen(CurrentHardwareId) + 1)
129 if (
wcscmp(CurrentHardwareId, HardwareId) == 0)
131 FoundHardwareId =
TRUE;
135 if (!FoundHardwareId)
182 FoundAtLeastOneDevice =
TRUE;
185 if (FoundAtLeastOneDevice)
263 TRACE(
"SetupDiGetDeviceInstallParams() failed with error 0x%x\n",
GetLastError());
285 DevInstData->hDevInfo,
286 &DevInstData->devInfoData,
290 TRACE(
"SetupDiSetDeviceInstallParams() failed with error 0x%x\n",
GetLastError());
295 DevInstData->hDevInfo,
296 &DevInstData->devInfoData,
306 DevInstData->hDevInfo,
307 &DevInstData->devInfoData,
310 &DevInstData->drvInfoData);
358 if (DirPath[
wcslen(DirPath) - 1] !=
'\\')
361 wcscpy(PathWithPattern, DirPath);
376 wcscpy(FullPath, DirPath);
388 if ((
_wcsicmp(pszExtension,
L".inf") == 0) && (
wcscmp(LastDirPath, DirPath) != 0))
390 wcscpy(LastDirPath, DirPath);
428 if (DevInstData->CustomSearchPath)
457 IN BOOL IncludeRemovableDevices,
458 IN BOOL IncludeCustomPath,
465 DWORD CustomTextLength = 0;
470 if (IncludeRemovableDevices)
485 if (IncludeCustomPath)
499 TRACE(
"HeapAlloc() failed\n");
505 if (IncludeRemovableDevices)
519 if (IncludeCustomPath)
534 TRACE(
"Installing driver %s: %s\n",
536 debugstr_w(DevInstData->drvInfoData.Description));
540 DevInstData->hDevInfo,
541 &DevInstData->devInfoData);
544 TRACE(
"SetupDiCallClassInstaller(DIF_SELECTBESTCOMPATDRV) failed with error 0x%x\n",
GetLastError());
550 DevInstData->hDevInfo,
551 &DevInstData->devInfoData);
554 TRACE(
"SetupDiCallClassInstaller(DIF_ALLOW_INSTALL) failed with error 0x%x\n",
GetLastError());
560 DevInstData->hDevInfo,
561 &DevInstData->devInfoData);
564 TRACE(
"SetupDiCallClassInstaller(DIF_NEWDEVICEWIZARD_PREANALYZE) failed with error 0x%x\n",
GetLastError());
570 DevInstData->hDevInfo,
571 &DevInstData->devInfoData);
574 TRACE(
"SetupDiCallClassInstaller(DIF_NEWDEVICEWIZARD_POSTANALYZE) failed with error 0x%x\n",
GetLastError());
580 DevInstData->hDevInfo,
581 &DevInstData->devInfoData);
584 TRACE(
"SetupDiCallClassInstaller(DIF_INSTALLDEVICEFILES) failed with error 0x%x\n",
GetLastError());
590 DevInstData->hDevInfo,
591 &DevInstData->devInfoData);
594 TRACE(
"SetupDiCallClassInstaller(DIF_REGISTER_COINSTALLERS) failed with error 0x%x\n",
GetLastError());
600 DevInstData->hDevInfo,
601 &DevInstData->devInfoData);
604 TRACE(
"SetupDiCallClassInstaller(DIF_INSTALLINTERFACES) failed with error 0x%x\n",
GetLastError());
610 DevInstData->hDevInfo,
611 &DevInstData->devInfoData);
614 TRACE(
"SetupDiCallClassInstaller(DIF_INSTALLDEVICE) failed with error 0x%x\n",
GetLastError());
620 DevInstData->hDevInfo,
621 &DevInstData->devInfoData);
624 TRACE(
"SetupDiCallClassInstaller(DIF_NEWDEVICEWIZARD_FINISHINSTALL) failed with error 0x%x\n",
GetLastError());
630 DevInstData->hDevInfo,
631 &DevInstData->devInfoData);
634 TRACE(
"SetupDiCallClassInstaller(DIF_DESTROYPRIVATEDATA) failed with error 0x%x\n",
GetLastError());
667 TRACE(
"HeapAlloc() failed\n");
680 TRACE(
"SetupDiCreateDeviceInfoListExW() failed with error 0x%x\n",
GetLastError());
693 TRACE(
"SetupDiOpenDeviceInfoW() failed with error 0x%x (InstanceId %s)\n",
713 TRACE(
"HeapAlloc() failed\n");
729 TRACE(
"SetupDiGetDeviceRegistryProperty() failed with error 0x%x (InstanceId %s)\n",
739 (
BYTE *)&config_flags,
740 sizeof(config_flags),
746 TRACE(
"Device is disabled\n");
764 TRACE(
"InstallCurrentDriver() returned %d\n", retval);
777 TRACE(
"Displaying 'Reboot' wizard page\n");
787 TRACE(
"No wizard\n");
792 TRACE(
"Need to show install wizard\n");
801 TRACE(
"SetupDiDestroyDriverInfoList() failed with error 0x%lx\n",
GetLastError());
806 TRACE(
"SetupDiDestroyDeviceInfoList() failed with error 0x%lx\n",
GetLastError());
829 TRACE(
"InstllDevInstEx(%p, %s, %d, %p, %lx)\n",
835 TRACE(
"HeapAlloc() failed\n");
843 DevInstData->
bUpdate = bUpdate;
849 TRACE(
"SetupDiCreateDeviceInfoListExW() failed with error 0x%x\n",
GetLastError());
862 TRACE(
"SetupDiOpenDeviceInfoW() failed with error 0x%x (InstanceId %s)\n",
882 TRACE(
"HeapAlloc() failed\n");
899 TRACE(
"SetupDiGetDeviceRegistryProperty() failed with error 0x%x (InstanceId %s)\n",
905 TRACE(
"Need to show install wizard\n");
914 TRACE(
"SetupDiDestroyDriverInfoList() failed with error 0x%lx\n",
GetLastError());
919 TRACE(
"SetupDiDestroyDeviceInfoList() failed with error 0x%lx\n",
GetLastError());
1021 TRACE(
"CreateEventW('%ls') failed with error %lu\n", InstallEventName,
GetLastError());
1032 if(InstallEventName)
static BOOL SearchDriverRecursive(IN PDEVINSTDATA DevInstData, IN LPCWSTR Path)
BOOL WINAPI SetupDiEnumDeviceInfo(HDEVINFO devinfo, DWORD index, PSP_DEVINFO_DATA info)
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
BOOL WINAPI ClientSideInstallW(IN HWND hWndOwner, IN HINSTANCE hInstance, IN LPWSTR lpNamedPipeName, IN INT Show)
SP_DEVINFO_DATA devInfoData
#define SW_SHOWNOACTIVATE
#define ERROR_PRIVILEGE_NOT_HELD
#define ERROR_NO_MORE_ITEMS
BOOL WINAPI SetupDiSetDeviceInstallParamsW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN PSP_DEVINSTALL_PARAMS_W DeviceInstallParams)
IN BOOLEAN OUT PSTR Buffer
HDEVINFO WINAPI SetupDiGetClassDevsW(CONST GUID *class, LPCWSTR enumstr, HWND parent, DWORD flags)
BOOL WINAPI SetupDiEnumDriverInfoW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN DWORD DriverType, IN DWORD MemberIndex, OUT PSP_DRVINFO_DATA_W DriverInfoData)
#define INSTALLFLAG_FORCE
#define INSTALLFLAG_READONLY
#define SetupDiGetDeviceInstallParams
HDEVINFO WINAPI SetupDiCreateDeviceInfoListExW(const GUID *ClassGuid, HWND hwndParent, PCWSTR MachineName, PVOID Reserved)
BOOL WINAPI DllMain(IN HINSTANCE hInstance, IN DWORD dwReason, IN LPVOID lpReserved)
BOOL WINAPI SetupDiGetDeviceRegistryPropertyW(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Property, PDWORD PropertyRegDataType, PBYTE PropertyBuffer, DWORD PropertyBufferSize, PDWORD RequiredSize)
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
#define ERROR_NOT_ENOUGH_MEMORY
#define INVALID_HANDLE_VALUE
VOID WINAPI ExitProcess(IN UINT uExitCode)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
DWORD WINAPI GetLastError(VOID)
#define SetupDiGetDeviceRegistryProperty
#define DIF_NEWDEVICEWIZARD_PREANALYZE
#define DLL_PROCESS_ATTACH
static BOOL SearchDriver(IN PDEVINSTDATA DevInstData, IN LPCWSTR Directory OPTIONAL, IN LPCWSTR InfFile OPTIONAL)
BOOL WINAPI SetupDiCallClassInstaller(DI_FUNCTION InstallFunction, HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData)
#define DI_FLAGSEX_ALLOWEXCLUDEDDRVS
#define ComboBox_GetTextLength(hwndCtl)
#define DIF_NEWDEVICEWIZARD_POSTANALYZE
#define DIF_DESTROYPRIVATEDATA
struct tagINITCOMMONCONTROLSEX INITCOMMONCONTROLSEX
static VOID InitControls(HWND hwnd)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesRead
UINT32 void void ** ReturnValue
#define ERROR_ACCESS_DENIED
static BOOL IsUserAdmin(VOID)
BOOL WINAPI SetupDiGetDeviceInstallParamsW(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, OUT PSP_DEVINSTALL_PARAMS_W DeviceInstallParams)
_Must_inspect_result_ _In_opt_ PVOID _In_opt_ PVOID InstanceId
#define DIF_REGISTER_COINSTALLERS
_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
BOOL WINAPI UpdateDriverForPlugAndPlayDevicesA(IN HWND hwndParent, IN LPCSTR HardwareId, IN LPCSTR FullInfPath, IN DWORD InstallFlags, OUT PBOOL bRebootRequired OPTIONAL)
#define DIF_NEWDEVICEWIZARD_FINISHINSTALL
#define SPDIT_COMPATDRIVER
#define ERROR_FILE_NOT_FOUND
struct _SP_DEVINFO_DATA SP_DEVINFO_DATA
#define FILE_ATTRIBUTE_DIRECTORY
BOOL DisplayWizard(IN PDEVINSTDATA DevInstData, IN HWND hwndParent, IN UINT startPage)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
#define DIF_INSTALLDEVICE
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
BOOL WINAPI InstallDevInstEx(IN HWND hWndParent, IN LPCWSTR InstanceId, IN BOOL bUpdate, OUT LPDWORD lpReboot, IN DWORD Unknown)
BOOL WINAPI SetupDiDestroyDeviceInfoList(HDEVINFO devinfo)
static BOOL IsDots(IN LPCWSTR str)
BOOL WINAPI UpdateDriverForPlugAndPlayDevicesW(IN HWND hwndParent, IN LPCWSTR HardwareId, IN LPCWSTR FullInfPath, IN DWORD InstallFlags, OUT PBOOL bRebootRequired OPTIONAL)
SP_DEVINSTALL_PARAMS_A SP_DEVINSTALL_PARAMS
#define ERROR_NO_SUCH_DEVINST
SP_DRVINFO_DATA_V2 SP_DRVINFO_DATA
#define FILE_ATTRIBUTE_NORMAL
_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]
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
BOOL InstallCurrentDriver(IN PDEVINSTDATA DevInstData)
_In_ PNDIS_STRING DeviceInstance
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
int _cdecl swprintf(const WCHAR *,...)
DWORD WINAPI GetLogicalDrives(VOID)
BOOL WINAPI InstallDevInst(IN HWND hWndParent, IN LPCWSTR InstanceId, IN BOOL bUpdate, OUT LPDWORD lpReboot)
BOOL WINAPI SetupDiDestroyDriverInfoList(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN DWORD DriverType)
#define DIF_INSTALLINTERFACES
#define SPDRP_CONFIGFLAGS
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
PRTL_UNICODE_STRING_BUFFER Path
_CRTIMP wchar_t *__cdecl wcsncpy(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
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
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
#define ReadFile(a, b, c, d, e)
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
BOOL CheckBestDriver(_In_ PDEVINSTDATA DevInstData, _In_ PCWSTR pszDir)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define MultiByteToWideChar
#define ICC_PROGRESS_CLASS
struct _SP_DEVINSTALL_PARAMS_W SP_DEVINSTALL_PARAMS_W
BOOL WINAPI SetupDiGetDeviceInstanceIdW(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, PWSTR DeviceInstanceId, DWORD DeviceInstanceIdSize, PDWORD RequiredSize)
BOOL WINAPI SetupDiOpenDeviceInfoW(IN HDEVINFO DeviceInfoSet, IN PCWSTR DeviceInstanceId, IN HWND hwndParent OPTIONAL, IN DWORD OpenFlags, OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL)
#define DIF_ALLOW_INSTALL
BOOL WINAPI SetupDiBuildDriverInfoList(IN HDEVINFO DeviceInfoSet, IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN DWORD DriverType)
static LPCWSTR GetFileExt(IN LPWSTR FileName)
base for all directory entries
#define INSTALLFLAG_NONINTERACTIVE
char * cleanup(char *str)
BOOL PrepareFoldersToScan(IN PDEVINSTDATA DevInstData, IN BOOL IncludeRemovableDevices, IN BOOL IncludeCustomPath, IN HWND hwndCombo OPTIONAL)
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ SECURITY_INFORMATION _In_ ULONG _Out_opt_ PULONG LengthNeeded
#define DIF_SELECTBESTCOMPATDRV
#define ERROR_GEN_FAILURE
#define DIF_INSTALLDEVICEFILES
BOOL ScanFoldersForDriver(IN PDEVINSTDATA DevInstData)
#define HeapFree(x, y, z)
#define ERROR_INVALID_FLAGS
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define CONFIGFLAG_FAILEDINSTALL
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
BOOL WINAPI DevInstallW(IN HWND hWndParent, IN HINSTANCE hInstance, IN LPCWSTR InstanceId, IN INT Show)
#define ERROR_INSUFFICIENT_BUFFER
BOOL WINAPI FindClose(HANDLE hFindFile)
PULONG MinorVersion OPTIONAL