- Remove KeAttachProcess and KeDetachProcess prototypes from winddk.h.
[reactos.git] / reactos / ntoskrnl / include / internal / ob.h
index 55b7018..2e4f8ac 100644 (file)
 
 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