4 * Windows NT Filesystem Driver Developer Kit
6 * This file is part of the w32api package.
9 * Created by Bo Brantén <bosse@acc.umu.se>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
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.
28 #pragma GCC system_header
40 #define VER_PRODUCTBUILD 10000
47 #define NTKERNELAPI DECLSPEC_IMPORT
50 typedef struct _SE_EXPORTS
*PSE_EXPORTS
;
53 extern PUCHAR FsRtlLegalAnsiCharacterArray
;
55 extern DECLSPEC_IMPORT PUCHAR FsRtlLegalAnsiCharacterArray
;
57 extern PSE_EXPORTS SeExports
;
58 extern PACL SePublicDefaultDacl
;
59 extern PACL SeSystemDefaultDacl
;
61 extern KSPIN_LOCK IoStatisticsLock
;
62 extern ULONG IoReadOperationCount
;
63 extern ULONG IoWriteOperationCount
;
64 extern ULONG IoOtherOperationCount
;
65 extern LARGE_INTEGER IoReadTransferCount
;
66 extern LARGE_INTEGER IoWriteTransferCount
;
67 extern LARGE_INTEGER IoOtherTransferCount
;
69 #define ANSI_DOS_STAR ('<')
70 #define ANSI_DOS_QM ('>')
71 #define ANSI_DOS_DOT ('"')
73 #define DOS_STAR (L'<')
75 #define DOS_DOT (L'"')
78 #define ACCESS_MIN_MS_ACE_TYPE (0x0)
79 #define ACCESS_ALLOWED_ACE_TYPE (0x0)
80 #define ACCESS_DENIED_ACE_TYPE (0x1)
81 #define SYSTEM_AUDIT_ACE_TYPE (0x2)
82 #define SYSTEM_ALARM_ACE_TYPE (0x3)
83 #define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
84 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
85 #define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
86 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
87 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
88 #define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
89 #define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
90 #define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
91 #define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
92 #define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
93 #define ACCESS_MAX_MS_ACE_TYPE (0x8)
94 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
95 #define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
96 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
97 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
98 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
99 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
100 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
101 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
102 #define ACCESS_MAX_MS_V5_ACE_TYPE (0x10)
104 #define COMPRESSION_FORMAT_NONE (0x0000)
105 #define COMPRESSION_FORMAT_DEFAULT (0x0001)
106 #define COMPRESSION_FORMAT_LZNT1 (0x0002)
107 #define COMPRESSION_ENGINE_STANDARD (0x0000)
108 #define COMPRESSION_ENGINE_MAXIMUM (0x0100)
109 #define COMPRESSION_ENGINE_HIBER (0x0200)
111 #define FILE_ACTION_ADDED 0x00000001
112 #define FILE_ACTION_REMOVED 0x00000002
113 #define FILE_ACTION_MODIFIED 0x00000003
114 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
115 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
116 #define FILE_ACTION_ADDED_STREAM 0x00000006
117 #define FILE_ACTION_REMOVED_STREAM 0x00000007
118 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
119 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
120 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
121 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
124 #define FILE_EA_TYPE_BINARY 0xfffe
125 #define FILE_EA_TYPE_ASCII 0xfffd
126 #define FILE_EA_TYPE_BITMAP 0xfffb
127 #define FILE_EA_TYPE_METAFILE 0xfffa
128 #define FILE_EA_TYPE_ICON 0xfff9
129 #define FILE_EA_TYPE_EA 0xffee
130 #define FILE_EA_TYPE_MVMT 0xffdf
131 #define FILE_EA_TYPE_MVST 0xffde
132 #define FILE_EA_TYPE_ASN1 0xffdd
133 #define FILE_EA_TYPE_FAMILY_IDS 0xff01
135 #define FILE_NEED_EA 0x00000080
137 /* also in winnt.h */
138 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
139 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
140 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
141 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
142 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
143 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
144 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
145 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
146 #define FILE_NOTIFY_CHANGE_EA 0x00000080
147 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
148 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
149 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
150 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
151 #define FILE_NOTIFY_VALID_MASK 0x00000fff
154 #define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007
155 #define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008
157 #define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009
159 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
160 #define FILE_CASE_PRESERVED_NAMES 0x00000002
161 #define FILE_UNICODE_ON_DISK 0x00000004
162 #define FILE_PERSISTENT_ACLS 0x00000008
163 #define FILE_FILE_COMPRESSION 0x00000010
164 #define FILE_VOLUME_QUOTAS 0x00000020
165 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
166 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
167 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
168 #define FS_LFN_APIS 0x00004000
169 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
170 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
171 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
172 #define FILE_NAMED_STREAMS 0x00040000
174 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
175 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
177 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
178 #define FILE_PIPE_MESSAGE_MODE 0x00000001
180 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
181 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
183 #define FILE_PIPE_INBOUND 0x00000000
184 #define FILE_PIPE_OUTBOUND 0x00000001
185 #define FILE_PIPE_FULL_DUPLEX 0x00000002
187 #define FILE_PIPE_DISCONNECTED_STATE 0x00000001
188 #define FILE_PIPE_LISTENING_STATE 0x00000002
189 #define FILE_PIPE_CONNECTED_STATE 0x00000003
190 #define FILE_PIPE_CLOSING_STATE 0x00000004
192 #define FILE_PIPE_CLIENT_END 0x00000000
193 #define FILE_PIPE_SERVER_END 0x00000001
195 #define FILE_PIPE_READ_DATA 0x00000000
196 #define FILE_PIPE_WRITE_SPACE 0x00000001
198 #define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
199 #define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
200 #define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
201 #define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
202 #define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
203 #define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
204 #define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
205 #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
206 #define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
207 #define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
208 #define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
209 #define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
210 #define FILE_STORAGE_TYPE_MASK 0x000f0000
211 #define FILE_STORAGE_TYPE_SHIFT 16
213 #define FILE_VC_QUOTA_NONE 0x00000000
214 #define FILE_VC_QUOTA_TRACK 0x00000001
215 #define FILE_VC_QUOTA_ENFORCE 0x00000002
216 #define FILE_VC_QUOTA_MASK 0x00000003
218 #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
219 #define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008
221 #define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010
222 #define FILE_VC_LOG_QUOTA_LIMIT 0x00000020
223 #define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040
224 #define FILE_VC_LOG_VOLUME_LIMIT 0x00000080
226 #define FILE_VC_QUOTAS_INCOMPLETE 0x00000100
227 #define FILE_VC_QUOTAS_REBUILDING 0x00000200
229 #define FILE_VC_VALID_MASK 0x000003ff
231 #define FSRTL_FLAG_FILE_MODIFIED (0x01)
232 #define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
233 #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
234 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
235 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
236 #define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
237 #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
239 #define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
241 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
242 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
243 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
244 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
245 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG (0x04)
247 #define FSRTL_VOLUME_DISMOUNT 1
248 #define FSRTL_VOLUME_DISMOUNT_FAILED 2
249 #define FSRTL_VOLUME_LOCK 3
250 #define FSRTL_VOLUME_LOCK_FAILED 4
251 #define FSRTL_VOLUME_UNLOCK 5
252 #define FSRTL_VOLUME_MOUNT 6
254 #define FSRTL_WILD_CHARACTER 0x08
256 #define FSRTL_FAT_LEGAL 0x01
257 #define FSRTL_HPFS_LEGAL 0x02
258 #define FSRTL_NTFS_LEGAL 0x04
259 #define FSRTL_WILD_CHARACTER 0x08
260 #define FSRTL_OLE_LEGAL 0x10
261 #define FSRTL_NTFS_STREAM_LEGAL 0x14
264 #define HARDWARE_PTE HARDWARE_PTE_X86
265 #define PHARDWARE_PTE PHARDWARE_PTE_X86
267 #define HARDWARE_PTE ULONG
268 #define PHARDWARE_PTE PULONG
271 #define IO_CHECK_CREATE_PARAMETERS 0x0200
272 #define IO_ATTACH_DEVICE 0x0400
274 #define IO_ATTACH_DEVICE_API 0x80000000
275 /* also in winnt.h */
276 #define IO_COMPLETION_QUERY_STATE 0x0001
277 #define IO_COMPLETION_MODIFY_STATE 0x0002
278 #define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
280 #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64
281 #define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024
283 #define IO_TYPE_APC 18
284 #define IO_TYPE_DPC 19
285 #define IO_TYPE_DEVICE_QUEUE 20
286 #define IO_TYPE_EVENT_PAIR 21
287 #define IO_TYPE_INTERRUPT 22
288 #define IO_TYPE_PROFILE 23
290 #define IRP_BEING_VERIFIED 0x10
292 #define MAILSLOT_CLASS_FIRSTCLASS 1
293 #define MAILSLOT_CLASS_SECONDCLASS 2
295 #define MAILSLOT_SIZE_AUTO 0
297 #define MAP_PROCESS 1L
298 #define MAP_SYSTEM 2L
299 #define MEM_DOS_LIM 0x40000000
300 /* also in winnt.h */
301 #define MEM_IMAGE SEC_IMAGE
303 #define OB_TYPE_TYPE 1
304 #define OB_TYPE_DIRECTORY 2
305 #define OB_TYPE_SYMBOLIC_LINK 3
306 #define OB_TYPE_TOKEN 4
307 #define OB_TYPE_PROCESS 5
308 #define OB_TYPE_THREAD 6
309 #define OB_TYPE_EVENT 7
310 #define OB_TYPE_EVENT_PAIR 8
311 #define OB_TYPE_MUTANT 9
312 #define OB_TYPE_SEMAPHORE 10
313 #define OB_TYPE_TIMER 11
314 #define OB_TYPE_PROFILE 12
315 #define OB_TYPE_WINDOW_STATION 13
316 #define OB_TYPE_DESKTOP 14
317 #define OB_TYPE_SECTION 15
318 #define OB_TYPE_KEY 16
319 #define OB_TYPE_PORT 17
320 #define OB_TYPE_ADAPTER 18
321 #define OB_TYPE_CONTROLLER 19
322 #define OB_TYPE_DEVICE 20
323 #define OB_TYPE_DRIVER 21
324 #define OB_TYPE_IO_COMPLETION 22
325 #define OB_TYPE_FILE 23
328 #define PIN_EXCLUSIVE (2)
329 #define PIN_NO_READ (4)
330 #define PIN_IF_BCB (8)
332 /* also in winnt.h */
333 #define SEC_BASED 0x00200000
334 #define SEC_NO_CHANGE 0x00400000
335 #define SEC_FILE 0x00800000
336 #define SEC_IMAGE 0x01000000
337 #define SEC_VLM 0x02000000
338 #define SEC_RESERVE 0x04000000
339 #define SEC_COMMIT 0x08000000
340 #define SEC_NOCACHE 0x10000000
342 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
343 #define SECURITY_WORLD_RID (0x00000000L)
345 #define SID_REVISION 1
346 #define SID_MAX_SUB_AUTHORITIES 15
347 #define SID_RECOMMENDED_SUB_AUTHORITIES 1
349 #define TOKEN_ASSIGN_PRIMARY (0x0001)
350 #define TOKEN_DUPLICATE (0x0002)
351 #define TOKEN_IMPERSONATE (0x0004)
352 #define TOKEN_QUERY (0x0008)
353 #define TOKEN_QUERY_SOURCE (0x0010)
354 #define TOKEN_ADJUST_PRIVILEGES (0x0020)
355 #define TOKEN_ADJUST_GROUPS (0x0040)
356 #define TOKEN_ADJUST_DEFAULT (0x0080)
357 #define TOKEN_ADJUST_SESSIONID (0x0100)
359 #define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
360 TOKEN_ASSIGN_PRIMARY |\
364 TOKEN_QUERY_SOURCE |\
365 TOKEN_ADJUST_PRIVILEGES |\
366 TOKEN_ADJUST_GROUPS |\
367 TOKEN_ADJUST_DEFAULT |\
368 TOKEN_ADJUST_SESSIONID)
370 #define TOKEN_READ (STANDARD_RIGHTS_READ |\
373 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\
374 TOKEN_ADJUST_PRIVILEGES |\
375 TOKEN_ADJUST_GROUPS |\
376 TOKEN_ADJUST_DEFAULT)
378 #define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
380 #define TOKEN_SOURCE_LENGTH 8
383 #define TOKEN_HAS_TRAVERSE_PRIVILEGE 0x01
384 #define TOKEN_HAS_BACKUP_PRIVILEGE 0x02
385 #define TOKEN_HAS_RESTORE_PRIVILEGE 0x04
386 #define TOKEN_HAS_ADMIN_GROUP 0x08
387 #define TOKEN_IS_RESTRICTED 0x10
389 #define VACB_MAPPING_GRANULARITY (0x40000)
390 #define VACB_OFFSET_SHIFT (18)
392 #define SE_OWNER_DEFAULTED 0x0001
393 #define SE_GROUP_DEFAULTED 0x0002
394 #define SE_DACL_PRESENT 0x0004
395 #define SE_DACL_DEFAULTED 0x0008
396 #define SE_SACL_PRESENT 0x0010
397 #define SE_SACL_DEFAULTED 0x0020
398 #define SE_DACL_UNTRUSTED 0x0040
399 #define SE_SERVER_SECURITY 0x0080
400 #define SE_DACL_AUTO_INHERIT_REQ 0x0100
401 #define SE_SACL_AUTO_INHERIT_REQ 0x0200
402 #define SE_DACL_AUTO_INHERITED 0x0400
403 #define SE_SACL_AUTO_INHERITED 0x0800
404 #define SE_DACL_PROTECTED 0x1000
405 #define SE_SACL_PROTECTED 0x2000
406 #define SE_RM_CONTROL_VALID 0x4000
407 #define SE_SELF_RELATIVE 0x8000
409 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
410 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
411 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
412 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
413 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
414 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
415 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
416 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
417 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
419 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
420 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
421 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
423 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
424 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
425 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
428 #define FSCTL_MARK_AS_SYSTEM_HIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
429 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
430 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
431 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
432 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
433 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
435 #if (VER_PRODUCTBUILD >= 1381)
437 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
438 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
439 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS)
440 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
441 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
442 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
443 #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
444 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
446 #endif /* (VER_PRODUCTBUILD >= 1381) */
448 #if (VER_PRODUCTBUILD >= 2195)
450 #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
451 #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
452 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
454 #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
455 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA)
456 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
457 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA)
458 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA)
459 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
460 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA)
461 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_READ_DATA)
462 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA)
463 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_READ_DATA)
464 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA)
465 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
466 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA)
467 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
468 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
469 #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
470 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
471 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
472 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_ANY_ACCESS)
473 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_ANY_ACCESS)
474 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_READ_DATA)
475 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_READ_DATA)
476 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_READ_DATA)
477 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
478 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
479 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
480 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
481 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
482 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
483 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
484 #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
485 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
486 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
487 #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
488 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
489 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
491 #endif /* (VER_PRODUCTBUILD >= 2195) */
493 #define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
495 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
496 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
497 #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
498 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
499 #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
500 #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
501 #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
502 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
504 #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
505 #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
506 #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
507 #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
508 #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
509 #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
510 #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
511 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
512 #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
513 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
514 #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
515 #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
516 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
517 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
519 #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
521 typedef PVOID OPLOCK
, *POPLOCK
;
523 typedef struct _CACHE_MANAGER_CALLBACKS
*PCACHE_MANAGER_CALLBACKS
;
524 typedef struct _FILE_GET_QUOTA_INFORMATION
*PFILE_GET_QUOTA_INFORMATION
;
525 typedef struct _HANDLE_TABLE
*PHANDLE_TABLE
;
526 typedef struct _KPROCESS
*PKPROCESS
;
527 typedef struct _KQUEUE
*PKQUEUE
;
528 typedef struct _KTRAP_FRAME
*PKTRAP_FRAME
;
529 typedef struct _OBJECT_DIRECTORY
*POBJECT_DIRECTORY
;
530 typedef struct _SECTION_OBJECT
*PSECTION_OBJECT
;
531 typedef struct _SHARED_CACHE_MAP
*PSHARED_CACHE_MAP
;
532 typedef struct _VACB
*PVACB
;
533 typedef struct _VAD_HEADER
*PVAD_HEADER
;
541 typedef struct _NOTIFY_SYNC
554 } NOTIFY_SYNC
, * PNOTIFY_SYNC
;
556 typedef enum _FAST_IO_POSSIBLE
{
562 typedef enum _FILE_STORAGE_TYPE
{
563 StorageTypeDefault
= 1,
564 StorageTypeDirectory
,
566 StorageTypeJunctionPoint
,
568 StorageTypeStructuredStorage
,
569 StorageTypeEmbedding
,
573 typedef enum _OBJECT_INFO_CLASS
{
581 typedef struct _KAPC_STATE
{
582 LIST_ENTRY ApcListHead
[2];
584 BOOLEAN KernelApcInProgress
;
585 BOOLEAN KernelApcPending
;
586 BOOLEAN UserApcPending
;
587 } KAPC_STATE
, *PKAPC_STATE
, *RESTRICTED_POINTER PRKAPC_STATE
;
589 typedef struct _BITMAP_RANGE
{
591 LARGE_INTEGER BasePage
;
592 ULONG FirstDirtyPage
;
596 } BITMAP_RANGE
, *PBITMAP_RANGE
;
598 typedef struct _CACHE_UNINITIALIZE_EVENT
{
599 struct _CACHE_UNINITIALIZE_EVENT
*Next
;
601 } CACHE_UNINITIALIZE_EVENT
, *PCACHE_UNINITIALIZE_EVENT
;
603 typedef struct _CC_FILE_SIZES
{
604 LARGE_INTEGER AllocationSize
;
605 LARGE_INTEGER FileSize
;
606 LARGE_INTEGER ValidDataLength
;
607 } CC_FILE_SIZES
, *PCC_FILE_SIZES
;
609 typedef struct _COMPRESSED_DATA_INFO
{
610 USHORT CompressionFormatAndEngine
;
611 UCHAR CompressionUnitShift
;
615 USHORT NumberOfChunks
;
616 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
617 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
619 #define EX_RUNDOWN_ACTIVE 0x1
620 #define EX_RUNDOWN_COUNT_SHIFT 0x1
621 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
623 typedef struct _EX_RUNDOWN_REF
{
624 _ANONYMOUS_UNION
union {
628 } EX_RUNDOWN_REF
, *PEX_RUNDOWN_REF
;
630 #define EX_PUSH_LOCK_LOCK_V ((ULONG_PTR)0x0)
631 #define EX_PUSH_LOCK_LOCK ((ULONG_PTR)0x1)
632 #define EX_PUSH_LOCK_WAITING ((ULONG_PTR)0x2)
633 #define EX_PUSH_LOCK_WAKING ((ULONG_PTR)0x4)
634 #define EX_PUSH_LOCK_MULTIPLE_SHARED ((ULONG_PTR)0x8)
635 #define EX_PUSH_LOCK_SHARE_INC ((ULONG_PTR)0x10)
636 #define EX_PUSH_LOCK_PTR_BITS ((ULONG_PTR)0xf)
638 typedef struct _EX_PUSH_LOCK
647 ULONG_PTR MultipleShared
:1;
648 ULONG_PTR Shared
:sizeof (ULONG_PTR
) * 8 - 4;
653 } EX_PUSH_LOCK
, *PEX_PUSH_LOCK
;
655 typedef struct _FILE_ACCESS_INFORMATION
{
656 ACCESS_MASK AccessFlags
;
657 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
659 typedef struct _FILE_ALLOCATION_INFORMATION
{
660 LARGE_INTEGER AllocationSize
;
661 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
663 typedef struct _FILE_BOTH_DIR_INFORMATION
{
664 ULONG NextEntryOffset
;
666 LARGE_INTEGER CreationTime
;
667 LARGE_INTEGER LastAccessTime
;
668 LARGE_INTEGER LastWriteTime
;
669 LARGE_INTEGER ChangeTime
;
670 LARGE_INTEGER EndOfFile
;
671 LARGE_INTEGER AllocationSize
;
672 ULONG FileAttributes
;
673 ULONG FileNameLength
;
675 CCHAR ShortNameLength
;
678 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
680 typedef struct _FILE_COMPLETION_INFORMATION
{
683 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
685 typedef struct _FILE_COMPRESSION_INFORMATION
{
686 LARGE_INTEGER CompressedFileSize
;
687 USHORT CompressionFormat
;
688 UCHAR CompressionUnitShift
;
692 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
694 typedef struct _FILE_COPY_ON_WRITE_INFORMATION
{
695 BOOLEAN ReplaceIfExists
;
696 HANDLE RootDirectory
;
697 ULONG FileNameLength
;
699 } FILE_COPY_ON_WRITE_INFORMATION
, *PFILE_COPY_ON_WRITE_INFORMATION
;
701 typedef struct _FILE_DIRECTORY_INFORMATION
{
702 ULONG NextEntryOffset
;
704 LARGE_INTEGER CreationTime
;
705 LARGE_INTEGER LastAccessTime
;
706 LARGE_INTEGER LastWriteTime
;
707 LARGE_INTEGER ChangeTime
;
708 LARGE_INTEGER EndOfFile
;
709 LARGE_INTEGER AllocationSize
;
710 ULONG FileAttributes
;
711 ULONG FileNameLength
;
713 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
715 typedef struct _FILE_FULL_DIRECTORY_INFORMATION
{
716 ULONG NextEntryOffset
;
718 LARGE_INTEGER CreationTime
;
719 LARGE_INTEGER LastAccessTime
;
720 LARGE_INTEGER LastWriteTime
;
721 LARGE_INTEGER ChangeTime
;
722 LARGE_INTEGER EndOfFile
;
723 LARGE_INTEGER AllocationSize
;
724 ULONG FileAttributes
;
725 ULONG FileNameLength
;
728 } FILE_FULL_DIRECTORY_INFORMATION
, *PFILE_FULL_DIRECTORY_INFORMATION
;
730 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION
{
731 ULONG NextEntryOffset
;
733 LARGE_INTEGER CreationTime
;
734 LARGE_INTEGER LastAccessTime
;
735 LARGE_INTEGER LastWriteTime
;
736 LARGE_INTEGER ChangeTime
;
737 LARGE_INTEGER EndOfFile
;
738 LARGE_INTEGER AllocationSize
;
739 ULONG FileAttributes
;
740 ULONG FileNameLength
;
742 CHAR ShortNameLength
;
745 } FILE_BOTH_DIRECTORY_INFORMATION
, *PFILE_BOTH_DIRECTORY_INFORMATION
;
747 typedef struct _FILE_EA_INFORMATION
{
749 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
751 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
752 ULONG FileSystemAttributes
;
753 ULONG MaximumComponentNameLength
;
754 ULONG FileSystemNameLength
;
755 WCHAR FileSystemName
[1];
756 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
758 typedef struct _FILE_FS_CONTROL_INFORMATION
{
759 LARGE_INTEGER FreeSpaceStartFiltering
;
760 LARGE_INTEGER FreeSpaceThreshold
;
761 LARGE_INTEGER FreeSpaceStopFiltering
;
762 LARGE_INTEGER DefaultQuotaThreshold
;
763 LARGE_INTEGER DefaultQuotaLimit
;
764 ULONG FileSystemControlFlags
;
765 } FILE_FS_CONTROL_INFORMATION
, *PFILE_FS_CONTROL_INFORMATION
;
767 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
768 LARGE_INTEGER TotalAllocationUnits
;
769 LARGE_INTEGER CallerAvailableAllocationUnits
;
770 LARGE_INTEGER ActualAvailableAllocationUnits
;
771 ULONG SectorsPerAllocationUnit
;
772 ULONG BytesPerSector
;
773 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
775 typedef struct _FILE_FS_LABEL_INFORMATION
{
776 ULONG VolumeLabelLength
;
777 WCHAR VolumeLabel
[1];
778 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
780 #if (VER_PRODUCTBUILD >= 2195)
782 typedef struct _FILE_FS_OBJECT_ID_INFORMATION
{
784 UCHAR ExtendedInfo
[48];
785 } FILE_FS_OBJECT_ID_INFORMATION
, *PFILE_FS_OBJECT_ID_INFORMATION
;
787 #endif /* (VER_PRODUCTBUILD >= 2195) */
789 typedef struct _FILE_FS_SIZE_INFORMATION
{
790 LARGE_INTEGER TotalAllocationUnits
;
791 LARGE_INTEGER AvailableAllocationUnits
;
792 ULONG SectorsPerAllocationUnit
;
793 ULONG BytesPerSector
;
794 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
796 typedef struct _FILE_FS_VOLUME_INFORMATION
{
797 LARGE_INTEGER VolumeCreationTime
;
798 ULONG VolumeSerialNumber
;
799 ULONG VolumeLabelLength
;
800 BOOLEAN SupportsObjects
;
801 WCHAR VolumeLabel
[1];
802 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
804 typedef struct _FILE_FULL_DIR_INFORMATION
{
805 ULONG NextEntryOffset
;
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
;
817 } FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
819 typedef struct _FILE_GET_EA_INFORMATION
{
820 ULONG NextEntryOffset
;
823 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
825 typedef struct _FILE_GET_QUOTA_INFORMATION
{
826 ULONG NextEntryOffset
;
829 } FILE_GET_QUOTA_INFORMATION
, *PFILE_GET_QUOTA_INFORMATION
;
831 typedef struct _FILE_INTERNAL_INFORMATION
{
832 LARGE_INTEGER IndexNumber
;
833 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
835 typedef struct _FILE_LINK_INFORMATION
{
836 BOOLEAN ReplaceIfExists
;
837 HANDLE RootDirectory
;
838 ULONG FileNameLength
;
840 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
842 typedef struct _FILE_LOCK_INFO
{
843 LARGE_INTEGER StartingByte
;
844 LARGE_INTEGER Length
;
845 BOOLEAN ExclusiveLock
;
847 PFILE_OBJECT FileObject
;
849 LARGE_INTEGER EndingByte
;
850 } FILE_LOCK_INFO
, *PFILE_LOCK_INFO
;
852 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
853 typedef struct _FILE_SHARED_LOCK_ENTRY
{
856 FILE_LOCK_INFO FileLock
;
857 } FILE_SHARED_LOCK_ENTRY
, *PFILE_SHARED_LOCK_ENTRY
;
859 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
860 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY
{
861 LIST_ENTRY ListEntry
;
864 FILE_LOCK_INFO FileLock
;
865 } FILE_EXCLUSIVE_LOCK_ENTRY
, *PFILE_EXCLUSIVE_LOCK_ENTRY
;
867 typedef NTSTATUS (*PCOMPLETE_LOCK_IRP_ROUTINE
) (
872 typedef VOID (NTAPI
*PUNLOCK_ROUTINE
) (
874 IN PFILE_LOCK_INFO FileLockInfo
877 typedef struct _FILE_LOCK
{
878 PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine
;
879 PUNLOCK_ROUTINE UnlockRoutine
;
880 BOOLEAN FastIoIsQuestionable
;
882 PVOID LockInformation
;
883 FILE_LOCK_INFO LastReturnedLockInfo
;
884 PVOID LastReturnedLock
;
885 } FILE_LOCK
, *PFILE_LOCK
;
887 typedef struct _FILE_MAILSLOT_PEEK_BUFFER
{
888 ULONG ReadDataAvailable
;
889 ULONG NumberOfMessages
;
891 } FILE_MAILSLOT_PEEK_BUFFER
, *PFILE_MAILSLOT_PEEK_BUFFER
;
893 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
{
894 ULONG MaximumMessageSize
;
896 ULONG NextMessageSize
;
897 ULONG MessagesAvailable
;
898 LARGE_INTEGER ReadTimeout
;
899 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
901 typedef struct _FILE_MAILSLOT_SET_INFORMATION
{
902 PLARGE_INTEGER ReadTimeout
;
903 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
905 typedef struct _FILE_MODE_INFORMATION
{
907 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
909 typedef struct _FILE_ALL_INFORMATION
{
910 FILE_BASIC_INFORMATION BasicInformation
;
911 FILE_STANDARD_INFORMATION StandardInformation
;
912 FILE_INTERNAL_INFORMATION InternalInformation
;
913 FILE_EA_INFORMATION EaInformation
;
914 FILE_ACCESS_INFORMATION AccessInformation
;
915 FILE_POSITION_INFORMATION PositionInformation
;
916 FILE_MODE_INFORMATION ModeInformation
;
917 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
918 FILE_NAME_INFORMATION NameInformation
;
919 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
921 typedef struct _FILE_NAMES_INFORMATION
{
922 ULONG NextEntryOffset
;
924 ULONG FileNameLength
;
926 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
928 typedef struct _FILE_OBJECTID_INFORMATION
{
929 LONGLONG FileReference
;
931 _ANONYMOUS_UNION
union {
933 UCHAR BirthVolumeId
[16];
934 UCHAR BirthObjectId
[16];
937 UCHAR ExtendedInfo
[48];
939 } FILE_OBJECTID_INFORMATION
, *PFILE_OBJECTID_INFORMATION
;
941 typedef struct _FILE_OLE_CLASSID_INFORMATION
{
943 } FILE_OLE_CLASSID_INFORMATION
, *PFILE_OLE_CLASSID_INFORMATION
;
945 typedef struct _FILE_OLE_ALL_INFORMATION
{
946 FILE_BASIC_INFORMATION BasicInformation
;
947 FILE_STANDARD_INFORMATION StandardInformation
;
948 FILE_INTERNAL_INFORMATION InternalInformation
;
949 FILE_EA_INFORMATION EaInformation
;
950 FILE_ACCESS_INFORMATION AccessInformation
;
951 FILE_POSITION_INFORMATION PositionInformation
;
952 FILE_MODE_INFORMATION ModeInformation
;
953 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
956 LARGE_INTEGER SecurityChangeTime
;
957 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation
;
958 FILE_OBJECTID_INFORMATION ObjectIdInformation
;
959 FILE_STORAGE_TYPE StorageType
;
962 ULONG NumberOfStreamReferences
;
965 BOOLEAN ContentIndexDisable
;
966 BOOLEAN InheritContentIndexDisable
;
967 FILE_NAME_INFORMATION NameInformation
;
968 } FILE_OLE_ALL_INFORMATION
, *PFILE_OLE_ALL_INFORMATION
;
970 typedef struct _FILE_OLE_DIR_INFORMATION
{
971 ULONG NextEntryOffset
;
973 LARGE_INTEGER CreationTime
;
974 LARGE_INTEGER LastAccessTime
;
975 LARGE_INTEGER LastWriteTime
;
976 LARGE_INTEGER ChangeTime
;
977 LARGE_INTEGER EndOfFile
;
978 LARGE_INTEGER AllocationSize
;
979 ULONG FileAttributes
;
980 ULONG FileNameLength
;
981 FILE_STORAGE_TYPE StorageType
;
984 BOOLEAN ContentIndexDisable
;
985 BOOLEAN InheritContentIndexDisable
;
987 } FILE_OLE_DIR_INFORMATION
, *PFILE_OLE_DIR_INFORMATION
;
989 typedef struct _FILE_OLE_INFORMATION
{
990 LARGE_INTEGER SecurityChangeTime
;
991 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation
;
992 FILE_OBJECTID_INFORMATION ObjectIdInformation
;
993 FILE_STORAGE_TYPE StorageType
;
995 BOOLEAN ContentIndexDisable
;
996 BOOLEAN InheritContentIndexDisable
;
997 } FILE_OLE_INFORMATION
, *PFILE_OLE_INFORMATION
;
999 typedef struct _FILE_OLE_STATE_BITS_INFORMATION
{
1001 ULONG StateBitsMask
;
1002 } FILE_OLE_STATE_BITS_INFORMATION
, *PFILE_OLE_STATE_BITS_INFORMATION
;
1004 typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER
{
1007 } FILE_PIPE_ASSIGN_EVENT_BUFFER
, *PFILE_PIPE_ASSIGN_EVENT_BUFFER
;
1009 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER
{
1010 PVOID ClientSession
;
1011 PVOID ClientProcess
;
1012 } FILE_PIPE_CLIENT_PROCESS_BUFFER
, *PFILE_PIPE_CLIENT_PROCESS_BUFFER
;
1014 typedef struct _FILE_PIPE_EVENT_BUFFER
{
1015 ULONG NamedPipeState
;
1019 ULONG NumberRequests
;
1020 } FILE_PIPE_EVENT_BUFFER
, *PFILE_PIPE_EVENT_BUFFER
;
1022 typedef struct _FILE_PIPE_PEEK_BUFFER
1024 ULONG NamedPipeState
;
1025 ULONG ReadDataAvailable
;
1026 ULONG NumberOfMessages
;
1027 ULONG MessageLength
;
1029 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
1031 typedef struct _FILE_PIPE_INFORMATION
{
1033 ULONG CompletionMode
;
1034 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
1036 typedef struct _FILE_PIPE_LOCAL_INFORMATION
{
1037 ULONG NamedPipeType
;
1038 ULONG NamedPipeConfiguration
;
1039 ULONG MaximumInstances
;
1040 ULONG CurrentInstances
;
1042 ULONG ReadDataAvailable
;
1043 ULONG OutboundQuota
;
1044 ULONG WriteQuotaAvailable
;
1045 ULONG NamedPipeState
;
1047 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
1049 typedef struct _FILE_PIPE_REMOTE_INFORMATION
{
1050 LARGE_INTEGER CollectDataTime
;
1051 ULONG MaximumCollectionCount
;
1052 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
1054 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
{
1055 LARGE_INTEGER Timeout
;
1057 BOOLEAN TimeoutSpecified
;
1059 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
1061 typedef struct _FILE_RENAME_INFORMATION
{
1062 BOOLEAN ReplaceIfExists
;
1063 HANDLE RootDirectory
;
1064 ULONG FileNameLength
;
1066 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
1068 typedef struct _FILE_STREAM_INFORMATION
{
1069 ULONG NextEntryOffset
;
1070 ULONG StreamNameLength
;
1071 LARGE_INTEGER StreamSize
;
1072 LARGE_INTEGER StreamAllocationSize
;
1073 WCHAR StreamName
[1];
1074 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
1076 typedef struct _FILE_TRACKING_INFORMATION
{
1077 HANDLE DestinationFile
;
1078 ULONG ObjectInformationLength
;
1079 CHAR ObjectInformation
[1];
1080 } FILE_TRACKING_INFORMATION
, *PFILE_TRACKING_INFORMATION
;
1082 #if (VER_PRODUCTBUILD >= 2195)
1083 typedef struct _FILE_ZERO_DATA_INFORMATION
{
1084 LARGE_INTEGER FileOffset
;
1085 LARGE_INTEGER BeyondFinalZero
;
1086 } FILE_ZERO_DATA_INFORMATION
, *PFILE_ZERO_DATA_INFORMATION
;
1088 typedef struct FILE_ALLOCATED_RANGE_BUFFER
{
1089 LARGE_INTEGER FileOffset
;
1090 LARGE_INTEGER Length
;
1091 } FILE_ALLOCATED_RANGE_BUFFER
, *PFILE_ALLOCATED_RANGE_BUFFER
;
1092 #endif /* (VER_PRODUCTBUILD >= 2195) */
1094 typedef struct _FSRTL_COMMON_FCB_HEADER
{
1095 CSHORT NodeTypeCode
;
1096 CSHORT NodeByteSize
;
1098 UCHAR IsFastIoPossible
;
1099 #if (VER_PRODUCTBUILD >= 1381)
1102 #endif /* (VER_PRODUCTBUILD >= 1381) */
1103 PERESOURCE Resource
;
1104 PERESOURCE PagingIoResource
;
1105 LARGE_INTEGER AllocationSize
;
1106 LARGE_INTEGER FileSize
;
1107 LARGE_INTEGER ValidDataLength
;
1108 } FSRTL_COMMON_FCB_HEADER
, *PFSRTL_COMMON_FCB_HEADER
;
1110 #if (VER_PRODUCTBUILD >= 2600)
1112 typedef struct _FSRTL_ADVANCED_FCB_HEADER
{
1113 CSHORT NodeTypeCode
;
1114 CSHORT NodeByteSize
;
1116 UCHAR IsFastIoPossible
;
1119 PERESOURCE Resource
;
1120 PERESOURCE PagingIoResource
;
1121 LARGE_INTEGER AllocationSize
;
1122 LARGE_INTEGER FileSize
;
1123 LARGE_INTEGER ValidDataLength
;
1124 PFAST_MUTEX FastMutex
;
1125 LIST_ENTRY FilterContexts
;
1126 } FSRTL_ADVANCED_FCB_HEADER
, *PFSRTL_ADVANCED_FCB_HEADER
;
1128 typedef struct _FSRTL_PER_STREAM_CONTEXT
{
1132 PFREE_FUNCTION FreeCallback
;
1133 } FSRTL_PER_STREAM_CONTEXT
, *PFSRTL_PER_STREAM_CONTEXT
;
1135 #endif /* (VER_PRODUCTBUILD >= 2600) */
1137 typedef struct _BASE_MCB
1139 ULONG MaximumPairCount
;
1144 typedef BASE_MCB
*PBASE_MCB
;
1146 typedef struct _LARGE_MCB
1148 PFAST_MUTEX FastMutex
;
1151 typedef LARGE_MCB
*PLARGE_MCB
;
1155 LARGE_MCB DummyFieldThatSizesThisStructureCorrectly
;
1159 typedef struct _GENERATE_NAME_CONTEXT
{
1161 BOOLEAN CheckSumInserted
;
1163 WCHAR NameBuffer
[8];
1164 ULONG ExtensionLength
;
1165 WCHAR ExtensionBuffer
[4];
1166 ULONG LastIndexValue
;
1167 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
1169 typedef struct _MAPPING_PAIR
{
1172 } MAPPING_PAIR
, *PMAPPING_PAIR
;
1174 typedef struct _GET_RETRIEVAL_DESCRIPTOR
{
1175 ULONG NumberOfPairs
;
1177 MAPPING_PAIR Pair
[1];
1178 } GET_RETRIEVAL_DESCRIPTOR
, *PGET_RETRIEVAL_DESCRIPTOR
;
1180 typedef struct _IO_CLIENT_EXTENSION
{
1181 struct _IO_CLIENT_EXTENSION
*NextExtension
;
1182 PVOID ClientIdentificationAddress
;
1183 } IO_CLIENT_EXTENSION
, *PIO_CLIENT_EXTENSION
;
1185 typedef struct _IO_COMPLETION_BASIC_INFORMATION
{
1187 } IO_COMPLETION_BASIC_INFORMATION
, *PIO_COMPLETION_BASIC_INFORMATION
;
1189 typedef struct _KQUEUE
{
1190 DISPATCHER_HEADER Header
;
1191 LIST_ENTRY EntryListHead
;
1194 LIST_ENTRY ThreadListHead
;
1195 } KQUEUE
, *PKQUEUE
, *RESTRICTED_POINTER PRKQUEUE
;
1197 typedef struct _MBCB
{
1198 CSHORT NodeTypeCode
;
1199 CSHORT NodeIsInZone
;
1203 LIST_ENTRY BitmapRanges
;
1204 LONGLONG ResumeWritePage
;
1205 BITMAP_RANGE BitmapRange1
;
1206 BITMAP_RANGE BitmapRange2
;
1207 BITMAP_RANGE BitmapRange3
;
1210 typedef struct _MOVEFILE_DESCRIPTOR
{
1213 LARGE_INTEGER StartVcn
;
1214 LARGE_INTEGER TargetLcn
;
1217 } MOVEFILE_DESCRIPTOR
, *PMOVEFILE_DESCRIPTOR
;
1219 typedef struct _OBJECT_BASIC_INFO
{
1221 ACCESS_MASK GrantedAccess
;
1223 ULONG ReferenceCount
;
1224 ULONG PagedPoolUsage
;
1225 ULONG NonPagedPoolUsage
;
1227 ULONG NameInformationLength
;
1228 ULONG TypeInformationLength
;
1229 ULONG SecurityDescriptorLength
;
1230 LARGE_INTEGER CreateTime
;
1231 } OBJECT_BASIC_INFO
, *POBJECT_BASIC_INFO
;
1233 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO
{
1235 BOOLEAN ProtectFromClose
;
1236 } OBJECT_HANDLE_ATTRIBUTE_INFO
, *POBJECT_HANDLE_ATTRIBUTE_INFO
;
1238 typedef struct _OBJECT_NAME_INFO
{
1239 UNICODE_STRING ObjectName
;
1240 WCHAR ObjectNameBuffer
[1];
1241 } OBJECT_NAME_INFO
, *POBJECT_NAME_INFO
;
1243 typedef struct _OBJECT_PROTECTION_INFO
{
1245 BOOLEAN ProtectHandle
;
1246 } OBJECT_PROTECTION_INFO
, *POBJECT_PROTECTION_INFO
;
1248 typedef struct _OBJECT_TYPE_INFO
{
1249 UNICODE_STRING ObjectTypeName
;
1250 UCHAR Unknown
[0x58];
1251 WCHAR ObjectTypeNameBuffer
[1];
1252 } OBJECT_TYPE_INFO
, *POBJECT_TYPE_INFO
;
1254 typedef struct _OBJECT_ALL_TYPES_INFO
{
1255 ULONG NumberOfObjectTypes
;
1256 OBJECT_TYPE_INFO ObjectsTypeInfo
[1];
1257 } OBJECT_ALL_TYPES_INFO
, *POBJECT_ALL_TYPES_INFO
;
1260 typedef struct _PATHNAME_BUFFER
{
1261 ULONG PathNameLength
;
1263 } PATHNAME_BUFFER
, *PPATHNAME_BUFFER
;
1265 #if (VER_PRODUCTBUILD >= 2600)
1267 typedef struct _PRIVATE_CACHE_MAP_FLAGS
{
1269 ULONG ReadAheadActive
: 1;
1270 ULONG ReadAheadEnabled
: 1;
1271 ULONG Available
: 14;
1272 } PRIVATE_CACHE_MAP_FLAGS
, *PPRIVATE_CACHE_MAP_FLAGS
;
1274 typedef struct _PRIVATE_CACHE_MAP
{
1275 _ANONYMOUS_UNION
union {
1276 CSHORT NodeTypeCode
;
1277 PRIVATE_CACHE_MAP_FLAGS Flags
;
1280 ULONG ReadAheadMask
;
1281 PFILE_OBJECT FileObject
;
1282 LARGE_INTEGER FileOffset1
;
1283 LARGE_INTEGER BeyondLastByte1
;
1284 LARGE_INTEGER FileOffset2
;
1285 LARGE_INTEGER BeyondLastByte2
;
1286 LARGE_INTEGER ReadAheadOffset
[2];
1287 ULONG ReadAheadLength
[2];
1288 KSPIN_LOCK ReadAheadSpinLock
;
1289 LIST_ENTRY PrivateLinks
;
1290 } PRIVATE_CACHE_MAP
, *PPRIVATE_CACHE_MAP
;
1294 typedef struct _PUBLIC_BCB
{
1295 CSHORT NodeTypeCode
;
1296 CSHORT NodeByteSize
;
1298 LARGE_INTEGER MappedFileOffset
;
1299 } PUBLIC_BCB
, *PPUBLIC_BCB
;
1301 typedef struct _QUERY_PATH_REQUEST
{
1302 ULONG PathNameLength
;
1303 PIO_SECURITY_CONTEXT SecurityContext
;
1304 WCHAR FilePathName
[1];
1305 } QUERY_PATH_REQUEST
, *PQUERY_PATH_REQUEST
;
1307 typedef struct _QUERY_PATH_RESPONSE
{
1308 ULONG LengthAccepted
;
1309 } QUERY_PATH_RESPONSE
, *PQUERY_PATH_RESPONSE
;
1311 typedef struct _RETRIEVAL_POINTERS_BUFFER
{
1313 LARGE_INTEGER StartingVcn
;
1315 LARGE_INTEGER NextVcn
;
1318 } RETRIEVAL_POINTERS_BUFFER
, *PRETRIEVAL_POINTERS_BUFFER
;
1320 typedef struct _RTL_SPLAY_LINKS
{
1321 struct _RTL_SPLAY_LINKS
*Parent
;
1322 struct _RTL_SPLAY_LINKS
*LeftChild
;
1323 struct _RTL_SPLAY_LINKS
*RightChild
;
1324 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
1326 typedef enum _RTL_GENERIC_COMPARE_RESULTS
1331 } RTL_GENERIC_COMPARE_RESULTS
;
1333 #if defined(USE_LPC6432)
1334 #define LPC_CLIENT_ID CLIENT_ID64
1335 #define LPC_SIZE_T ULONGLONG
1336 #define LPC_PVOID ULONGLONG
1337 #define LPC_HANDLE ULONGLONG
1339 #define LPC_CLIENT_ID CLIENT_ID
1340 #define LPC_SIZE_T SIZE_T
1341 #define LPC_PVOID PVOID
1342 #define LPC_HANDLE HANDLE
1345 typedef struct _PORT_MESSAGE
1361 CSHORT DataInfoOffset
;
1367 LPC_CLIENT_ID ClientId
;
1368 double DoNotUseThisField
;
1373 LPC_SIZE_T ClientViewSize
;
1376 } PORT_MESSAGE
, *PPORT_MESSAGE
;
1378 typedef struct _PORT_VIEW
1381 LPC_HANDLE SectionHandle
;
1382 ULONG SectionOffset
;
1383 LPC_SIZE_T ViewSize
;
1385 LPC_PVOID ViewRemoteBase
;
1386 } PORT_VIEW
, *PPORT_VIEW
;
1388 typedef struct _REMOTE_PORT_VIEW
1391 LPC_SIZE_T ViewSize
;
1393 } REMOTE_PORT_VIEW
, *PREMOTE_PORT_VIEW
;
1395 typedef struct _SE_EXPORTS
{
1397 LUID SeCreateTokenPrivilege
;
1398 LUID SeAssignPrimaryTokenPrivilege
;
1399 LUID SeLockMemoryPrivilege
;
1400 LUID SeIncreaseQuotaPrivilege
;
1401 LUID SeUnsolicitedInputPrivilege
;
1402 LUID SeTcbPrivilege
;
1403 LUID SeSecurityPrivilege
;
1404 LUID SeTakeOwnershipPrivilege
;
1405 LUID SeLoadDriverPrivilege
;
1406 LUID SeCreatePagefilePrivilege
;
1407 LUID SeIncreaseBasePriorityPrivilege
;
1408 LUID SeSystemProfilePrivilege
;
1409 LUID SeSystemtimePrivilege
;
1410 LUID SeProfileSingleProcessPrivilege
;
1411 LUID SeCreatePermanentPrivilege
;
1412 LUID SeBackupPrivilege
;
1413 LUID SeRestorePrivilege
;
1414 LUID SeShutdownPrivilege
;
1415 LUID SeDebugPrivilege
;
1416 LUID SeAuditPrivilege
;
1417 LUID SeSystemEnvironmentPrivilege
;
1418 LUID SeChangeNotifyPrivilege
;
1419 LUID SeRemoteShutdownPrivilege
;
1424 PSID SeCreatorOwnerSid
;
1425 PSID SeCreatorGroupSid
;
1427 PSID SeNtAuthoritySid
;
1431 PSID SeInteractiveSid
;
1432 PSID SeLocalSystemSid
;
1433 PSID SeAliasAdminsSid
;
1434 PSID SeAliasUsersSid
;
1435 PSID SeAliasGuestsSid
;
1436 PSID SeAliasPowerUsersSid
;
1437 PSID SeAliasAccountOpsSid
;
1438 PSID SeAliasSystemOpsSid
;
1439 PSID SeAliasPrintOpsSid
;
1440 PSID SeAliasBackupOpsSid
;
1442 PSID SeAuthenticatedUsersSid
;
1444 PSID SeRestrictedSid
;
1445 PSID SeAnonymousLogonSid
;
1447 LUID SeUndockPrivilege
;
1448 LUID SeSyncAgentPrivilege
;
1449 LUID SeEnableDelegationPrivilege
;
1451 } SE_EXPORTS
, *PSE_EXPORTS
;
1455 LARGE_INTEGER StartingLcn
;
1456 } STARTING_LCN_INPUT_BUFFER
, *PSTARTING_LCN_INPUT_BUFFER
;
1458 typedef struct _STARTING_VCN_INPUT_BUFFER
{
1459 LARGE_INTEGER StartingVcn
;
1460 } STARTING_VCN_INPUT_BUFFER
, *PSTARTING_VCN_INPUT_BUFFER
;
1462 typedef struct _SECURITY_CLIENT_CONTEXT
{
1463 SECURITY_QUALITY_OF_SERVICE SecurityQos
;
1464 PACCESS_TOKEN ClientToken
;
1465 BOOLEAN DirectlyAccessClientToken
;
1466 BOOLEAN DirectAccessEffectiveOnly
;
1467 BOOLEAN ServerIsRemote
;
1468 TOKEN_CONTROL ClientTokenControl
;
1469 } SECURITY_CLIENT_CONTEXT
, *PSECURITY_CLIENT_CONTEXT
;
1471 typedef struct _TUNNEL
{
1473 PRTL_SPLAY_LINKS Cache
;
1474 LIST_ENTRY TimerQueue
;
1478 typedef struct _VACB
{
1480 PSHARED_CACHE_MAP SharedCacheMap
;
1482 LARGE_INTEGER FileOffset
;
1488 typedef struct _VAD_HEADER
{
1491 PVAD_HEADER ParentLink
;
1492 PVAD_HEADER LeftLink
;
1493 PVAD_HEADER RightLink
;
1494 ULONG Flags
; /* LSB = CommitCharge */
1496 PVOID FirstProtoPte
;
1500 } VAD_HEADER
, *PVAD_HEADER
;
1504 LARGE_INTEGER StartingLcn
;
1505 LARGE_INTEGER BitmapSize
;
1507 } VOLUME_BITMAP_BUFFER
, *PVOLUME_BITMAP_BUFFER
;
1509 #if (VER_PRODUCTBUILD >= 2600)
1512 (NTAPI
*PFILTER_REPORT_CHANGE
) (
1513 IN PVOID NotifyContext
,
1514 IN PVOID FilterContext
1517 typedef enum _FS_FILTER_SECTION_SYNC_TYPE
{
1519 SyncTypeCreateSection
1520 } FS_FILTER_SECTION_SYNC_TYPE
, *PFS_FILTER_SECTION_SYNC_TYPE
;
1522 typedef union _FS_FILTER_PARAMETERS
{
1524 PLARGE_INTEGER EndingOffset
;
1525 } AcquireForModifiedPageWriter
;
1528 PERESOURCE ResourceToRelease
;
1529 } ReleaseForModifiedPageWriter
;
1532 FS_FILTER_SECTION_SYNC_TYPE SyncType
;
1533 ULONG PageProtection
;
1534 } AcquireForSectionSynchronization
;
1543 } FS_FILTER_PARAMETERS
, *PFS_FILTER_PARAMETERS
;
1545 typedef struct _FS_FILTER_CALLBACK_DATA
{
1546 ULONG SizeOfFsFilterCallbackData
;
1549 struct _DEVICE_OBJECT
*DeviceObject
;
1550 struct _FILE_OBJECT
*FileObject
;
1551 FS_FILTER_PARAMETERS Parameters
;
1552 } FS_FILTER_CALLBACK_DATA
, *PFS_FILTER_CALLBACK_DATA
;
1555 (NTAPI
*PFS_FILTER_CALLBACK
) (
1556 IN PFS_FILTER_CALLBACK_DATA Data
,
1557 OUT PVOID
*CompletionContext
1561 (NTAPI
*PFS_FILTER_COMPLETION_CALLBACK
) (
1562 IN PFS_FILTER_CALLBACK_DATA Data
,
1563 IN NTSTATUS OperationStatus
,
1564 IN PVOID CompletionContext
1567 typedef struct _FS_FILTER_CALLBACKS
{
1568 ULONG SizeOfFsFilterCallbacks
;
1570 PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization
;
1571 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization
;
1572 PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization
;
1573 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization
;
1574 PFS_FILTER_CALLBACK PreAcquireForCcFlush
;
1575 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush
;
1576 PFS_FILTER_CALLBACK PreReleaseForCcFlush
;
1577 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush
;
1578 PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter
;
1579 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter
;
1580 PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter
;
1581 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter
;
1582 } FS_FILTER_CALLBACKS
, *PFS_FILTER_CALLBACKS
;
1584 typedef struct _READ_LIST
{
1585 PFILE_OBJECT FileObject
;
1586 ULONG NumberOfEntries
;
1588 FILE_SEGMENT_ELEMENT List
[ANYSIZE_ARRAY
];
1589 } READ_LIST
, *PREAD_LIST
;
1594 (NTAPI
* PRTL_HEAP_COMMIT_ROUTINE
) (
1596 IN OUT PVOID
*CommitAddress
,
1597 IN OUT PSIZE_T CommitSize
1600 typedef struct _RTL_HEAP_PARAMETERS
{
1602 SIZE_T SegmentReserve
;
1603 SIZE_T SegmentCommit
;
1604 SIZE_T DeCommitFreeBlockThreshold
;
1605 SIZE_T DeCommitTotalFreeThreshold
;
1606 SIZE_T MaximumAllocationSize
;
1607 SIZE_T VirtualMemoryThreshold
;
1608 SIZE_T InitialCommit
;
1609 SIZE_T InitialReserve
;
1610 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine
;
1612 } RTL_HEAP_PARAMETERS
, *PRTL_HEAP_PARAMETERS
;
1618 IN PFILE_OBJECT FileObject
,
1619 IN ULONG BytesToWrite
,
1628 IN PFILE_OBJECT FileObject
,
1629 IN PLARGE_INTEGER FileOffset
,
1633 OUT PIO_STATUS_BLOCK IoStatus
1640 IN PFILE_OBJECT FileObject
,
1641 IN PLARGE_INTEGER FileOffset
,
1647 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
1649 typedef VOID (NTAPI
*PCC_POST_DEFERRED_WRITE
) (
1658 IN PFILE_OBJECT FileObject
,
1659 IN PCC_POST_DEFERRED_WRITE PostRoutine
,
1662 IN ULONG BytesToWrite
,
1670 IN PFILE_OBJECT FileObject
,
1671 IN ULONG FileOffset
,
1675 OUT PIO_STATUS_BLOCK IoStatus
1682 IN PFILE_OBJECT FileObject
,
1683 IN ULONG FileOffset
,
1692 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
1693 IN PLARGE_INTEGER FileOffset OPTIONAL
,
1695 OUT PIO_STATUS_BLOCK IoStatus OPTIONAL
1698 typedef VOID (*PDIRTY_PAGE_ROUTINE
) (
1699 IN PFILE_OBJECT FileObject
,
1700 IN PLARGE_INTEGER FileOffset
,
1702 IN PLARGE_INTEGER OldestLsn
,
1703 IN PLARGE_INTEGER NewestLsn
,
1713 IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine
,
1721 CcGetFileObjectFromBcb (
1728 CcGetFileObjectFromSectionPtrs (
1729 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
1732 #define CcGetFileSizePointer(FO) ( \
1733 ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
1736 #if (VER_PRODUCTBUILD >= 2195)
1741 CcGetFlushedValidData (
1742 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
1743 IN BOOLEAN BcbListHeld
1746 #endif /* (VER_PRODUCTBUILD >= 2195) */
1751 CcGetLsnForFileObject (
1752 IN PFILE_OBJECT FileObject
,
1753 OUT PLARGE_INTEGER OldestLsn OPTIONAL
1756 typedef BOOLEAN (NTAPI
*PACQUIRE_FOR_LAZY_WRITE
) (
1761 typedef VOID (NTAPI
*PRELEASE_FROM_LAZY_WRITE
) (
1765 typedef BOOLEAN (NTAPI
*PACQUIRE_FOR_READ_AHEAD
) (
1770 typedef VOID (NTAPI
*PRELEASE_FROM_READ_AHEAD
) (
1774 typedef struct _CACHE_MANAGER_CALLBACKS
{
1775 PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite
;
1776 PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite
;
1777 PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead
;
1778 PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead
;
1779 } CACHE_MANAGER_CALLBACKS
, *PCACHE_MANAGER_CALLBACKS
;
1784 CcInitializeCacheMap (
1785 IN PFILE_OBJECT FileObject
,
1786 IN PCC_FILE_SIZES FileSizes
,
1787 IN BOOLEAN PinAccess
,
1788 IN PCACHE_MANAGER_CALLBACKS Callbacks
,
1789 IN PVOID LazyWriteContext
1792 #define CcIsFileCached(FO) ( \
1793 ((FO)->SectionObjectPointer != NULL) && \
1794 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
1800 CcIsThereDirtyData (
1808 IN PFILE_OBJECT FileObject
,
1809 IN PLARGE_INTEGER FileOffset
,
1820 IN PFILE_OBJECT FileObject
,
1821 IN PLARGE_INTEGER FileOffset
,
1824 OUT PIO_STATUS_BLOCK IoStatus
1831 IN PFILE_OBJECT FileObject
,
1838 CcMdlWriteComplete (
1839 IN PFILE_OBJECT FileObject
,
1840 IN PLARGE_INTEGER FileOffset
,
1848 IN PFILE_OBJECT FileObject
,
1849 IN PLARGE_INTEGER FileOffset
,
1851 #if (VER_PRODUCTBUILD >= 2195)
1863 IN PFILE_OBJECT FileObject
,
1864 IN PLARGE_INTEGER FileOffset
,
1866 #if (VER_PRODUCTBUILD >= 2195)
1879 IN PFILE_OBJECT FileObject
,
1880 IN PLARGE_INTEGER FileOffset
,
1883 OUT PIO_STATUS_BLOCK IoStatus
1890 IN PFILE_OBJECT FileObject
,
1891 IN PLARGE_INTEGER FileOffset
,
1894 #if (VER_PRODUCTBUILD >= 2195)
1906 CcPurgeCacheSection (
1907 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
1908 IN PLARGE_INTEGER FileOffset OPTIONAL
,
1910 IN BOOLEAN UninitializeCacheMaps
1913 #define CcReadAhead(FO, FOFF, LEN) ( \
1914 if ((LEN) >= 256) { \
1915 CcScheduleReadAhead((FO), (FOFF), (LEN)); \
1919 #if (VER_PRODUCTBUILD >= 2195)
1928 #endif /* (VER_PRODUCTBUILD >= 2195) */
1940 CcScheduleReadAhead (
1941 IN PFILE_OBJECT FileObject
,
1942 IN PLARGE_INTEGER FileOffset
,
1949 CcSetAdditionalCacheAttributes (
1950 IN PFILE_OBJECT FileObject
,
1951 IN BOOLEAN DisableReadAhead
,
1952 IN BOOLEAN DisableWriteBehind
1958 CcSetBcbOwnerPointer (
1960 IN PVOID OwnerPointer
1966 CcSetDirtyPageThreshold (
1967 IN PFILE_OBJECT FileObject
,
1968 IN ULONG DirtyPageThreshold
1974 CcSetDirtyPinnedData (
1976 IN PLARGE_INTEGER Lsn OPTIONAL
1983 IN PFILE_OBJECT FileObject
,
1984 IN PCC_FILE_SIZES FileSizes
1987 typedef VOID (NTAPI
*PFLUSH_TO_LSN
) (
1989 IN PLARGE_INTEGER Lsn
1995 CcSetLogHandleForFile (
1996 IN PFILE_OBJECT FileObject
,
1998 IN PFLUSH_TO_LSN FlushToLsnRoutine
2004 CcSetReadAheadGranularity (
2005 IN PFILE_OBJECT FileObject
,
2006 IN ULONG Granularity
/* default: PAGE_SIZE */
2007 /* allowed: 2^n * PAGE_SIZE */
2013 CcUninitializeCacheMap (
2014 IN PFILE_OBJECT FileObject
,
2015 IN PLARGE_INTEGER TruncateSize OPTIONAL
,
2016 IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL
2029 CcUnpinDataForThread (
2031 IN ERESOURCE_THREAD ResourceThreadId
2037 CcUnpinRepinnedBcb (
2039 IN BOOLEAN WriteThrough
,
2040 OUT PIO_STATUS_BLOCK IoStatus
2043 #if (VER_PRODUCTBUILD >= 2195)
2048 CcWaitForCurrentLazyWriterActivity (
2052 #endif /* (VER_PRODUCTBUILD >= 2195) */
2058 IN PFILE_OBJECT FileObject
,
2059 IN PLARGE_INTEGER StartOffset
,
2060 IN PLARGE_INTEGER EndOffset
,
2067 ExDisableResourceBoostLite (
2068 IN PERESOURCE Resource
2074 ExQueryPoolBlockSize (
2076 OUT PBOOLEAN QuotaCharged
2079 #if (VER_PRODUCTBUILD >= 2600)
2084 ExInitializeRundownProtection (
2085 IN PEX_RUNDOWN_REF RunRef
2091 ExReInitializeRundownProtection (
2092 IN PEX_RUNDOWN_REF RunRef
2098 ExAcquireRundownProtection (
2099 IN PEX_RUNDOWN_REF RunRef
2105 ExAcquireRundownProtectionEx (
2106 IN PEX_RUNDOWN_REF RunRef
,
2113 ExReleaseRundownProtection (
2114 IN PEX_RUNDOWN_REF RunRef
2120 ExReleaseRundownProtectionEx (
2121 IN PEX_RUNDOWN_REF RunRef
,
2128 ExRundownCompleted (
2129 IN PEX_RUNDOWN_REF RunRef
2135 ExWaitForRundownProtectionRelease (
2136 IN PEX_RUNDOWN_REF RunRef
2139 #endif /* (VER_PRODUCTBUILD >= 2600) */
2141 #define FlagOn(x, f) ((x) & (f))
2146 FsRtlAddToTunnelCache (
2148 IN ULONGLONG DirectoryKey
,
2149 IN PUNICODE_STRING ShortName
,
2150 IN PUNICODE_STRING LongName
,
2151 IN BOOLEAN KeyByShortName
,
2152 IN ULONG DataLength
,
2156 #if (VER_PRODUCTBUILD >= 2195)
2160 FsRtlAllocateFileLock (
2161 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL
,
2162 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
2165 #endif /* (VER_PRODUCTBUILD >= 2195) */
2171 IN POOL_TYPE PoolType
,
2172 IN ULONG NumberOfBytes
2178 FsRtlAllocatePoolWithQuota (
2179 IN POOL_TYPE PoolType
,
2180 IN ULONG NumberOfBytes
2186 FsRtlAllocatePoolWithQuotaTag (
2187 IN POOL_TYPE PoolType
,
2188 IN ULONG NumberOfBytes
,
2195 FsRtlAllocatePoolWithTag (
2196 IN POOL_TYPE PoolType
,
2197 IN ULONG NumberOfBytes
,
2204 FsRtlAreNamesEqual (
2205 IN PUNICODE_STRING Name1
,
2206 IN PUNICODE_STRING Name2
,
2207 IN BOOLEAN IgnoreCase
,
2208 IN PWCHAR UpcaseTable OPTIONAL
2211 #define FsRtlAreThereCurrentFileLocks(FL) ( \
2212 ((FL)->FastIoIsQuestionable) \
2216 FsRtlCheckLockForReadAccess:
2218 All this really does is pick out the lock parameters from the irp (io stack
2219 location?), get IoGetRequestorProcess, and pass values on to
2220 FsRtlFastCheckLockForRead.
2225 FsRtlCheckLockForReadAccess (
2226 IN PFILE_LOCK FileLock
,
2231 FsRtlCheckLockForWriteAccess:
2233 All this really does is pick out the lock parameters from the irp (io stack
2234 location?), get IoGetRequestorProcess, and pass values on to
2235 FsRtlFastCheckLockForWrite.
2240 FsRtlCheckLockForWriteAccess (
2241 IN PFILE_LOCK FileLock
,
2247 (NTAPI
*POPLOCK_WAIT_COMPLETE_ROUTINE
) (
2254 (NTAPI
*POPLOCK_FS_PREPOST_IRP
) (
2266 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
2267 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
2274 IN PFILE_OBJECT FileObject
,
2275 IN PLARGE_INTEGER FileOffset
,
2280 OUT PIO_STATUS_BLOCK IoStatus
,
2281 IN PDEVICE_OBJECT DeviceObject
2288 IN PFILE_OBJECT FileObject
,
2289 IN PLARGE_INTEGER FileOffset
,
2294 OUT PIO_STATUS_BLOCK IoStatus
,
2295 IN PDEVICE_OBJECT DeviceObject
2303 IN PVOID HeapBase OPTIONAL
,
2304 IN SIZE_T ReserveSize OPTIONAL
,
2305 IN SIZE_T CommitSize OPTIONAL
,
2306 IN PVOID Lock OPTIONAL
,
2307 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
2313 FsRtlCurrentBatchOplock (
2320 FsRtlDeleteKeyFromTunnelCache (
2322 IN ULONGLONG DirectoryKey
2328 FsRtlDeleteTunnelCache (
2335 FsRtlDeregisterUncProvider (
2350 IN ANSI_STRING Name
,
2351 OUT PANSI_STRING FirstPart
,
2352 OUT PANSI_STRING RemainingPart
2359 IN UNICODE_STRING Name
,
2360 OUT PUNICODE_STRING FirstPart
,
2361 OUT PUNICODE_STRING RemainingPart
2367 FsRtlDoesDbcsContainWildCards (
2368 IN PANSI_STRING Name
2374 FsRtlDoesNameContainWildCards (
2375 IN PUNICODE_STRING Name
2378 #define FsRtlEnterFileSystem KeEnterCriticalRegion
2380 #define FsRtlExitFileSystem KeLeaveCriticalRegion
2385 FsRtlFastCheckLockForRead (
2386 IN PFILE_LOCK FileLock
,
2387 IN PLARGE_INTEGER FileOffset
,
2388 IN PLARGE_INTEGER Length
,
2390 IN PFILE_OBJECT FileObject
,
2391 IN PEPROCESS Process
2397 FsRtlFastCheckLockForWrite (
2398 IN PFILE_LOCK FileLock
,
2399 IN PLARGE_INTEGER FileOffset
,
2400 IN PLARGE_INTEGER Length
,
2402 IN PFILE_OBJECT FileObject
,
2403 IN PEPROCESS Process
2406 #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
2407 FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
2413 FsRtlFastUnlockAll (
2414 IN PFILE_LOCK FileLock
,
2415 IN PFILE_OBJECT FileObject
,
2416 IN PEPROCESS Process
,
2417 IN PVOID Context OPTIONAL
2419 /* ret: STATUS_RANGE_NOT_LOCKED */
2424 FsRtlFastUnlockAllByKey (
2425 IN PFILE_LOCK FileLock
,
2426 IN PFILE_OBJECT FileObject
,
2427 IN PEPROCESS Process
,
2429 IN PVOID Context OPTIONAL
2431 /* ret: STATUS_RANGE_NOT_LOCKED */
2436 FsRtlFastUnlockSingle (
2437 IN PFILE_LOCK FileLock
,
2438 IN PFILE_OBJECT FileObject
,
2439 IN PLARGE_INTEGER FileOffset
,
2440 IN PLARGE_INTEGER Length
,
2441 IN PEPROCESS Process
,
2443 IN PVOID Context OPTIONAL
,
2444 IN BOOLEAN AlreadySynchronized
2446 /* ret: STATUS_RANGE_NOT_LOCKED */
2451 FsRtlFindInTunnelCache (
2453 IN ULONGLONG DirectoryKey
,
2454 IN PUNICODE_STRING Name
,
2455 OUT PUNICODE_STRING ShortName
,
2456 OUT PUNICODE_STRING LongName
,
2457 IN OUT PULONG DataLength
,
2461 #if (VER_PRODUCTBUILD >= 2195)
2467 IN PFILE_LOCK FileLock
2470 #endif /* (VER_PRODUCTBUILD >= 2195) */
2476 IN PFILE_OBJECT FileObject
,
2477 IN OUT PLARGE_INTEGER FileSize
2481 FsRtlGetNextFileLock:
2483 ret: NULL if no more locks
2486 FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
2487 FileLock->LastReturnedLock as storage.
2488 LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
2489 list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
2490 calls with Restart = FALSE.
2495 FsRtlGetNextFileLock (
2496 IN PFILE_LOCK FileLock
,
2503 FsRtlInitializeFileLock (
2504 IN PFILE_LOCK FileLock
,
2505 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL
,
2506 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
2512 FsRtlInitializeOplock (
2513 IN OUT POPLOCK Oplock
2519 FsRtlInitializeTunnelCache (
2526 FsRtlIsNameInExpression (
2527 IN PUNICODE_STRING Expression
,
2528 IN PUNICODE_STRING Name
,
2529 IN BOOLEAN IgnoreCase
,
2530 IN PWCHAR UpcaseTable OPTIONAL
2536 FsRtlIsNtstatusExpected (
2537 IN NTSTATUS Ntstatus
2540 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
2541 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
2542 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
2544 extern BOOLEAN NlsMbCodePageTag
;
2545 extern BOOLEAN NlsMbOemCodePageTag
;
2546 extern PUSHORT NlsOemLeadByteInfo
;
2548 #define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \
2549 (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \
2550 (NLS_MB_CODE_PAGE_TAG && \
2551 (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \
2554 #define FsRtlIsAnsiCharacterWild(C) ( \
2555 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \
2558 #define FsRtlIsUnicodeCharacterWild(C) ( \
2561 FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER )) \
2568 IN PFILE_OBJECT FileObject
,
2569 IN PLARGE_INTEGER FileOffset
,
2573 OUT PIO_STATUS_BLOCK IoStatus
,
2574 IN PDEVICE_OBJECT DeviceObject
2580 FsRtlMdlReadComplete (
2581 IN PFILE_OBJECT FileObject
,
2588 FsRtlMdlReadCompleteDev (
2589 IN PFILE_OBJECT FileObject
,
2591 IN PDEVICE_OBJECT DeviceObject
2597 FsRtlPrepareMdlWriteDev (
2598 IN PFILE_OBJECT FileObject
,
2599 IN PLARGE_INTEGER FileOffset
,
2603 OUT PIO_STATUS_BLOCK IoStatus
,
2604 IN PDEVICE_OBJECT DeviceObject
2610 FsRtlMdlWriteComplete (
2611 IN PFILE_OBJECT FileObject
,
2612 IN PLARGE_INTEGER FileOffset
,
2619 FsRtlMdlWriteCompleteDev (
2620 IN PFILE_OBJECT FileObject
,
2621 IN PLARGE_INTEGER FileOffset
,
2623 IN PDEVICE_OBJECT DeviceObject
2629 FsRtlNormalizeNtstatus (
2630 IN NTSTATUS Exception
,
2631 IN NTSTATUS GenericException
2637 FsRtlNotifyChangeDirectory (
2638 IN PNOTIFY_SYNC NotifySync
,
2640 IN PSTRING FullDirectoryName
,
2641 IN PLIST_ENTRY NotifyList
,
2642 IN BOOLEAN WatchTree
,
2643 IN ULONG CompletionFilter
,
2650 FsRtlNotifyCleanup (
2651 IN PNOTIFY_SYNC NotifySync
,
2652 IN PLIST_ENTRY NotifyList
,
2656 typedef BOOLEAN (*PCHECK_FOR_TRAVERSE_ACCESS
) (
2657 IN PVOID NotifyContext
,
2658 IN PVOID TargetContext
,
2659 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
2665 FsRtlNotifyFullChangeDirectory (
2666 IN PNOTIFY_SYNC NotifySync
,
2667 IN PLIST_ENTRY NotifyList
,
2669 IN PSTRING FullDirectoryName
,
2670 IN BOOLEAN WatchTree
,
2671 IN BOOLEAN IgnoreBuffer
,
2672 IN ULONG CompletionFilter
,
2674 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL
,
2675 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
2681 FsRtlNotifyFullReportChange (
2682 IN PNOTIFY_SYNC NotifySync
,
2683 IN PLIST_ENTRY NotifyList
,
2684 IN PSTRING FullTargetName
,
2685 IN USHORT TargetNameOffset
,
2686 IN PSTRING StreamName OPTIONAL
,
2687 IN PSTRING NormalizedParentName OPTIONAL
,
2688 IN ULONG FilterMatch
,
2690 IN PVOID TargetContext
2696 FsRtlNotifyInitializeSync (
2697 IN PNOTIFY_SYNC
*NotifySync
2703 FsRtlNotifyReportChange (
2704 IN PNOTIFY_SYNC NotifySync
,
2705 IN PLIST_ENTRY NotifyList
,
2706 IN PSTRING FullTargetName
,
2707 IN PUSHORT FileNamePartLength
,
2708 IN ULONG FilterMatch
2714 FsRtlNotifyUninitializeSync (
2715 IN PNOTIFY_SYNC
*NotifySync
2718 #if (VER_PRODUCTBUILD >= 2195)
2723 FsRtlNotifyVolumeEvent (
2724 IN PFILE_OBJECT FileObject
,
2728 #endif /* (VER_PRODUCTBUILD >= 2195) */
2742 FsRtlOplockIsFastIoPossible (
2749 ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
2752 -Calls IoCompleteRequest if Irp
2753 -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
2759 IN PFILE_LOCK FileLock
,
2760 IN PFILE_OBJECT FileObject
,
2761 IN PLARGE_INTEGER FileOffset
,
2762 IN PLARGE_INTEGER Length
,
2763 IN PEPROCESS Process
,
2765 IN BOOLEAN FailImmediately
,
2766 IN BOOLEAN ExclusiveLock
,
2767 OUT PIO_STATUS_BLOCK IoStatus
,
2768 IN PIRP Irp OPTIONAL
,
2770 IN BOOLEAN AlreadySynchronized
2774 FsRtlProcessFileLock:
2777 -STATUS_INVALID_DEVICE_REQUEST
2778 -STATUS_RANGE_NOT_LOCKED from unlock routines.
2779 -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
2780 (redirected IoStatus->Status).
2783 -switch ( Irp->CurrentStackLocation->MinorFunction )
2784 lock: return FsRtlPrivateLock;
2785 unlocksingle: return FsRtlFastUnlockSingle;
2786 unlockall: return FsRtlFastUnlockAll;
2787 unlockallbykey: return FsRtlFastUnlockAllByKey;
2788 default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
2789 return STATUS_INVALID_DEVICE_REQUEST;
2791 -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
2792 -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
2797 FsRtlProcessFileLock (
2798 IN PFILE_LOCK FileLock
,
2800 IN PVOID Context OPTIONAL
2806 FsRtlRegisterUncProvider (
2807 IN OUT PHANDLE MupHandle
,
2808 IN PUNICODE_STRING RedirectorDeviceName
,
2809 IN BOOLEAN MailslotsSupported
2813 (NTAPI
*PFSRTL_STACK_OVERFLOW_ROUTINE
) (
2821 FsRtlPostStackOverflow (
2824 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
2830 FsRtlPostPagingFileStackOverflow (
2833 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
2839 FsRtlUninitializeFileLock (
2840 IN PFILE_LOCK FileLock
2846 FsRtlUninitializeOplock (
2847 IN OUT POPLOCK Oplock
2860 HalQueryRealTimeClock (
2861 IN OUT PTIME_FIELDS TimeFields
2867 HalSetRealTimeClock (
2868 IN PTIME_FIELDS TimeFields
2874 IoAttachDeviceToDeviceStackSafe(
2875 IN PDEVICE_OBJECT SourceDevice
,
2876 IN PDEVICE_OBJECT TargetDevice
,
2877 OUT PDEVICE_OBJECT
*AttachedToDeviceObject
2883 IoAcquireVpbSpinLock (
2890 IoCheckDesiredAccess (
2891 IN OUT PACCESS_MASK DesiredAccess
,
2892 IN ACCESS_MASK GrantedAccess
2898 IoCheckEaBufferValidity (
2899 IN PFILE_FULL_EA_INFORMATION EaBuffer
,
2901 OUT PULONG ErrorOffset
2907 IoCheckFunctionAccess (
2908 IN ACCESS_MASK GrantedAccess
,
2909 IN UCHAR MajorFunction
,
2910 IN UCHAR MinorFunction
,
2911 IN ULONG IoControlCode
,
2912 IN PVOID Argument1 OPTIONAL
,
2913 IN PVOID Argument2 OPTIONAL
2916 #if (VER_PRODUCTBUILD >= 2195)
2921 IoCheckQuotaBufferValidity (
2922 IN PFILE_QUOTA_INFORMATION QuotaBuffer
,
2923 IN ULONG QuotaLength
,
2924 OUT PULONG ErrorOffset
2927 #endif /* (VER_PRODUCTBUILD >= 2195) */
2932 IoCreateStreamFileObject (
2933 IN PFILE_OBJECT FileObject OPTIONAL
,
2934 IN PDEVICE_OBJECT DeviceObject OPTIONAL
2937 #if (VER_PRODUCTBUILD >= 2195)
2942 IoCreateStreamFileObjectLite (
2943 IN PFILE_OBJECT FileObject OPTIONAL
,
2944 IN PDEVICE_OBJECT DeviceObject OPTIONAL
2947 #endif /* (VER_PRODUCTBUILD >= 2195) */
2952 IoFastQueryNetworkAttributes (
2953 IN POBJECT_ATTRIBUTES ObjectAttributes
,
2954 IN ACCESS_MASK DesiredAccess
,
2955 IN ULONG OpenOptions
,
2956 OUT PIO_STATUS_BLOCK IoStatus
,
2957 OUT PFILE_NETWORK_OPEN_INFORMATION Buffer
2963 IoGetAttachedDevice (
2964 IN PDEVICE_OBJECT DeviceObject
2970 IoGetBaseFileSystemDeviceObject (
2971 IN PFILE_OBJECT FileObject
2977 IoGetRequestorProcess (
2981 #if (VER_PRODUCTBUILD >= 2195)
2986 IoGetRequestorProcessId (
2990 #endif /* (VER_PRODUCTBUILD >= 2195) */
2999 #define IoIsFileOpenedExclusively(FileObject) ( \
3001 (FileObject)->SharedRead || \
3002 (FileObject)->SharedWrite || \
3003 (FileObject)->SharedDelete \
3010 IoIsOperationSynchronous (
3021 #if (VER_PRODUCTBUILD >= 2195)
3026 IoIsValidNameGraftingBuffer (
3028 IN PREPARSE_DATA_BUFFER ReparseBuffer
3031 #endif /* (VER_PRODUCTBUILD >= 2195) */
3037 IN PFILE_OBJECT FileObject
,
3039 IN PLARGE_INTEGER Offset
,
3041 OUT PIO_STATUS_BLOCK IoStatusBlock
3047 IoQueryFileInformation (
3048 IN PFILE_OBJECT FileObject
,
3049 IN FILE_INFORMATION_CLASS FileInformationClass
,
3051 OUT PVOID FileInformation
,
3052 OUT PULONG ReturnedLength
3058 IoQueryVolumeInformation (
3059 IN PFILE_OBJECT FileObject
,
3060 IN FS_INFORMATION_CLASS FsInformationClass
,
3062 OUT PVOID FsInformation
,
3063 OUT PULONG ReturnedLength
3076 IoRegisterFileSystem (
3077 IN OUT PDEVICE_OBJECT DeviceObject
3080 #if (VER_PRODUCTBUILD >= 1381)
3082 typedef VOID (NTAPI
*PDRIVER_FS_NOTIFICATION
) (
3083 IN PDEVICE_OBJECT DeviceObject
,
3084 IN BOOLEAN DriverActive
3090 IoRegisterFsRegistrationChange (
3091 IN PDRIVER_OBJECT DriverObject
,
3092 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
3095 #endif /* (VER_PRODUCTBUILD >= 1381) */
3100 IoReleaseVpbSpinLock (
3107 IoSetDeviceToVerify (
3109 IN PDEVICE_OBJECT DeviceObject
3116 IN PFILE_OBJECT FileObject
,
3117 IN FILE_INFORMATION_CLASS FileInformationClass
,
3119 IN PVOID FileInformation
3132 IoSynchronousPageWrite (
3133 IN PFILE_OBJECT FileObject
,
3135 IN PLARGE_INTEGER FileOffset
,
3137 OUT PIO_STATUS_BLOCK IoStatusBlock
3150 IoUnregisterFileSystem (
3151 IN OUT PDEVICE_OBJECT DeviceObject
3154 #if (VER_PRODUCTBUILD >= 1381)
3159 IoUnregisterFsRegistrationChange (
3160 IN PDRIVER_OBJECT DriverObject
,
3161 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
3164 #endif /* (VER_PRODUCTBUILD >= 1381) */
3170 IN PDEVICE_OBJECT DeviceObject
,
3171 IN BOOLEAN AllowRawMount
3178 IN PKPROCESS Process
3193 IN ULONG Count OPTIONAL
3201 IN PLIST_ENTRY Entry
3209 IN PLIST_ENTRY Entry
3217 IN PVOID SystemArgument1
,
3218 IN PVOID SystemArgument2
,
3219 IN KPRIORITY PriorityBoost
3234 IN KPROCESSOR_MODE WaitMode
,
3235 IN PLARGE_INTEGER Timeout OPTIONAL
3248 KeInitializeMutant (
3249 IN PRKMUTANT Mutant
,
3250 IN BOOLEAN InitialOwner
3264 IN PRKMUTANT Mutant
,
3265 IN KPRIORITY Increment
,
3266 IN BOOLEAN Abandoned
,
3270 #if (VER_PRODUCTBUILD >= 2195)
3275 KeStackAttachProcess (
3276 IN PKPROCESS Process
,
3277 OUT PKAPC_STATE ApcState
3283 KeUnstackDetachProcess (
3284 IN PKAPC_STATE ApcState
3287 #endif /* (VER_PRODUCTBUILD >= 2195) */
3292 MmCanFileBeTruncated (
3293 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
3294 IN PLARGE_INTEGER NewFileSize
3300 MmFlushImageSection (
3301 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
3302 IN MMFLUSH_TYPE FlushType
3308 MmForceSectionClosed (
3309 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
3310 IN BOOLEAN DelayClose
3313 #if (VER_PRODUCTBUILD >= 1381)
3318 MmIsRecursiveIoFault (
3324 #define MmIsRecursiveIoFault() ( \
3325 (PsGetCurrentThread()->DisablePageFaultClustering) | \
3326 (PsGetCurrentThread()->ForwardClusterOnly) \
3334 MmMapViewOfSection (
3335 IN PVOID SectionObject
,
3336 IN PEPROCESS Process
,
3337 IN OUT PVOID
*BaseAddress
,
3339 IN ULONG CommitSize
,
3340 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
3341 IN OUT PULONG ViewSize
,
3342 IN SECTION_INHERIT InheritDisposition
,
3343 IN ULONG AllocationType
,
3350 MmSetAddressRangeModified (
3359 IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL
,
3360 IN POBJECT_TYPE ObjectType
,
3361 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
3362 IN KPROCESSOR_MODE AccessMode
,
3363 IN OUT PVOID ParseContext OPTIONAL
,
3364 IN ULONG ObjectSize
,
3365 IN ULONG PagedPoolCharge OPTIONAL
,
3366 IN ULONG NonPagedPoolCharge OPTIONAL
,
3373 ObGetObjectPointerCount (
3382 IN PACCESS_STATE PassedAccessState OPTIONAL
,
3383 IN ACCESS_MASK DesiredAccess
,
3384 IN ULONG AdditionalReferences
,
3385 OUT PVOID
*ReferencedObject OPTIONAL
,
3392 ObMakeTemporaryObject (
3399 ObOpenObjectByPointer (
3401 IN ULONG HandleAttributes
,
3402 IN PACCESS_STATE PassedAccessState OPTIONAL
,
3403 IN ACCESS_MASK DesiredAccess OPTIONAL
,
3404 IN POBJECT_TYPE ObjectType OPTIONAL
,
3405 IN KPROCESSOR_MODE AccessMode
,
3414 OUT POBJECT_NAME_INFORMATION ObjectNameInfo
,
3416 OUT PULONG ReturnLength
3422 ObQueryObjectAuditingByHandle (
3424 OUT PBOOLEAN GenerateOnClose
3430 ObReferenceObjectByName (
3431 IN PUNICODE_STRING ObjectName
,
3432 IN ULONG Attributes
,
3433 IN PACCESS_STATE PassedAccessState OPTIONAL
,
3434 IN ACCESS_MASK DesiredAccess OPTIONAL
,
3435 IN POBJECT_TYPE ObjectType
,
3436 IN KPROCESSOR_MODE AccessMode
,
3437 IN OUT PVOID ParseContext OPTIONAL
,
3444 PsAssignImpersonationToken (
3453 IN PEPROCESS Process
,
3454 IN POOL_TYPE PoolType
,
3461 PsChargeProcessPoolQuota (
3462 IN PEPROCESS Process
,
3463 IN POOL_TYPE PoolType
,
3467 #define PsDereferenceImpersonationToken(T) \
3468 {if (ARGUMENT_PRESENT(T)) { \
3469 (ObDereferenceObject((T))); \
3475 #define PsDereferencePrimaryToken(T) (ObDereferenceObject((T)))
3480 PsDisableImpersonation(
3482 IN PSE_IMPERSONATION_STATE ImpersonationState
3488 PsGetProcessExitTime (
3495 PsImpersonateClient(
3497 IN PACCESS_TOKEN Token
,
3498 IN BOOLEAN CopyOnOpen
,
3499 IN BOOLEAN EffectiveOnly
,
3500 IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
3513 PsIsThreadTerminating (
3520 PsLookupProcessByProcessId (
3521 IN HANDLE ProcessId
,
3522 OUT PEPROCESS
*Process
3528 PsLookupProcessThreadByCid (
3530 OUT PEPROCESS
*Process OPTIONAL
,
3531 OUT PETHREAD
*Thread
3537 PsLookupThreadByThreadId (
3538 IN HANDLE UniqueThreadId
,
3539 OUT PETHREAD
*Thread
3545 PsReferenceImpersonationToken (
3547 OUT PBOOLEAN CopyOnUse
,
3548 OUT PBOOLEAN EffectiveOnly
,
3549 OUT PSECURITY_IMPERSONATION_LEVEL Level
3555 PsReferencePrimaryToken (
3556 IN PEPROCESS Process
3562 PsRestoreImpersonation(
3564 IN PSE_IMPERSONATION_STATE ImpersonationState
3571 IN PEPROCESS Process
,
3572 IN POOL_TYPE PoolType
,
3586 RtlAbsoluteToSelfRelativeSD (
3587 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor
,
3588 IN OUT PISECURITY_DESCRIPTOR_RELATIVE SelfRelativeSecurityDescriptor
,
3589 IN PULONG BufferLength
3596 IN HANDLE HeapHandle
,
3605 IN USHORT CompressionFormatAndEngine
,
3606 IN PUCHAR UncompressedBuffer
,
3607 IN ULONG UncompressedBufferSize
,
3608 OUT PUCHAR CompressedBuffer
,
3609 IN ULONG CompressedBufferSize
,
3610 IN ULONG UncompressedChunkSize
,
3611 OUT PULONG FinalCompressedSize
,
3619 IN PUCHAR UncompressedBuffer
,
3620 IN ULONG UncompressedBufferSize
,
3621 OUT PUCHAR CompressedBuffer
,
3622 IN ULONG CompressedBufferSize
,
3623 IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo
,
3624 IN ULONG CompressedDataInfoLength
,
3631 RtlConvertSidToUnicodeString (
3632 OUT PUNICODE_STRING DestinationString
,
3634 IN BOOLEAN AllocateDestinationString
3642 IN PSID Destination
,
3649 RtlDecompressBuffer (
3650 IN USHORT CompressionFormat
,
3651 OUT PUCHAR UncompressedBuffer
,
3652 IN ULONG UncompressedBufferSize
,
3653 IN PUCHAR CompressedBuffer
,
3654 IN ULONG CompressedBufferSize
,
3655 OUT PULONG FinalUncompressedSize
3661 RtlDecompressChunks (
3662 OUT PUCHAR UncompressedBuffer
,
3663 IN ULONG UncompressedBufferSize
,
3664 IN PUCHAR CompressedBuffer
,
3665 IN ULONG CompressedBufferSize
,
3666 IN PUCHAR CompressedTail
,
3667 IN ULONG CompressedTailSize
,
3668 IN PCOMPRESSED_DATA_INFO CompressedDataInfo
3674 RtlDecompressFragment (
3675 IN USHORT CompressionFormat
,
3676 OUT PUCHAR UncompressedFragment
,
3677 IN ULONG UncompressedFragmentSize
,
3678 IN PUCHAR CompressedBuffer
,
3679 IN ULONG CompressedBufferSize
,
3680 IN ULONG FragmentOffset
,
3681 OUT PULONG FinalUncompressedSize
,
3689 IN USHORT CompressionFormat
,
3690 IN OUT PUCHAR
*CompressedBuffer
,
3691 IN PUCHAR EndOfCompressedBufferPlus1
,
3692 OUT PUCHAR
*ChunkBuffer
,
3693 OUT PULONG ChunkSize
3707 RtlFillMemoryUlong (
3708 IN PVOID Destination
,
3717 IN HANDLE HeapHandle
,
3725 RtlGenerate8dot3Name (
3726 IN PUNICODE_STRING Name
,
3727 IN BOOLEAN AllowExtendedCharacters
,
3728 IN OUT PGENERATE_NAME_CONTEXT Context
,
3729 OUT PUNICODE_STRING Name8dot3
3735 RtlGetCompressionWorkSpaceSize (
3736 IN USHORT CompressionFormatAndEngine
,
3737 OUT PULONG CompressBufferWorkSpaceSize
,
3738 OUT PULONG CompressFragmentWorkSpaceSize
3744 RtlGetDaclSecurityDescriptor (
3745 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3746 OUT PBOOLEAN DaclPresent
,
3748 OUT PBOOLEAN DaclDefaulted
3754 RtlGetGroupSecurityDescriptor (
3755 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3757 OUT PBOOLEAN GroupDefaulted
3763 RtlGetOwnerSecurityDescriptor (
3764 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3766 OUT PBOOLEAN OwnerDefaulted
3774 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
3775 IN UCHAR SubAuthorityCount
3781 RtlIsNameLegalDOS8Dot3 (
3782 IN PUNICODE_STRING UnicodeName
,
3783 IN PANSI_STRING AnsiName
,
3790 RtlLengthRequiredSid (
3791 IN UCHAR SubAuthorityCount
3804 RtlNtStatusToDosError (
3812 IN USHORT CompressionFormat
,
3813 IN OUT PUCHAR
*CompressedBuffer
,
3814 IN PUCHAR EndOfCompressedBufferPlus1
,
3815 OUT PUCHAR
*ChunkBuffer
,
3822 RtlSecondsSince1970ToTime (
3823 IN ULONG SecondsSince1970
,
3824 OUT PLARGE_INTEGER Time
3830 RtlSetGroupSecurityDescriptor (
3831 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
3833 IN BOOLEAN GroupDefaulted
3839 RtlSetOwnerSecurityDescriptor (
3840 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
3842 IN BOOLEAN OwnerDefaulted
3848 RtlSetSaclSecurityDescriptor (
3849 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
3850 IN BOOLEAN SaclPresent
,
3852 IN BOOLEAN SaclDefaulted
3858 RtlSubAuthorityCountSid (
3865 RtlSubAuthoritySid (
3867 IN ULONG SubAuthority
3880 SeAppendPrivileges (
3881 PACCESS_STATE AccessState
,
3882 PPRIVILEGE_SET Privileges
3888 SeAuditingFileEvents (
3889 IN BOOLEAN AccessGranted
,
3890 IN PSECURITY_DESCRIPTOR SecurityDescriptor
3896 SeAuditingFileOrGlobalEvents (
3897 IN BOOLEAN AccessGranted
,
3898 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3899 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
3905 SeCaptureSubjectContext (
3906 OUT PSECURITY_SUBJECT_CONTEXT SubjectContext
3912 SeCreateClientSecurity (
3914 IN PSECURITY_QUALITY_OF_SERVICE QualityOfService
,
3915 IN BOOLEAN RemoteClient
,
3916 OUT PSECURITY_CLIENT_CONTEXT ClientContext
3919 #if (VER_PRODUCTBUILD >= 2195)
3924 SeCreateClientSecurityFromSubjectContext (
3925 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
3926 IN PSECURITY_QUALITY_OF_SERVICE QualityOfService
,
3927 IN BOOLEAN ServerIsRemote
,
3928 OUT PSECURITY_CLIENT_CONTEXT ClientContext
3931 #endif /* (VER_PRODUCTBUILD >= 2195) */
3933 #define SeDeleteClientSecurity(C) { \
3934 if (SeTokenType((C)->ClientToken) == TokenPrimary) { \
3935 PsDereferencePrimaryToken( (C)->ClientToken ); \
3937 PsDereferenceImpersonationToken( (C)->ClientToken ); \
3944 SeDeleteObjectAuditAlarm (
3949 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
3955 IN PPRIVILEGE_SET Privileges
3961 SeImpersonateClient (
3962 IN PSECURITY_CLIENT_CONTEXT ClientContext
,
3963 IN PETHREAD ServerThread OPTIONAL
3966 #if (VER_PRODUCTBUILD >= 2195)
3971 SeImpersonateClientEx (
3972 IN PSECURITY_CLIENT_CONTEXT ClientContext
,
3973 IN PETHREAD ServerThread OPTIONAL
3976 #endif /* (VER_PRODUCTBUILD >= 2195) */
3981 SeLockSubjectContext (
3982 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
3988 SeMarkLogonSessionForTerminationNotification (
3995 SeOpenObjectAuditAlarm (
3996 IN PUNICODE_STRING ObjectTypeName
,
3997 IN PVOID Object OPTIONAL
,
3998 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL
,
3999 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4000 IN PACCESS_STATE AccessState
,
4001 IN BOOLEAN ObjectCreated
,
4002 IN BOOLEAN AccessGranted
,
4003 IN KPROCESSOR_MODE AccessMode
,
4004 OUT PBOOLEAN GenerateOnClose
4010 SeOpenObjectForDeleteAuditAlarm (
4011 IN PUNICODE_STRING ObjectTypeName
,
4012 IN PVOID Object OPTIONAL
,
4013 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL
,
4014 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4015 IN PACCESS_STATE AccessState
,
4016 IN BOOLEAN ObjectCreated
,
4017 IN BOOLEAN AccessGranted
,
4018 IN KPROCESSOR_MODE AccessMode
,
4019 OUT PBOOLEAN GenerateOnClose
4026 IN OUT PPRIVILEGE_SET RequiredPrivileges
,
4027 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
4028 IN KPROCESSOR_MODE AccessMode
4034 SeQueryAuthenticationIdToken (
4035 IN PACCESS_TOKEN Token
,
4039 #if (VER_PRODUCTBUILD >= 2195)
4044 SeQueryInformationToken (
4045 IN PACCESS_TOKEN Token
,
4046 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
4047 OUT PVOID
*TokenInformation
4050 #endif /* (VER_PRODUCTBUILD >= 2195) */
4055 SeQuerySecurityDescriptorInfo (
4056 IN PSECURITY_INFORMATION SecurityInformation
,
4057 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
4058 IN OUT PULONG Length
,
4059 IN PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
4062 #if (VER_PRODUCTBUILD >= 2195)
4067 SeQuerySessionIdToken (
4068 IN PACCESS_TOKEN Token
,
4072 #endif /* (VER_PRODUCTBUILD >= 2195) */
4074 #define SeQuerySubjectContextToken( SubjectContext ) \
4075 ( ARGUMENT_PRESENT( \
4076 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken \
4078 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken : \
4079 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
4081 typedef NTSTATUS (*PSE_LOGON_SESSION_TERMINATED_ROUTINE
) (
4088 SeRegisterLogonSessionTerminatedRoutine (
4089 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
4095 SeReleaseSubjectContext (
4096 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
4102 SeSetAccessStateGenericMapping (
4103 PACCESS_STATE AccessState
,
4104 PGENERIC_MAPPING GenericMapping
4110 SeSetSecurityDescriptorInfo (
4111 IN PVOID Object OPTIONAL
,
4112 IN PSECURITY_INFORMATION SecurityInformation
,
4113 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4114 IN OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
4115 IN POOL_TYPE PoolType
,
4116 IN PGENERIC_MAPPING GenericMapping
4119 #if (VER_PRODUCTBUILD >= 2195)
4124 SeSetSecurityDescriptorInfoEx (
4125 IN PVOID Object OPTIONAL
,
4126 IN PSECURITY_INFORMATION SecurityInformation
,
4127 IN PSECURITY_DESCRIPTOR ModificationDescriptor
,
4128 IN OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
4129 IN ULONG AutoInheritFlags
,
4130 IN POOL_TYPE PoolType
,
4131 IN PGENERIC_MAPPING GenericMapping
4138 IN PACCESS_TOKEN Token
4144 SeTokenIsRestricted (
4145 IN PACCESS_TOKEN Token
4148 #endif /* (VER_PRODUCTBUILD >= 2195) */
4154 IN PACCESS_TOKEN Token
4160 SeUnlockSubjectContext (
4161 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
4167 SeUnregisterLogonSessionTerminatedRoutine (
4168 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
4171 #if (VER_PRODUCTBUILD >= 2195)
4176 ZwAdjustPrivilegesToken (
4177 IN HANDLE TokenHandle
,
4178 IN BOOLEAN DisableAllPrivileges
,
4179 IN PTOKEN_PRIVILEGES NewState
,
4180 IN ULONG BufferLength
,
4181 OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL
,
4182 OUT PULONG ReturnLength
4185 #endif /* (VER_PRODUCTBUILD >= 2195) */
4191 IN HANDLE ThreadHandle
4197 ZwAllocateVirtualMemory (
4198 IN HANDLE ProcessHandle
,
4199 IN OUT PVOID
*BaseAddress
,
4201 IN OUT PULONG RegionSize
,
4202 IN ULONG AllocationType
,
4209 ZwAccessCheckAndAuditAlarm (
4210 IN PUNICODE_STRING SubsystemName
,
4212 IN PUNICODE_STRING ObjectTypeName
,
4213 IN PUNICODE_STRING ObjectName
,
4214 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4215 IN ACCESS_MASK DesiredAccess
,
4216 IN PGENERIC_MAPPING GenericMapping
,
4217 IN BOOLEAN ObjectCreation
,
4218 OUT PACCESS_MASK GrantedAccess
,
4219 OUT PBOOLEAN AccessStatus
,
4220 OUT PBOOLEAN GenerateOnClose
4223 #if (VER_PRODUCTBUILD >= 2195)
4229 IN HANDLE FileHandle
,
4230 OUT PIO_STATUS_BLOCK IoStatusBlock
4233 #endif /* (VER_PRODUCTBUILD >= 2195) */
4239 IN HANDLE EventHandle
4245 ZwCloseObjectAuditAlarm (
4246 IN PUNICODE_STRING SubsystemName
,
4248 IN BOOLEAN GenerateOnClose
4255 OUT PHANDLE SectionHandle
,
4256 IN ACCESS_MASK DesiredAccess
,
4257 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4258 IN PLARGE_INTEGER MaximumSize OPTIONAL
,
4259 IN ULONG SectionPageProtection
,
4260 IN ULONG AllocationAttributes
,
4261 IN HANDLE FileHandle OPTIONAL
4267 ZwCreateSymbolicLinkObject (
4268 OUT PHANDLE SymbolicLinkHandle
,
4269 IN ACCESS_MASK DesiredAccess
,
4270 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4271 IN PUNICODE_STRING TargetName
4278 IN POBJECT_ATTRIBUTES ObjectAttributes
4286 IN PUNICODE_STRING Name
4292 ZwDeviceIoControlFile (
4293 IN HANDLE FileHandle
,
4294 IN HANDLE Event OPTIONAL
,
4295 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4296 IN PVOID ApcContext OPTIONAL
,
4297 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4298 IN ULONG IoControlCode
,
4299 IN PVOID InputBuffer OPTIONAL
,
4300 IN ULONG InputBufferLength
,
4301 OUT PVOID OutputBuffer OPTIONAL
,
4302 IN ULONG OutputBufferLength
4309 IN PUNICODE_STRING String
4316 IN HANDLE SourceProcessHandle
,
4317 IN HANDLE SourceHandle
,
4318 IN HANDLE TargetProcessHandle OPTIONAL
,
4319 OUT PHANDLE TargetHandle OPTIONAL
,
4320 IN ACCESS_MASK DesiredAccess
,
4321 IN ULONG HandleAttributes
,
4329 IN HANDLE ExistingTokenHandle
,
4330 IN ACCESS_MASK DesiredAccess
,
4331 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4332 IN BOOLEAN EffectiveOnly
,
4333 IN TOKEN_TYPE TokenType
,
4334 OUT PHANDLE NewTokenHandle
4340 ZwFlushInstructionCache (
4341 IN HANDLE ProcessHandle
,
4342 IN PVOID BaseAddress OPTIONAL
,
4346 #if (VER_PRODUCTBUILD >= 2195)
4351 ZwFlushVirtualMemory (
4352 IN HANDLE ProcessHandle
,
4353 IN OUT PVOID
*BaseAddress
,
4354 IN OUT PULONG FlushSize
,
4355 OUT PIO_STATUS_BLOCK IoStatusBlock
4358 #endif /* (VER_PRODUCTBUILD >= 2195) */
4363 ZwFreeVirtualMemory (
4364 IN HANDLE ProcessHandle
,
4365 IN OUT PVOID
*BaseAddress
,
4366 IN OUT PULONG RegionSize
,
4374 IN HANDLE FileHandle
,
4375 IN HANDLE Event OPTIONAL
,
4376 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4377 IN PVOID ApcContext OPTIONAL
,
4378 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4379 IN ULONG FsControlCode
,
4380 IN PVOID InputBuffer OPTIONAL
,
4381 IN ULONG InputBufferLength
,
4382 OUT PVOID OutputBuffer OPTIONAL
,
4383 IN ULONG OutputBufferLength
4386 #if (VER_PRODUCTBUILD >= 2195)
4391 ZwInitiatePowerAction (
4392 IN POWER_ACTION SystemAction
,
4393 IN SYSTEM_POWER_STATE MinSystemState
,
4395 IN BOOLEAN Asynchronous
4398 #endif /* (VER_PRODUCTBUILD >= 2195) */
4404 /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
4405 IN PUNICODE_STRING RegistryPath
4412 IN POBJECT_ATTRIBUTES KeyObjectAttributes
,
4413 IN POBJECT_ATTRIBUTES FileObjectAttributes
4420 IN HANDLE KeyHandle
,
4421 IN HANDLE EventHandle OPTIONAL
,
4422 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4423 IN PVOID ApcContext OPTIONAL
,
4424 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4425 IN ULONG NotifyFilter
,
4426 IN BOOLEAN WatchSubtree
,
4428 IN ULONG BufferLength
,
4429 IN BOOLEAN Asynchronous
4435 ZwOpenDirectoryObject (
4436 OUT PHANDLE DirectoryHandle
,
4437 IN ACCESS_MASK DesiredAccess
,
4438 IN POBJECT_ATTRIBUTES ObjectAttributes
4445 OUT PHANDLE EventHandle
,
4446 IN ACCESS_MASK DesiredAccess
,
4447 IN POBJECT_ATTRIBUTES ObjectAttributes
4454 OUT PHANDLE ProcessHandle
,
4455 IN ACCESS_MASK DesiredAccess
,
4456 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4457 IN PCLIENT_ID ClientId OPTIONAL
4463 ZwOpenProcessToken (
4464 IN HANDLE ProcessHandle
,
4465 IN ACCESS_MASK DesiredAccess
,
4466 OUT PHANDLE TokenHandle
4473 OUT PHANDLE ThreadHandle
,
4474 IN ACCESS_MASK DesiredAccess
,
4475 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4476 IN PCLIENT_ID ClientId
4483 IN HANDLE ThreadHandle
,
4484 IN ACCESS_MASK DesiredAccess
,
4485 IN BOOLEAN OpenAsSelf
,
4486 OUT PHANDLE TokenHandle
4489 #if (VER_PRODUCTBUILD >= 2195)
4494 ZwPowerInformation (
4495 IN POWER_INFORMATION_LEVEL PowerInformationLevel
,
4496 IN PVOID InputBuffer OPTIONAL
,
4497 IN ULONG InputBufferLength
,
4498 OUT PVOID OutputBuffer OPTIONAL
,
4499 IN ULONG OutputBufferLength
4502 #endif /* (VER_PRODUCTBUILD >= 2195) */
4508 IN HANDLE EventHandle
,
4509 OUT PLONG PreviousState OPTIONAL
4515 ZwQueryDefaultLocale (
4516 IN BOOLEAN ThreadOrSystem
,
4523 ZwQueryDirectoryFile (
4524 IN HANDLE FileHandle
,
4525 IN HANDLE Event OPTIONAL
,
4526 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4527 IN PVOID ApcContext OPTIONAL
,
4528 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4529 OUT PVOID FileInformation
,
4531 IN FILE_INFORMATION_CLASS FileInformationClass
,
4532 IN BOOLEAN ReturnSingleEntry
,
4533 IN PUNICODE_STRING FileName OPTIONAL
,
4534 IN BOOLEAN RestartScan
4537 #if (VER_PRODUCTBUILD >= 2195)
4542 ZwQueryDirectoryObject (
4543 IN HANDLE DirectoryHandle
,
4546 IN BOOLEAN ReturnSingleEntry
,
4547 IN BOOLEAN RestartScan
,
4548 IN OUT PULONG Context
,
4549 OUT PULONG ReturnLength OPTIONAL
4556 IN HANDLE FileHandle
,
4557 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4560 IN BOOLEAN ReturnSingleEntry
,
4561 IN PVOID EaList OPTIONAL
,
4562 IN ULONG EaListLength
,
4563 IN PULONG EaIndex OPTIONAL
,
4564 IN BOOLEAN RestartScan
4567 #endif /* (VER_PRODUCTBUILD >= 2195) */
4572 ZwQueryInformationProcess (
4573 IN HANDLE ProcessHandle
,
4574 IN PROCESSINFOCLASS ProcessInformationClass
,
4575 OUT PVOID ProcessInformation
,
4576 IN ULONG ProcessInformationLength
,
4577 OUT PULONG ReturnLength OPTIONAL
4583 ZwQueryInformationToken (
4584 IN HANDLE TokenHandle
,
4585 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
4586 OUT PVOID TokenInformation
,
4588 OUT PULONG ResultLength
4594 ZwQuerySecurityObject (
4595 IN HANDLE FileHandle
,
4596 IN SECURITY_INFORMATION SecurityInformation
,
4597 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
4599 OUT PULONG ResultLength
4605 ZwQueryVolumeInformationFile (
4606 IN HANDLE FileHandle
,
4607 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4608 OUT PVOID FsInformation
,
4610 IN FS_INFORMATION_CLASS FsInformationClass
4617 IN POBJECT_ATTRIBUTES NewFileObjectAttributes
,
4618 IN HANDLE KeyHandle
,
4619 IN POBJECT_ATTRIBUTES OldFileObjectAttributes
4626 IN HANDLE EventHandle
,
4627 OUT PLONG PreviousState OPTIONAL
4630 #if (VER_PRODUCTBUILD >= 2195)
4636 IN HANDLE KeyHandle
,
4637 IN HANDLE FileHandle
,
4641 #endif /* (VER_PRODUCTBUILD >= 2195) */
4647 IN HANDLE KeyHandle
,
4648 IN HANDLE FileHandle
4654 ZwSetDefaultLocale (
4655 IN BOOLEAN ThreadOrSystem
,
4659 #if (VER_PRODUCTBUILD >= 2195)
4664 ZwSetDefaultUILanguage (
4665 IN LANGID LanguageId
4672 IN HANDLE FileHandle
,
4673 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4678 #endif /* (VER_PRODUCTBUILD >= 2195) */
4684 IN HANDLE EventHandle
,
4685 OUT PLONG PreviousState OPTIONAL
4691 ZwSetInformationProcess (
4692 IN HANDLE ProcessHandle
,
4693 IN PROCESSINFOCLASS ProcessInformationClass
,
4694 IN PVOID ProcessInformation
,
4695 IN ULONG ProcessInformationLength
4698 #if (VER_PRODUCTBUILD >= 2195)
4703 ZwSetSecurityObject (
4705 IN SECURITY_INFORMATION SecurityInformation
,
4706 IN PSECURITY_DESCRIPTOR SecurityDescriptor
4709 #endif /* (VER_PRODUCTBUILD >= 2195) */
4715 IN PLARGE_INTEGER NewTime
,
4716 OUT PLARGE_INTEGER OldTime OPTIONAL
4719 #if (VER_PRODUCTBUILD >= 2195)
4724 ZwSetVolumeInformationFile (
4725 IN HANDLE FileHandle
,
4726 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4727 IN PVOID FsInformation
,
4729 IN FS_INFORMATION_CLASS FsInformationClass
4732 #endif /* (VER_PRODUCTBUILD >= 2195) */
4737 ZwTerminateProcess (
4738 IN HANDLE ProcessHandle OPTIONAL
,
4739 IN NTSTATUS ExitStatus
4746 /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
4747 IN PUNICODE_STRING RegistryPath
4754 IN POBJECT_ATTRIBUTES KeyObjectAttributes
4760 ZwWaitForSingleObject (
4762 IN BOOLEAN Alertable
,
4763 IN PLARGE_INTEGER Timeout OPTIONAL
4769 ZwWaitForMultipleObjects (
4770 IN ULONG HandleCount
,
4772 IN WAIT_TYPE WaitType
,
4773 IN BOOLEAN Alertable
,
4774 IN PLARGE_INTEGER Timeout OPTIONAL
4790 #endif /* _NTIFS_ */