Reactos
1/*
2 * PROJECT: ReactOS API tests
3 * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Test for loading/unloading user32.dll
5 * PROGRAMMERS: Thomas Faber <thomas.faber@reactos.org>
6 */
7
8#include <apitest.h>
9#include <ndk/pstypes.h>
10#include <ndk/rtlfuncs.h>
11
12START_TEST(load)
13{
14 HMODULE hUser32;
15 HMODULE hUser32_2;
16 BOOL Ret;
17 DWORD Error;
18 PPEB Peb = NtCurrentPeb();
19
20 /* Before init */
21 hUser32 = GetModuleHandleW(L"user32");
22 ok(hUser32 == NULL, "hUser32 = %p\n", hUser32);
23 ok(Peb->KernelCallbackTable == NULL, "KernelCallbackTable = %p\n", Peb->KernelCallbackTable);
24 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", Peb->PostProcessInitRoutine);
25
26 SetLastError(12345);
27 hUser32 = LoadLibraryW(L"user32");
28 Error = GetLastError();
29 ok(hUser32 != NULL, "LoadLibrary failed\n");
30 ok(Error != 12345, "Error = %lu\n", Error);
31
32 /* Initialized */
33 hUser32_2 = GetModuleHandleW(L"user32");
34 ok(hUser32_2 == hUser32, "hUser32 = %p\n", hUser32);
35 ok(Peb->KernelCallbackTable != NULL, "KernelCallbackTable = %p\n", Peb->KernelCallbackTable);
36 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", Peb->PostProcessInitRoutine);
37
38 SetLastError(12345);
39 hUser32_2 = LoadLibraryW(L"user32");
40 Error = GetLastError();
41 ok(hUser32_2 == hUser32, "LoadLibrary failed\n");
42 ok(Error == 12345, "Error = %lu\n", Error);
43
44 /* Still initialized */
45 hUser32_2 = GetModuleHandleW(L"user32");
46 ok(hUser32_2 == hUser32, "hUser32 = %p\n", hUser32);
47 ok(Peb->KernelCallbackTable != NULL, "KernelCallbackTable = %p\n", Peb->KernelCallbackTable);
48 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", Peb->PostProcessInitRoutine);
49
50 SetLastError(12345);
51 Ret = FreeLibrary(hUser32);
52 Error = GetLastError();
53 ok(Ret == TRUE, "FreeLibrary returned %d\n", Ret);
54 ok(Error == 12345, "Error = %lu\n", Error);
55
56 /* Still initialized */
57 hUser32_2 = GetModuleHandleW(L"user32");
58 ok(hUser32_2 == hUser32, "hUser32 = %p\n", hUser32);
59 ok(Peb->KernelCallbackTable != NULL, "KernelCallbackTable = %p\n", Peb->KernelCallbackTable);
60 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", Peb->PostProcessInitRoutine);
61
62 SetLastError(12345);
63 Ret = FreeLibrary(hUser32);
64 Error = GetLastError();
65 ok(Ret == TRUE, "FreeLibrary returned %d\n", Ret);
66 ok(Error == 12345, "Error = %lu\n", Error);
67
68 /* Somebody kept an extra reference! */
69 hUser32_2 = GetModuleHandleW(L"user32");
70 ok(hUser32_2 == hUser32, "hUser32 = %p\n", hUser32);
71 ok(Peb->KernelCallbackTable != NULL, "KernelCallbackTable = %p\n", Peb->KernelCallbackTable);
72 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", Peb->PostProcessInitRoutine);
73
74 SetLastError(12345);
75 Ret = FreeLibrary(hUser32);
76 Error = GetLastError();
77 ok(Ret == TRUE, "FreeLibrary returned %d\n", Ret);
78 ok(Error == 12345, "Error = %lu\n", Error);
79
80 /* Uninitialized */
81 hUser32 = GetModuleHandleW(L"user32");
82 ok(hUser32 == NULL, "hUser32 = %p\n", hUser32);
83 ok(Peb->KernelCallbackTable != NULL, "KernelCallbackTable = %p\n", Peb->KernelCallbackTable);
84 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", Peb->PostProcessInitRoutine);
85
86 SetLastError(12345);
87 hUser32 = LoadLibraryW(L"user32");
88 Error = GetLastError();
89 ok(hUser32 != NULL, "LoadLibrary failed\n");
90 ok(Error != 12345, "Error = %lu\n", Error);
91
92 /* Initialized again */
93 hUser32_2 = GetModuleHandleW(L"user32");
94 ok(hUser32_2 == hUser32, "hUser32 = %p\n", hUser32);
95 ok(Peb->KernelCallbackTable != NULL, "KernelCallbackTable = %p\n", Peb->KernelCallbackTable);
96 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", Peb->PostProcessInitRoutine);
97
98 SetLastError(12345);
99 Ret = FreeLibrary(hUser32);
100 Error = GetLastError();
101 ok(Ret == TRUE, "FreeLibrary returned %d\n", Ret);
102 ok(Error == 12345, "Error = %lu\n", Error);
103
104 /* Extra reference again */
105 hUser32_2 = GetModuleHandleW(L"user32");
106 ok(hUser32_2 == hUser32, "hUser32 = %p\n", hUser32);
107 ok(Peb->KernelCallbackTable != NULL, "KernelCallbackTable = %p\n", Peb->KernelCallbackTable);
108 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", Peb->PostProcessInitRoutine);
109
110 SetLastError(12345);
111 Ret = FreeLibrary(hUser32);
112 Error = GetLastError();
113 ok(Ret == TRUE, "FreeLibrary returned %d\n", Ret);
114 ok(Error == 12345, "Error = %lu\n", Error);
115
116 /* Uninitialized again */
117 hUser32 = GetModuleHandleW(L"user32");
118 ok(hUser32 == NULL, "hUser32 = %p\n", hUser32);
119 ok(Peb->KernelCallbackTable != NULL, "KernelCallbackTable = %p\n", Peb->KernelCallbackTable);
120 ok(Peb->PostProcessInitRoutine == NULL, "PostProcessInitRoutine = %p\n", Peb->PostProcessInitRoutine);
121}