1 /******************************************************************************
2 * Object Manager Types *
3 ******************************************************************************/
5 #define MAXIMUM_FILENAME_LENGTH 256
6 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
8 #define OBJECT_TYPE_CREATE 0x0001
9 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
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)
17 #define SYMBOLIC_LINK_QUERY 0x0001
18 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
20 #define DUPLICATE_CLOSE_SOURCE 0x00000001
21 #define DUPLICATE_SAME_ACCESS 0x00000002
22 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
24 #define OB_FLT_REGISTRATION_VERSION_0100 0x0100
25 #define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100
27 typedef ULONG OB_OPERATION
;
29 #define OB_OPERATION_HANDLE_CREATE 0x00000001
30 #define OB_OPERATION_HANDLE_DUPLICATE 0x00000002
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
;
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
;
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
;
49 typedef struct _OB_PRE_OPERATION_INFORMATION
{
50 IN OB_OPERATION Operation
;
54 IN ULONG KernelHandle
:1;
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
;
64 typedef struct _OB_POST_CREATE_HANDLE_INFORMATION
{
65 IN ACCESS_MASK GrantedAccess
;
66 } OB_POST_CREATE_HANDLE_INFORMATION
, *POB_POST_CREATE_HANDLE_INFORMATION
;
68 typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION
{
69 IN ACCESS_MASK GrantedAccess
;
70 } OB_POST_DUPLICATE_HANDLE_INFORMATION
, *POB_POST_DUPLICATE_HANDLE_INFORMATION
;
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
;
77 typedef struct _OB_POST_OPERATION_INFORMATION
{
78 IN OB_OPERATION Operation
;
82 IN ULONG KernelHandle
:1;
87 IN POBJECT_TYPE ObjectType
;
89 IN NTSTATUS ReturnStatus
;
90 IN POB_POST_OPERATION_PARAMETERS Parameters
;
91 } OB_POST_OPERATION_INFORMATION
,*POB_POST_OPERATION_INFORMATION
;
93 typedef enum _OB_PREOP_CALLBACK_STATUS
{
95 } OB_PREOP_CALLBACK_STATUS
, *POB_PREOP_CALLBACK_STATUS
;
97 typedef OB_PREOP_CALLBACK_STATUS
98 (NTAPI
*POB_PRE_OPERATION_CALLBACK
)(
99 IN PVOID RegistrationContext
,
100 IN OUT POB_PRE_OPERATION_INFORMATION OperationInformation
);
103 (NTAPI
*POB_POST_OPERATION_CALLBACK
)(
104 IN PVOID RegistrationContext
,
105 IN POB_POST_OPERATION_INFORMATION OperationInformation
);
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
;
114 typedef struct _OB_CALLBACK_REGISTRATION
{
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
;
122 typedef struct _OBJECT_NAME_INFORMATION
{
124 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
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
;