mirror of
https://github.com/pbatard/rufus.git
synced 2025-05-17 16:44:27 -04:00
[misc] work around Microsoft's broken SetDllDirectory()
* *THIS* is what you need to do to replace Microsoft's broken SetDllDirectory("") implementation and mitigate DLL sideloading from local directories. * Also fix some comment typos
This commit is contained in:
parent
b80f7c0785
commit
e1d864f755
7 changed files with 128 additions and 47 deletions
|
@ -132,7 +132,7 @@
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;setupapi.lib;shell32.lib;shlwapi.lib;wininet.lib;wintrust.lib;dwmapi.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
|
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
@ -155,7 +155,7 @@
|
||||||
<DisableSpecificWarnings>4091;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4091;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;setupapi.lib;shell32.lib;shlwapi.lib;wininet.lib;wintrust.lib;dwmapi.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
|
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
@ -180,7 +180,7 @@
|
||||||
<DisableSpecificWarnings>4091;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4091;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;setupapi.lib;shell32.lib;shlwapi.lib;wininet.lib;wintrust.lib;dwmapi.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
|
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
@ -210,7 +210,7 @@
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;setupapi.lib;shell32.lib;shlwapi.lib;wininet.lib;wintrust.lib;dwmapi.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
|
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
@ -233,7 +233,7 @@
|
||||||
<DisableSpecificWarnings>4091;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4091;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;setupapi.lib;shell32.lib;shlwapi.lib;wininet.lib;wintrust.lib;dwmapi.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
|
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
@ -256,7 +256,7 @@
|
||||||
<DisableSpecificWarnings>4091;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4091;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;setupapi.lib;shell32.lib;shlwapi.lib;wininet.lib;wintrust.lib;dwmapi.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
|
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
@ -281,7 +281,7 @@
|
||||||
<DisableSpecificWarnings>4091;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4091;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;setupapi.lib;shell32.lib;shlwapi.lib;wininet.lib;wintrust.lib;dwmapi.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
|
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
@ -309,7 +309,7 @@
|
||||||
<DisableSpecificWarnings>4091;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
<DisableSpecificWarnings>4091;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;setupapi.lib;shell32.lib;shlwapi.lib;wininet.lib;wintrust.lib;dwmapi.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>advapi32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;gdi32.lib;ole32.lib;setupapi.lib;shell32.lib;shlwapi.lib;wintrust.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
|
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
|
|
|
@ -15,4 +15,4 @@ rufus_SOURCES = badblocks.c checksum.c dev.c dos.c dos_locale.c drive.c format.c
|
||||||
rufus_CFLAGS = -I./ms-sys/inc -I./syslinux/libfat -I./syslinux/libinstaller -I./syslinux/win -I./libcdio $(AM_CFLAGS)
|
rufus_CFLAGS = -I./ms-sys/inc -I./syslinux/libfat -I./syslinux/libinstaller -I./syslinux/win -I./libcdio $(AM_CFLAGS)
|
||||||
rufus_LDFLAGS = $(AM_LDFLAGS) -mwindows
|
rufus_LDFLAGS = $(AM_LDFLAGS) -mwindows
|
||||||
rufus_LDADD = rufus_rc.o bled/libbled.a ms-sys/libmssys.a syslinux/libfat/libfat.a syslinux/libinstaller/libinstaller.a syslinux/win/libwin.a \
|
rufus_LDADD = rufus_rc.o bled/libbled.a ms-sys/libmssys.a syslinux/libfat/libfat.a syslinux/libinstaller/libinstaller.a syslinux/win/libwin.a \
|
||||||
libcdio/iso9660/libiso9660.a libcdio/udf/libudf.a libcdio/driver/libdriver.a -lsetupapi -lole32 -lgdi32 -lwininet -lshlwapi -lcrypt32 -lwintrust -lcomdlg32 -lcomctl32 -ldwmapi -luuid -lpsapi
|
libcdio/iso9660/libiso9660.a libcdio/udf/libudf.a libcdio/driver/libdriver.a -lsetupapi -lole32 -lgdi32 -lshlwapi -lcrypt32 -lwintrust -lcomdlg32 -lcomctl32 -luuid -lpsapi
|
||||||
|
|
|
@ -276,7 +276,7 @@ rufus_SOURCES = badblocks.c checksum.c dev.c dos.c dos_locale.c drive.c format.c
|
||||||
rufus_CFLAGS = -I./ms-sys/inc -I./syslinux/libfat -I./syslinux/libinstaller -I./syslinux/win -I./libcdio $(AM_CFLAGS)
|
rufus_CFLAGS = -I./ms-sys/inc -I./syslinux/libfat -I./syslinux/libinstaller -I./syslinux/win -I./libcdio $(AM_CFLAGS)
|
||||||
rufus_LDFLAGS = $(AM_LDFLAGS) -mwindows
|
rufus_LDFLAGS = $(AM_LDFLAGS) -mwindows
|
||||||
rufus_LDADD = rufus_rc.o bled/libbled.a ms-sys/libmssys.a syslinux/libfat/libfat.a syslinux/libinstaller/libinstaller.a syslinux/win/libwin.a \
|
rufus_LDADD = rufus_rc.o bled/libbled.a ms-sys/libmssys.a syslinux/libfat/libfat.a syslinux/libinstaller/libinstaller.a syslinux/win/libwin.a \
|
||||||
libcdio/iso9660/libiso9660.a libcdio/udf/libudf.a libcdio/driver/libdriver.a -lsetupapi -lole32 -lgdi32 -lwininet -lshlwapi -lcrypt32 -lwintrust -lcomdlg32 -lcomctl32 -ldwmapi -luuid -lpsapi
|
libcdio/iso9660/libiso9660.a libcdio/udf/libudf.a libcdio/driver/libdriver.a -lsetupapi -lole32 -lgdi32 -lshlwapi -lcrypt32 -lwintrust -lcomdlg32 -lcomctl32 -luuid -lpsapi
|
||||||
|
|
||||||
all: all-recursive
|
all: all-recursive
|
||||||
|
|
||||||
|
|
107
src/net.c
107
src/net.c
|
@ -59,6 +59,8 @@ const char* WinInetErrorString(void)
|
||||||
{
|
{
|
||||||
static char error_string[256];
|
static char error_string[256];
|
||||||
DWORD size = sizeof(error_string);
|
DWORD size = sizeof(error_string);
|
||||||
|
PF_TYPE_DECL(WINAPI, BOOL, InternetGetLastResponseInfoA, (LPDWORD, LPSTR, LPDWORD));
|
||||||
|
PF_INIT(InternetGetLastResponseInfoA, WinInet);
|
||||||
|
|
||||||
error_code = HRESULT_CODE(GetLastError());
|
error_code = HRESULT_CODE(GetLastError());
|
||||||
|
|
||||||
|
@ -202,8 +204,11 @@ const char* WinInetErrorString(void)
|
||||||
case ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY:
|
case ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY:
|
||||||
return "Please ask Microsoft about that one!";
|
return "Please ask Microsoft about that one!";
|
||||||
case ERROR_INTERNET_EXTENDED_ERROR:
|
case ERROR_INTERNET_EXTENDED_ERROR:
|
||||||
InternetGetLastResponseInfoA(&error_code, error_string, &size);
|
if (pfInternetGetLastResponseInfoA != NULL) {
|
||||||
return error_string;
|
pfInternetGetLastResponseInfoA(&error_code, error_string, &size);
|
||||||
|
return error_string;
|
||||||
|
}
|
||||||
|
// fall through
|
||||||
default:
|
default:
|
||||||
static_sprintf(error_string, "Unknown internet error 0x%08lX", error_code);
|
static_sprintf(error_string, "Unknown internet error 0x%08lX", error_code);
|
||||||
return error_string;
|
return error_string;
|
||||||
|
@ -232,6 +237,26 @@ DWORD DownloadFile(const char* url, const char* file, HWND hProgressDialog)
|
||||||
size_t last_slash;
|
size_t last_slash;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
// Can't link with wininet.lib because of sideloading issues
|
||||||
|
PF_TYPE_DECL(WINAPI, BOOL, InternetCrackUrlA, (LPCSTR, DWORD, DWORD, LPURL_COMPONENTSA));
|
||||||
|
PF_TYPE_DECL(WINAPI, BOOL, InternetGetConnectedState, (LPDWORD, DWORD));
|
||||||
|
PF_TYPE_DECL(WINAPI, HINTERNET, InternetOpenA, (LPCSTR, DWORD, LPCSTR, LPCSTR, DWORD));
|
||||||
|
PF_TYPE_DECL(WINAPI, HINTERNET, InternetConnectA, (HINTERNET, LPCSTR, INTERNET_PORT, LPCSTR, LPCSTR, DWORD, DWORD, DWORD_PTR));
|
||||||
|
PF_TYPE_DECL(WINAPI, BOOL, InternetReadFile, (HINTERNET, LPVOID, DWORD, LPDWORD));
|
||||||
|
PF_TYPE_DECL(WINAPI, BOOL, InternetCloseHandle, (HINTERNET));
|
||||||
|
PF_TYPE_DECL(WINAPI, HINTERNET, HttpOpenRequestA, (HINTERNET, LPCSTR, LPCSTR, LPCSTR, LPCSTR, LPCSTR*, DWORD, DWORD_PTR));
|
||||||
|
PF_TYPE_DECL(WINAPI, BOOL, HttpSendRequestA, (HINTERNET, LPCSTR, DWORD, LPVOID, DWORD));
|
||||||
|
PF_TYPE_DECL(WINAPI, BOOL, HttpQueryInfoA, (HINTERNET, DWORD, LPVOID, LPDWORD, LPDWORD));
|
||||||
|
PF_INIT_OR_OUT(InternetCrackUrlA, WinInet);
|
||||||
|
PF_INIT_OR_OUT(InternetGetConnectedState, WinInet);
|
||||||
|
PF_INIT_OR_OUT(InternetOpenA, WinInet);
|
||||||
|
PF_INIT_OR_OUT(InternetConnectA, WinInet);
|
||||||
|
PF_INIT_OR_OUT(InternetReadFile, WinInet);
|
||||||
|
PF_INIT_OR_OUT(InternetCloseHandle, WinInet);
|
||||||
|
PF_INIT_OR_OUT(HttpOpenRequestA, WinInet);
|
||||||
|
PF_INIT_OR_OUT(HttpSendRequestA, WinInet);
|
||||||
|
PF_INIT_OR_OUT(HttpQueryInfoA, WinInet);
|
||||||
|
|
||||||
DownloadStatus = 0;
|
DownloadStatus = 0;
|
||||||
if (hProgressDialog != NULL) {
|
if (hProgressDialog != NULL) {
|
||||||
// Use the progress control provided, if any
|
// Use the progress control provided, if any
|
||||||
|
@ -256,7 +281,7 @@ DWORD DownloadFile(const char* url, const char* file, HWND hProgressDialog)
|
||||||
PrintInfo(0, MSG_085, &file[last_slash]);
|
PrintInfo(0, MSG_085, &file[last_slash]);
|
||||||
uprintf("Downloading '%s' from %s\n", &file[last_slash], url);
|
uprintf("Downloading '%s' from %s\n", &file[last_slash], url);
|
||||||
|
|
||||||
if ( (!InternetCrackUrlA(url, (DWORD)safe_strlen(url), 0, &UrlParts))
|
if ( (!pfInternetCrackUrlA(url, (DWORD)safe_strlen(url), 0, &UrlParts))
|
||||||
|| (UrlParts.lpszHostName == NULL) || (UrlParts.lpszUrlPath == NULL)) {
|
|| (UrlParts.lpszHostName == NULL) || (UrlParts.lpszUrlPath == NULL)) {
|
||||||
uprintf("Unable to decode URL: %s\n", WinInetErrorString());
|
uprintf("Unable to decode URL: %s\n", WinInetErrorString());
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -264,7 +289,7 @@ DWORD DownloadFile(const char* url, const char* file, HWND hProgressDialog)
|
||||||
hostname[sizeof(hostname)-1] = 0;
|
hostname[sizeof(hostname)-1] = 0;
|
||||||
|
|
||||||
// Open an Internet session
|
// Open an Internet session
|
||||||
for (i=5; (i>0) && (!InternetGetConnectedState(&dwFlags, 0)); i--) {
|
for (i=5; (i>0) && (!pfInternetGetConnectedState(&dwFlags, 0)); i--) {
|
||||||
Sleep(1000);
|
Sleep(1000);
|
||||||
}
|
}
|
||||||
if (i <= 0) {
|
if (i <= 0) {
|
||||||
|
@ -276,19 +301,19 @@ DWORD DownloadFile(const char* url, const char* file, HWND hProgressDialog)
|
||||||
static_sprintf(agent, APPLICATION_NAME "/%d.%d.%d (Windows NT %d.%d%s)",
|
static_sprintf(agent, APPLICATION_NAME "/%d.%d.%d (Windows NT %d.%d%s)",
|
||||||
rufus_version[0], rufus_version[1], rufus_version[2],
|
rufus_version[0], rufus_version[1], rufus_version[2],
|
||||||
nWindowsVersion>>4, nWindowsVersion&0x0F, is_x64()?"; WOW64":"");
|
nWindowsVersion>>4, nWindowsVersion&0x0F, is_x64()?"; WOW64":"");
|
||||||
hSession = InternetOpenA(agent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
|
hSession = pfInternetOpenA(agent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
|
||||||
if (hSession == NULL) {
|
if (hSession == NULL) {
|
||||||
uprintf("Could not open Internet session: %s\n", WinInetErrorString());
|
uprintf("Could not open Internet session: %s\n", WinInetErrorString());
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
hConnection = InternetConnectA(hSession, UrlParts.lpszHostName, UrlParts.nPort, NULL, NULL, INTERNET_SERVICE_HTTP, 0, (DWORD_PTR)NULL);
|
hConnection = pfInternetConnectA(hSession, UrlParts.lpszHostName, UrlParts.nPort, NULL, NULL, INTERNET_SERVICE_HTTP, 0, (DWORD_PTR)NULL);
|
||||||
if (hConnection == NULL) {
|
if (hConnection == NULL) {
|
||||||
uprintf("Could not connect to server %s:%d: %s\n", UrlParts.lpszHostName, UrlParts.nPort, WinInetErrorString());
|
uprintf("Could not connect to server %s:%d: %s\n", UrlParts.lpszHostName, UrlParts.nPort, WinInetErrorString());
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
hRequest = HttpOpenRequestA(hConnection, "GET", UrlParts.lpszUrlPath, NULL, NULL, accept_types,
|
hRequest = pfHttpOpenRequestA(hConnection, "GET", UrlParts.lpszUrlPath, NULL, NULL, accept_types,
|
||||||
INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP|INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS|
|
INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP|INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS|
|
||||||
INTERNET_FLAG_NO_COOKIES|INTERNET_FLAG_NO_UI|INTERNET_FLAG_NO_CACHE_WRITE|INTERNET_FLAG_HYPERLINK|
|
INTERNET_FLAG_NO_COOKIES|INTERNET_FLAG_NO_UI|INTERNET_FLAG_NO_CACHE_WRITE|INTERNET_FLAG_HYPERLINK|
|
||||||
((UrlParts.nScheme==INTERNET_SCHEME_HTTPS)?INTERNET_FLAG_SECURE:0), (DWORD_PTR)NULL);
|
((UrlParts.nScheme==INTERNET_SCHEME_HTTPS)?INTERNET_FLAG_SECURE:0), (DWORD_PTR)NULL);
|
||||||
|
@ -297,7 +322,7 @@ DWORD DownloadFile(const char* url, const char* file, HWND hProgressDialog)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!HttpSendRequestA(hRequest, NULL, 0, NULL, 0)) {
|
if (!pfHttpSendRequestA(hRequest, NULL, 0, NULL, 0)) {
|
||||||
uprintf("Unable to send request: %s\n", WinInetErrorString());
|
uprintf("Unable to send request: %s\n", WinInetErrorString());
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -305,14 +330,14 @@ DWORD DownloadFile(const char* url, const char* file, HWND hProgressDialog)
|
||||||
// Get the file size
|
// Get the file size
|
||||||
dwSize = sizeof(DownloadStatus);
|
dwSize = sizeof(DownloadStatus);
|
||||||
DownloadStatus = 404;
|
DownloadStatus = 404;
|
||||||
HttpQueryInfoA(hRequest, HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, (LPVOID)&DownloadStatus, &dwSize, NULL);
|
pfHttpQueryInfoA(hRequest, HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, (LPVOID)&DownloadStatus, &dwSize, NULL);
|
||||||
if (DownloadStatus != 200) {
|
if (DownloadStatus != 200) {
|
||||||
error_code = ERROR_INTERNET_ITEM_NOT_FOUND;
|
error_code = ERROR_INTERNET_ITEM_NOT_FOUND;
|
||||||
uprintf("Unable to access file: %d\n", DownloadStatus);
|
uprintf("Unable to access file: %d\n", DownloadStatus);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
dwSize = sizeof(dwTotalSize);
|
dwSize = sizeof(dwTotalSize);
|
||||||
if (!HttpQueryInfoA(hRequest, HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER, (LPVOID)&dwTotalSize, &dwSize, NULL)) {
|
if (!pfHttpQueryInfoA(hRequest, HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER, (LPVOID)&dwTotalSize, &dwSize, NULL)) {
|
||||||
uprintf("Unable to retrieve file length: %s\n", WinInetErrorString());
|
uprintf("Unable to retrieve file length: %s\n", WinInetErrorString());
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -330,7 +355,7 @@ DWORD DownloadFile(const char* url, const char* file, HWND hProgressDialog)
|
||||||
if (IS_ERROR(FormatStatus))
|
if (IS_ERROR(FormatStatus))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (!InternetReadFile(hRequest, buf, sizeof(buf), &dwDownloaded) || (dwDownloaded == 0))
|
if (!pfInternetReadFile(hRequest, buf, sizeof(buf), &dwDownloaded) || (dwDownloaded == 0))
|
||||||
break;
|
break;
|
||||||
dwSize += dwDownloaded;
|
dwSize += dwDownloaded;
|
||||||
SendMessage(hProgressBar, PBM_SETPOS, (WPARAM)(MAX_PROGRESS*((1.0f*dwSize)/(1.0f*dwTotalSize))), 0);
|
SendMessage(hProgressBar, PBM_SETPOS, (WPARAM)(MAX_PROGRESS*((1.0f*dwSize)/(1.0f*dwTotalSize))), 0);
|
||||||
|
@ -371,9 +396,12 @@ out:
|
||||||
lmprintf(MSG_044), MB_OK|MB_ICONERROR|MB_IS_RTL, selected_langid);
|
lmprintf(MSG_044), MB_OK|MB_ICONERROR|MB_IS_RTL, selected_langid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (hRequest) InternetCloseHandle(hRequest);
|
if (hRequest)
|
||||||
if (hConnection) InternetCloseHandle(hConnection);
|
pfInternetCloseHandle(hRequest);
|
||||||
if (hSession) InternetCloseHandle(hSession);
|
if (hConnection)
|
||||||
|
pfInternetCloseHandle(hConnection);
|
||||||
|
if (hSession)
|
||||||
|
pfInternetCloseHandle(hSession);
|
||||||
|
|
||||||
return r?dwSize:0;
|
return r?dwSize:0;
|
||||||
}
|
}
|
||||||
|
@ -425,6 +453,26 @@ static DWORD WINAPI CheckForUpdatesThread(LPVOID param)
|
||||||
FILETIME FileTime;
|
FILETIME FileTime;
|
||||||
int64_t local_time = 0, reg_time, server_time, update_interval;
|
int64_t local_time = 0, reg_time, server_time, update_interval;
|
||||||
|
|
||||||
|
// Can't link with wininet.lib because of sideloading issues
|
||||||
|
PF_TYPE_DECL(WINAPI, BOOL, InternetCrackUrlA, (LPCSTR, DWORD, DWORD, LPURL_COMPONENTSA));
|
||||||
|
PF_TYPE_DECL(WINAPI, BOOL, InternetGetConnectedState, (LPDWORD, DWORD));
|
||||||
|
PF_TYPE_DECL(WINAPI, HINTERNET, InternetOpenA, (LPCSTR, DWORD, LPCSTR, LPCSTR, DWORD));
|
||||||
|
PF_TYPE_DECL(WINAPI, HINTERNET, InternetConnectA, (HINTERNET, LPCSTR, INTERNET_PORT, LPCSTR, LPCSTR, DWORD, DWORD, DWORD_PTR));
|
||||||
|
PF_TYPE_DECL(WINAPI, BOOL, InternetReadFile, (HINTERNET, LPVOID, DWORD, LPDWORD));
|
||||||
|
PF_TYPE_DECL(WINAPI, BOOL, InternetCloseHandle, (HINTERNET));
|
||||||
|
PF_TYPE_DECL(WINAPI, HINTERNET, HttpOpenRequestA, (HINTERNET, LPCSTR, LPCSTR, LPCSTR, LPCSTR, LPCSTR*, DWORD, DWORD_PTR));
|
||||||
|
PF_TYPE_DECL(WINAPI, BOOL, HttpSendRequestA, (HINTERNET, LPCSTR, DWORD, LPVOID, DWORD));
|
||||||
|
PF_TYPE_DECL(WINAPI, BOOL, HttpQueryInfoA, (HINTERNET, DWORD, LPVOID, LPDWORD, LPDWORD));
|
||||||
|
PF_INIT_OR_OUT(InternetCrackUrlA, WinInet);
|
||||||
|
PF_INIT_OR_OUT(InternetGetConnectedState, WinInet);
|
||||||
|
PF_INIT_OR_OUT(InternetOpenA, WinInet);
|
||||||
|
PF_INIT_OR_OUT(InternetConnectA, WinInet);
|
||||||
|
PF_INIT_OR_OUT(InternetReadFile, WinInet);
|
||||||
|
PF_INIT_OR_OUT(InternetCloseHandle, WinInet);
|
||||||
|
PF_INIT_OR_OUT(HttpOpenRequestA, WinInet);
|
||||||
|
PF_INIT_OR_OUT(HttpSendRequestA, WinInet);
|
||||||
|
PF_INIT_OR_OUT(HttpQueryInfoA, WinInet);
|
||||||
|
|
||||||
update_check_in_progress = TRUE;
|
update_check_in_progress = TRUE;
|
||||||
verbose = ReadSetting32(SETTING_VERBOSE_UPDATES);
|
verbose = ReadSetting32(SETTING_VERBOSE_UPDATES);
|
||||||
// Without this the FileDialog will produce error 0x8001010E when compiled for Vista or later
|
// Without this the FileDialog will produce error 0x8001010E when compiled for Vista or later
|
||||||
|
@ -468,17 +516,17 @@ static DWORD WINAPI CheckForUpdatesThread(LPVOID param)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!InternetCrackUrlA(server_url, (DWORD)safe_strlen(server_url), 0, &UrlParts)) || (!InternetGetConnectedState(&dwFlags, 0)))
|
if ((!pfInternetCrackUrlA(server_url, (DWORD)safe_strlen(server_url), 0, &UrlParts)) || (!pfInternetGetConnectedState(&dwFlags, 0)))
|
||||||
goto out;
|
goto out;
|
||||||
hostname[sizeof(hostname)-1] = 0;
|
hostname[sizeof(hostname)-1] = 0;
|
||||||
|
|
||||||
static_sprintf(agent, APPLICATION_NAME "/%d.%d.%d (Windows NT %d.%d%s)",
|
static_sprintf(agent, APPLICATION_NAME "/%d.%d.%d (Windows NT %d.%d%s)",
|
||||||
rufus_version[0], rufus_version[1], rufus_version[2],
|
rufus_version[0], rufus_version[1], rufus_version[2],
|
||||||
nWindowsVersion >> 4, nWindowsVersion & 0x0F, is_x64() ? "; WOW64" : "");
|
nWindowsVersion >> 4, nWindowsVersion & 0x0F, is_x64() ? "; WOW64" : "");
|
||||||
hSession = InternetOpenA(agent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
|
hSession = pfInternetOpenA(agent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
|
||||||
if (hSession == NULL)
|
if (hSession == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
hConnection = InternetConnectA(hSession, UrlParts.lpszHostName, UrlParts.nPort, NULL, NULL, INTERNET_SERVICE_HTTP, 0, (DWORD_PTR)NULL);
|
hConnection = pfInternetConnectA(hSession, UrlParts.lpszHostName, UrlParts.nPort, NULL, NULL, INTERNET_SERVICE_HTTP, 0, (DWORD_PTR)NULL);
|
||||||
if (hConnection == NULL)
|
if (hConnection == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
@ -515,11 +563,11 @@ static DWORD WINAPI CheckForUpdatesThread(LPVOID param)
|
||||||
UrlParts.dwUrlPathLength = sizeof(urlpath);
|
UrlParts.dwUrlPathLength = sizeof(urlpath);
|
||||||
for (i=0; i<ARRAYSIZE(verpos); i++) {
|
for (i=0; i<ARRAYSIZE(verpos); i++) {
|
||||||
vvuprintf("Trying %s\n", UrlParts.lpszUrlPath);
|
vvuprintf("Trying %s\n", UrlParts.lpszUrlPath);
|
||||||
hRequest = HttpOpenRequestA(hConnection, "GET", UrlParts.lpszUrlPath, NULL, NULL, accept_types,
|
hRequest = pfHttpOpenRequestA(hConnection, "GET", UrlParts.lpszUrlPath, NULL, NULL, accept_types,
|
||||||
INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP|INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS|
|
INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP|INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS|
|
||||||
INTERNET_FLAG_NO_COOKIES|INTERNET_FLAG_NO_UI|INTERNET_FLAG_NO_CACHE_WRITE|INTERNET_FLAG_HYPERLINK|
|
INTERNET_FLAG_NO_COOKIES|INTERNET_FLAG_NO_UI|INTERNET_FLAG_NO_CACHE_WRITE|INTERNET_FLAG_HYPERLINK|
|
||||||
((UrlParts.nScheme == INTERNET_SCHEME_HTTPS)?INTERNET_FLAG_SECURE:0), (DWORD_PTR)NULL);
|
((UrlParts.nScheme == INTERNET_SCHEME_HTTPS)?INTERNET_FLAG_SECURE:0), (DWORD_PTR)NULL);
|
||||||
if ((hRequest == NULL) || (!HttpSendRequestA(hRequest, NULL, 0, NULL, 0))) {
|
if ((hRequest == NULL) || (!pfHttpSendRequestA(hRequest, NULL, 0, NULL, 0))) {
|
||||||
uprintf("Unable to send request: %s", WinInetErrorString());
|
uprintf("Unable to send request: %s", WinInetErrorString());
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -527,10 +575,10 @@ static DWORD WINAPI CheckForUpdatesThread(LPVOID param)
|
||||||
// Ensure that we get a text file
|
// Ensure that we get a text file
|
||||||
dwSize = sizeof(dwStatus);
|
dwSize = sizeof(dwStatus);
|
||||||
dwStatus = 404;
|
dwStatus = 404;
|
||||||
HttpQueryInfoA(hRequest, HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, (LPVOID)&dwStatus, &dwSize, NULL);
|
pfHttpQueryInfoA(hRequest, HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, (LPVOID)&dwStatus, &dwSize, NULL);
|
||||||
if (dwStatus == 200)
|
if (dwStatus == 200)
|
||||||
break;
|
break;
|
||||||
InternetCloseHandle(hRequest);
|
pfInternetCloseHandle(hRequest);
|
||||||
hRequest = NULL;
|
hRequest = NULL;
|
||||||
safe_strcpy(&urlpath[verpos[i]], 5, ".ver");
|
safe_strcpy(&urlpath[verpos[i]], 5, ".ver");
|
||||||
}
|
}
|
||||||
|
@ -546,7 +594,7 @@ static DWORD WINAPI CheckForUpdatesThread(LPVOID param)
|
||||||
// 'text/plain' for .ver files. Use 'curl -I' to check that you get something
|
// 'text/plain' for .ver files. Use 'curl -I' to check that you get something
|
||||||
// like 'Content-Type: text/plain; charset=UTF-8' when fetching your .ver files.
|
// like 'Content-Type: text/plain; charset=UTF-8' when fetching your .ver files.
|
||||||
dwSize = sizeof(mime);
|
dwSize = sizeof(mime);
|
||||||
HttpQueryInfoA(hRequest, HTTP_QUERY_CONTENT_TYPE, (LPVOID)&mime, &dwSize, NULL);
|
pfHttpQueryInfoA(hRequest, HTTP_QUERY_CONTENT_TYPE, (LPVOID)&mime, &dwSize, NULL);
|
||||||
if (strncmp(mime, "text/plain", sizeof("text/plain")-1) != 0)
|
if (strncmp(mime, "text/plain", sizeof("text/plain")-1) != 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
@ -555,7 +603,7 @@ static DWORD WINAPI CheckForUpdatesThread(LPVOID param)
|
||||||
// On the other hand, if local clock is set way back in the past, we will never check.
|
// On the other hand, if local clock is set way back in the past, we will never check.
|
||||||
dwSize = sizeof(ServerTime);
|
dwSize = sizeof(ServerTime);
|
||||||
// If we can't get a date we can trust, don't bother...
|
// If we can't get a date we can trust, don't bother...
|
||||||
if ( (!HttpQueryInfoA(hRequest, HTTP_QUERY_DATE|HTTP_QUERY_FLAG_SYSTEMTIME, (LPVOID)&ServerTime, &dwSize, NULL))
|
if ( (!pfHttpQueryInfoA(hRequest, HTTP_QUERY_DATE|HTTP_QUERY_FLAG_SYSTEMTIME, (LPVOID)&ServerTime, &dwSize, NULL))
|
||||||
|| (!SystemTimeToFileTime(&ServerTime, &FileTime)) )
|
|| (!SystemTimeToFileTime(&ServerTime, &FileTime)) )
|
||||||
goto out;
|
goto out;
|
||||||
server_time = ((((int64_t)FileTime.dwHighDateTime)<<32) + FileTime.dwLowDateTime) / 10000000;
|
server_time = ((((int64_t)FileTime.dwHighDateTime)<<32) + FileTime.dwLowDateTime) / 10000000;
|
||||||
|
@ -571,7 +619,7 @@ static DWORD WINAPI CheckForUpdatesThread(LPVOID param)
|
||||||
}
|
}
|
||||||
|
|
||||||
dwSize = sizeof(dwTotalSize);
|
dwSize = sizeof(dwTotalSize);
|
||||||
if (!HttpQueryInfoA(hRequest, HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER, (LPVOID)&dwTotalSize, &dwSize, NULL))
|
if (!pfHttpQueryInfoA(hRequest, HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER, (LPVOID)&dwTotalSize, &dwSize, NULL))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
safe_free(buf);
|
safe_free(buf);
|
||||||
|
@ -579,7 +627,7 @@ static DWORD WINAPI CheckForUpdatesThread(LPVOID param)
|
||||||
buf = (char*)calloc(dwTotalSize+1, 1);
|
buf = (char*)calloc(dwTotalSize+1, 1);
|
||||||
if (buf == NULL) goto out;
|
if (buf == NULL) goto out;
|
||||||
// This is a version file - we should be able to gulp it down in one go
|
// This is a version file - we should be able to gulp it down in one go
|
||||||
if (!InternetReadFile(hRequest, buf, dwTotalSize, &dwDownloaded) || (dwDownloaded != dwTotalSize))
|
if (!pfInternetReadFile(hRequest, buf, dwTotalSize, &dwDownloaded) || (dwDownloaded != dwTotalSize))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
status++;
|
status++;
|
||||||
|
@ -600,9 +648,12 @@ static DWORD WINAPI CheckForUpdatesThread(LPVOID param)
|
||||||
|
|
||||||
out:
|
out:
|
||||||
safe_free(buf);
|
safe_free(buf);
|
||||||
if (hRequest) InternetCloseHandle(hRequest);
|
if (hRequest)
|
||||||
if (hConnection) InternetCloseHandle(hConnection);
|
pfInternetCloseHandle(hRequest);
|
||||||
if (hSession) InternetCloseHandle(hSession);
|
if (hConnection)
|
||||||
|
pfInternetCloseHandle(hConnection);
|
||||||
|
if (hSession)
|
||||||
|
pfInternetCloseHandle(hSession);
|
||||||
switch(status) {
|
switch(status) {
|
||||||
case 1:
|
case 1:
|
||||||
PrintInfoDebug(3000, MSG_244);
|
PrintInfoDebug(3000, MSG_244);
|
||||||
|
|
|
@ -556,7 +556,7 @@ LONG ValidateSignature(HWND hDlg, const char* path)
|
||||||
// This is done to prevent the use of an officially signed, but older binary, as potential attack vector.
|
// This is done to prevent the use of an officially signed, but older binary, as potential attack vector.
|
||||||
current_ts = GetSignatureTimeStamp(NULL);
|
current_ts = GetSignatureTimeStamp(NULL);
|
||||||
if (current_ts == 0ULL) {
|
if (current_ts == 0ULL) {
|
||||||
uprintf("PKI: Cannot retreive the current binary's timestamp - Aborting update");
|
uprintf("PKI: Cannot retrieve the current binary's timestamp - Aborting update");
|
||||||
r = TRUST_E_TIME_STAMP;
|
r = TRUST_E_TIME_STAMP;
|
||||||
} else {
|
} else {
|
||||||
update_ts = GetSignatureTimeStamp(path);
|
update_ts = GetSignatureTimeStamp(path);
|
||||||
|
|
36
src/rufus.c
36
src/rufus.c
|
@ -2356,7 +2356,7 @@ static void PositionControls(HWND hDlg)
|
||||||
section_vpos[2] = rc.top + 2 * sz.cy / 3;
|
section_vpos[2] = rc.top + 2 * sz.cy / 3;
|
||||||
|
|
||||||
// Seriously, who designed this bullshit API call where you pass a SIZE
|
// Seriously, who designed this bullshit API call where you pass a SIZE
|
||||||
// struct but can only retreive one of cx or cy at a time?!?
|
// struct but can only retrieve one of cx or cy at a time?!?
|
||||||
SendMessage(hMultiToolbar, TB_GETIDEALSIZE, (WPARAM)FALSE, (LPARAM)&sz);
|
SendMessage(hMultiToolbar, TB_GETIDEALSIZE, (WPARAM)FALSE, (LPARAM)&sz);
|
||||||
GetWindowRect(GetDlgItem(hDlg, IDC_ABOUT), &rc);
|
GetWindowRect(GetDlgItem(hDlg, IDC_ABOUT), &rc);
|
||||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
|
@ -3040,6 +3040,9 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
case IDC_LOG:
|
case IDC_LOG:
|
||||||
// Place the log Window to the right (or left for RTL) of our dialog on first display
|
// Place the log Window to the right (or left for RTL) of our dialog on first display
|
||||||
if (first_log_display) {
|
if (first_log_display) {
|
||||||
|
// Can't link to dwmapi.lib since it sideloads dwapi.dll *before* we get a chance
|
||||||
|
// to prevent local directory lookup (Sideloading mitigation).
|
||||||
|
PF_TYPE_DECL(WINAPI, HRESULT, DwmGetWindowAttribute, (HWND, DWORD, PVOID, DWORD));
|
||||||
GetClientRect(GetDesktopWindow(), &DesktopRect);
|
GetClientRect(GetDesktopWindow(), &DesktopRect);
|
||||||
GetWindowRect(hLogDialog, &DialogRect);
|
GetWindowRect(hLogDialog, &DialogRect);
|
||||||
nWidth = DialogRect.right - DialogRect.left;
|
nWidth = DialogRect.right - DialogRect.left;
|
||||||
|
@ -3047,11 +3050,14 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
GetWindowRect(hDlg, &DialogRect);
|
GetWindowRect(hDlg, &DialogRect);
|
||||||
offset = GetSystemMetrics(SM_CXBORDER);
|
offset = GetSystemMetrics(SM_CXBORDER);
|
||||||
if (nWindowsVersion >= WINDOWS_10) {
|
if (nWindowsVersion >= WINDOWS_10) {
|
||||||
|
PF_INIT(DwmGetWindowAttribute, Dwmapi);
|
||||||
// See https://stackoverflow.com/a/42491227/1069307
|
// See https://stackoverflow.com/a/42491227/1069307
|
||||||
// I agree with Stephen Hazel: Whoever at Microsoft thought it would be a great idea to
|
// I agree with Stephen Hazel: Whoever at Microsoft thought it would be a great idea to
|
||||||
// add a *FRIGGING INVISIBLE BORDER* in Windows 10 should face the harshest punishment!
|
// add a *FRIGGING INVISIBLE BORDER* in Windows 10 should face the harshest punishment!
|
||||||
DwmGetWindowAttribute(hDlg, DWMWA_EXTENDED_FRAME_BOUNDS, &rc, sizeof(RECT));
|
if (pfDwmGetWindowAttribute != NULL) {
|
||||||
offset += 2 * (DialogRect.left - rc.left);
|
pfDwmGetWindowAttribute(hDlg, DWMWA_EXTENDED_FRAME_BOUNDS, &rc, sizeof(RECT));
|
||||||
|
offset += 2 * (DialogRect.left - rc.left);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (right_to_left_mode)
|
if (right_to_left_mode)
|
||||||
Point.x = max(DialogRect.left - offset - nWidth, 0);
|
Point.x = max(DialogRect.left - offset - nWidth, 0);
|
||||||
|
@ -3723,6 +3729,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
const char* rufus_loc = "rufus.loc";
|
const char* rufus_loc = "rufus.loc";
|
||||||
|
wchar_t kernel32_path[MAX_PATH];
|
||||||
int i, opt, option_index = 0, argc = 0, si = 0, lcid = GetUserDefaultUILanguage();
|
int i, opt, option_index = 0, argc = 0, si = 0, lcid = GetUserDefaultUILanguage();
|
||||||
int wait_for_mutex = 0;
|
int wait_for_mutex = 0;
|
||||||
FILE* fd;
|
FILE* fd;
|
||||||
|
@ -3734,6 +3741,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||||
char *tmp, *locale_name = NULL, **argv = NULL;
|
char *tmp, *locale_name = NULL, **argv = NULL;
|
||||||
wchar_t **wenv, **wargv;
|
wchar_t **wenv, **wargv;
|
||||||
PF_TYPE_DECL(CDECL, int, __wgetmainargs, (int*, wchar_t***, wchar_t***, int, int*));
|
PF_TYPE_DECL(CDECL, int, __wgetmainargs, (int*, wchar_t***, wchar_t***, int, int*));
|
||||||
|
PF_TYPE_DECL(WINAPI, BOOL, SetDefaultDllDirectories, (DWORD));
|
||||||
HANDLE mutex = NULL, hogmutex = NULL, hFile = NULL;
|
HANDLE mutex = NULL, hogmutex = NULL, hFile = NULL;
|
||||||
HWND hDlg = NULL;
|
HWND hDlg = NULL;
|
||||||
HDC hDC;
|
HDC hDC;
|
||||||
|
@ -3749,8 +3757,30 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||||
};
|
};
|
||||||
|
|
||||||
// Disable loading system DLLs from the current directory (sideloading mitigation)
|
// Disable loading system DLLs from the current directory (sideloading mitigation)
|
||||||
|
// PS: You know that official MSDN documentation for SetDllDirectory() that explicitly
|
||||||
|
// indicates that "If the parameter is an empty string (""), the call removes the current
|
||||||
|
// directory from the default DLL search order"? Yeah, that doesn't work. At all.
|
||||||
|
// Still, we invoke it, for platforms where the following call might not work...
|
||||||
SetDllDirectoryA("");
|
SetDllDirectoryA("");
|
||||||
|
|
||||||
|
// Also, even if you use SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32), you're
|
||||||
|
// still going to be brought down if you link to wininet.lib or dwmapi.lib, as these two
|
||||||
|
// perform their DLL invocations before you've had a chance to execute anything.
|
||||||
|
// Of course, this is not something that security "researchers" will bother looking into
|
||||||
|
// to try to help fellow developers, when they can get an ego fix by simply throwing
|
||||||
|
// generic URLs around and deliberately refusing to practice *responsible disclosure*...
|
||||||
|
// Finally, we need to perform the whole gymkhana below, where we can't call on
|
||||||
|
// SetDefaultDllDirectories() directly, because Windows 7 doesn't have the API exposed.
|
||||||
|
GetSystemDirectoryW(kernel32_path, ARRAYSIZE(kernel32_path));
|
||||||
|
wcsncat(kernel32_path, L"\\kernel32.dll", ARRAYSIZE(kernel32_path) - wcslen(kernel32_path) - 1);
|
||||||
|
// NB: Because kernel32 should already be loaded, what we do above to ensure that we
|
||||||
|
// (re)pick the system one is mostly unnecessary. But since for a hammer everything is
|
||||||
|
// a nail...
|
||||||
|
pfSetDefaultDllDirectories = (SetDefaultDllDirectories_t)
|
||||||
|
GetProcAddress(LoadLibraryW(kernel32_path), "SetDefaultDllDirectories");
|
||||||
|
if (pfSetDefaultDllDirectories != NULL)
|
||||||
|
pfSetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32);
|
||||||
|
|
||||||
uprintf("*** " APPLICATION_NAME " init ***\n");
|
uprintf("*** " APPLICATION_NAME " init ***\n");
|
||||||
|
|
||||||
// Reattach the console, if we were started from commandline
|
// Reattach the console, if we were started from commandline
|
||||||
|
|
10
src/rufus.rc
10
src/rufus.rc
|
@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
IDD_DIALOG DIALOGEX 12, 12, 232, 326
|
IDD_DIALOG DIALOGEX 12, 12, 232, 326
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
EXSTYLE WS_EX_ACCEPTFILES
|
EXSTYLE WS_EX_ACCEPTFILES
|
||||||
CAPTION "Rufus 3.0.1307"
|
CAPTION "Rufus 3.0.1308"
|
||||||
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
|
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
|
||||||
|
@ -389,8 +389,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 3,0,1307,0
|
FILEVERSION 3,0,1308,0
|
||||||
PRODUCTVERSION 3,0,1307,0
|
PRODUCTVERSION 3,0,1308,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -407,13 +407,13 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
|
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
|
||||||
VALUE "FileDescription", "Rufus"
|
VALUE "FileDescription", "Rufus"
|
||||||
VALUE "FileVersion", "3.0.1307"
|
VALUE "FileVersion", "3.0.1308"
|
||||||
VALUE "InternalName", "Rufus"
|
VALUE "InternalName", "Rufus"
|
||||||
VALUE "LegalCopyright", "© 2011-2018 Pete Batard (GPL v3)"
|
VALUE "LegalCopyright", "© 2011-2018 Pete Batard (GPL v3)"
|
||||||
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
|
||||||
VALUE "OriginalFilename", "rufus.exe"
|
VALUE "OriginalFilename", "rufus.exe"
|
||||||
VALUE "ProductName", "Rufus"
|
VALUE "ProductName", "Rufus"
|
||||||
VALUE "ProductVersion", "3.0.1307"
|
VALUE "ProductVersion", "3.0.1308"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue