Change all Init functions to be NTAPI instead of FASTCALL, return NTSTATUS, and be an INIT_FUNCTION (saving incredible 2k). Simplify the initialization sequence by using a simple macro. Delete a comment that is not true anymore.
Move some globals to appropriate file.

svn path=/trunk/; revision=49455
This commit is contained in:
Timo Kreuzer 2010-11-03 00:51:19 +00:00
parent 85e5b5be56
commit 6cfc0da40b
42 changed files with 189 additions and 214 deletions

View file

@ -20,15 +20,16 @@ static PGRAPHICS_DEVICE gpGraphicsDeviceLast = NULL;
static HSEMAPHORE ghsemGraphicsDeviceList;
static ULONG giDevNum = 1;
BOOL
INIT_FUNCTION
NTSTATUS
NTAPI
InitDeviceImpl()
{
ghsemGraphicsDeviceList = EngCreateSemaphore();
if (!ghsemGraphicsDeviceList)
return FALSE;
return STATUS_INSUFFICIENT_RESOURCES;
return TRUE;
return STATUS_SUCCESS;
}

View file

@ -26,7 +26,8 @@ LDEVOBJ *gpldevWin32k = NULL;
/** Private functions *********************************************************/
BOOL
INIT_FUNCTION
NTSTATUS
NTAPI
InitLDEVImpl()
{
@ -34,7 +35,7 @@ InitLDEVImpl()
ghsemLDEVList = EngCreateSemaphore();
if (!ghsemLDEVList)
{
return FALSE;
return STATUS_INSUFFICIENT_RESOURCES;
}
/* Allocate a LDEVOBJ for win32k */
@ -44,7 +45,7 @@ InitLDEVImpl()
GDITAG_LDEV);
if (!gpldevWin32k)
{
return FALSE;
return STATUS_NO_MEMORY;
}
/* Initialize the LDEVOBJ for win32k */
@ -62,7 +63,7 @@ InitLDEVImpl()
gpldevWin32k->pGdiDriverInfo->ExportSectionPointer = NULL;
gpldevWin32k->pGdiDriverInfo->ImageLength = 0; // FIXME;
return TRUE;
return STATUS_SUCCESS;
}
PLDEVOBJ

View file

@ -18,12 +18,14 @@ PPDEVOBJ gppdevPrimary = NULL;
static PPDEVOBJ gppdevList = NULL;
static HSEMAPHORE ghsemPDEV;
BOOL
INIT_FUNCTION
NTSTATUS
NTAPI
InitPDEVImpl()
{
ghsemPDEV = EngCreateSemaphore();
return TRUE;
if (!ghsemPDEV) return STATUS_INSUFFICIENT_RESOURCES;
return STATUS_SUCCESS;
}

View file

@ -634,11 +634,13 @@ EXLATEOBJ_vCleanup(PEXLATEOBJ pexlo)
pexlo->xlo.pulXlate = pexlo->aulXlate;
}
VOID
INIT_FUNCTION
NTSTATUS
NTAPI
InitXlateImpl(VOID)
{
EXLATEOBJ_vInitTrivial(&gexloTrivial);
return STATUS_SUCCESS;
}

View file

@ -11,7 +11,9 @@ typedef struct _ACCELERATOR_TABLE
LPACCEL Table;
} ACCELERATOR_TABLE, *PACCELERATOR_TABLE;
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
InitAcceleratorImpl(VOID);
NTSTATUS FASTCALL

View file

@ -159,7 +159,7 @@ typedef struct _DC
extern PDC defaultDCstate;
NTSTATUS FASTCALL InitDcImpl(VOID);
INIT_FUNCTION NTSTATUS NTAPI InitDcImpl();
PPDEVOBJ FASTCALL IntEnumHDev(VOID);
PDC NTAPI DC_AllocDcWithHandle();
VOID FASTCALL DC_InitDC(HDC DCToInit);

View file

@ -45,7 +45,9 @@ typedef struct _SHELL_HOOK_WINDOW
HWND hWnd;
} SHELL_HOOK_WINDOW, *PSHELL_HOOK_WINDOW;
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
InitDesktopImpl(VOID);
NTSTATUS FASTCALL

View file

@ -30,7 +30,8 @@ EngpRegisterGraphicsDevice(
PUNICODE_STRING pustrDescription,
PDEVMODEW pdmDefault);
BOOL
INIT_FUNCTION
NTSTATUS
NTAPI
InitDeviceImpl();

View file

@ -59,6 +59,8 @@ enum BASEFLAGS
BASEFLAG_READY_TO_DIE = 0x1000
};
extern PSECTION_OBJECT GdiTableSection;
BOOL INTERNAL_CALL GDIOBJ_OwnedByCurrentProcess(HGDIOBJ ObjectHandle);
BOOL INTERNAL_CALL GDIOBJ_SetOwnership(HGDIOBJ ObjectHandle, PEPROCESS Owner);
BOOL INTERNAL_CALL GDIOBJ_CopyOwnership(HGDIOBJ CopyFrom, HGDIOBJ CopyTo);
@ -75,6 +77,11 @@ VOID INTERNAL_CALL GDIOBJ_LockMultipleObjs(ULONG ulCount, IN HGDIOBJ* ahObj, OUT
PVOID INTERNAL_CALL GDI_MapHandleTable(PSECTION_OBJECT SectionObject, PEPROCESS Process);
INIT_FUNCTION
NTSTATUS
NTAPI
InitGdiHandleTable();
#define GDIOBJ_GetObjectType(Handle) \
GDI_HANDLE_GET_TYPE(Handle)

View file

@ -4,6 +4,9 @@ BOOL FASTCALL co_IntGraphicsCheck(BOOL Create);
BOOL FASTCALL IntCreatePrimarySurface(VOID);
VOID FASTCALL IntDestroyPrimarySurface(VOID);
NTSTATUS FASTCALL InitGuiCheckImpl (VOID);
INIT_FUNCTION
NTSTATUS
NTAPI
InitGuiCheckImpl (VOID);
/* EOF */

View file

@ -13,7 +13,9 @@ typedef struct _HOT_KEY_ITEM
UINT vk;
} HOT_KEY_ITEM, *PHOT_KEY_ITEM;
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
InitHotkeyImpl(VOID);
//NTSTATUS FASTCALL

View file

@ -27,10 +27,16 @@ extern PATTACHINFO gpai;
#define KBL_PRELOAD 2
#define KBL_RESET 4
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
InitInputImpl(VOID);
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
InitKeyboardImpl(VOID);
PUSER_MESSAGE_QUEUE W32kGetPrimitiveMessageQueue(VOID);
VOID W32kUnregisterPrimitiveMessageQueue(VOID);
PKBL W32kGetDefaultKeyLayout(VOID);

View file

@ -82,32 +82,6 @@ IntEngGradientFill(SURFOBJ *psoDest,
POINTL *pptlDitherOrg,
ULONG ulMode);
VOID InitXlateImpl(VOID);
XLATEOBJ* FASTCALL
IntEngCreateXlate(USHORT DestPalType,
USHORT SourcePalType,
HPALETTE PaletteDest,
HPALETTE PaletteSource);
XLATEOBJ* FASTCALL
IntEngCreateMonoXlate(USHORT SourcePalType,
HPALETTE PaletteDest,
HPALETTE PaletteSource,
ULONG BackgroundColor);
XLATEOBJ* FASTCALL
IntEngCreateSrcMonoXlate(HPALETTE PaletteDest,
ULONG Color0,
ULONG Color1);
XLATEOBJ*
IntCreateBrushXlate(BRUSH *pbrush, SURFACE * psurf, COLORREF crBackgroundClr);
HPALETTE FASTCALL
IntEngGetXlatePalette(XLATEOBJ *XlateObj,
ULONG Palette);
BOOL APIENTRY
IntEngPolyline(SURFOBJ *DestSurf,
CLIPOBJ *Clip,

View file

@ -63,7 +63,8 @@ LDEVOBJ_pdmiGetModes(
PLDEVOBJ pldev,
HANDLE hDriver);
BOOL
INIT_FUNCTION
NTSTATUS
NTAPI
InitLDEVImpl();

View file

@ -104,7 +104,9 @@ IntInsertMenuItem(PMENU_OBJECT MenuObject, UINT uItem, BOOL fByPosition,
PROSMENUITEMINFO ItemInfo);
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
InitMenuImpl(VOID);
NTSTATUS FASTCALL

View file

@ -32,7 +32,10 @@ typedef struct _MONITOR
} MONITOR, *PMONITOR;
/* functions */
NTSTATUS InitMonitorImpl();
INIT_FUNCTION
NTSTATUS
NTAPI
InitMonitorImpl();
NTSTATUS CleanupMonitorImpl();
NTSTATUS IntAttachMonitor(PDEVOBJ *pGdiDevice, ULONG DisplayNumber);

View file

@ -138,7 +138,9 @@ VOID FASTCALL
MsqDestroyMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue);
PUSER_MESSAGE_QUEUE FASTCALL
MsqGetHardwareMessageQueue(VOID);
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
MsqInitializeImpl(VOID);
BOOLEAN FASTCALL
co_MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue);

View file

@ -11,7 +11,7 @@
extern PSERVERINFO gpsi;
NTSTATUS FASTCALL InitUserImpl(VOID);
INIT_FUNCTION NTSTATUS NTAPI InitUserImpl(VOID);
VOID FASTCALL CleanupUserImpl(VOID);
VOID FASTCALL UserEnterShared(VOID);
VOID FASTCALL UserEnterExclusive(VOID);

View file

@ -74,8 +74,7 @@ HPALETTE FASTCALL PALETTE_AllocPaletteIndexedRGB(ULONG NumColors,
GDIOBJ_ShareUnlockObjByPtr(&ppal->BaseObject)
BOOL INTERNAL_CALL PALETTE_Cleanup(PVOID ObjectBody);
HPALETTE FASTCALL PALETTE_Init (VOID);
INIT_FUNCTION NTSTATUS NTAPI InitPaletteImpl();
VOID FASTCALL PALETTE_ValidateFlags (PALETTEENTRY* lpPalE, INT size);
INT FASTCALL PALETTE_ToPhysical (PDC dc, COLORREF color);

View file

@ -174,18 +174,11 @@ PDEVOBJ_vGetDeviceCaps(
PPDEVOBJ ppdev,
PDEVCAPS pDevCaps);
BOOL
INIT_FUNCTION
NTSTATUS
NTAPI
InitPDEVImpl();
BOOL
NTAPI
InitLDEVImpl();
BOOL
NTAPI
InitDeviceImpl();
PSIZEL
FASTCALL
PDEVOBJ_sizl(PPDEVOBJ, PSIZEL);

View file

@ -26,7 +26,10 @@ typedef struct _TIMER
extern PKTIMER MasterTimer;
NTSTATUS FASTCALL InitTimerImpl(VOID);
INIT_FUNCTION
NTSTATUS
NTAPI
InitTimerImpl(VOID);
BOOL FASTCALL DestroyTimersForThread(PTHREADINFO pti);
BOOL FASTCALL DestroyTimersForWindow(PTHREADINFO pti, PWND Window);
BOOL FASTCALL IntKillTimer(PWND Window, UINT_PTR IDEvent, BOOL SystemTimer);

View file

@ -11,6 +11,9 @@
#pragma once
#define INTERNAL_CALL APIENTRY
#define PLACE_IN_SECTION(s) __attribute__((section(s)))
#define INIT_FUNCTION PLACE_IN_SECTION("INIT")
/* Internal Win32k Headers */
#include <include/accelerator.h>
#include <include/clipboard.h>

View file

@ -50,7 +50,9 @@ IntIsWindow(HWND hWnd);
HWND* FASTCALL
IntWinListChildren(PWND Window);
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
InitWindowImpl (VOID);
NTSTATUS FASTCALL

View file

@ -62,7 +62,9 @@ typedef struct _WINSTATION_OBJECT
extern WINSTATION_OBJECT *InputWindowStation;
extern PPROCESSINFO LogonProcess;
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
InitWindowStationImpl(VOID);
NTSTATUS FASTCALL

View file

@ -47,5 +47,9 @@ VOID NTAPI EXLATEOBJ_vInitialize(PEXLATEOBJ pexlo, PALETTE *ppalSrc, PALETTE *pp
VOID NTAPI EXLATEOBJ_vInitXlateFromDCs(PEXLATEOBJ pexlo, PDC pdcSrc, PDC pdcDst);
VOID NTAPI EXLATEOBJ_vInitSrcMonoXlate(PEXLATEOBJ pexlo, PPALETTE ppalDst, ULONG Color0, ULONG Color1);
VOID NTAPI EXLATEOBJ_vCleanup(PEXLATEOBJ pexlo);
INIT_FUNCTION
NTSTATUS
NTAPI
InitXlateImpl(VOID);
//#define XLATEOBJ_iXlate(pxo, Color) ((EXLATEOBJ*)pxo)->pfnXlate(pxo, Color)

View file

@ -16,17 +16,12 @@ HANDLE hModuleWin;
PGDI_HANDLE_TABLE INTERNAL_CALL GDIOBJ_iAllocHandleTable(OUT PSECTION_OBJECT *SectionObject);
BOOL INTERNAL_CALL GDI_CleanupForProcess (struct _EPROCESS *Process);
/* FIXME */
PGDI_HANDLE_TABLE GdiHandleTable = NULL;
PSECTION_OBJECT GdiTableSection = NULL;
HANDLE GlobalUserHeap = NULL;
PSECTION_OBJECT GlobalUserHeapSection = NULL;
PSERVERINFO gpsi = NULL; // Global User Server Information.
HSEMAPHORE hsemDriverMgmt = NULL;
SHORT gusLanguageID;
extern ULONG_PTR Win32kSSDT[];
@ -315,8 +310,6 @@ CLEANUP:
END_CLEANUP;
}
/* Only used in ntuser/input.c KeyboardThreadMain(). If it's
not called there anymore, please delete */
NTSTATUS
Win32kInitWin32Thread(PETHREAD Thread)
{
@ -354,11 +347,22 @@ Win32kInitWin32Thread(PETHREAD Thread)
C_ASSERT(sizeof(SERVERINFO) <= PAGE_SIZE);
// Return on failure
#define NT_ROF(x) \
Status = (x); \
if (!NT_SUCCESS(Status)) \
{ \
DPRINT1("Failed '%s' (0x%lx)\n", #x, Status); \
return Status; \
}
/*
* This definition doesn't work
*/
NTSTATUS APIENTRY
DriverEntry (
INIT_FUNCTION
NTSTATUS
APIENTRY
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath)
{
@ -407,146 +411,48 @@ DriverEntry (
}
/* Allocate global server info structure */
gpsi = UserHeapAlloc(sizeof(SERVERINFO));
if (!gpsi)
{
gpsi = UserHeapAlloc(sizeof(SERVERINFO));
if (gpsi)
{
RtlZeroMemory(gpsi, sizeof(SERVERINFO));
DPRINT("Global Server Data -> %x\n", gpsi);
}
else
{
ASSERT(FALSE);
}
}
if(!hsemDriverMgmt) hsemDriverMgmt = EngCreateSemaphore();
/* Create the GDI handle table */
GdiHandleTable = GDIOBJ_iAllocHandleTable(&GdiTableSection);
if (GdiHandleTable == NULL)
{
DPRINT1("Failed to initialize the GDI handle table.\n");
DPRINT1("Failed allocate server info structure!\n");
return STATUS_UNSUCCESSFUL;
}
/* Initialize default palettes */
PALETTE_Init();
RtlZeroMemory(gpsi, sizeof(SERVERINFO));
DPRINT("Global Server Data -> %x\n", gpsi);
NT_ROF(InitGdiHandleTable());
NT_ROF(InitPaletteImpl());
/* Create stock objects, ie. precreated objects commonly
used by win32 applications */
CreateStockObjects();
CreateSysColorObjects();
InitXlateImpl();
InitPDEVImpl();
InitLDEVImpl();
InitDeviceImpl();
Status = InitDcImpl();
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to initialize Device context implementation!\n");
return STATUS_UNSUCCESSFUL;
}
Status = InitUserImpl();
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to initialize user implementation!\n");
return STATUS_UNSUCCESSFUL;
}
Status = InitHotkeyImpl();
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to initialize hotkey implementation!\n");
return STATUS_UNSUCCESSFUL;
}
Status = InitWindowStationImpl();
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to initialize window station implementation!\n");
return STATUS_UNSUCCESSFUL;
}
Status = InitDesktopImpl();
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to initialize desktop implementation!\n");
return STATUS_UNSUCCESSFUL;
}
Status = InitWindowImpl();
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to initialize window implementation!\n");
return STATUS_UNSUCCESSFUL;
}
Status = InitMenuImpl();
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to initialize menu implementation!\n");
return STATUS_UNSUCCESSFUL;
}
Status = InitInputImpl();
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to initialize input implementation.\n");
return(Status);
}
Status = InitKeyboardImpl();
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to initialize keyboard implementation.\n");
return(Status);
}
Status = InitMonitorImpl();
if (!NT_SUCCESS(Status))
{
DbgPrint("Failed to initialize monitor implementation!\n");
return STATUS_UNSUCCESSFUL;
}
Status = MsqInitializeImpl();
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to initialize message queue implementation.\n");
return(Status);
}
Status = InitTimerImpl();
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to initialize timer implementation.\n");
return(Status);
}
Status = InitAcceleratorImpl();
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to initialize accelerator implementation.\n");
return(Status);
}
Status = InitGuiCheckImpl();
if (!NT_SUCCESS(Status))
{
DPRINT1("Failed to initialize GUI check implementation.\n");
return(Status);
}
NT_ROF(InitXlateImpl());
NT_ROF(InitPDEVImpl());
NT_ROF(InitLDEVImpl());
NT_ROF(InitDeviceImpl());
NT_ROF(InitDcImpl());
NT_ROF(InitUserImpl());
NT_ROF(InitHotkeyImpl());
NT_ROF(InitWindowStationImpl());
NT_ROF(InitDesktopImpl());
NT_ROF(InitWindowImpl());
NT_ROF(InitMenuImpl());
NT_ROF(InitInputImpl());
NT_ROF(InitKeyboardImpl());
NT_ROF(InitMonitorImpl());
NT_ROF(MsqInitializeImpl());
NT_ROF(InitTimerImpl());
NT_ROF(InitAcceleratorImpl());
NT_ROF(InitGuiCheckImpl());
/* Initialize FreeType library */
if (!InitFontSupport())
{
DPRINT1("Unable to initialize font support\n");
return STATUS_UNSUCCESSFUL;
return Status;
}
gusLanguageID = IntGdiGetLanguageID();

View file

@ -56,7 +56,9 @@
/* FUNCTIONS *****************************************************************/
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
InitAcceleratorImpl(VOID)
{
return(STATUS_SUCCESS);

View file

@ -170,8 +170,9 @@ IntDesktopObjectDelete(PWIN32_DELETEMETHOD_PARAMETERS Parameters)
/* PRIVATE FUNCTIONS **********************************************************/
INIT_FUNCTION
NTSTATUS
FASTCALL
NTAPI
InitDesktopImpl(VOID)
{
/* Set Desktop Object Attributes */

View file

@ -130,7 +130,9 @@ IntUserManualGuiCheck(LONG Check)
}
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
InitGuiCheckImpl (VOID)
{
return STATUS_SUCCESS;

View file

@ -51,7 +51,9 @@ LIST_ENTRY gHotkeyList;
/* FUNCTIONS *****************************************************************/
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
InitHotkeyImpl(VOID)
{
InitializeListHead(&gHotkeyList);

View file

@ -922,7 +922,9 @@ RawInputThreadMain(PVOID StartContext)
DPRINT1("Raw Input Thread Exit!\n");
}
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
InitInputImpl(VOID)
{
NTSTATUS Status;

View file

@ -58,7 +58,10 @@ BYTE gQueueKeyStateTable[256];
/* FUNCTIONS *****************************************************************/
/* Initialization -- Right now, just zero the key state and init the lock */
NTSTATUS FASTCALL InitKeyboardImpl(VOID)
INIT_FUNCTION
NTSTATUS
NTAPI
InitKeyboardImpl(VOID)
{
RtlZeroMemory(&gQueueKeyStateTable,0x100);
return STATUS_SUCCESS;

View file

@ -86,7 +86,9 @@ UserMenuInfo(
( ((r).bottom >= y)) && \
( ((r).top <= y)) )
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
InitMenuImpl(VOID)
{
return(STATUS_SUCCESS);

View file

@ -28,7 +28,9 @@ static PMONITOR gMonitorList = NULL;
/* INITALIZATION FUNCTIONS ****************************************************/
INIT_FUNCTION
NTSTATUS
NTAPI
InitMonitorImpl()
{
DPRINT("Initializing monitor implementation...\n");

View file

@ -140,7 +140,9 @@ MsqDecPaintCountQueue(PUSER_MESSAGE_QUEUE Queue)
}
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
MsqInitializeImpl(VOID)
{
/*CurrentFocusMessageQueue = NULL;*/

View file

@ -53,8 +53,10 @@ InitUserAtoms(VOID)
/* FUNCTIONS *****************************************************************/
NTSTATUS FASTCALL InitUserImpl(VOID)
INIT_FUNCTION
NTSTATUS
NTAPI
InitUserImpl(VOID)
{
NTSTATUS Status;

View file

@ -527,7 +527,9 @@ IntKillTimer(PWND Window, UINT_PTR IDEvent, BOOL SystemTimer)
return pTmr ? TRUE : FALSE;
}
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
InitTimerImpl(VOID)
{
ULONG BitmapBytes;

View file

@ -29,7 +29,9 @@
* Initialize windowing implementation.
*/
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
InitWindowImpl(VOID)
{
return STATUS_SUCCESS;

View file

@ -56,7 +56,9 @@ static GENERIC_MAPPING IntWindowStationMapping =
};
NTSTATUS FASTCALL
INIT_FUNCTION
NTSTATUS
NTAPI
InitWindowStationImpl(VOID)
{
OBJECT_ATTRIBUTES ObjectAttributes;

View file

@ -58,7 +58,9 @@ static const MATRIX gmxWorldToPageDefault =
/** Internal functions ********************************************************/
INIT_FUNCTION
NTSTATUS
NTAPI
InitDcImpl()
{
psurfDefaultBitmap = SURFACE_ShareLockSurface(StockObjects[DEFAULT_BITMAP]);

View file

@ -81,6 +81,8 @@ OBJ_TYPE_INFO ObjTypeInfo[BASE_OBJTYPE_COUNT] =
};
static LARGE_INTEGER ShortDelay;
PGDI_HANDLE_TABLE GdiHandleTable = NULL;
PSECTION_OBJECT GdiTableSection = NULL;
/** INTERNAL FUNCTIONS ********************************************************/
@ -151,7 +153,9 @@ GDI_CleanupDummy(PVOID ObjectBody)
* Allocate GDI object table.
* \param Size - number of entries in the object table.
*/
PGDI_HANDLE_TABLE INTERNAL_CALL
INIT_FUNCTION
PGDI_HANDLE_TABLE
INTERNAL_CALL
GDIOBJ_iAllocHandleTable(OUT PSECTION_OBJECT *SectionObject)
{
PGDI_HANDLE_TABLE HandleTable = NULL;
@ -221,6 +225,23 @@ GDIOBJ_iAllocHandleTable(OUT PSECTION_OBJECT *SectionObject)
return HandleTable;
}
INIT_FUNCTION
NTSTATUS
NTAPI
InitGdiHandleTable()
{
/* Create the GDI handle table */
GdiHandleTable = GDIOBJ_iAllocHandleTable(&GdiTableSection);
if (GdiHandleTable == NULL)
{
DPRINT1("Failed to initialize the GDI handle table.\n");
return STATUS_UNSUCCESSFUL;
}
return STATUS_SUCCESS;
}
static void FASTCALL
LockErrorDebugOutput(HGDIOBJ hObj, PGDI_TABLE_ENTRY Entry, LPSTR Function)
{

View file

@ -57,7 +57,10 @@ unsigned short GetNumberOfBits(unsigned int dwMask)
}
// Create the system palette
HPALETTE FASTCALL PALETTE_Init(VOID)
INIT_FUNCTION
NTSTATUS
NTAPI
InitPaletteImpl()
{
int i;
HPALETTE hpalette;
@ -68,7 +71,7 @@ HPALETTE FASTCALL PALETTE_Init(VOID)
sizeof(LOGPALETTE) +
(NB_RESERVED_COLORS * sizeof(PALETTEENTRY)),
TAG_PALETTE);
if (!palPtr) return FALSE;
if (!palPtr) return STATUS_NO_MEMORY;
palPtr->palVersion = 0x300;
palPtr->palNumEntries = NB_RESERVED_COLORS;
@ -131,7 +134,7 @@ HPALETTE FASTCALL PALETTE_Init(VOID)
appalSurfaceDefault[BMF_JPEG] = &gpalRGB;
appalSurfaceDefault[BMF_PNG] = &gpalRGB;
return hpalette;
return STATUS_SUCCESS;
}
VOID FASTCALL PALETTE_ValidateFlags(PALETTEENTRY* lpPalE, INT size)