675{
680
682
684 {
685
687 }
688
690 if (!DevInstData)
691 {
692 TRACE(
"HeapAlloc() failed\n");
695 }
696
697
700
701
704 {
705 TRACE(
"SetupDiCreateDeviceInfoListExW() failed with error 0x%x\n",
GetLastError());
707 }
708
714 0,
717 {
718 TRACE(
"SetupDiOpenDeviceInfoW() failed with error 0x%x (InstanceId %s)\n",
722 }
723
732
734 {
737 {
738 TRACE(
"HeapAlloc() failed\n");
740 }
741 else
742 {
750 }
751 }
753 {
754 TRACE(
"SetupDiGetDeviceRegistryProperty() failed with error 0x%x (InstanceId %s)\n",
757 }
758
764 (
BYTE *)&config_flags,
765 sizeof(config_flags),
767 {
769 {
770
771 TRACE(
"Device is disabled\n");
774 }
775 }
776
778
779
781 {
784 }
786 {
787
789 TRACE(
"InstallCurrentDriver() returned %d\n",
retval);
791 {
792
798 &installParams))
799 {
801 {
802 TRACE(
"Displaying 'Reboot' wizard page\n");
804 }
805 }
806 }
808 }
810 {
811
812 TRACE(
"No wizard\n");
814 }
815
816
817 TRACE(
"Need to show install wizard\n");
819
821 if (DevInstData)
822 {
824 {
826 TRACE(
"SetupDiDestroyDriverInfoList() failed with error 0x%lx\n",
GetLastError());
827 }
829 {
831 TRACE(
"SetupDiDestroyDeviceInfoList() failed with error 0x%lx\n",
GetLastError());
832 }
835 }
836
838}
#define ERROR_NOT_ENOUGH_MEMORY
#define ERROR_INSUFFICIENT_BUFFER
#define INVALID_HANDLE_VALUE
#define HeapFree(x, y, z)
#define ERROR_ACCESS_DENIED
static void cleanup(void)
VOID WINAPI ExitProcess(IN UINT uExitCode)
HDEVINFO WINAPI SetupDiCreateDeviceInfoListExW(const GUID *ClassGuid, HWND hwndParent, PCWSTR MachineName, PVOID Reserved)
BOOL WINAPI SetupDiGetDeviceRegistryPropertyW(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Property, PDWORD PropertyRegDataType, PBYTE PropertyBuffer, DWORD PropertyBufferSize, PDWORD RequiredSize)
BOOL WINAPI SetupDiOpenDeviceInfoW(IN HDEVINFO DeviceInfoSet, IN PCWSTR DeviceInstanceId, IN HWND hwndParent OPTIONAL, IN DWORD OpenFlags, OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL)
BOOL WINAPI SetupDiDestroyDeviceInfoList(HDEVINFO devinfo)
BOOL WINAPI SetupDiDestroyDriverInfoList(IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL, IN DWORD DriverType)
_Must_inspect_result_ _In_opt_ PVOID _In_opt_ PVOID InstanceId
static BOOL IsUserAdmin(VOID)
BOOL ScanFoldersForDriver(IN PDEVINSTDATA DevInstData)
BOOL PrepareFoldersToScan(IN PDEVINSTDATA DevInstData, IN BOOL IncludeRemovableDevices, IN BOOL IncludeCustomPath, IN HWND hwndCombo OPTIONAL)
BOOL InstallCurrentDriver(IN PDEVINSTDATA DevInstData)
BOOL DisplayWizard(IN PDEVINSTDATA DevInstData, IN HWND hwndParent, IN UINT startPage)
#define CONFIGFLAG_FAILEDINSTALL
#define SetupDiGetDeviceInstallParams
SP_DEVINSTALL_PARAMS_A SP_DEVINSTALL_PARAMS
#define SetupDiGetDeviceRegistryProperty
struct _SP_DEVINFO_DATA SP_DEVINFO_DATA
#define SPDRP_CONFIGFLAGS
#define SPDIT_COMPATDRIVER
SP_DEVINFO_DATA devInfoData
DWORD WINAPI GetLastError(void)
#define ERROR_GEN_FAILURE