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