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.
27 /* Helper macro to enable gcc's extension. */
28 #ifndef __GNU_EXTENSION
30 #define __GNU_EXTENSION __extension__
32 #define __GNU_EXTENSION
36 #define NTKERNELAPI DECLSPEC_IMPORT
40 #define _NTIFS_INCLUDED_
47 #ifndef VER_PRODUCTBUILD
48 #define VER_PRODUCTBUILD 10000
51 #define EX_PUSH_LOCK ULONG_PTR
52 #define PEX_PUSH_LOCK PULONG_PTR
56 #define FlagOn(_F,_SF) ((_F) & (_SF))
60 #define BooleanFlagOn(F,SF) ((BOOLEAN)(((F) & (SF)) != 0))
64 #define SetFlag(_F,_SF) ((_F) |= (_SF))
68 #define ClearFlag(_F,_SF) ((_F) &= ~(_SF))
74 extern PUCHAR FsRtlLegalAnsiCharacterArray
;
76 extern DECLSPEC_IMPORT PUCHAR FsRtlLegalAnsiCharacterArray
;
78 extern PACL SePublicDefaultDacl
;
79 extern PACL SeSystemDefaultDacl
;
81 extern KSPIN_LOCK IoStatisticsLock
;
82 extern ULONG IoReadOperationCount
;
83 extern ULONG IoWriteOperationCount
;
84 extern ULONG IoOtherOperationCount
;
85 extern LARGE_INTEGER IoReadTransferCount
;
86 extern LARGE_INTEGER IoWriteTransferCount
;
87 extern LARGE_INTEGER IoOtherTransferCount
;
89 typedef STRING LSA_STRING
, *PLSA_STRING
;
90 typedef ULONG LSA_OPERATIONAL_MODE
, *PLSA_OPERATIONAL_MODE
;
92 typedef enum _SECURITY_LOGON_TYPE
94 UndefinedLogonType
= 0,
103 #if (_WIN32_WINNT >= 0x0501)
107 #if (_WIN32_WINNT >= 0x0502)
108 CachedRemoteInteractive
,
111 } SECURITY_LOGON_TYPE
, *PSECURITY_LOGON_TYPE
;
113 #define ANSI_DOS_STAR ('<')
114 #define ANSI_DOS_QM ('>')
115 #define ANSI_DOS_DOT ('"')
117 #define DOS_STAR (L'<')
118 #define DOS_QM (L'>')
119 #define DOS_DOT (L'"')
121 /* also in winnt.h */
122 #define ACCESS_MIN_MS_ACE_TYPE (0x0)
123 #define ACCESS_ALLOWED_ACE_TYPE (0x0)
124 #define ACCESS_DENIED_ACE_TYPE (0x1)
125 #define SYSTEM_AUDIT_ACE_TYPE (0x2)
126 #define SYSTEM_ALARM_ACE_TYPE (0x3)
127 #define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
128 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
129 #define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
130 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
131 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
132 #define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
133 #define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
134 #define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
135 #define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
136 #define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
137 #define ACCESS_MAX_MS_ACE_TYPE (0x8)
138 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
139 #define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
140 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
141 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
142 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
143 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
144 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
145 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
146 #define ACCESS_MAX_MS_V5_ACE_TYPE (0x10)
148 #define COMPRESSION_FORMAT_NONE (0x0000)
149 #define COMPRESSION_FORMAT_DEFAULT (0x0001)
150 #define COMPRESSION_FORMAT_LZNT1 (0x0002)
151 #define COMPRESSION_ENGINE_STANDARD (0x0000)
152 #define COMPRESSION_ENGINE_MAXIMUM (0x0100)
153 #define COMPRESSION_ENGINE_HIBER (0x0200)
155 #define FILE_ACTION_ADDED 0x00000001
156 #define FILE_ACTION_REMOVED 0x00000002
157 #define FILE_ACTION_MODIFIED 0x00000003
158 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
159 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
160 #define FILE_ACTION_ADDED_STREAM 0x00000006
161 #define FILE_ACTION_REMOVED_STREAM 0x00000007
162 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
163 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
164 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
165 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
168 #define FILE_EA_TYPE_BINARY 0xfffe
169 #define FILE_EA_TYPE_ASCII 0xfffd
170 #define FILE_EA_TYPE_BITMAP 0xfffb
171 #define FILE_EA_TYPE_METAFILE 0xfffa
172 #define FILE_EA_TYPE_ICON 0xfff9
173 #define FILE_EA_TYPE_EA 0xffee
174 #define FILE_EA_TYPE_MVMT 0xffdf
175 #define FILE_EA_TYPE_MVST 0xffde
176 #define FILE_EA_TYPE_ASN1 0xffdd
177 #define FILE_EA_TYPE_FAMILY_IDS 0xff01
179 #define FILE_NEED_EA 0x00000080
181 /* also in winnt.h */
182 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
183 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
184 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
185 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
186 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
187 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
188 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
189 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
190 #define FILE_NOTIFY_CHANGE_EA 0x00000080
191 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
192 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
193 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
194 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
195 #define FILE_NOTIFY_VALID_MASK 0x00000fff
198 #define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007
199 #define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008
201 #define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009
203 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
204 #define FILE_CASE_PRESERVED_NAMES 0x00000002
205 #define FILE_UNICODE_ON_DISK 0x00000004
206 #define FILE_PERSISTENT_ACLS 0x00000008
207 #define FILE_FILE_COMPRESSION 0x00000010
208 #define FILE_VOLUME_QUOTAS 0x00000020
209 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
210 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
211 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
212 #define FS_LFN_APIS 0x00004000
213 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
214 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
215 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
216 #define FILE_NAMED_STREAMS 0x00040000
217 #define FILE_READ_ONLY_VOLUME 0x00080000
218 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
219 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
221 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
222 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
224 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
225 #define FILE_PIPE_MESSAGE_MODE 0x00000001
227 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
228 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
230 #define FILE_PIPE_INBOUND 0x00000000
231 #define FILE_PIPE_OUTBOUND 0x00000001
232 #define FILE_PIPE_FULL_DUPLEX 0x00000002
234 #define FILE_PIPE_DISCONNECTED_STATE 0x00000001
235 #define FILE_PIPE_LISTENING_STATE 0x00000002
236 #define FILE_PIPE_CONNECTED_STATE 0x00000003
237 #define FILE_PIPE_CLOSING_STATE 0x00000004
239 #define FILE_PIPE_CLIENT_END 0x00000000
240 #define FILE_PIPE_SERVER_END 0x00000001
242 #define FILE_PIPE_READ_DATA 0x00000000
243 #define FILE_PIPE_WRITE_SPACE 0x00000001
245 #define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
246 #define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
247 #define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
248 #define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
249 #define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
250 #define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
251 #define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
252 #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
253 #define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
254 #define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
255 #define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
256 #define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
257 #define FILE_STORAGE_TYPE_MASK 0x000f0000
258 #define FILE_STORAGE_TYPE_SHIFT 16
260 #define FILE_VC_QUOTA_NONE 0x00000000
261 #define FILE_VC_QUOTA_TRACK 0x00000001
262 #define FILE_VC_QUOTA_ENFORCE 0x00000002
263 #define FILE_VC_QUOTA_MASK 0x00000003
265 #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
266 #define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008
268 #define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010
269 #define FILE_VC_LOG_QUOTA_LIMIT 0x00000020
270 #define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040
271 #define FILE_VC_LOG_VOLUME_LIMIT 0x00000080
273 #define FILE_VC_QUOTAS_INCOMPLETE 0x00000100
274 #define FILE_VC_QUOTAS_REBUILDING 0x00000200
276 #define FILE_VC_VALID_MASK 0x000003ff
278 #define FSRTL_FLAG_FILE_MODIFIED (0x01)
279 #define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
280 #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
281 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
282 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
283 #define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
284 #define FSRTL_FLAG_ADVANCED_HEADER (0x40)
285 #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
287 #define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
288 #define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02)
289 #define FSRTL_FLAG2_PURGE_WHEN_MAPPED (0x04)
290 #define FSRTL_FLAG2_IS_PAGING_FILE (0x08)
292 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
293 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
294 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
295 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
296 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG (0x04)
298 #define FSRTL_VOLUME_DISMOUNT 1
299 #define FSRTL_VOLUME_DISMOUNT_FAILED 2
300 #define FSRTL_VOLUME_LOCK 3
301 #define FSRTL_VOLUME_LOCK_FAILED 4
302 #define FSRTL_VOLUME_UNLOCK 5
303 #define FSRTL_VOLUME_MOUNT 6
305 #define FSRTL_WILD_CHARACTER 0x08
307 #define FSRTL_FAT_LEGAL 0x01
308 #define FSRTL_HPFS_LEGAL 0x02
309 #define FSRTL_NTFS_LEGAL 0x04
310 #define FSRTL_WILD_CHARACTER 0x08
311 #define FSRTL_OLE_LEGAL 0x10
312 #define FSRTL_NTFS_STREAM_LEGAL 0x14
315 #define HARDWARE_PTE HARDWARE_PTE_X86
316 #define PHARDWARE_PTE PHARDWARE_PTE_X86
319 #define IO_CHECK_CREATE_PARAMETERS 0x0200
320 #define IO_ATTACH_DEVICE 0x0400
322 #define IO_ATTACH_DEVICE_API 0x80000000
324 #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64
325 #define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024
327 #define IO_TYPE_APC 18
328 #define IO_TYPE_DPC 19
329 #define IO_TYPE_DEVICE_QUEUE 20
330 #define IO_TYPE_EVENT_PAIR 21
331 #define IO_TYPE_INTERRUPT 22
332 #define IO_TYPE_PROFILE 23
334 #define IRP_BEING_VERIFIED 0x10
336 #define MAILSLOT_CLASS_FIRSTCLASS 1
337 #define MAILSLOT_CLASS_SECONDCLASS 2
339 #define MAILSLOT_SIZE_AUTO 0
341 #define MEM_DOS_LIM 0x40000000
343 #define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
345 #define OB_TYPE_TYPE 1
346 #define OB_TYPE_DIRECTORY 2
347 #define OB_TYPE_SYMBOLIC_LINK 3
348 #define OB_TYPE_TOKEN 4
349 #define OB_TYPE_PROCESS 5
350 #define OB_TYPE_THREAD 6
351 #define OB_TYPE_EVENT 7
352 #define OB_TYPE_EVENT_PAIR 8
353 #define OB_TYPE_MUTANT 9
354 #define OB_TYPE_SEMAPHORE 10
355 #define OB_TYPE_TIMER 11
356 #define OB_TYPE_PROFILE 12
357 #define OB_TYPE_WINDOW_STATION 13
358 #define OB_TYPE_DESKTOP 14
359 #define OB_TYPE_SECTION 15
360 #define OB_TYPE_KEY 16
361 #define OB_TYPE_PORT 17
362 #define OB_TYPE_ADAPTER 18
363 #define OB_TYPE_CONTROLLER 19
364 #define OB_TYPE_DEVICE 20
365 #define OB_TYPE_DRIVER 21
366 #define OB_TYPE_IO_COMPLETION 22
367 #define OB_TYPE_FILE 23
370 #define PIN_EXCLUSIVE (2)
371 #define PIN_NO_READ (4)
372 #define PIN_IF_BCB (8)
374 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
375 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
377 #define SEC_BASED 0x00200000
379 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
380 #define SECURITY_WORLD_RID (0x00000000L)
382 #define SID_REVISION 1
383 #define SID_MAX_SUB_AUTHORITIES 15
384 #define SID_RECOMMENDED_SUB_AUTHORITIES 1
386 #define TOKEN_ASSIGN_PRIMARY (0x0001)
387 #define TOKEN_DUPLICATE (0x0002)
388 #define TOKEN_IMPERSONATE (0x0004)
389 #define TOKEN_QUERY (0x0008)
390 #define TOKEN_QUERY_SOURCE (0x0010)
391 #define TOKEN_ADJUST_PRIVILEGES (0x0020)
392 #define TOKEN_ADJUST_GROUPS (0x0040)
393 #define TOKEN_ADJUST_DEFAULT (0x0080)
394 #define TOKEN_ADJUST_SESSIONID (0x0100)
396 #define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
397 TOKEN_ASSIGN_PRIMARY |\
401 TOKEN_QUERY_SOURCE |\
402 TOKEN_ADJUST_PRIVILEGES |\
403 TOKEN_ADJUST_GROUPS |\
404 TOKEN_ADJUST_DEFAULT |\
405 TOKEN_ADJUST_SESSIONID)
407 #define TOKEN_READ (STANDARD_RIGHTS_READ |\
410 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\
411 TOKEN_ADJUST_PRIVILEGES |\
412 TOKEN_ADJUST_GROUPS |\
413 TOKEN_ADJUST_DEFAULT)
415 #define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
417 #define TOKEN_SOURCE_LENGTH 8
420 #define TOKEN_HAS_TRAVERSE_PRIVILEGE 0x01
421 #define TOKEN_HAS_BACKUP_PRIVILEGE 0x02
422 #define TOKEN_HAS_RESTORE_PRIVILEGE 0x04
423 #define TOKEN_HAS_ADMIN_GROUP 0x08
424 #define TOKEN_WRITE_RESTRICTED 0x08
425 #define TOKEN_IS_RESTRICTED 0x10
426 #define SE_BACKUP_PRIVILEGES_CHECKED 0x0100
428 #define VACB_MAPPING_GRANULARITY (0x40000)
429 #define VACB_OFFSET_SHIFT (18)
431 #define SE_OWNER_DEFAULTED 0x0001
432 #define SE_GROUP_DEFAULTED 0x0002
433 #define SE_DACL_PRESENT 0x0004
434 #define SE_DACL_DEFAULTED 0x0008
435 #define SE_SACL_PRESENT 0x0010
436 #define SE_SACL_DEFAULTED 0x0020
437 #define SE_DACL_UNTRUSTED 0x0040
438 #define SE_SERVER_SECURITY 0x0080
439 #define SE_DACL_AUTO_INHERIT_REQ 0x0100
440 #define SE_SACL_AUTO_INHERIT_REQ 0x0200
441 #define SE_DACL_AUTO_INHERITED 0x0400
442 #define SE_SACL_AUTO_INHERITED 0x0800
443 #define SE_DACL_PROTECTED 0x1000
444 #define SE_SACL_PROTECTED 0x2000
445 #define SE_RM_CONTROL_VALID 0x4000
446 #define SE_SELF_RELATIVE 0x8000
449 #define _AUDIT_EVENT_TYPE_HACK 0
451 #if (_AUDIT_EVENT_TYPE_HACK == 1)
454 typedef enum _AUDIT_EVENT_TYPE
456 AuditEventObjectAccess
,
457 AuditEventDirectoryServiceAccess
458 } AUDIT_EVENT_TYPE
, *PAUDIT_EVENT_TYPE
;
461 #define AUDIT_ALLOW_NO_PRIVILEGE 0x1
463 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
464 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
465 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
466 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
467 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
468 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
469 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
470 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
471 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
473 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
474 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
475 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
477 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
478 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
479 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
482 #define FSCTL_MARK_AS_SYSTEM_HIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
483 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
484 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
485 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
486 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
487 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
489 #if (VER_PRODUCTBUILD >= 1381)
491 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
492 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
493 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS)
494 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
495 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
496 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
497 #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
498 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
500 #endif /* (VER_PRODUCTBUILD >= 1381) */
502 #if (VER_PRODUCTBUILD >= 2195)
504 #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
505 #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
506 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
508 #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
509 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA)
510 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
511 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA)
512 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA)
513 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
514 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA)
515 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_READ_DATA)
516 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA)
517 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_READ_DATA)
518 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA)
519 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
520 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA)
521 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
522 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
523 #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
524 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
525 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
526 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_ANY_ACCESS)
527 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_ANY_ACCESS)
528 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_READ_DATA)
529 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_READ_DATA)
530 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_READ_DATA)
531 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
532 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
533 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
534 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
535 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
536 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
537 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
538 #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
539 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
540 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
541 #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
542 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
543 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
545 #endif /* (VER_PRODUCTBUILD >= 2195) */
547 #define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
549 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
550 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
551 #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
552 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
553 #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
554 #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
555 #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
556 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
558 #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
559 #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
560 #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
561 #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
562 #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
563 #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
564 #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
565 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
566 #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
567 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
568 #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
569 #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
570 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
571 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
573 #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
575 typedef PVOID OPLOCK
, *POPLOCK
;
580 struct _RTL_AVL_TABLE
;
581 struct _RTL_GENERIC_TABLE
;
589 typedef PVOID PNOTIFY_SYNC
;
591 typedef enum _FAST_IO_POSSIBLE
{
597 typedef enum _FILE_STORAGE_TYPE
{
598 StorageTypeDefault
= 1,
599 StorageTypeDirectory
,
601 StorageTypeJunctionPoint
,
603 StorageTypeStructuredStorage
,
604 StorageTypeEmbedding
,
608 typedef enum _OBJECT_INFORMATION_CLASS
610 ObjectBasicInformation
,
611 ObjectNameInformation
,
612 ObjectTypeInformation
,
613 ObjectTypesInformation
,
614 ObjectHandleFlagInformation
,
615 ObjectSessionInformation
,
617 } OBJECT_INFORMATION_CLASS
;
619 typedef struct _OBJECT_BASIC_INFORMATION
622 ACCESS_MASK GrantedAccess
;
625 ULONG PagedPoolCharge
;
626 ULONG NonPagedPoolCharge
;
630 ULONG SecurityDescriptorSize
;
631 LARGE_INTEGER CreationTime
;
632 } OBJECT_BASIC_INFORMATION
, *POBJECT_BASIC_INFORMATION
;
634 typedef struct _KAPC_STATE
{
635 LIST_ENTRY ApcListHead
[2];
637 BOOLEAN KernelApcInProgress
;
638 BOOLEAN KernelApcPending
;
639 BOOLEAN UserApcPending
;
640 } KAPC_STATE
, *PKAPC_STATE
, *RESTRICTED_POINTER PRKAPC_STATE
;
641 #define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
643 typedef struct _BITMAP_RANGE
{
646 ULONG FirstDirtyPage
;
650 } BITMAP_RANGE
, *PBITMAP_RANGE
;
652 typedef struct _CACHE_UNINITIALIZE_EVENT
{
653 struct _CACHE_UNINITIALIZE_EVENT
*Next
;
655 } CACHE_UNINITIALIZE_EVENT
, *PCACHE_UNINITIALIZE_EVENT
;
657 typedef struct _CC_FILE_SIZES
{
658 LARGE_INTEGER AllocationSize
;
659 LARGE_INTEGER FileSize
;
660 LARGE_INTEGER ValidDataLength
;
661 } CC_FILE_SIZES
, *PCC_FILE_SIZES
;
663 typedef struct _COMPRESSED_DATA_INFO
{
664 USHORT CompressionFormatAndEngine
;
665 UCHAR CompressionUnitShift
;
669 USHORT NumberOfChunks
;
670 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
671 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
673 typedef struct _SID_IDENTIFIER_AUTHORITY
{
675 } SID_IDENTIFIER_AUTHORITY
,*PSID_IDENTIFIER_AUTHORITY
,*LPSID_IDENTIFIER_AUTHORITY
;
677 typedef struct _SID
{
679 UCHAR SubAuthorityCount
;
680 SID_IDENTIFIER_AUTHORITY IdentifierAuthority
;
681 ULONG SubAuthority
[ANYSIZE_ARRAY
];
683 typedef struct _SID_AND_ATTRIBUTES
{
686 } SID_AND_ATTRIBUTES
, *PSID_AND_ATTRIBUTES
;
687 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY
[ANYSIZE_ARRAY
];
688 typedef SID_AND_ATTRIBUTES_ARRAY
*PSID_AND_ATTRIBUTES_ARRAY
;
693 // Universal well-known SIDs
695 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
696 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
697 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
698 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
699 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
700 #define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
702 #define SECURITY_NULL_RID (0x00000000L)
703 #define SECURITY_WORLD_RID (0x00000000L)
704 #define SECURITY_LOCAL_RID (0x00000000L)
706 #define SECURITY_CREATOR_OWNER_RID (0x00000000L)
707 #define SECURITY_CREATOR_GROUP_RID (0x00000001L)
709 #define SECURITY_CREATOR_OWNER_SERVER_RID (0x00000002L)
710 #define SECURITY_CREATOR_GROUP_SERVER_RID (0x00000003L)
712 #define SECURITY_CREATOR_OWNER_RIGHTS_RID (0x00000004L)
717 // NT well-known SIDs
719 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
721 #define SECURITY_DIALUP_RID (0x00000001L)
722 #define SECURITY_NETWORK_RID (0x00000002L)
723 #define SECURITY_BATCH_RID (0x00000003L)
724 #define SECURITY_INTERACTIVE_RID (0x00000004L)
725 #define SECURITY_LOGON_IDS_RID (0x00000005L)
726 #define SECURITY_LOGON_IDS_RID_COUNT (3L)
727 #define SECURITY_SERVICE_RID (0x00000006L)
728 #define SECURITY_ANONYMOUS_LOGON_RID (0x00000007L)
729 #define SECURITY_PROXY_RID (0x00000008L)
730 #define SECURITY_ENTERPRISE_CONTROLLERS_RID (0x00000009L)
731 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
732 #define SECURITY_PRINCIPAL_SELF_RID (0x0000000AL)
733 #define SECURITY_AUTHENTICATED_USER_RID (0x0000000BL)
734 #define SECURITY_RESTRICTED_CODE_RID (0x0000000CL)
735 #define SECURITY_TERMINAL_SERVER_RID (0x0000000DL)
736 #define SECURITY_REMOTE_LOGON_RID (0x0000000EL)
737 #define SECURITY_THIS_ORGANIZATION_RID (0x0000000FL)
738 #define SECURITY_IUSER_RID (0x00000011L)
739 #define SECURITY_LOCAL_SYSTEM_RID (0x00000012L)
740 #define SECURITY_LOCAL_SERVICE_RID (0x00000013L)
741 #define SECURITY_NETWORK_SERVICE_RID (0x00000014L)
743 #define SECURITY_NT_NON_UNIQUE (0x00000015L)
744 #define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT (3L)
746 #define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID (0x00000016L)
748 #define SECURITY_BUILTIN_DOMAIN_RID (0x00000020L)
749 #define SECURITY_WRITE_RESTRICTED_CODE_RID (0x00000021L)
752 #define SECURITY_PACKAGE_BASE_RID (0x00000040L)
753 #define SECURITY_PACKAGE_RID_COUNT (2L)
754 #define SECURITY_PACKAGE_NTLM_RID (0x0000000AL)
755 #define SECURITY_PACKAGE_SCHANNEL_RID (0x0000000EL)
756 #define SECURITY_PACKAGE_DIGEST_RID (0x00000015L)
758 #define SECURITY_MIN_BASE_RID (0x00000050L)
760 #define SECURITY_SERVICE_ID_BASE_RID (0x00000050L)
761 #define SECURITY_SERVICE_ID_RID_COUNT (6L)
763 #define SECURITY_RESERVED_ID_BASE_RID (0x00000051L)
765 #define SECURITY_APPPOOL_ID_BASE_RID (0x00000052L)
766 #define SECURITY_APPPOOL_ID_RID_COUNT (6L)
768 #define SECURITY_VIRTUALSERVER_ID_BASE_RID (0x00000053L)
769 #define SECURITY_VIRTUALSERVER_ID_RID_COUNT (6L)
771 #define SECURITY_MAX_BASE_RID (0x0000006FL)
773 #define SECURITY_MAX_ALWAYS_FILTERED (0x000003E7L)
774 #define SECURITY_MIN_NEVER_FILTERED (0x000003E8L)
776 #define SECURITY_OTHER_ORGANIZATION_RID (0x000003E8L)
781 // Well-known domain relative sub-authority values (RIDs)
783 #define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS (0x000001F2L)
785 #define FOREST_USER_RID_MAX (0x000001F3L)
790 #define DOMAIN_USER_RID_ADMIN (0x000001F4L)
791 #define DOMAIN_USER_RID_GUEST (0x000001F5L)
792 #define DOMAIN_USER_RID_KRBTGT (0x000001F6L)
794 #define DOMAIN_USER_RID_MAX (0x000003E7L)
799 #define DOMAIN_GROUP_RID_ADMINS (0x00000200L)
800 #define DOMAIN_GROUP_RID_USERS (0x00000201L)
801 #define DOMAIN_GROUP_RID_GUESTS (0x00000202L)
802 #define DOMAIN_GROUP_RID_COMPUTERS (0x00000203L)
803 #define DOMAIN_GROUP_RID_CONTROLLERS (0x00000204L)
804 #define DOMAIN_GROUP_RID_CERT_ADMINS (0x00000205L)
805 #define DOMAIN_GROUP_RID_SCHEMA_ADMINS (0x00000206L)
806 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (0x00000207L)
807 #define DOMAIN_GROUP_RID_POLICY_ADMINS (0x00000208L)
808 #define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (0x00000209L)
811 // Well-known aliases
813 #define DOMAIN_ALIAS_RID_ADMINS (0x00000220L)
814 #define DOMAIN_ALIAS_RID_USERS (0x00000221L)
815 #define DOMAIN_ALIAS_RID_GUESTS (0x00000222L)
816 #define DOMAIN_ALIAS_RID_POWER_USERS (0x00000223L)
818 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS (0x00000224L)
819 #define DOMAIN_ALIAS_RID_SYSTEM_OPS (0x00000225L)
820 #define DOMAIN_ALIAS_RID_PRINT_OPS (0x00000226L)
821 #define DOMAIN_ALIAS_RID_BACKUP_OPS (0x00000227L)
823 #define DOMAIN_ALIAS_RID_REPLICATOR (0x00000228L)
824 #define DOMAIN_ALIAS_RID_RAS_SERVERS (0x00000229L)
825 #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS (0x0000022AL)
826 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS (0x0000022BL)
827 #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS (0x0000022CL)
828 #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS (0x0000022DL)
830 #define DOMAIN_ALIAS_RID_MONITORING_USERS (0x0000022EL)
831 #define DOMAIN_ALIAS_RID_LOGGING_USERS (0x0000022FL)
832 #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS (0x00000230L)
833 #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS (0x00000231L)
834 #define DOMAIN_ALIAS_RID_DCOM_USERS (0x00000232L)
835 #define DOMAIN_ALIAS_RID_IUSERS (0x00000238L)
836 #define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS (0x00000239L)
837 #define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP (0x0000023BL)
838 #define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (0x0000023CL)
839 #define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP (0x0000023DL)
840 #define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP (0x0000023EL)
843 #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
844 #define SECURITY_MANDATORY_UNTRUSTED_RID (0x00000000L)
845 #define SECURITY_MANDATORY_LOW_RID (0x00001000L)
846 #define SECURITY_MANDATORY_MEDIUM_RID (0x00002000L)
847 #define SECURITY_MANDATORY_HIGH_RID (0x00003000L)
848 #define SECURITY_MANDATORY_SYSTEM_RID (0x00004000L)
849 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID (0x00005000L)
852 // SECURITY_MANDATORY_MAXIMUM_USER_RID is the highest RID that
853 // can be set by a usermode caller.
855 #define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
857 #define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
860 // Allocate the System Luid. The first 1000 LUIDs are reserved.
861 // Use #999 here (0x3e7 = 999)
863 #define SYSTEM_LUID { 0x3e7, 0x0 }
864 #define ANONYMOUS_LOGON_LUID { 0x3e6, 0x0 }
865 #define LOCALSERVICE_LUID { 0x3e5, 0x0 }
866 #define NETWORKSERVICE_LUID { 0x3e4, 0x0 }
867 #define IUSER_LUID { 0x3e3, 0x0 }
871 typedef struct _TOKEN_SOURCE
{
872 CHAR SourceName
[TOKEN_SOURCE_LENGTH
];
873 LUID SourceIdentifier
;
874 } TOKEN_SOURCE
,*PTOKEN_SOURCE
;
875 typedef struct _TOKEN_CONTROL
{
877 LUID AuthenticationId
;
879 TOKEN_SOURCE TokenSource
;
880 } TOKEN_CONTROL
,*PTOKEN_CONTROL
;
881 typedef struct _TOKEN_DEFAULT_DACL
{
883 } TOKEN_DEFAULT_DACL
,*PTOKEN_DEFAULT_DACL
;
884 typedef struct _TOKEN_GROUPS
{
886 SID_AND_ATTRIBUTES Groups
[ANYSIZE_ARRAY
];
887 } TOKEN_GROUPS
,*PTOKEN_GROUPS
,*LPTOKEN_GROUPS
;
888 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES
{
891 PSID_AND_ATTRIBUTES Sids
;
892 ULONG RestrictedSidCount
;
893 ULONG RestrictedSidLength
;
894 PSID_AND_ATTRIBUTES RestrictedSids
;
895 ULONG PrivilegeCount
;
896 ULONG PrivilegeLength
;
897 PLUID_AND_ATTRIBUTES Privileges
;
898 LUID AuthenticationId
;
899 } TOKEN_GROUPS_AND_PRIVILEGES
, *PTOKEN_GROUPS_AND_PRIVILEGES
;
900 typedef struct _TOKEN_ORIGIN
{
901 LUID OriginatingLogonSession
;
902 } TOKEN_ORIGIN
, *PTOKEN_ORIGIN
;
903 typedef struct _TOKEN_OWNER
{
905 } TOKEN_OWNER
,*PTOKEN_OWNER
;
906 typedef struct _TOKEN_PRIMARY_GROUP
{
908 } TOKEN_PRIMARY_GROUP
,*PTOKEN_PRIMARY_GROUP
;
909 typedef struct _TOKEN_PRIVILEGES
{
910 ULONG PrivilegeCount
;
911 LUID_AND_ATTRIBUTES Privileges
[ANYSIZE_ARRAY
];
912 } TOKEN_PRIVILEGES
,*PTOKEN_PRIVILEGES
,*LPTOKEN_PRIVILEGES
;
913 typedef enum tagTOKEN_TYPE
{
916 } TOKEN_TYPE
,*PTOKEN_TYPE
;
917 typedef struct _TOKEN_STATISTICS
{
919 LUID AuthenticationId
;
920 LARGE_INTEGER ExpirationTime
;
921 TOKEN_TYPE TokenType
;
922 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
923 ULONG DynamicCharged
;
924 ULONG DynamicAvailable
;
926 ULONG PrivilegeCount
;
928 } TOKEN_STATISTICS
, *PTOKEN_STATISTICS
;
929 typedef struct _TOKEN_USER
{
930 SID_AND_ATTRIBUTES User
;
931 } TOKEN_USER
, *PTOKEN_USER
;
932 typedef USHORT SECURITY_DESCRIPTOR_CONTROL
,*PSECURITY_DESCRIPTOR_CONTROL
;
933 typedef struct _SECURITY_DESCRIPTOR
{
936 SECURITY_DESCRIPTOR_CONTROL Control
;
941 } SECURITY_DESCRIPTOR
, *PISECURITY_DESCRIPTOR
;
943 #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
945 typedef struct _OBJECT_TYPE_LIST
{
949 } OBJECT_TYPE_LIST
, *POBJECT_TYPE_LIST
;
951 typedef struct _SECURITY_DESCRIPTOR_RELATIVE
{
954 SECURITY_DESCRIPTOR_CONTROL Control
;
959 } SECURITY_DESCRIPTOR_RELATIVE
, *PISECURITY_DESCRIPTOR_RELATIVE
;
960 typedef enum _TOKEN_INFORMATION_CLASS
{
961 TokenUser
=1,TokenGroups
,TokenPrivileges
,TokenOwner
,
962 TokenPrimaryGroup
,TokenDefaultDacl
,TokenSource
,TokenType
,
963 TokenImpersonationLevel
,TokenStatistics
,TokenRestrictedSids
,
964 TokenSessionId
,TokenGroupsAndPrivileges
,TokenSessionReference
,
965 TokenSandBoxInert
,TokenAuditPolicy
,TokenOrigin
,
966 } TOKEN_INFORMATION_CLASS
;
968 #define SYMLINK_FLAG_RELATIVE 1
970 typedef struct _REPARSE_DATA_BUFFER
{
972 USHORT ReparseDataLength
;
974 __GNU_EXTENSION
union {
976 USHORT SubstituteNameOffset
;
977 USHORT SubstituteNameLength
;
978 USHORT PrintNameOffset
;
979 USHORT PrintNameLength
;
982 } SymbolicLinkReparseBuffer
;
984 USHORT SubstituteNameOffset
;
985 USHORT SubstituteNameLength
;
986 USHORT PrintNameOffset
;
987 USHORT PrintNameLength
;
989 } MountPointReparseBuffer
;
992 } GenericReparseBuffer
;
994 } REPARSE_DATA_BUFFER
, *PREPARSE_DATA_BUFFER
;
999 // MicroSoft reparse point tags
1001 #define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
1002 #define IO_REPARSE_TAG_HSM (0xC0000004L)
1003 #define IO_REPARSE_TAG_DRIVE_EXTENDER (0x80000005L)
1004 #define IO_REPARSE_TAG_HSM2 (0x80000006L)
1005 #define IO_REPARSE_TAG_SIS (0x80000007L)
1006 #define IO_REPARSE_TAG_DFS (0x8000000AL)
1007 #define IO_REPARSE_TAG_FILTER_MANAGER (0x8000000BL)
1008 #define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
1009 #define IO_REPARSE_TAG_IIS_CACHE (0xA0000010L)
1010 #define IO_REPARSE_TAG_DFSR (0x80000012L)
1013 // Reserved reparse tags
1015 #define IO_REPARSE_TAG_RESERVED_ZERO (0)
1016 #define IO_REPARSE_TAG_RESERVED_ONE (1)
1017 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
1020 #define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
1022 typedef struct _FILE_ACCESS_INFORMATION
{
1023 ACCESS_MASK AccessFlags
;
1024 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
1026 typedef struct _FILE_ALLOCATION_INFORMATION
{
1027 LARGE_INTEGER AllocationSize
;
1028 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
1030 typedef struct _FILE_BOTH_DIR_INFORMATION
{
1031 ULONG NextEntryOffset
;
1033 LARGE_INTEGER CreationTime
;
1034 LARGE_INTEGER LastAccessTime
;
1035 LARGE_INTEGER LastWriteTime
;
1036 LARGE_INTEGER ChangeTime
;
1037 LARGE_INTEGER EndOfFile
;
1038 LARGE_INTEGER AllocationSize
;
1039 ULONG FileAttributes
;
1040 ULONG FileNameLength
;
1042 CCHAR ShortNameLength
;
1043 WCHAR ShortName
[12];
1045 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
1047 typedef struct _FILE_COMPLETION_INFORMATION
{
1050 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
1052 typedef struct _FILE_COMPRESSION_INFORMATION
{
1053 LARGE_INTEGER CompressedFileSize
;
1054 USHORT CompressionFormat
;
1055 UCHAR CompressionUnitShift
;
1059 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
1061 typedef struct _FILE_COPY_ON_WRITE_INFORMATION
{
1062 BOOLEAN ReplaceIfExists
;
1063 HANDLE RootDirectory
;
1064 ULONG FileNameLength
;
1066 } FILE_COPY_ON_WRITE_INFORMATION
, *PFILE_COPY_ON_WRITE_INFORMATION
;
1068 typedef struct _FILE_DIRECTORY_INFORMATION
{
1069 ULONG NextEntryOffset
;
1071 LARGE_INTEGER CreationTime
;
1072 LARGE_INTEGER LastAccessTime
;
1073 LARGE_INTEGER LastWriteTime
;
1074 LARGE_INTEGER ChangeTime
;
1075 LARGE_INTEGER EndOfFile
;
1076 LARGE_INTEGER AllocationSize
;
1077 ULONG FileAttributes
;
1078 ULONG FileNameLength
;
1080 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
1082 typedef struct _FILE_FULL_DIRECTORY_INFORMATION
{
1083 ULONG NextEntryOffset
;
1085 LARGE_INTEGER CreationTime
;
1086 LARGE_INTEGER LastAccessTime
;
1087 LARGE_INTEGER LastWriteTime
;
1088 LARGE_INTEGER ChangeTime
;
1089 LARGE_INTEGER EndOfFile
;
1090 LARGE_INTEGER AllocationSize
;
1091 ULONG FileAttributes
;
1092 ULONG FileNameLength
;
1094 WCHAR FileName
[ANYSIZE_ARRAY
];
1095 } FILE_FULL_DIRECTORY_INFORMATION
, *PFILE_FULL_DIRECTORY_INFORMATION
;
1097 typedef struct _FILE_ID_FULL_DIR_INFORMATION
{
1098 ULONG NextEntryOffset
;
1100 LARGE_INTEGER CreationTime
;
1101 LARGE_INTEGER LastAccessTime
;
1102 LARGE_INTEGER LastWriteTime
;
1103 LARGE_INTEGER ChangeTime
;
1104 LARGE_INTEGER EndOfFile
;
1105 LARGE_INTEGER AllocationSize
;
1106 ULONG FileAttributes
;
1107 ULONG FileNameLength
;
1109 LARGE_INTEGER FileId
;
1111 } FILE_ID_FULL_DIR_INFORMATION
, *PFILE_ID_FULL_DIR_INFORMATION
;
1113 typedef struct _FILE_ID_BOTH_DIR_INFORMATION
{
1114 ULONG NextEntryOffset
;
1116 LARGE_INTEGER CreationTime
;
1117 LARGE_INTEGER LastAccessTime
;
1118 LARGE_INTEGER LastWriteTime
;
1119 LARGE_INTEGER ChangeTime
;
1120 LARGE_INTEGER EndOfFile
;
1121 LARGE_INTEGER AllocationSize
;
1122 ULONG FileAttributes
;
1123 ULONG FileNameLength
;
1125 CCHAR ShortNameLength
;
1126 WCHAR ShortName
[12];
1127 LARGE_INTEGER FileId
;
1129 } FILE_ID_BOTH_DIR_INFORMATION
, *PFILE_ID_BOTH_DIR_INFORMATION
;
1131 typedef struct _FILE_EA_INFORMATION
{
1133 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
1135 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
1136 ULONG FileSystemAttributes
;
1137 ULONG MaximumComponentNameLength
;
1138 ULONG FileSystemNameLength
;
1139 WCHAR FileSystemName
[1];
1140 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
1142 typedef struct _FILE_FS_CONTROL_INFORMATION
{
1143 LARGE_INTEGER FreeSpaceStartFiltering
;
1144 LARGE_INTEGER FreeSpaceThreshold
;
1145 LARGE_INTEGER FreeSpaceStopFiltering
;
1146 LARGE_INTEGER DefaultQuotaThreshold
;
1147 LARGE_INTEGER DefaultQuotaLimit
;
1148 ULONG FileSystemControlFlags
;
1149 } FILE_FS_CONTROL_INFORMATION
, *PFILE_FS_CONTROL_INFORMATION
;
1151 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
1152 LARGE_INTEGER TotalAllocationUnits
;
1153 LARGE_INTEGER CallerAvailableAllocationUnits
;
1154 LARGE_INTEGER ActualAvailableAllocationUnits
;
1155 ULONG SectorsPerAllocationUnit
;
1156 ULONG BytesPerSector
;
1157 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
1159 typedef struct _FILE_FS_LABEL_INFORMATION
{
1160 ULONG VolumeLabelLength
;
1161 WCHAR VolumeLabel
[1];
1162 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1164 #if (VER_PRODUCTBUILD >= 2195)
1166 typedef struct _FILE_FS_OBJECT_ID_INFORMATION
{
1168 UCHAR ExtendedInfo
[48];
1169 } FILE_FS_OBJECT_ID_INFORMATION
, *PFILE_FS_OBJECT_ID_INFORMATION
;
1171 #endif /* (VER_PRODUCTBUILD >= 2195) */
1173 typedef struct _FILE_FS_SIZE_INFORMATION
{
1174 LARGE_INTEGER TotalAllocationUnits
;
1175 LARGE_INTEGER AvailableAllocationUnits
;
1176 ULONG SectorsPerAllocationUnit
;
1177 ULONG BytesPerSector
;
1178 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1180 typedef struct _FILE_FS_VOLUME_INFORMATION
{
1181 LARGE_INTEGER VolumeCreationTime
;
1182 ULONG VolumeSerialNumber
;
1183 ULONG VolumeLabelLength
;
1184 BOOLEAN SupportsObjects
;
1185 WCHAR VolumeLabel
[1];
1186 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1188 typedef struct _FILE_FS_OBJECTID_INFORMATION
1191 UCHAR ExtendedInfo
[48];
1192 } FILE_FS_OBJECTID_INFORMATION
, *PFILE_FS_OBJECTID_INFORMATION
;
1194 typedef struct _FILE_FS_DRIVER_PATH_INFORMATION
1196 BOOLEAN DriverInPath
;
1197 ULONG DriverNameLength
;
1198 WCHAR DriverName
[1];
1199 } FILE_FS_DRIVER_PATH_INFORMATION
, *PFILE_FS_DRIVER_PATH_INFORMATION
;
1201 typedef struct _FILE_FULL_DIR_INFORMATION
{
1202 ULONG NextEntryOffset
;
1204 LARGE_INTEGER CreationTime
;
1205 LARGE_INTEGER LastAccessTime
;
1206 LARGE_INTEGER LastWriteTime
;
1207 LARGE_INTEGER ChangeTime
;
1208 LARGE_INTEGER EndOfFile
;
1209 LARGE_INTEGER AllocationSize
;
1210 ULONG FileAttributes
;
1211 ULONG FileNameLength
;
1214 } FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
1216 typedef struct _FILE_GET_EA_INFORMATION
{
1217 ULONG NextEntryOffset
;
1220 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
1222 typedef struct _FILE_GET_QUOTA_INFORMATION
{
1223 ULONG NextEntryOffset
;
1226 } FILE_GET_QUOTA_INFORMATION
, *PFILE_GET_QUOTA_INFORMATION
;
1228 typedef struct _FILE_QUOTA_INFORMATION
1230 ULONG NextEntryOffset
;
1232 LARGE_INTEGER ChangeTime
;
1233 LARGE_INTEGER QuotaUsed
;
1234 LARGE_INTEGER QuotaThreshold
;
1235 LARGE_INTEGER QuotaLimit
;
1237 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
1239 typedef struct _FILE_INTERNAL_INFORMATION
{
1240 LARGE_INTEGER IndexNumber
;
1241 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
1243 typedef struct _FILE_LINK_INFORMATION
{
1244 BOOLEAN ReplaceIfExists
;
1245 HANDLE RootDirectory
;
1246 ULONG FileNameLength
;
1248 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
1250 typedef struct _FILE_LOCK_INFO
1252 LARGE_INTEGER StartingByte
;
1253 LARGE_INTEGER Length
;
1254 BOOLEAN ExclusiveLock
;
1256 PFILE_OBJECT FileObject
;
1258 LARGE_INTEGER EndingByte
;
1259 } FILE_LOCK_INFO
, *PFILE_LOCK_INFO
;
1261 typedef struct _FILE_REPARSE_POINT_INFORMATION
1263 LONGLONG FileReference
;
1265 } FILE_REPARSE_POINT_INFORMATION
, *PFILE_REPARSE_POINT_INFORMATION
;
1267 typedef struct _FILE_MOVE_CLUSTER_INFORMATION
1270 HANDLE RootDirectory
;
1271 ULONG FileNameLength
;
1273 } FILE_MOVE_CLUSTER_INFORMATION
, *PFILE_MOVE_CLUSTER_INFORMATION
;
1275 typedef struct _FILE_NOTIFY_INFORMATION
1277 ULONG NextEntryOffset
;
1279 ULONG FileNameLength
;
1281 } FILE_NOTIFY_INFORMATION
, *PFILE_NOTIFY_INFORMATION
;
1283 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
1284 typedef struct _FILE_SHARED_LOCK_ENTRY
{
1287 FILE_LOCK_INFO FileLock
;
1288 } FILE_SHARED_LOCK_ENTRY
, *PFILE_SHARED_LOCK_ENTRY
;
1290 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
1291 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY
{
1292 LIST_ENTRY ListEntry
;
1295 FILE_LOCK_INFO FileLock
;
1296 } FILE_EXCLUSIVE_LOCK_ENTRY
, *PFILE_EXCLUSIVE_LOCK_ENTRY
;
1298 typedef NTSTATUS (NTAPI
*PCOMPLETE_LOCK_IRP_ROUTINE
) (
1303 typedef VOID (NTAPI
*PUNLOCK_ROUTINE
) (
1305 IN PFILE_LOCK_INFO FileLockInfo
1308 typedef struct _FILE_LOCK
{
1309 PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine
;
1310 PUNLOCK_ROUTINE UnlockRoutine
;
1311 BOOLEAN FastIoIsQuestionable
;
1313 PVOID LockInformation
;
1314 FILE_LOCK_INFO LastReturnedLockInfo
;
1315 PVOID LastReturnedLock
;
1316 } FILE_LOCK
, *PFILE_LOCK
;
1318 typedef struct _FILE_MAILSLOT_PEEK_BUFFER
{
1319 ULONG ReadDataAvailable
;
1320 ULONG NumberOfMessages
;
1321 ULONG MessageLength
;
1322 } FILE_MAILSLOT_PEEK_BUFFER
, *PFILE_MAILSLOT_PEEK_BUFFER
;
1324 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
{
1325 ULONG MaximumMessageSize
;
1326 ULONG MailslotQuota
;
1327 ULONG NextMessageSize
;
1328 ULONG MessagesAvailable
;
1329 LARGE_INTEGER ReadTimeout
;
1330 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
1332 typedef struct _FILE_MAILSLOT_SET_INFORMATION
{
1333 PLARGE_INTEGER ReadTimeout
;
1334 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
1336 typedef struct _FILE_MODE_INFORMATION
{
1338 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
1340 typedef struct _FILE_ALL_INFORMATION
{
1341 FILE_BASIC_INFORMATION BasicInformation
;
1342 FILE_STANDARD_INFORMATION StandardInformation
;
1343 FILE_INTERNAL_INFORMATION InternalInformation
;
1344 FILE_EA_INFORMATION EaInformation
;
1345 FILE_ACCESS_INFORMATION AccessInformation
;
1346 FILE_POSITION_INFORMATION PositionInformation
;
1347 FILE_MODE_INFORMATION ModeInformation
;
1348 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
1349 FILE_NAME_INFORMATION NameInformation
;
1350 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
1352 typedef struct _FILE_NAMES_INFORMATION
{
1353 ULONG NextEntryOffset
;
1355 ULONG FileNameLength
;
1357 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
1359 typedef struct _FILE_OBJECTID_INFORMATION
{
1360 LONGLONG FileReference
;
1362 _ANONYMOUS_UNION
union {
1363 __GNU_EXTENSION
struct {
1364 UCHAR BirthVolumeId
[16];
1365 UCHAR BirthObjectId
[16];
1368 UCHAR ExtendedInfo
[48];
1370 } FILE_OBJECTID_INFORMATION
, *PFILE_OBJECTID_INFORMATION
;
1372 typedef struct _FILE_OLE_CLASSID_INFORMATION
{
1374 } FILE_OLE_CLASSID_INFORMATION
, *PFILE_OLE_CLASSID_INFORMATION
;
1376 typedef struct _FILE_OLE_ALL_INFORMATION
{
1377 FILE_BASIC_INFORMATION BasicInformation
;
1378 FILE_STANDARD_INFORMATION StandardInformation
;
1379 FILE_INTERNAL_INFORMATION InternalInformation
;
1380 FILE_EA_INFORMATION EaInformation
;
1381 FILE_ACCESS_INFORMATION AccessInformation
;
1382 FILE_POSITION_INFORMATION PositionInformation
;
1383 FILE_MODE_INFORMATION ModeInformation
;
1384 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
1387 LARGE_INTEGER SecurityChangeTime
;
1388 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation
;
1389 FILE_OBJECTID_INFORMATION ObjectIdInformation
;
1390 FILE_STORAGE_TYPE StorageType
;
1393 ULONG NumberOfStreamReferences
;
1396 BOOLEAN ContentIndexDisable
;
1397 BOOLEAN InheritContentIndexDisable
;
1398 FILE_NAME_INFORMATION NameInformation
;
1399 } FILE_OLE_ALL_INFORMATION
, *PFILE_OLE_ALL_INFORMATION
;
1401 typedef struct _FILE_OLE_DIR_INFORMATION
{
1402 ULONG NextEntryOffset
;
1404 LARGE_INTEGER CreationTime
;
1405 LARGE_INTEGER LastAccessTime
;
1406 LARGE_INTEGER LastWriteTime
;
1407 LARGE_INTEGER ChangeTime
;
1408 LARGE_INTEGER EndOfFile
;
1409 LARGE_INTEGER AllocationSize
;
1410 ULONG FileAttributes
;
1411 ULONG FileNameLength
;
1412 FILE_STORAGE_TYPE StorageType
;
1415 BOOLEAN ContentIndexDisable
;
1416 BOOLEAN InheritContentIndexDisable
;
1418 } FILE_OLE_DIR_INFORMATION
, *PFILE_OLE_DIR_INFORMATION
;
1420 typedef struct _FILE_OLE_INFORMATION
{
1421 LARGE_INTEGER SecurityChangeTime
;
1422 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation
;
1423 FILE_OBJECTID_INFORMATION ObjectIdInformation
;
1424 FILE_STORAGE_TYPE StorageType
;
1426 BOOLEAN ContentIndexDisable
;
1427 BOOLEAN InheritContentIndexDisable
;
1428 } FILE_OLE_INFORMATION
, *PFILE_OLE_INFORMATION
;
1430 typedef struct _FILE_OLE_STATE_BITS_INFORMATION
{
1432 ULONG StateBitsMask
;
1433 } FILE_OLE_STATE_BITS_INFORMATION
, *PFILE_OLE_STATE_BITS_INFORMATION
;
1435 typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER
{
1438 } FILE_PIPE_ASSIGN_EVENT_BUFFER
, *PFILE_PIPE_ASSIGN_EVENT_BUFFER
;
1440 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER
{
1441 PVOID ClientSession
;
1442 PVOID ClientProcess
;
1443 } FILE_PIPE_CLIENT_PROCESS_BUFFER
, *PFILE_PIPE_CLIENT_PROCESS_BUFFER
;
1445 typedef struct _FILE_PIPE_EVENT_BUFFER
{
1446 ULONG NamedPipeState
;
1450 ULONG NumberRequests
;
1451 } FILE_PIPE_EVENT_BUFFER
, *PFILE_PIPE_EVENT_BUFFER
;
1453 typedef struct _FILE_PIPE_PEEK_BUFFER
1455 ULONG NamedPipeState
;
1456 ULONG ReadDataAvailable
;
1457 ULONG NumberOfMessages
;
1458 ULONG MessageLength
;
1460 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
1462 typedef struct _FILE_PIPE_INFORMATION
{
1464 ULONG CompletionMode
;
1465 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
1467 typedef struct _FILE_PIPE_LOCAL_INFORMATION
{
1468 ULONG NamedPipeType
;
1469 ULONG NamedPipeConfiguration
;
1470 ULONG MaximumInstances
;
1471 ULONG CurrentInstances
;
1473 ULONG ReadDataAvailable
;
1474 ULONG OutboundQuota
;
1475 ULONG WriteQuotaAvailable
;
1476 ULONG NamedPipeState
;
1478 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
1480 typedef struct _FILE_PIPE_REMOTE_INFORMATION
{
1481 LARGE_INTEGER CollectDataTime
;
1482 ULONG MaximumCollectionCount
;
1483 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
1485 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
{
1486 LARGE_INTEGER Timeout
;
1488 BOOLEAN TimeoutSpecified
;
1490 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
1492 typedef struct _FILE_RENAME_INFORMATION
{
1493 BOOLEAN ReplaceIfExists
;
1494 HANDLE RootDirectory
;
1495 ULONG FileNameLength
;
1497 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
1499 typedef struct _FILE_STREAM_INFORMATION
{
1500 ULONG NextEntryOffset
;
1501 ULONG StreamNameLength
;
1502 LARGE_INTEGER StreamSize
;
1503 LARGE_INTEGER StreamAllocationSize
;
1504 WCHAR StreamName
[1];
1505 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
1507 typedef struct _FILE_TRACKING_INFORMATION
{
1508 HANDLE DestinationFile
;
1509 ULONG ObjectInformationLength
;
1510 CHAR ObjectInformation
[1];
1511 } FILE_TRACKING_INFORMATION
, *PFILE_TRACKING_INFORMATION
;
1513 #if (VER_PRODUCTBUILD >= 2195)
1514 typedef struct _FILE_ZERO_DATA_INFORMATION
{
1515 LARGE_INTEGER FileOffset
;
1516 LARGE_INTEGER BeyondFinalZero
;
1517 } FILE_ZERO_DATA_INFORMATION
, *PFILE_ZERO_DATA_INFORMATION
;
1519 typedef struct FILE_ALLOCATED_RANGE_BUFFER
{
1520 LARGE_INTEGER FileOffset
;
1521 LARGE_INTEGER Length
;
1522 } FILE_ALLOCATED_RANGE_BUFFER
, *PFILE_ALLOCATED_RANGE_BUFFER
;
1523 #endif /* (VER_PRODUCTBUILD >= 2195) */
1525 #define FSRTL_FCB_HEADER_V0 (0x00)
1526 #define FSRTL_FCB_HEADER_V1 (0x01)
1529 typedef struct _FSRTL_COMMON_FCB_HEADER
{
1530 CSHORT NodeTypeCode
;
1531 CSHORT NodeByteSize
;
1533 UCHAR IsFastIoPossible
;
1534 #if (VER_PRODUCTBUILD >= 1381)
1537 #endif /* (VER_PRODUCTBUILD >= 1381) */
1538 PERESOURCE Resource
;
1539 PERESOURCE PagingIoResource
;
1540 LARGE_INTEGER AllocationSize
;
1541 LARGE_INTEGER FileSize
;
1542 LARGE_INTEGER ValidDataLength
;
1543 } FSRTL_COMMON_FCB_HEADER
, *PFSRTL_COMMON_FCB_HEADER
;
1545 typedef enum _FSRTL_COMPARISON_RESULT
1550 } FSRTL_COMPARISON_RESULT
;
1552 #if (VER_PRODUCTBUILD >= 2600)
1554 typedef struct _FSRTL_ADVANCED_FCB_HEADER
{
1555 CSHORT NodeTypeCode
;
1556 CSHORT NodeByteSize
;
1558 UCHAR IsFastIoPossible
;
1562 PERESOURCE Resource
;
1563 PERESOURCE PagingIoResource
;
1564 LARGE_INTEGER AllocationSize
;
1565 LARGE_INTEGER FileSize
;
1566 LARGE_INTEGER ValidDataLength
;
1567 PFAST_MUTEX FastMutex
;
1568 LIST_ENTRY FilterContexts
;
1569 EX_PUSH_LOCK PushLock
;
1570 PVOID
*FileContextSupportPointer
;
1571 } FSRTL_ADVANCED_FCB_HEADER
, *PFSRTL_ADVANCED_FCB_HEADER
;
1573 typedef struct _FSRTL_PER_STREAM_CONTEXT
{
1577 PFREE_FUNCTION FreeCallback
;
1578 } FSRTL_PER_STREAM_CONTEXT
, *PFSRTL_PER_STREAM_CONTEXT
;
1580 typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT
1585 } FSRTL_PER_FILEOBJECT_CONTEXT
, *PFSRTL_PER_FILEOBJECT_CONTEXT
;
1587 #endif /* (VER_PRODUCTBUILD >= 2600) */
1589 typedef struct _BASE_MCB
1591 ULONG MaximumPairCount
;
1596 } BASE_MCB
, *PBASE_MCB
;
1598 typedef struct _LARGE_MCB
1600 PKGUARDED_MUTEX GuardedMutex
;
1602 } LARGE_MCB
, *PLARGE_MCB
;
1606 LARGE_MCB DummyFieldThatSizesThisStructureCorrectly
;
1609 typedef struct _GENERATE_NAME_CONTEXT
{
1611 BOOLEAN CheckSumInserted
;
1613 WCHAR NameBuffer
[8];
1614 ULONG ExtensionLength
;
1615 WCHAR ExtensionBuffer
[4];
1616 ULONG LastIndexValue
;
1617 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
1619 typedef struct _MAPPING_PAIR
{
1622 } MAPPING_PAIR
, *PMAPPING_PAIR
;
1624 typedef struct _GET_RETRIEVAL_DESCRIPTOR
{
1625 ULONG NumberOfPairs
;
1627 MAPPING_PAIR Pair
[1];
1628 } GET_RETRIEVAL_DESCRIPTOR
, *PGET_RETRIEVAL_DESCRIPTOR
;
1630 typedef struct _KQUEUE
{
1631 DISPATCHER_HEADER Header
;
1632 LIST_ENTRY EntryListHead
;
1635 LIST_ENTRY ThreadListHead
;
1636 } KQUEUE
, *PKQUEUE
, *RESTRICTED_POINTER PRKQUEUE
;
1638 #define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
1640 typedef struct _MBCB
{
1641 CSHORT NodeTypeCode
;
1642 CSHORT NodeIsInZone
;
1646 LIST_ENTRY BitmapRanges
;
1647 LONGLONG ResumeWritePage
;
1648 BITMAP_RANGE BitmapRange1
;
1649 BITMAP_RANGE BitmapRange2
;
1650 BITMAP_RANGE BitmapRange3
;
1653 typedef struct _MOVEFILE_DESCRIPTOR
{
1656 LARGE_INTEGER StartVcn
;
1657 LARGE_INTEGER TargetLcn
;
1660 } MOVEFILE_DESCRIPTOR
, *PMOVEFILE_DESCRIPTOR
;
1662 typedef struct _OBJECT_BASIC_INFO
{
1664 ACCESS_MASK GrantedAccess
;
1666 ULONG ReferenceCount
;
1667 ULONG PagedPoolUsage
;
1668 ULONG NonPagedPoolUsage
;
1670 ULONG NameInformationLength
;
1671 ULONG TypeInformationLength
;
1672 ULONG SecurityDescriptorLength
;
1673 LARGE_INTEGER CreateTime
;
1674 } OBJECT_BASIC_INFO
, *POBJECT_BASIC_INFO
;
1676 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO
{
1678 BOOLEAN ProtectFromClose
;
1679 } OBJECT_HANDLE_ATTRIBUTE_INFO
, *POBJECT_HANDLE_ATTRIBUTE_INFO
;
1681 typedef struct _OBJECT_NAME_INFO
{
1682 UNICODE_STRING ObjectName
;
1683 WCHAR ObjectNameBuffer
[1];
1684 } OBJECT_NAME_INFO
, *POBJECT_NAME_INFO
;
1686 typedef struct _OBJECT_PROTECTION_INFO
{
1688 BOOLEAN ProtectHandle
;
1689 } OBJECT_PROTECTION_INFO
, *POBJECT_PROTECTION_INFO
;
1691 typedef struct _OBJECT_TYPE_INFO
{
1692 UNICODE_STRING ObjectTypeName
;
1693 UCHAR Unknown
[0x58];
1694 WCHAR ObjectTypeNameBuffer
[1];
1695 } OBJECT_TYPE_INFO
, *POBJECT_TYPE_INFO
;
1697 typedef struct _OBJECT_ALL_TYPES_INFO
{
1698 ULONG NumberOfObjectTypes
;
1699 OBJECT_TYPE_INFO ObjectsTypeInfo
[1];
1700 } OBJECT_ALL_TYPES_INFO
, *POBJECT_ALL_TYPES_INFO
;
1703 typedef struct _PATHNAME_BUFFER
{
1704 ULONG PathNameLength
;
1706 } PATHNAME_BUFFER
, *PPATHNAME_BUFFER
;
1708 typedef enum _RTL_GENERIC_COMPARE_RESULTS
1713 } RTL_GENERIC_COMPARE_RESULTS
;
1715 typedef enum _TABLE_SEARCH_RESULT
1721 } TABLE_SEARCH_RESULT
;
1724 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
)(
1725 struct _RTL_AVL_TABLE
*Table
,
1730 typedef RTL_GENERIC_COMPARE_RESULTS
1731 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
1732 struct _RTL_AVL_TABLE
*Table
,
1737 typedef RTL_GENERIC_COMPARE_RESULTS
1738 (NTAPI
*PRTL_GENERIC_COMPARE_ROUTINE
) (
1739 struct _RTL_GENERIC_TABLE
*Table
,
1745 (NTAPI
*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
1746 struct _RTL_GENERIC_TABLE
*Table
,
1751 (NTAPI
*PRTL_GENERIC_FREE_ROUTINE
) (
1752 struct _RTL_GENERIC_TABLE
*Table
,
1757 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
1758 struct _RTL_AVL_TABLE
*Table
,
1763 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
1764 struct _RTL_AVL_TABLE
*Table
,
1768 typedef struct _PUBLIC_BCB
{
1769 CSHORT NodeTypeCode
;
1770 CSHORT NodeByteSize
;
1772 LARGE_INTEGER MappedFileOffset
;
1773 } PUBLIC_BCB
, *PPUBLIC_BCB
;
1775 typedef struct _QUERY_PATH_REQUEST
{
1776 ULONG PathNameLength
;
1777 PIO_SECURITY_CONTEXT SecurityContext
;
1778 WCHAR FilePathName
[1];
1779 } QUERY_PATH_REQUEST
, *PQUERY_PATH_REQUEST
;
1781 typedef struct _QUERY_PATH_RESPONSE
{
1782 ULONG LengthAccepted
;
1783 } QUERY_PATH_RESPONSE
, *PQUERY_PATH_RESPONSE
;
1785 typedef struct _RETRIEVAL_POINTERS_BUFFER
{
1787 LARGE_INTEGER StartingVcn
;
1789 LARGE_INTEGER NextVcn
;
1792 } RETRIEVAL_POINTERS_BUFFER
, *PRETRIEVAL_POINTERS_BUFFER
;
1794 typedef struct _RTL_SPLAY_LINKS
{
1795 struct _RTL_SPLAY_LINKS
*Parent
;
1796 struct _RTL_SPLAY_LINKS
*LeftChild
;
1797 struct _RTL_SPLAY_LINKS
*RightChild
;
1798 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
1800 typedef struct _RTL_BALANCED_LINKS
1802 struct _RTL_BALANCED_LINKS
*Parent
;
1803 struct _RTL_BALANCED_LINKS
*LeftChild
;
1804 struct _RTL_BALANCED_LINKS
*RightChild
;
1807 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
1809 typedef struct _RTL_GENERIC_TABLE
1811 PRTL_SPLAY_LINKS TableRoot
;
1812 LIST_ENTRY InsertOrderList
;
1813 PLIST_ENTRY OrderedPointer
;
1814 ULONG WhichOrderedElement
;
1815 ULONG NumberGenericTableElements
;
1816 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
1817 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
1818 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
1820 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
1822 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
1824 CSHORT NodeTypeCode
;
1826 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
1827 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
1828 RTL_SPLAY_LINKS Links
;
1829 PUNICODE_STRING Prefix
;
1830 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
1832 typedef struct _UNICODE_PREFIX_TABLE
1834 CSHORT NodeTypeCode
;
1836 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
1837 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
1838 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
1843 RtlInitializeUnicodePrefix (
1844 IN PUNICODE_PREFIX_TABLE PrefixTable
1850 RtlInsertUnicodePrefix (
1851 IN PUNICODE_PREFIX_TABLE PrefixTable
,
1852 IN PUNICODE_STRING Prefix
,
1853 IN PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
1859 RtlRemoveUnicodePrefix (
1860 IN PUNICODE_PREFIX_TABLE PrefixTable
,
1861 IN PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
1865 PUNICODE_PREFIX_TABLE_ENTRY
1867 RtlFindUnicodePrefix (
1868 IN PUNICODE_PREFIX_TABLE PrefixTable
,
1869 IN PUNICODE_STRING FullName
,
1870 IN ULONG CaseInsensitiveIndex
1874 PUNICODE_PREFIX_TABLE_ENTRY
1876 RtlNextUnicodePrefix (
1877 IN PUNICODE_PREFIX_TABLE PrefixTable
,
1881 #undef PRTL_GENERIC_COMPARE_ROUTINE
1882 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
1883 #undef PRTL_GENERIC_FREE_ROUTINE
1884 #undef RTL_GENERIC_TABLE
1885 #undef PRTL_GENERIC_TABLE
1887 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
1888 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
1889 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
1890 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
1891 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
1893 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
1894 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
1895 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
1896 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
1897 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
1898 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
1899 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
1900 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
1901 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
1902 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
1903 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
1905 typedef struct _RTL_AVL_TABLE
1907 RTL_BALANCED_LINKS BalancedRoot
;
1908 PVOID OrderedPointer
;
1909 ULONG WhichOrderedElement
;
1910 ULONG NumberGenericTableElements
;
1912 PRTL_BALANCED_LINKS RestartKey
;
1914 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
1915 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
1916 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
1918 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
1923 RtlInitializeGenericTableAvl(
1924 PRTL_AVL_TABLE Table
,
1925 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
1926 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
1927 PRTL_AVL_FREE_ROUTINE FreeRoutine
,
1934 RtlInsertElementGenericTableAvl (
1935 PRTL_AVL_TABLE Table
,
1938 PBOOLEAN NewElement OPTIONAL
1944 RtlDeleteElementGenericTableAvl (
1945 PRTL_AVL_TABLE Table
,
1952 RtlLookupElementGenericTableAvl (
1953 PRTL_AVL_TABLE Table
,
1960 RtlEnumerateGenericTableWithoutSplayingAvl (
1961 PRTL_AVL_TABLE Table
,
1965 #if defined(USE_LPC6432)
1966 #define LPC_CLIENT_ID CLIENT_ID64
1967 #define LPC_SIZE_T ULONGLONG
1968 #define LPC_PVOID ULONGLONG
1969 #define LPC_HANDLE ULONGLONG
1971 #define LPC_CLIENT_ID CLIENT_ID
1972 #define LPC_SIZE_T SIZE_T
1973 #define LPC_PVOID PVOID
1974 #define LPC_HANDLE HANDLE
1977 typedef struct _PORT_MESSAGE
1993 CSHORT DataInfoOffset
;
1997 __GNU_EXTENSION
union
1999 LPC_CLIENT_ID ClientId
;
2000 double DoNotUseThisField
;
2003 __GNU_EXTENSION
union
2005 LPC_SIZE_T ClientViewSize
;
2008 } PORT_MESSAGE
, *PPORT_MESSAGE
;
2010 #define LPC_KERNELMODE_MESSAGE (CSHORT)((USHORT)0x8000)
2012 typedef struct _PORT_VIEW
2015 LPC_HANDLE SectionHandle
;
2016 ULONG SectionOffset
;
2017 LPC_SIZE_T ViewSize
;
2019 LPC_PVOID ViewRemoteBase
;
2020 } PORT_VIEW
, *PPORT_VIEW
;
2022 typedef struct _REMOTE_PORT_VIEW
2025 LPC_SIZE_T ViewSize
;
2027 } REMOTE_PORT_VIEW
, *PREMOTE_PORT_VIEW
;
2029 typedef struct _SE_EXPORTS
{
2031 LUID SeCreateTokenPrivilege
;
2032 LUID SeAssignPrimaryTokenPrivilege
;
2033 LUID SeLockMemoryPrivilege
;
2034 LUID SeIncreaseQuotaPrivilege
;
2035 LUID SeUnsolicitedInputPrivilege
;
2036 LUID SeTcbPrivilege
;
2037 LUID SeSecurityPrivilege
;
2038 LUID SeTakeOwnershipPrivilege
;
2039 LUID SeLoadDriverPrivilege
;
2040 LUID SeCreatePagefilePrivilege
;
2041 LUID SeIncreaseBasePriorityPrivilege
;
2042 LUID SeSystemProfilePrivilege
;
2043 LUID SeSystemtimePrivilege
;
2044 LUID SeProfileSingleProcessPrivilege
;
2045 LUID SeCreatePermanentPrivilege
;
2046 LUID SeBackupPrivilege
;
2047 LUID SeRestorePrivilege
;
2048 LUID SeShutdownPrivilege
;
2049 LUID SeDebugPrivilege
;
2050 LUID SeAuditPrivilege
;
2051 LUID SeSystemEnvironmentPrivilege
;
2052 LUID SeChangeNotifyPrivilege
;
2053 LUID SeRemoteShutdownPrivilege
;
2058 PSID SeCreatorOwnerSid
;
2059 PSID SeCreatorGroupSid
;
2061 PSID SeNtAuthoritySid
;
2065 PSID SeInteractiveSid
;
2066 PSID SeLocalSystemSid
;
2067 PSID SeAliasAdminsSid
;
2068 PSID SeAliasUsersSid
;
2069 PSID SeAliasGuestsSid
;
2070 PSID SeAliasPowerUsersSid
;
2071 PSID SeAliasAccountOpsSid
;
2072 PSID SeAliasSystemOpsSid
;
2073 PSID SeAliasPrintOpsSid
;
2074 PSID SeAliasBackupOpsSid
;
2076 PSID SeAuthenticatedUsersSid
;
2078 PSID SeRestrictedSid
;
2079 PSID SeAnonymousLogonSid
;
2081 LUID SeUndockPrivilege
;
2082 LUID SeSyncAgentPrivilege
;
2083 LUID SeEnableDelegationPrivilege
;
2085 } SE_EXPORTS
, *PSE_EXPORTS
;
2087 extern PSE_EXPORTS SeExports
;
2091 LARGE_INTEGER StartingLcn
;
2092 } STARTING_LCN_INPUT_BUFFER
, *PSTARTING_LCN_INPUT_BUFFER
;
2094 typedef struct _STARTING_VCN_INPUT_BUFFER
{
2095 LARGE_INTEGER StartingVcn
;
2096 } STARTING_VCN_INPUT_BUFFER
, *PSTARTING_VCN_INPUT_BUFFER
;
2098 typedef struct _SECURITY_CLIENT_CONTEXT
{
2099 SECURITY_QUALITY_OF_SERVICE SecurityQos
;
2100 PACCESS_TOKEN ClientToken
;
2101 BOOLEAN DirectlyAccessClientToken
;
2102 BOOLEAN DirectAccessEffectiveOnly
;
2103 BOOLEAN ServerIsRemote
;
2104 TOKEN_CONTROL ClientTokenControl
;
2105 } SECURITY_CLIENT_CONTEXT
, *PSECURITY_CLIENT_CONTEXT
;
2108 // The following are the inherit flags that go into the AceFlags field
2109 // of an Ace header.
2111 #define OBJECT_INHERIT_ACE (0x1)
2112 #define CONTAINER_INHERIT_ACE (0x2)
2113 #define NO_PROPAGATE_INHERIT_ACE (0x4)
2114 #define INHERIT_ONLY_ACE (0x8)
2115 #define INHERITED_ACE (0x10)
2116 #define VALID_INHERIT_FLAGS (0x1F)
2118 typedef struct _ACE_HEADER
2123 } ACE_HEADER
, *PACE_HEADER
;
2125 typedef struct _ACCESS_ALLOWED_ACE
2130 } ACCESS_ALLOWED_ACE
, *PACCESS_ALLOWED_ACE
;
2132 typedef struct _ACCESS_DENIED_ACE
2137 } ACCESS_DENIED_ACE
, *PACCESS_DENIED_ACE
;
2139 typedef struct _SYSTEM_AUDIT_ACE
2144 } SYSTEM_AUDIT_ACE
, *PSYSTEM_AUDIT_ACE
;
2146 typedef struct _SYSTEM_ALARM_ACE
2151 } SYSTEM_ALARM_ACE
, *PSYSTEM_ALARM_ACE
;
2153 typedef struct _SYSTEM_MANDATORY_LABEL_ACE
2158 } SYSTEM_MANDATORY_LABEL_ACE
, *PSYSTEM_MANDATORY_LABEL_ACE
;
2160 typedef struct _TUNNEL
{
2162 PRTL_SPLAY_LINKS Cache
;
2163 LIST_ENTRY TimerQueue
;
2167 typedef struct _VAD_HEADER
{
2170 struct _VAD_HEADER
* ParentLink
;
2171 struct _VAD_HEADER
* LeftLink
;
2172 struct _VAD_HEADER
* RightLink
;
2173 ULONG Flags
; /* LSB = CommitCharge */
2175 PVOID FirstProtoPte
;
2179 } VAD_HEADER
, *PVAD_HEADER
;
2183 LARGE_INTEGER StartingLcn
;
2184 LARGE_INTEGER BitmapSize
;
2186 } VOLUME_BITMAP_BUFFER
, *PVOLUME_BITMAP_BUFFER
;
2188 #if (VER_PRODUCTBUILD >= 2600)
2191 (NTAPI
*PFILTER_REPORT_CHANGE
) (
2192 IN PVOID NotifyContext
,
2193 IN PVOID FilterContext
2196 typedef enum _FS_FILTER_SECTION_SYNC_TYPE
{
2198 SyncTypeCreateSection
2199 } FS_FILTER_SECTION_SYNC_TYPE
, *PFS_FILTER_SECTION_SYNC_TYPE
;
2201 typedef enum _FS_FILTER_STREAM_FO_NOTIFICATION_TYPE
{
2202 NotifyTypeCreate
= 0,
2204 } FS_FILTER_STREAM_FO_NOTIFICATION_TYPE
, *PFS_FILTER_STREAM_FO_NOTIFICATION_TYPE
;
2206 typedef union _FS_FILTER_PARAMETERS
{
2208 PLARGE_INTEGER EndingOffset
;
2209 PERESOURCE
*ResourceToRelease
;
2210 } AcquireForModifiedPageWriter
;
2213 PERESOURCE ResourceToRelease
;
2214 } ReleaseForModifiedPageWriter
;
2217 FS_FILTER_SECTION_SYNC_TYPE SyncType
;
2218 ULONG PageProtection
;
2219 } AcquireForSectionSynchronization
;
2222 FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType
;
2223 BOOLEAN POINTER_ALIGNMENT SafeToRecurse
;
2224 } NotifyStreamFileObject
;
2233 } FS_FILTER_PARAMETERS
, *PFS_FILTER_PARAMETERS
;
2235 typedef struct _FS_FILTER_CALLBACK_DATA
{
2236 ULONG SizeOfFsFilterCallbackData
;
2239 struct _DEVICE_OBJECT
*DeviceObject
;
2240 struct _FILE_OBJECT
*FileObject
;
2241 FS_FILTER_PARAMETERS Parameters
;
2242 } FS_FILTER_CALLBACK_DATA
, *PFS_FILTER_CALLBACK_DATA
;
2245 (NTAPI
*PFS_FILTER_CALLBACK
) (
2246 IN PFS_FILTER_CALLBACK_DATA Data
,
2247 OUT PVOID
*CompletionContext
2251 (NTAPI
*PFS_FILTER_COMPLETION_CALLBACK
) (
2252 IN PFS_FILTER_CALLBACK_DATA Data
,
2253 IN NTSTATUS OperationStatus
,
2254 IN PVOID CompletionContext
2257 typedef struct _FS_FILTER_CALLBACKS
{
2258 ULONG SizeOfFsFilterCallbacks
;
2260 PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization
;
2261 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization
;
2262 PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization
;
2263 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization
;
2264 PFS_FILTER_CALLBACK PreAcquireForCcFlush
;
2265 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush
;
2266 PFS_FILTER_CALLBACK PreReleaseForCcFlush
;
2267 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush
;
2268 PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter
;
2269 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter
;
2270 PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter
;
2271 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter
;
2272 } FS_FILTER_CALLBACKS
, *PFS_FILTER_CALLBACKS
;
2274 typedef struct _READ_LIST
{
2275 PFILE_OBJECT FileObject
;
2276 ULONG NumberOfEntries
;
2278 FILE_SEGMENT_ELEMENT List
[ANYSIZE_ARRAY
];
2279 } READ_LIST
, *PREAD_LIST
;
2284 (NTAPI
* PRTL_HEAP_COMMIT_ROUTINE
) (
2286 IN OUT PVOID
*CommitAddress
,
2287 IN OUT PSIZE_T CommitSize
2290 typedef struct _RTL_HEAP_PARAMETERS
{
2292 SIZE_T SegmentReserve
;
2293 SIZE_T SegmentCommit
;
2294 SIZE_T DeCommitFreeBlockThreshold
;
2295 SIZE_T DeCommitTotalFreeThreshold
;
2296 SIZE_T MaximumAllocationSize
;
2297 SIZE_T VirtualMemoryThreshold
;
2298 SIZE_T InitialCommit
;
2299 SIZE_T InitialReserve
;
2300 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine
;
2302 } RTL_HEAP_PARAMETERS
, *PRTL_HEAP_PARAMETERS
;
2308 IN PFILE_OBJECT FileObject
,
2309 IN ULONG BytesToWrite
,
2318 IN PFILE_OBJECT FileObject
,
2319 IN PLARGE_INTEGER FileOffset
,
2323 OUT PIO_STATUS_BLOCK IoStatus
2330 IN PFILE_OBJECT FileObject
,
2331 IN PLARGE_INTEGER FileOffset
,
2337 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
2339 typedef VOID (NTAPI
*PCC_POST_DEFERRED_WRITE
) (
2348 IN PFILE_OBJECT FileObject
,
2349 IN PCC_POST_DEFERRED_WRITE PostRoutine
,
2352 IN ULONG BytesToWrite
,
2360 IN PFILE_OBJECT FileObject
,
2361 IN ULONG FileOffset
,
2365 OUT PIO_STATUS_BLOCK IoStatus
2372 IN PFILE_OBJECT FileObject
,
2373 IN ULONG FileOffset
,
2382 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
2383 IN PLARGE_INTEGER FileOffset OPTIONAL
,
2385 OUT PIO_STATUS_BLOCK IoStatus OPTIONAL
2388 typedef VOID (NTAPI
*PDIRTY_PAGE_ROUTINE
) (
2389 IN PFILE_OBJECT FileObject
,
2390 IN PLARGE_INTEGER FileOffset
,
2392 IN PLARGE_INTEGER OldestLsn
,
2393 IN PLARGE_INTEGER NewestLsn
,
2403 IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine
,
2411 CcGetFileObjectFromBcb (
2418 CcGetFileObjectFromSectionPtrs (
2419 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
2422 #define CcGetFileSizePointer(FO) ( \
2423 ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
2426 #if (VER_PRODUCTBUILD >= 2195)
2431 CcGetFlushedValidData (
2432 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
2433 IN BOOLEAN BcbListHeld
2436 #endif /* (VER_PRODUCTBUILD >= 2195) */
2441 CcGetLsnForFileObject (
2442 IN PFILE_OBJECT FileObject
,
2443 OUT PLARGE_INTEGER OldestLsn OPTIONAL
2446 typedef BOOLEAN (NTAPI
*PACQUIRE_FOR_LAZY_WRITE
) (
2451 typedef VOID (NTAPI
*PRELEASE_FROM_LAZY_WRITE
) (
2455 typedef BOOLEAN (NTAPI
*PACQUIRE_FOR_READ_AHEAD
) (
2460 typedef VOID (NTAPI
*PRELEASE_FROM_READ_AHEAD
) (
2464 typedef struct _CACHE_MANAGER_CALLBACKS
{
2465 PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite
;
2466 PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite
;
2467 PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead
;
2468 PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead
;
2469 } CACHE_MANAGER_CALLBACKS
, *PCACHE_MANAGER_CALLBACKS
;
2474 CcInitializeCacheMap (
2475 IN PFILE_OBJECT FileObject
,
2476 IN PCC_FILE_SIZES FileSizes
,
2477 IN BOOLEAN PinAccess
,
2478 IN PCACHE_MANAGER_CALLBACKS Callbacks
,
2479 IN PVOID LazyWriteContext
2482 #define CcIsFileCached(FO) ( \
2483 ((FO)->SectionObjectPointer != NULL) && \
2484 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
2487 extern ULONG CcFastMdlReadWait
;
2492 CcIsThereDirtyData (
2500 IN PFILE_OBJECT FileObject
,
2501 IN PLARGE_INTEGER FileOffset
,
2512 IN PFILE_OBJECT FileObject
,
2513 IN PLARGE_INTEGER FileOffset
,
2516 OUT PIO_STATUS_BLOCK IoStatus
2523 IN PFILE_OBJECT FileObject
,
2530 CcMdlWriteComplete (
2531 IN PFILE_OBJECT FileObject
,
2532 IN PLARGE_INTEGER FileOffset
,
2542 IN PFILE_OBJECT FileObject
,
2543 IN PLARGE_INTEGER FileOffset
,
2553 IN PFILE_OBJECT FileObject
,
2554 IN PLARGE_INTEGER FileOffset
,
2565 IN PFILE_OBJECT FileObject
,
2566 IN PLARGE_INTEGER FileOffset
,
2569 OUT PIO_STATUS_BLOCK IoStatus
2576 IN PFILE_OBJECT FileObject
,
2577 IN PLARGE_INTEGER FileOffset
,
2588 CcPurgeCacheSection (
2589 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
2590 IN PLARGE_INTEGER FileOffset OPTIONAL
,
2592 IN BOOLEAN UninitializeCacheMaps
2595 #define CcReadAhead(FO, FOFF, LEN) ( \
2596 if ((LEN) >= 256) { \
2597 CcScheduleReadAhead((FO), (FOFF), (LEN)); \
2601 #if (VER_PRODUCTBUILD >= 2195)
2610 #endif /* (VER_PRODUCTBUILD >= 2195) */
2622 CcScheduleReadAhead (
2623 IN PFILE_OBJECT FileObject
,
2624 IN PLARGE_INTEGER FileOffset
,
2631 CcSetAdditionalCacheAttributes (
2632 IN PFILE_OBJECT FileObject
,
2633 IN BOOLEAN DisableReadAhead
,
2634 IN BOOLEAN DisableWriteBehind
2640 CcSetBcbOwnerPointer (
2642 IN PVOID OwnerPointer
2648 CcSetDirtyPageThreshold (
2649 IN PFILE_OBJECT FileObject
,
2650 IN ULONG DirtyPageThreshold
2656 CcSetDirtyPinnedData (
2658 IN PLARGE_INTEGER Lsn OPTIONAL
2665 IN PFILE_OBJECT FileObject
,
2666 IN PCC_FILE_SIZES FileSizes
2669 typedef VOID (NTAPI
*PFLUSH_TO_LSN
) (
2671 IN LARGE_INTEGER Lsn
2677 CcSetLogHandleForFile (
2678 IN PFILE_OBJECT FileObject
,
2680 IN PFLUSH_TO_LSN FlushToLsnRoutine
2686 CcSetReadAheadGranularity (
2687 IN PFILE_OBJECT FileObject
,
2688 IN ULONG Granularity
/* default: PAGE_SIZE */
2689 /* allowed: 2^n * PAGE_SIZE */
2695 CcUninitializeCacheMap (
2696 IN PFILE_OBJECT FileObject
,
2697 IN PLARGE_INTEGER TruncateSize OPTIONAL
,
2698 IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL
2711 CcUnpinDataForThread (
2713 IN ERESOURCE_THREAD ResourceThreadId
2719 CcUnpinRepinnedBcb (
2721 IN BOOLEAN WriteThrough
,
2722 OUT PIO_STATUS_BLOCK IoStatus
2725 #if (VER_PRODUCTBUILD >= 2195)
2730 CcWaitForCurrentLazyWriterActivity (
2734 #endif /* (VER_PRODUCTBUILD >= 2195) */
2740 IN PFILE_OBJECT FileObject
,
2741 IN PLARGE_INTEGER StartOffset
,
2742 IN PLARGE_INTEGER EndOffset
,
2749 ExDisableResourceBoostLite (
2750 IN PERESOURCE Resource
2756 ExQueryPoolBlockSize (
2758 OUT PBOOLEAN QuotaCharged
2761 #if (VER_PRODUCTBUILD >= 2600)
2763 #ifndef __NTOSKRNL__
2767 ExInitializeRundownProtection (
2768 IN PEX_RUNDOWN_REF RunRef
2774 ExReInitializeRundownProtection (
2775 IN PEX_RUNDOWN_REF RunRef
2781 ExAcquireRundownProtection (
2782 IN PEX_RUNDOWN_REF RunRef
2788 ExAcquireRundownProtectionEx (
2789 IN PEX_RUNDOWN_REF RunRef
,
2796 ExReleaseRundownProtection (
2797 IN PEX_RUNDOWN_REF RunRef
2803 ExReleaseRundownProtectionEx (
2804 IN PEX_RUNDOWN_REF RunRef
,
2811 ExRundownCompleted (
2812 IN PEX_RUNDOWN_REF RunRef
2818 ExWaitForRundownProtectionRelease (
2819 IN PEX_RUNDOWN_REF RunRef
2823 #endif /* (VER_PRODUCTBUILD >= 2600) */
2826 #define FsRtlSetupAdvancedHeader( _advhdr, _fmutx ) \
2828 SetFlag( (_advhdr)->Flags, FSRTL_FLAG_ADVANCED_HEADER ); \
2829 SetFlag( (_advhdr)->Flags2, FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS ); \
2830 (_advhdr)->Version = FSRTL_FCB_HEADER_V1; \
2831 InitializeListHead( &(_advhdr)->FilterContexts ); \
2832 if ((_fmutx) != NULL) { \
2833 (_advhdr)->FastMutex = (_fmutx); \
2835 *((PULONG_PTR)(&(_advhdr)->PushLock)) = 0; \
2836 /*ExInitializePushLock( &(_advhdr)->PushLock ); API Not avaliable downlevel*/\
2837 (_advhdr)->FileContextSupportPointer = NULL; \
2843 FsRtlAddBaseMcbEntry (
2847 IN LONGLONG SectorCount
2853 FsRtlAddLargeMcbEntry (
2857 IN LONGLONG SectorCount
2867 IN ULONG SectorCount
2873 FsRtlAddToTunnelCache (
2875 IN ULONGLONG DirectoryKey
,
2876 IN PUNICODE_STRING ShortName
,
2877 IN PUNICODE_STRING LongName
,
2878 IN BOOLEAN KeyByShortName
,
2879 IN ULONG DataLength
,
2883 #if (VER_PRODUCTBUILD >= 2195)
2887 FsRtlAllocateFileLock (
2888 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL
,
2889 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
2892 #endif /* (VER_PRODUCTBUILD >= 2195) */
2898 IN POOL_TYPE PoolType
,
2899 IN ULONG NumberOfBytes
2905 FsRtlAllocatePoolWithQuota (
2906 IN POOL_TYPE PoolType
,
2907 IN ULONG NumberOfBytes
2913 FsRtlAllocatePoolWithQuotaTag (
2914 IN POOL_TYPE PoolType
,
2915 IN ULONG NumberOfBytes
,
2922 FsRtlAllocatePoolWithTag (
2923 IN POOL_TYPE PoolType
,
2924 IN ULONG NumberOfBytes
,
2931 FsRtlAreNamesEqual (
2932 IN PCUNICODE_STRING Name1
,
2933 IN PCUNICODE_STRING Name2
,
2934 IN BOOLEAN IgnoreCase
,
2935 IN PCWCH UpcaseTable OPTIONAL
2938 #define FsRtlAreThereCurrentFileLocks(FL) ( \
2939 ((FL)->FastIoIsQuestionable) \
2943 FsRtlCheckLockForReadAccess:
2945 All this really does is pick out the lock parameters from the irp (io stack
2946 location?), get IoGetRequestorProcess, and pass values on to
2947 FsRtlFastCheckLockForRead.
2952 FsRtlCheckLockForReadAccess (
2953 IN PFILE_LOCK FileLock
,
2958 FsRtlCheckLockForWriteAccess:
2960 All this really does is pick out the lock parameters from the irp (io stack
2961 location?), get IoGetRequestorProcess, and pass values on to
2962 FsRtlFastCheckLockForWrite.
2967 FsRtlCheckLockForWriteAccess (
2968 IN PFILE_LOCK FileLock
,
2974 (NTAPI
*POPLOCK_WAIT_COMPLETE_ROUTINE
) (
2981 (NTAPI
*POPLOCK_FS_PREPOST_IRP
) (
2993 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
2994 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
3001 IN PFILE_OBJECT FileObject
,
3002 IN PLARGE_INTEGER FileOffset
,
3007 OUT PIO_STATUS_BLOCK IoStatus
,
3008 IN PDEVICE_OBJECT DeviceObject
3015 IN PFILE_OBJECT FileObject
,
3016 IN PLARGE_INTEGER FileOffset
,
3021 OUT PIO_STATUS_BLOCK IoStatus
,
3022 IN PDEVICE_OBJECT DeviceObject
3025 #define HEAP_NO_SERIALIZE 0x00000001
3026 #define HEAP_GROWABLE 0x00000002
3027 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
3028 #define HEAP_ZERO_MEMORY 0x00000008
3029 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
3030 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
3031 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
3032 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
3034 #define HEAP_CREATE_ALIGN_16 0x00010000
3035 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
3036 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
3043 IN PVOID HeapBase OPTIONAL
,
3044 IN SIZE_T ReserveSize OPTIONAL
,
3045 IN SIZE_T CommitSize OPTIONAL
,
3046 IN PVOID Lock OPTIONAL
,
3047 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
3053 FsRtlCurrentBatchOplock (
3060 FsRtlDeleteKeyFromTunnelCache (
3062 IN ULONGLONG DirectoryKey
3068 FsRtlDeleteTunnelCache (
3075 FsRtlDeregisterUncProvider (
3090 IN ANSI_STRING Name
,
3091 OUT PANSI_STRING FirstPart
,
3092 OUT PANSI_STRING RemainingPart
3099 IN UNICODE_STRING Name
,
3100 OUT PUNICODE_STRING FirstPart
,
3101 OUT PUNICODE_STRING RemainingPart
3107 FsRtlDoesDbcsContainWildCards (
3108 IN PANSI_STRING Name
3114 FsRtlDoesNameContainWildCards (
3115 IN PUNICODE_STRING Name
3121 FsRtlIsFatDbcsLegal (
3122 IN ANSI_STRING DbcsName
,
3123 IN BOOLEAN WildCardsPermissible
,
3124 IN BOOLEAN PathNamePermissible
,
3125 IN BOOLEAN LeadingBackslashPermissible
3129 #define FsRtlCompleteRequest(IRP,STATUS) { \
3130 (IRP)->IoStatus.Status = (STATUS); \
3131 IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
3134 #define FsRtlEnterFileSystem KeEnterCriticalRegion
3136 #define FsRtlExitFileSystem KeLeaveCriticalRegion
3141 FsRtlFastCheckLockForRead (
3142 IN PFILE_LOCK FileLock
,
3143 IN PLARGE_INTEGER FileOffset
,
3144 IN PLARGE_INTEGER Length
,
3146 IN PFILE_OBJECT FileObject
,
3153 FsRtlFastCheckLockForWrite (
3154 IN PFILE_LOCK FileLock
,
3155 IN PLARGE_INTEGER FileOffset
,
3156 IN PLARGE_INTEGER Length
,
3158 IN PFILE_OBJECT FileObject
,
3162 #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
3163 FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
3169 FsRtlFastUnlockAll (
3170 IN PFILE_LOCK FileLock
,
3171 IN PFILE_OBJECT FileObject
,
3172 IN PEPROCESS Process
,
3173 IN PVOID Context OPTIONAL
3175 /* ret: STATUS_RANGE_NOT_LOCKED */
3180 FsRtlFastUnlockAllByKey (
3181 IN PFILE_LOCK FileLock
,
3182 IN PFILE_OBJECT FileObject
,
3183 IN PEPROCESS Process
,
3185 IN PVOID Context OPTIONAL
3187 /* ret: STATUS_RANGE_NOT_LOCKED */
3192 FsRtlFastUnlockSingle (
3193 IN PFILE_LOCK FileLock
,
3194 IN PFILE_OBJECT FileObject
,
3195 IN PLARGE_INTEGER FileOffset
,
3196 IN PLARGE_INTEGER Length
,
3197 IN PEPROCESS Process
,
3199 IN PVOID Context OPTIONAL
,
3200 IN BOOLEAN AlreadySynchronized
3202 /* ret: STATUS_RANGE_NOT_LOCKED */
3207 FsRtlFindInTunnelCache (
3209 IN ULONGLONG DirectoryKey
,
3210 IN PUNICODE_STRING Name
,
3211 OUT PUNICODE_STRING ShortName
,
3212 OUT PUNICODE_STRING LongName
,
3213 IN OUT PULONG DataLength
,
3217 #if (VER_PRODUCTBUILD >= 2195)
3223 IN PFILE_LOCK FileLock
3226 #endif /* (VER_PRODUCTBUILD >= 2195) */
3232 IN PFILE_OBJECT FileObject
,
3233 IN OUT PLARGE_INTEGER FileSize
3239 FsRtlGetNextBaseMcbEntry (
3244 OUT PLONGLONG SectorCount
3248 FsRtlGetNextFileLock:
3250 ret: NULL if no more locks
3253 FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
3254 FileLock->LastReturnedLock as storage.
3255 LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
3256 list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
3257 calls with Restart = FALSE.
3262 FsRtlGetNextFileLock (
3263 IN PFILE_LOCK FileLock
,
3270 FsRtlGetNextLargeMcbEntry (
3275 OUT PLONGLONG SectorCount
3281 FsRtlGetNextMcbEntry (
3286 OUT PULONG SectorCount
3289 #define FsRtlGetPerStreamContextPointer(FO) ( \
3290 (PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext \
3296 FsRtlInitializeBaseMcb (
3298 IN POOL_TYPE PoolType
3304 FsRtlInitializeFileLock (
3305 IN PFILE_LOCK FileLock
,
3306 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL
,
3307 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
3313 FsRtlInitializeLargeMcb (
3315 IN POOL_TYPE PoolType
3321 FsRtlInitializeMcb (
3323 IN POOL_TYPE PoolType
3329 FsRtlInitializeOplock (
3330 IN OUT POPLOCK Oplock
3336 FsRtlInitializeTunnelCache (
3340 #define FsRtlInitPerStreamContext(PSC, O, I, FC) ( \
3341 (PSC)->OwnerId = (O), \
3342 (PSC)->InstanceId = (I), \
3343 (PSC)->FreeCallback = (FC) \
3349 FsRtlInsertPerStreamContext (
3350 IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext
,
3351 IN PFSRTL_PER_STREAM_CONTEXT Ptr
3354 #define FsRtlIsAnsiCharacterLegalFat(C, WILD) ( \
3355 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_FAT_LEGAL) | \
3356 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
3359 #define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) ( \
3360 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) | \
3361 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
3364 #define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) ( \
3365 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) | \
3366 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
3369 #define FsRtlIsAnsiCharacterWild(C) ( \
3370 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \
3376 FsRtlIsFatDbcsLegal (
3377 IN ANSI_STRING DbcsName
,
3378 IN BOOLEAN WildCardsPermissible
,
3379 IN BOOLEAN PathNamePermissible
,
3380 IN BOOLEAN LeadingBackslashPermissible
3386 FsRtlIsHpfsDbcsLegal (
3387 IN ANSI_STRING DbcsName
,
3388 IN BOOLEAN WildCardsPermissible
,
3389 IN BOOLEAN PathNamePermissible
,
3390 IN BOOLEAN LeadingBackslashPermissible
3396 FsRtlIsNameInExpression (
3397 IN PUNICODE_STRING Expression
,
3398 IN PUNICODE_STRING Name
,
3399 IN BOOLEAN IgnoreCase
,
3400 IN PWCHAR UpcaseTable OPTIONAL
3406 FsRtlIsNtstatusExpected (
3407 IN NTSTATUS Ntstatus
3410 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
3412 extern PUSHORT NlsOemLeadByteInfo
;
3414 #define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \
3415 (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \
3416 (NLS_MB_CODE_PAGE_TAG && \
3417 (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \
3420 #define FsRtlIsUnicodeCharacterWild(C) ( \
3423 FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER )) \
3429 FsRtlLookupBaseMcbEntry (
3432 OUT PLONGLONG Lbn OPTIONAL
,
3433 OUT PLONGLONG SectorCountFromLbn OPTIONAL
,
3434 OUT PLONGLONG StartingLbn OPTIONAL
,
3435 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL
,
3436 OUT PULONG Index OPTIONAL
3442 FsRtlLookupLargeMcbEntry (
3445 OUT PLONGLONG Lbn OPTIONAL
,
3446 OUT PLONGLONG SectorCountFromLbn OPTIONAL
,
3447 OUT PLONGLONG StartingLbn OPTIONAL
,
3448 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL
,
3449 OUT PULONG Index OPTIONAL
3455 FsRtlLookupLastBaseMcbEntry (
3464 FsRtlLookupLastLargeMcbEntry (
3473 FsRtlLookupLastMcbEntry (
3482 FsRtlLookupLastBaseMcbEntryAndIndex (
3483 IN PBASE_MCB OpaqueMcb
,
3484 IN OUT PLONGLONG LargeVbn
,
3485 IN OUT PLONGLONG LargeLbn
,
3492 FsRtlLookupLastLargeMcbEntryAndIndex (
3493 IN PLARGE_MCB OpaqueMcb
,
3494 OUT PLONGLONG LargeVbn
,
3495 OUT PLONGLONG LargeLbn
,
3502 FsRtlLookupMcbEntry (
3506 OUT PULONG SectorCount OPTIONAL
,
3511 PFSRTL_PER_STREAM_CONTEXT
3513 FsRtlLookupPerStreamContextInternal (
3514 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext
,
3515 IN PVOID OwnerId OPTIONAL
,
3516 IN PVOID InstanceId OPTIONAL
3523 IN PFILE_OBJECT FileObject
,
3524 IN PLARGE_INTEGER FileOffset
,
3528 OUT PIO_STATUS_BLOCK IoStatus
,
3529 IN PDEVICE_OBJECT DeviceObject
3535 FsRtlMdlReadComplete (
3536 IN PFILE_OBJECT FileObject
,
3543 FsRtlMdlReadCompleteDev (
3544 IN PFILE_OBJECT FileObject
,
3546 IN PDEVICE_OBJECT DeviceObject
3552 FsRtlPrepareMdlWriteDev (
3553 IN PFILE_OBJECT FileObject
,
3554 IN PLARGE_INTEGER FileOffset
,
3558 OUT PIO_STATUS_BLOCK IoStatus
,
3559 IN PDEVICE_OBJECT DeviceObject
3565 FsRtlMdlWriteComplete (
3566 IN PFILE_OBJECT FileObject
,
3567 IN PLARGE_INTEGER FileOffset
,
3574 FsRtlMdlWriteCompleteDev (
3575 IN PFILE_OBJECT FileObject
,
3576 IN PLARGE_INTEGER FileOffset
,
3578 IN PDEVICE_OBJECT DeviceObject
3584 FsRtlNormalizeNtstatus (
3585 IN NTSTATUS Exception
,
3586 IN NTSTATUS GenericException
3592 FsRtlNotifyChangeDirectory (
3593 IN PNOTIFY_SYNC NotifySync
,
3595 IN PSTRING FullDirectoryName
,
3596 IN PLIST_ENTRY NotifyList
,
3597 IN BOOLEAN WatchTree
,
3598 IN ULONG CompletionFilter
,
3605 FsRtlNotifyCleanup (
3606 IN PNOTIFY_SYNC NotifySync
,
3607 IN PLIST_ENTRY NotifyList
,
3611 typedef BOOLEAN (NTAPI
*PCHECK_FOR_TRAVERSE_ACCESS
) (
3612 IN PVOID NotifyContext
,
3613 IN PVOID TargetContext
,
3614 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
3620 FsRtlNotifyFilterChangeDirectory (
3621 IN PNOTIFY_SYNC NotifySync
,
3622 IN PLIST_ENTRY NotifyList
,
3624 IN PSTRING FullDirectoryName
,
3625 IN BOOLEAN WatchTree
,
3626 IN BOOLEAN IgnoreBuffer
,
3627 IN ULONG CompletionFilter
,
3629 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL
,
3630 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
,
3631 IN PFILTER_REPORT_CHANGE FilterCallback OPTIONAL
);
3636 FsRtlNotifyFilterReportChange (
3637 IN PNOTIFY_SYNC NotifySync
,
3638 IN PLIST_ENTRY NotifyList
,
3639 IN PSTRING FullTargetName
,
3640 IN USHORT TargetNameOffset
,
3641 IN PSTRING StreamName OPTIONAL
,
3642 IN PSTRING NormalizedParentName OPTIONAL
,
3643 IN ULONG FilterMatch
,
3645 IN PVOID TargetContext
,
3646 IN PVOID FilterContext
);
3651 FsRtlNotifyFullChangeDirectory (
3652 IN PNOTIFY_SYNC NotifySync
,
3653 IN PLIST_ENTRY NotifyList
,
3655 IN PSTRING FullDirectoryName
,
3656 IN BOOLEAN WatchTree
,
3657 IN BOOLEAN IgnoreBuffer
,
3658 IN ULONG CompletionFilter
,
3660 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL
,
3661 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
3667 FsRtlNotifyFullReportChange (
3668 IN PNOTIFY_SYNC NotifySync
,
3669 IN PLIST_ENTRY NotifyList
,
3670 IN PSTRING FullTargetName
,
3671 IN USHORT TargetNameOffset
,
3672 IN PSTRING StreamName OPTIONAL
,
3673 IN PSTRING NormalizedParentName OPTIONAL
,
3674 IN ULONG FilterMatch
,
3676 IN PVOID TargetContext
3682 FsRtlNotifyInitializeSync (
3683 IN PNOTIFY_SYNC
*NotifySync
3689 FsRtlNotifyUninitializeSync (
3690 IN PNOTIFY_SYNC
*NotifySync
3693 #if (VER_PRODUCTBUILD >= 2195)
3698 FsRtlNotifyVolumeEvent (
3699 IN PFILE_OBJECT FileObject
,
3703 #endif /* (VER_PRODUCTBUILD >= 2195) */
3708 FsRtlNumberOfRunsInBaseMcb (
3715 FsRtlNumberOfRunsInLargeMcb (
3722 FsRtlNumberOfRunsInMcb (
3738 FsRtlOplockIsFastIoPossible (
3743 (NTAPI
*PFSRTL_STACK_OVERFLOW_ROUTINE
) (
3751 FsRtlPostPagingFileStackOverflow (
3754 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
3760 FsRtlPostStackOverflow (
3763 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
3769 ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
3772 -Calls IoCompleteRequest if Irp
3773 -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
3779 IN PFILE_LOCK FileLock
,
3780 IN PFILE_OBJECT FileObject
,
3781 IN PLARGE_INTEGER FileOffset
,
3782 IN PLARGE_INTEGER Length
,
3783 IN PEPROCESS Process
,
3785 IN BOOLEAN FailImmediately
,
3786 IN BOOLEAN ExclusiveLock
,
3787 OUT PIO_STATUS_BLOCK IoStatus
,
3788 IN PIRP Irp OPTIONAL
,
3790 IN BOOLEAN AlreadySynchronized
3794 FsRtlProcessFileLock:
3797 -STATUS_INVALID_DEVICE_REQUEST
3798 -STATUS_RANGE_NOT_LOCKED from unlock routines.
3799 -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
3800 (redirected IoStatus->Status).
3803 -switch ( Irp->CurrentStackLocation->MinorFunction )
3804 lock: return FsRtlPrivateLock;
3805 unlocksingle: return FsRtlFastUnlockSingle;
3806 unlockall: return FsRtlFastUnlockAll;
3807 unlockallbykey: return FsRtlFastUnlockAllByKey;
3808 default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
3809 return STATUS_INVALID_DEVICE_REQUEST;
3811 -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
3812 -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
3817 FsRtlProcessFileLock (
3818 IN PFILE_LOCK FileLock
,
3820 IN PVOID Context OPTIONAL
3826 FsRtlRegisterUncProvider (
3827 IN OUT PHANDLE MupHandle
,
3828 IN PUNICODE_STRING RedirectorDeviceName
,
3829 IN BOOLEAN MailslotsSupported
3835 FsRtlRemoveBaseMcbEntry (
3838 IN LONGLONG SectorCount
3844 FsRtlRemoveLargeMcbEntry (
3847 IN LONGLONG SectorCount
3853 FsRtlRemoveMcbEntry (
3856 IN ULONG SectorCount
3860 PFSRTL_PER_STREAM_CONTEXT
3862 FsRtlRemovePerStreamContext (
3863 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext
,
3864 IN PVOID OwnerId OPTIONAL
,
3865 IN PVOID InstanceId OPTIONAL
3878 FsRtlResetLargeMcb (
3880 IN BOOLEAN SelfSynchronized
3895 FsRtlSplitLargeMcb (
3901 #define FsRtlSupportsPerStreamContexts(FO) ( \
3902 (BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) && \
3903 FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \
3904 FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS)) \
3910 FsRtlTruncateBaseMcb (
3918 FsRtlTruncateLargeMcb (
3934 FsRtlUninitializeBaseMcb (
3941 FsRtlUninitializeFileLock (
3942 IN PFILE_LOCK FileLock
3948 FsRtlUninitializeLargeMcb (
3955 FsRtlUninitializeMcb (
3962 FsRtlUninitializeOplock (
3963 IN OUT POPLOCK Oplock
3969 KeSetIdealProcessorThread(
3970 IN OUT PKTHREAD Thread
,
3977 IoAttachDeviceToDeviceStackSafe(
3978 IN PDEVICE_OBJECT SourceDevice
,
3979 IN PDEVICE_OBJECT TargetDevice
,
3980 OUT PDEVICE_OBJECT
*AttachedToDeviceObject
3986 IoAcquireVpbSpinLock (
3993 IoCheckDesiredAccess (
3994 IN OUT PACCESS_MASK DesiredAccess
,
3995 IN ACCESS_MASK GrantedAccess
4001 IoCheckEaBufferValidity (
4002 IN PFILE_FULL_EA_INFORMATION EaBuffer
,
4004 OUT PULONG ErrorOffset
4010 IoCheckFunctionAccess (
4011 IN ACCESS_MASK GrantedAccess
,
4012 IN UCHAR MajorFunction
,
4013 IN UCHAR MinorFunction
,
4014 IN ULONG IoControlCode
,
4015 IN PVOID Argument1 OPTIONAL
,
4016 IN PVOID Argument2 OPTIONAL
4019 #if (VER_PRODUCTBUILD >= 2195)
4024 IoCheckQuotaBufferValidity (
4025 IN PFILE_QUOTA_INFORMATION QuotaBuffer
,
4026 IN ULONG QuotaLength
,
4027 OUT PULONG ErrorOffset
4030 #endif /* (VER_PRODUCTBUILD >= 2195) */
4035 IoCreateStreamFileObject (
4036 IN PFILE_OBJECT FileObject OPTIONAL
,
4037 IN PDEVICE_OBJECT DeviceObject OPTIONAL
4040 #if (VER_PRODUCTBUILD >= 2195)
4045 IoCreateStreamFileObjectLite (
4046 IN PFILE_OBJECT FileObject OPTIONAL
,
4047 IN PDEVICE_OBJECT DeviceObject OPTIONAL
4050 #endif /* (VER_PRODUCTBUILD >= 2195) */
4055 IoFastQueryNetworkAttributes (
4056 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4057 IN ACCESS_MASK DesiredAccess
,
4058 IN ULONG OpenOptions
,
4059 OUT PIO_STATUS_BLOCK IoStatus
,
4060 OUT PFILE_NETWORK_OPEN_INFORMATION Buffer
4066 IoGetAttachedDevice (
4067 IN PDEVICE_OBJECT DeviceObject
4073 IoGetBaseFileSystemDeviceObject (
4074 IN PFILE_OBJECT FileObject
4077 #if (VER_PRODUCTBUILD >= 2600)
4082 IoGetDeviceAttachmentBaseRef (
4083 IN PDEVICE_OBJECT DeviceObject
4089 IoGetDiskDeviceObject (
4090 IN PDEVICE_OBJECT FileSystemDeviceObject
,
4091 OUT PDEVICE_OBJECT
*DiskDeviceObject
4097 IoGetLowerDeviceObject (
4098 IN PDEVICE_OBJECT DeviceObject
4101 #endif /* (VER_PRODUCTBUILD >= 2600) */
4106 IoGetRequestorProcess (
4110 #if (VER_PRODUCTBUILD >= 2195)
4115 IoGetRequestorProcessId (
4119 #endif /* (VER_PRODUCTBUILD >= 2195) */
4128 #define IoIsFileOpenedExclusively(FileObject) ( \
4130 (FileObject)->SharedRead || \
4131 (FileObject)->SharedWrite || \
4132 (FileObject)->SharedDelete \
4139 IoIsOperationSynchronous (
4150 #if (VER_PRODUCTBUILD >= 2195)
4155 IoIsValidNameGraftingBuffer (
4157 IN PREPARSE_DATA_BUFFER ReparseBuffer
4160 #endif /* (VER_PRODUCTBUILD >= 2195) */
4166 IN PFILE_OBJECT FileObject
,
4168 IN PLARGE_INTEGER Offset
,
4170 OUT PIO_STATUS_BLOCK IoStatusBlock
4176 IoQueryFileInformation (
4177 IN PFILE_OBJECT FileObject
,
4178 IN FILE_INFORMATION_CLASS FileInformationClass
,
4180 OUT PVOID FileInformation
,
4181 OUT PULONG ReturnedLength
4187 IoQueryVolumeInformation (
4188 IN PFILE_OBJECT FileObject
,
4189 IN FS_INFORMATION_CLASS FsInformationClass
,
4191 OUT PVOID FsInformation
,
4192 OUT PULONG ReturnedLength
4205 IoRegisterFileSystem (
4206 IN OUT PDEVICE_OBJECT DeviceObject
4209 #if (VER_PRODUCTBUILD >= 1381)
4211 typedef VOID (NTAPI
*PDRIVER_FS_NOTIFICATION
) (
4212 IN PDEVICE_OBJECT DeviceObject
,
4213 IN BOOLEAN DriverActive
4219 IoRegisterFsRegistrationChange (
4220 IN PDRIVER_OBJECT DriverObject
,
4221 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
4224 #endif /* (VER_PRODUCTBUILD >= 1381) */
4229 IoReleaseVpbSpinLock (
4236 IoSetDeviceToVerify (
4238 IN PDEVICE_OBJECT DeviceObject
4245 IN PFILE_OBJECT FileObject
,
4246 IN FILE_INFORMATION_CLASS FileInformationClass
,
4248 IN PVOID FileInformation
4261 IoSynchronousPageWrite (
4262 IN PFILE_OBJECT FileObject
,
4264 IN PLARGE_INTEGER FileOffset
,
4266 OUT PIO_STATUS_BLOCK IoStatusBlock
4279 IoUnregisterFileSystem (
4280 IN OUT PDEVICE_OBJECT DeviceObject
4283 #if (VER_PRODUCTBUILD >= 1381)
4288 IoUnregisterFsRegistrationChange (
4289 IN PDRIVER_OBJECT DriverObject
,
4290 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
4293 #endif /* (VER_PRODUCTBUILD >= 1381) */
4299 IN PDEVICE_OBJECT DeviceObject
,
4300 IN BOOLEAN AllowRawMount
4303 #if !defined (_M_AMD64)
4308 KeAcquireQueuedSpinLock (
4309 IN KSPIN_LOCK_QUEUE_NUMBER Number
4315 KeReleaseQueuedSpinLock (
4316 IN KSPIN_LOCK_QUEUE_NUMBER Number
,
4323 KeAcquireSpinLockRaiseToSynch(
4324 IN OUT PKSPIN_LOCK SpinLock
4330 KeTryToAcquireQueuedSpinLock(
4331 KSPIN_LOCK_QUEUE_NUMBER Number
,
4339 KeAcquireQueuedSpinLock (
4340 IN KSPIN_LOCK_QUEUE_NUMBER Number
4346 KeReleaseQueuedSpinLock (
4347 IN KSPIN_LOCK_QUEUE_NUMBER Number
,
4353 KeAcquireSpinLockRaiseToSynch(
4354 IN OUT PKSPIN_LOCK SpinLock
4359 KeTryToAcquireQueuedSpinLock(
4360 KSPIN_LOCK_QUEUE_NUMBER Number
,
4369 IN PKPROCESS Process
4384 IN ULONG Count OPTIONAL
4392 IN PLIST_ENTRY Entry
4400 IN PLIST_ENTRY Entry
4415 IN KPROCESSOR_MODE WaitMode
,
4416 IN PLARGE_INTEGER Timeout OPTIONAL
4429 KeInitializeMutant (
4430 IN PRKMUTANT Mutant
,
4431 IN BOOLEAN InitialOwner
4445 IN PRKMUTANT Mutant
,
4446 IN KPRIORITY Increment
,
4447 IN BOOLEAN Abandoned
,
4451 #if (VER_PRODUCTBUILD >= 2195)
4456 KeStackAttachProcess (
4457 IN PKPROCESS Process
,
4458 OUT PKAPC_STATE ApcState
4464 KeUnstackDetachProcess (
4465 IN PKAPC_STATE ApcState
4468 #endif /* (VER_PRODUCTBUILD >= 2195) */
4473 KeSetKernelStackSwapEnable(
4480 MmCanFileBeTruncated (
4481 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
4482 IN PLARGE_INTEGER NewFileSize
4488 MmFlushImageSection (
4489 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
4490 IN MMFLUSH_TYPE FlushType
4496 MmForceSectionClosed (
4497 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
4498 IN BOOLEAN DelayClose
4501 #if (VER_PRODUCTBUILD >= 1381)
4506 MmIsRecursiveIoFault (
4512 #define MmIsRecursiveIoFault() ( \
4513 (PsGetCurrentThread()->DisablePageFaultClustering) | \
4514 (PsGetCurrentThread()->ForwardClusterOnly) \
4523 MmSetAddressRangeModified (
4532 IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL
,
4533 IN POBJECT_TYPE ObjectType
,
4534 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4535 IN KPROCESSOR_MODE AccessMode
,
4536 IN OUT PVOID ParseContext OPTIONAL
,
4537 IN ULONG ObjectSize
,
4538 IN ULONG PagedPoolCharge OPTIONAL
,
4539 IN ULONG NonPagedPoolCharge OPTIONAL
,
4546 ObGetObjectPointerCount (
4555 IN PACCESS_STATE PassedAccessState OPTIONAL
,
4556 IN ACCESS_MASK DesiredAccess
,
4557 IN ULONG AdditionalReferences
,
4558 OUT PVOID
*ReferencedObject OPTIONAL
,
4565 ObMakeTemporaryObject (
4572 ObOpenObjectByPointer (
4574 IN ULONG HandleAttributes
,
4575 IN PACCESS_STATE PassedAccessState OPTIONAL
,
4576 IN ACCESS_MASK DesiredAccess OPTIONAL
,
4577 IN POBJECT_TYPE ObjectType OPTIONAL
,
4578 IN KPROCESSOR_MODE AccessMode
,
4587 OUT POBJECT_NAME_INFORMATION ObjectNameInfo
,
4589 OUT PULONG ReturnLength
4595 ObQueryObjectAuditingByHandle (
4597 OUT PBOOLEAN GenerateOnClose
4603 ObReferenceObjectByName (
4604 IN PUNICODE_STRING ObjectName
,
4605 IN ULONG Attributes
,
4606 IN PACCESS_STATE PassedAccessState OPTIONAL
,
4607 IN ACCESS_MASK DesiredAccess OPTIONAL
,
4608 IN POBJECT_TYPE ObjectType
,
4609 IN KPROCESSOR_MODE AccessMode
,
4610 IN OUT PVOID ParseContext OPTIONAL
,
4617 PsAssignImpersonationToken (
4626 IN PEPROCESS Process
,
4627 IN POOL_TYPE PoolType
,
4634 PsChargeProcessPoolQuota (
4635 IN PEPROCESS Process
,
4636 IN POOL_TYPE PoolType
,
4640 #define PsDereferenceImpersonationToken(T) \
4641 {if (ARGUMENT_PRESENT(T)) { \
4642 (ObDereferenceObject((T))); \
4648 #define PsDereferencePrimaryToken(T) (ObDereferenceObject((T)))
4653 PsDisableImpersonation(
4655 IN PSE_IMPERSONATION_STATE ImpersonationState
4661 PsGetProcessExitTime (
4668 PsImpersonateClient(
4670 IN PACCESS_TOKEN Token
,
4671 IN BOOLEAN CopyOnOpen
,
4672 IN BOOLEAN EffectiveOnly
,
4673 IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
4686 PsIsThreadTerminating (
4693 PsLookupProcessByProcessId (
4694 IN HANDLE ProcessId
,
4695 OUT PEPROCESS
*Process
4701 PsLookupProcessThreadByCid (
4703 OUT PEPROCESS
*Process OPTIONAL
,
4704 OUT PETHREAD
*Thread
4710 PsLookupThreadByThreadId (
4711 IN HANDLE UniqueThreadId
,
4712 OUT PETHREAD
*Thread
4718 PsReferenceImpersonationToken (
4720 OUT PBOOLEAN CopyOnUse
,
4721 OUT PBOOLEAN EffectiveOnly
,
4722 OUT PSECURITY_IMPERSONATION_LEVEL Level
4728 PsReferencePrimaryToken (
4729 IN PEPROCESS Process
4735 PsRestoreImpersonation(
4737 IN PSE_IMPERSONATION_STATE ImpersonationState
4744 IN PEPROCESS Process
,
4745 IN POOL_TYPE PoolType
,
4759 RtlAbsoluteToSelfRelativeSD (
4760 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor
,
4761 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor
,
4762 IN PULONG BufferLength
4769 IN HANDLE HeapHandle
,
4777 RtlAppendStringToString(
4778 PSTRING Destination
,
4779 const STRING
*Source
4785 RtlCaptureStackBackTrace (
4786 IN ULONG FramesToSkip
,
4787 IN ULONG FramesToCapture
,
4788 OUT PVOID
*BackTrace
,
4789 OUT PULONG BackTraceHash OPTIONAL
4795 RtlCompareMemoryUlong (
4805 IN USHORT CompressionFormatAndEngine
,
4806 IN PUCHAR UncompressedBuffer
,
4807 IN ULONG UncompressedBufferSize
,
4808 OUT PUCHAR CompressedBuffer
,
4809 IN ULONG CompressedBufferSize
,
4810 IN ULONG UncompressedChunkSize
,
4811 OUT PULONG FinalCompressedSize
,
4819 IN PUCHAR UncompressedBuffer
,
4820 IN ULONG UncompressedBufferSize
,
4821 OUT PUCHAR CompressedBuffer
,
4822 IN ULONG CompressedBufferSize
,
4823 IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo
,
4824 IN ULONG CompressedDataInfoLength
,
4831 RtlConvertSidToUnicodeString (
4832 OUT PUNICODE_STRING DestinationString
,
4834 IN BOOLEAN AllocateDestinationString
4842 IN PSID Destination
,
4849 RtlCreateUnicodeString(
4850 PUNICODE_STRING DestinationString
,
4857 RtlDecompressBuffer (
4858 IN USHORT CompressionFormat
,
4859 OUT PUCHAR UncompressedBuffer
,
4860 IN ULONG UncompressedBufferSize
,
4861 IN PUCHAR CompressedBuffer
,
4862 IN ULONG CompressedBufferSize
,
4863 OUT PULONG FinalUncompressedSize
4869 RtlDecompressChunks (
4870 OUT PUCHAR UncompressedBuffer
,
4871 IN ULONG UncompressedBufferSize
,
4872 IN PUCHAR CompressedBuffer
,
4873 IN ULONG CompressedBufferSize
,
4874 IN PUCHAR CompressedTail
,
4875 IN ULONG CompressedTailSize
,
4876 IN PCOMPRESSED_DATA_INFO CompressedDataInfo
4882 RtlDecompressFragment (
4883 IN USHORT CompressionFormat
,
4884 OUT PUCHAR UncompressedFragment
,
4885 IN ULONG UncompressedFragmentSize
,
4886 IN PUCHAR CompressedBuffer
,
4887 IN ULONG CompressedBufferSize
,
4888 IN ULONG FragmentOffset
,
4889 OUT PULONG FinalUncompressedSize
,
4897 IN USHORT CompressionFormat
,
4898 IN OUT PUCHAR
*CompressedBuffer
,
4899 IN PUCHAR EndOfCompressedBufferPlus1
,
4900 OUT PUCHAR
*ChunkBuffer
,
4901 OUT PULONG ChunkSize
4907 RtlDowncaseUnicodeString(
4908 IN OUT PUNICODE_STRING UniDest
,
4909 IN PCUNICODE_STRING UniSource
,
4910 IN BOOLEAN AllocateDestinationString
4916 RtlDuplicateUnicodeString(
4918 IN PCUNICODE_STRING SourceString
,
4919 OUT PUNICODE_STRING DestinationString
4933 RtlFillMemoryUlong (
4934 IN PVOID Destination
,
4943 IN HANDLE HeapHandle
,
4952 IN POEM_STRING OemString
4958 RtlGenerate8dot3Name (
4959 IN PUNICODE_STRING Name
,
4960 IN BOOLEAN AllowExtendedCharacters
,
4961 IN OUT PGENERATE_NAME_CONTEXT Context
,
4962 OUT PUNICODE_STRING Name8dot3
4968 RtlGetCompressionWorkSpaceSize (
4969 IN USHORT CompressionFormatAndEngine
,
4970 OUT PULONG CompressBufferWorkSpaceSize
,
4971 OUT PULONG CompressFragmentWorkSpaceSize
4977 RtlGetDaclSecurityDescriptor (
4978 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4979 OUT PBOOLEAN DaclPresent
,
4981 OUT PBOOLEAN DaclDefaulted
4987 RtlGetGroupSecurityDescriptor (
4988 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4990 OUT PBOOLEAN GroupDefaulted
4996 RtlGetOwnerSecurityDescriptor (
4997 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4999 OUT PBOOLEAN OwnerDefaulted
5007 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
5008 IN UCHAR SubAuthorityCount
5014 RtlIsNameLegalDOS8Dot3(
5015 IN PCUNICODE_STRING Name
,
5016 IN OUT POEM_STRING OemName OPTIONAL
,
5017 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
5023 RtlLengthRequiredSid (
5024 IN ULONG SubAuthorityCount
5037 RtlNtStatusToDosError (
5044 RtlxUnicodeStringToOemSize(
5045 PCUNICODE_STRING UnicodeString
5051 RtlxOemStringToUnicodeSize(
5052 PCOEM_STRING OemString
5055 #define RtlOemStringToUnicodeSize(STRING) ( \
5056 NLS_MB_OEM_CODE_PAGE_TAG ? \
5057 RtlxOemStringToUnicodeSize(STRING) : \
5058 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
5061 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
5062 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
5069 RtlOemStringToUnicodeString(
5070 IN OUT PUNICODE_STRING DestinationString
,
5071 IN PCOEM_STRING SourceString
,
5072 IN BOOLEAN AllocateDestinationString
5078 RtlUnicodeStringToOemString(
5079 IN OUT POEM_STRING DestinationString
,
5080 IN PCUNICODE_STRING SourceString
,
5081 IN BOOLEAN AllocateDestinationString
5087 RtlOemStringToCountedUnicodeString(
5088 IN OUT PUNICODE_STRING DestinationString
,
5089 IN PCOEM_STRING SourceString
,
5090 IN BOOLEAN AllocateDestinationString
5096 RtlUnicodeStringToCountedOemString(
5097 IN OUT POEM_STRING DestinationString
,
5098 IN PCUNICODE_STRING SourceString
,
5099 IN BOOLEAN AllocateDestinationString
5106 IN USHORT CompressionFormat
,
5107 IN OUT PUCHAR
*CompressedBuffer
,
5108 IN PUCHAR EndOfCompressedBufferPlus1
,
5109 OUT PUCHAR
*ChunkBuffer
,
5116 RtlSecondsSince1970ToTime (
5117 IN ULONG SecondsSince1970
,
5118 OUT PLARGE_INTEGER Time
5124 RtlSetGroupSecurityDescriptor (
5125 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
5127 IN BOOLEAN GroupDefaulted
5133 RtlSetOwnerSecurityDescriptor (
5134 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
5136 IN BOOLEAN OwnerDefaulted
5142 RtlSetSaclSecurityDescriptor (
5143 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
5144 IN BOOLEAN SaclPresent
,
5146 IN BOOLEAN SaclDefaulted
5152 RtlSubAuthorityCountSid (
5159 RtlSubAuthoritySid (
5161 IN ULONG SubAuthority
5167 RtlUnicodeStringToCountedOemString (
5168 IN OUT POEM_STRING DestinationString
,
5169 IN PCUNICODE_STRING SourceString
,
5170 IN BOOLEAN AllocateDestinationString
5176 RtlUnicodeToMultiByteN(
5177 OUT PCHAR MultiByteString
,
5178 IN ULONG MaxBytesInMultiByteString
,
5179 OUT PULONG BytesInMultiByteString OPTIONAL
,
5180 IN PWCH UnicodeString
,
5181 IN ULONG BytesInUnicodeString
5188 OUT PWSTR UnicodeString
,
5189 IN ULONG MaxBytesInUnicodeString
,
5190 OUT PULONG BytesInUnicodeString OPTIONAL
,
5192 IN ULONG BytesInOemString
5195 /* RTL Splay Tree Functions */
5199 RtlSplay(PRTL_SPLAY_LINKS Links
);
5204 RtlDelete(PRTL_SPLAY_LINKS Links
);
5210 PRTL_SPLAY_LINKS Links
,
5211 PRTL_SPLAY_LINKS
*Root
5217 RtlSubtreeSuccessor(PRTL_SPLAY_LINKS Links
);
5222 RtlSubtreePredecessor(PRTL_SPLAY_LINKS Links
);
5227 RtlRealSuccessor(PRTL_SPLAY_LINKS Links
);
5232 RtlRealPredecessor(PRTL_SPLAY_LINKS Links
);
5234 #define RtlIsLeftChild(Links) \
5235 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
5237 #define RtlIsRightChild(Links) \
5238 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
5240 #define RtlRightChild(Links) \
5241 ((PRTL_SPLAY_LINKS)(Links))->RightChild
5243 #define RtlIsRoot(Links) \
5244 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
5246 #define RtlLeftChild(Links) \
5247 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
5249 #define RtlParent(Links) \
5250 ((PRTL_SPLAY_LINKS)(Links))->Parent
5252 #define RtlInitializeSplayLinks(Links) \
5254 PRTL_SPLAY_LINKS _SplayLinks; \
5255 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
5256 _SplayLinks->Parent = _SplayLinks; \
5257 _SplayLinks->LeftChild = NULL; \
5258 _SplayLinks->RightChild = NULL; \
5261 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
5263 PRTL_SPLAY_LINKS _SplayParent; \
5264 PRTL_SPLAY_LINKS _SplayChild; \
5265 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
5266 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
5267 _SplayParent->LeftChild = _SplayChild; \
5268 _SplayChild->Parent = _SplayParent; \
5271 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
5273 PRTL_SPLAY_LINKS _SplayParent; \
5274 PRTL_SPLAY_LINKS _SplayChild; \
5275 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
5276 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
5277 _SplayParent->RightChild = _SplayChild; \
5278 _SplayChild->Parent = _SplayParent; \
5289 // RTL time functions
5295 RtlTimeToSecondsSince1980 (
5296 PLARGE_INTEGER Time
,
5297 PULONG ElapsedSeconds
5303 RtlSecondsSince1980ToTime (
5304 ULONG ElapsedSeconds
,
5311 RtlTimeToSecondsSince1970 (
5312 PLARGE_INTEGER Time
,
5313 PULONG ElapsedSeconds
5319 RtlSecondsSince1970ToTime (
5320 ULONG ElapsedSeconds
,
5327 SeAppendPrivileges (
5328 PACCESS_STATE AccessState
,
5329 PPRIVILEGE_SET Privileges
5335 SeAuditingFileEvents (
5336 IN BOOLEAN AccessGranted
,
5337 IN PSECURITY_DESCRIPTOR SecurityDescriptor
5343 SeAuditingFileOrGlobalEvents (
5344 IN BOOLEAN AccessGranted
,
5345 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5346 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
5352 SeCaptureSubjectContext (
5353 OUT PSECURITY_SUBJECT_CONTEXT SubjectContext
5359 SeCreateClientSecurity (
5361 IN PSECURITY_QUALITY_OF_SERVICE QualityOfService
,
5362 IN BOOLEAN RemoteClient
,
5363 OUT PSECURITY_CLIENT_CONTEXT ClientContext
5366 #if (VER_PRODUCTBUILD >= 2195)
5371 SeCreateClientSecurityFromSubjectContext (
5372 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
5373 IN PSECURITY_QUALITY_OF_SERVICE QualityOfService
,
5374 IN BOOLEAN ServerIsRemote
,
5375 OUT PSECURITY_CLIENT_CONTEXT ClientContext
5378 #endif /* (VER_PRODUCTBUILD >= 2195) */
5381 #define SeLengthSid( Sid ) \
5382 (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
5384 #define SeDeleteClientSecurity(C) { \
5385 if (SeTokenType((C)->ClientToken) == TokenPrimary) { \
5386 PsDereferencePrimaryToken( (C)->ClientToken ); \
5388 PsDereferenceImpersonationToken( (C)->ClientToken ); \
5395 SeDeleteObjectAuditAlarm (
5400 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
5406 IN PPRIVILEGE_SET Privileges
5412 SeImpersonateClient (
5413 IN PSECURITY_CLIENT_CONTEXT ClientContext
,
5414 IN PETHREAD ServerThread OPTIONAL
5417 #if (VER_PRODUCTBUILD >= 2195)
5422 SeImpersonateClientEx (
5423 IN PSECURITY_CLIENT_CONTEXT ClientContext
,
5424 IN PETHREAD ServerThread OPTIONAL
5427 #endif /* (VER_PRODUCTBUILD >= 2195) */
5432 SeLockSubjectContext (
5433 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
5439 SeMarkLogonSessionForTerminationNotification (
5446 SeOpenObjectAuditAlarm (
5447 IN PUNICODE_STRING ObjectTypeName
,
5448 IN PVOID Object OPTIONAL
,
5449 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL
,
5450 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5451 IN PACCESS_STATE AccessState
,
5452 IN BOOLEAN ObjectCreated
,
5453 IN BOOLEAN AccessGranted
,
5454 IN KPROCESSOR_MODE AccessMode
,
5455 OUT PBOOLEAN GenerateOnClose
5461 SeOpenObjectForDeleteAuditAlarm (
5462 IN PUNICODE_STRING ObjectTypeName
,
5463 IN PVOID Object OPTIONAL
,
5464 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL
,
5465 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5466 IN PACCESS_STATE AccessState
,
5467 IN BOOLEAN ObjectCreated
,
5468 IN BOOLEAN AccessGranted
,
5469 IN KPROCESSOR_MODE AccessMode
,
5470 OUT PBOOLEAN GenerateOnClose
5477 IN OUT PPRIVILEGE_SET RequiredPrivileges
,
5478 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
5479 IN KPROCESSOR_MODE AccessMode
5485 SeQueryAuthenticationIdToken (
5486 IN PACCESS_TOKEN Token
,
5490 #if (VER_PRODUCTBUILD >= 2195)
5495 SeQueryInformationToken (
5496 IN PACCESS_TOKEN Token
,
5497 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
5498 OUT PVOID
*TokenInformation
5501 #endif /* (VER_PRODUCTBUILD >= 2195) */
5506 SeQuerySecurityDescriptorInfo (
5507 IN PSECURITY_INFORMATION SecurityInformation
,
5508 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
5509 IN OUT PULONG Length
,
5510 IN PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
5513 #if (VER_PRODUCTBUILD >= 2195)
5518 SeQuerySessionIdToken (
5519 IN PACCESS_TOKEN Token
,
5523 #endif /* (VER_PRODUCTBUILD >= 2195) */
5525 #define SeQuerySubjectContextToken( SubjectContext ) \
5526 ( ARGUMENT_PRESENT( \
5527 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken \
5529 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken : \
5530 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
5532 typedef NTSTATUS (NTAPI
*PSE_LOGON_SESSION_TERMINATED_ROUTINE
) (
5539 SeRegisterLogonSessionTerminatedRoutine (
5540 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
5546 SeReleaseSubjectContext (
5547 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
5553 SeSetAccessStateGenericMapping (
5554 PACCESS_STATE AccessState
,
5555 PGENERIC_MAPPING GenericMapping
5561 SeSetSecurityDescriptorInfo (
5562 IN PVOID Object OPTIONAL
,
5563 IN PSECURITY_INFORMATION SecurityInformation
,
5564 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5565 IN OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
5566 IN POOL_TYPE PoolType
,
5567 IN PGENERIC_MAPPING GenericMapping
5570 #if (VER_PRODUCTBUILD >= 2195)
5575 SeSetSecurityDescriptorInfoEx (
5576 IN PVOID Object OPTIONAL
,
5577 IN PSECURITY_INFORMATION SecurityInformation
,
5578 IN PSECURITY_DESCRIPTOR ModificationDescriptor
,
5579 IN OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
5580 IN ULONG AutoInheritFlags
,
5581 IN POOL_TYPE PoolType
,
5582 IN PGENERIC_MAPPING GenericMapping
5589 IN PACCESS_TOKEN Token
5595 SeTokenIsRestricted (
5596 IN PACCESS_TOKEN Token
5602 SeLocateProcessImageName(
5603 IN PEPROCESS Process
,
5604 OUT PUNICODE_STRING
*pImageFileName
5607 #endif /* (VER_PRODUCTBUILD >= 2195) */
5613 IN PACCESS_TOKEN Token
5619 SeUnlockSubjectContext (
5620 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
5626 SeUnregisterLogonSessionTerminatedRoutine (
5627 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
5630 #if (VER_PRODUCTBUILD >= 2195)
5635 ZwAdjustPrivilegesToken (
5636 IN HANDLE TokenHandle
,
5637 IN BOOLEAN DisableAllPrivileges
,
5638 IN PTOKEN_PRIVILEGES NewState
,
5639 IN ULONG BufferLength
,
5640 OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL
,
5641 OUT PULONG ReturnLength
5644 #endif /* (VER_PRODUCTBUILD >= 2195) */
5650 IN HANDLE ThreadHandle
5656 ZwAllocateVirtualMemory (
5657 IN HANDLE ProcessHandle
,
5658 IN OUT PVOID
*BaseAddress
,
5659 IN ULONG_PTR ZeroBits
,
5660 IN OUT PSIZE_T RegionSize
,
5661 IN ULONG AllocationType
,
5667 NtAccessCheckByTypeAndAuditAlarm(
5668 IN PUNICODE_STRING SubsystemName
,
5670 IN PUNICODE_STRING ObjectTypeName
,
5671 IN PUNICODE_STRING ObjectName
,
5672 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5673 IN PSID PrincipalSelfSid
,
5674 IN ACCESS_MASK DesiredAccess
,
5675 IN AUDIT_EVENT_TYPE AuditType
,
5677 IN POBJECT_TYPE_LIST ObjectTypeList
,
5678 IN ULONG ObjectTypeLength
,
5679 IN PGENERIC_MAPPING GenericMapping
,
5680 IN BOOLEAN ObjectCreation
,
5681 OUT PACCESS_MASK GrantedAccess
,
5682 OUT PNTSTATUS AccessStatus
,
5683 OUT PBOOLEAN GenerateOnClose
5688 NtAccessCheckByTypeResultListAndAuditAlarm(
5689 IN PUNICODE_STRING SubsystemName
,
5691 IN PUNICODE_STRING ObjectTypeName
,
5692 IN PUNICODE_STRING ObjectName
,
5693 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5694 IN PSID PrincipalSelfSid
,
5695 IN ACCESS_MASK DesiredAccess
,
5696 IN AUDIT_EVENT_TYPE AuditType
,
5698 IN POBJECT_TYPE_LIST ObjectTypeList
,
5699 IN ULONG ObjectTypeLength
,
5700 IN PGENERIC_MAPPING GenericMapping
,
5701 IN BOOLEAN ObjectCreation
,
5702 OUT PACCESS_MASK GrantedAccess
,
5703 OUT PNTSTATUS AccessStatus
,
5704 OUT PBOOLEAN GenerateOnClose
5709 NtAccessCheckByTypeResultListAndAuditAlarmByHandle(
5710 IN PUNICODE_STRING SubsystemName
,
5712 IN HANDLE ClientToken
,
5713 IN PUNICODE_STRING ObjectTypeName
,
5714 IN PUNICODE_STRING ObjectName
,
5715 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5716 IN PSID PrincipalSelfSid
,
5717 IN ACCESS_MASK DesiredAccess
,
5718 IN AUDIT_EVENT_TYPE AuditType
,
5720 IN POBJECT_TYPE_LIST ObjectTypeList
,
5721 IN ULONG ObjectTypeLength
,
5722 IN PGENERIC_MAPPING GenericMapping
,
5723 IN BOOLEAN ObjectCreation
,
5724 OUT PACCESS_MASK GrantedAccess
,
5725 OUT PNTSTATUS AccessStatus
,
5726 OUT PBOOLEAN GenerateOnClose
5732 ZwAccessCheckAndAuditAlarm (
5733 IN PUNICODE_STRING SubsystemName
,
5735 IN PUNICODE_STRING ObjectTypeName
,
5736 IN PUNICODE_STRING ObjectName
,
5737 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5738 IN ACCESS_MASK DesiredAccess
,
5739 IN PGENERIC_MAPPING GenericMapping
,
5740 IN BOOLEAN ObjectCreation
,
5741 OUT PACCESS_MASK GrantedAccess
,
5742 OUT PBOOLEAN AccessStatus
,
5743 OUT PBOOLEAN GenerateOnClose
5746 #if (VER_PRODUCTBUILD >= 2195)
5752 IN HANDLE FileHandle
,
5753 OUT PIO_STATUS_BLOCK IoStatusBlock
5756 #endif /* (VER_PRODUCTBUILD >= 2195) */
5762 IN HANDLE EventHandle
5768 ZwCloseObjectAuditAlarm (
5769 IN PUNICODE_STRING SubsystemName
,
5771 IN BOOLEAN GenerateOnClose
5778 OUT PHANDLE SectionHandle
,
5779 IN ACCESS_MASK DesiredAccess
,
5780 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
5781 IN PLARGE_INTEGER MaximumSize OPTIONAL
,
5782 IN ULONG SectionPageProtection
,
5783 IN ULONG AllocationAttributes
,
5784 IN HANDLE FileHandle OPTIONAL
5790 ZwCreateSymbolicLinkObject (
5791 OUT PHANDLE SymbolicLinkHandle
,
5792 IN ACCESS_MASK DesiredAccess
,
5793 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5794 IN PUNICODE_STRING TargetName
5801 IN POBJECT_ATTRIBUTES ObjectAttributes
5809 IN PUNICODE_STRING Name
5815 ZwDeviceIoControlFile (
5816 IN HANDLE FileHandle
,
5817 IN HANDLE Event OPTIONAL
,
5818 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
5819 IN PVOID ApcContext OPTIONAL
,
5820 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5821 IN ULONG IoControlCode
,
5822 IN PVOID InputBuffer OPTIONAL
,
5823 IN ULONG InputBufferLength
,
5824 OUT PVOID OutputBuffer OPTIONAL
,
5825 IN ULONG OutputBufferLength
5832 IN PUNICODE_STRING String
5839 IN HANDLE SourceProcessHandle
,
5840 IN HANDLE SourceHandle
,
5841 IN HANDLE TargetProcessHandle OPTIONAL
,
5842 OUT PHANDLE TargetHandle OPTIONAL
,
5843 IN ACCESS_MASK DesiredAccess
,
5844 IN ULONG HandleAttributes
,
5852 IN HANDLE ExistingTokenHandle
,
5853 IN ACCESS_MASK DesiredAccess
,
5854 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5855 IN BOOLEAN EffectiveOnly
,
5856 IN TOKEN_TYPE TokenType
,
5857 OUT PHANDLE NewTokenHandle
5863 IN HANDLE ExistingTokenHandle
,
5865 IN PTOKEN_GROUPS SidsToDisable OPTIONAL
,
5866 IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL
,
5867 IN PTOKEN_GROUPS RestrictedSids OPTIONAL
,
5868 OUT PHANDLE NewTokenHandle
5874 ZwFlushInstructionCache (
5875 IN HANDLE ProcessHandle
,
5876 IN PVOID BaseAddress OPTIONAL
,
5884 IN HANDLE FileHandle
,
5885 OUT PIO_STATUS_BLOCK IoStatusBlock
5888 #if (VER_PRODUCTBUILD >= 2195)
5893 ZwFlushVirtualMemory (
5894 IN HANDLE ProcessHandle
,
5895 IN OUT PVOID
*BaseAddress
,
5896 IN OUT PULONG FlushSize
,
5897 OUT PIO_STATUS_BLOCK IoStatusBlock
5900 #endif /* (VER_PRODUCTBUILD >= 2195) */
5905 ZwFreeVirtualMemory (
5906 IN HANDLE ProcessHandle
,
5907 IN OUT PVOID
*BaseAddress
,
5908 IN OUT PSIZE_T RegionSize
,
5916 IN HANDLE FileHandle
,
5917 IN HANDLE Event OPTIONAL
,
5918 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
5919 IN PVOID ApcContext OPTIONAL
,
5920 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5921 IN ULONG FsControlCode
,
5922 IN PVOID InputBuffer OPTIONAL
,
5923 IN ULONG InputBufferLength
,
5924 OUT PVOID OutputBuffer OPTIONAL
,
5925 IN ULONG OutputBufferLength
5928 #if (VER_PRODUCTBUILD >= 2195)
5933 ZwInitiatePowerAction (
5934 IN POWER_ACTION SystemAction
,
5935 IN SYSTEM_POWER_STATE MinSystemState
,
5937 IN BOOLEAN Asynchronous
5940 #endif /* (VER_PRODUCTBUILD >= 2195) */
5946 /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
5947 IN PUNICODE_STRING RegistryPath
5954 IN POBJECT_ATTRIBUTES KeyObjectAttributes
,
5955 IN POBJECT_ATTRIBUTES FileObjectAttributes
5962 IN HANDLE KeyHandle
,
5963 IN HANDLE EventHandle OPTIONAL
,
5964 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
5965 IN PVOID ApcContext OPTIONAL
,
5966 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5967 IN ULONG NotifyFilter
,
5968 IN BOOLEAN WatchSubtree
,
5970 IN ULONG BufferLength
,
5971 IN BOOLEAN Asynchronous
5977 ZwOpenDirectoryObject (
5978 OUT PHANDLE DirectoryHandle
,
5979 IN ACCESS_MASK DesiredAccess
,
5980 IN POBJECT_ATTRIBUTES ObjectAttributes
5987 OUT PHANDLE EventHandle
,
5988 IN ACCESS_MASK DesiredAccess
,
5989 IN POBJECT_ATTRIBUTES ObjectAttributes
5996 OUT PHANDLE ProcessHandle
,
5997 IN ACCESS_MASK DesiredAccess
,
5998 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5999 IN PCLIENT_ID ClientId OPTIONAL
6005 ZwOpenProcessToken (
6006 IN HANDLE ProcessHandle
,
6007 IN ACCESS_MASK DesiredAccess
,
6008 OUT PHANDLE TokenHandle
6015 OUT PHANDLE ThreadHandle
,
6016 IN ACCESS_MASK DesiredAccess
,
6017 IN POBJECT_ATTRIBUTES ObjectAttributes
,
6018 IN PCLIENT_ID ClientId
6025 IN HANDLE ThreadHandle
,
6026 IN ACCESS_MASK DesiredAccess
,
6027 IN BOOLEAN OpenAsSelf
,
6028 OUT PHANDLE TokenHandle
6031 #if (VER_PRODUCTBUILD >= 2195)
6036 ZwPowerInformation (
6037 IN POWER_INFORMATION_LEVEL PowerInformationLevel
,
6038 IN PVOID InputBuffer OPTIONAL
,
6039 IN ULONG InputBufferLength
,
6040 OUT PVOID OutputBuffer OPTIONAL
,
6041 IN ULONG OutputBufferLength
6044 #endif /* (VER_PRODUCTBUILD >= 2195) */
6050 IN HANDLE EventHandle
,
6051 OUT PLONG PreviousState OPTIONAL
6057 ZwQueryDefaultLocale (
6058 IN BOOLEAN ThreadOrSystem
,
6065 ZwQueryDirectoryFile (
6066 IN HANDLE FileHandle
,
6067 IN HANDLE Event OPTIONAL
,
6068 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
6069 IN PVOID ApcContext OPTIONAL
,
6070 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6071 OUT PVOID FileInformation
,
6073 IN FILE_INFORMATION_CLASS FileInformationClass
,
6074 IN BOOLEAN ReturnSingleEntry
,
6075 IN PUNICODE_STRING FileName OPTIONAL
,
6076 IN BOOLEAN RestartScan
6079 #if (VER_PRODUCTBUILD >= 2195)
6084 ZwQueryDirectoryObject (
6085 IN HANDLE DirectoryHandle
,
6088 IN BOOLEAN ReturnSingleEntry
,
6089 IN BOOLEAN RestartScan
,
6090 IN OUT PULONG Context
,
6091 OUT PULONG ReturnLength OPTIONAL
6098 IN HANDLE FileHandle
,
6099 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6102 IN BOOLEAN ReturnSingleEntry
,
6103 IN PVOID EaList OPTIONAL
,
6104 IN ULONG EaListLength
,
6105 IN PULONG EaIndex OPTIONAL
,
6106 IN BOOLEAN RestartScan
6109 #endif /* (VER_PRODUCTBUILD >= 2195) */
6114 ZwQueryInformationProcess (
6115 IN HANDLE ProcessHandle
,
6116 IN PROCESSINFOCLASS ProcessInformationClass
,
6117 OUT PVOID ProcessInformation
,
6118 IN ULONG ProcessInformationLength
,
6119 OUT PULONG ReturnLength OPTIONAL
6125 ZwQueryInformationToken (
6126 IN HANDLE TokenHandle
,
6127 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
6128 OUT PVOID TokenInformation
,
6130 OUT PULONG ResultLength
6136 ZwQuerySecurityObject (
6137 IN HANDLE FileHandle
,
6138 IN SECURITY_INFORMATION SecurityInformation
,
6139 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
6141 OUT PULONG ResultLength
6147 ZwQueryVolumeInformationFile (
6148 IN HANDLE FileHandle
,
6149 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6150 OUT PVOID FsInformation
,
6152 IN FS_INFORMATION_CLASS FsInformationClass
6159 IN POBJECT_ATTRIBUTES NewFileObjectAttributes
,
6160 IN HANDLE KeyHandle
,
6161 IN POBJECT_ATTRIBUTES OldFileObjectAttributes
6168 IN HANDLE EventHandle
,
6169 OUT PLONG PreviousState OPTIONAL
6172 #if (VER_PRODUCTBUILD >= 2195)
6178 IN HANDLE KeyHandle
,
6179 IN HANDLE FileHandle
,
6183 #endif /* (VER_PRODUCTBUILD >= 2195) */
6189 IN HANDLE KeyHandle
,
6190 IN HANDLE FileHandle
6196 ZwSetDefaultLocale (
6197 IN BOOLEAN ThreadOrSystem
,
6201 #if (VER_PRODUCTBUILD >= 2195)
6206 ZwSetDefaultUILanguage (
6207 IN LANGID LanguageId
6214 IN HANDLE FileHandle
,
6215 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6220 #endif /* (VER_PRODUCTBUILD >= 2195) */
6226 IN HANDLE EventHandle
,
6227 OUT PLONG PreviousState OPTIONAL
6233 ZwSetInformationProcess (
6234 IN HANDLE ProcessHandle
,
6235 IN PROCESSINFOCLASS ProcessInformationClass
,
6236 IN PVOID ProcessInformation
,
6237 IN ULONG ProcessInformationLength
6240 #if (VER_PRODUCTBUILD >= 2195)
6245 ZwSetSecurityObject (
6247 IN SECURITY_INFORMATION SecurityInformation
,
6248 IN PSECURITY_DESCRIPTOR SecurityDescriptor
6251 #endif /* (VER_PRODUCTBUILD >= 2195) */
6257 IN PLARGE_INTEGER NewTime
,
6258 OUT PLARGE_INTEGER OldTime OPTIONAL
6261 #if (VER_PRODUCTBUILD >= 2195)
6266 ZwSetVolumeInformationFile (
6267 IN HANDLE FileHandle
,
6268 OUT PIO_STATUS_BLOCK IoStatusBlock
,
6269 IN PVOID FsInformation
,
6271 IN FS_INFORMATION_CLASS FsInformationClass
6274 #endif /* (VER_PRODUCTBUILD >= 2195) */
6279 ZwTerminateProcess (
6280 IN HANDLE ProcessHandle OPTIONAL
,
6281 IN NTSTATUS ExitStatus
6288 /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
6289 IN PUNICODE_STRING RegistryPath
6296 IN POBJECT_ATTRIBUTES KeyObjectAttributes
6302 ZwWaitForSingleObject (
6304 IN BOOLEAN Alertable
,
6305 IN PLARGE_INTEGER Timeout OPTIONAL
6311 ZwWaitForMultipleObjects (
6312 IN ULONG HandleCount
,
6314 IN WAIT_TYPE WaitType
,
6315 IN BOOLEAN Alertable
,
6316 IN PLARGE_INTEGER Timeout OPTIONAL
6332 #endif /* _NTIFS_ */