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.
108 lines
1.4 KiB
108 lines
1.4 KiB
#ifndef __LPC_HEAP_HXX__
|
|
|
|
#define __LPC_HEAP_HXX__
|
|
|
|
#ifndef __WIN32_CRITSEC_HXX__
|
|
#include <critsec.hxx>
|
|
#endif
|
|
|
|
LPVOID
|
|
LpcHeapAlloc(
|
|
DWORD Size
|
|
);
|
|
|
|
VOID
|
|
LpcHeapFree(
|
|
LPVOID Buffer
|
|
);
|
|
|
|
VOID
|
|
LpcHeapDestroy(
|
|
);
|
|
|
|
class LPC_HEAP_OBJECT {
|
|
|
|
public:
|
|
|
|
void *
|
|
operator new(size_t Size) { return LpcHeapAlloc(Size); }
|
|
|
|
void
|
|
operator delete(void * Buffer) { LpcHeapFree(Buffer); }
|
|
};
|
|
|
|
class LPC_PROC;
|
|
|
|
class LPC_SHARED_HEAP_OBJECT : public LPC_HEAP_OBJECT {
|
|
|
|
public:
|
|
|
|
LPC_SHARED_HEAP_OBJECT * Next;
|
|
LPC_SHARED_HEAP_OBJECT * Prev;
|
|
|
|
enum OBJECT_TYPE {
|
|
LpcSystemObjectType = 0xa1a12222,
|
|
LpcProcObjectType = 0xa1a13333,
|
|
LpcPortObjectType = 0xa1a15555
|
|
} ObjectType;
|
|
|
|
LONG OwnerReferenceCount;
|
|
LONG ReferenceCount;
|
|
|
|
DWORD ProcessId;
|
|
|
|
WIN32_CRITSEC CritSec;
|
|
|
|
BOOL IsProcessDead();
|
|
|
|
LPC_SHARED_HEAP_OBJECT(
|
|
);
|
|
|
|
virtual
|
|
~LPC_SHARED_HEAP_OBJECT(
|
|
);
|
|
|
|
virtual VOID
|
|
Disconnect(
|
|
);
|
|
|
|
LONG
|
|
AddRef(
|
|
);
|
|
|
|
LONG
|
|
Dereference(
|
|
);
|
|
};
|
|
|
|
class LPC_HEAP_OBJECT_LIST {
|
|
|
|
public:
|
|
|
|
LPC_SHARED_HEAP_OBJECT * Head;
|
|
LPC_SHARED_HEAP_OBJECT * Tail;
|
|
|
|
LPC_HEAP_OBJECT_LIST(
|
|
);
|
|
|
|
VOID
|
|
Insert(
|
|
LPC_SHARED_HEAP_OBJECT * HeapObject
|
|
);
|
|
|
|
BOOL
|
|
Remove(
|
|
LPC_SHARED_HEAP_OBJECT * HeapObject
|
|
);
|
|
|
|
VOID
|
|
DisconnectOrphans(
|
|
);
|
|
|
|
VOID
|
|
DereferenceOrphans(
|
|
);
|
|
};
|
|
|
|
#endif
|
|
|