Qian Hong : kernel32: Fixed buffer size on 64bit in IsWow64Process.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Jan 16 14:12:31 CST 2015
Module: wine
Branch: master
Commit: bfd088dbc6b4f397d9adfbc11a6f878ac0e8fd7c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=bfd088dbc6b4f397d9adfbc11a6f878ac0e8fd7c
Author: Qian Hong <qhong at codeweavers.com>
Date: Sat Jan 17 02:17:31 2015 +0800
kernel32: Fixed buffer size on 64bit in IsWow64Process.
---
dlls/kernel32/process.c | 2 +-
dlls/kernel32/tests/process.c | 57 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 58 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index 0a087ab..396b7d4 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -3755,7 +3755,7 @@ DWORD WINAPI RegisterServiceProcess(DWORD dwProcessId, DWORD dwType)
*/
BOOL WINAPI IsWow64Process(HANDLE hProcess, PBOOL Wow64Process)
{
- ULONG pbi;
+ ULONG_PTR pbi;
NTSTATUS status;
status = NtQueryInformationProcess( hProcess, ProcessWow64Information, &pbi, sizeof(pbi), NULL );
diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c
index 218a0d3..d7d3148 100644
--- a/dlls/kernel32/tests/process.c
+++ b/dlls/kernel32/tests/process.c
@@ -1863,6 +1863,62 @@ static void test_Handles(void)
SetStdHandle( STD_ERROR_HANDLE, handle );
}
+static void test_IsWow64Process(void)
+{
+ PROCESS_INFORMATION pi;
+ STARTUPINFOA si;
+ DWORD ret;
+ BOOL is_wow64;
+ static char cmdline[] = "C:\\Program Files\\Internet Explorer\\iexplore.exe";
+ static char cmdline_wow64[] = "C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe";
+
+ if (!pIsWow64Process)
+ {
+ skip("IsWow64Process is not available\n");
+ return;
+ }
+
+ memset(&si, 0, sizeof(si));
+ si.cb = sizeof(si);
+ si.dwFlags = STARTF_USESHOWWINDOW;
+ si.wShowWindow = SW_HIDE;
+ ret = CreateProcessA(NULL, cmdline_wow64, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
+ if (ret)
+ {
+ trace("Created process %s\n", cmdline_wow64);
+ is_wow64 = FALSE;
+ ret = pIsWow64Process(pi.hProcess, &is_wow64);
+ ok(ret, "IsWow64Process failed.\n");
+ ok(is_wow64, "is_wow64 returned FALSE.\n");
+
+ ret = TerminateProcess(pi.hProcess, 0);
+ ok(ret, "TerminateProcess error\n");
+
+ CloseHandle(pi.hProcess);
+ CloseHandle(pi.hThread);
+ }
+
+ memset(&si, 0, sizeof(si));
+ si.cb = sizeof(si);
+ si.dwFlags = STARTF_USESHOWWINDOW;
+ si.wShowWindow = SW_HIDE;
+ ret = CreateProcessA(NULL, cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
+ if (ret)
+ {
+ trace("Created process %s\n", cmdline);
+ is_wow64 = TRUE;
+ ret = pIsWow64Process(pi.hProcess, &is_wow64);
+ ok(ret, "IsWow64Process failed.\n");
+ ok(!is_wow64, "is_wow64 returned TRUE.\n");
+
+ ret = TerminateProcess(pi.hProcess, 0);
+ ok(ret, "TerminateProcess error\n");
+
+ CloseHandle(pi.hProcess);
+ CloseHandle(pi.hThread);
+ }
+}
+
static void test_SystemInfo(void)
{
SYSTEM_INFO si, nsi;
@@ -2089,6 +2145,7 @@ START_TEST(process)
test_QueryFullProcessImageNameA();
test_QueryFullProcessImageNameW();
test_Handles();
+ test_IsWow64Process();
test_SystemInfo();
test_RegistryQuota();
test_DuplicateHandle();
More information about the wine-cvs
mailing list