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