[DDK]
[reactos.git] / include / xdk / obtypes.h
1 /******************************************************************************
2 * Object Manager Types *
3 ******************************************************************************/
4
5 #define MAXIMUM_FILENAME_LENGTH 256
6 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
7
8 #define OBJECT_TYPE_CREATE 0x0001
9 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
10
11 #define DIRECTORY_QUERY 0x0001
12 #define DIRECTORY_TRAVERSE 0x0002
13 #define DIRECTORY_CREATE_OBJECT 0x0004
14 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
15 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
16
17 #define SYMBOLIC_LINK_QUERY 0x0001
18 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
19
20 #define DUPLICATE_CLOSE_SOURCE 0x00000001
21 #define DUPLICATE_SAME_ACCESS 0x00000002
22 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
23
24 #define OB_FLT_REGISTRATION_VERSION_0100 0x0100
25 #define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100
26
27 typedef ULONG OB_OPERATION;
28
29 #define OB_OPERATION_HANDLE_CREATE 0x00000001
30 #define OB_OPERATION_HANDLE_DUPLICATE 0x00000002
31
32 typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION {
33 IN OUT ACCESS_MASK DesiredAccess;
34 IN ACCESS_MASK OriginalDesiredAccess;
35 } OB_PRE_CREATE_HANDLE_INFORMATION, *POB_PRE_CREATE_HANDLE_INFORMATION;
36
37 typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION {
38 IN OUT ACCESS_MASK DesiredAccess;
39 IN ACCESS_MASK OriginalDesiredAccess;
40 IN PVOID SourceProcess;
41 IN PVOID TargetProcess;
42 } OB_PRE_DUPLICATE_HANDLE_INFORMATION, *POB_PRE_DUPLICATE_HANDLE_INFORMATION;
43
44 typedef union _OB_PRE_OPERATION_PARAMETERS {
45 IN OUT OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation;
46 IN OUT OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation;
47 } OB_PRE_OPERATION_PARAMETERS, *POB_PRE_OPERATION_PARAMETERS;
48
49 typedef struct _OB_PRE_OPERATION_INFORMATION {
50 IN OB_OPERATION Operation;
51 union {
52 IN ULONG Flags;
53 struct {
54 IN ULONG KernelHandle:1;
55 IN ULONG Reserved:31;
56 };
57 };
58 IN PVOID Object;
59 IN POBJECT_TYPE ObjectType;
60 OUT PVOID CallContext;
61 IN POB_PRE_OPERATION_PARAMETERS Parameters;
62 } OB_PRE_OPERATION_INFORMATION, *POB_PRE_OPERATION_INFORMATION;
63
64 typedef struct _OB_POST_CREATE_HANDLE_INFORMATION {
65 IN ACCESS_MASK GrantedAccess;
66 } OB_POST_CREATE_HANDLE_INFORMATION, *POB_POST_CREATE_HANDLE_INFORMATION;
67
68 typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION {
69 IN ACCESS_MASK GrantedAccess;
70 } OB_POST_DUPLICATE_HANDLE_INFORMATION, *POB_POST_DUPLICATE_HANDLE_INFORMATION;
71
72 typedef union _OB_POST_OPERATION_PARAMETERS {
73 IN OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation;
74 IN OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation;
75 } OB_POST_OPERATION_PARAMETERS, *POB_POST_OPERATION_PARAMETERS;
76
77 typedef struct _OB_POST_OPERATION_INFORMATION {
78 IN OB_OPERATION Operation;
79 union {
80 IN ULONG Flags;
81 struct {
82 IN ULONG KernelHandle:1;
83 IN ULONG Reserved:31;
84 };
85 };
86 IN PVOID Object;
87 IN POBJECT_TYPE ObjectType;
88 IN PVOID CallContext;
89 IN NTSTATUS ReturnStatus;
90 IN POB_POST_OPERATION_PARAMETERS Parameters;
91 } OB_POST_OPERATION_INFORMATION,*POB_POST_OPERATION_INFORMATION;
92
93 typedef enum _OB_PREOP_CALLBACK_STATUS {
94 OB_PREOP_SUCCESS
95 } OB_PREOP_CALLBACK_STATUS, *POB_PREOP_CALLBACK_STATUS;
96
97 typedef OB_PREOP_CALLBACK_STATUS
98 (NTAPI *POB_PRE_OPERATION_CALLBACK)(
99 IN PVOID RegistrationContext,
100 IN OUT POB_PRE_OPERATION_INFORMATION OperationInformation);
101
102 typedef VOID
103 (NTAPI *POB_POST_OPERATION_CALLBACK)(
104 IN PVOID RegistrationContext,
105 IN POB_POST_OPERATION_INFORMATION OperationInformation);
106
107 typedef struct _OB_OPERATION_REGISTRATION {
108 IN POBJECT_TYPE *ObjectType;
109 IN OB_OPERATION Operations;
110 IN POB_PRE_OPERATION_CALLBACK PreOperation;
111 IN POB_POST_OPERATION_CALLBACK PostOperation;
112 } OB_OPERATION_REGISTRATION, *POB_OPERATION_REGISTRATION;
113
114 typedef struct _OB_CALLBACK_REGISTRATION {
115 IN USHORT Version;
116 IN USHORT OperationRegistrationCount;
117 IN UNICODE_STRING Altitude;
118 IN PVOID RegistrationContext;
119 IN OB_OPERATION_REGISTRATION *OperationRegistration;
120 } OB_CALLBACK_REGISTRATION, *POB_CALLBACK_REGISTRATION;
121
122 typedef struct _OBJECT_NAME_INFORMATION {
123 UNICODE_STRING Name;
124 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
125
126 /* Exported object types */
127 extern POBJECT_TYPE NTSYSAPI CmKeyObjectType;
128 extern POBJECT_TYPE NTSYSAPI ExEventObjectType;
129 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType;
130 extern POBJECT_TYPE NTSYSAPI IoFileObjectType;
131 extern POBJECT_TYPE NTSYSAPI PsThreadType;
132 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType;
133 extern POBJECT_TYPE NTSYSAPI PsProcessType;
134
135