Add definitions of ACCESS_MAX_MS_V2_ACE_TYPE, ACCESS_ALLOWED_COMPOUND_ACE_TYPE, ACCES...
[reactos.git] / reactos / w32api / include / ddk / ntifs.h
1 /*
2 * ntifs.h
3 *
4 * Windows NT Filesystem Driver Developer Kit
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Bo Brantén <bosse@acc.umu.se>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23 #ifndef _NTIFS_
24 #define _NTIFS_
25 #define _GNU_NTIFS_
26
27 #if __GNUC__ >= 3
28 #pragma GCC system_header
29 #endif
30
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34
35 #include "ntddk.h"
36 #include "ntapi.h"
37
38 #pragma pack(push,4)
39
40 #define VER_PRODUCTBUILD 10000
41
42 #ifndef NTSYSAPI
43 #define NTSYSAPI
44 #endif
45
46 #ifndef NTKERNELAPI
47 #define NTKERNELAPI STDCALL
48 #endif
49
50 typedef struct _SE_EXPORTS *PSE_EXPORTS;
51
52 extern PUCHAR *FsRtlLegalAnsiCharacterArray;
53 extern PSE_EXPORTS SeExports;
54 extern PACL SePublicDefaultDacl;
55 extern PACL SeSystemDefaultDacl;
56
57 #define ANSI_DOS_STAR ('<')
58 #define ANSI_DOS_QM ('>')
59 #define ANSI_DOS_DOT ('"')
60
61 #define DOS_STAR (L'<')
62 #define DOS_QM (L'>')
63 #define DOS_DOT (L'"')
64
65 /* also in winnt.h */
66 #define ACCESS_MIN_MS_ACE_TYPE (0x0)
67 #define ACCESS_ALLOWED_ACE_TYPE (0x0)
68 #define ACCESS_DENIED_ACE_TYPE (0x1)
69 #define SYSTEM_AUDIT_ACE_TYPE (0x2)
70 #define SYSTEM_ALARM_ACE_TYPE (0x3)
71 #define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
72 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
73 #define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
74 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
75 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
76 #define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
77 #define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
78 #define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
79 #define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
80 #define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
81 #define ACCESS_MAX_MS_ACE_TYPE (0x8)
82 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
83 #define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
84 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
85 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
86 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
87 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
88 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
89 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
90 #define ACCESS_MAX_MS_V5_ACE_TYPE (0x10)
91
92 #define COMPRESSION_FORMAT_NONE (0x0000)
93 #define COMPRESSION_FORMAT_DEFAULT (0x0001)
94 #define COMPRESSION_FORMAT_LZNT1 (0x0002)
95 #define COMPRESSION_ENGINE_STANDARD (0x0000)
96 #define COMPRESSION_ENGINE_MAXIMUM (0x0100)
97 #define COMPRESSION_ENGINE_HIBER (0x0200)
98
99 #define FILE_ACTION_ADDED 0x00000001
100 #define FILE_ACTION_REMOVED 0x00000002
101 #define FILE_ACTION_MODIFIED 0x00000003
102 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
103 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
104 #define FILE_ACTION_ADDED_STREAM 0x00000006
105 #define FILE_ACTION_REMOVED_STREAM 0x00000007
106 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
107 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
108 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
109 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
110 /* end winnt.h */
111
112 #define FILE_EA_TYPE_BINARY 0xfffe
113 #define FILE_EA_TYPE_ASCII 0xfffd
114 #define FILE_EA_TYPE_BITMAP 0xfffb
115 #define FILE_EA_TYPE_METAFILE 0xfffa
116 #define FILE_EA_TYPE_ICON 0xfff9
117 #define FILE_EA_TYPE_EA 0xffee
118 #define FILE_EA_TYPE_MVMT 0xffdf
119 #define FILE_EA_TYPE_MVST 0xffde
120 #define FILE_EA_TYPE_ASN1 0xffdd
121 #define FILE_EA_TYPE_FAMILY_IDS 0xff01
122
123 #define FILE_NEED_EA 0x00000080
124
125 /* also in winnt.h */
126 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
127 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
128 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
129 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
130 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
131 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
132 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
133 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
134 #define FILE_NOTIFY_CHANGE_EA 0x00000080
135 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
136 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
137 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
138 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
139 #define FILE_NOTIFY_VALID_MASK 0x00000fff
140 /* end winnt.h */
141
142 #define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007
143 #define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008
144
145 #define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009
146
147 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
148 #define FILE_CASE_PRESERVED_NAMES 0x00000002
149 #define FILE_UNICODE_ON_DISK 0x00000004
150 #define FILE_PERSISTENT_ACLS 0x00000008
151 #define FILE_FILE_COMPRESSION 0x00000010
152 #define FILE_VOLUME_QUOTAS 0x00000020
153 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
154 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
155 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
156 #define FS_LFN_APIS 0x00004000
157 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
158 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
159 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
160 #define FILE_NAMED_STREAMS 0x00040000
161
162 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
163 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
164
165 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
166 #define FILE_PIPE_MESSAGE_MODE 0x00000001
167
168 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
169 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
170
171 #define FILE_PIPE_INBOUND 0x00000000
172 #define FILE_PIPE_OUTBOUND 0x00000001
173 #define FILE_PIPE_FULL_DUPLEX 0x00000002
174
175 #define FILE_PIPE_DISCONNECTED_STATE 0x00000001
176 #define FILE_PIPE_LISTENING_STATE 0x00000002
177 #define FILE_PIPE_CONNECTED_STATE 0x00000003
178 #define FILE_PIPE_CLOSING_STATE 0x00000004
179
180 #define FILE_PIPE_CLIENT_END 0x00000000
181 #define FILE_PIPE_SERVER_END 0x00000001
182
183 #define FILE_PIPE_READ_DATA 0x00000000
184 #define FILE_PIPE_WRITE_SPACE 0x00000001
185
186 #define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
187 #define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
188 #define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
189 #define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
190 #define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
191 #define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
192 #define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
193 #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
194 #define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
195 #define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
196 #define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
197 #define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
198 #define FILE_STORAGE_TYPE_MASK 0x000f0000
199 #define FILE_STORAGE_TYPE_SHIFT 16
200
201 #define FILE_VC_QUOTA_NONE 0x00000000
202 #define FILE_VC_QUOTA_TRACK 0x00000001
203 #define FILE_VC_QUOTA_ENFORCE 0x00000002
204 #define FILE_VC_QUOTA_MASK 0x00000003
205
206 #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
207 #define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008
208
209 #define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010
210 #define FILE_VC_LOG_QUOTA_LIMIT 0x00000020
211 #define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040
212 #define FILE_VC_LOG_VOLUME_LIMIT 0x00000080
213
214 #define FILE_VC_QUOTAS_INCOMPLETE 0x00000100
215 #define FILE_VC_QUOTAS_REBUILDING 0x00000200
216
217 #define FILE_VC_VALID_MASK 0x000003ff
218
219 #define FSRTL_FLAG_FILE_MODIFIED (0x01)
220 #define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
221 #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
222 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
223 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
224 #define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
225 #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
226
227 #define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
228
229 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
230 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
231 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
232 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
233 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG (0x04)
234
235 #define FSRTL_VOLUME_DISMOUNT 1
236 #define FSRTL_VOLUME_DISMOUNT_FAILED 2
237 #define FSRTL_VOLUME_LOCK 3
238 #define FSRTL_VOLUME_LOCK_FAILED 4
239 #define FSRTL_VOLUME_UNLOCK 5
240 #define FSRTL_VOLUME_MOUNT 6
241
242 #define FSRTL_WILD_CHARACTER 0x08
243
244 #ifdef _X86_
245 #define HARDWARE_PTE HARDWARE_PTE_X86
246 #define PHARDWARE_PTE PHARDWARE_PTE_X86
247 #else
248 #define HARDWARE_PTE ULONG
249 #define PHARDWARE_PTE PULONG
250 #endif
251
252 #define IO_CHECK_CREATE_PARAMETERS 0x0200
253 #define IO_ATTACH_DEVICE 0x0400
254
255 #define IO_ATTACH_DEVICE_API 0x80000000
256 /* also in winnt.h */
257 #define IO_COMPLETION_QUERY_STATE 0x0001
258 #define IO_COMPLETION_MODIFY_STATE 0x0002
259 #define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
260 /* end winnt.h */
261 #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64
262 #define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024
263
264 #define IO_TYPE_APC 18
265 #define IO_TYPE_DPC 19
266 #define IO_TYPE_DEVICE_QUEUE 20
267 #define IO_TYPE_EVENT_PAIR 21
268 #define IO_TYPE_INTERRUPT 22
269 #define IO_TYPE_PROFILE 23
270
271 #define IRP_BEING_VERIFIED 0x10
272
273 #define MAILSLOT_CLASS_FIRSTCLASS 1
274 #define MAILSLOT_CLASS_SECONDCLASS 2
275
276 #define MAILSLOT_SIZE_AUTO 0
277
278 #define MAP_PROCESS 1L
279 #define MAP_SYSTEM 2L
280 #define MEM_DOS_LIM 0x40000000
281 /* also in winnt.h */
282 #define MEM_IMAGE SEC_IMAGE
283 /* end winnt.h */
284 #define OB_TYPE_TYPE 1
285 #define OB_TYPE_DIRECTORY 2
286 #define OB_TYPE_SYMBOLIC_LINK 3
287 #define OB_TYPE_TOKEN 4
288 #define OB_TYPE_PROCESS 5
289 #define OB_TYPE_THREAD 6
290 #define OB_TYPE_EVENT 7
291 #define OB_TYPE_EVENT_PAIR 8
292 #define OB_TYPE_MUTANT 9
293 #define OB_TYPE_SEMAPHORE 10
294 #define OB_TYPE_TIMER 11
295 #define OB_TYPE_PROFILE 12
296 #define OB_TYPE_WINDOW_STATION 13
297 #define OB_TYPE_DESKTOP 14
298 #define OB_TYPE_SECTION 15
299 #define OB_TYPE_KEY 16
300 #define OB_TYPE_PORT 17
301 #define OB_TYPE_ADAPTER 18
302 #define OB_TYPE_CONTROLLER 19
303 #define OB_TYPE_DEVICE 20
304 #define OB_TYPE_DRIVER 21
305 #define OB_TYPE_IO_COMPLETION 22
306 #define OB_TYPE_FILE 23
307
308 #define PIN_WAIT (1)
309 #define PIN_EXCLUSIVE (2)
310 #define PIN_NO_READ (4)
311 #define PIN_IF_BCB (8)
312
313 #define PORT_CONNECT 0x0001
314 #define PORT_ALL_ACCESS (STANDARD_RIGHTS_ALL |\
315 PORT_CONNECT)
316 /* also in winnt.h */
317 #define SEC_BASED 0x00200000
318 #define SEC_NO_CHANGE 0x00400000
319 #define SEC_FILE 0x00800000
320 #define SEC_IMAGE 0x01000000
321 #define SEC_VLM 0x02000000
322 #define SEC_RESERVE 0x04000000
323 #define SEC_COMMIT 0x08000000
324 #define SEC_NOCACHE 0x10000000
325
326 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
327 #define SECURITY_WORLD_RID (0x00000000L)
328
329 #define SID_REVISION 1
330 #define SID_MAX_SUB_AUTHORITIES 15
331 #define SID_RECOMMENDED_SUB_AUTHORITIES 1
332
333 #define TOKEN_ASSIGN_PRIMARY (0x0001)
334 #define TOKEN_DUPLICATE (0x0002)
335 #define TOKEN_IMPERSONATE (0x0004)
336 #define TOKEN_QUERY (0x0008)
337 #define TOKEN_QUERY_SOURCE (0x0010)
338 #define TOKEN_ADJUST_PRIVILEGES (0x0020)
339 #define TOKEN_ADJUST_GROUPS (0x0040)
340 #define TOKEN_ADJUST_DEFAULT (0x0080)
341 #define TOKEN_ADJUST_SESSIONID (0x0100)
342
343 #define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
344 TOKEN_ASSIGN_PRIMARY |\
345 TOKEN_DUPLICATE |\
346 TOKEN_IMPERSONATE |\
347 TOKEN_QUERY |\
348 TOKEN_QUERY_SOURCE |\
349 TOKEN_ADJUST_PRIVILEGES |\
350 TOKEN_ADJUST_GROUPS |\
351 TOKEN_ADJUST_DEFAULT |\
352 TOKEN_ADJUST_SESSIONID)
353
354 #define TOKEN_READ (STANDARD_RIGHTS_READ |\
355 TOKEN_QUERY)
356
357 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\
358 TOKEN_ADJUST_PRIVILEGES |\
359 TOKEN_ADJUST_GROUPS |\
360 TOKEN_ADJUST_DEFAULT)
361
362 #define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
363
364 #define TOKEN_SOURCE_LENGTH 8
365 /* end winnt.h */
366
367 #define TOKEN_HAS_TRAVERSE_PRIVILEGE 0x01
368 #define TOKEN_HAS_BACKUP_PRIVILEGE 0x02
369 #define TOKEN_HAS_RESTORE_PRIVILEGE 0x04
370 #define TOKEN_HAS_ADMIN_GROUP 0x08
371 #define TOKEN_IS_RESTRICTED 0x10
372
373 #define VACB_MAPPING_GRANULARITY (0x40000)
374 #define VACB_OFFSET_SHIFT (18)
375
376 #define SE_OWNER_DEFAULTED 0x0001
377 #define SE_GROUP_DEFAULTED 0x0002
378 #define SE_DACL_PRESENT 0x0004
379 #define SE_DACL_DEFAULTED 0x0008
380 #define SE_SACL_PRESENT 0x0010
381 #define SE_SACL_DEFAULTED 0x0020
382 #define SE_DACL_UNTRUSTED 0x0040
383 #define SE_SERVER_SECURITY 0x0080
384 #define SE_DACL_AUTO_INHERIT_REQ 0x0100
385 #define SE_SACL_AUTO_INHERIT_REQ 0x0200
386 #define SE_DACL_AUTO_INHERITED 0x0400
387 #define SE_SACL_AUTO_INHERITED 0x0800
388 #define SE_DACL_PROTECTED 0x1000
389 #define SE_SACL_PROTECTED 0x2000
390 #define SE_RM_CONTROL_VALID 0x4000
391 #define SE_SELF_RELATIVE 0x8000
392
393 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
394 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
395 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
396 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
397 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
398 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
399 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
400 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
401 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
402
403 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
404 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
405 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
406
407 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
408 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
409 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
410
411
412 #define FSCTL_MARK_AS_SYSTEM_HIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
413 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
414 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
415 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
416 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
417 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
418
419 #if (VER_PRODUCTBUILD >= 1381)
420
421 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
422 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
423 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS)
424 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
425 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
426 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
427 #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
428 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
429
430 #endif /* (VER_PRODUCTBUILD >= 1381) */
431
432 #if (VER_PRODUCTBUILD >= 2195)
433
434 #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
435 #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
436 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
437
438 #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
439 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA)
440 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
441 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA)
442 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA)
443 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
444 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA)
445 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_READ_DATA)
446 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA)
447 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_READ_DATA)
448 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA)
449 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
450 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA)
451 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
452 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
453 #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
454 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
455 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
456 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_ANY_ACCESS)
457 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_ANY_ACCESS)
458 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_READ_DATA)
459 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_READ_DATA)
460 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_READ_DATA)
461 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
462 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
463 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
464 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
465 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
466 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
467 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
468 #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
469 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
470 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
471 #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
472 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
473 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
474
475 #endif /* (VER_PRODUCTBUILD >= 2195) */
476
477 #define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
478
479 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
480 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
481 #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
482 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
483 #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
484 #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
485 #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
486 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
487
488 #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
489 #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
490 #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
491 #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
492 #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
493 #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
494 #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
495 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
496 #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
497 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
498 #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
499 #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
500 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
501 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
502
503 #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
504
505 typedef PVOID PEJOB;
506 typedef PVOID OPLOCK, *POPLOCK;
507
508 typedef struct _CACHE_MANAGER_CALLBACKS *PCACHE_MANAGER_CALLBACKS;
509 typedef struct _EPROCESS_QUOTA_BLOCK *PEPROCESS_QUOTA_BLOCK;
510 typedef struct _FILE_GET_QUOTA_INFORMATION *PFILE_GET_QUOTA_INFORMATION;
511 typedef struct _HANDLE_TABLE *PHANDLE_TABLE;
512 typedef struct _KPROCESS *PKPROCESS;
513 typedef struct _KQUEUE *PKQUEUE;
514 typedef struct _KTRAP_FRAME *PKTRAP_FRAME;
515 typedef struct _MAILSLOT_CREATE_PARAMETERS *PMAILSLOT_CREATE_PARAMETERS;
516 typedef struct _MMWSL *PMMWSL;
517 typedef struct _NAMED_PIPE_CREATE_PARAMETERS *PNAMED_PIPE_CREATE_PARAMETERS;
518 typedef struct _OBJECT_DIRECTORY *POBJECT_DIRECTORY;
519 typedef struct _PAGEFAULT_HISTORY *PPAGEFAULT_HISTORY;
520 typedef struct _PS_IMPERSONATION_INFORMATION *PPS_IMPERSONATION_INFORMATION;
521 typedef struct _SECTION_OBJECT *PSECTION_OBJECT;
522 typedef struct _SHARED_CACHE_MAP *PSHARED_CACHE_MAP;
523 typedef struct _VACB *PVACB;
524 typedef struct _VAD_HEADER *PVAD_HEADER;
525
526 typedef struct _NOTIFY_SYNC
527 {
528 ULONG Unknown0;
529 ULONG Unknown1;
530 ULONG Unknown2;
531 USHORT Unknown3;
532 USHORT Unknown4;
533 ULONG Unknown5;
534 ULONG Unknown6;
535 ULONG Unknown7;
536 ULONG Unknown8;
537 ULONG Unknown9;
538 ULONG Unknown10;
539 } NOTIFY_SYNC, * PNOTIFY_SYNC;
540
541 typedef enum _FAST_IO_POSSIBLE {
542 FastIoIsNotPossible,
543 FastIoIsPossible,
544 FastIoIsQuestionable
545 } FAST_IO_POSSIBLE;
546
547 typedef enum _FILE_STORAGE_TYPE {
548 StorageTypeDefault = 1,
549 StorageTypeDirectory,
550 StorageTypeFile,
551 StorageTypeJunctionPoint,
552 StorageTypeCatalog,
553 StorageTypeStructuredStorage,
554 StorageTypeEmbedding,
555 StorageTypeStream
556 } FILE_STORAGE_TYPE;
557
558 typedef enum _IO_COMPLETION_INFORMATION_CLASS {
559 IoCompletionBasicInformation
560 } IO_COMPLETION_INFORMATION_CLASS;
561
562 typedef enum _OBJECT_INFO_CLASS {
563 ObjectBasicInfo,
564 ObjectNameInfo,
565 ObjectTypeInfo,
566 ObjectAllTypesInfo,
567 ObjectProtectionInfo
568 } OBJECT_INFO_CLASS;
569
570 typedef struct _KAPC_STATE {
571 LIST_ENTRY ApcListHead[2];
572 PKPROCESS Process;
573 BOOLEAN KernelApcInProgress;
574 BOOLEAN KernelApcPending;
575 BOOLEAN UserApcPending;
576 } KAPC_STATE, *PKAPC_STATE, *__restrict PRKAPC_STATE;
577
578 #if (VER_PRODUCTBUILD >= 2600)
579
580 typedef struct _MMSUPPORT_FLAGS {
581 ULONG SessionSpace : 1;
582 ULONG BeingTrimmed : 1;
583 ULONG SessionLeader : 1;
584 ULONG TrimHard : 1;
585 ULONG WorkingSetHard : 1;
586 ULONG AddressSpaceBeingDeleted : 1;
587 ULONG Available : 10;
588 ULONG AllowWorkingSetAdjustment : 8;
589 ULONG MemoryPriority : 8;
590 } MMSUPPORT_FLAGS, *PMMSUPPORT_FLAGS;
591
592 #else
593
594 typedef struct _MMSUPPORT_FLAGS {
595 ULONG SessionSpace : 1;
596 ULONG BeingTrimmed : 1;
597 ULONG ProcessInSession : 1;
598 ULONG SessionLeader : 1;
599 ULONG TrimHard : 1;
600 ULONG WorkingSetHard : 1;
601 ULONG WriteWatch : 1;
602 ULONG Filler : 25;
603 } MMSUPPORT_FLAGS, *PMMSUPPORT_FLAGS;
604
605 #endif
606
607 #if (VER_PRODUCTBUILD >= 2600)
608
609 typedef struct _MMSUPPORT {
610 LARGE_INTEGER LastTrimTime;
611 MMSUPPORT_FLAGS Flags;
612 ULONG PageFaultCount;
613 ULONG PeakWorkingSetSize;
614 ULONG WorkingSetSize;
615 ULONG MinimumWorkingSetSize;
616 ULONG MaximumWorkingSetSize;
617 PMMWSL VmWorkingSetList;
618 LIST_ENTRY WorkingSetExpansionLinks;
619 ULONG Claim;
620 ULONG NextEstimationSlot;
621 ULONG NextAgingSlot;
622 ULONG EstimatedAvailable;
623 ULONG GrowthSinceLastEstimate;
624 } MMSUPPORT, *PMMSUPPORT;
625
626 #else
627
628 typedef struct _MMSUPPORT {
629 LARGE_INTEGER LastTrimTime;
630 ULONG LastTrimFaultCount;
631 ULONG PageFaultCount;
632 ULONG PeakWorkingSetSize;
633 ULONG WorkingSetSize;
634 ULONG MinimumWorkingSetSize;
635 ULONG MaximumWorkingSetSize;
636 PMMWSL VmWorkingSetList;
637 LIST_ENTRY WorkingSetExpansionLinks;
638 BOOLEAN AllowWorkingSetAdjustment;
639 BOOLEAN AddressSpaceBeingDeleted;
640 UCHAR ForegroundSwitchCount;
641 UCHAR MemoryPriority;
642 #if (VER_PRODUCTBUILD >= 2195)
643 union {
644 ULONG LongFlags;
645 MMSUPPORT_FLAGS Flags;
646 } u;
647 ULONG Claim;
648 ULONG NextEstimationSlot;
649 ULONG NextAgingSlot;
650 ULONG EstimatedAvailable;
651 ULONG GrowthSinceLastEstimate;
652 #endif /* (VER_PRODUCTBUILD >= 2195) */
653 } MMSUPPORT, *PMMSUPPORT;
654
655 #endif
656
657 typedef struct _SE_AUDIT_PROCESS_CREATION_INFO {
658 POBJECT_NAME_INFORMATION ImageFileName;
659 } SE_AUDIT_PROCESS_CREATION_INFO, *PSE_AUDIT_PROCESS_CREATION_INFO;
660
661 typedef struct _BITMAP_RANGE {
662 LIST_ENTRY Links;
663 LARGE_INTEGER BasePage;
664 ULONG FirstDirtyPage;
665 ULONG LastDirtyPage;
666 ULONG DirtyPages;
667 PULONG Bitmap;
668 } BITMAP_RANGE, *PBITMAP_RANGE;
669
670 typedef struct _CACHE_UNINITIALIZE_EVENT {
671 struct _CACHE_UNINITIALIZE_EVENT *Next;
672 KEVENT Event;
673 } CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT;
674
675 typedef struct _CC_FILE_SIZES {
676 LARGE_INTEGER AllocationSize;
677 LARGE_INTEGER FileSize;
678 LARGE_INTEGER ValidDataLength;
679 } CC_FILE_SIZES, *PCC_FILE_SIZES;
680
681 typedef struct _COMPRESSED_DATA_INFO {
682 USHORT CompressionFormatAndEngine;
683 UCHAR CompressionUnitShift;
684 UCHAR ChunkShift;
685 UCHAR ClusterShift;
686 UCHAR Reserved;
687 USHORT NumberOfChunks;
688 ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
689 } COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
690
691 typedef struct _DEVICE_MAP {
692 POBJECT_DIRECTORY DosDevicesDirectory;
693 POBJECT_DIRECTORY GlobalDosDevicesDirectory;
694 ULONG ReferenceCount;
695 ULONG DriveMap;
696 UCHAR DriveType[32];
697 } DEVICE_MAP, *PDEVICE_MAP;
698
699 #if (VER_PRODUCTBUILD >= 2600)
700
701 typedef struct _EX_FAST_REF {
702 _ANONYMOUS_UNION union {
703 PVOID Object;
704 ULONG RefCnt : 3;
705 ULONG Value;
706 } DUMMYUNIONNAME;
707 } EX_FAST_REF, *PEX_FAST_REF;
708
709 typedef struct _EX_PUSH_LOCK {
710 _ANONYMOUS_UNION union {
711 _ANONYMOUS_STRUCT struct {
712 ULONG Waiting : 1;
713 ULONG Exclusive : 1;
714 ULONG Shared : 30;
715 } DUMMYSTRUCTNAME;
716 ULONG Value;
717 PVOID Ptr;
718 } DUMMYUNIONNAME;
719 } EX_PUSH_LOCK, *PEX_PUSH_LOCK;
720
721 typedef struct _EX_RUNDOWN_REF {
722 _ANONYMOUS_UNION union {
723 ULONG Count;
724 PVOID Ptr;
725 } DUMMYUNIONNAME;
726 } EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;
727
728 #endif
729
730 typedef struct _EPROCESS_QUOTA_ENTRY {
731 ULONG Usage;
732 ULONG Limit;
733 ULONG Peak;
734 ULONG Return;
735 } EPROCESS_QUOTA_ENTRY, *PEPROCESS_QUOTA_ENTRY;
736
737 typedef struct _EPROCESS_QUOTA_BLOCK {
738 EPROCESS_QUOTA_ENTRY QuotaEntry[3];
739 LIST_ENTRY QuotaList;
740 ULONG ReferenceCount;
741 ULONG ProcessCount;
742 } EPROCESS_QUOTA_BLOCK, *PEPROCESS_QUOTA_BLOCK;
743
744 typedef struct _FILE_ACCESS_INFORMATION {
745 ACCESS_MASK AccessFlags;
746 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
747
748 typedef struct _FILE_ALLOCATION_INFORMATION {
749 LARGE_INTEGER AllocationSize;
750 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
751
752 typedef struct _FILE_BOTH_DIR_INFORMATION {
753 ULONG NextEntryOffset;
754 ULONG FileIndex;
755 LARGE_INTEGER CreationTime;
756 LARGE_INTEGER LastAccessTime;
757 LARGE_INTEGER LastWriteTime;
758 LARGE_INTEGER ChangeTime;
759 LARGE_INTEGER EndOfFile;
760 LARGE_INTEGER AllocationSize;
761 ULONG FileAttributes;
762 ULONG FileNameLength;
763 ULONG EaSize;
764 CCHAR ShortNameLength;
765 WCHAR ShortName[12];
766 WCHAR FileName[1];
767 } FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
768
769 typedef struct _FILE_COMPLETION_INFORMATION {
770 HANDLE Port;
771 PVOID Key;
772 } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
773
774 typedef struct _FILE_COMPRESSION_INFORMATION {
775 LARGE_INTEGER CompressedFileSize;
776 USHORT CompressionFormat;
777 UCHAR CompressionUnitShift;
778 UCHAR ChunkShift;
779 UCHAR ClusterShift;
780 UCHAR Reserved[3];
781 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
782
783 typedef struct _FILE_COPY_ON_WRITE_INFORMATION {
784 BOOLEAN ReplaceIfExists;
785 HANDLE RootDirectory;
786 ULONG FileNameLength;
787 WCHAR FileName[1];
788 } FILE_COPY_ON_WRITE_INFORMATION, *PFILE_COPY_ON_WRITE_INFORMATION;
789
790 typedef struct _FILE_DIRECTORY_INFORMATION {
791 ULONG NextEntryOffset;
792 ULONG FileIndex;
793 LARGE_INTEGER CreationTime;
794 LARGE_INTEGER LastAccessTime;
795 LARGE_INTEGER LastWriteTime;
796 LARGE_INTEGER ChangeTime;
797 LARGE_INTEGER EndOfFile;
798 LARGE_INTEGER AllocationSize;
799 ULONG FileAttributes;
800 ULONG FileNameLength;
801 WCHAR FileName[1];
802 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
803
804 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
805 ULONG NextEntryOffset;
806 ULONG FileIndex;
807 LARGE_INTEGER CreationTime;
808 LARGE_INTEGER LastAccessTime;
809 LARGE_INTEGER LastWriteTime;
810 LARGE_INTEGER ChangeTime;
811 LARGE_INTEGER EndOfFile;
812 LARGE_INTEGER AllocationSize;
813 ULONG FileAttributes;
814 ULONG FileNameLength;
815 ULONG EaSize;
816 WCHAR FileName[0];
817 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION;
818
819 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
820 ULONG NextEntryOffset;
821 ULONG FileIndex;
822 LARGE_INTEGER CreationTime;
823 LARGE_INTEGER LastAccessTime;
824 LARGE_INTEGER LastWriteTime;
825 LARGE_INTEGER ChangeTime;
826 LARGE_INTEGER EndOfFile;
827 LARGE_INTEGER AllocationSize;
828 ULONG FileAttributes;
829 ULONG FileNameLength;
830 ULONG EaSize;
831 CHAR ShortNameLength;
832 WCHAR ShortName[12];
833 WCHAR FileName[0];
834 } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION;
835
836 typedef struct _FILE_EA_INFORMATION {
837 ULONG EaSize;
838 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
839
840 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
841 ULONG FileSystemAttributes;
842 ULONG MaximumComponentNameLength;
843 ULONG FileSystemNameLength;
844 WCHAR FileSystemName[1];
845 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
846
847 typedef struct _FILE_FS_CONTROL_INFORMATION {
848 LARGE_INTEGER FreeSpaceStartFiltering;
849 LARGE_INTEGER FreeSpaceThreshold;
850 LARGE_INTEGER FreeSpaceStopFiltering;
851 LARGE_INTEGER DefaultQuotaThreshold;
852 LARGE_INTEGER DefaultQuotaLimit;
853 ULONG FileSystemControlFlags;
854 } FILE_FS_CONTROL_INFORMATION, *PFILE_FS_CONTROL_INFORMATION;
855
856 typedef struct _FILE_FS_FULL_SIZE_INFORMATION {
857 LARGE_INTEGER TotalAllocationUnits;
858 LARGE_INTEGER CallerAvailableAllocationUnits;
859 LARGE_INTEGER ActualAvailableAllocationUnits;
860 ULONG SectorsPerAllocationUnit;
861 ULONG BytesPerSector;
862 } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
863
864 typedef struct _FILE_FS_LABEL_INFORMATION {
865 ULONG VolumeLabelLength;
866 WCHAR VolumeLabel[1];
867 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
868
869 #if (VER_PRODUCTBUILD >= 2195)
870
871 typedef struct _FILE_FS_OBJECT_ID_INFORMATION {
872 UCHAR ObjectId[16];
873 UCHAR ExtendedInfo[48];
874 } FILE_FS_OBJECT_ID_INFORMATION, *PFILE_FS_OBJECT_ID_INFORMATION;
875
876 #endif /* (VER_PRODUCTBUILD >= 2195) */
877
878 typedef struct _FILE_FS_SIZE_INFORMATION {
879 LARGE_INTEGER TotalAllocationUnits;
880 LARGE_INTEGER AvailableAllocationUnits;
881 ULONG SectorsPerAllocationUnit;
882 ULONG BytesPerSector;
883 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
884
885 typedef struct _FILE_FS_VOLUME_INFORMATION {
886 LARGE_INTEGER VolumeCreationTime;
887 ULONG VolumeSerialNumber;
888 ULONG VolumeLabelLength;
889 BOOLEAN SupportsObjects;
890 WCHAR VolumeLabel[1];
891 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
892
893 typedef struct _FILE_FULL_DIR_INFORMATION {
894 ULONG NextEntryOffset;
895 ULONG FileIndex;
896 LARGE_INTEGER CreationTime;
897 LARGE_INTEGER LastAccessTime;
898 LARGE_INTEGER LastWriteTime;
899 LARGE_INTEGER ChangeTime;
900 LARGE_INTEGER EndOfFile;
901 LARGE_INTEGER AllocationSize;
902 ULONG FileAttributes;
903 ULONG FileNameLength;
904 ULONG EaSize;
905 WCHAR FileName[1];
906 } FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
907
908 typedef struct _FILE_GET_EA_INFORMATION {
909 ULONG NextEntryOffset;
910 UCHAR EaNameLength;
911 CHAR EaName[1];
912 } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
913
914 typedef struct _FILE_GET_QUOTA_INFORMATION {
915 ULONG NextEntryOffset;
916 ULONG SidLength;
917 SID Sid;
918 } FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION;
919
920 typedef struct _FILE_INTERNAL_INFORMATION {
921 LARGE_INTEGER IndexNumber;
922 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
923
924 typedef struct _FILE_LINK_INFORMATION {
925 BOOLEAN ReplaceIfExists;
926 HANDLE RootDirectory;
927 ULONG FileNameLength;
928 WCHAR FileName[1];
929 } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
930
931 typedef struct _FILE_LOCK_INFO {
932 LARGE_INTEGER StartingByte;
933 LARGE_INTEGER Length;
934 BOOLEAN ExclusiveLock;
935 ULONG Key;
936 PFILE_OBJECT FileObject;
937 PEPROCESS Process;
938 LARGE_INTEGER EndingByte;
939 } FILE_LOCK_INFO, *PFILE_LOCK_INFO;
940
941 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
942 typedef struct _FILE_SHARED_LOCK_ENTRY {
943 PVOID Unknown1;
944 PVOID Unknown2;
945 FILE_LOCK_INFO FileLock;
946 } FILE_SHARED_LOCK_ENTRY, *PFILE_SHARED_LOCK_ENTRY;
947
948 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
949 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY {
950 LIST_ENTRY ListEntry;
951 PVOID Unknown1;
952 PVOID Unknown2;
953 FILE_LOCK_INFO FileLock;
954 } FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
955
956 typedef NTSTATUS (*PCOMPLETE_LOCK_IRP_ROUTINE) (
957 IN PVOID Context,
958 IN PIRP Irp
959 );
960
961 typedef VOID (NTAPI *PUNLOCK_ROUTINE) (
962 IN PVOID Context,
963 IN PFILE_LOCK_INFO FileLockInfo
964 );
965
966 typedef struct _FILE_LOCK {
967 PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
968 PUNLOCK_ROUTINE UnlockRoutine;
969 BOOLEAN FastIoIsQuestionable;
970 BOOLEAN Pad[3];
971 PVOID LockInformation;
972 FILE_LOCK_INFO LastReturnedLockInfo;
973 PVOID LastReturnedLock;
974 } FILE_LOCK, *PFILE_LOCK;
975
976 typedef struct _FILE_MAILSLOT_PEEK_BUFFER {
977 ULONG ReadDataAvailable;
978 ULONG NumberOfMessages;
979 ULONG MessageLength;
980 } FILE_MAILSLOT_PEEK_BUFFER, *PFILE_MAILSLOT_PEEK_BUFFER;
981
982 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
983 ULONG MaximumMessageSize;
984 ULONG MailslotQuota;
985 ULONG NextMessageSize;
986 ULONG MessagesAvailable;
987 LARGE_INTEGER ReadTimeout;
988 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
989
990 typedef struct _FILE_MAILSLOT_SET_INFORMATION {
991 LARGE_INTEGER ReadTimeout;
992 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
993
994 typedef struct _FILE_MODE_INFORMATION {
995 ULONG Mode;
996 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
997
998 typedef struct _FILE_ALL_INFORMATION {
999 FILE_BASIC_INFORMATION BasicInformation;
1000 FILE_STANDARD_INFORMATION StandardInformation;
1001 FILE_INTERNAL_INFORMATION InternalInformation;
1002 FILE_EA_INFORMATION EaInformation;
1003 FILE_ACCESS_INFORMATION AccessInformation;
1004 FILE_POSITION_INFORMATION PositionInformation;
1005 FILE_MODE_INFORMATION ModeInformation;
1006 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
1007 FILE_NAME_INFORMATION NameInformation;
1008 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
1009
1010 typedef struct _FILE_NAMES_INFORMATION {
1011 ULONG NextEntryOffset;
1012 ULONG FileIndex;
1013 ULONG FileNameLength;
1014 WCHAR FileName[1];
1015 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
1016
1017 typedef struct _FILE_OBJECTID_INFORMATION {
1018 LONGLONG FileReference;
1019 UCHAR ObjectId[16];
1020 _ANONYMOUS_UNION union {
1021 struct {
1022 UCHAR BirthVolumeId[16];
1023 UCHAR BirthObjectId[16];
1024 UCHAR DomainId[16];
1025 } ;
1026 UCHAR ExtendedInfo[48];
1027 } DUMMYUNIONNAME;
1028 } FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION;
1029
1030 typedef struct _FILE_OLE_CLASSID_INFORMATION {
1031 GUID ClassId;
1032 } FILE_OLE_CLASSID_INFORMATION, *PFILE_OLE_CLASSID_INFORMATION;
1033
1034 typedef struct _FILE_OLE_ALL_INFORMATION {
1035 FILE_BASIC_INFORMATION BasicInformation;
1036 FILE_STANDARD_INFORMATION StandardInformation;
1037 FILE_INTERNAL_INFORMATION InternalInformation;
1038 FILE_EA_INFORMATION EaInformation;
1039 FILE_ACCESS_INFORMATION AccessInformation;
1040 FILE_POSITION_INFORMATION PositionInformation;
1041 FILE_MODE_INFORMATION ModeInformation;
1042 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
1043 USN LastChangeUsn;
1044 USN ReplicationUsn;
1045 LARGE_INTEGER SecurityChangeTime;
1046 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
1047 FILE_OBJECTID_INFORMATION ObjectIdInformation;
1048 FILE_STORAGE_TYPE StorageType;
1049 ULONG OleStateBits;
1050 ULONG OleId;
1051 ULONG NumberOfStreamReferences;
1052 ULONG StreamIndex;
1053 ULONG SecurityId;
1054 BOOLEAN ContentIndexDisable;
1055 BOOLEAN InheritContentIndexDisable;
1056 FILE_NAME_INFORMATION NameInformation;
1057 } FILE_OLE_ALL_INFORMATION, *PFILE_OLE_ALL_INFORMATION;
1058
1059 typedef struct _FILE_OLE_DIR_INFORMATION {
1060 ULONG NextEntryOffset;
1061 ULONG FileIndex;
1062 LARGE_INTEGER CreationTime;
1063 LARGE_INTEGER LastAccessTime;
1064 LARGE_INTEGER LastWriteTime;
1065 LARGE_INTEGER ChangeTime;
1066 LARGE_INTEGER EndOfFile;
1067 LARGE_INTEGER AllocationSize;
1068 ULONG FileAttributes;
1069 ULONG FileNameLength;
1070 FILE_STORAGE_TYPE StorageType;
1071 GUID OleClassId;
1072 ULONG OleStateBits;
1073 BOOLEAN ContentIndexDisable;
1074 BOOLEAN InheritContentIndexDisable;
1075 WCHAR FileName[1];
1076 } FILE_OLE_DIR_INFORMATION, *PFILE_OLE_DIR_INFORMATION;
1077
1078 typedef struct _FILE_OLE_INFORMATION {
1079 LARGE_INTEGER SecurityChangeTime;
1080 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
1081 FILE_OBJECTID_INFORMATION ObjectIdInformation;
1082 FILE_STORAGE_TYPE StorageType;
1083 ULONG OleStateBits;
1084 BOOLEAN ContentIndexDisable;
1085 BOOLEAN InheritContentIndexDisable;
1086 } FILE_OLE_INFORMATION, *PFILE_OLE_INFORMATION;
1087
1088 typedef struct _FILE_OLE_STATE_BITS_INFORMATION {
1089 ULONG StateBits;
1090 ULONG StateBitsMask;
1091 } FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION;
1092
1093 typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER {
1094 HANDLE EventHandle;
1095 ULONG KeyValue;
1096 } FILE_PIPE_ASSIGN_EVENT_BUFFER, *PFILE_PIPE_ASSIGN_EVENT_BUFFER;
1097
1098 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER {
1099 PVOID ClientSession;
1100 PVOID ClientProcess;
1101 } FILE_PIPE_CLIENT_PROCESS_BUFFER, *PFILE_PIPE_CLIENT_PROCESS_BUFFER;
1102
1103 typedef struct _FILE_PIPE_EVENT_BUFFER {
1104 ULONG NamedPipeState;
1105 ULONG EntryType;
1106 ULONG ByteCount;
1107 ULONG KeyValue;
1108 ULONG NumberRequests;
1109 } FILE_PIPE_EVENT_BUFFER, *PFILE_PIPE_EVENT_BUFFER;
1110
1111 typedef struct _FILE_PIPE_INFORMATION {
1112 ULONG ReadMode;
1113 ULONG CompletionMode;
1114 } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
1115
1116 typedef struct _FILE_PIPE_LOCAL_INFORMATION {
1117 ULONG NamedPipeType;
1118 ULONG NamedPipeConfiguration;
1119 ULONG MaximumInstances;
1120 ULONG CurrentInstances;
1121 ULONG InboundQuota;
1122 ULONG ReadDataAvailable;
1123 ULONG OutboundQuota;
1124 ULONG WriteQuotaAvailable;
1125 ULONG NamedPipeState;
1126 ULONG NamedPipeEnd;
1127 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
1128
1129 typedef struct _FILE_PIPE_REMOTE_INFORMATION {
1130 LARGE_INTEGER CollectDataTime;
1131 ULONG MaximumCollectionCount;
1132 } FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
1133
1134 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER {
1135 LARGE_INTEGER Timeout;
1136 ULONG NameLength;
1137 BOOLEAN TimeoutSpecified;
1138 WCHAR Name[1];
1139 } FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
1140
1141 typedef struct _FILE_QUOTA_INFORMATION {
1142 ULONG NextEntryOffset;
1143 ULONG SidLength;
1144 LARGE_INTEGER ChangeTime;
1145 LARGE_INTEGER QuotaUsed;
1146 LARGE_INTEGER QuotaThreshold;
1147 LARGE_INTEGER QuotaLimit;
1148 SID Sid;
1149 } FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
1150
1151 typedef struct _FILE_RENAME_INFORMATION {
1152 BOOLEAN ReplaceIfExists;
1153 HANDLE RootDirectory;
1154 ULONG FileNameLength;
1155 WCHAR FileName[1];
1156 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
1157
1158 typedef struct _FILE_STREAM_INFORMATION {
1159 ULONG NextEntryOffset;
1160 ULONG StreamNameLength;
1161 LARGE_INTEGER StreamSize;
1162 LARGE_INTEGER StreamAllocationSize;
1163 WCHAR StreamName[1];
1164 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
1165
1166 typedef struct _FILE_TRACKING_INFORMATION {
1167 HANDLE DestinationFile;
1168 ULONG ObjectInformationLength;
1169 CHAR ObjectInformation[1];
1170 } FILE_TRACKING_INFORMATION, *PFILE_TRACKING_INFORMATION;
1171
1172 #if (VER_PRODUCTBUILD >= 2195)
1173 typedef struct _FILE_ZERO_DATA_INFORMATION {
1174 LARGE_INTEGER FileOffset;
1175 LARGE_INTEGER BeyondFinalZero;
1176 } FILE_ZERO_DATA_INFORMATION, *PFILE_ZERO_DATA_INFORMATION;
1177
1178 typedef struct FILE_ALLOCATED_RANGE_BUFFER {
1179 LARGE_INTEGER FileOffset;
1180 LARGE_INTEGER Length;
1181 } FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER;
1182 #endif /* (VER_PRODUCTBUILD >= 2195) */
1183
1184 typedef struct _FSRTL_COMMON_FCB_HEADER {
1185 CSHORT NodeTypeCode;
1186 CSHORT NodeByteSize;
1187 UCHAR Flags;
1188 UCHAR IsFastIoPossible;
1189 #if (VER_PRODUCTBUILD >= 1381)
1190 UCHAR Flags2;
1191 UCHAR Reserved;
1192 #endif /* (VER_PRODUCTBUILD >= 1381) */
1193 PERESOURCE Resource;
1194 PERESOURCE PagingIoResource;
1195 LARGE_INTEGER AllocationSize;
1196 LARGE_INTEGER FileSize;
1197 LARGE_INTEGER ValidDataLength;
1198 } FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER;
1199
1200 typedef struct _GENERATE_NAME_CONTEXT {
1201 USHORT Checksum;
1202 BOOLEAN CheckSumInserted;
1203 UCHAR NameLength;
1204 WCHAR NameBuffer[8];
1205 ULONG ExtensionLength;
1206 WCHAR ExtensionBuffer[4];
1207 ULONG LastIndexValue;
1208 } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
1209
1210 typedef struct _HANDLE_TABLE_ENTRY_INFO {
1211 ULONG AuditMask;
1212 } HANDLE_TABLE_ENTRY_INFO, *PHANDLE_TABLE_ENTRY_INFO;
1213
1214 typedef struct _HANDLE_TABLE_ENTRY {
1215 union {
1216 PVOID Object;
1217 ULONG ObAttributes;
1218 PHANDLE_TABLE_ENTRY_INFO InfoTable;
1219 ULONG_PTR Value;
1220 } u1;
1221 union {
1222 ULONG GrantedAccess;
1223 USHORT GrantedAccessIndex;
1224 LONG NextFreeTableEntry;
1225 } u2;
1226 USHORT CreatorBackTraceIndex;
1227 } HANDLE_TABLE_ENTRY, *PHANDLE_TABLE_ENTRY;
1228
1229 typedef struct _MAPPING_PAIR {
1230 ULONGLONG Vcn;
1231 ULONGLONG Lcn;
1232 } MAPPING_PAIR, *PMAPPING_PAIR;
1233
1234 typedef struct _GET_RETRIEVAL_DESCRIPTOR {
1235 ULONG NumberOfPairs;
1236 ULONGLONG StartVcn;
1237 MAPPING_PAIR Pair[1];
1238 } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
1239
1240 typedef struct _IO_CLIENT_EXTENSION {
1241 struct _IO_CLIENT_EXTENSION *NextExtension;
1242 PVOID ClientIdentificationAddress;
1243 } IO_CLIENT_EXTENSION, *PIO_CLIENT_EXTENSION;
1244
1245 typedef struct _IO_COMPLETION_BASIC_INFORMATION {
1246 LONG Depth;
1247 } IO_COMPLETION_BASIC_INFORMATION, *PIO_COMPLETION_BASIC_INFORMATION;
1248
1249 typedef struct _KQUEUE {
1250 DISPATCHER_HEADER Header;
1251 LIST_ENTRY EntryListHead;
1252 ULONG CurrentCount;
1253 ULONG MaximumCount;
1254 LIST_ENTRY ThreadListHead;
1255 } KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
1256
1257 typedef struct _MAILSLOT_CREATE_PARAMETERS {
1258 ULONG MailslotQuota;
1259 ULONG MaximumMessageSize;
1260 LARGE_INTEGER ReadTimeout;
1261 BOOLEAN TimeoutSpecified;
1262 } MAILSLOT_CREATE_PARAMETERS, *PMAILSLOT_CREATE_PARAMETERS;
1263
1264 typedef struct _MBCB {
1265 CSHORT NodeTypeCode;
1266 CSHORT NodeIsInZone;
1267 ULONG PagesToWrite;
1268 ULONG DirtyPages;
1269 ULONG Reserved;
1270 LIST_ENTRY BitmapRanges;
1271 LONGLONG ResumeWritePage;
1272 BITMAP_RANGE BitmapRange1;
1273 BITMAP_RANGE BitmapRange2;
1274 BITMAP_RANGE BitmapRange3;
1275 } MBCB, *PMBCB;
1276
1277 typedef struct _MOVEFILE_DESCRIPTOR {
1278 HANDLE FileHandle;
1279 ULONG Reserved;
1280 LARGE_INTEGER StartVcn;
1281 LARGE_INTEGER TargetLcn;
1282 ULONG NumVcns;
1283 ULONG Reserved1;
1284 } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
1285
1286 typedef struct _NAMED_PIPE_CREATE_PARAMETERS {
1287 ULONG NamedPipeType;
1288 ULONG ReadMode;
1289 ULONG CompletionMode;
1290 ULONG MaximumInstances;
1291 ULONG InboundQuota;
1292 ULONG OutboundQuota;
1293 LARGE_INTEGER DefaultTimeout;
1294 BOOLEAN TimeoutSpecified;
1295 } NAMED_PIPE_CREATE_PARAMETERS, *PNAMED_PIPE_CREATE_PARAMETERS;
1296
1297 typedef struct _OBJECT_BASIC_INFO {
1298 ULONG Attributes;
1299 ACCESS_MASK GrantedAccess;
1300 ULONG HandleCount;
1301 ULONG ReferenceCount;
1302 ULONG PagedPoolUsage;
1303 ULONG NonPagedPoolUsage;
1304 ULONG Reserved[3];
1305 ULONG NameInformationLength;
1306 ULONG TypeInformationLength;
1307 ULONG SecurityDescriptorLength;
1308 LARGE_INTEGER CreateTime;
1309 } OBJECT_BASIC_INFO, *POBJECT_BASIC_INFO;
1310
1311 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO {
1312 BOOLEAN Inherit;
1313 BOOLEAN ProtectFromClose;
1314 } OBJECT_HANDLE_ATTRIBUTE_INFO, *POBJECT_HANDLE_ATTRIBUTE_INFO;
1315
1316 typedef struct _OBJECT_NAME_INFO {
1317 UNICODE_STRING ObjectName;
1318 WCHAR ObjectNameBuffer[1];
1319 } OBJECT_NAME_INFO, *POBJECT_NAME_INFO;
1320
1321 typedef struct _OBJECT_PROTECTION_INFO {
1322 BOOLEAN Inherit;
1323 BOOLEAN ProtectHandle;
1324 } OBJECT_PROTECTION_INFO, *POBJECT_PROTECTION_INFO;
1325
1326 typedef struct _OBJECT_TYPE_INFO {
1327 UNICODE_STRING ObjectTypeName;
1328 UCHAR Unknown[0x58];
1329 WCHAR ObjectTypeNameBuffer[1];
1330 } OBJECT_TYPE_INFO, *POBJECT_TYPE_INFO;
1331
1332 typedef struct _OBJECT_ALL_TYPES_INFO {
1333 ULONG NumberOfObjectTypes;
1334 OBJECT_TYPE_INFO ObjectsTypeInfo[1];
1335 } OBJECT_ALL_TYPES_INFO, *POBJECT_ALL_TYPES_INFO;
1336
1337 typedef struct _PAGEFAULT_HISTORY {
1338 ULONG CurrentIndex;
1339 ULONG MaxIndex;
1340 KSPIN_LOCK SpinLock;
1341 PVOID Reserved;
1342 PROCESS_WS_WATCH_INFORMATION WatchInfo[1];
1343 } PAGEFAULT_HISTORY, *PPAGEFAULT_HISTORY;
1344
1345 typedef struct _PATHNAME_BUFFER {
1346 ULONG PathNameLength;
1347 WCHAR Name[1];
1348 } PATHNAME_BUFFER, *PPATHNAME_BUFFER;
1349
1350 #if (VER_PRODUCTBUILD >= 2600)
1351
1352 typedef struct _PRIVATE_CACHE_MAP_FLAGS {
1353 ULONG DontUse : 16;
1354 ULONG ReadAheadActive : 1;
1355 ULONG ReadAheadEnabled : 1;
1356 ULONG Available : 14;
1357 } PRIVATE_CACHE_MAP_FLAGS, *PPRIVATE_CACHE_MAP_FLAGS;
1358
1359 typedef struct _PRIVATE_CACHE_MAP {
1360 _ANONYMOUS_UNION union {
1361 CSHORT NodeTypeCode;
1362 PRIVATE_CACHE_MAP_FLAGS Flags;
1363 ULONG UlongFlags;
1364 } DUMMYUNIONNAME;
1365 ULONG ReadAheadMask;
1366 PFILE_OBJECT FileObject;
1367 LARGE_INTEGER FileOffset1;
1368 LARGE_INTEGER BeyondLastByte1;
1369 LARGE_INTEGER FileOffset2;
1370 LARGE_INTEGER BeyondLastByte2;
1371 LARGE_INTEGER ReadAheadOffset[2];
1372 ULONG ReadAheadLength[2];
1373 KSPIN_LOCK ReadAheadSpinLock;
1374 LIST_ENTRY PrivateLinks;
1375 } PRIVATE_CACHE_MAP, *PPRIVATE_CACHE_MAP;
1376
1377 #endif
1378
1379 typedef struct _PS_IMPERSONATION_INFORMATION {
1380 PACCESS_TOKEN Token;
1381 BOOLEAN CopyOnOpen;
1382 BOOLEAN EffectiveOnly;
1383 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
1384 } PS_IMPERSONATION_INFORMATION, *PPS_IMPERSONATION_INFORMATION;
1385
1386 typedef struct _PUBLIC_BCB {
1387 CSHORT NodeTypeCode;
1388 CSHORT NodeByteSize;
1389 ULONG MappedLength;
1390 LARGE_INTEGER MappedFileOffset;
1391 } PUBLIC_BCB, *PPUBLIC_BCB;
1392
1393 typedef struct _QUERY_PATH_REQUEST {
1394 ULONG PathNameLength;
1395 PIO_SECURITY_CONTEXT SecurityContext;
1396 WCHAR FilePathName[1];
1397 } QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST;
1398
1399 typedef struct _QUERY_PATH_RESPONSE {
1400 ULONG LengthAccepted;
1401 } QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE;
1402
1403 #pragma pack(push,8)
1404 typedef struct _RETRIEVAL_POINTERS_BUFFER {
1405 ULONG ExtentCount;
1406 LARGE_INTEGER StartingVcn;
1407 struct {
1408 LARGE_INTEGER NextVcn;
1409 LARGE_INTEGER Lcn;
1410 } Extents[1];
1411 } RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
1412 #pragma pack(pop)
1413
1414 typedef struct _RTL_SPLAY_LINKS {
1415 struct _RTL_SPLAY_LINKS *Parent;
1416 struct _RTL_SPLAY_LINKS *LeftChild;
1417 struct _RTL_SPLAY_LINKS *RightChild;
1418 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
1419
1420 typedef struct _SE_EXPORTS {
1421
1422 LUID SeCreateTokenPrivilege;
1423 LUID SeAssignPrimaryTokenPrivilege;
1424 LUID SeLockMemoryPrivilege;
1425 LUID SeIncreaseQuotaPrivilege;
1426 LUID SeUnsolicitedInputPrivilege;
1427 LUID SeTcbPrivilege;
1428 LUID SeSecurityPrivilege;
1429 LUID SeTakeOwnershipPrivilege;
1430 LUID SeLoadDriverPrivilege;
1431 LUID SeCreatePagefilePrivilege;
1432 LUID SeIncreaseBasePriorityPrivilege;
1433 LUID SeSystemProfilePrivilege;
1434 LUID SeSystemtimePrivilege;
1435 LUID SeProfileSingleProcessPrivilege;
1436 LUID SeCreatePermanentPrivilege;
1437 LUID SeBackupPrivilege;
1438 LUID SeRestorePrivilege;
1439 LUID SeShutdownPrivilege;
1440 LUID SeDebugPrivilege;
1441 LUID SeAuditPrivilege;
1442 LUID SeSystemEnvironmentPrivilege;
1443 LUID SeChangeNotifyPrivilege;
1444 LUID SeRemoteShutdownPrivilege;
1445
1446 PSID SeNullSid;
1447 PSID SeWorldSid;
1448 PSID SeLocalSid;
1449 PSID SeCreatorOwnerSid;
1450 PSID SeCreatorGroupSid;
1451
1452 PSID SeNtAuthoritySid;
1453 PSID SeDialupSid;
1454 PSID SeNetworkSid;
1455 PSID SeBatchSid;
1456 PSID SeInteractiveSid;
1457 PSID SeLocalSystemSid;
1458 PSID SeAliasAdminsSid;
1459 PSID SeAliasUsersSid;
1460 PSID SeAliasGuestsSid;
1461 PSID SeAliasPowerUsersSid;
1462 PSID SeAliasAccountOpsSid;
1463 PSID SeAliasSystemOpsSid;
1464 PSID SeAliasPrintOpsSid;
1465 PSID SeAliasBackupOpsSid;
1466
1467 PSID SeAuthenticatedUsersSid;
1468
1469 PSID SeRestrictedSid;
1470 PSID SeAnonymousLogonSid;
1471
1472 LUID SeUndockPrivilege;
1473 LUID SeSyncAgentPrivilege;
1474 LUID SeEnableDelegationPrivilege;
1475
1476 } SE_EXPORTS, *PSE_EXPORTS;
1477
1478 typedef struct _SECTION_BASIC_INFORMATION {
1479 PVOID BaseAddress;
1480 ULONG Attributes;
1481 LARGE_INTEGER Size;
1482 } SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION;
1483
1484 typedef struct _SECTION_IMAGE_INFORMATION {
1485 ULONG EntryPoint;
1486 ULONG Unknown1;
1487 ULONG_PTR StackReserve;
1488 ULONG_PTR StackCommit;
1489 ULONG Subsystem;
1490 USHORT MinorSubsystemVersion;
1491 USHORT MajorSubsystemVersion;
1492 ULONG Unknown2;
1493 ULONG Characteristics;
1494 USHORT ImageNumber;
1495 BOOLEAN Executable;
1496 UCHAR Unknown3;
1497 ULONG Unknown4[3];
1498 } SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION;
1499
1500 #if (VER_PRODUCTBUILD >= 2600)
1501
1502 typedef struct _SHARED_CACHE_MAP {
1503 CSHORT NodeTypeCode;
1504 CSHORT NodeByteSize;
1505 ULONG OpenCount;
1506 LARGE_INTEGER FileSize;
1507 LIST_ENTRY BcbList;
1508 LARGE_INTEGER SectionSize;
1509 LARGE_INTEGER ValidDataLength;
1510 LARGE_INTEGER ValidDataGoal;
1511 PVACB InitialVacbs[4];
1512 PVACB *Vacbs;
1513 PFILE_OBJECT FileObject;
1514 PVACB ActiveVacb;
1515 PVOID NeedToZero;
1516 ULONG ActivePage;
1517 ULONG NeedToZeroPage;
1518 KSPIN_LOCK ActiveVacbSpinLock;
1519 ULONG VacbActiveCount;
1520 ULONG DirtyPages;
1521 LIST_ENTRY SharedCacheMapLinks;
1522 ULONG Flags;
1523 NTSTATUS Status;
1524 PMBCB Mbcb;
1525 PVOID Section;
1526 PKEVENT CreateEvent;
1527 PKEVENT WaitOnActiveCount;
1528 ULONG PagesToWrite;
1529 LONGLONG BeyondLastFlush;
1530 PCACHE_MANAGER_CALLBACKS Callbacks;
1531 PVOID LazyWriteContext;
1532 LIST_ENTRY PrivateList;
1533 PVOID LogHandle;
1534 PVOID FlushToLsnRoutine;
1535 ULONG DirtyPageThreshold;
1536 ULONG LazyWritePassCount;
1537 PCACHE_UNINITIALIZE_EVENT UninitializeEvent;
1538 PVACB NeedToZeroVacb;
1539 KSPIN_LOCK BcbSpinLock;
1540 PVOID Reserved;
1541 KEVENT Event;
1542 EX_PUSH_LOCK VacbPushLock;
1543 PRIVATE_CACHE_MAP PrivateCacheMap;
1544 } SHARED_CACHE_MAP, *PSHARED_CACHE_MAP;
1545
1546 #endif
1547
1548 typedef struct _STARTING_VCN_INPUT_BUFFER {
1549 LARGE_INTEGER StartingVcn;
1550 } STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER;
1551
1552 typedef struct _SYSTEM_CACHE_INFORMATION {
1553 ULONG CurrentSize;
1554 ULONG PeakSize;
1555 ULONG PageFaultCount;
1556 ULONG MinimumWorkingSet;
1557 ULONG MaximumWorkingSet;
1558 ULONG Unused[4];
1559 } SYSTEM_CACHE_INFORMATION, *PSYSTEM_CACHE_INFORMATION;
1560
1561 typedef struct _SECURITY_CLIENT_CONTEXT {
1562 SECURITY_QUALITY_OF_SERVICE SecurityQos;
1563 PACCESS_TOKEN ClientToken;
1564 BOOLEAN DirectlyAccessClientToken;
1565 BOOLEAN DirectAccessEffectiveOnly;
1566 BOOLEAN ServerIsRemote;
1567 TOKEN_CONTROL ClientTokenControl;
1568 } SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT;
1569
1570 typedef struct _TUNNEL {
1571 FAST_MUTEX Mutex;
1572 PRTL_SPLAY_LINKS Cache;
1573 LIST_ENTRY TimerQueue;
1574 USHORT NumEntries;
1575 } TUNNEL, *PTUNNEL;
1576
1577 typedef struct _VACB {
1578 PVOID BaseAddress;
1579 PSHARED_CACHE_MAP SharedCacheMap;
1580 union {
1581 LARGE_INTEGER FileOffset;
1582 USHORT ActiveCount;
1583 } Overlay;
1584 LIST_ENTRY LruList;
1585 } VACB, *PVACB;
1586
1587 typedef struct _VAD_HEADER {
1588 PVOID StartVPN;
1589 PVOID EndVPN;
1590 PVAD_HEADER ParentLink;
1591 PVAD_HEADER LeftLink;
1592 PVAD_HEADER RightLink;
1593 ULONG Flags; /* LSB = CommitCharge */
1594 PVOID ControlArea;
1595 PVOID FirstProtoPte;
1596 PVOID LastPTE;
1597 ULONG Unknown;
1598 LIST_ENTRY Secured;
1599 } VAD_HEADER, *PVAD_HEADER;
1600
1601 NTKERNELAPI
1602 BOOLEAN
1603 NTAPI
1604 CcCanIWrite (
1605 IN PFILE_OBJECT FileObject,
1606 IN ULONG BytesToWrite,
1607 IN BOOLEAN Wait,
1608 IN BOOLEAN Retrying
1609 );
1610
1611 NTKERNELAPI
1612 BOOLEAN
1613 NTAPI
1614 CcCopyRead (
1615 IN PFILE_OBJECT FileObject,
1616 IN PLARGE_INTEGER FileOffset,
1617 IN ULONG Length,
1618 IN BOOLEAN Wait,
1619 OUT PVOID Buffer,
1620 OUT PIO_STATUS_BLOCK IoStatus
1621 );
1622
1623 NTKERNELAPI
1624 BOOLEAN
1625 NTAPI
1626 CcCopyWrite (
1627 IN PFILE_OBJECT FileObject,
1628 IN PLARGE_INTEGER FileOffset,
1629 IN ULONG Length,
1630 IN BOOLEAN Wait,
1631 IN PVOID Buffer
1632 );
1633
1634 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
1635
1636 typedef VOID (NTAPI *PCC_POST_DEFERRED_WRITE) (
1637 IN PVOID Context1,
1638 IN PVOID Context2
1639 );
1640
1641 NTKERNELAPI
1642 VOID
1643 NTAPI
1644 CcDeferWrite (
1645 IN PFILE_OBJECT FileObject,
1646 IN PCC_POST_DEFERRED_WRITE PostRoutine,
1647 IN PVOID Context1,
1648 IN PVOID Context2,
1649 IN ULONG BytesToWrite,
1650 IN BOOLEAN Retrying
1651 );
1652
1653 NTKERNELAPI
1654 VOID
1655 NTAPI
1656 CcFastCopyRead (
1657 IN PFILE_OBJECT FileObject,
1658 IN ULONG FileOffset,
1659 IN ULONG Length,
1660 IN ULONG PageCount,
1661 OUT PVOID Buffer,
1662 OUT PIO_STATUS_BLOCK IoStatus
1663 );
1664
1665 NTKERNELAPI
1666 VOID
1667 NTAPI
1668 CcFastCopyWrite (
1669 IN PFILE_OBJECT FileObject,
1670 IN ULONG FileOffset,
1671 IN ULONG Length,
1672 IN PVOID Buffer
1673 );
1674
1675 NTKERNELAPI
1676 VOID
1677 NTAPI
1678 CcFlushCache (
1679 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
1680 IN PLARGE_INTEGER FileOffset OPTIONAL,
1681 IN ULONG Length,
1682 OUT PIO_STATUS_BLOCK IoStatus OPTIONAL
1683 );
1684
1685 typedef VOID (*PDIRTY_PAGE_ROUTINE) (
1686 IN PFILE_OBJECT FileObject,
1687 IN PLARGE_INTEGER FileOffset,
1688 IN ULONG Length,
1689 IN PLARGE_INTEGER OldestLsn,
1690 IN PLARGE_INTEGER NewestLsn,
1691 IN PVOID Context1,
1692 IN PVOID Context2
1693 );
1694
1695 NTKERNELAPI
1696 LARGE_INTEGER
1697 NTAPI
1698 CcGetDirtyPages (
1699 IN PVOID LogHandle,
1700 IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
1701 IN PVOID Context1,
1702 IN PVOID Context2
1703 );
1704
1705 NTKERNELAPI
1706 PFILE_OBJECT
1707 NTAPI
1708 CcGetFileObjectFromBcb (
1709 IN PVOID Bcb
1710 );
1711
1712 NTKERNELAPI
1713 PFILE_OBJECT
1714 NTAPI
1715 CcGetFileObjectFromSectionPtrs (
1716 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
1717 );
1718
1719 #define CcGetFileSizePointer(FO) ( \
1720 ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
1721 )
1722
1723 #if (VER_PRODUCTBUILD >= 2195)
1724
1725 NTKERNELAPI
1726 LARGE_INTEGER
1727 NTAPI
1728 CcGetFlushedValidData (
1729 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
1730 IN BOOLEAN BcbListHeld
1731 );
1732
1733 #endif /* (VER_PRODUCTBUILD >= 2195) */
1734
1735 NTKERNELAPI
1736 LARGE_INTEGER
1737 CcGetLsnForFileObject (
1738 IN PFILE_OBJECT FileObject,
1739 OUT PLARGE_INTEGER OldestLsn OPTIONAL
1740 );
1741
1742 typedef BOOLEAN (NTAPI *PACQUIRE_FOR_LAZY_WRITE) (
1743 IN PVOID Context,
1744 IN BOOLEAN Wait
1745 );
1746
1747 typedef VOID (NTAPI *PRELEASE_FROM_LAZY_WRITE) (
1748 IN PVOID Context
1749 );
1750
1751 typedef BOOLEAN (NTAPI *PACQUIRE_FOR_READ_AHEAD) (
1752 IN PVOID Context,
1753 IN BOOLEAN Wait
1754 );
1755
1756 typedef VOID (NTAPI *PRELEASE_FROM_READ_AHEAD) (
1757 IN PVOID Context
1758 );
1759
1760 typedef struct _CACHE_MANAGER_CALLBACKS {
1761 PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite;
1762 PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite;
1763 PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead;
1764 PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead;
1765 } CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
1766
1767 NTKERNELAPI
1768 VOID
1769 NTAPI
1770 CcInitializeCacheMap (
1771 IN PFILE_OBJECT FileObject,
1772 IN PCC_FILE_SIZES FileSizes,
1773 IN BOOLEAN PinAccess,
1774 IN PCACHE_MANAGER_CALLBACKS Callbacks,
1775 IN PVOID LazyWriteContext
1776 );
1777
1778 #define CcIsFileCached(FO) ( \
1779 ((FO)->SectionObjectPointer != NULL) && \
1780 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
1781 )
1782
1783 NTKERNELAPI
1784 BOOLEAN
1785 NTAPI
1786 CcIsThereDirtyData (
1787 IN PVPB Vpb
1788 );
1789
1790 NTKERNELAPI
1791 BOOLEAN
1792 NTAPI
1793 CcMapData (
1794 IN PFILE_OBJECT FileObject,
1795 IN PLARGE_INTEGER FileOffset,
1796 IN ULONG Length,
1797 IN BOOLEAN Wait,
1798 OUT PVOID *Bcb,
1799 OUT PVOID *Buffer
1800 );
1801
1802 NTKERNELAPI
1803 VOID
1804 NTAPI
1805 CcMdlRead (
1806 IN PFILE_OBJECT FileObject,
1807 IN PLARGE_INTEGER FileOffset,
1808 IN ULONG Length,
1809 OUT PMDL *MdlChain,
1810 OUT PIO_STATUS_BLOCK IoStatus
1811 );
1812
1813 NTKERNELAPI
1814 VOID
1815 NTAPI
1816 CcMdlReadComplete (
1817 IN PFILE_OBJECT FileObject,
1818 IN PMDL MdlChain
1819 );
1820
1821 NTKERNELAPI
1822 VOID
1823 NTAPI
1824 CcMdlWriteComplete (
1825 IN PFILE_OBJECT FileObject,
1826 IN PLARGE_INTEGER FileOffset,
1827 IN PMDL MdlChain
1828 );
1829
1830 NTKERNELAPI
1831 BOOLEAN
1832 NTAPI
1833 CcPinMappedData (
1834 IN PFILE_OBJECT FileObject,
1835 IN PLARGE_INTEGER FileOffset,
1836 IN ULONG Length,
1837 #if (VER_PRODUCTBUILD >= 2195)
1838 IN ULONG Flags,
1839 #else
1840 IN BOOLEAN Wait,
1841 #endif
1842 IN OUT PVOID *Bcb
1843 );
1844
1845 NTKERNELAPI
1846 BOOLEAN
1847 NTAPI
1848 CcPinRead (
1849 IN PFILE_OBJECT FileObject,
1850 IN PLARGE_INTEGER FileOffset,
1851 IN ULONG Length,
1852 #if (VER_PRODUCTBUILD >= 2195)
1853 IN ULONG Flags,
1854 #else
1855 IN BOOLEAN Wait,
1856 #endif
1857 OUT PVOID *Bcb,
1858 OUT PVOID *Buffer
1859 );
1860
1861 NTKERNELAPI
1862 VOID
1863 NTAPI
1864 CcPrepareMdlWrite (
1865 IN PFILE_OBJECT FileObject,
1866 IN PLARGE_INTEGER FileOffset,
1867 IN ULONG Length,
1868 OUT PMDL *MdlChain,
1869 OUT PIO_STATUS_BLOCK IoStatus
1870 );
1871
1872 NTKERNELAPI
1873 BOOLEAN
1874 NTAPI
1875 CcPreparePinWrite (
1876 IN PFILE_OBJECT FileObject,
1877 IN PLARGE_INTEGER FileOffset,
1878 IN ULONG Length,
1879 IN BOOLEAN Zero,
1880 #if (VER_PRODUCTBUILD >= 2195)
1881 IN ULONG Flags,
1882 #else
1883 IN BOOLEAN Wait,
1884 #endif
1885 OUT PVOID *Bcb,
1886 OUT PVOID *Buffer
1887 );
1888
1889 NTKERNELAPI
1890 BOOLEAN
1891 NTAPI
1892 CcPurgeCacheSection (
1893 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
1894 IN PLARGE_INTEGER FileOffset OPTIONAL,
1895 IN ULONG Length,
1896 IN BOOLEAN UninitializeCacheMaps
1897 );
1898
1899 #define CcReadAhead(FO, FOFF, LEN) ( \
1900 if ((LEN) >= 256) { \
1901 CcScheduleReadAhead((FO), (FOFF), (LEN)); \
1902 } \
1903 )
1904
1905 #if (VER_PRODUCTBUILD >= 2195)
1906
1907 NTKERNELAPI
1908 PVOID
1909 NTAPI
1910 CcRemapBcb (
1911 IN PVOID Bcb
1912 );
1913
1914 #endif /* (VER_PRODUCTBUILD >= 2195) */
1915
1916 NTKERNELAPI
1917 VOID
1918 NTAPI
1919 CcRepinBcb (
1920 IN PVOID Bcb
1921 );
1922
1923 NTKERNELAPI
1924 VOID
1925 NTAPI
1926 CcScheduleReadAhead (
1927 IN PFILE_OBJECT FileObject,
1928 IN PLARGE_INTEGER FileOffset,
1929 IN ULONG Length
1930 );
1931
1932 NTKERNELAPI
1933 VOID
1934 NTAPI
1935 CcSetAdditionalCacheAttributes (
1936 IN PFILE_OBJECT FileObject,
1937 IN BOOLEAN DisableReadAhead,
1938 IN BOOLEAN DisableWriteBehind
1939 );
1940
1941 NTKERNELAPI
1942 VOID
1943 NTAPI
1944 CcSetBcbOwnerPointer (
1945 IN PVOID Bcb,
1946 IN PVOID OwnerPointer
1947 );
1948
1949 NTKERNELAPI
1950 VOID
1951 NTAPI
1952 CcSetDirtyPageThreshold (
1953 IN PFILE_OBJECT FileObject,
1954 IN ULONG DirtyPageThreshold
1955 );
1956
1957 NTKERNELAPI
1958 VOID
1959 NTAPI
1960 CcSetDirtyPinnedData (
1961 IN PVOID BcbVoid,
1962 IN PLARGE_INTEGER Lsn OPTIONAL
1963 );
1964
1965 NTKERNELAPI
1966 VOID
1967 NTAPI
1968 CcSetFileSizes (
1969 IN PFILE_OBJECT FileObject,
1970 IN PCC_FILE_SIZES FileSizes
1971 );
1972
1973 typedef VOID (NTAPI *PFLUSH_TO_LSN) (
1974 IN PVOID LogHandle,
1975 IN PLARGE_INTEGER Lsn
1976 );
1977
1978 NTKERNELAPI
1979 VOID
1980 NTAPI
1981 CcSetLogHandleForFile (
1982 IN PFILE_OBJECT FileObject,
1983 IN PVOID LogHandle,
1984 IN PFLUSH_TO_LSN FlushToLsnRoutine
1985 );
1986
1987 NTKERNELAPI
1988 VOID
1989 NTAPI
1990 CcSetReadAheadGranularity (
1991 IN PFILE_OBJECT FileObject,
1992 IN ULONG Granularity /* default: PAGE_SIZE */
1993 /* allowed: 2^n * PAGE_SIZE */
1994 );
1995
1996 NTKERNELAPI
1997 BOOLEAN
1998 NTAPI
1999 CcUninitializeCacheMap (
2000 IN PFILE_OBJECT FileObject,
2001 IN PLARGE_INTEGER TruncateSize OPTIONAL,
2002 IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL
2003 );
2004
2005 NTKERNELAPI
2006 VOID
2007 NTAPI
2008 CcUnpinData (
2009 IN PVOID Bcb
2010 );
2011
2012 NTKERNELAPI
2013 VOID
2014 NTAPI
2015 CcUnpinDataForThread (
2016 IN PVOID Bcb,
2017 IN ERESOURCE_THREAD ResourceThreadId
2018 );
2019
2020 NTKERNELAPI
2021 VOID
2022 NTAPI
2023 CcUnpinRepinnedBcb (
2024 IN PVOID Bcb,
2025 IN BOOLEAN WriteThrough,
2026 OUT PIO_STATUS_BLOCK IoStatus
2027 );
2028
2029 #if (VER_PRODUCTBUILD >= 2195)
2030
2031 NTKERNELAPI
2032 NTSTATUS
2033 NTAPI
2034 CcWaitForCurrentLazyWriterActivity (
2035 VOID
2036 );
2037
2038 #endif /* (VER_PRODUCTBUILD >= 2195) */
2039
2040 NTKERNELAPI
2041 BOOLEAN
2042 NTAPI
2043 CcZeroData (
2044 IN PFILE_OBJECT FileObject,
2045 IN PLARGE_INTEGER StartOffset,
2046 IN PLARGE_INTEGER EndOffset,
2047 IN BOOLEAN Wait
2048 );
2049
2050 NTKERNELAPI
2051 VOID
2052 NTAPI
2053 ExDisableResourceBoostLite (
2054 IN PERESOURCE Resource
2055 );
2056
2057 NTKERNELAPI
2058 ULONG
2059 NTAPI
2060 ExQueryPoolBlockSize (
2061 IN PVOID PoolBlock,
2062 OUT PBOOLEAN QuotaCharged
2063 );
2064
2065 #define FlagOn(x, f) ((x) & (f))
2066
2067 NTKERNELAPI
2068 VOID
2069 NTAPI
2070 FsRtlAddToTunnelCache (
2071 IN PTUNNEL Cache,
2072 IN ULONGLONG DirectoryKey,
2073 IN PUNICODE_STRING ShortName,
2074 IN PUNICODE_STRING LongName,
2075 IN BOOLEAN KeyByShortName,
2076 IN ULONG DataLength,
2077 IN PVOID Data
2078 );
2079
2080 #if (VER_PRODUCTBUILD >= 2195)
2081
2082 PFILE_LOCK
2083 NTAPI
2084 FsRtlAllocateFileLock (
2085 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
2086 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
2087 );
2088
2089 #endif /* (VER_PRODUCTBUILD >= 2195) */
2090
2091 NTKERNELAPI
2092 PVOID
2093 NTAPI
2094 FsRtlAllocatePool (
2095 IN POOL_TYPE PoolType,
2096 IN ULONG NumberOfBytes
2097 );
2098
2099 NTKERNELAPI
2100 PVOID
2101 NTAPI
2102 FsRtlAllocatePoolWithQuota (
2103 IN POOL_TYPE PoolType,
2104 IN ULONG NumberOfBytes
2105 );
2106
2107 NTKERNELAPI
2108 PVOID
2109 NTAPI
2110 FsRtlAllocatePoolWithQuotaTag (
2111 IN POOL_TYPE PoolType,
2112 IN ULONG NumberOfBytes,
2113 IN ULONG Tag
2114 );
2115
2116 NTKERNELAPI
2117 PVOID
2118 NTAPI
2119 FsRtlAllocatePoolWithTag (
2120 IN POOL_TYPE PoolType,
2121 IN ULONG NumberOfBytes,
2122 IN ULONG Tag
2123 );
2124
2125 NTKERNELAPI
2126 BOOLEAN
2127 NTAPI
2128 FsRtlAreNamesEqual (
2129 IN PUNICODE_STRING Name1,
2130 IN PUNICODE_STRING Name2,
2131 IN BOOLEAN IgnoreCase,
2132 IN PWCHAR UpcaseTable OPTIONAL
2133 );
2134
2135 #define FsRtlAreThereCurrentFileLocks(FL) ( \
2136 ((FL)->FastIoIsQuestionable) \
2137 )
2138
2139 /*
2140 FsRtlCheckLockForReadAccess:
2141
2142 All this really does is pick out the lock parameters from the irp (io stack
2143 location?), get IoGetRequestorProcess, and pass values on to
2144 FsRtlFastCheckLockForRead.
2145 */
2146 NTKERNELAPI
2147 BOOLEAN
2148 NTAPI
2149 FsRtlCheckLockForReadAccess (
2150 IN PFILE_LOCK FileLock,
2151 IN PIRP Irp
2152 );
2153
2154 /*
2155 FsRtlCheckLockForWriteAccess:
2156
2157 All this really does is pick out the lock parameters from the irp (io stack
2158 location?), get IoGetRequestorProcess, and pass values on to
2159 FsRtlFastCheckLockForWrite.
2160 */
2161 NTKERNELAPI
2162 BOOLEAN
2163 NTAPI
2164 FsRtlCheckLockForWriteAccess (
2165 IN PFILE_LOCK FileLock,
2166 IN PIRP Irp
2167 );
2168
2169 typedef
2170 VOID NTAPI
2171 (*POPLOCK_WAIT_COMPLETE_ROUTINE) (
2172 IN PVOID Context,
2173 IN PIRP Irp
2174 );
2175
2176 typedef
2177 VOID NTAPI
2178 (*POPLOCK_FS_PREPOST_IRP) (
2179 IN PVOID Context,
2180 IN PIRP Irp
2181 );
2182
2183 NTKERNELAPI
2184 NTSTATUS
2185 NTAPI
2186 FsRtlCheckOplock (
2187 IN POPLOCK Oplock,
2188 IN PIRP Irp,
2189 IN PVOID Context,
2190 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
2191 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
2192 );
2193
2194 NTKERNELAPI
2195 BOOLEAN
2196 NTAPI
2197 FsRtlCopyRead (
2198 IN PFILE_OBJECT FileObject,
2199 IN PLARGE_INTEGER FileOffset,
2200 IN ULONG Length,
2201 IN BOOLEAN Wait,
2202 IN ULONG LockKey,
2203 OUT PVOID Buffer,
2204 OUT PIO_STATUS_BLOCK IoStatus,
2205 IN PDEVICE_OBJECT DeviceObject
2206 );
2207
2208 NTKERNELAPI
2209 BOOLEAN
2210 NTAPI
2211 FsRtlCopyWrite (
2212 IN PFILE_OBJECT FileObject,
2213 IN PLARGE_INTEGER FileOffset,
2214 IN ULONG Length,
2215 IN BOOLEAN Wait,
2216 IN ULONG LockKey,
2217 IN PVOID Buffer,
2218 OUT PIO_STATUS_BLOCK IoStatus,
2219 IN PDEVICE_OBJECT DeviceObject
2220 );
2221
2222 NTKERNELAPI
2223 BOOLEAN
2224 NTAPI
2225 FsRtlCurrentBatchOplock (
2226 IN POPLOCK Oplock
2227 );
2228
2229 NTKERNELAPI
2230 VOID
2231 NTAPI
2232 FsRtlDeleteKeyFromTunnelCache (
2233 IN PTUNNEL Cache,
2234 IN ULONGLONG DirectoryKey
2235 );
2236
2237 NTKERNELAPI
2238 VOID
2239 NTAPI
2240 FsRtlDeleteTunnelCache (
2241 IN PTUNNEL Cache
2242 );
2243
2244 NTKERNELAPI
2245 VOID
2246 NTAPI
2247 FsRtlDeregisterUncProvider (
2248 IN HANDLE Handle
2249 );
2250
2251 NTKERNELAPI
2252 VOID
2253 NTAPI
2254 FsRtlDissectDbcs (
2255 IN ANSI_STRING Name,
2256 OUT PANSI_STRING FirstPart,
2257 OUT PANSI_STRING RemainingPart
2258 );
2259
2260 NTKERNELAPI
2261 VOID
2262 NTAPI
2263 FsRtlDissectName (
2264 IN UNICODE_STRING Name,
2265 OUT PUNICODE_STRING FirstPart,
2266 OUT PUNICODE_STRING RemainingPart
2267 );
2268
2269 NTKERNELAPI
2270 BOOLEAN
2271 NTAPI
2272 FsRtlDoesDbcsContainWildCards (
2273 IN PANSI_STRING Name
2274 );
2275
2276 NTKERNELAPI
2277 BOOLEAN
2278 NTAPI
2279 FsRtlDoesNameContainWildCards (
2280 IN PUNICODE_STRING Name
2281 );
2282
2283 #define FsRtlEnterFileSystem KeEnterCriticalRegion
2284
2285 #define FsRtlExitFileSystem KeLeaveCriticalRegion
2286
2287 NTKERNELAPI
2288 BOOLEAN
2289 NTAPI
2290 FsRtlFastCheckLockForRead (
2291 IN PFILE_LOCK FileLock,
2292 IN PLARGE_INTEGER FileOffset,
2293 IN PLARGE_INTEGER Length,
2294 IN ULONG Key,
2295 IN PFILE_OBJECT FileObject,
2296 IN PEPROCESS Process
2297 );
2298
2299 NTKERNELAPI
2300 BOOLEAN
2301 NTAPI
2302 FsRtlFastCheckLockForWrite (
2303 IN PFILE_LOCK FileLock,
2304 IN PLARGE_INTEGER FileOffset,
2305 IN PLARGE_INTEGER Length,
2306 IN ULONG Key,
2307 IN PFILE_OBJECT FileObject,
2308 IN PEPROCESS Process
2309 );
2310
2311 #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
2312 FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
2313 )
2314
2315 NTKERNELAPI
2316 NTSTATUS
2317 NTAPI
2318 FsRtlFastUnlockAll (
2319 IN PFILE_LOCK FileLock,
2320 IN PFILE_OBJECT FileObject,
2321 IN PEPROCESS Process,
2322 IN PVOID Context OPTIONAL
2323 );
2324 /* ret: STATUS_RANGE_NOT_LOCKED */
2325
2326 NTKERNELAPI
2327 NTSTATUS
2328 NTAPI
2329 FsRtlFastUnlockAllByKey (
2330 IN PFILE_LOCK FileLock,
2331 IN PFILE_OBJECT FileObject,
2332 IN PEPROCESS Process,
2333 IN ULONG Key,
2334 IN PVOID Context OPTIONAL
2335 );
2336 /* ret: STATUS_RANGE_NOT_LOCKED */
2337
2338 NTKERNELAPI
2339 NTSTATUS
2340 NTAPI
2341 FsRtlFastUnlockSingle (
2342 IN PFILE_LOCK FileLock,
2343 IN PFILE_OBJECT FileObject,
2344 IN PLARGE_INTEGER FileOffset,
2345 IN PLARGE_INTEGER Length,
2346 IN PEPROCESS Process,
2347 IN ULONG Key,
2348 IN PVOID Context OPTIONAL,
2349 IN BOOLEAN AlreadySynchronized
2350 );
2351 /* ret: STATUS_RANGE_NOT_LOCKED */
2352
2353 NTKERNELAPI
2354 BOOLEAN
2355 NTAPI
2356 FsRtlFindInTunnelCache (
2357 IN PTUNNEL Cache,
2358 IN ULONGLONG DirectoryKey,
2359 IN PUNICODE_STRING Name,
2360 OUT PUNICODE_STRING ShortName,
2361 OUT PUNICODE_STRING LongName,
2362 IN OUT PULONG DataLength,
2363 OUT PVOID Data
2364 );
2365
2366 #if (VER_PRODUCTBUILD >= 2195)
2367
2368 NTKERNELAPI
2369 VOID
2370 NTAPI
2371 FsRtlFreeFileLock (
2372 IN PFILE_LOCK FileLock
2373 );
2374
2375 #endif /* (VER_PRODUCTBUILD >= 2195) */
2376
2377 NTKERNELAPI
2378 NTSTATUS
2379 NTAPI
2380 FsRtlGetFileSize (
2381 IN PFILE_OBJECT FileObject,
2382 IN OUT PLARGE_INTEGER FileSize
2383 );
2384
2385 /*
2386 FsRtlGetNextFileLock:
2387
2388 ret: NULL if no more locks
2389
2390 Internals:
2391 FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
2392 FileLock->LastReturnedLock as storage.
2393 LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
2394 list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
2395 calls with Restart = FALSE.
2396 */
2397 NTKERNELAPI
2398 PFILE_LOCK_INFO
2399 NTAPI
2400 FsRtlGetNextFileLock (
2401 IN PFILE_LOCK FileLock,
2402 IN BOOLEAN Restart
2403 );
2404
2405 NTKERNELAPI
2406 VOID
2407 NTAPI
2408 FsRtlInitializeFileLock (
2409 IN PFILE_LOCK FileLock,
2410 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
2411 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
2412 );
2413
2414 NTKERNELAPI
2415 VOID
2416 NTAPI
2417 FsRtlInitializeOplock (
2418 IN OUT POPLOCK Oplock
2419 );
2420
2421 NTKERNELAPI
2422 VOID
2423 NTAPI
2424 FsRtlInitializeTunnelCache (
2425 IN PTUNNEL Cache
2426 );
2427
2428 NTKERNELAPI
2429 BOOLEAN
2430 NTAPI
2431 FsRtlIsNameInExpression (
2432 IN PUNICODE_STRING Expression,
2433 IN PUNICODE_STRING Name,
2434 IN BOOLEAN IgnoreCase,
2435 IN PWCHAR UpcaseTable OPTIONAL
2436 );
2437
2438 NTKERNELAPI
2439 BOOLEAN
2440 NTAPI
2441 FsRtlIsNtstatusExpected (
2442 IN NTSTATUS Ntstatus
2443 );
2444
2445 #define FsRtlIsUnicodeCharacterWild(C) ( \
2446 (((C) >= 0x40) ? \
2447 FALSE : \
2448 FlagOn((*FsRtlLegalAnsiCharacterArray)[(C)], FSRTL_WILD_CHARACTER )) \
2449 )
2450
2451 NTKERNELAPI
2452 BOOLEAN
2453 NTAPI
2454 FsRtlMdlReadComplete (
2455 IN PFILE_OBJECT FileObject,
2456 IN PMDL MdlChain
2457 );
2458
2459 NTKERNELAPI
2460 BOOLEAN
2461 NTAPI
2462 FsRtlMdlReadCompleteDev (
2463 IN PFILE_OBJECT FileObject,
2464 IN PMDL MdlChain,
2465 IN PDEVICE_OBJECT DeviceObject
2466 );
2467
2468 NTKERNELAPI
2469 BOOLEAN
2470 NTAPI
2471 FsRtlMdlWriteComplete (
2472 IN PFILE_OBJECT FileObject,
2473 IN PLARGE_INTEGER FileOffset,
2474 IN PMDL MdlChain
2475 );
2476
2477 NTKERNELAPI
2478 BOOLEAN
2479 NTAPI
2480 FsRtlMdlWriteCompleteDev (
2481 IN PFILE_OBJECT FileObject,
2482 IN PLARGE_INTEGER FileOffset,
2483 IN PMDL MdlChain,
2484 IN PDEVICE_OBJECT DeviceObject
2485 );
2486
2487 NTKERNELAPI
2488 NTSTATUS
2489 NTAPI
2490 FsRtlNormalizeNtstatus (
2491 IN NTSTATUS Exception,
2492 IN NTSTATUS GenericException
2493 );
2494
2495 NTKERNELAPI
2496 VOID
2497 NTAPI
2498 FsRtlNotifyChangeDirectory (
2499 IN PNOTIFY_SYNC NotifySync,
2500 IN PVOID FsContext,
2501 IN PSTRING FullDirectoryName,
2502 IN PLIST_ENTRY NotifyList,
2503 IN BOOLEAN WatchTree,
2504 IN ULONG CompletionFilter,
2505 IN PIRP NotifyIrp
2506 );
2507
2508 NTKERNELAPI
2509 VOID
2510 NTAPI
2511 FsRtlNotifyCleanup (
2512 IN PNOTIFY_SYNC NotifySync,
2513 IN PLIST_ENTRY NotifyList,
2514 IN PVOID FsContext
2515 );
2516
2517 typedef BOOLEAN (*PCHECK_FOR_TRAVERSE_ACCESS) (
2518 IN PVOID NotifyContext,
2519 IN PVOID TargetContext,
2520 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
2521 );
2522
2523 NTKERNELAPI
2524 VOID
2525 NTAPI
2526 FsRtlNotifyFullChangeDirectory (
2527 IN PNOTIFY_SYNC NotifySync,
2528 IN PLIST_ENTRY NotifyList,
2529 IN PVOID FsContext,
2530 IN PSTRING FullDirectoryName,
2531 IN BOOLEAN WatchTree,
2532 IN BOOLEAN IgnoreBuffer,
2533 IN ULONG CompletionFilter,
2534 IN PIRP NotifyIrp,
2535 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
2536 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
2537 );
2538
2539 NTKERNELAPI
2540 VOID
2541 NTAPI
2542 FsRtlNotifyFullReportChange (
2543 IN PNOTIFY_SYNC NotifySync,
2544 IN PLIST_ENTRY NotifyList,
2545 IN PSTRING FullTargetName,
2546 IN USHORT TargetNameOffset,
2547 IN PSTRING StreamName OPTIONAL,
2548 IN PSTRING NormalizedParentName OPTIONAL,
2549 IN ULONG FilterMatch,
2550 IN ULONG Action,
2551 IN PVOID TargetContext
2552 );
2553
2554 NTKERNELAPI
2555 VOID
2556 NTAPI
2557 FsRtlNotifyInitializeSync (
2558 IN PNOTIFY_SYNC NotifySync
2559 );
2560
2561 NTKERNELAPI
2562 VOID
2563 NTAPI
2564 FsRtlNotifyReportChange (
2565 IN PNOTIFY_SYNC NotifySync,
2566 IN PLIST_ENTRY NotifyList,
2567 IN PSTRING FullTargetName,
2568 IN PUSHORT FileNamePartLength,
2569 IN ULONG FilterMatch
2570 );
2571
2572 NTKERNELAPI
2573 VOID
2574 NTAPI
2575 FsRtlNotifyUninitializeSync (
2576 IN PNOTIFY_SYNC NotifySync
2577 );
2578
2579 #if (VER_PRODUCTBUILD >= 2195)
2580
2581 NTKERNELAPI
2582 NTSTATUS
2583 NTAPI
2584 FsRtlNotifyVolumeEvent (
2585 IN PFILE_OBJECT FileObject,
2586 IN ULONG EventCode
2587 );
2588
2589 #endif /* (VER_PRODUCTBUILD >= 2195) */
2590
2591 NTKERNELAPI
2592 NTSTATUS
2593 NTAPI
2594 FsRtlOplockFsctrl (
2595 IN POPLOCK Oplock,
2596 IN PIRP Irp,
2597 IN ULONG OpenCount
2598 );
2599
2600 NTKERNELAPI
2601 BOOLEAN
2602 NTAPI
2603 FsRtlOplockIsFastIoPossible (
2604 IN POPLOCK Oplock
2605 );
2606
2607 /*
2608 FsRtlPrivateLock:
2609
2610 ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
2611
2612 Internals:
2613 -Calls IoCompleteRequest if Irp
2614 -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
2615 */
2616 NTKERNELAPI
2617 BOOLEAN
2618 NTAPI
2619 FsRtlPrivateLock (
2620 IN PFILE_LOCK FileLock,
2621 IN PFILE_OBJECT FileObject,
2622 IN PLARGE_INTEGER FileOffset,
2623 IN PLARGE_INTEGER Length,
2624 IN PEPROCESS Process,
2625 IN ULONG Key,
2626 IN BOOLEAN FailImmediately,
2627 IN BOOLEAN ExclusiveLock,
2628 OUT PIO_STATUS_BLOCK IoStatus,
2629 IN PIRP Irp OPTIONAL,
2630 IN PVOID Context,
2631 IN BOOLEAN AlreadySynchronized
2632 );
2633
2634 /*
2635 FsRtlProcessFileLock:
2636
2637 ret:
2638 -STATUS_INVALID_DEVICE_REQUEST
2639 -STATUS_RANGE_NOT_LOCKED from unlock routines.
2640 -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
2641 (redirected IoStatus->Status).
2642
2643 Internals:
2644 -switch ( Irp->CurrentStackLocation->MinorFunction )
2645 lock: return FsRtlPrivateLock;
2646 unlocksingle: return FsRtlFastUnlockSingle;
2647 unlockall: return FsRtlFastUnlockAll;
2648 unlockallbykey: return FsRtlFastUnlockAllByKey;
2649 default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
2650 return STATUS_INVALID_DEVICE_REQUEST;
2651
2652 -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
2653 -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
2654 */
2655 NTKERNELAPI
2656 NTSTATUS
2657 NTAPI
2658 FsRtlProcessFileLock (
2659 IN PFILE_LOCK FileLock,
2660 IN PIRP Irp,
2661 IN PVOID Context OPTIONAL
2662 );
2663
2664 NTKERNELAPI
2665 NTSTATUS
2666 NTAPI
2667 FsRtlRegisterUncProvider (
2668 IN OUT PHANDLE MupHandle,
2669 IN PUNICODE_STRING RedirectorDeviceName,
2670 IN BOOLEAN MailslotsSupported
2671 );
2672
2673 NTKERNELAPI
2674 VOID
2675 NTAPI
2676 FsRtlUninitializeFileLock (
2677 IN PFILE_LOCK FileLock
2678 );
2679
2680 NTKERNELAPI
2681 VOID
2682 NTAPI
2683 FsRtlUninitializeOplock (
2684 IN OUT POPLOCK Oplock
2685 );
2686
2687 NTSYSAPI
2688 VOID
2689 NTAPI
2690 HalDisplayString (
2691 IN PCHAR String
2692 );
2693
2694 NTSYSAPI
2695 VOID
2696 NTAPI
2697 HalQueryRealTimeClock (
2698 IN OUT PTIME_FIELDS TimeFields
2699 );
2700
2701 NTSYSAPI
2702 VOID
2703 NTAPI
2704 HalSetRealTimeClock (
2705 IN PTIME_FIELDS TimeFields
2706 );
2707
2708 #define InitializeMessageHeader(m, l, t) { \
2709 (m)->Length = (USHORT)(l); \
2710 (m)->DataLength = (USHORT)(l - sizeof( LPC_MESSAGE )); \
2711 (m)->MessageType = (USHORT)(t); \
2712 (m)->DataInfoOffset = 0; \
2713 }
2714
2715 NTKERNELAPI
2716 VOID
2717 NTAPI
2718 IoAcquireVpbSpinLock (
2719 OUT PKIRQL Irql
2720 );
2721
2722 NTKERNELAPI
2723 NTSTATUS
2724 NTAPI
2725 IoCheckDesiredAccess (
2726 IN OUT PACCESS_MASK DesiredAccess,
2727 IN ACCESS_MASK GrantedAccess
2728 );
2729
2730 NTKERNELAPI
2731 NTSTATUS
2732 NTAPI
2733 IoCheckEaBufferValidity (
2734 IN PFILE_FULL_EA_INFORMATION EaBuffer,
2735 IN ULONG EaLength,
2736 OUT PULONG ErrorOffset
2737 );
2738
2739 NTKERNELAPI
2740 NTSTATUS
2741 NTAPI
2742 IoCheckFunctionAccess (
2743 IN ACCESS_MASK GrantedAccess,
2744 IN UCHAR MajorFunction,
2745 IN UCHAR MinorFunction,
2746 IN ULONG IoControlCode,
2747 IN PFILE_INFORMATION_CLASS FileInformationClass OPTIONAL,
2748 IN PFS_INFORMATION_CLASS FsInformationClass OPTIONAL
2749 );
2750
2751 #if (VER_PRODUCTBUILD >= 2195)
2752
2753 NTKERNELAPI
2754 NTSTATUS
2755 NTAPI
2756 IoCheckQuotaBufferValidity (
2757 IN PFILE_QUOTA_INFORMATION QuotaBuffer,
2758 IN ULONG QuotaLength,
2759 OUT PULONG ErrorOffset
2760 );
2761
2762 #endif /* (VER_PRODUCTBUILD >= 2195) */
2763
2764 NTKERNELAPI
2765 PFILE_OBJECT
2766 NTAPI
2767 IoCreateStreamFileObject (
2768 IN PFILE_OBJECT FileObject OPTIONAL,
2769 IN PDEVICE_OBJECT DeviceObject OPTIONAL
2770 );
2771
2772 #if (VER_PRODUCTBUILD >= 2195)
2773
2774 NTKERNELAPI
2775 PFILE_OBJECT
2776 NTAPI
2777 IoCreateStreamFileObjectLite (
2778 IN PFILE_OBJECT FileObject OPTIONAL,
2779 IN PDEVICE_OBJECT DeviceObject OPTIONAL
2780 );
2781
2782 #endif /* (VER_PRODUCTBUILD >= 2195) */
2783
2784 NTKERNELAPI
2785 BOOLEAN
2786 NTAPI
2787 IoFastQueryNetworkAttributes (
2788 IN POBJECT_ATTRIBUTES ObjectAttributes,
2789 IN ACCESS_MASK DesiredAccess,
2790 IN ULONG OpenOptions,
2791 OUT PIO_STATUS_BLOCK IoStatus,
2792 OUT PFILE_NETWORK_OPEN_INFORMATION Buffer
2793 );
2794
2795 NTKERNELAPI
2796 PDEVICE_OBJECT
2797 NTAPI
2798 IoGetAttachedDevice (
2799 IN PDEVICE_OBJECT DeviceObject
2800 );
2801
2802 NTKERNELAPI
2803 PDEVICE_OBJECT
2804 NTAPI
2805 IoGetBaseFileSystemDeviceObject (
2806 IN PFILE_OBJECT FileObject
2807 );
2808
2809 NTKERNELAPI
2810 PEPROCESS
2811 NTAPI
2812 IoGetRequestorProcess (
2813 IN PIRP Irp
2814 );
2815
2816 #if (VER_PRODUCTBUILD >= 2195)
2817
2818 NTKERNELAPI
2819 ULONG
2820 NTAPI
2821 IoGetRequestorProcessId (
2822 IN PIRP Irp
2823 );
2824
2825 #endif /* (VER_PRODUCTBUILD >= 2195) */
2826
2827 NTKERNELAPI
2828 PIRP
2829 NTAPI
2830 IoGetTopLevelIrp (
2831 VOID
2832 );
2833
2834 #define IoIsFileOpenedExclusively(FileObject) ( \
2835 (BOOLEAN) !( \
2836 (FileObject)->SharedRead || \
2837 (FileObject)->SharedWrite || \
2838 (FileObject)->SharedDelete \
2839 ) \
2840 )
2841
2842 NTKERNELAPI
2843 BOOLEAN
2844 NTAPI
2845 IoIsOperationSynchronous (
2846 IN PIRP Irp
2847 );
2848
2849 NTKERNELAPI
2850 BOOLEAN
2851 NTAPI
2852 IoIsSystemThread (
2853 IN PETHREAD Thread
2854 );
2855
2856 #if (VER_PRODUCTBUILD >= 2195)
2857
2858 NTKERNELAPI
2859 BOOLEAN
2860 NTAPI
2861 IoIsValidNameGraftingBuffer (
2862 IN PIRP Irp,
2863 IN PREPARSE_DATA_BUFFER ReparseBuffer
2864 );
2865
2866 #endif /* (VER_PRODUCTBUILD >= 2195) */
2867
2868 NTKERNELAPI
2869 NTSTATUS
2870 NTAPI
2871 IoPageRead (
2872 IN PFILE_OBJECT FileObject,
2873 IN PMDL Mdl,
2874 IN PLARGE_INTEGER Offset,
2875 IN PKEVENT Event,
2876 OUT PIO_STATUS_BLOCK IoStatusBlock
2877 );
2878
2879 NTKERNELAPI
2880 NTSTATUS
2881 NTAPI
2882 IoQueryFileInformation (
2883 IN PFILE_OBJECT FileObject,
2884 IN FILE_INFORMATION_CLASS FileInformationClass,
2885 IN ULONG Length,
2886 OUT PVOID FileInformation,
2887 OUT PULONG ReturnedLength
2888 );
2889
2890 NTKERNELAPI
2891 NTSTATUS
2892 NTAPI
2893 IoQueryVolumeInformation (
2894 IN PFILE_OBJECT FileObject,
2895 IN FS_INFORMATION_CLASS FsInformationClass,
2896 IN ULONG Length,
2897 OUT PVOID FsInformation,
2898 OUT PULONG ReturnedLength
2899 );
2900
2901 NTKERNELAPI
2902 VOID
2903 NTAPI
2904 IoRegisterFileSystem (
2905 IN OUT PDEVICE_OBJECT DeviceObject
2906 );
2907
2908 #if (VER_PRODUCTBUILD >= 1381)
2909
2910 typedef VOID (NTAPI *PDRIVER_FS_NOTIFICATION) (
2911 IN PDEVICE_OBJECT DeviceObject,
2912 IN BOOLEAN DriverActive
2913 );
2914
2915 NTKERNELAPI
2916 NTSTATUS
2917 NTAPI
2918 IoRegisterFsRegistrationChange (
2919 IN PDRIVER_OBJECT DriverObject,
2920 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
2921 );
2922
2923 #endif /* (VER_PRODUCTBUILD >= 1381) */
2924
2925 NTKERNELAPI
2926 VOID
2927 NTAPI
2928 IoReleaseVpbSpinLock (
2929 IN KIRQL Irql
2930 );
2931
2932 NTKERNELAPI
2933 VOID
2934 NTAPI
2935 IoSetDeviceToVerify (
2936 IN PETHREAD Thread,
2937 IN PDEVICE_OBJECT DeviceObject
2938 );
2939
2940 NTKERNELAPI
2941 NTSTATUS
2942 NTAPI
2943 IoSetInformation (
2944 IN PFILE_OBJECT FileObject,
2945 IN FILE_INFORMATION_CLASS FileInformationClass,
2946 IN ULONG Length,
2947 IN PVOID FileInformation
2948 );
2949
2950 NTKERNELAPI
2951 VOID
2952 NTAPI
2953 IoSetTopLevelIrp (
2954 IN PIRP Irp
2955 );
2956
2957 NTKERNELAPI
2958 NTSTATUS
2959 NTAPI
2960 IoSynchronousPageWrite (
2961 IN PFILE_OBJECT FileObject,
2962 IN PMDL Mdl,
2963 IN PLARGE_INTEGER FileOffset,
2964 IN PKEVENT Event,
2965 OUT PIO_STATUS_BLOCK IoStatusBlock
2966 );
2967
2968 NTKERNELAPI
2969 PEPROCESS
2970 NTAPI
2971 IoThreadToProcess (
2972 IN PETHREAD Thread
2973 );
2974
2975 NTKERNELAPI
2976 VOID
2977 NTAPI
2978 IoUnregisterFileSystem (
2979 IN OUT PDEVICE_OBJECT DeviceObject
2980 );
2981
2982 #if (VER_PRODUCTBUILD >= 1381)
2983
2984 NTKERNELAPI
2985 NTSTATUS
2986 NTAPI
2987 IoUnregisterFsRegistrationChange (
2988 IN PDRIVER_OBJECT DriverObject,
2989 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
2990 );
2991
2992 #endif /* (VER_PRODUCTBUILD >= 1381) */
2993
2994 NTKERNELAPI
2995 NTSTATUS
2996 NTAPI
2997 IoVerifyVolume (
2998 IN PDEVICE_OBJECT DeviceObject,
2999 IN BOOLEAN AllowRawMount
3000 );
3001
3002 NTKERNELAPI
3003 VOID
3004 NTAPI
3005 KeAttachProcess (
3006 IN PKPROCESS Process
3007 );
3008
3009 NTKERNELAPI
3010 VOID
3011 NTAPI
3012 KeDetachProcess (
3013 VOID
3014 );
3015
3016 NTKERNELAPI
3017 VOID
3018 NTAPI
3019 KeInitializeQueue (
3020 IN PRKQUEUE Queue,
3021 IN ULONG Count OPTIONAL
3022 );
3023
3024 NTKERNELAPI
3025 LONG
3026 NTAPI
3027 KeInsertHeadQueue (
3028 IN PRKQUEUE Queue,
3029 IN PLIST_ENTRY Entry
3030 );
3031
3032 NTKERNELAPI
3033 LONG
3034 NTAPI
3035 KeInsertQueue (
3036 IN PRKQUEUE Queue,
3037 IN PLIST_ENTRY Entry
3038 );
3039
3040 NTKERNELAPI
3041 BOOLEAN
3042 NTAPI
3043 KeInsertQueueApc (
3044 IN PKAPC Apc,
3045 IN PVOID SystemArgument1,
3046 IN PVOID SystemArgument2,
3047 IN KPRIORITY PriorityBoost
3048 );
3049
3050 NTKERNELAPI
3051 LONG
3052 NTAPI
3053 KeReadStateQueue (
3054 IN PRKQUEUE Queue
3055 );
3056
3057 NTKERNELAPI
3058 PLIST_ENTRY
3059 NTAPI
3060 KeRemoveQueue (
3061 IN PRKQUEUE Queue,
3062 IN KPROCESSOR_MODE WaitMode,
3063 IN PLARGE_INTEGER Timeout OPTIONAL
3064 );
3065
3066 NTKERNELAPI
3067 PLIST_ENTRY
3068 NTAPI
3069 KeRundownQueue (
3070 IN PRKQUEUE Queue
3071 );
3072
3073 #if (VER_PRODUCTBUILD >= 2195)
3074
3075 NTKERNELAPI
3076 VOID
3077 NTAPI
3078 KeStackAttachProcess (
3079 IN PKPROCESS Process,
3080 OUT PKAPC_STATE ApcState
3081 );
3082
3083 NTKERNELAPI
3084 VOID
3085 NTAPI
3086 KeUnstackDetachProcess (
3087 IN PKAPC_STATE ApcState
3088 );
3089
3090 #endif /* (VER_PRODUCTBUILD >= 2195) */
3091
3092 NTKERNELAPI
3093 BOOLEAN
3094 NTAPI
3095 MmCanFileBeTruncated (
3096 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
3097 IN PLARGE_INTEGER NewFileSize
3098 );
3099
3100 NTKERNELAPI
3101 BOOLEAN
3102 NTAPI
3103 MmFlushImageSection (
3104 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
3105 IN MMFLUSH_TYPE FlushType
3106 );
3107
3108 NTKERNELAPI
3109 BOOLEAN
3110 NTAPI
3111 MmForceSectionClosed (
3112 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
3113 IN BOOLEAN DelayClose
3114 );
3115
3116 #if (VER_PRODUCTBUILD >= 1381)
3117
3118 NTKERNELAPI
3119 BOOLEAN
3120 NTAPI
3121 MmIsRecursiveIoFault (
3122 VOID
3123 );
3124
3125 #else
3126
3127 #define MmIsRecursiveIoFault() ( \
3128 (PsGetCurrentThread()->DisablePageFaultClustering) | \
3129 (PsGetCurrentThread()->ForwardClusterOnly) \
3130 )
3131
3132 #endif
3133
3134 NTKERNELAPI
3135 NTSTATUS
3136 NTAPI
3137 MmMapViewOfSection (
3138 IN PVOID SectionObject,
3139 IN PEPROCESS Process,
3140 IN OUT PVOID *BaseAddress,
3141 IN ULONG ZeroBits,
3142 IN ULONG CommitSize,
3143 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL,
3144 IN OUT PULONG ViewSize,
3145 IN SECTION_INHERIT InheritDisposition,
3146 IN ULONG AllocationType,
3147 IN ULONG Protect
3148 );
3149
3150 NTKERNELAPI
3151 BOOLEAN
3152 NTAPI
3153 MmSetAddressRangeModified (
3154 IN PVOID Address,
3155 IN ULONG Length
3156 );
3157
3158 NTKERNELAPI
3159 NTSTATUS
3160 NTAPI
3161 ObCreateObject (
3162 IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL,
3163 IN POBJECT_TYPE ObjectType,
3164 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
3165 IN KPROCESSOR_MODE AccessMode,
3166 IN OUT PVOID ParseContext OPTIONAL,
3167 IN ULONG ObjectSize,
3168 IN ULONG PagedPoolCharge OPTIONAL,
3169 IN ULONG NonPagedPoolCharge OPTIONAL,
3170 OUT PVOID *Object
3171 );
3172
3173 NTKERNELAPI
3174 ULONG
3175 NTAPI
3176 ObGetObjectPointerCount (
3177 IN PVOID Object
3178 );
3179
3180 NTKERNELAPI
3181 NTSTATUS
3182 NTAPI
3183 ObInsertObject (
3184 IN PVOID Object,
3185 IN PACCESS_STATE PassedAccessState OPTIONAL,
3186 IN ACCESS_MASK DesiredAccess,
3187 IN ULONG AdditionalReferences,
3188 OUT PVOID *ReferencedObject OPTIONAL,
3189 OUT PHANDLE Handle
3190 );
3191
3192 NTKERNELAPI
3193 VOID
3194 NTAPI
3195 ObMakeTemporaryObject (
3196 IN PVOID Object
3197 );
3198
3199 NTKERNELAPI
3200 NTSTATUS
3201 NTAPI
3202 ObOpenObjectByPointer (
3203 IN PVOID Object,
3204 IN ULONG HandleAttributes,
3205 IN PACCESS_STATE PassedAccessState OPTIONAL,
3206 IN ACCESS_MASK DesiredAccess OPTIONAL,
3207 IN POBJECT_TYPE ObjectType OPTIONAL,
3208 IN KPROCESSOR_MODE AccessMode,
3209 OUT PHANDLE Handle
3210 );
3211
3212 NTKERNELAPI
3213 NTSTATUS
3214 NTAPI
3215 ObQueryNameString (
3216 IN PVOID Object,
3217 OUT POBJECT_NAME_INFORMATION ObjectNameInfo,
3218 IN ULONG Length,
3219 OUT PULONG ReturnLength
3220 );
3221
3222 NTKERNELAPI
3223 NTSTATUS
3224 NTAPI
3225 ObQueryObjectAuditingByHandle (
3226 IN HANDLE Handle,
3227 OUT PBOOLEAN GenerateOnClose
3228 );
3229
3230 NTKERNELAPI
3231 NTSTATUS
3232 NTAPI
3233 ObReferenceObjectByName (
3234 IN PUNICODE_STRING ObjectName,
3235 IN ULONG Attributes,
3236 IN PACCESS_STATE PassedAccessState OPTIONAL,
3237 IN ACCESS_MASK DesiredAccess OPTIONAL,
3238 IN POBJECT_TYPE ObjectType,
3239 IN KPROCESSOR_MODE AccessMode,
3240 IN OUT PVOID ParseContext OPTIONAL,
3241 OUT PVOID *Object
3242 );
3243
3244 NTKERNELAPI
3245 VOID
3246 NTAPI
3247 PsChargePoolQuota (
3248 IN PEPROCESS Process,
3249 IN POOL_TYPE PoolType,
3250 IN ULONG Amount
3251 );
3252
3253 #define PsDereferenceImpersonationToken(T) \
3254 {if (ARGUMENT_PRESENT(T)) { \
3255 (ObDereferenceObject((T))); \
3256 } else { \
3257 ; \
3258 } \
3259 }
3260
3261 #define PsDereferencePrimaryToken(T) (ObDereferenceObject((T)))
3262
3263 NTKERNELAPI
3264 ULONGLONG
3265 NTAPI
3266 PsGetProcessExitTime (
3267 VOID
3268 );
3269
3270 NTKERNELAPI
3271 BOOLEAN
3272 NTAPI
3273 PsIsThreadTerminating (
3274 IN PETHREAD Thread
3275 );
3276
3277 NTKERNELAPI
3278 NTSTATUS
3279 NTAPI
3280 PsLookupProcessByProcessId (
3281 IN HANDLE ProcessId,
3282 OUT PEPROCESS *Process
3283 );
3284
3285 NTKERNELAPI
3286 NTSTATUS
3287 NTAPI
3288 PsLookupProcessThreadByCid (
3289 IN PCLIENT_ID Cid,
3290 OUT PEPROCESS *Process OPTIONAL,
3291 OUT PETHREAD *Thread
3292 );
3293
3294 NTKERNELAPI
3295 NTSTATUS
3296 NTAPI
3297 PsLookupThreadByThreadId (
3298 IN HANDLE UniqueThreadId,
3299 OUT PETHREAD *Thread
3300 );
3301
3302 NTKERNELAPI
3303 PACCESS_TOKEN
3304 NTAPI
3305 PsReferenceImpersonationToken (
3306 IN PETHREAD Thread,
3307 OUT PBOOLEAN CopyOnUse,
3308 OUT PBOOLEAN EffectiveOnly,
3309 OUT PSECURITY_IMPERSONATION_LEVEL Level
3310 );
3311
3312 NTKERNELAPI
3313 HANDLE
3314 NTAPI
3315 PsReferencePrimaryToken (
3316 IN PEPROCESS Process
3317 );
3318
3319 NTKERNELAPI
3320 VOID
3321 NTAPI
3322 PsReturnPoolQuota (
3323 IN PEPROCESS Process,
3324 IN POOL_TYPE PoolType,
3325 IN ULONG Amount
3326 );
3327
3328 NTKERNELAPI
3329 VOID
3330 NTAPI
3331 PsRevertToSelf (
3332 VOID
3333 );
3334
3335 NTSYSAPI
3336 NTSTATUS
3337 NTAPI
3338 RtlAbsoluteToSelfRelativeSD (
3339 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
3340 IN OUT PSECURITY_DESCRIPTOR_RELATIVE SelfRelativeSecurityDescriptor,
3341 IN PULONG BufferLength
3342 );
3343
3344 NTSYSAPI
3345 PVOID
3346 NTAPI
3347 RtlAllocateHeap (
3348 IN HANDLE HeapHandle,
3349 IN ULONG Flags,
3350 IN ULONG Size
3351 );
3352
3353 NTSYSAPI
3354 NTSTATUS
3355 NTAPI
3356 RtlCompressBuffer (
3357 IN USHORT CompressionFormatAndEngine,
3358 IN PUCHAR UncompressedBuffer,
3359 IN ULONG UncompressedBufferSize,
3360 OUT PUCHAR CompressedBuffer,
3361 IN ULONG CompressedBufferSize,
3362 IN ULONG UncompressedChunkSize,
3363 OUT PULONG FinalCompressedSize,
3364 IN PVOID WorkSpace
3365 );
3366
3367 NTSYSAPI
3368 NTSTATUS
3369 NTAPI
3370 RtlCompressChunks (
3371 IN PUCHAR UncompressedBuffer,
3372 IN ULONG UncompressedBufferSize,
3373 OUT PUCHAR CompressedBuffer,
3374 IN ULONG CompressedBufferSize,
3375 IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo,
3376 IN ULONG CompressedDataInfoLength,
3377 IN PVOID WorkSpace
3378 );
3379
3380 NTSYSAPI
3381 NTSTATUS
3382 NTAPI
3383 RtlConvertSidToUnicodeString (
3384 OUT PUNICODE_STRING DestinationString,
3385 IN PSID Sid,
3386 IN BOOLEAN AllocateDestinationString
3387 );
3388
3389 NTSYSAPI
3390 NTSTATUS
3391 NTAPI
3392 RtlCopySid (
3393 IN ULONG Length,
3394 IN PSID Destination,
3395 IN PSID Source
3396 );
3397
3398 NTSYSAPI
3399 NTSTATUS
3400 NTAPI
3401 RtlDecompressBuffer (
3402 IN USHORT CompressionFormat,
3403 OUT PUCHAR UncompressedBuffer,
3404 IN ULONG UncompressedBufferSize,
3405 IN PUCHAR CompressedBuffer,
3406 IN ULONG CompressedBufferSize,
3407 OUT PULONG FinalUncompressedSize
3408 );
3409
3410 NTSYSAPI
3411 NTSTATUS
3412 NTAPI
3413 RtlDecompressChunks (
3414 OUT PUCHAR UncompressedBuffer,
3415 IN ULONG UncompressedBufferSize,
3416 IN PUCHAR CompressedBuffer,
3417 IN ULONG CompressedBufferSize,
3418 IN PUCHAR CompressedTail,
3419 IN ULONG CompressedTailSize,
3420 IN PCOMPRESSED_DATA_INFO CompressedDataInfo
3421 );
3422
3423 NTSYSAPI
3424 NTSTATUS
3425 NTAPI
3426 RtlDecompressFragment (
3427 IN USHORT CompressionFormat,
3428 OUT PUCHAR UncompressedFragment,
3429 IN ULONG UncompressedFragmentSize,
3430 IN PUCHAR CompressedBuffer,
3431 IN ULONG CompressedBufferSize,
3432 IN ULONG FragmentOffset,
3433 OUT PULONG FinalUncompressedSize,
3434 IN PVOID WorkSpace
3435 );
3436
3437 NTSYSAPI
3438 NTSTATUS
3439 NTAPI
3440 RtlDescribeChunk (
3441 IN USHORT CompressionFormat,
3442 IN OUT PUCHAR *CompressedBuffer,
3443 IN PUCHAR EndOfCompressedBufferPlus1,
3444 OUT PUCHAR *ChunkBuffer,
3445 OUT PULONG ChunkSize
3446 );
3447
3448 NTSYSAPI
3449 BOOLEAN
3450 NTAPI
3451 RtlEqualSid (
3452 IN PSID Sid1,
3453 IN PSID Sid2
3454 );
3455
3456 NTSYSAPI
3457 VOID
3458 NTAPI
3459 RtlFillMemoryUlong (
3460 IN PVOID Destination,
3461 IN ULONG Length,
3462 IN ULONG Fill
3463 );
3464
3465 NTSYSAPI
3466 BOOLEAN
3467 NTAPI
3468 RtlFreeHeap (
3469 IN HANDLE HeapHandle,
3470 IN ULONG Flags,
3471 IN PVOID P
3472 );
3473
3474 NTSYSAPI
3475 VOID
3476 NTAPI
3477 RtlGenerate8dot3Name (
3478 IN PUNICODE_STRING Name,
3479 IN BOOLEAN AllowExtendedCharacters,
3480 IN OUT PGENERATE_NAME_CONTEXT Context,
3481 OUT PUNICODE_STRING Name8dot3
3482 );
3483
3484 NTSYSAPI
3485 NTSTATUS
3486 NTAPI
3487 RtlGetCompressionWorkSpaceSize (
3488 IN USHORT CompressionFormatAndEngine,
3489 OUT PULONG CompressBufferWorkSpaceSize,
3490 OUT PULONG CompressFragmentWorkSpaceSize
3491 );
3492
3493 NTSYSAPI
3494 NTSTATUS
3495 NTAPI
3496 RtlGetDaclSecurityDescriptor (
3497 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
3498 OUT PBOOLEAN DaclPresent,
3499 OUT PACL *Dacl,
3500 OUT PBOOLEAN DaclDefaulted
3501 );
3502
3503 NTSYSAPI
3504 NTSTATUS
3505 NTAPI
3506 RtlGetGroupSecurityDescriptor (
3507 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
3508 OUT PSID *Group,
3509 OUT PBOOLEAN GroupDefaulted
3510 );
3511
3512 NTSYSAPI
3513 NTSTATUS
3514 NTAPI
3515 RtlGetOwnerSecurityDescriptor (
3516 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
3517 OUT PSID *Owner,
3518 OUT PBOOLEAN OwnerDefaulted
3519 );
3520
3521 NTSYSAPI
3522 NTSTATUS
3523 NTAPI
3524 RtlInitializeSid (
3525 IN OUT PSID Sid,
3526 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
3527 IN UCHAR SubAuthorityCount
3528 );
3529
3530 NTSYSAPI
3531 BOOLEAN
3532 NTAPI
3533 RtlIsNameLegalDOS8Dot3 (
3534 IN PUNICODE_STRING UnicodeName,
3535 IN PANSI_STRING AnsiName,
3536 PBOOLEAN Unknown
3537 );
3538
3539 NTSYSAPI
3540 ULONG
3541 NTAPI
3542 RtlLengthRequiredSid (
3543 IN UCHAR SubAuthorityCount
3544 );
3545
3546 NTSYSAPI
3547 ULONG
3548 NTAPI
3549 RtlLengthSid (
3550 IN PSID Sid
3551 );
3552
3553 NTSYSAPI
3554 ULONG
3555 NTAPI
3556 RtlNtStatusToDosError (
3557 IN NTSTATUS Status
3558 );
3559
3560 NTSYSAPI
3561 NTSTATUS
3562 NTAPI
3563 RtlReserveChunk (
3564 IN USHORT CompressionFormat,
3565 IN OUT PUCHAR *CompressedBuffer,
3566 IN PUCHAR EndOfCompressedBufferPlus1,
3567 OUT PUCHAR *ChunkBuffer,
3568 IN ULONG ChunkSize
3569 );
3570
3571 NTSYSAPI
3572 VOID
3573 NTAPI
3574 RtlSecondsSince1970ToTime (
3575 IN ULONG SecondsSince1970,
3576 OUT PLARGE_INTEGER Time
3577 );
3578
3579 #if (VER_PRODUCTBUILD >= 2195)
3580
3581 NTSYSAPI
3582 NTSTATUS
3583 NTAPI
3584 RtlSelfRelativeToAbsoluteSD (
3585 IN PSECURITY_DESCRIPTOR_RELATIVE SelfRelativeSD,
3586 OUT PSECURITY_DESCRIPTOR AbsoluteSD,
3587 IN PULONG AbsoluteSDSize,
3588 IN PACL Dacl,
3589 IN PULONG DaclSize,
3590 IN PACL Sacl,
3591 IN PULONG SaclSize,
3592 IN PSID Owner,
3593 IN PULONG OwnerSize,
3594 IN PSID PrimaryGroup,
3595 IN PULONG PrimaryGroupSize
3596 );
3597
3598 #endif /* (VER_PRODUCTBUILD >= 2195) */
3599
3600 NTSYSAPI
3601 NTSTATUS
3602 NTAPI
3603 RtlSetGroupSecurityDescriptor (
3604 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
3605 IN PSID Group,
3606 IN BOOLEAN GroupDefaulted
3607 );
3608
3609 NTSYSAPI
3610 NTSTATUS
3611 NTAPI
3612 RtlSetOwnerSecurityDescriptor (
3613 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
3614 IN PSID Owner,
3615 IN BOOLEAN OwnerDefaulted
3616 );
3617
3618 NTSYSAPI
3619 NTSTATUS
3620 NTAPI
3621 RtlSetSaclSecurityDescriptor (
3622 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
3623 IN BOOLEAN SaclPresent,
3624 IN PACL Sacl,
3625 IN BOOLEAN SaclDefaulted
3626 );
3627
3628 NTSYSAPI
3629 PUCHAR
3630 NTAPI
3631 RtlSubAuthorityCountSid (
3632 IN PSID Sid
3633 );
3634
3635 NTSYSAPI
3636 PULONG
3637 NTAPI
3638 RtlSubAuthoritySid (
3639 IN PSID Sid,
3640 IN ULONG SubAuthority
3641 );
3642
3643 NTSYSAPI
3644 BOOLEAN
3645 NTAPI
3646 RtlValidSid (
3647 IN PSID Sid
3648 );
3649
3650 NTKERNELAPI
3651 NTSTATUS
3652 NTAPI
3653 SeAppendPrivileges (
3654 PACCESS_STATE AccessState,
3655 PPRIVILEGE_SET Privileges
3656 );
3657
3658 NTKERNELAPI
3659 BOOLEAN
3660 NTAPI
3661 SeAuditingFileEvents (
3662 IN BOOLEAN AccessGranted,
3663 IN PSECURITY_DESCRIPTOR SecurityDescriptor
3664 );
3665
3666 NTKERNELAPI
3667 BOOLEAN
3668 NTAPI
3669 SeAuditingFileOrGlobalEvents (
3670 IN BOOLEAN AccessGranted,
3671 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
3672 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
3673 );
3674
3675 NTKERNELAPI
3676 VOID
3677 NTAPI
3678 SeCaptureSubjectContext (
3679 OUT PSECURITY_SUBJECT_CONTEXT SubjectContext
3680 );
3681
3682 NTKERNELAPI
3683 NTSTATUS
3684 NTAPI
3685 SeCreateAccessState (
3686 OUT PACCESS_STATE AccessState,
3687 IN PVOID AuxData,
3688 IN ACCESS_MASK AccessMask,
3689 IN PGENERIC_MAPPING Mapping
3690 );
3691
3692 NTKERNELAPI
3693 NTSTATUS
3694 NTAPI
3695 SeCreateClientSecurity (
3696 IN PETHREAD Thread,
3697 IN PSECURITY_QUALITY_OF_SERVICE QualityOfService,
3698 IN BOOLEAN RemoteClient,
3699 OUT PSECURITY_CLIENT_CONTEXT ClientContext
3700 );
3701
3702 #if (VER_PRODUCTBUILD >= 2195)
3703
3704 NTKERNELAPI
3705 NTSTATUS
3706 NTAPI
3707 SeCreateClientSecurityFromSubjectContext (
3708 IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
3709 IN PSECURITY_QUALITY_OF_SERVICE QualityOfService,
3710 IN BOOLEAN ServerIsRemote,
3711 OUT PSECURITY_CLIENT_CONTEXT ClientContext
3712 );
3713
3714 #endif /* (VER_PRODUCTBUILD >= 2195) */
3715
3716 #define SeDeleteClientSecurity(C) { \
3717 if (SeTokenType((C)->ClientToken) == TokenPrimary) { \
3718 PsDereferencePrimaryToken( (C)->ClientToken ); \
3719 } else { \
3720 PsDereferenceImpersonationToken( (C)->ClientToken ); \
3721 } \
3722 }
3723
3724 NTKERNELAPI
3725 VOID
3726 NTAPI
3727 SeDeleteObjectAuditAlarm (
3728 IN PVOID Object,
3729 IN HANDLE Handle
3730 );
3731
3732 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
3733
3734 NTKERNELAPI
3735 VOID
3736 NTAPI
3737 SeFreePrivileges (
3738 IN PPRIVILEGE_SET Privileges
3739 );
3740
3741 NTKERNELAPI
3742 VOID
3743 NTAPI
3744 SeImpersonateClient (
3745 IN PSECURITY_CLIENT_CONTEXT ClientContext,
3746 IN PETHREAD ServerThread OPTIONAL
3747 );
3748
3749 #if (VER_PRODUCTBUILD >= 2195)
3750
3751 NTKERNELAPI
3752 NTSTATUS
3753 NTAPI
3754 SeImpersonateClientEx (
3755 IN PSECURITY_CLIENT_CONTEXT ClientContext,
3756 IN PETHREAD ServerThread OPTIONAL
3757 );
3758
3759 #endif /* (VER_PRODUCTBUILD >= 2195) */
3760
3761 NTKERNELAPI
3762 VOID
3763 NTAPI
3764 SeLockSubjectContext (
3765 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
3766 );
3767
3768 NTKERNELAPI
3769 NTSTATUS
3770 NTAPI
3771 SeMarkLogonSessionForTerminationNotification (
3772 IN PLUID LogonId
3773 );
3774
3775 NTKERNELAPI
3776 VOID
3777 NTAPI
3778 SeOpenObjectAuditAlarm (
3779 IN PUNICODE_STRING ObjectTypeName,
3780 IN PVOID Object OPTIONAL,
3781 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
3782 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
3783 IN PACCESS_STATE AccessState,
3784 IN BOOLEAN ObjectCreated,
3785 IN BOOLEAN AccessGranted,
3786 IN KPROCESSOR_MODE AccessMode,
3787 OUT PBOOLEAN GenerateOnClose
3788 );
3789
3790 NTKERNELAPI
3791 VOID
3792 NTAPI
3793 SeOpenObjectForDeleteAuditAlarm (
3794 IN PUNICODE_STRING ObjectTypeName,
3795 IN PVOID Object OPTIONAL,
3796 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
3797 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
3798 IN PACCESS_STATE AccessState,
3799 IN BOOLEAN ObjectCreated,
3800 IN BOOLEAN AccessGranted,
3801 IN KPROCESSOR_MODE AccessMode,
3802 OUT PBOOLEAN GenerateOnClose
3803 );
3804
3805 NTKERNELAPI
3806 BOOLEAN
3807 NTAPI
3808 SePrivilegeCheck (
3809 IN OUT PPRIVILEGE_SET RequiredPrivileges,
3810 IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
3811 IN KPROCESSOR_MODE AccessMode
3812 );
3813
3814 NTKERNELAPI
3815 NTSTATUS
3816 NTAPI
3817 SeQueryAuthenticationIdToken (
3818 IN PACCESS_TOKEN Token,
3819 OUT PLUID LogonId
3820 );
3821
3822 #if (VER_PRODUCTBUILD >= 2195)
3823
3824 NTKERNELAPI
3825 NTSTATUS
3826 NTAPI
3827 SeQueryInformationToken (
3828 IN PACCESS_TOKEN Token,
3829 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
3830 OUT PVOID *TokenInformation
3831 );
3832
3833 #endif /* (VER_PRODUCTBUILD >= 2195) */
3834
3835 NTKERNELAPI
3836 NTSTATUS
3837 NTAPI
3838 SeQuerySecurityDescriptorInfo (
3839 IN PSECURITY_INFORMATION SecurityInformation,
3840 OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
3841 IN OUT PULONG Length,
3842 IN PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor
3843 );
3844
3845 #if (VER_PRODUCTBUILD >= 2195)
3846
3847 NTKERNELAPI
3848 NTSTATUS
3849 NTAPI
3850 SeQuerySessionIdToken (
3851 IN PACCESS_TOKEN Token,
3852 IN PULONG SessionId
3853 );
3854
3855 #endif /* (VER_PRODUCTBUILD >= 2195) */
3856
3857 #define SeQuerySubjectContextToken( SubjectContext ) \
3858 ( ARGUMENT_PRESENT( \
3859 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken \
3860 ) ? \
3861 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken : \
3862 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
3863
3864 typedef NTSTATUS (*PSE_LOGON_SESSION_TERMINATED_ROUTINE) (
3865 IN PLUID LogonId
3866 );
3867
3868 NTKERNELAPI
3869 NTSTATUS
3870 NTAPI
3871 SeRegisterLogonSessionTerminatedRoutine (
3872 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
3873 );
3874
3875 NTKERNELAPI
3876 VOID
3877 NTAPI
3878 SeReleaseSubjectContext (
3879 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
3880 );
3881
3882 NTKERNELAPI
3883 VOID
3884 NTAPI
3885 SeSetAccessStateGenericMapping (
3886 PACCESS_STATE AccessState,
3887 PGENERIC_MAPPING GenericMapping
3888 );
3889
3890 NTKERNELAPI
3891 NTSTATUS
3892 NTAPI
3893 SeSetSecurityDescriptorInfo (
3894 IN PVOID Object OPTIONAL,
3895 IN PSECURITY_INFORMATION SecurityInformation,
3896 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
3897 IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
3898 IN POOL_TYPE PoolType,
3899 IN PGENERIC_MAPPING GenericMapping
3900 );
3901
3902 #if (VER_PRODUCTBUILD >= 2195)
3903
3904 NTKERNELAPI
3905 NTSTATUS
3906 NTAPI
3907 SeSetSecurityDescriptorInfoEx (
3908 IN PVOID Object OPTIONAL,
3909 IN PSECURITY_INFORMATION SecurityInformation,
3910 IN PSECURITY_DESCRIPTOR ModificationDescriptor,
3911 IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
3912 IN ULONG AutoInheritFlags,
3913 IN POOL_TYPE PoolType,
3914 IN PGENERIC_MAPPING GenericMapping
3915 );
3916
3917 NTKERNELAPI
3918 BOOLEAN
3919 NTAPI
3920 SeTokenIsAdmin (
3921 IN PACCESS_TOKEN Token
3922 );
3923
3924 NTKERNELAPI
3925 BOOLEAN
3926 NTAPI
3927 SeTokenIsRestricted (
3928 IN PACCESS_TOKEN Token
3929 );
3930
3931 #endif /* (VER_PRODUCTBUILD >= 2195) */
3932
3933 NTKERNELAPI
3934 TOKEN_TYPE
3935 NTAPI
3936 SeTokenType (
3937 IN PACCESS_TOKEN Token
3938 );
3939
3940 NTKERNELAPI
3941 VOID
3942 NTAPI
3943 SeUnlockSubjectContext (
3944 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
3945 );
3946
3947 NTKERNELAPI
3948 NTSTATUS
3949 SeUnregisterLogonSessionTerminatedRoutine (
3950 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
3951 );
3952
3953 #if (VER_PRODUCTBUILD >= 2195)
3954
3955 NTSYSAPI
3956 NTSTATUS
3957 NTAPI
3958 ZwAdjustPrivilegesToken (
3959 IN HANDLE TokenHandle,
3960 IN BOOLEAN DisableAllPrivileges,
3961 IN PTOKEN_PRIVILEGES NewState,
3962 IN ULONG BufferLength,
3963 OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL,
3964 OUT PULONG ReturnLength
3965 );
3966
3967 #endif /* (VER_PRODUCTBUILD >= 2195) */
3968
3969 NTSYSAPI
3970 NTSTATUS
3971 NTAPI
3972 ZwAlertThread (
3973 IN HANDLE ThreadHandle
3974 );
3975
3976 NTSYSAPI
3977 NTSTATUS
3978 NTAPI
3979 ZwAllocateVirtualMemory (
3980 IN HANDLE ProcessHandle,
3981 IN OUT PVOID *BaseAddress,
3982 IN ULONG ZeroBits,
3983 IN OUT PULONG RegionSize,
3984 IN ULONG AllocationType,
3985 IN ULONG Protect
3986 );
3987
3988 NTSYSAPI
3989 NTSTATUS
3990 NTAPI
3991 ZwAccessCheckAndAuditAlarm (
3992 IN PUNICODE_STRING SubsystemName,
3993 IN PVOID HandleId,
3994 IN PUNICODE_STRING ObjectTypeName,
3995 IN PUNICODE_STRING ObjectName,
3996 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
3997 IN ACCESS_MASK DesiredAccess,
3998 IN PGENERIC_MAPPING GenericMapping,
3999 IN BOOLEAN ObjectCreation,
4000 OUT PACCESS_MASK GrantedAccess,
4001 OUT PBOOLEAN AccessStatus,
4002 OUT PBOOLEAN GenerateOnClose
4003 );
4004
4005 #if (VER_PRODUCTBUILD >= 2195)
4006
4007 NTSYSAPI
4008 NTSTATUS
4009 NTAPI
4010 ZwCancelIoFile (
4011 IN HANDLE FileHandle,
4012 OUT PIO_STATUS_BLOCK IoStatusBlock
4013 );
4014
4015 #endif /* (VER_PRODUCTBUILD >= 2195) */
4016
4017 NTSYSAPI
4018 NTSTATUS
4019 NTAPI
4020 ZwClearEvent (
4021 IN HANDLE EventHandle
4022 );
4023
4024 NTSYSAPI
4025 NTSTATUS
4026 NTAPI
4027 ZwCloseObjectAuditAlarm (
4028 IN PUNICODE_STRING SubsystemName,
4029 IN PVOID HandleId,
4030 IN BOOLEAN GenerateOnClose
4031 );
4032
4033 NTSYSAPI
4034 NTSTATUS
4035 NTAPI
4036 ZwCreateSection (
4037 OUT PHANDLE SectionHandle,
4038 IN ACCESS_MASK DesiredAccess,
4039 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
4040 IN PLARGE_INTEGER MaximumSize OPTIONAL,
4041 IN ULONG SectionPageProtection,
4042 IN ULONG AllocationAttributes,
4043 IN HANDLE FileHandle OPTIONAL
4044 );
4045
4046 NTSYSAPI
4047 NTSTATUS
4048 NTAPI
4049 ZwCreateSymbolicLinkObject (
4050 OUT PHANDLE SymbolicLinkHandle,
4051 IN ACCESS_MASK DesiredAccess,
4052 IN POBJECT_ATTRIBUTES ObjectAttributes,
4053 IN PUNICODE_STRING TargetName
4054 );
4055
4056 NTSYSAPI
4057 NTSTATUS
4058 NTAPI
4059 ZwDeleteFile (
4060 IN POBJECT_ATTRIBUTES ObjectAttributes
4061 );
4062
4063 NTSYSAPI
4064 NTSTATUS
4065 NTAPI
4066 ZwDeleteValueKey (
4067 IN HANDLE Handle,
4068 IN PUNICODE_STRING Name
4069 );
4070
4071 NTSYSAPI
4072 NTSTATUS
4073 NTAPI
4074 ZwDeviceIoControlFile (
4075 IN HANDLE FileHandle,
4076 IN HANDLE Event OPTIONAL,
4077 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
4078 IN PVOID ApcContext OPTIONAL,
4079 OUT PIO_STATUS_BLOCK IoStatusBlock,
4080 IN ULONG IoControlCode,
4081 IN PVOID InputBuffer OPTIONAL,
4082 IN ULONG InputBufferLength,
4083 OUT PVOID OutputBuffer OPTIONAL,
4084 IN ULONG OutputBufferLength
4085 );
4086
4087 NTSYSAPI
4088 NTSTATUS
4089 NTAPI
4090 ZwDisplayString (
4091 IN PUNICODE_STRING String
4092 );
4093
4094 NTSYSAPI
4095 NTSTATUS
4096 NTAPI
4097 ZwDuplicateObject (
4098 IN HANDLE SourceProcessHandle,
4099 IN HANDLE SourceHandle,
4100 IN HANDLE TargetProcessHandle OPTIONAL,
4101 OUT PHANDLE TargetHandle OPTIONAL,
4102 IN ACCESS_MASK DesiredAccess,
4103 IN ULONG HandleAttributes,
4104 IN ULONG Options
4105 );
4106
4107 NTSYSAPI
4108 NTSTATUS
4109 NTAPI
4110 ZwDuplicateToken (
4111 IN HANDLE ExistingTokenHandle,
4112 IN ACCESS_MASK DesiredAccess,
4113 IN POBJECT_ATTRIBUTES ObjectAttributes,
4114 IN BOOLEAN EffectiveOnly,
4115 IN TOKEN_TYPE TokenType,
4116 OUT PHANDLE NewTokenHandle
4117 );
4118
4119 NTSYSAPI
4120 NTSTATUS
4121 NTAPI
4122 ZwFlushInstructionCache (
4123 IN HANDLE ProcessHandle,
4124 IN PVOID BaseAddress OPTIONAL,
4125 IN ULONG FlushSize
4126 );
4127
4128 #if (VER_PRODUCTBUILD >= 2195)
4129
4130 NTSYSAPI
4131 NTSTATUS
4132 NTAPI
4133 ZwFlushVirtualMemory (
4134 IN HANDLE ProcessHandle,
4135 IN OUT PVOID *BaseAddress,
4136 IN OUT PULONG FlushSize,
4137 OUT PIO_STATUS_BLOCK IoStatusBlock
4138 );
4139
4140 #endif /* (VER_PRODUCTBUILD >= 2195) */
4141
4142 NTSYSAPI
4143 NTSTATUS
4144 NTAPI
4145 ZwFreeVirtualMemory (
4146 IN HANDLE ProcessHandle,
4147 IN OUT PVOID *BaseAddress,
4148 IN OUT PULONG RegionSize,
4149 IN ULONG FreeType
4150 );
4151
4152 NTSYSAPI
4153 NTSTATUS
4154 NTAPI
4155 ZwFsControlFile (
4156 IN HANDLE FileHandle,
4157 IN HANDLE Event OPTIONAL,
4158 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
4159 IN PVOID ApcContext OPTIONAL,
4160 OUT PIO_STATUS_BLOCK IoStatusBlock,
4161 IN ULONG FsControlCode,
4162 IN PVOID InputBuffer OPTIONAL,
4163 IN ULONG InputBufferLength,
4164 OUT PVOID OutputBuffer OPTIONAL,
4165 IN ULONG OutputBufferLength
4166 );
4167
4168 #if (VER_PRODUCTBUILD >= 2195)
4169
4170 NTSYSAPI
4171 NTSTATUS
4172 NTAPI
4173 ZwInitiatePowerAction (
4174 IN POWER_ACTION SystemAction,
4175 IN SYSTEM_POWER_STATE MinSystemState,
4176 IN ULONG Flags,
4177 IN BOOLEAN Asynchronous
4178 );
4179
4180 #endif /* (VER_PRODUCTBUILD >= 2195) */
4181
4182 NTSYSAPI
4183 NTSTATUS
4184 NTAPI
4185 ZwLoadDriver (
4186 /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
4187 IN PUNICODE_STRING RegistryPath
4188 );
4189
4190 NTSYSAPI
4191 NTSTATUS
4192 NTAPI
4193 ZwLoadKey (
4194 IN POBJECT_ATTRIBUTES KeyObjectAttributes,
4195 IN POBJECT_ATTRIBUTES FileObjectAttributes
4196 );
4197
4198 NTSYSAPI
4199 NTSTATUS
4200 NTAPI
4201 ZwNotifyChangeKey (
4202 IN HANDLE KeyHandle,
4203 IN HANDLE EventHandle OPTIONAL,
4204 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
4205 IN PVOID ApcContext OPTIONAL,
4206 OUT PIO_STATUS_BLOCK IoStatusBlock,
4207 IN ULONG NotifyFilter,
4208 IN BOOLEAN WatchSubtree,
4209 IN PVOID Buffer,
4210 IN ULONG BufferLength,
4211 IN BOOLEAN Asynchronous
4212 );
4213
4214 NTSYSAPI
4215 NTSTATUS
4216 NTAPI
4217 ZwOpenDirectoryObject (
4218 OUT PHANDLE DirectoryHandle,
4219 IN ACCESS_MASK DesiredAccess,
4220 IN POBJECT_ATTRIBUTES ObjectAttributes
4221 );
4222
4223 NTSYSAPI
4224 NTSTATUS
4225 NTAPI
4226 ZwOpenEvent (
4227 OUT PHANDLE EventHandle,
4228 IN ACCESS_MASK DesiredAccess,
4229 IN POBJECT_ATTRIBUTES ObjectAttributes
4230 );
4231
4232 NTSYSAPI
4233 NTSTATUS
4234 NTAPI
4235 ZwOpenProcess (
4236 OUT PHANDLE ProcessHandle,
4237 IN ACCESS_MASK DesiredAccess,
4238 IN POBJECT_ATTRIBUTES ObjectAttributes,
4239 IN PCLIENT_ID ClientId OPTIONAL
4240 );
4241
4242 NTSYSAPI
4243 NTSTATUS
4244 NTAPI
4245 ZwOpenProcessToken (
4246 IN HANDLE ProcessHandle,
4247 IN ACCESS_MASK DesiredAccess,
4248 OUT PHANDLE TokenHandle
4249 );
4250
4251 NTSYSAPI
4252 NTSTATUS
4253 NTAPI
4254 ZwOpenThread (
4255 OUT PHANDLE ThreadHandle,
4256 IN ACCESS_MASK DesiredAccess,
4257 IN POBJECT_ATTRIBUTES ObjectAttributes,
4258 IN PCLIENT_ID ClientId
4259 );
4260
4261 NTSYSAPI
4262 NTSTATUS
4263 NTAPI
4264 ZwOpenThreadToken (
4265 IN HANDLE ThreadHandle,
4266 IN ACCESS_MASK DesiredAccess,
4267 IN BOOLEAN OpenAsSelf,
4268 OUT PHANDLE TokenHandle
4269 );
4270
4271 #if (VER_PRODUCTBUILD >= 2195)
4272
4273 NTSYSAPI
4274 NTSTATUS
4275 NTAPI
4276 ZwPowerInformation (
4277 IN POWER_INFORMATION_LEVEL PowerInformationLevel,
4278 IN PVOID InputBuffer OPTIONAL,
4279 IN ULONG InputBufferLength,
4280 OUT PVOID OutputBuffer OPTIONAL,
4281 IN ULONG OutputBufferLength
4282 );
4283
4284 #endif /* (VER_PRODUCTBUILD >= 2195) */
4285
4286 NTSYSAPI
4287 NTSTATUS
4288 NTAPI
4289 ZwPulseEvent (
4290 IN HANDLE EventHandle,
4291 OUT PLONG PreviousState OPTIONAL
4292 );
4293
4294 NTSYSAPI
4295 NTSTATUS
4296 NTAPI
4297 ZwQueryDefaultLocale (
4298 IN BOOLEAN ThreadOrSystem,
4299 OUT PLCID Locale
4300 );
4301
4302 NTSYSAPI
4303 NTSTATUS
4304 NTAPI
4305 ZwQueryDirectoryFile (
4306 IN HANDLE FileHandle,
4307 IN HANDLE Event OPTIONAL,
4308 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
4309 IN PVOID ApcContext OPTIONAL,
4310 OUT PIO_STATUS_BLOCK IoStatusBlock,
4311 OUT PVOID FileInformation,
4312 IN ULONG Length,
4313 IN FILE_INFORMATION_CLASS FileInformationClass,
4314 IN BOOLEAN ReturnSingleEntry,
4315 IN PUNICODE_STRING FileName OPTIONAL,
4316 IN BOOLEAN RestartScan
4317 );
4318
4319 #if (VER_PRODUCTBUILD >= 2195)
4320
4321 NTSYSAPI
4322 NTSTATUS
4323 NTAPI
4324 ZwQueryDirectoryObject (
4325 IN HANDLE DirectoryHandle,
4326 OUT PVOID Buffer,
4327 IN ULONG Length,
4328 IN BOOLEAN ReturnSingleEntry,
4329 IN BOOLEAN RestartScan,
4330 IN OUT PULONG Context,
4331 OUT PULONG ReturnLength OPTIONAL
4332 );
4333
4334 NTSYSAPI
4335 NTSTATUS
4336 NTAPI
4337 ZwQueryEaFile (
4338 IN HANDLE FileHandle,
4339 OUT PIO_STATUS_BLOCK IoStatusBlock,
4340 OUT PVOID Buffer,
4341 IN ULONG Length,
4342 IN BOOLEAN ReturnSingleEntry,
4343 IN PVOID EaList OPTIONAL,
4344 IN ULONG EaListLength,
4345 IN PULONG EaIndex OPTIONAL,
4346 IN BOOLEAN RestartScan
4347 );
4348
4349 #endif /* (VER_PRODUCTBUILD >= 2195) */
4350
4351 NTSYSAPI
4352 NTSTATUS
4353 NTAPI
4354 ZwQueryInformationProcess (
4355 IN HANDLE ProcessHandle,
4356 IN PROCESSINFOCLASS ProcessInformationClass,
4357 OUT PVOID ProcessInformation,
4358 IN ULONG ProcessInformationLength,
4359 OUT PULONG ReturnLength OPTIONAL
4360 );
4361
4362 NTSYSAPI
4363 NTSTATUS
4364 NTAPI
4365 ZwQueryInformationToken (
4366 IN HANDLE TokenHandle,
4367 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
4368 OUT PVOID TokenInformation,
4369 IN ULONG Length,
4370 OUT PULONG ResultLength
4371 );
4372
4373 NTSYSAPI
4374 NTSTATUS
4375 NTAPI
4376 ZwQueryObject (
4377 IN HANDLE ObjectHandle,
4378 IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
4379 OUT PVOID ObjectInformation,
4380 IN ULONG Length,
4381 OUT PULONG ResultLength
4382 );
4383
4384 NTSYSAPI
4385 NTSTATUS
4386 NTAPI
4387 ZwQuerySection (
4388 IN HANDLE SectionHandle,
4389 IN SECTION_INFORMATION_CLASS SectionInformationClass,
4390 OUT PVOID SectionInformation,
4391 IN ULONG SectionInformationLength,
4392 OUT PULONG ResultLength OPTIONAL
4393 );
4394
4395 NTSYSAPI
4396 NTSTATUS
4397 NTAPI
4398 ZwQuerySecurityObject (
4399 IN HANDLE FileHandle,
4400 IN SECURITY_INFORMATION SecurityInformation,
4401 OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
4402 IN ULONG Length,
4403 OUT PULONG ResultLength
4404 );
4405
4406 NTSYSAPI
4407 NTSTATUS
4408 NTAPI
4409 ZwQuerySystemInformation (
4410 IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
4411 OUT PVOID SystemInformation,
4412 IN ULONG Length,
4413 OUT PULONG ReturnLength
4414 );
4415
4416 NTSYSAPI
4417 NTSTATUS
4418 NTAPI
4419 ZwQueryVolumeInformationFile (
4420 IN HANDLE FileHandle,
4421 OUT PIO_STATUS_BLOCK IoStatusBlock,
4422 OUT PVOID FsInformation,
4423 IN ULONG Length,
4424 IN FS_INFORMATION_CLASS FsInformationClass
4425 );
4426
4427 NTSYSAPI
4428 NTSTATUS
4429 NTAPI
4430 ZwReplaceKey (
4431 IN POBJECT_ATTRIBUTES NewFileObjectAttributes,
4432 IN HANDLE KeyHandle,
4433 IN POBJECT_ATTRIBUTES OldFileObjectAttributes
4434 );
4435
4436 NTSYSAPI
4437 NTSTATUS
4438 NTAPI
4439 ZwResetEvent (
4440 IN HANDLE EventHandle,
4441 OUT PLONG PreviousState OPTIONAL
4442 );
4443
4444 #if (VER_PRODUCTBUILD >= 2195)
4445
4446 NTSYSAPI
4447 NTSTATUS
4448 NTAPI
4449 ZwRestoreKey (
4450 IN HANDLE KeyHandle,
4451 IN HANDLE FileHandle,
4452 IN ULONG Flags
4453 );
4454
4455 #endif /* (VER_PRODUCTBUILD >= 2195) */
4456
4457 NTSYSAPI
4458 NTSTATUS
4459 NTAPI
4460 ZwSaveKey (
4461 IN HANDLE KeyHandle,
4462 IN HANDLE FileHandle
4463 );
4464
4465 NTSYSAPI
4466 NTSTATUS
4467 NTAPI
4468 ZwSetDefaultLocale (
4469 IN BOOLEAN ThreadOrSystem,
4470 IN LCID Locale
4471 );
4472
4473 #if (VER_PRODUCTBUILD >= 2195)
4474
4475 NTSYSAPI
4476 NTSTATUS
4477 NTAPI
4478 ZwSetDefaultUILanguage (
4479 IN LANGID LanguageId
4480 );
4481
4482 NTSYSAPI
4483 NTSTATUS
4484 NTAPI
4485 ZwSetEaFile (
4486 IN HANDLE FileHandle,
4487 OUT PIO_STATUS_BLOCK IoStatusBlock,
4488 OUT PVOID Buffer,
4489 IN ULONG Length
4490 );
4491
4492 #endif /* (VER_PRODUCTBUILD >= 2195) */
4493
4494 NTSYSAPI
4495 NTSTATUS
4496 NTAPI
4497 ZwSetEvent (
4498 IN HANDLE EventHandle,
4499 OUT PLONG PreviousState OPTIONAL
4500 );
4501
4502 NTSYSAPI
4503 NTSTATUS
4504 NTAPI
4505 ZwSetInformationObject (
4506 IN HANDLE ObjectHandle,
4507 IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
4508 IN PVOID ObjectInformation,
4509 IN ULONG ObjectInformationLength
4510 );
4511
4512 NTSYSAPI
4513 NTSTATUS
4514 NTAPI
4515 ZwSetInformationProcess (
4516 IN HANDLE ProcessHandle,
4517 IN PROCESSINFOCLASS ProcessInformationClass,
4518 IN PVOID ProcessInformation,
4519 IN ULONG ProcessInformationLength
4520 );
4521
4522 #if (VER_PRODUCTBUILD >= 2195)
4523
4524 NTSYSAPI
4525 NTSTATUS
4526 NTAPI
4527 ZwSetSecurityObject (
4528 IN HANDLE Handle,
4529 IN SECURITY_INFORMATION SecurityInformation,
4530 IN PSECURITY_DESCRIPTOR SecurityDescriptor
4531 );
4532
4533 #endif /* (VER_PRODUCTBUILD >= 2195) */
4534
4535 NTSYSAPI
4536 NTSTATUS
4537 NTAPI
4538 ZwSetSystemInformation (
4539 IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
4540 IN PVOID SystemInformation,
4541 IN ULONG Length
4542 );
4543
4544 NTSYSAPI
4545 NTSTATUS
4546 NTAPI
4547 ZwSetSystemTime (
4548 IN PLARGE_INTEGER NewTime,
4549 OUT PLARGE_INTEGER OldTime OPTIONAL
4550 );
4551
4552 #if (VER_PRODUCTBUILD >= 2195)
4553
4554 NTSYSAPI
4555 NTSTATUS
4556 NTAPI
4557 ZwSetVolumeInformationFile (
4558 IN HANDLE FileHandle,
4559 OUT PIO_STATUS_BLOCK IoStatusBlock,
4560 IN PVOID FsInformation,
4561 IN ULONG Length,
4562 IN FS_INFORMATION_CLASS FsInformationClass
4563 );
4564
4565 #endif /* (VER_PRODUCTBUILD >= 2195) */
4566
4567 NTSYSAPI
4568 NTSTATUS
4569 NTAPI
4570 ZwTerminateProcess (
4571 IN HANDLE ProcessHandle OPTIONAL,
4572 IN NTSTATUS ExitStatus
4573 );
4574
4575 NTSYSAPI
4576 NTSTATUS
4577 NTAPI
4578 ZwUnloadDriver (
4579 /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
4580 IN PUNICODE_STRING RegistryPath
4581 );
4582
4583 NTSYSAPI
4584 NTSTATUS
4585 NTAPI
4586 ZwUnloadKey (
4587 IN POBJECT_ATTRIBUTES KeyObjectAttributes
4588 );
4589
4590 NTSYSAPI
4591 NTSTATUS
4592 NTAPI
4593 ZwWaitForSingleObject (
4594 IN HANDLE Handle,
4595 IN BOOLEAN Alertable,
4596 IN PLARGE_INTEGER Timeout OPTIONAL
4597 );
4598
4599 NTSYSAPI
4600 NTSTATUS
4601 NTAPI
4602 ZwWaitForMultipleObjects (
4603 IN ULONG HandleCount,
4604 IN PHANDLE Handles,
4605 IN WAIT_TYPE WaitType,
4606 IN BOOLEAN Alertable,
4607 IN PLARGE_INTEGER Timeout OPTIONAL
4608 );
4609
4610 NTSYSAPI
4611 NTSTATUS
4612 NTAPI
4613 ZwYieldExecution (
4614 VOID
4615 );
4616
4617 #pragma pack(pop)
4618
4619 #ifdef __cplusplus
4620 }
4621 #endif
4622
4623 #endif /* _NTIFS_ */