3 #include <user32/callback.h>
4 #include <user32/accel.h>
12 /* See debug.h for debug/trace constants */
13 DWORD DebugTraceLevel = MIN_TRACE;
17 static ULONG User32TlsIndex;
19 /* To make the linker happy */
20 VOID STDCALL KeBugCheck (ULONG BugCheckCode) {}
22 HWINSTA ProcessWindowStation;
27 return((PUSER32_THREAD_DATA)TlsGetValue(User32TlsIndex));
33 PUSER32_THREAD_DATA ThreadData;
35 ThreadData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
36 sizeof(USER32_THREAD_DATA));
37 TlsSetValue(User32TlsIndex, ThreadData);
43 PUSER32_THREAD_DATA ThreadData;
45 ThreadData = (PUSER32_THREAD_DATA)TlsGetValue(User32TlsIndex);
46 HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY, ThreadData);
47 TlsSetValue(User32TlsIndex, 0);
55 /* Set up the kernel callbacks. */
56 NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_WINDOWPROC] =
57 (PVOID)User32CallWindowProcFromKernel;
58 NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_SENDASYNCPROC] =
59 (PVOID)User32CallSendAsyncProcForKernel;
60 NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_SENDNCCREATE] =
61 (PVOID)User32SendNCCREATEMessageForKernel;
62 NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_SENDCREATE] =
63 (PVOID)User32SendCREATEMessageForKernel;
64 NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_SENDGETMINMAXINFO] =
65 (PVOID)User32SendGETMINMAXINFOMessageForKernel;
66 NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_SENDNCCALCSIZE] =
67 (PVOID)User32SendNCCALCSIZEMessageForKernel;
68 NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_SENDWINDOWPOSCHANGING] =
69 (PVOID)User32SendWINDOWPOSCHANGINGMessageForKernel;
70 NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_SENDWINDOWPOSCHANGED] =
71 (PVOID)User32SendWINDOWPOSCHANGEDMessageForKernel;
72 NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_SENDSTYLECHANGING] =
73 (PVOID)User32SendSTYLECHANGINGMessageForKernel;
74 NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_SENDSTYLECHANGED] =
75 (PVOID)User32SendSTYLECHANGEDMessageForKernel;
76 NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_LOADSYSMENUTEMPLATE] =
77 (PVOID)User32LoadSysMenuTemplateForKernel;
78 NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_LOADDEFAULTCURSORS] =
79 (PVOID)User32SetupDefaultCursors;
81 /* Allocate an index for user32 thread local data. */
82 User32TlsIndex = TlsAlloc();
84 UserSetupInternalPos();
87 RtlInitializeCriticalSection(&U32AccelCacheLock);
89 GdiDllInitialize(NULL, DLL_PROCESS_ATTACH, NULL);
99 GdiDllInitialize(NULL, DLL_PROCESS_DETACH, NULL);
101 TlsFree(User32TlsIndex);
115 D(MAX_TRACE, ("hinstDll (0x%X) dwReason (0x%X)\n", hinstDll, dwReason));
119 case DLL_PROCESS_ATTACH:
120 hProcessHeap = RtlGetProcessHeap();
124 case DLL_THREAD_ATTACH:
127 case DLL_THREAD_DETACH:
130 case DLL_PROCESS_DETACH:
131 DeleteFrameBrushes();