4 #define GDIOBJ_POOL_TAG(type) ('00hG' + (((type) & 0x1f) << 24))
6 #define BASEOBJECT CBASEOBJECT
8 class BASEOBJECT : private _BASEOBJECT
14 POWNED = GDI_OBJ_HMGR_POWNED,
15 PUBLIC = GDI_OBJ_HMGR_PUBLIC,
16 NONE = GDI_OBJ_HMGR_NONE
22 _In_ GDILOOBJTYPE loobjtype)
24 /* Initialize the object */
25 _BASEOBJECT::hHmgr = (HGDIOBJ)(ULONG_PTR)loobjtype;
26 this->cExclusiveLock = 0;
27 this->ulShareCount = 1;
28 this->BaseFlags = 0;//fl & 0xffff;
29 DBG_INITLOG(&this->slhLog);
30 DBG_LOGEVENT(&this->slhLog, EVENT_ALLOCATE, 0);
31 #if DBG_ENABLE_GDIOBJ_BACKTRACES
32 DbgCaptureStackBackTace(this->apvBackTrace, 1, GDI_OBJECT_STACK_LEVELS);
33 #endif /* GDI_DEBUG */
46 GDILOOBJTYPE loobjtype);
52 GDILOOBJTYPE loobjtype,
55 /// FIXME: should check owner!
56 return reinterpret_cast<CBASEOBJECT*>(GDIOBJ_ShareLockObj(hobj, loobjtype));
61 _In_opt_ PVOID pvUserAttr)
63 GDIOBJ_vSetObjectAttr((POBJ)this, pvUserAttr);
73 _In_ GDIOBJTYPE objtype,
76 return ExAllocatePoolWithTag(PagedPool, cjSize, GDIOBJ_POOL_TAG(objtype));
83 if (this->cExclusiveLock > 0)
85 GDIOBJ_vUnlockObject(this);
89 GDIOBJ_vDereferenceObject(this);
98 return _BASEOBJECT::hHmgr;
105 return GDIOBJ_hInsertObject(this, owner);