ReactOS  0.4.15-dev-1386-g5cb9f87
dllmain.c File Reference
#include <precomp.h>
Include dependency graph for dllmain.c:

Go to the source code of this file.

Functions

BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
 
VOID WINAPI GdiProcessSetup (VOID)
 
VOID WINAPI GdiProcessShutdown (VOID)
 
BOOL WINAPI GdiDllInitialize (HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
 

Variables

static BOOL gbInitialized = FALSE
 
HGDIOBJ stock_objects []
 
BOOL SetStockObjects = FALSE
 
PDEVCAPS GdiDevCaps = NULL
 
PGDIHANDLECACHE GdiHandleCache = NULL
 
BOOL gbLpk = FALSE
 
RTL_CRITICAL_SECTION semLocal
 
CRITICAL_SECTION gcsClientObjLinks
 

Function Documentation

◆ DllMain()

BOOL WINAPI DllMain ( HANDLE  hDll,
DWORD  dwReason,
LPVOID  lpReserved 
)

Definition at line 22 of file dllmain.c.

26 {
27  switch (dwReason)
28  {
29  case DLL_PROCESS_ATTACH :
31  break;
32 
33  default:
34  break;
35  }
36  return TRUE;
37 }
#define TRUE
Definition: types.h:120
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
DWORD dwReason
Definition: misc.cpp:154

◆ GdiDllInitialize()

BOOL WINAPI GdiDllInitialize ( HANDLE  hDll,
DWORD  dwReason,
LPVOID  lpReserved 
)

Definition at line 76 of file dllmain.c.

80 {
81  switch (dwReason)
82  {
83  case DLL_PROCESS_ATTACH:
84  {
85  /* Don't bother us for each thread */
86  // DisableThreadLibraryCalls(hDll);
87 
88  /* Initialize the kernel part of GDI first */
89  if (!NtGdiInit()) return FALSE;
90 
91  /* Now initialize ourselves */
93  break;
94  }
95 
96  case DLL_THREAD_ATTACH:
97  {
98  NtCurrentTeb()->GdiTebBatch.Offset = 0;
99  NtCurrentTeb()->GdiBatchCount = 0;
100  break;
101  }
102 
103  case DLL_PROCESS_DETACH:
104  {
105  /* Cleanup */
107  return TRUE;
108  }
109 
110  default:
111  return FALSE;
112  }
113 
114  /* Very simple, the list will fill itself as it is needed */
115  if (!SetStockObjects)
116  {
117  RtlZeroMemory(&stock_objects, NB_STOCK_OBJECTS); // Assume ROS is dirty
119  }
120 
121  return TRUE;
122 }
__kernel_entry W32KAPI BOOL APIENTRY NtGdiInit(VOID)
Definition: init.c:85
#define NB_STOCK_OBJECTS
Definition: ntgdityp.h:192
#define TRUE
Definition: types.h:120
VOID WINAPI GdiProcessShutdown(VOID)
Definition: dllmain.c:64
#define DLL_THREAD_ATTACH
Definition: compat.h:132
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
DWORD dwReason
Definition: misc.cpp:154
VOID WINAPI GdiProcessSetup(VOID)
Definition: dllmain.c:42
#define FALSE
Definition: types.h:117
#define DLL_PROCESS_DETACH
Definition: compat.h:130
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
Definition: psfuncs.h:420
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
BOOL SetStockObjects
Definition: dllmain.c:9
HGDIOBJ stock_objects[]
Definition: gdiobj.c:6

Referenced by DllMain().

◆ GdiProcessSetup()

VOID WINAPI GdiProcessSetup ( VOID  )

Definition at line 42 of file dllmain.c.

43 {
44  if (!gbInitialized)
45  {
48 
49  /* map the gdi handle table to user space */
50  GdiHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable;
51  GdiSharedHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable;
53  CurrentProcessId = NtCurrentTeb()->ClientId.UniqueProcess;
54  GDI_BatchLimit = (DWORD) NtCurrentTeb()->ProcessEnvironmentBlock->GdiDCAttributeList;
55  GdiHandleCache = (PGDIHANDLECACHE)NtCurrentTeb()->ProcessEnvironmentBlock->GdiHandleBuffer;
59  }
60 }
DWORD GDI_BatchLimit
Definition: misc.c:36
#define TRUE
Definition: types.h:120
#define DWORD
Definition: nt_native.h:44
VOID WINAPI GdiInitializeLanguagePack(_In_ DWORD InitParam)
PGDIHANDLECACHE GdiHandleCache
Definition: dllmain.c:11
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
Definition: synch.c:751
CRITICAL_SECTION gcsClientObjLinks
Definition: clientobj.c:10
HANDLE CurrentProcessId
Definition: misc.c:35
#define GdiHandleTable
Definition: win32nt.h:35
struct _GDIHANDLECACHE * PGDIHANDLECACHE
#define GetProcessHeap()
Definition: compat.h:595
NTSYSAPI NTSTATUS NTAPI RtlInitializeCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
static BOOL gbInitialized
Definition: dllmain.c:7
PGDI_SHARED_HANDLE_TABLE GdiSharedHandleTable
Definition: misc.c:34
FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
Definition: psfuncs.h:420
RTL_CRITICAL_SECTION semLocal
Definition: dllmain.c:13
PDEVCAPS GdiDevCaps
Definition: dllmain.c:10
HANDLE hProcessHeap
Definition: kbswitch.c:25

Referenced by ClientThreadSetupHelper(), and GdiDllInitialize().

◆ GdiProcessShutdown()

VOID WINAPI GdiProcessShutdown ( VOID  )

Definition at line 64 of file dllmain.c.

65 {
68 }
CRITICAL_SECTION gcsClientObjLinks
Definition: clientobj.c:10
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
RTL_CRITICAL_SECTION semLocal
Definition: dllmain.c:13
NTSYSAPI NTSTATUS NTAPI RtlDeleteCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)

Referenced by GdiDllInitialize().

Variable Documentation

◆ gbInitialized

BOOL gbInitialized = FALSE
static

Definition at line 7 of file dllmain.c.

Referenced by GdiProcessSetup().

◆ gbLpk

BOOL gbLpk = FALSE

Definition at line 12 of file dllmain.c.

Referenced by GdiInitializeLanguagePack(), and GetFontLanguageInfo().

◆ gcsClientObjLinks

◆ GdiDevCaps

PDEVCAPS GdiDevCaps = NULL

Definition at line 10 of file dllmain.c.

Referenced by GdiProcessSetup(), and GetDeviceCaps().

◆ GdiHandleCache

PGDIHANDLECACHE GdiHandleCache = NULL

Definition at line 11 of file dllmain.c.

Referenced by GdiProcessSetup(), and hGetPEBHandle().

◆ semLocal

Definition at line 13 of file dllmain.c.

Referenced by GdiProcessSetup(), GdiProcessShutdown(), and LoadTheSpoolerDrv().

◆ SetStockObjects

BOOL SetStockObjects = FALSE

Definition at line 9 of file dllmain.c.

Referenced by GdiDllInitialize().

◆ stock_objects

HGDIOBJ stock_objects[]

Definition at line 6 of file gdiobj.c.

Referenced by GdiDllInitialize(), and GetStockObject().