5 #include <user32/callback.h>
6 #include <user32/accel.h>
10 #define _WIN32K_KAPI_H
17 /* See debug.h for debug/trace constants */
18 DWORD DebugTraceLevel
= MIN_TRACE
;
22 extern CRITICAL_SECTION gcsMPH
;
23 static ULONG User32TlsIndex
;
25 /* To make the linker happy */
26 VOID STDCALL
KeBugCheck (ULONG BugCheckCode
) {}
28 HWINSTA ProcessWindowStation
;
33 return((PUSER32_THREAD_DATA
)TlsGetValue(User32TlsIndex
));
39 PUSER32_THREAD_DATA ThreadData
;
41 ThreadData
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
,
42 sizeof(USER32_THREAD_DATA
));
43 TlsSetValue(User32TlsIndex
, ThreadData
);
49 PUSER32_THREAD_DATA ThreadData
;
51 ThreadData
= (PUSER32_THREAD_DATA
)TlsGetValue(User32TlsIndex
);
52 HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY
, ThreadData
);
53 TlsSetValue(User32TlsIndex
, 0);
61 /* Set up the kernel callbacks. */
62 NtCurrentTeb()->Peb
->KernelCallbackTable
[USER32_CALLBACK_WINDOWPROC
] =
63 (PVOID
)User32CallWindowProcFromKernel
;
64 NtCurrentTeb()->Peb
->KernelCallbackTable
[USER32_CALLBACK_SENDASYNCPROC
] =
65 (PVOID
)User32CallSendAsyncProcForKernel
;
66 NtCurrentTeb()->Peb
->KernelCallbackTable
[USER32_CALLBACK_LOADSYSMENUTEMPLATE
] =
67 (PVOID
)User32LoadSysMenuTemplateForKernel
;
68 NtCurrentTeb()->Peb
->KernelCallbackTable
[USER32_CALLBACK_LOADDEFAULTCURSORS
] =
69 (PVOID
)User32SetupDefaultCursors
;
70 NtCurrentTeb()->Peb
->KernelCallbackTable
[USER32_CALLBACK_HOOKPROC
] =
71 (PVOID
)User32CallHookProcFromKernel
;
73 /* Allocate an index for user32 thread local data. */
74 User32TlsIndex
= TlsAlloc();
79 InitializeCriticalSection(&U32AccelCacheLock
);
80 InitializeCriticalSection(&gcsMPH
);
82 GdiDllInitialize(NULL
, DLL_PROCESS_ATTACH
, NULL
);
92 GdiDllInitialize(NULL
, DLL_PROCESS_DETACH
, NULL
);
94 TlsFree(User32TlsIndex
);
110 case DLL_PROCESS_ATTACH
:
111 hProcessHeap
= RtlGetProcessHeap();
115 case DLL_THREAD_ATTACH
:
118 case DLL_THREAD_DETACH
:
121 case DLL_PROCESS_DETACH
:
122 DeleteFrameBrushes();