+SeDeassignSecurity()
[reactos.git] / include / ddk / obtypes.h
1 #ifndef _INCLUDE_DDK_OBTYPES_H
2 #define _INCLUDE_DDK_OBTYPES_H
3 /* $Id$ */
4
5 #include <ddk/setypes.h>        /* for SECURITY_SUBJECT_CONTEXT */
6
7
8 struct _DIRECTORY_OBJECT;
9 struct _OBJECT_ATTRIBUTES;
10
11 typedef struct _ACCESS_STATE
12 {
13     LUID OperationID;
14     BOOLEAN SecurityEvaluated;
15     BOOLEAN GenerateAudit;
16     BOOLEAN GenerateOnClose;
17     BOOLEAN PrivilegesAllocated;
18     ULONG Flags;
19     ACCESS_MASK RemainingDesiredAccess;
20     ACCESS_MASK PreviouslyGrantedAccess;
21     ACCESS_MASK OriginalDesiredAccess;
22     SECURITY_SUBJECT_CONTEXT SubjectSecurityContext;
23     PSECURITY_DESCRIPTOR SecurityDescriptor;
24     PVOID AuxData;
25     union
26     {
27         INITIAL_PRIVILEGE_SET InitialPrivilegeSet;
28         PRIVILEGE_SET PrivilegeSet;
29     } Privileges;
30  
31     BOOLEAN AuditPrivileges;
32     UNICODE_STRING ObjectName;
33     UNICODE_STRING ObjectTypeName;
34 } ACCESS_STATE, *PACCESS_STATE;
35
36 typedef struct _OBJECT_HANDLE_INFORMATION {
37     ULONG HandleAttributes;
38     ACCESS_MASK GrantedAccess;
39 } OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION;
40
41 typedef struct _OBJECT_TYPE
42 {
43   /*
44    * PURPOSE: Tag to be used when allocating objects of this type
45    */
46   ULONG Tag;
47
48   /*
49    * PURPOSE: Name of the type
50    */
51   UNICODE_STRING TypeName;
52   
53   /*
54    * PURPOSE: Total number of objects of this type
55    */
56   ULONG TotalObjects;
57   
58   /*
59    * PURPOSE: Total number of handles of this type
60    */
61   ULONG TotalHandles;
62   
63   /*
64    * PURPOSE: Maximum objects of this type
65    */
66   ULONG MaxObjects;
67   
68    /*
69     * PURPOSE: Maximum handles of this type
70     */
71   ULONG MaxHandles;
72   
73   /*
74    * PURPOSE: Paged pool charge
75    */
76    ULONG PagedPoolCharge;
77   
78   /*
79    * PURPOSE: Nonpaged pool charge
80    */
81   ULONG NonpagedPoolCharge;
82   
83   /*
84    * PURPOSE: Mapping of generic access rights
85    */
86   PGENERIC_MAPPING Mapping;
87   
88   /*
89    * PURPOSE: Dumps the object
90    * NOTE: To be defined
91    */
92   VOID STDCALL_FUNC (*Dump)(VOID);
93   
94   /*
95    * PURPOSE: Opens the object
96    * NOTE: To be defined
97    */
98   VOID STDCALL_FUNC (*Open)(VOID);
99   
100    /*
101     * PURPOSE: Called to close an object if OkayToClose returns true
102     */
103   VOID STDCALL_FUNC (*Close)(PVOID ObjectBody,
104                         ULONG HandleCount);
105   
106   /*
107    * PURPOSE: Called to delete an object when the last reference is removed
108    */
109   VOID STDCALL_FUNC (*Delete)(PVOID ObjectBody);
110   
111   /*
112    * PURPOSE: Called when an open attempts to open a file apparently
113    * residing within the object
114    * RETURNS
115    *     STATUS_SUCCESS       NextObject was found
116    *     STATUS_UNSUCCESSFUL  NextObject not found
117    *     STATUS_REPARSE       Path changed, restart parsing the path
118    */
119    NTSTATUS STDCALL_FUNC (*Parse)(PVOID ParsedObject,
120                              PVOID *NextObject,
121                              PUNICODE_STRING FullPath,
122                              PWSTR *Path,
123                              ULONG Attributes);
124   
125    /*
126     */
127   NTSTATUS STDCALL_FUNC (*Security)(PVOID Object,
128                                ULONG InfoClass,
129                                PVOID Info,
130                                PULONG InfoLength);
131   
132   /*
133    */
134   VOID STDCALL_FUNC (*QueryName)(VOID);
135    
136   /*
137    * PURPOSE: Called when a process asks to close the object
138    */
139   VOID STDCALL_FUNC (*OkayToClose)(VOID);
140   
141   NTSTATUS STDCALL_FUNC (*Create)(PVOID ObjectBody,
142                              PVOID Parent,
143                              PWSTR RemainingPath,
144                              struct _OBJECT_ATTRIBUTES* ObjectAttributes);
145
146   VOID STDCALL_FUNC (*DuplicationNotify)(PEPROCESS DuplicateTo,
147                                     PEPROCESS DuplicateFrom,
148                                     PVOID Object);
149 } OBJECT_TYPE, *POBJECT_TYPE;
150
151
152 typedef struct _OBJECT_HEADER
153 /*
154  * PURPOSE: Header for every object managed by the object manager
155  */
156 {
157    UNICODE_STRING Name;
158    LIST_ENTRY Entry;
159    LONG RefCount;
160    LONG HandleCount;
161    BOOLEAN CloseInProcess;
162    BOOLEAN Permanent;
163    struct _DIRECTORY_OBJECT* Parent;
164    POBJECT_TYPE ObjectType;
165    
166    /*
167     * PURPOSE: Object type
168     * NOTE: This overlaps the first member of the object body
169     */
170    CSHORT Type;
171    
172    /*
173     * PURPOSE: Object size
174     * NOTE: This overlaps the second member of the object body
175     */
176    CSHORT Size;
177    
178    
179 } OBJECT_HEADER, *POBJECT_HEADER;
180
181 typedef struct _OBJECT_ATTRIBUTES
182 {
183    ULONG Length;
184    HANDLE RootDirectory;
185    PUNICODE_STRING ObjectName;
186    ULONG Attributes;
187    SECURITY_DESCRIPTOR *SecurityDescriptor;
188    SECURITY_QUALITY_OF_SERVICE *SecurityQualityOfService;
189 } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
190
191 typedef struct _HANDLE_TABLE
192 {
193    LIST_ENTRY ListHead;
194    KSPIN_LOCK ListLock;
195 } HANDLE_TABLE, *PHANDLE_TABLE;
196
197 extern POBJECT_TYPE ObDirectoryType;
198
199 #if 0 
200 #define OBJECT_TYPE_0                   0
201 #define OBJECT_TYPE_1                   1
202 #define OBJECT_TYPE_DIRECTORY           2
203 #define OBJECT_TYPE_SYMBOLICLINK        3
204 #define OBJECT_TYPE_TOKEN               4
205 #define OBJECT_TYPE_PROCESS             5
206 #define OBJECT_TYPE_THREAD              6
207 #define OBJECT_TYPE_EVENT               7
208 #define OBJECT_TYPE_8                   8
209 #define OBJECT_TYPE_MUTANT              9
210 #define OBJECT_TYPE_SEMAPHORE           10
211 #define OBJECT_TYPE_TIMER               11
212 #define OBJECT_TYPE_12                  12
213 #define OBJECT_TYPE_WINDOWSTATION       13
214 #define OBJECT_TYPE_DESKTOP             14
215 #define OBJECT_TYPE_SECTION             15
216 #define OBJECT_TYPE_KEY                 16
217 #define OBJECT_TYPE_PORT                17
218 #define OBJECT_TYPE_18                  18
219 #define OBJECT_TYPE_19                  19
220 #define OBJECT_TYPE_20                  20
221 #define OBJECT_TYPE_21                  21
222 #define OBJECT_TYPE_IOCOMPLETION        22
223 #define OBJECT_TYPE_FILE                23
224 #endif
225
226 #endif /* ndef _INCLUDE_DDK_OBTYPES_H */