reactos/reactos/subsys/win32k/objects/gdiobj.c
Eric Kohl 76f55a8a93 Fixed mp driver initialization bug and some other ones
svn path=/trunk/; revision=1022
2000-03-01 03:25:11 +00:00

117 lines
2.1 KiB
C

/*
* GDIOBJ.C - GDI object manipulation routines
*
* $Id: gdiobj.c,v 1.5 2000/03/01 03:23:57 ekohl Exp $
*
*/
#undef WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <ddk/ntddk.h>
#include <win32k/gdiobj.h>
PGDIOBJ GDIOBJ_AllocObject(WORD Size, WORD Magic)
{
PGDIOBJHDR NewObj;
NewObj = ExAllocatePool(PagedPool, Size + sizeof (GDIOBJHDR));
if (NewObj == NULL)
{
return NULL;
}
RtlZeroMemory(NewObj, Size + sizeof (GDIOBJHDR));
NewObj->wMagic = Magic;
#if 0
KeInitializeSpinlock(&NewObj->Lock);
#endif
return (PGDIOBJ)(((PCHAR) NewObj) + sizeof (GDIOBJHDR));
}
BOOL GDIOBJ_FreeObject (PGDIOBJ Obj, WORD Magic)
{
PGDIOBJHDR ObjHdr;
ObjHdr = (PGDIOBJHDR)(((PCHAR)Obj) - sizeof (GDIOBJHDR));
if (ObjHdr->wMagic != Magic)
{
return FALSE;
}
ExFreePool (ObjHdr);
return TRUE;
}
HGDIOBJ GDIOBJ_PtrToHandle (PGDIOBJ Obj, WORD Magic)
{
PGDIOBJHDR objHeader;
objHeader = (PGDIOBJHDR) (((PCHAR)Obj) - sizeof (GDIOBJHDR));
if (objHeader->wMagic != Magic)
{
return 0;
}
return (HGDIOBJ) objHeader;
}
PGDIOBJ GDIOBJ_HandleToPtr (HGDIOBJ Obj, WORD Magic)
{
PGDIOBJHDR objHeader;
objHeader = (PGDIOBJHDR) Obj;
/* FIXME: Lock object for duration */
if (objHeader->wMagic != Magic)
{
return 0;
}
return (PGDIOBJ) (((PCHAR)Obj) + sizeof (GDIOBJHDR));
}
BOOL GDIOBJ_LockObject (HGDIOBJ Obj)
{
/* FIXME: write this */
return TRUE;
}
BOOL GDIOBJ_UnlockObject (HGDIOBJ Obj)
{
/* FIXME: write this */
return TRUE;
}
HGDIOBJ GDIOBJ_GetNextObject (HGDIOBJ Obj, WORD Magic)
{
PGDIOBJHDR objHeader;
objHeader = (PGDIOBJHDR) ((PCHAR) Obj - sizeof (GDIOBJHDR));
if (objHeader->wMagic != Magic)
{
return 0;
}
return objHeader->hNext;
}
HGDIOBJ GDIOBJ_SetNextObject (HGDIOBJ Obj, WORD Magic, HGDIOBJ NextObj)
{
PGDIOBJHDR objHeader;
HGDIOBJ oldNext;
/* FIXME: should we lock/unlock the object here? */
objHeader = (PGDIOBJHDR) ((PCHAR) Obj - sizeof (GDIOBJHDR));
if (objHeader->wMagic != Magic)
{
return 0;
}
oldNext = objHeader->hNext;
objHeader->hNext = NextObj;
return oldNext;
}