2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * PURPOSE: Manage GDI Handles
5 * FILE: subsys/win32k/eng/handle.c
6 * PROGRAMER: Jason Filby
11 #include <ddk/winddi.h>
15 #include <win32k/debug1.h>
18 ULONG CreateGDIHandle(ULONG InternalSize, ULONG UserSize)
24 //size = sizeof( ENGOBJ ) + InternalSize + UserSize;
25 size = InternalSize; //internal size includes header and user portions
26 pObj = EngAllocMem( FL_ZERO_MEMORY, size, 0 );
31 pObj->InternalSize = InternalSize;
32 pObj->UserSize = UserSize;
34 for( i=1; i < MAX_GDI_HANDLES; i++ ){
35 if( GDIHandles[ i ].pEngObj == NULL ){
37 GDIHandles[ i ].pEngObj = pObj;
38 DPRINT("CreateGDIHandle: obj: %x, handle: %d, usersize: %d\n", pObj, i, UserSize );
42 DPRINT("CreateGDIHandle: Out of available handles!!!\n");
47 VOID FreeGDIHandle(ULONG Handle)
49 if( Handle == 0 || Handle >= MAX_GDI_HANDLES ){
50 DPRINT("FreeGDIHandle: invalid handle!!!!\n");
53 DPRINT("FreeGDIHandle: handle: %d\n", Handle);
54 EngFreeMem( GDIHandles[Handle].pEngObj );
55 GDIHandles[Handle].pEngObj = NULL;
58 PVOID AccessInternalObject(ULONG Handle)
62 if( Handle == 0 || Handle >= MAX_GDI_HANDLES ){
63 DPRINT("AccessInternalObject: invalid handle: %d!!!!\n", Handle);
67 pEngObj = GDIHandles[Handle].pEngObj;
68 return (PVOID)pEngObj;
71 PVOID AccessUserObject(ULONG Handle)
75 if( Handle == 0 || Handle >= MAX_GDI_HANDLES ){
76 DPRINT("AccessUserObject: invalid handle: %d!!!!\n", Handle);
80 pEngObj = GDIHandles[Handle].pEngObj;
81 return (PVOID)( (PCHAR)pEngObj + sizeof( ENGOBJ ) );
84 ULONG AccessHandleFromUserObject(PVOID UserObject)
90 return INVALID_HANDLE;
92 pEngObj = (PENGOBJ)((PCHAR) UserObject - sizeof( ENGOBJ ));
93 Handle = pEngObj->hObj;
95 if( Handle == 0 || Handle >= MAX_GDI_HANDLES ){
96 DPRINT("AccessHandleFromUserObject: inv handle: %d, obj: %x!!!!\n", Handle, pEngObj);
97 return INVALID_HANDLE;
102 PVOID AccessInternalObjectFromUserObject(PVOID UserObject)
105 return AccessInternalObject( AccessHandleFromUserObject( UserObject ) );
108 VOID InitEngHandleTable( void )
111 for( i=1; i < MAX_GDI_HANDLES; i++ ){
112 GDIHandles[ i ].pEngObj == NULL;