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
;
24 HINSTANCE User32Instance
;
26 HWINSTA ProcessWindowStation
;
31 return((PUSER32_THREAD_DATA
)TlsGetValue(User32TlsIndex
));
37 PUSER32_THREAD_DATA ThreadData
;
39 ThreadData
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
,
40 sizeof(USER32_THREAD_DATA
));
41 TlsSetValue(User32TlsIndex
, ThreadData
);
47 PUSER32_THREAD_DATA ThreadData
;
49 ThreadData
= (PUSER32_THREAD_DATA
)TlsGetValue(User32TlsIndex
);
50 HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY
, ThreadData
);
51 TlsSetValue(User32TlsIndex
, 0);
57 /* Set up the kernel callbacks. */
58 NtCurrentTeb()->Peb
->KernelCallbackTable
[USER32_CALLBACK_WINDOWPROC
] =
59 (PVOID
)User32CallWindowProcFromKernel
;
60 NtCurrentTeb()->Peb
->KernelCallbackTable
[USER32_CALLBACK_SENDASYNCPROC
] =
61 (PVOID
)User32CallSendAsyncProcForKernel
;
62 NtCurrentTeb()->Peb
->KernelCallbackTable
[USER32_CALLBACK_LOADSYSMENUTEMPLATE
] =
63 (PVOID
)User32LoadSysMenuTemplateForKernel
;
64 NtCurrentTeb()->Peb
->KernelCallbackTable
[USER32_CALLBACK_LOADDEFAULTCURSORS
] =
65 (PVOID
)User32SetupDefaultCursors
;
66 NtCurrentTeb()->Peb
->KernelCallbackTable
[USER32_CALLBACK_HOOKPROC
] =
67 (PVOID
)User32CallHookProcFromKernel
;
69 /* Allocate an index for user32 thread local data. */
70 User32TlsIndex
= TlsAlloc();
75 InitializeCriticalSection(&U32AccelCacheLock
);
76 InitializeCriticalSection(&gcsMPH
);
78 GdiDllInitialize(NULL
, DLL_PROCESS_ATTACH
, NULL
);
85 GdiDllInitialize(NULL
, DLL_PROCESS_DETACH
, NULL
);
87 TlsFree(User32TlsIndex
);
101 case DLL_PROCESS_ATTACH
:
102 User32Instance
= hinstDll
;
103 hProcessHeap
= RtlGetProcessHeap();
107 case DLL_THREAD_ATTACH
:
110 case DLL_THREAD_DETACH
:
113 case DLL_PROCESS_DETACH
:
114 DeleteFrameBrushes();