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