--- /dev/null
+#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 */