#ifndef __INCLUDE_INTERNAL_OBJMGR_H
#define __INCLUDE_INTERNAL_OBJMGR_H
-#define TAG_OBJECT_TYPE TAG('O', 'b', 'j', 'T')
-
struct _EPROCESS;
-typedef enum _OB_OPEN_REASON
-{
- ObCreateHandle,
- ObOpenHandle,
- ObDuplicateHandle,
- ObInheritHandle,
- ObMaxOpenReason
-} OB_OPEN_REASON;
-
-/* TEMPORARY HACK */
-typedef NTSTATUS
-(STDCALL *OB_CREATE_METHOD)(
- PVOID ObjectBody,
- PVOID Parent,
- PWSTR RemainingPath,
- struct _OBJECT_ATTRIBUTES* ObjectAttributes);
-
-/* Object Callbacks */
-typedef NTSTATUS
-(STDCALL *OB_OPEN_METHOD)(
- OB_OPEN_REASON Reason,
- PVOID ObjectBody,
- PEPROCESS Process,
- ULONG HandleCount,
- ACCESS_MASK GrantedAccess);
-
-typedef NTSTATUS
-(STDCALL *OB_PARSE_METHOD)(
- PVOID Object,
- PVOID *NextObject,
- PUNICODE_STRING FullPath,
- PWSTR *Path,
- ULONG Attributes);
-
-typedef VOID
-(STDCALL *OB_DELETE_METHOD)(
- PVOID DeletedObject);
-
-typedef VOID
-(STDCALL *OB_CLOSE_METHOD)(
- PVOID ClosedObject,
- ULONG HandleCount);
-
-typedef VOID
-(STDCALL *OB_DUMP_METHOD)(
- VOID);
-
-typedef NTSTATUS
-(STDCALL *OB_OKAYTOCLOSE_METHOD)(
- VOID);
-
-typedef NTSTATUS
-(STDCALL *OB_QUERYNAME_METHOD)(
- PVOID ObjectBody,
- POBJECT_NAME_INFORMATION ObjectNameInfo,
- ULONG Length,
- PULONG ReturnLength);
-
-typedef PVOID
-(STDCALL *OB_FIND_METHOD)(
- PVOID WinStaObject,
- PWSTR Name,
- ULONG Attributes);
-
-typedef NTSTATUS
-(STDCALL *OB_SECURITY_METHOD)(
- PVOID ObjectBody,
- SECURITY_OPERATION_CODE OperationCode,
- SECURITY_INFORMATION SecurityInformation,
- PSECURITY_DESCRIPTOR SecurityDescriptor,
- PULONG BufferLength);
-
-typedef struct _OBJECT_HEADER_NAME_INFO
-{
- struct _DIRECTORY_OBJECT *Directory;
- UNICODE_STRING Name;
- ULONG QueryReferences;
- ULONG Reserved2;
- ULONG DbgReferenceCount;
-} OBJECT_HEADER_NAME_INFO, *POBJECT_HEADER_NAME_INFO;
-
-typedef struct _OBJECT_CREATE_INFORMATION
-{
- ULONG Attributes;
- HANDLE RootDirectory;
- PVOID ParseContext;
- KPROCESSOR_MODE ProbeMode;
- ULONG PagedPoolCharge;
- ULONG NonPagedPoolCharge;
- ULONG SecurityDescriptorCharge;
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- PSECURITY_QUALITY_OF_SERVICE SecurityQos;
- SECURITY_QUALITY_OF_SERVICE SecurityQualityOfService;
-} OBJECT_CREATE_INFORMATION, *POBJECT_CREATE_INFORMATION;
-
-typedef struct _OBJECT_TYPE_INITIALIZER
-{
- WORD Length;
- UCHAR UseDefaultObject;
- UCHAR CaseInsensitive;
- ULONG InvalidAttributes;
- GENERIC_MAPPING GenericMapping;
- ULONG ValidAccessMask;
- UCHAR SecurityRequired;
- UCHAR MaintainHandleCount;
- UCHAR MaintainTypeList;
- POOL_TYPE PoolType;
- ULONG DefaultPagedPoolCharge;
- ULONG DefaultNonPagedPoolCharge;
- OB_DUMP_METHOD DumpProcedure;
- OB_OPEN_METHOD OpenProcedure;
- OB_CLOSE_METHOD CloseProcedure;
- OB_DELETE_METHOD DeleteProcedure;
- OB_PARSE_METHOD ParseProcedure;
- OB_SECURITY_METHOD SecurityProcedure;
- OB_QUERYNAME_METHOD QueryNameProcedure;
- OB_OKAYTOCLOSE_METHOD OkayToCloseProcedure;
-} OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER;
-
-typedef struct _OBJECT_TYPE
-{
- ERESOURCE Mutex; /* Used to lock the Object Type */
- LIST_ENTRY TypeList; /* Links all the Types Together for Debugging */
- UNICODE_STRING Name; /* Name of the Type */
- PVOID DefaultObject; /* What Object to use during a Wait (ie, FileObjects wait on FileObject->Event) */
- ULONG Index; /* Index of this Type in the Object Directory */
- ULONG TotalNumberOfObjects; /* Total number of objects of this type */
- ULONG TotalNumberOfHandles; /* Total number of handles of this type */
- ULONG HighWaterNumberOfObjects; /* Peak number of objects of this type */
- ULONG HighWaterNumberOfHandles; /* Peak number of handles of this type */
- OBJECT_TYPE_INITIALIZER TypeInfo; /* Information captured during type creation */
- ULONG Key; /* Key to use when allocating objects of this type */
- ERESOURCE ObjectLocks[4]; /* Locks for locking the Objects */
-} OBJECT_TYPE;
-
-typedef struct _OBJECT_HANDLE_COUNT_ENTRY
-{
- struct _EPROCESS *Process;
- ULONG HandleCount;
-} OBJECT_HANDLE_COUNT_ENTRY, *POBJECT_HANDLE_COUNT_ENTRY;
-
-typedef struct _OBJECT_HANDLE_COUNT_DATABASE
-{
- ULONG CountEntries;
- POBJECT_HANDLE_COUNT_ENTRY HandleCountEntries[1];
-} OBJECT_HANDLE_COUNT_DATABASE, *POBJECT_HANDLE_COUNT_DATABASE;
-
-typedef struct _OBJECT_HEADER_HANDLE_INFO
-{
- union {
- POBJECT_HANDLE_COUNT_DATABASE HandleCountDatabase;
- OBJECT_HANDLE_COUNT_ENTRY SingleEntry;
- };
-} OBJECT_HEADER_HANDLE_INFO, *POBJECT_HEADER_HANDLE_INFO;
-
-typedef struct _OBJECT_HEADER_CREATOR_INFO
-{
- LIST_ENTRY TypeList;
- PVOID CreatorUniqueProcess;
- USHORT CreatorBackTraceIndex;
- USHORT Reserved;
-} OBJECT_HEADER_CREATOR_INFO, *POBJECT_HEADER_CREATOR_INFO;
-
-typedef PVOID POBJECT;
-
-typedef struct _QUAD
-{
- union {
- LONGLONG UseThisFieldToCopy;
- float DoNotUseThisField;
- };
-} QUAD, *PQUAD;
-
-#define OB_FLAG_CREATE_INFO 0x01 // has OBJECT_CREATE_INFO
-#define OB_FLAG_KERNEL_MODE 0x02 // created by kernel
-#define OB_FLAG_CREATOR_INFO 0x04 // has OBJECT_CREATOR_INFO
-#define OB_FLAG_EXCLUSIVE 0x08 // OBJ_EXCLUSIVE
-#define OB_FLAG_PERMANENT 0x10 // OBJ_PERMANENT
-#define OB_FLAG_SECURITY 0x20 // has security descriptor
-#define OB_FLAG_SINGLE_PROCESS 0x40 // no HandleDBList
-
-/* Will be moved to public headers once "Entry" is gone */
-typedef struct _OBJECT_HEADER
-{
- LIST_ENTRY Entry;
- LONG PointerCount;
- union {
- LONG HandleCount;
- PVOID NextToFree;
- };
- POBJECT_TYPE Type;
- UCHAR NameInfoOffset;
- UCHAR HandleInfoOffset;
- UCHAR QuotaInfoOffset;
- UCHAR Flags;
- union {
- POBJECT_CREATE_INFORMATION ObjectCreateInfo;
- PVOID QuotaBlockCharged;
- };
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- QUAD Body;
-} OBJECT_HEADER, *POBJECT_HEADER;
-
typedef struct _DIRECTORY_OBJECT
{
CSHORT Type;