1
1
Fork 0
mirror of https://github.com/pbatard/rufus.git synced 2024-08-14 23:57:05 +00:00

[core] add enumeration debugging

* Alt-. to toggle
* Also add configure option for test releases
This commit is contained in:
Pete Batard 2015-06-26 22:49:32 +01:00
parent d2576a9f5e
commit f04167c51c
9 changed files with 92 additions and 13 deletions

View file

@ -367,6 +367,16 @@ const loc_control_id control_id[] = {
LOC_CTRL(MSG_267),
LOC_CTRL(MSG_268),
LOC_CTRL(MSG_269),
LOC_CTRL(MSG_270),
LOC_CTRL(MSG_271),
LOC_CTRL(MSG_272),
LOC_CTRL(MSG_273),
LOC_CTRL(MSG_274),
LOC_CTRL(MSG_275),
LOC_CTRL(MSG_276),
LOC_CTRL(MSG_277),
LOC_CTRL(MSG_278),
LOC_CTRL(MSG_279),
LOC_CTRL(MSG_MAX),
LOC_CTRL(IDOK),
LOC_CTRL(IDCANCEL),

View file

@ -405,7 +405,17 @@
#define MSG_267 3267
#define MSG_268 3268
#define MSG_269 3269
#define MSG_MAX 3270
#define MSG_270 3270
#define MSG_271 3271
#define MSG_272 3272
#define MSG_273 3273
#define MSG_274 3274
#define MSG_275 3275
#define MSG_276 3276
#define MSG_277 3277
#define MSG_278 3278
#define MSG_279 3279
#define MSG_MAX 3280
// Next default values for new objects
//

View file

@ -103,7 +103,7 @@ static BOOL log_displayed = FALSE;
static BOOL iso_provided = FALSE;
static BOOL user_notified = FALSE;
static BOOL relaunch = FALSE;
extern BOOL force_large_fat32, enable_iso, enable_joliet, enable_rockridge, enable_ntfs_compression, preserve_timestamps;
extern BOOL force_large_fat32, enable_iso, enable_joliet, enable_rockridge, enable_ntfs_compression, preserve_timestamps, usb_debug;
extern uint8_t* grub2_buf;
extern long grub2_len;
extern const char* old_c32_name[NB_OLD_C32];
@ -1541,6 +1541,9 @@ static __inline const char* IsAlphaOrBeta(void)
return " (Alpha) ";
#elif defined(BETA)
return " (Beta) ";
#elif defined(TEST)
# define TEST_STR(x) " (Test" STRINGIFY(x) ")"
return TEST_STR(TEST);
#else
return " ";
#endif
@ -2039,6 +2042,10 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
// Add a VERY ANNOYING popup for Alpha releases, so that people don't start redistributing them
Notification(MSG_INFO, NULL, "ALPHA VERSION", "This is an Alpha version of " APPLICATION_NAME
" - It is meant to be used for testing ONLY and should NOT be distributed as a release.");
#elif defined(TEST)
// Same thing for Test releases
Notification(MSG_INFO, NULL, "TEST VERSION", "This is a Test version of " APPLICATION_NAME
" - It is meant to be used for testing ONLY and should NOT be distributed as a release.");
#endif
return (INT_PTR)FALSE;
@ -2821,6 +2828,13 @@ relaunch:
// Might also need ES_NOHIDESEL property if you want to select when not active
SendMessage(hLog, EM_SETSEL, 0, -1);
}
// Alt-. => Enable USB enumeration debug
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == VK_OEM_PERIOD)) {
usb_debug = !usb_debug;
PrintStatus2000(lmprintf(MSG_270), usb_debug);
GetUSBDevices(0);
continue;
}
// Alt-B => Toggle fake drive detection during bad blocks check
// By default, Rufus will check for fake USB flash drives that mistakenly present
// more capacity than they already have by looping over the flash. This check which

View file

@ -77,6 +77,9 @@
#ifndef ARRAYSIZE
#define ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0]))
#endif
#ifndef STRINGIFY
#define STRINGIFY(x) #x
#endif
#define IsChecked(CheckBox_ID) (IsDlgButtonChecked(hMainDialog, CheckBox_ID) == BST_CHECKED)
#define MB_IS_RTL (right_to_left_mode?MB_RTLREADING:0)
#define IDD_OFFSET ((right_to_left_mode?100:0) + ((nWindowsVersion <= WINDOWS_XP)?50:0))

View file

@ -32,7 +32,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDD_DIALOG DIALOGEX 12, 12, 242, 376
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Rufus 2.3.682"
CAPTION "Rufus 2.3.683"
FONT 8, "Segoe UI", 400, 0, 0x1
BEGIN
LTEXT "Device",IDS_DEVICE_TXT,9,6,200,8
@ -157,7 +157,7 @@ END
IDD_DIALOG_XP DIALOGEX 12, 12, 242, 376
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Rufus 2.3.682"
CAPTION "Rufus 2.3.683"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT "Device",IDS_DEVICE_TXT,9,6,200,8
@ -283,7 +283,7 @@ END
IDD_DIALOG_RTL DIALOGEX 12, 12, 242, 376
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
CAPTION "Rufus 2.3.682"
CAPTION "Rufus 2.3.683"
FONT 8, "Segoe UI", 400, 0, 0x1
BEGIN
LTEXT "Device",IDS_DEVICE_TXT,9,6,200,8
@ -415,7 +415,7 @@ END
IDD_DIALOG_RTL_XP DIALOGEX 12, 12, 242, 376
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
CAPTION "Rufus 2.3.682"
CAPTION "Rufus 2.3.683"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT "Device",IDS_DEVICE_TXT,9,6,200,8
@ -671,8 +671,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 2,3,682,0
PRODUCTVERSION 2,3,682,0
FILEVERSION 2,3,683,0
PRODUCTVERSION 2,3,683,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@ -689,13 +689,13 @@ BEGIN
BEGIN
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
VALUE "FileDescription", "Rufus"
VALUE "FileVersion", "2.3.682"
VALUE "FileVersion", "2.3.683"
VALUE "InternalName", "Rufus"
VALUE "LegalCopyright", "© 2011-2015 Pete Batard (GPL v3)"
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
VALUE "OriginalFilename", "rufus.exe"
VALUE "ProductName", "Rufus"
VALUE "ProductVersion", "2.3.682"
VALUE "ProductVersion", "2.3.683"
END
END
BLOCK "VarFileInfo"

View file

@ -42,6 +42,7 @@
extern StrArray DriveID, DriveLabel;
extern BOOL enable_HDDs, use_fake_units, enable_vmdk;
BOOL usb_debug = FALSE;
/*
* Get the VID, PID and current device speed
@ -169,7 +170,8 @@ BOOL GetUSBDevices(DWORD devnum)
if (htab_create(DEVID_HTAB_SIZE, &htab_devid)) {
dev_info_data.cbSize = sizeof(dev_info_data);
for (i=0; SetupDiEnumDeviceInfo(dev_info, i, &dev_info_data); i++) {
if (usb_debug)
uprintf("Processing Hub %d:", i + 1);
devint_detail_data = NULL;
devint_data.cbSize = sizeof(devint_data);
// Only care about the first interface (MemberIndex 0)
@ -188,12 +190,16 @@ BOOL GetUSBDevices(DWORD devnum)
if ((k = htab_hash(device_id, &htab_devid)) != 0) {
htab_devid.table[k].data = (void*)(uintptr_t)s;
}
if (usb_debug)
uprintf(" Found ID[%03d]: %s", k, device_id);
while (CM_Get_Sibling(&device_inst, device_inst, 0) == CR_SUCCESS) {
device_id[0] = 0;
if (CM_Get_Device_IDA(device_inst, device_id, MAX_PATH, 0) == CR_SUCCESS) {
if ((k = htab_hash(device_id, &htab_devid)) != 0) {
htab_devid.table[k].data = (void*)(uintptr_t)s;
}
if (usb_debug)
uprintf(" Found ID[%03d]: %s", k, device_id);
}
}
}
@ -233,6 +239,11 @@ BOOL GetUSBDevices(DWORD devnum)
if (list_size[s] > 1) {
if (CM_Get_Device_ID_ListA(storage_name[s], &devid_list[i], list_size[s], ulFlags) != CR_SUCCESS)
continue;
if (usb_debug) {
uprintf("Processing IDs belonging to %s:", storage_name[s]);
for (device_id = &devid_list[i]; *device_id != 0; device_id += strlen(device_id) + 1)
uprintf(" %s", device_id);
}
// The list_size is sometimes larger than required thus we need to find the real end
for (i += list_size[s]; i > 2; i--) {
if ((devid_list[i-2] != '\0') && (devid_list[i-1] == '\0') && (devid_list[i] == '\0'))
@ -268,6 +279,8 @@ BOOL GetUSBDevices(DWORD devnum)
memset(buffer, 0, sizeof(buffer));
props.is_VHD = SetupDiGetDeviceRegistryPropertyA(dev_info, &dev_info_data, SPDRP_HARDWAREID,
&datatype, (LPBYTE)buffer, sizeof(buffer), &size) && IsVHD(buffer);
if (usb_debug)
uprintf("Processing Device: '%s'", buffer);
memset(buffer, 0, sizeof(buffer));
if (!SetupDiGetDeviceRegistryPropertyA(dev_info, &dev_info_data, SPDRP_FRIENDLYNAME,
@ -287,6 +300,8 @@ BOOL GetUSBDevices(DWORD devnum)
props.is_UASP = ((((uintptr_t)device_id)+2) >= ((uintptr_t)devid_list)+list_start[1]);
// Now get the properties of the device, and its Device ID, which we need to populate the properties
j = htab_hash(device_id, &htab_devid);
if (usb_debug)
uprintf(" Matched with ID[%03d]: %s", j, device_id);
// If the hash didn't match a populated string in dev_if_path[] (htab_devid.table[j].data > 0),
// we might have an extra vendor driver in between (e.g. "ASUS USB 3.0 Boost Storage Driver"
// for UASP devices in ASUS "Turbo Mode" or "Apple Mobile Device USB Driver" for iPods)
@ -297,9 +312,13 @@ BOOL GetUSBDevices(DWORD devnum)
device_id = str;
method_str = "[GP]";
j = htab_hash(device_id, &htab_devid);
if (usb_debug)
uprintf(" Matched with (GP) ID[%03d]: %s", j, device_id);
}
if ((uint32_t)htab_devid.table[j].data > 0)
GetUSBProperties(dev_if_path.String[(uint32_t)htab_devid.table[j].data], device_id, &props);
if (usb_debug)
uprintf(" Props VID:PID = %04X:%04X", props.vid, props.pid);
// If previous calls still didn't succeed, try reading the VID:PID from the device_id
if ((props.vid == 0) && (props.pid == 0)) {
@ -328,6 +347,8 @@ BOOL GetUSBDevices(DWORD devnum)
if (is_SCSI) {
// If we have an SCSI drive and couldn't get a VID:PID, we are most likely
// dealing with a system drive => eliminate it!
if (usb_debug)
uprintf(" Non USB => Eliminated");
continue;
}
safe_strcpy(str, sizeof(str), "????:????"); // Couldn't figure VID:PID