From 513c35a363c89b84b0ec7391450e6c0365560956 Mon Sep 17 00:00:00 2001 From: Detlef Riekenberg Date: Fri, 14 Apr 2006 09:17:06 +0200 Subject: [PATCH] kernel: Load tests again on NT 3.51 (toolhelp API not present). --- dlls/kernel/tests/toolhelp.c | 71 ++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 24 deletions(-) diff --git a/dlls/kernel/tests/toolhelp.c b/dlls/kernel/tests/toolhelp.c index 16fa906c75e..5b96a991cb0 100644 --- a/dlls/kernel/tests/toolhelp.c +++ b/dlls/kernel/tests/toolhelp.c @@ -32,6 +32,15 @@ static char selfname[MAX_PATH]; +/* Some functions are only in later versions of kernel32.dll */ +static HANDLE (WINAPI *pCreateToolhelp32Snapshot)(DWORD, DWORD); +static BOOL (WINAPI *pModule32First)(HANDLE, LPMODULEENTRY32); +static BOOL (WINAPI *pModule32Next)(HANDLE, LPMODULEENTRY32); +static BOOL (WINAPI *pProcess32First)(HANDLE, LPPROCESSENTRY32); +static BOOL (WINAPI *pProcess32Next)(HANDLE, LPPROCESSENTRY32); +static BOOL (WINAPI *pThread32First)(HANDLE, LPTHREADENTRY32); +static BOOL (WINAPI *pThread32Next)(HANDLE, LPTHREADENTRY32); + /* 1 minute should be more than enough */ #define WAIT_TIME (60 * 1000) @@ -100,12 +109,12 @@ static void test_process(DWORD curr_pid, DWORD sub_pcs_pid) unsigned found = 0; int num = 0; - hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); + hSnapshot = pCreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); ok(hSnapshot != NULL, "Cannot create snapshot\n"); /* check that this current process is enumerated */ pe.dwSize = sizeof(pe); - if (Process32First( hSnapshot, &pe )) + if (pProcess32First( hSnapshot, &pe )) { do { @@ -113,13 +122,13 @@ static void test_process(DWORD curr_pid, DWORD sub_pcs_pid) if (pe.th32ProcessID == sub_pcs_pid) found++; trace("PID=%lx %s\n", pe.th32ProcessID, pe.szExeFile); num++; - } while (Process32Next( hSnapshot, &pe )); + } while (pProcess32Next( hSnapshot, &pe )); } ok(found == 2, "couldn't find self and/or sub-process in process list\n"); /* check that first really resets the enumeration */ found = 0; - if (Process32First( hSnapshot, &pe )) + if (pProcess32First( hSnapshot, &pe )) { do { @@ -127,19 +136,19 @@ static void test_process(DWORD curr_pid, DWORD sub_pcs_pid) if (pe.th32ProcessID == sub_pcs_pid) found++; trace("PID=%lx %s\n", pe.th32ProcessID, pe.szExeFile); num--; - } while (Process32Next( hSnapshot, &pe )); + } while (pProcess32Next( hSnapshot, &pe )); } ok(found == 2, "couldn't find self and/or sub-process in process list\n"); ok(!num, "mismatch in counting\n"); te.dwSize = sizeof(te); - ok(!Thread32First( hSnapshot, &te ), "shouldn't return a thread\n"); + ok(!pThread32First( hSnapshot, &te ), "shouldn't return a thread\n"); me.dwSize = sizeof(me); - ok(!Module32First( hSnapshot, &me ), "shouldn't return a module\n"); + ok(!pModule32First( hSnapshot, &me ), "shouldn't return a module\n"); CloseHandle(hSnapshot); - ok(!Process32First( hSnapshot, &pe ), "shouldn't return a process\n"); + ok(!pProcess32First( hSnapshot, &pe ), "shouldn't return a process\n"); } static void test_thread(DWORD curr_pid, DWORD sub_pcs_pid) @@ -152,12 +161,12 @@ static void test_thread(DWORD curr_pid, DWORD sub_pcs_pid) unsigned curr_found = 0; unsigned sub_found = 0; - hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 ); + hSnapshot = pCreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 ); ok(hSnapshot != NULL, "Cannot create snapshot\n"); /* check that this current process is enumerated */ te.dwSize = sizeof(te); - if (Thread32First( hSnapshot, &te )) + if (pThread32First( hSnapshot, &te )) { do { @@ -165,7 +174,7 @@ static void test_thread(DWORD curr_pid, DWORD sub_pcs_pid) if (te.th32OwnerProcessID == sub_pcs_pid) sub_found++; trace("PID=%lx TID=%lx %ld\n", te.th32OwnerProcessID, te.th32ThreadID, te.tpBasePri); num++; - } while (Thread32Next( hSnapshot, &te )); + } while (pThread32Next( hSnapshot, &te )); } ok(curr_found == 1, "couldn't find self in thread list\n"); ok(sub_found == 2, "couldn't find sub-process thread's in thread list\n"); @@ -173,7 +182,7 @@ static void test_thread(DWORD curr_pid, DWORD sub_pcs_pid) /* check that first really resets enumeration */ curr_found = 0; sub_found = 0; - if (Thread32First( hSnapshot, &te )) + if (pThread32First( hSnapshot, &te )) { do { @@ -181,19 +190,19 @@ static void test_thread(DWORD curr_pid, DWORD sub_pcs_pid) if (te.th32OwnerProcessID == sub_pcs_pid) sub_found++; trace("PID=%lx TID=%lx %ld\n", te.th32OwnerProcessID, te.th32ThreadID, te.tpBasePri); num--; - } while (Thread32Next( hSnapshot, &te )); + } while (pThread32Next( hSnapshot, &te )); } ok(curr_found == 1, "couldn't find self in thread list\n"); ok(sub_found == 2, "couldn't find sub-process thread's in thread list\n"); pe.dwSize = sizeof(pe); - ok(!Process32First( hSnapshot, &pe ), "shouldn't return a process\n"); + ok(!pProcess32First( hSnapshot, &pe ), "shouldn't return a process\n"); me.dwSize = sizeof(me); - ok(!Module32First( hSnapshot, &me ), "shouldn't return a module\n"); + ok(!pModule32First( hSnapshot, &me ), "shouldn't return a module\n"); CloseHandle(hSnapshot); - ok(!Thread32First( hSnapshot, &te ), "shouldn't return a thread\n"); + ok(!pThread32First( hSnapshot, &te ), "shouldn't return a thread\n"); } static const char* curr_expected_modules[] = @@ -222,12 +231,12 @@ static void test_module(DWORD pid, const char* expected[], unsigned num_expected ok(NUM_OF(found) >= num_expected, "Internal: bump found[] size\n"); - hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, pid ); + hSnapshot = pCreateToolhelp32Snapshot( TH32CS_SNAPMODULE, pid ); ok(hSnapshot != NULL, "Cannot create snapshot\n"); for (i = 0; i < num_expected; i++) found[i] = 0; me.dwSize = sizeof(me); - if (Module32First( hSnapshot, &me )) + if (pModule32First( hSnapshot, &me )) { do { @@ -237,7 +246,7 @@ static void test_module(DWORD pid, const char* expected[], unsigned num_expected for (i = 0; i < num_expected; i++) if (!strcmp(expected[i], me.szModule)) found[i]++; num++; - } while (Module32Next( hSnapshot, &me )); + } while (pModule32Next( hSnapshot, &me )); } for (i = 0; i < num_expected; i++) ok(found[i] == 1, "Module %s is %s\n", @@ -246,7 +255,7 @@ static void test_module(DWORD pid, const char* expected[], unsigned num_expected /* check that first really resets the enumeration */ for (i = 0; i < num_expected; i++) found[i] = 0; me.dwSize = sizeof(me); - if (Module32First( hSnapshot, &me )) + if (pModule32First( hSnapshot, &me )) { do { @@ -255,7 +264,7 @@ static void test_module(DWORD pid, const char* expected[], unsigned num_expected for (i = 0; i < num_expected; i++) if (!strcmp(expected[i], me.szModule)) found[i]++; num--; - } while (Module32Next( hSnapshot, &me )); + } while (pModule32Next( hSnapshot, &me )); } for (i = 0; i < num_expected; i++) ok(found[i] == 1, "Module %s is %s\n", @@ -263,13 +272,13 @@ static void test_module(DWORD pid, const char* expected[], unsigned num_expected ok(!num, "mismatch in counting\n"); pe.dwSize = sizeof(pe); - ok(!Process32First( hSnapshot, &pe ), "shouldn't return a process\n"); + ok(!pProcess32First( hSnapshot, &pe ), "shouldn't return a process\n"); me.dwSize = sizeof(me); - ok(!Thread32First( hSnapshot, &te ), "shouldn't return a thread\n"); + ok(!pThread32First( hSnapshot, &te ), "shouldn't return a thread\n"); CloseHandle(hSnapshot); - ok(!Module32First( hSnapshot, &me ), "shouldn't return a module\n"); + ok(!pModule32First( hSnapshot, &me ), "shouldn't return a module\n"); } START_TEST(toolhelp) @@ -282,6 +291,20 @@ START_TEST(toolhelp) STARTUPINFOA startup; HANDLE ev1, ev2; DWORD w; + HANDLE hkernel32 = GetModuleHandleA("kernel32"); + + pCreateToolhelp32Snapshot = (VOID *) GetProcAddress(hkernel32, "CreateToolhelp32Snapshot"); + pModule32First = (VOID *) GetProcAddress(hkernel32, "Module32First"); + pModule32Next = (VOID *) GetProcAddress(hkernel32, "Module32Next"); + pProcess32First = (VOID *) GetProcAddress(hkernel32, "Process32First"); + pProcess32Next = (VOID *) GetProcAddress(hkernel32, "Process32Next"); + pThread32First = (VOID *) GetProcAddress(hkernel32, "Thread32First"); + pThread32Next = (VOID *) GetProcAddress(hkernel32, "Thread32Next"); + + if (!pCreateToolhelp32Snapshot || + !pModule32First || !pModule32Next || + !pProcess32First || !pProcess32Next || + !pThread32First || !pThread32Next) return; r = init(); ok(r == 0, "Basic init of sub-process test\n");