[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

16
configure vendored
View File

@ -678,6 +678,7 @@ enable_silent_rules
enable_debug
enable_alpha
enable_beta
enable_test
'
ac_precious_vars='build_alias
host_alias
@ -1306,6 +1307,7 @@ Optional Features:
--enable-debug keep debug symbols for gdb (default=yes)
--enable-alpha build an ALPHA release (default=no)
--enable-beta build a BETA release (default=no)
--enable-test=# build a TEST release (default=no)
Some influential environment variables:
CC C compiler command
@ -3831,7 +3833,7 @@ else
LDFLAGS="-s"
fi
# Alpha/Beta
# Alpha/Beta/Test
# Check whether --enable-alpha was given.
if test "${enable_alpha+set}" = set; then :
enableval=$enable_alpha; alpha_enabled=$enableval
@ -3854,6 +3856,18 @@ if test "x$beta_enabled" != "xno" ; then
CFLAGS+=" -DBETA"
SUFFIX=_BETA
fi
# Check whether --enable-test was given.
if test "${enable_test+set}" = set; then :
enableval=$enable_test; test_enabled=$enableval
else
test_enabled='no'
fi
if test "x$test_enabled" != "xno" ; then
if test "x$test_enabled" == "xyes" ; then $enableval="" ; fi
CFLAGS+=" -DTEST=$enableval"
SUFFIX=_TEST$enableval
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: enabling Large File Support (ISO support)" >&5
$as_echo "enabling Large File Support (ISO support)" >&6; }

View File

@ -35,7 +35,7 @@ else
LDFLAGS="-s"
fi
# Alpha/Beta
# Alpha/Beta/Test
AC_ARG_ENABLE([alpha],[AS_HELP_STRING([--enable-alpha], [build an ALPHA release (default=no)])], [alpha_enabled=$enableval], [alpha_enabled='no'])
if test "x$alpha_enabled" != "xno" ; then
CFLAGS+=" -DALPHA"
@ -46,6 +46,12 @@ if test "x$beta_enabled" != "xno" ; then
CFLAGS+=" -DBETA"
SUFFIX=_BETA
fi
AC_ARG_ENABLE([test],[AS_HELP_STRING([--enable-test=#], [build a TEST release (default=no)])], [test_enabled=$enableval], [test_enabled='no'])
if test "x$test_enabled" != "xno" ; then
if test "x$test_enabled" == "xyes" ; then $enableval="" ; fi
CFLAGS+=" -DTEST=$enableval"
SUFFIX=_TEST$enableval
fi
AC_MSG_RESULT([enabling Large File Support (ISO support)])
AM_CFLAGS="$AM_CFLAGS -D_FILE_OFFSET_BITS=64 -D_OFF_T_ -D_off_t=off64_t -Doff_t=off64_t -Doff32_t=long"

View File

@ -516,6 +516,7 @@ t MSG_266 "Dual UEFI/BIOS mode"
t MSG_267 "Applying Windows image: %0.1f%% completed"
t MSG_268 "Applying Windows image..."
t MSG_269 "Preserve timestamps"
t MSG_270 "USB debug"
################################################################################
############################# TRANSLATOR END COPY ##############################

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