3 /* FIXME: Belongs to some header. */
4 WINBOOL STDCALL
GdiDllInitialize(HANDLE
, DWORD
, LPVOID
);
5 void InitStockObjects(void);
6 VOID
DeleteFrameBrushes(VOID
);
10 /* See debug.h for debug/trace constants */
11 DWORD DebugTraceLevel
= MIN_TRACE
;
15 extern CRITICAL_SECTION gcsMPH
;
16 static ULONG User32TlsIndex
;
17 HINSTANCE User32Instance
;
18 HWINSTA ProcessWindowStation
;
23 return((PUSER32_THREAD_DATA
)TlsGetValue(User32TlsIndex
));
29 PUSER32_THREAD_DATA ThreadData
;
31 ThreadData
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
,
32 sizeof(USER32_THREAD_DATA
));
33 TlsSetValue(User32TlsIndex
, ThreadData
);
39 PUSER32_THREAD_DATA ThreadData
;
41 ThreadData
= (PUSER32_THREAD_DATA
)TlsGetValue(User32TlsIndex
);
42 HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY
, ThreadData
);
43 TlsSetValue(User32TlsIndex
, 0);
49 /* Set up the kernel callbacks. */
50 NtCurrentTeb()->ProcessEnvironmentBlock
->KernelCallbackTable
[USER32_CALLBACK_WINDOWPROC
] =
51 (PVOID
)User32CallWindowProcFromKernel
;
52 NtCurrentTeb()->ProcessEnvironmentBlock
->KernelCallbackTable
[USER32_CALLBACK_SENDASYNCPROC
] =
53 (PVOID
)User32CallSendAsyncProcForKernel
;
54 NtCurrentTeb()->ProcessEnvironmentBlock
->KernelCallbackTable
[USER32_CALLBACK_LOADSYSMENUTEMPLATE
] =
55 (PVOID
)User32LoadSysMenuTemplateForKernel
;
56 NtCurrentTeb()->ProcessEnvironmentBlock
->KernelCallbackTable
[USER32_CALLBACK_LOADDEFAULTCURSORS
] =
57 (PVOID
)User32SetupDefaultCursors
;
58 NtCurrentTeb()->ProcessEnvironmentBlock
->KernelCallbackTable
[USER32_CALLBACK_HOOKPROC
] =
59 (PVOID
)User32CallHookProcFromKernel
;
61 /* Allocate an index for user32 thread local data. */
62 User32TlsIndex
= TlsAlloc();
67 InitializeCriticalSection(&U32AccelCacheLock
);
68 InitializeCriticalSection(&gcsMPH
);
70 GdiDllInitialize(NULL
, DLL_PROCESS_ATTACH
, NULL
);
77 GdiDllInitialize(NULL
, DLL_PROCESS_DETACH
, NULL
);
79 TlsFree(User32TlsIndex
);
93 case DLL_PROCESS_ATTACH
:
94 User32Instance
= hinstDll
;
95 hProcessHeap
= RtlGetProcessHeap();
99 case DLL_THREAD_ATTACH
:
102 case DLL_THREAD_DETACH
:
105 case DLL_PROCESS_DETACH
:
106 DeleteFrameBrushes();