* Sync up to trunk head (r60691).
[reactos.git] / win32ss / gdi / gdi32 / main / dllmain.c
1 /*
2 * dllmain.c
3 */
4
5 #include <precomp.h>
6
7 extern HGDIOBJ stock_objects[];
8 BOOL SetStockObjects = FALSE;
9 PDEVCAPS GdiDevCaps = NULL;
10 PGDIHANDLECACHE GdiHandleCache = NULL;
11 BOOL gbLpk = FALSE;
12 RTL_CRITICAL_SECTION semLocal;
13
14 /*
15 * GDI32.DLL does have an entry point for disable threadlibrarycall,. The initialization is done by a call
16 * to GdiDllInitialize(). This call is done from the entry point of USER32.DLL.
17 */
18 BOOL
19 WINAPI
20 DllMain (
21 HANDLE hDll,
22 DWORD dwReason,
23 LPVOID lpReserved)
24 {
25 switch (dwReason)
26 {
27 case DLL_PROCESS_ATTACH :
28 DisableThreadLibraryCalls(hDll);
29 break;
30
31 default:
32 break;
33 }
34 return TRUE;
35 }
36
37
38 VOID
39 WINAPI
40 GdiProcessSetup (VOID)
41 {
42 hProcessHeap = GetProcessHeap();
43
44 /* map the gdi handle table to user space */
45 GdiHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable;
46 GdiSharedHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable;
47 GdiDevCaps = &GdiSharedHandleTable->DevCaps;
48 CurrentProcessId = NtCurrentTeb()->ClientId.UniqueProcess;
49 GDI_BatchLimit = (DWORD) NtCurrentTeb()->ProcessEnvironmentBlock->GdiDCAttributeList;
50 GdiHandleCache = (PGDIHANDLECACHE)NtCurrentTeb()->ProcessEnvironmentBlock->GdiHandleBuffer;
51 RtlInitializeCriticalSection(&semLocal);
52 }
53
54
55 /*
56 * @implemented
57 */
58 BOOL
59 WINAPI
60 GdiDllInitialize (
61 HANDLE hDll,
62 DWORD dwReason,
63 LPVOID lpReserved)
64 {
65 switch (dwReason)
66 {
67 case DLL_PROCESS_ATTACH:
68 GdiProcessSetup ();
69 break;
70
71 case DLL_THREAD_ATTACH:
72 NtCurrentTeb()->GdiTebBatch.Offset = 0;
73 NtCurrentTeb()->GdiBatchCount = 0;
74 break;
75
76 default:
77 return FALSE;
78 }
79
80 // Very simple, the list will fill itself as it is needed.
81 if(!SetStockObjects)
82 {
83 RtlZeroMemory( &stock_objects, NB_STOCK_OBJECTS); //Assume Ros is dirty.
84 SetStockObjects = TRUE;
85 }
86
87 return TRUE;
88 }
89
90 /* EOF */