ReactOS 0.4.15-dev-8339-g4028de8
dllmain.c
Go to the documentation of this file.
1/*
2 * dllmain.c
3 */
4
5#include <precomp.h>
6
15
16/*
17 * GDI32.DLL does have an entry point for DisableThreadLibraryCalls().
18 * The initialization is done by a call to GdiDllInitialize(). This
19 * call is done from the entry point of USER32.DLL.
20 */
21BOOL
24 _In_ HANDLE hDll,
26 _In_opt_ PVOID pReserved)
27{
28 UNREFERENCED_PARAMETER(pReserved);
29
30 switch (dwReason)
31 {
34 break;
35
36 default:
37 break;
38 }
39 return TRUE;
40}
41
42
43VOID
46{
47 if (!gbInitialized)
48 {
51
52 /* map the gdi handle table to user space */
53 GdiHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable;
54 GdiSharedHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable;
56 CurrentProcessId = NtCurrentTeb()->ClientId.UniqueProcess;
57 GDI_BatchLimit = (DWORD) NtCurrentTeb()->ProcessEnvironmentBlock->GdiDCAttributeList;
58 GdiHandleCache = (PGDIHANDLECACHE)NtCurrentTeb()->ProcessEnvironmentBlock->GdiHandleBuffer;
62 }
63}
64
65VOID
68{
71}
72
73
74/*
75 * @implemented
76 */
77BOOL
80 _In_ HANDLE hDll,
82 _In_opt_ PVOID pReserved)
83{
84 UNREFERENCED_PARAMETER(pReserved);
85
86 switch (dwReason)
87 {
89 {
90 /* Don't bother us for each thread */
91 // DisableThreadLibraryCalls(hDll);
92
93 /* Initialize the kernel part of GDI first */
94 if (!NtGdiInit()) return FALSE;
95
96 /* Now initialize ourselves */
98 break;
99 }
100
102 {
103 NtCurrentTeb()->GdiTebBatch.Offset = 0;
104 NtCurrentTeb()->GdiBatchCount = 0;
105 break;
106 }
107
109 {
110 /* Cleanup */
112 return TRUE;
113 }
114
115 default:
116 return FALSE;
117 }
118
119 /* Very simple, the list will fill itself as it is needed */
120 if (!SetStockObjects)
121 {
122 RtlZeroMemory(&stock_objects, NB_STOCK_OBJECTS); // Assume ROS is dirty
124 }
125
126 return TRUE;
127}
128
129/* EOF */
DWORD dwReason
Definition: misc.cpp:154
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
BOOL WINAPI DllMain(HINSTANCE hDLLInst, DWORD fdwReason, LPVOID lpvReserved)
Definition: dllmain.c:52
#define GetProcessHeap()
Definition: compat.h:736
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
#define DLL_THREAD_ATTACH
Definition: compat.h:132
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
unsigned int BOOL
Definition: ntddk_ex.h:94
HANDLE CurrentProcessId
Definition: misc.c:35
VOID WINAPI GdiInitializeLanguagePack(_In_ DWORD InitParam)
PGDI_SHARED_HANDLE_TABLE GdiSharedHandleTable
Definition: misc.c:34
DWORD GDI_BatchLimit
Definition: misc.c:36
#define NtCurrentTeb
HANDLE hProcessHeap
Definition: kbswitch.c:37
#define _In_
Definition: ms_sal.h:308
#define _In_opt_
Definition: ms_sal.h:309
NTSYSAPI NTSTATUS NTAPI RtlDeleteCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI NTSTATUS NTAPI RtlInitializeCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
#define DWORD
Definition: nt_native.h:44
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
__kernel_entry W32KAPI BOOL APIENTRY NtGdiInit(VOID)
Definition: init.c:107
struct _GDIHANDLECACHE * PGDIHANDLECACHE
#define NB_STOCK_OBJECTS
Definition: ntgdityp.h:192
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
Definition: synch.c:751
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
uint32_t ULONG
Definition: typedefs.h:59
#define GdiHandleTable
Definition: win32nt.h:37
VOID WINAPI GdiProcessShutdown(VOID)
Definition: dllmain.c:67
BOOL gbLpk
Definition: dllmain.c:12
RTL_CRITICAL_SECTION semLocal
Definition: dllmain.c:13
HGDIOBJ stock_objects[]
Definition: gdiobj.c:6
BOOL WINAPI GdiDllInitialize(_In_ HANDLE hDll, _In_ ULONG dwReason, _In_opt_ PVOID pReserved)
Definition: dllmain.c:79
CRITICAL_SECTION gcsClientObjLinks
Definition: clientobj.c:10
VOID WINAPI GdiProcessSetup(VOID)
Definition: dllmain.c:45
BOOL SetStockObjects
Definition: dllmain.c:9
PDEVCAPS GdiDevCaps
Definition: dllmain.c:10
static BOOL gbInitialized
Definition: dllmain.c:7
PGDIHANDLECACHE GdiHandleCache
Definition: dllmain.c:11
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define WINAPI
Definition: msvc.h:6