1 /******************************************************************************
2 * Object Manager Types *
3 ******************************************************************************/
6 #define MAXIMUM_FILENAME_LENGTH 256
7 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
9 #define OBJECT_TYPE_CREATE 0x0001
10 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
12 #define DIRECTORY_QUERY 0x0001
13 #define DIRECTORY_TRAVERSE 0x0002
14 #define DIRECTORY_CREATE_OBJECT 0x0004
15 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
16 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
18 #define SYMBOLIC_LINK_QUERY 0x0001
19 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
21 #define DUPLICATE_CLOSE_SOURCE 0x00000001
22 #define DUPLICATE_SAME_ACCESS 0x00000002
23 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
25 #define OB_FLT_REGISTRATION_VERSION_0100 0x0100
26 #define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100
28 typedef ULONG OB_OPERATION
;
30 #define OB_OPERATION_HANDLE_CREATE 0x00000001
31 #define OB_OPERATION_HANDLE_DUPLICATE 0x00000002
33 typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION
{
34 _Inout_ ACCESS_MASK DesiredAccess
;
35 _In_ ACCESS_MASK OriginalDesiredAccess
;
36 } OB_PRE_CREATE_HANDLE_INFORMATION
, *POB_PRE_CREATE_HANDLE_INFORMATION
;
38 typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION
{
39 _Inout_ ACCESS_MASK DesiredAccess
;
40 _In_ ACCESS_MASK OriginalDesiredAccess
;
41 _In_ PVOID SourceProcess
;
42 _In_ PVOID TargetProcess
;
43 } OB_PRE_DUPLICATE_HANDLE_INFORMATION
, *POB_PRE_DUPLICATE_HANDLE_INFORMATION
;
45 typedef union _OB_PRE_OPERATION_PARAMETERS
{
46 _Inout_ OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation
;
47 _Inout_ OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation
;
48 } OB_PRE_OPERATION_PARAMETERS
, *POB_PRE_OPERATION_PARAMETERS
;
50 typedef struct _OB_PRE_OPERATION_INFORMATION
{
51 _In_ OB_OPERATION Operation
;
52 _ANONYMOUS_UNION
union {
54 _ANONYMOUS_STRUCT
struct {
55 _In_ ULONG KernelHandle
:1;
56 _In_ ULONG Reserved
:31;
60 _In_ POBJECT_TYPE ObjectType
;
61 _Out_ PVOID CallContext
;
62 _In_ POB_PRE_OPERATION_PARAMETERS Parameters
;
63 } OB_PRE_OPERATION_INFORMATION
, *POB_PRE_OPERATION_INFORMATION
;
65 typedef struct _OB_POST_CREATE_HANDLE_INFORMATION
{
66 _In_ ACCESS_MASK GrantedAccess
;
67 } OB_POST_CREATE_HANDLE_INFORMATION
, *POB_POST_CREATE_HANDLE_INFORMATION
;
69 typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION
{
70 _In_ ACCESS_MASK GrantedAccess
;
71 } OB_POST_DUPLICATE_HANDLE_INFORMATION
, *POB_POST_DUPLICATE_HANDLE_INFORMATION
;
73 typedef union _OB_POST_OPERATION_PARAMETERS
{
74 _In_ OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation
;
75 _In_ OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation
;
76 } OB_POST_OPERATION_PARAMETERS
, *POB_POST_OPERATION_PARAMETERS
;
78 typedef struct _OB_POST_OPERATION_INFORMATION
{
79 _In_ OB_OPERATION Operation
;
80 _ANONYMOUS_UNION
union {
82 _ANONYMOUS_STRUCT
struct {
83 _In_ ULONG KernelHandle
:1;
84 _In_ ULONG Reserved
:31;
88 _In_ POBJECT_TYPE ObjectType
;
89 _In_ PVOID CallContext
;
90 _In_ NTSTATUS ReturnStatus
;
91 _In_ POB_POST_OPERATION_PARAMETERS Parameters
;
92 } OB_POST_OPERATION_INFORMATION
,*POB_POST_OPERATION_INFORMATION
;
94 typedef enum _OB_PREOP_CALLBACK_STATUS
{
96 } OB_PREOP_CALLBACK_STATUS
, *POB_PREOP_CALLBACK_STATUS
;
98 typedef OB_PREOP_CALLBACK_STATUS
99 (NTAPI
*POB_PRE_OPERATION_CALLBACK
)(
100 _In_ PVOID RegistrationContext
,
101 _Inout_ POB_PRE_OPERATION_INFORMATION OperationInformation
);
104 (NTAPI
*POB_POST_OPERATION_CALLBACK
)(
105 _In_ PVOID RegistrationContext
,
106 _In_ POB_POST_OPERATION_INFORMATION OperationInformation
);
108 typedef struct _OB_OPERATION_REGISTRATION
{
109 _In_ POBJECT_TYPE
*ObjectType
;
110 _In_ OB_OPERATION Operations
;
111 _In_ POB_PRE_OPERATION_CALLBACK PreOperation
;
112 _In_ POB_POST_OPERATION_CALLBACK PostOperation
;
113 } OB_OPERATION_REGISTRATION
, *POB_OPERATION_REGISTRATION
;
115 typedef struct _OB_CALLBACK_REGISTRATION
{
117 _In_ USHORT OperationRegistrationCount
;
118 _In_ UNICODE_STRING Altitude
;
119 _In_ PVOID RegistrationContext
;
120 _In_ OB_OPERATION_REGISTRATION
*OperationRegistration
;
121 } OB_CALLBACK_REGISTRATION
, *POB_CALLBACK_REGISTRATION
;
123 typedef struct _OBJECT_NAME_INFORMATION
{
125 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
127 /* Exported object types */
129 extern POBJECT_TYPE NTSYSAPI CmKeyObjectType
;
130 extern POBJECT_TYPE NTSYSAPI ExEventObjectType
;
131 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType
;
132 extern POBJECT_TYPE NTSYSAPI IoFileObjectType
;
133 extern POBJECT_TYPE NTSYSAPI PsThreadType
;
134 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType
;
135 extern POBJECT_TYPE NTSYSAPI PsProcessType
;
137 __CREATE_NTOS_DATA_IMPORT_ALIAS(CmKeyObjectType
)
138 __CREATE_NTOS_DATA_IMPORT_ALIAS(IoFileObjectType
)
139 __CREATE_NTOS_DATA_IMPORT_ALIAS(ExEventObjectType
)
140 __CREATE_NTOS_DATA_IMPORT_ALIAS(ExSemaphoreObjectType
)
141 __CREATE_NTOS_DATA_IMPORT_ALIAS(TmTransactionManagerObjectType
)
142 __CREATE_NTOS_DATA_IMPORT_ALIAS(TmResourceManagerObjectType
)
143 __CREATE_NTOS_DATA_IMPORT_ALIAS(TmEnlistmentObjectType
)
144 __CREATE_NTOS_DATA_IMPORT_ALIAS(TmTransactionObjectType
)
145 __CREATE_NTOS_DATA_IMPORT_ALIAS(PsProcessType
)
146 __CREATE_NTOS_DATA_IMPORT_ALIAS(PsThreadType
)
147 __CREATE_NTOS_DATA_IMPORT_ALIAS(SeTokenObjectType
)
148 extern POBJECT_TYPE
*CmKeyObjectType
;
149 extern POBJECT_TYPE
*IoFileObjectType
;
150 extern POBJECT_TYPE
*ExEventObjectType
;
151 extern POBJECT_TYPE
*ExSemaphoreObjectType
;
152 extern POBJECT_TYPE
*TmTransactionManagerObjectType
;
153 extern POBJECT_TYPE
*TmResourceManagerObjectType
;
154 extern POBJECT_TYPE
*TmEnlistmentObjectType
;
155 extern POBJECT_TYPE
*TmTransactionObjectType
;
156 extern POBJECT_TYPE
*PsProcessType
;
157 extern POBJECT_TYPE
*PsThreadType
;
158 extern POBJECT_TYPE
*SeTokenObjectType
;
163 typedef enum _OBJECT_INFORMATION_CLASS
{
164 ObjectBasicInformation
= 0,
165 ObjectTypeInformation
= 2,
167 $
if (_NTIFS_
) // we should remove these, but the kernel needs them :-/
168 /* Not for public use */
169 ObjectNameInformation
= 1,
170 ObjectTypesInformation
= 3,
171 ObjectHandleFlagInformation
= 4,
172 ObjectSessionInformation
= 5,
176 } OBJECT_INFORMATION_CLASS
;