Skip to content

Commit

Permalink
[core] fix Win7 EFI boot file extraction when dual BIOS+UEFI is in use
Browse files Browse the repository at this point in the history
* Closes #1292
* Also add "RISD" (Ricoh IDE SD Card reader) to list of card readers (#551)
* Also make running Fido script read-only
  • Loading branch information
pbatard committed Mar 27, 2019
1 parent 1ecc771 commit 661ba7b
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 10 deletions.
2 changes: 1 addition & 1 deletion src/dev.c
Expand Up @@ -340,7 +340,7 @@ BOOL GetDevices(DWORD devnum)
// See http://itdoc.hitachi.co.jp/manuals/3021/30213B5200e/DMDS0094.HTM
// Also http://www.carrona.org/dvrref.php. NB: These should be reported
// as enumerators by Rufus when Enum Debug is enabled
"SD", "PCISTOR", "RTSOR", "JMCR", "JMCF", "RIMMPTSK", "RIMSPTSK", "RIXDPTSK",
"SD", "PCISTOR", "RTSOR", "JMCR", "JMCF", "RIMMPTSK", "RIMSPTSK", "RISD", "RIXDPTSK",
"TI21SONY", "ESD7SK", "ESM7SK", "O2MD", "O2SD", "VIACR"
};
// Oh, and we also have card devices (e.g. 'SCSI\DiskO2Micro_SD_...') under the SCSI enumerator...
Expand Down
2 changes: 1 addition & 1 deletion src/format.c
Expand Up @@ -2146,7 +2146,7 @@ DWORD WINAPI FormatThread(void* param)
}
}
// EFI mode selected, with no 'boot###.efi' but Windows 7 x64's 'bootmgr.efi' (bit #0)
if ((tt == TT_UEFI) && HAS_WIN7_EFI(img_report)) {
if (((tt == TT_UEFI) || allow_dual_uefi_bios) && HAS_WIN7_EFI(img_report)) {
PrintInfoDebug(0, MSG_232);
img_report.wininst_path[0][0] = drive_name[0];
efi_dst[0] = drive_name[0];
Expand Down
17 changes: 17 additions & 0 deletions src/msapi_utf8.h
Expand Up @@ -694,6 +694,23 @@ static __inline DWORD GetFileAttributesU(const char* lpFileName)
return ret;
}

static __inline BOOL SetFileAttributesU(const char* lpFileName, DWORD dwFileAttributes)
{
BOOL ret = FALSE, err = ERROR_INVALID_DATA;
wconvert(lpFileName);
// Unlike Microsoft's version, ours doesn't fail if the string is quoted
if ((wlpFileName[0] == L'"') && (wlpFileName[wcslen(wlpFileName) - 1] == L'"')) {
wlpFileName[wcslen(wlpFileName) - 1] = 0;
ret = SetFileAttributesW(&wlpFileName[1], dwFileAttributes);
} else {
ret = SetFileAttributesW(wlpFileName, dwFileAttributes);
}
err = GetLastError();
wfree(lpFileName);
SetLastError(err);
return ret;
}

static __inline int SHCreateDirectoryExU(HWND hwnd, const char* pszPath, SECURITY_ATTRIBUTES *psa)
{
int ret = ERROR_INVALID_DATA;
Expand Down
10 changes: 7 additions & 3 deletions src/net.c
Expand Up @@ -949,7 +949,7 @@ static DWORD WINAPI DownloadISOThread(LPVOID param)
assert((fido_script != NULL) && (fido_len != 0));

static_sprintf(script_path, "%s%s.ps1", temp_dir, GuidToString(&guid));
hFile = CreateFileU(script_path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
hFile = CreateFileU(script_path, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_READONLY, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
uprintf("Unable to create download script '%s': %s", script_path, WindowsErrorString());
goto out;
Expand All @@ -958,7 +958,8 @@ static DWORD WINAPI DownloadISOThread(LPVOID param)
uprintf("Unable to write download script '%s': %s", script_path, WindowsErrorString());
goto out;
}
// TODO: Try to Harden this so that only us and the powershell we launch can access the file
// Why oh why does PowerShell refuse to open read-only files that haven't been closed?
// Because of this limitation, we can't use LockFileEx() on the file we create...
safe_closehandle(hFile);
#endif
static_sprintf(powershell_path, "%s\\WindowsPowerShell\\v1.0\\powershell.exe", system_dir);
Expand All @@ -973,6 +974,7 @@ static DWORD WINAPI DownloadISOThread(LPVOID param)
dwPipeSize, dwPipeSize, 0, NULL);
if (hPipe == INVALID_HANDLE_VALUE) {
uprintf("Could not create pipe '%s': %s", pipe, WindowsErrorString);
goto out;
}

static_sprintf(cmdline, "%s -NonInteractive -Sta -NoProfile –ExecutionPolicy Bypass "
Expand Down Expand Up @@ -1027,8 +1029,10 @@ static DWORD WINAPI DownloadISOThread(LPVOID param)
if (icon_path[0] != 0)
DeleteFileU(icon_path);
#if !defined(RUFUS_TEST)
if (script_path[0] != 0)
if (script_path[0] != 0) {
SetFileAttributesU(script_path, FILE_ATTRIBUTE_NORMAL);
DeleteFileU(script_path);
}
#endif
free(url);
SendMessage(hMainDialog, UM_ENABLE_CONTROLS, 0, 0);
Expand Down
10 changes: 5 additions & 5 deletions src/rufus.rc
Expand Up @@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDD_DIALOG DIALOGEX 12, 12, 232, 326
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_ACCEPTFILES
CAPTION "Rufus 3.5.1495"
CAPTION "Rufus 3.5.1496"
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
BEGIN
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
Expand Down Expand Up @@ -394,8 +394,8 @@ END
//

VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,5,1495,0
PRODUCTVERSION 3,5,1495,0
FILEVERSION 3,5,1496,0
PRODUCTVERSION 3,5,1496,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
Expand All @@ -413,13 +413,13 @@ BEGIN
VALUE "Comments", "https://akeo.ie"
VALUE "CompanyName", "Akeo Consulting"
VALUE "FileDescription", "Rufus"
VALUE "FileVersion", "3.5.1495"
VALUE "FileVersion", "3.5.1496"
VALUE "InternalName", "Rufus"
VALUE "LegalCopyright", "� 2011-2019 Pete Batard (GPL v3)"
VALUE "LegalTrademarks", "https://www.gnu.org/copyleft/gpl.html"
VALUE "OriginalFilename", "rufus-3.5.exe"
VALUE "ProductName", "Rufus"
VALUE "ProductVersion", "3.5.1495"
VALUE "ProductVersion", "3.5.1496"
END
END
BLOCK "VarFileInfo"
Expand Down

0 comments on commit 661ba7b

Please sign in to comment.