#include <precomp.h>
+static BOOL gbInitialized = FALSE;
extern HGDIOBJ stock_objects[];
BOOL SetStockObjects = FALSE;
PDEVCAPS GdiDevCaps = NULL;
WINAPI
GdiProcessSetup(VOID)
{
- hProcessHeap = GetProcessHeap();
-
- /* map the gdi handle table to user space */
- GdiHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable;
- GdiSharedHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable;
- GdiDevCaps = &GdiSharedHandleTable->DevCaps;
- CurrentProcessId = NtCurrentTeb()->ClientId.UniqueProcess;
- GDI_BatchLimit = (DWORD) NtCurrentTeb()->ProcessEnvironmentBlock->GdiDCAttributeList;
- GdiHandleCache = (PGDIHANDLECACHE)NtCurrentTeb()->ProcessEnvironmentBlock->GdiHandleBuffer;
- RtlInitializeCriticalSection(&semLocal);
- InitializeCriticalSection(&gcsClientObjLinks);
- GdiInitializeLanguagePack(0);
+ if (!gbInitialized)
+ {
+ gbInitialized = TRUE;
+ hProcessHeap = GetProcessHeap();
+
+ /* map the gdi handle table to user space */
+ GdiHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable;
+ GdiSharedHandleTable = NtCurrentTeb()->ProcessEnvironmentBlock->GdiSharedHandleTable;
+ GdiDevCaps = &GdiSharedHandleTable->DevCaps;
+ CurrentProcessId = NtCurrentTeb()->ClientId.UniqueProcess;
+ GDI_BatchLimit = (DWORD) NtCurrentTeb()->ProcessEnvironmentBlock->GdiDCAttributeList;
+ GdiHandleCache = (PGDIHANDLECACHE)NtCurrentTeb()->ProcessEnvironmentBlock->GdiHandleBuffer;
+ RtlInitializeCriticalSection(&semLocal);
+ InitializeCriticalSection(&gcsClientObjLinks);
+ GdiInitializeLanguagePack(0);
+ }
}
VOID