ReactOS  0.4.14-dev-293-g2b39b42
BASEOBJECT Class Reference

#include <baseobj.hpp>

Inheritance diagram for BASEOBJECT:
Collaboration diagram for BASEOBJECT:

Public Types

enum  OWNER { POWNED = GDI_OBJ_HMGR_POWNED, PUBLIC = GDI_OBJ_HMGR_PUBLIC, NONE = GDI_OBJ_HMGR_NONE }
 

Public Member Functions

VOID vUnlock (VOID)
 
HGDIOBJ hHmgr (VOID)
 
HGDIOBJ hInsertObject (OWNER owner)
 

Static Public Member Functions

static PVOID pvAllocate (_In_ GDIOBJTYPE objtype, _In_ SIZE_T cjSize)
 

Protected Member Functions

 BASEOBJECT (_In_ GDILOOBJTYPE loobjtype)
 
VOID vSetObjectAttr (_In_opt_ PVOID pvUserAttr)
 

Static Protected Member Functions

static BASEOBJECTLockExclusive (HGDIOBJ hobj, GDIOBJTYPE objtype)
 
static BASEOBJECTLockExclusive (HGDIOBJ hobj, GDILOOBJTYPE loobjtype)
 
static BASEOBJECTLockShared (HGDIOBJ hobj, GDILOOBJTYPE loobjtype, OWNER owner)
 

Additional Inherited Members

- Private Attributes inherited from _BASEOBJECT
HGDIOBJ hHmgr
 
union {
   ULONG   ulShareCount
 
   DWORD   dwThreadId
 
}; 
 
USHORT cExclusiveLock
 
USHORT BaseFlags
 
EX_PUSH_LOCK pushlock
 

Detailed Description

Definition at line 8 of file baseobj.hpp.

Member Enumeration Documentation

◆ OWNER

enum BASEOBJECT::OWNER
Enumerator
POWNED 
PUBLIC 
NONE 

Definition at line 12 of file baseobj.hpp.

13  {
17  };
#define GDI_OBJ_HMGR_POWNED
Definition: ntgdihdl.h:117
#define GDI_OBJ_HMGR_PUBLIC
Definition: ntgdihdl.h:116
#define GDI_OBJ_HMGR_NONE
Definition: ntgdihdl.h:118

Constructor & Destructor Documentation

◆ BASEOBJECT()

BASEOBJECT::BASEOBJECT ( _In_ GDILOOBJTYPE  loobjtype)
inlineprotected

Definition at line 21 of file baseobj.hpp.

23  {
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 */
34  }
ULONG NTAPI DbgCaptureStackBackTace(_Out_writes_(cFramesToCapture) PVOID *ppvFrames, _In_ ULONG cFramesToSkip, _In_ ULONG cFramesToCapture)
ULONG ulShareCount
Definition: gdiobj.h:42
#define DBG_INITLOG(pslh)
Definition: gdidebug.h:110
USHORT cExclusiveLock
Definition: gdiobj.h:45
HGDIOBJ hHmgr
Definition: gdiobj.h:40
USHORT BaseFlags
Definition: gdiobj.h:46
uint32_t ULONG_PTR
Definition: typedefs.h:63
#define DBG_LOGEVENT(pslh, type, val)
Definition: gdidebug.h:109
#define GDI_OBJECT_STACK_LEVELS
Definition: gdiobj.h:8
void * HGDIOBJ
Definition: windef.h:252

Member Function Documentation

◆ hHmgr()

◆ hInsertObject()

HGDIOBJ BASEOBJECT::hInsertObject ( OWNER  owner)
inline

Definition at line 102 of file baseobj.hpp.

104  {
105  return GDIOBJ_hInsertObject(this, owner);
106  }
HGDIOBJ NTAPI GDIOBJ_hInsertObject(POBJ pobj, ULONG ulOwner)
Definition: gdiobj.c:909

◆ LockExclusive() [1/2]

static BASEOBJECT* BASEOBJECT::LockExclusive ( HGDIOBJ  hobj,
GDIOBJTYPE  objtype 
)
staticprotected

◆ LockExclusive() [2/2]

static BASEOBJECT* BASEOBJECT::LockExclusive ( HGDIOBJ  hobj,
GDILOOBJTYPE  loobjtype 
)
staticprotected

◆ LockShared()

static BASEOBJECT* BASEOBJECT::LockShared ( HGDIOBJ  hobj,
GDILOOBJTYPE  loobjtype,
OWNER  owner 
)
inlinestaticprotected

FIXME: should check owner!

Definition at line 50 of file baseobj.hpp.

54  {
56  return reinterpret_cast<CBASEOBJECT*>(GDIOBJ_ShareLockObj(hobj, loobjtype));
57  }
PGDIOBJ NTAPI GDIOBJ_ShareLockObj(HGDIOBJ hObj, DWORD ExpectedType)
Definition: gdiobj.c:1440

Referenced by BRUSH::_Ret_opt_bytecap_(), and BRUSH::_Ret_opt_bytecount_().

◆ pvAllocate()

static PVOID BASEOBJECT::pvAllocate ( _In_ GDIOBJTYPE  objtype,
_In_ SIZE_T  cjSize 
)
inlinestatic

Definition at line 72 of file baseobj.hpp.

75  {
77  }
#define GDIOBJ_POOL_TAG(type)
Definition: baseobj.hpp:4
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
_In_ ULONG cjSize
Definition: winddi.h:3634

◆ vSetObjectAttr()

VOID BASEOBJECT::vSetObjectAttr ( _In_opt_ PVOID  pvUserAttr)
inlineprotected

Definition at line 60 of file baseobj.hpp.

62  {
63  GDIOBJ_vSetObjectAttr((POBJ)this, pvUserAttr);
64  }
VOID NTAPI GDIOBJ_vSetObjectAttr(POBJ pobj, PVOID pvObjAttr)
Definition: gdiobj.c:1093

Referenced by BRUSH::bAllocateBrushAttr().

◆ vUnlock()

VOID BASEOBJECT::vUnlock ( VOID  )
inline

Definition at line 80 of file baseobj.hpp.

82  {
83  if (this->cExclusiveLock > 0)
84  {
86  }
87  else
88  {
90  }
91  }
VOID NTAPI GDIOBJ_vDereferenceObject(POBJ pobj)
Definition: gdiobj.c:628
USHORT cExclusiveLock
Definition: gdiobj.h:45
VOID NTAPI GDIOBJ_vUnlockObject(POBJ pobj)
Definition: gdiobj.c:877

The documentation for this class was generated from the following file: