Akihiro Sagawa : kernel32: Return the list of module handles even if the last argument is null.

Alexandre Julliard julliard at winehq.org
Fri Jan 19 15:43:21 CST 2018


Module: wine
Branch: master
Commit: 844ae22fcfcca14ae66bc0f2458a0a2487d56de3
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=844ae22fcfcca14ae66bc0f2458a0a2487d56de3

Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date:   Fri Jan 19 23:50:38 2018 +0900

kernel32: Return the list of module handles even if the last argument is null.

Touhou Shinpiroku relies on this behaviour.

Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/module.c        | 14 ++++++++++----
 dlls/psapi/tests/psapi_main.c |  2 +-
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/dlls/kernel32/module.c b/dlls/kernel32/module.c
index d068f2a..b97c79b 100644
--- a/dlls/kernel32/module.c
+++ b/dlls/kernel32/module.c
@@ -1489,19 +1489,18 @@ BOOL WINAPI K32EnumProcessModules(HANDLE process, HMODULE *lphModule,
                                   DWORD cb, DWORD *needed)
 {
     MODULE_ITERATOR iter;
+    DWORD size = 0;
     INT ret;
 
     if (!init_module_iterator(&iter, process))
         return FALSE;
 
-    if ((cb && !lphModule) || !needed)
+    if (cb && !lphModule)
     {
         SetLastError(ERROR_NOACCESS);
         return FALSE;
     }
 
-    *needed = 0;
-
     while ((ret = module_iterator_next(&iter)) > 0)
     {
         if (cb >= sizeof(HMODULE))
@@ -1509,8 +1508,15 @@ BOOL WINAPI K32EnumProcessModules(HANDLE process, HMODULE *lphModule,
             *lphModule++ = iter.ldr_module.BaseAddress;
             cb -= sizeof(HMODULE);
         }
-        *needed += sizeof(HMODULE);
+        size += sizeof(HMODULE);
+    }
+
+    if (!needed)
+    {
+        SetLastError(ERROR_NOACCESS);
+        return FALSE;
     }
+    *needed = size;
 
     return ret == 0;
 }
diff --git a/dlls/psapi/tests/psapi_main.c b/dlls/psapi/tests/psapi_main.c
index 30059c5..8638d73 100644
--- a/dlls/psapi/tests/psapi_main.c
+++ b/dlls/psapi/tests/psapi_main.c
@@ -132,7 +132,7 @@ static void test_EnumProcessModules(void)
     ret = pEnumProcessModules(hpQV, &hMod, sizeof(HMODULE), NULL);
     ok(!ret, "succeeded\n");
     ok(GetLastError() == ERROR_NOACCESS, "expected error=ERROR_NOACCESS but got %d\n", GetLastError());
-    todo_wine ok(hMod == GetModuleHandleA(NULL),
+    ok(hMod == GetModuleHandleA(NULL),
        "hMod=%p GetModuleHandleA(NULL)=%p\n", hMod, GetModuleHandleA(NULL));
 
     SetLastError(0xdeadbeef);




More information about the wine-cvs mailing list