This commit was manufactured by cvs2svn to create branch 'captive'.
[reactos.git] / include / ntos / obtypes.h
diff --git a/include/ntos/obtypes.h b/include/ntos/obtypes.h
new file mode 100755 (executable)
index 0000000..216a245
--- /dev/null
@@ -0,0 +1,209 @@
+#ifndef _INCLUDE_DDK_OBTYPES_H
+#define _INCLUDE_DDK_OBTYPES_H
+/* $Id$ */
+struct _DIRECTORY_OBJECT;
+struct _OBJECT_ATTRIBUTES;
+
+#ifndef __USE_W32API
+
+typedef ULONG ACCESS_STATE, *PACCESS_STATE;
+
+typedef struct _OBJECT_NAME_INFORMATION
+{
+  UNICODE_STRING Name;
+} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
+
+typedef struct _OBJECT_HANDLE_INFORMATION
+{
+  ULONG HandleAttributes;
+  ACCESS_MASK GrantedAccess;
+} OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION;
+
+#endif /* __USE_W32API */
+
+typedef struct _OBJECT_TYPE
+{
+  /*
+   * PURPOSE: Tag to be used when allocating objects of this type
+   */
+  ULONG Tag;
+
+  /*
+   * PURPOSE: Name of the type
+   */
+  UNICODE_STRING TypeName;
+  
+  /*
+   * PURPOSE: Total number of objects of this type
+   */
+  ULONG TotalObjects;
+  
+  /*
+   * PURPOSE: Total number of handles of this type
+   */
+  ULONG TotalHandles;
+  
+  /*
+   * PURPOSE: Maximum objects of this type
+   */
+  ULONG MaxObjects;
+  
+   /*
+    * PURPOSE: Maximum handles of this type
+    */
+  ULONG MaxHandles;
+  
+  /*
+   * PURPOSE: Paged pool charge
+   */
+   ULONG PagedPoolCharge;
+  
+  /*
+   * PURPOSE: Nonpaged pool charge
+   */
+  ULONG NonpagedPoolCharge;
+  
+  /*
+   * PURPOSE: Mapping of generic access rights
+   */
+  PGENERIC_MAPPING Mapping;
+  
+  /*
+   * PURPOSE: Dumps the object
+   * NOTE: To be defined
+   */
+  VOID STDCALL_FUNC (*Dump)(VOID);
+  
+  /*
+   * PURPOSE: Opens the object
+   * NOTE: To be defined
+   */
+  VOID STDCALL_FUNC (*Open)(VOID);
+  
+   /*
+    * PURPOSE: Called to close an object if OkayToClose returns true
+    */
+  VOID STDCALL_FUNC (*Close)(PVOID ObjectBody,
+                       ULONG HandleCount);
+  
+  /*
+   * PURPOSE: Called to delete an object when the last reference is removed
+   */
+  VOID STDCALL_FUNC (*Delete)(PVOID ObjectBody);
+  
+  /*
+   * PURPOSE: Called when an open attempts to open a file apparently
+   * residing within the object
+   * RETURNS
+   *     STATUS_SUCCESS       NextObject was found
+   *     STATUS_UNSUCCESSFUL  NextObject not found
+   *     STATUS_REPARSE       Path changed, restart parsing the path
+   */
+   NTSTATUS STDCALL_FUNC (*Parse)(PVOID ParsedObject,
+                            PVOID *NextObject,
+                            PUNICODE_STRING FullPath,
+                            PWSTR *Path,
+                            ULONG Attributes);
+
+  /*
+   * PURPOSE: Called to set, query, delete or assign a security-descriptor
+   * to the object
+   * RETURNS
+   *     STATUS_SUCCESS       NextObject was found
+   */
+  NTSTATUS STDCALL_FUNC (*Security)(PVOID ObjectBody,
+                                   SECURITY_OPERATION_CODE OperationCode,
+                                   SECURITY_INFORMATION SecurityInformation,
+                                   PSECURITY_DESCRIPTOR SecurityDescriptor,
+                                   PULONG BufferLength);
+
+  /*
+   * PURPOSE: Called to query the name of the object
+   * RETURNS
+   *     STATUS_SUCCESS       NextObject was found
+   */
+  NTSTATUS STDCALL_FUNC (*QueryName)(PVOID ObjectBody,
+                                    POBJECT_NAME_INFORMATION ObjectNameInfo,
+                                    ULONG Length,
+                                    PULONG ReturnLength);
+
+  /*
+   * PURPOSE: Called when a process asks to close the object
+   */
+  VOID STDCALL_FUNC (*OkayToClose)(VOID);
+
+  NTSTATUS STDCALL_FUNC (*Create)(PVOID ObjectBody,
+                            PVOID Parent,
+                            PWSTR RemainingPath,
+                            struct _OBJECT_ATTRIBUTES* ObjectAttributes);
+
+  VOID STDCALL_FUNC (*DuplicationNotify)(PEPROCESS DuplicateTo,
+                                   PEPROCESS DuplicateFrom,
+                                   PVOID Object);
+} OBJECT_TYPE;
+
+#ifndef __USE_W32API
+
+typedef struct _OBJECT_TYPE *POBJECT_TYPE;
+
+#endif /* __USE_W32API */
+
+
+typedef struct _OBJECT_HEADER
+/*
+ * PURPOSE: Header for every object managed by the object manager
+ */
+{
+   UNICODE_STRING Name;
+   LIST_ENTRY Entry;
+   LONG RefCount;
+   LONG HandleCount;
+   BOOLEAN CloseInProcess;
+   BOOLEAN Permanent;
+   struct _DIRECTORY_OBJECT* Parent;
+   POBJECT_TYPE ObjectType;
+   
+   /*
+    * PURPOSE: Object type
+    * NOTE: This overlaps the first member of the object body
+    */
+   CSHORT Type;
+   
+   /*
+    * PURPOSE: Object size
+    * NOTE: This overlaps the second member of the object body
+    */
+   CSHORT Size;
+   
+   
+} OBJECT_HEADER, *POBJECT_HEADER;
+
+#ifndef __USE_W32API
+
+typedef struct _OBJECT_ATTRIBUTES
+{
+   ULONG Length;
+   HANDLE RootDirectory;
+   PUNICODE_STRING ObjectName;
+   ULONG Attributes;
+   SECURITY_DESCRIPTOR *SecurityDescriptor;
+   SECURITY_QUALITY_OF_SERVICE *SecurityQualityOfService;
+} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
+
+#endif /* __USE_W32API */
+
+typedef struct _HANDLE_TABLE
+{
+   LIST_ENTRY ListHead;
+   KSPIN_LOCK ListLock;
+} HANDLE_TABLE;
+
+#ifndef __USE_W32API
+
+typedef struct _HANDLE_TABLE *PHANDLE_TABLE;
+
+#endif /* __USE_W32API */
+
+extern POBJECT_TYPE ObDirectoryType;
+
+#endif /* ndef _INCLUDE_DDK_OBTYPES_H */