1 /******************************************************************************
2 * Object Manager Types *
3 ******************************************************************************/
5 #define OB_FLT_REGISTRATION_VERSION_0100 0x0100
6 #define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100
8 typedef ULONG OB_OPERATION
;
10 #define OB_OPERATION_HANDLE_CREATE 0x00000001
11 #define OB_OPERATION_HANDLE_DUPLICATE 0x00000002
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
;
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
;
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
;
30 typedef struct _OB_PRE_OPERATION_INFORMATION
{
31 IN OB_OPERATION Operation
;
35 IN ULONG KernelHandle
:1;
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
;
45 typedef struct _OB_POST_CREATE_HANDLE_INFORMATION
{
46 IN ACCESS_MASK GrantedAccess
;
47 } OB_POST_CREATE_HANDLE_INFORMATION
, *POB_POST_CREATE_HANDLE_INFORMATION
;
49 typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION
{
50 IN ACCESS_MASK GrantedAccess
;
51 } OB_POST_DUPLICATE_HANDLE_INFORMATION
, *POB_POST_DUPLICATE_HANDLE_INFORMATION
;
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
;
58 typedef struct _OB_POST_OPERATION_INFORMATION
{
59 IN OB_OPERATION Operation
;
63 IN ULONG KernelHandle
:1;
68 IN POBJECT_TYPE ObjectType
;
70 IN NTSTATUS ReturnStatus
;
71 IN POB_POST_OPERATION_PARAMETERS Parameters
;
72 } OB_POST_OPERATION_INFORMATION
,*POB_POST_OPERATION_INFORMATION
;
74 typedef enum _OB_PREOP_CALLBACK_STATUS
{
76 } OB_PREOP_CALLBACK_STATUS
, *POB_PREOP_CALLBACK_STATUS
;
78 typedef OB_PREOP_CALLBACK_STATUS
79 (NTAPI
*POB_PRE_OPERATION_CALLBACK
)(
80 IN PVOID RegistrationContext
,
81 IN OUT POB_PRE_OPERATION_INFORMATION OperationInformation
);
84 (NTAPI
*POB_POST_OPERATION_CALLBACK
)(
85 IN PVOID RegistrationContext
,
86 IN POB_POST_OPERATION_INFORMATION OperationInformation
);
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
;
95 typedef struct _OB_CALLBACK_REGISTRATION
{
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
;
103 typedef struct _OBJECT_NAME_INFORMATION
{
105 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
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
;