mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
1.6 KiB
113 lines
1.6 KiB
#ifndef __WMSG_HEAP_HXX__
|
|
#define __WMSG_HEAP_HXX__
|
|
|
|
LPVOID
|
|
WmsgHeapAlloc(
|
|
DWORD Size
|
|
);
|
|
|
|
VOID
|
|
WmsgHeapFree(
|
|
LPVOID Buffer
|
|
);
|
|
|
|
VOID
|
|
WmsgHeapDestroy(
|
|
);
|
|
|
|
class WMSG_HEAP_OBJECT {
|
|
|
|
public:
|
|
|
|
// It would be bad to add a virtual method to this class.
|
|
|
|
void *
|
|
operator new(size_t Size) { return WmsgHeapAlloc(Size); }
|
|
|
|
void
|
|
operator delete(void * Buffer) { WmsgHeapFree(Buffer); }
|
|
};
|
|
|
|
class WMSG_PROC;
|
|
|
|
class WMSG_SHARED_HEAP_OBJECT : public WMSG_HEAP_OBJECT {
|
|
|
|
public:
|
|
|
|
WMSG_SHARED_HEAP_OBJECT * Next;
|
|
WMSG_SHARED_HEAP_OBJECT * Prev;
|
|
|
|
enum OBJECT_TYPE {
|
|
WmsgSystemObjectType = 0xa1a12222,
|
|
WmsgProcObjectType = 0xa1a13333,
|
|
WmsgThrdObjectType = 0xa1a14444,
|
|
WmsgPortObjectType = 0xa1a15555
|
|
} ObjectType;
|
|
|
|
LONG OwnerReferenceCount;
|
|
LONG ReferenceCount;
|
|
|
|
DWORD ProcessId;
|
|
|
|
WIN32_CRITSEC CritSec;
|
|
|
|
WMSG_SHARED_HEAP_OBJECT(
|
|
);
|
|
|
|
virtual
|
|
~WMSG_SHARED_HEAP_OBJECT(
|
|
);
|
|
|
|
virtual VOID
|
|
Disconnect(
|
|
);
|
|
|
|
LONG
|
|
AddRef(
|
|
);
|
|
|
|
LONG
|
|
AddRefNotOwner(
|
|
);
|
|
|
|
LONG
|
|
Dereference(
|
|
);
|
|
};
|
|
|
|
class WMSG_HEAP_OBJECT_LIST {
|
|
|
|
public:
|
|
|
|
WMSG_SHARED_HEAP_OBJECT * Head;
|
|
WMSG_SHARED_HEAP_OBJECT * Tail;
|
|
|
|
WMSG_HEAP_OBJECT_LIST(
|
|
);
|
|
|
|
VOID
|
|
Insert(
|
|
WMSG_SHARED_HEAP_OBJECT * HeapObject
|
|
);
|
|
|
|
BOOL
|
|
Remove(
|
|
WMSG_SHARED_HEAP_OBJECT * HeapObject
|
|
);
|
|
|
|
BOOL
|
|
IsInList(
|
|
WMSG_SHARED_HEAP_OBJECT * SearchObject
|
|
);
|
|
|
|
VOID
|
|
DisconnectOrphans(
|
|
);
|
|
|
|
VOID
|
|
DereferenceOrphans(
|
|
);
|
|
};
|
|
|
|
#endif
|
|
|