2 * GDIOBJ.C - GDI object manipulation routines
4 * $Id: gdiobj.c,v 1.4 1999/11/17 20:54:05 rex Exp $
8 #undef WIN32_LEAN_AND_MEAN
10 #include <ddk/ntddk.h>
11 #include <win32k/gdiobj.h>
13 PGDIOBJ
GDIOBJ_AllocObject(WORD Size
, WORD Magic
)
17 NewObj
= ExAllocatePool(PagedPool
, Size
+ sizeof (GDIOBJHDR
));
23 RtlZeroMemory(NewObj
, Size
+ sizeof (GDIOBJHDR
));
24 NewObj
->wMagic
= Magic
;
26 KeInitializeSpinlock(&NewObj
->Lock
);
29 return (PGDIOBJ
)(((PCHAR
) NewObj
) + sizeof (GDIOBJHDR
));
32 HGDIOBJ
GDIOBJ_PtrToHandle (PGDIOBJ Obj
, WORD Magic
)
36 objHeader
= (PGDIOBJHDR
) (((PCHAR
)Obj
) - sizeof (GDIOBJHDR
));
37 if (objHeader
->wMagic
!= Magic
)
42 return (HGDIOBJ
) objHeader
;
45 PGDIOBJ
GDIOBJ_HandleToPtr (HGDIOBJ Obj
, WORD Magic
)
49 objHeader
= (PGDIOBJHDR
) Obj
;
51 /* FIXME: Lock object for duration */
53 if (objHeader
->wMagic
!= Magic
)
58 return (PGDIOBJ
) (((PCHAR
)Obj
) + sizeof (GDIOBJHDR
));
61 BOOL
GDIOBJ_LockObject (HGDIOBJ Obj
)
63 /* FIXME: write this */
67 BOOL
GDIOBJ_UnlockObject (HGDIOBJ Obj
)
69 /* FIXME: write this */
73 HGDIOBJ
GDIOBJ_GetNextObject (HGDIOBJ Obj
, WORD Magic
)
77 objHeader
= (PGDIOBJHDR
) ((PCHAR
) Obj
- sizeof (GDIOBJHDR
));
78 if (objHeader
->wMagic
!= Magic
)
83 return objHeader
->hNext
;
86 HGDIOBJ
GDIOBJ_SetNextObject (HGDIOBJ Obj
, WORD Magic
, HGDIOBJ NextObj
)
91 /* FIXME: should we lock/unlock the object here? */
92 objHeader
= (PGDIOBJHDR
) ((PCHAR
) Obj
- sizeof (GDIOBJHDR
));
93 if (objHeader
->wMagic
!= Magic
)
97 oldNext
= objHeader
->hNext
;
98 objHeader
->hNext
= NextObj
;