4 * Windows NT Filesystem Driver Developer Kit
6 * This file is part of the w32api package.
9 * Created by Bo Brantén <bosse@acc.umu.se>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
28 #pragma GCC system_header
40 #define VER_PRODUCTBUILD 10000
47 #define NTKERNELAPI STDCALL
50 typedef struct _SE_EXPORTS
*PSE_EXPORTS
;
52 extern PUCHAR
*FsRtlLegalAnsiCharacterArray
;
53 extern PSE_EXPORTS SeExports
;
54 extern PACL SePublicDefaultDacl
;
55 extern PACL SeSystemDefaultDacl
;
57 #define ANSI_DOS_STAR ('<')
58 #define ANSI_DOS_QM ('>')
59 #define ANSI_DOS_DOT ('"')
61 #define DOS_STAR (L'<')
63 #define DOS_DOT (L'"')
66 #define ACCESS_ALLOWED_ACE_TYPE (0x0)
67 #define ACCESS_DENIED_ACE_TYPE (0x1)
68 #define SYSTEM_AUDIT_ACE_TYPE (0x2)
69 #define SYSTEM_ALARM_ACE_TYPE (0x3)
71 #define COMPRESSION_FORMAT_NONE (0x0000)
72 #define COMPRESSION_FORMAT_DEFAULT (0x0001)
73 #define COMPRESSION_FORMAT_LZNT1 (0x0002)
74 #define COMPRESSION_ENGINE_STANDARD (0x0000)
75 #define COMPRESSION_ENGINE_MAXIMUM (0x0100)
76 #define COMPRESSION_ENGINE_HIBER (0x0200)
78 #define FILE_ACTION_ADDED 0x00000001
79 #define FILE_ACTION_REMOVED 0x00000002
80 #define FILE_ACTION_MODIFIED 0x00000003
81 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
82 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
83 #define FILE_ACTION_ADDED_STREAM 0x00000006
84 #define FILE_ACTION_REMOVED_STREAM 0x00000007
85 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
86 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
87 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
88 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
91 #define FILE_EA_TYPE_BINARY 0xfffe
92 #define FILE_EA_TYPE_ASCII 0xfffd
93 #define FILE_EA_TYPE_BITMAP 0xfffb
94 #define FILE_EA_TYPE_METAFILE 0xfffa
95 #define FILE_EA_TYPE_ICON 0xfff9
96 #define FILE_EA_TYPE_EA 0xffee
97 #define FILE_EA_TYPE_MVMT 0xffdf
98 #define FILE_EA_TYPE_MVST 0xffde
99 #define FILE_EA_TYPE_ASN1 0xffdd
100 #define FILE_EA_TYPE_FAMILY_IDS 0xff01
102 #define FILE_NEED_EA 0x00000080
104 /* also in winnt.h */
105 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
106 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
107 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
108 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
109 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
110 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
111 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
112 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
113 #define FILE_NOTIFY_CHANGE_EA 0x00000080
114 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
115 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
116 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
117 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
118 #define FILE_NOTIFY_VALID_MASK 0x00000fff
121 #define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007
122 #define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008
124 #define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009
126 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
127 #define FILE_CASE_PRESERVED_NAMES 0x00000002
128 #define FILE_UNICODE_ON_DISK 0x00000004
129 #define FILE_PERSISTENT_ACLS 0x00000008
130 #define FILE_FILE_COMPRESSION 0x00000010
131 #define FILE_VOLUME_QUOTAS 0x00000020
132 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
133 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
134 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
135 #define FS_LFN_APIS 0x00004000
136 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
137 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
138 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
139 #define FILE_NAMED_STREAMS 0x00040000
141 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
142 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
144 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
145 #define FILE_PIPE_MESSAGE_MODE 0x00000001
147 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
148 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
150 #define FILE_PIPE_INBOUND 0x00000000
151 #define FILE_PIPE_OUTBOUND 0x00000001
152 #define FILE_PIPE_FULL_DUPLEX 0x00000002
154 #define FILE_PIPE_DISCONNECTED_STATE 0x00000001
155 #define FILE_PIPE_LISTENING_STATE 0x00000002
156 #define FILE_PIPE_CONNECTED_STATE 0x00000003
157 #define FILE_PIPE_CLOSING_STATE 0x00000004
159 #define FILE_PIPE_CLIENT_END 0x00000000
160 #define FILE_PIPE_SERVER_END 0x00000001
162 #define FILE_PIPE_READ_DATA 0x00000000
163 #define FILE_PIPE_WRITE_SPACE 0x00000001
165 #define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
166 #define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
167 #define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
168 #define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
169 #define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
170 #define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
171 #define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
172 #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
173 #define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
174 #define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
175 #define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
176 #define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
177 #define FILE_STORAGE_TYPE_MASK 0x000f0000
178 #define FILE_STORAGE_TYPE_SHIFT 16
180 #define FILE_VC_QUOTA_NONE 0x00000000
181 #define FILE_VC_QUOTA_TRACK 0x00000001
182 #define FILE_VC_QUOTA_ENFORCE 0x00000002
183 #define FILE_VC_QUOTA_MASK 0x00000003
185 #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
186 #define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008
188 #define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010
189 #define FILE_VC_LOG_QUOTA_LIMIT 0x00000020
190 #define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040
191 #define FILE_VC_LOG_VOLUME_LIMIT 0x00000080
193 #define FILE_VC_QUOTAS_INCOMPLETE 0x00000100
194 #define FILE_VC_QUOTAS_REBUILDING 0x00000200
196 #define FILE_VC_VALID_MASK 0x000003ff
198 #define FSRTL_FLAG_FILE_MODIFIED (0x01)
199 #define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
200 #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
201 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
202 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
203 #define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
204 #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
206 #define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
208 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
209 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
210 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
211 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
212 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG (0x04)
214 #define FSRTL_VOLUME_DISMOUNT 1
215 #define FSRTL_VOLUME_DISMOUNT_FAILED 2
216 #define FSRTL_VOLUME_LOCK 3
217 #define FSRTL_VOLUME_LOCK_FAILED 4
218 #define FSRTL_VOLUME_UNLOCK 5
219 #define FSRTL_VOLUME_MOUNT 6
221 #define FSRTL_WILD_CHARACTER 0x08
224 #define HARDWARE_PTE HARDWARE_PTE_X86
225 #define PHARDWARE_PTE PHARDWARE_PTE_X86
227 #define HARDWARE_PTE ULONG
228 #define PHARDWARE_PTE PULONG
231 #define IO_CHECK_CREATE_PARAMETERS 0x0200
232 #define IO_ATTACH_DEVICE 0x0400
234 #define IO_ATTACH_DEVICE_API 0x80000000
235 /* also in winnt.h */
236 #define IO_COMPLETION_QUERY_STATE 0x0001
237 #define IO_COMPLETION_MODIFY_STATE 0x0002
238 #define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
240 #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64
241 #define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024
243 #define IO_TYPE_APC 18
244 #define IO_TYPE_DPC 19
245 #define IO_TYPE_DEVICE_QUEUE 20
246 #define IO_TYPE_EVENT_PAIR 21
247 #define IO_TYPE_INTERRUPT 22
248 #define IO_TYPE_PROFILE 23
250 #define IRP_BEING_VERIFIED 0x10
252 #define MAILSLOT_CLASS_FIRSTCLASS 1
253 #define MAILSLOT_CLASS_SECONDCLASS 2
255 #define MAILSLOT_SIZE_AUTO 0
257 #define MAP_PROCESS 1L
258 #define MAP_SYSTEM 2L
259 #define MEM_DOS_LIM 0x40000000
260 /* also in winnt.h */
261 #define MEM_IMAGE SEC_IMAGE
263 #define OB_TYPE_TYPE 1
264 #define OB_TYPE_DIRECTORY 2
265 #define OB_TYPE_SYMBOLIC_LINK 3
266 #define OB_TYPE_TOKEN 4
267 #define OB_TYPE_PROCESS 5
268 #define OB_TYPE_THREAD 6
269 #define OB_TYPE_EVENT 7
270 #define OB_TYPE_EVENT_PAIR 8
271 #define OB_TYPE_MUTANT 9
272 #define OB_TYPE_SEMAPHORE 10
273 #define OB_TYPE_TIMER 11
274 #define OB_TYPE_PROFILE 12
275 #define OB_TYPE_WINDOW_STATION 13
276 #define OB_TYPE_DESKTOP 14
277 #define OB_TYPE_SECTION 15
278 #define OB_TYPE_KEY 16
279 #define OB_TYPE_PORT 17
280 #define OB_TYPE_ADAPTER 18
281 #define OB_TYPE_CONTROLLER 19
282 #define OB_TYPE_DEVICE 20
283 #define OB_TYPE_DRIVER 21
284 #define OB_TYPE_IO_COMPLETION 22
285 #define OB_TYPE_FILE 23
288 #define PIN_EXCLUSIVE (2)
289 #define PIN_NO_READ (4)
290 #define PIN_IF_BCB (8)
292 #define PORT_CONNECT 0x0001
293 #define PORT_ALL_ACCESS (STANDARD_RIGHTS_ALL |\
295 /* also in winnt.h */
296 #define SEC_BASED 0x00200000
297 #define SEC_NO_CHANGE 0x00400000
298 #define SEC_FILE 0x00800000
299 #define SEC_IMAGE 0x01000000
300 #define SEC_VLM 0x02000000
301 #define SEC_RESERVE 0x04000000
302 #define SEC_COMMIT 0x08000000
303 #define SEC_NOCACHE 0x10000000
305 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
306 #define SECURITY_WORLD_RID (0x00000000L)
308 #define SID_REVISION 1
310 #define TOKEN_ASSIGN_PRIMARY (0x0001)
311 #define TOKEN_DUPLICATE (0x0002)
312 #define TOKEN_IMPERSONATE (0x0004)
313 #define TOKEN_QUERY (0x0008)
314 #define TOKEN_QUERY_SOURCE (0x0010)
315 #define TOKEN_ADJUST_PRIVILEGES (0x0020)
316 #define TOKEN_ADJUST_GROUPS (0x0040)
317 #define TOKEN_ADJUST_DEFAULT (0x0080)
319 #define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
320 TOKEN_ASSIGN_PRIMARY |\
324 TOKEN_QUERY_SOURCE |\
325 TOKEN_ADJUST_PRIVILEGES |\
326 TOKEN_ADJUST_GROUPS |\
327 TOKEN_ADJUST_DEFAULT)
329 #define TOKEN_READ (STANDARD_RIGHTS_READ |\
332 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\
333 TOKEN_ADJUST_PRIVILEGES |\
334 TOKEN_ADJUST_GROUPS |\
335 TOKEN_ADJUST_DEFAULT)
337 #define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
339 #define TOKEN_SOURCE_LENGTH 8
342 #define TOKEN_HAS_TRAVERSE_PRIVILEGE 0x01
343 #define TOKEN_HAS_BACKUP_PRIVILEGE 0x02
344 #define TOKEN_HAS_RESTORE_PRIVILEGE 0x04
345 #define TOKEN_HAS_ADMIN_GROUP 0x08
346 #define TOKEN_IS_RESTRICTED 0x10
348 #define VACB_MAPPING_GRANULARITY (0x40000)
349 #define VACB_OFFSET_SHIFT (18)
351 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
352 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
353 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
354 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
355 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
356 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
357 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
358 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
359 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
361 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
362 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
363 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
365 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
366 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
367 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
370 #define FSCTL_MARK_AS_SYSTEM_HIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
371 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
372 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
373 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
374 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
375 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
377 #if (VER_PRODUCTBUILD >= 1381)
379 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
380 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
381 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS)
382 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
383 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
384 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
385 #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
386 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
388 #endif /* (VER_PRODUCTBUILD >= 1381) */
390 #if (VER_PRODUCTBUILD >= 2195)
392 #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
393 #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
394 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
396 #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
397 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA)
398 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
399 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA)
400 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA)
401 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
402 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA)
403 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_READ_DATA)
404 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA)
405 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_READ_DATA)
406 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA)
407 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
408 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA)
409 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
410 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
411 #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
412 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
413 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
414 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_ANY_ACCESS)
415 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_ANY_ACCESS)
416 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_READ_DATA)
417 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_READ_DATA)
418 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_READ_DATA)
419 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
420 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
421 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
422 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
423 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
424 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
425 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
426 #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
427 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
428 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
429 #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
430 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
431 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
433 #endif /* (VER_PRODUCTBUILD >= 2195) */
435 #define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
437 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
438 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
439 #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
440 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
441 #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
442 #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
443 #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
444 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
446 #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
447 #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
448 #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
449 #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
450 #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
451 #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
452 #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
453 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
454 #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
455 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
456 #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
457 #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
458 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
459 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
461 #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
464 typedef PVOID OPLOCK
, *POPLOCK
;
465 typedef PVOID PWOW64_PROCESS
;
467 typedef struct _CACHE_MANAGER_CALLBACKS
*PCACHE_MANAGER_CALLBACKS
;
468 typedef struct _EPROCESS_QUOTA_BLOCK
*PEPROCESS_QUOTA_BLOCK
;
469 typedef struct _FILE_GET_QUOTA_INFORMATION
*PFILE_GET_QUOTA_INFORMATION
;
470 typedef struct _HANDLE_TABLE
*PHANDLE_TABLE
;
471 typedef struct _KEVENT_PAIR
*PKEVENT_PAIR
;
472 typedef struct _KPROCESS
*PKPROCESS
;
473 typedef struct _KQUEUE
*PKQUEUE
;
474 typedef struct _KTRAP_FRAME
*PKTRAP_FRAME
;
475 typedef struct _MAILSLOT_CREATE_PARAMETERS
*PMAILSLOT_CREATE_PARAMETERS
;
476 typedef struct _MMWSL
*PMMWSL
;
477 typedef struct _NAMED_PIPE_CREATE_PARAMETERS
*PNAMED_PIPE_CREATE_PARAMETERS
;
478 typedef struct _OBJECT_DIRECTORY
*POBJECT_DIRECTORY
;
479 typedef struct _PAGEFAULT_HISTORY
*PPAGEFAULT_HISTORY
;
480 typedef struct _PS_IMPERSONATION_INFORMATION
*PPS_IMPERSONATION_INFORMATION
;
481 typedef struct _SECTION_OBJECT
*PSECTION_OBJECT
;
482 typedef struct _SHARED_CACHE_MAP
*PSHARED_CACHE_MAP
;
483 typedef struct _TERMINATION_PORT
*PTERMINATION_PORT
;
484 typedef struct _VACB
*PVACB
;
485 typedef struct _VAD_HEADER
*PVAD_HEADER
;
487 typedef struct _NOTIFY_SYNC
500 } NOTIFY_SYNC
, * PNOTIFY_SYNC
;
502 typedef enum _FAST_IO_POSSIBLE
{
508 typedef enum _FILE_STORAGE_TYPE
{
509 StorageTypeDefault
= 1,
510 StorageTypeDirectory
,
512 StorageTypeJunctionPoint
,
514 StorageTypeStructuredStorage
,
515 StorageTypeEmbedding
,
519 typedef enum _IO_COMPLETION_INFORMATION_CLASS
{
520 IoCompletionBasicInformation
521 } IO_COMPLETION_INFORMATION_CLASS
;
523 typedef enum _OBJECT_INFO_CLASS
{
531 typedef struct _HARDWARE_PTE_X86
{
535 ULONG WriteThrough
: 1;
536 ULONG CacheDisable
: 1;
541 ULONG CopyOnWrite
: 1;
544 ULONG PageFrameNumber
: 20;
545 } HARDWARE_PTE_X86
, *PHARDWARE_PTE_X86
;
547 typedef struct _KAPC_STATE
{
548 LIST_ENTRY ApcListHead
[2];
550 BOOLEAN KernelApcInProgress
;
551 BOOLEAN KernelApcPending
;
552 BOOLEAN UserApcPending
;
553 } KAPC_STATE
, *PKAPC_STATE
, *__restrict PRKAPC_STATE
;
555 typedef struct _KGDTENTRY
{
572 ULONG Reserved_0
: 1;
573 ULONG Default_Big
: 1;
574 ULONG Granularity
: 1;
578 } KGDTENTRY
, *PKGDTENTRY
;
580 typedef struct _KIDTENTRY
{
584 USHORT ExtendedOffset
;
585 } KIDTENTRY
, *PKIDTENTRY
;
587 #if (VER_PRODUCTBUILD >= 2600)
589 typedef struct _MMSUPPORT_FLAGS
{
590 ULONG SessionSpace
: 1;
591 ULONG BeingTrimmed
: 1;
592 ULONG SessionLeader
: 1;
594 ULONG WorkingSetHard
: 1;
595 ULONG AddressSpaceBeingDeleted
: 1;
596 ULONG Available
: 10;
597 ULONG AllowWorkingSetAdjustment
: 8;
598 ULONG MemoryPriority
: 8;
599 } MMSUPPORT_FLAGS
, *PMMSUPPORT_FLAGS
;
603 typedef struct _MMSUPPORT_FLAGS
{
604 ULONG SessionSpace
: 1;
605 ULONG BeingTrimmed
: 1;
606 ULONG ProcessInSession
: 1;
607 ULONG SessionLeader
: 1;
609 ULONG WorkingSetHard
: 1;
610 ULONG WriteWatch
: 1;
612 } MMSUPPORT_FLAGS
, *PMMSUPPORT_FLAGS
;
616 #if (VER_PRODUCTBUILD >= 2600)
618 typedef struct _MMSUPPORT
{
619 LARGE_INTEGER LastTrimTime
;
620 MMSUPPORT_FLAGS Flags
;
621 ULONG PageFaultCount
;
622 ULONG PeakWorkingSetSize
;
623 ULONG WorkingSetSize
;
624 ULONG MinimumWorkingSetSize
;
625 ULONG MaximumWorkingSetSize
;
626 PMMWSL VmWorkingSetList
;
627 LIST_ENTRY WorkingSetExpansionLinks
;
629 ULONG NextEstimationSlot
;
631 ULONG EstimatedAvailable
;
632 ULONG GrowthSinceLastEstimate
;
633 } MMSUPPORT
, *PMMSUPPORT
;
637 typedef struct _MMSUPPORT
{
638 LARGE_INTEGER LastTrimTime
;
639 ULONG LastTrimFaultCount
;
640 ULONG PageFaultCount
;
641 ULONG PeakWorkingSetSize
;
642 ULONG WorkingSetSize
;
643 ULONG MinimumWorkingSetSize
;
644 ULONG MaximumWorkingSetSize
;
645 PMMWSL VmWorkingSetList
;
646 LIST_ENTRY WorkingSetExpansionLinks
;
647 BOOLEAN AllowWorkingSetAdjustment
;
648 BOOLEAN AddressSpaceBeingDeleted
;
649 UCHAR ForegroundSwitchCount
;
650 UCHAR MemoryPriority
;
651 #if (VER_PRODUCTBUILD >= 2195)
654 MMSUPPORT_FLAGS Flags
;
657 ULONG NextEstimationSlot
;
659 ULONG EstimatedAvailable
;
660 ULONG GrowthSinceLastEstimate
;
661 #endif /* (VER_PRODUCTBUILD >= 2195) */
662 } MMSUPPORT
, *PMMSUPPORT
;
666 typedef struct _SE_AUDIT_PROCESS_CREATION_INFO
{
667 POBJECT_NAME_INFORMATION ImageFileName
;
668 } SE_AUDIT_PROCESS_CREATION_INFO
, *PSE_AUDIT_PROCESS_CREATION_INFO
;
670 typedef struct _BITMAP_RANGE
{
672 LARGE_INTEGER BasePage
;
673 ULONG FirstDirtyPage
;
677 } BITMAP_RANGE
, *PBITMAP_RANGE
;
679 typedef struct _CACHE_UNINITIALIZE_EVENT
{
680 struct _CACHE_UNINITIALIZE_EVENT
*Next
;
682 } CACHE_UNINITIALIZE_EVENT
, *PCACHE_UNINITIALIZE_EVENT
;
684 typedef struct _CC_FILE_SIZES
{
685 LARGE_INTEGER AllocationSize
;
686 LARGE_INTEGER FileSize
;
687 LARGE_INTEGER ValidDataLength
;
688 } CC_FILE_SIZES
, *PCC_FILE_SIZES
;
690 typedef struct _COMPRESSED_DATA_INFO
{
691 USHORT CompressionFormatAndEngine
;
692 UCHAR CompressionUnitShift
;
696 USHORT NumberOfChunks
;
697 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
698 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
700 typedef struct _DEVICE_MAP
{
701 POBJECT_DIRECTORY DosDevicesDirectory
;
702 POBJECT_DIRECTORY GlobalDosDevicesDirectory
;
703 ULONG ReferenceCount
;
706 } DEVICE_MAP
, *PDEVICE_MAP
;
708 #if (VER_PRODUCTBUILD >= 2600)
710 typedef struct _EX_FAST_REF
{
711 _ANONYMOUS_UNION
union {
716 } EX_FAST_REF
, *PEX_FAST_REF
;
718 typedef struct _EX_PUSH_LOCK
{
719 _ANONYMOUS_UNION
union {
720 _ANONYMOUS_STRUCT
struct {
728 } EX_PUSH_LOCK
, *PEX_PUSH_LOCK
;
730 typedef struct _EX_RUNDOWN_REF
{
731 _ANONYMOUS_UNION
union {
735 } EX_RUNDOWN_REF
, *PEX_RUNDOWN_REF
;
739 typedef struct _EPROCESS_QUOTA_ENTRY
{
744 } EPROCESS_QUOTA_ENTRY
, *PEPROCESS_QUOTA_ENTRY
;
746 typedef struct _EPROCESS_QUOTA_BLOCK
{
747 EPROCESS_QUOTA_ENTRY QuotaEntry
[3];
748 LIST_ENTRY QuotaList
;
749 ULONG ReferenceCount
;
751 } EPROCESS_QUOTA_BLOCK
, *PEPROCESS_QUOTA_BLOCK
;
754 * When needing these parameters cast your PIO_STACK_LOCATION to
755 * PEXTENDED_IO_STACK_LOCATION
757 #if !defined(_ALPHA_)
758 #include <pshpack4.h>
760 typedef struct _EXTENDED_IO_STACK_LOCATION
{
762 /* Included for padding */
771 PIO_SECURITY_CONTEXT SecurityContext
;
775 PMAILSLOT_CREATE_PARAMETERS Parameters
;
779 PIO_SECURITY_CONTEXT SecurityContext
;
783 PNAMED_PIPE_CREATE_PARAMETERS Parameters
;
787 ULONG OutputBufferLength
;
788 ULONG InputBufferLength
;
790 PVOID Type3InputBuffer
;
794 PLARGE_INTEGER Length
;
796 LARGE_INTEGER ByteOffset
;
801 ULONG CompletionFilter
;
806 PUNICODE_STRING FileName
;
807 FILE_INFORMATION_CLASS FileInformationClass
;
821 PFILE_GET_QUOTA_INFORMATION SidList
;
835 FS_INFORMATION_CLASS FsInformationClass
;
839 PDEVICE_OBJECT DeviceObject
;
840 PFILE_OBJECT FileObject
;
841 PIO_COMPLETION_ROUTINE CompletionRoutine
;
844 } EXTENDED_IO_STACK_LOCATION
, *PEXTENDED_IO_STACK_LOCATION
;
845 #if !defined(_ALPHA_)
849 typedef struct _FILE_ACCESS_INFORMATION
{
850 ACCESS_MASK AccessFlags
;
851 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
853 typedef struct _FILE_ALLOCATION_INFORMATION
{
854 LARGE_INTEGER AllocationSize
;
855 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
857 typedef struct _FILE_BOTH_DIR_INFORMATION
{
858 ULONG NextEntryOffset
;
860 LARGE_INTEGER CreationTime
;
861 LARGE_INTEGER LastAccessTime
;
862 LARGE_INTEGER LastWriteTime
;
863 LARGE_INTEGER ChangeTime
;
864 LARGE_INTEGER EndOfFile
;
865 LARGE_INTEGER AllocationSize
;
866 ULONG FileAttributes
;
867 ULONG FileNameLength
;
869 CCHAR ShortNameLength
;
872 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
874 typedef struct _FILE_COMPLETION_INFORMATION
{
877 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
879 typedef struct _FILE_COMPRESSION_INFORMATION
{
880 LARGE_INTEGER CompressedFileSize
;
881 USHORT CompressionFormat
;
882 UCHAR CompressionUnitShift
;
886 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
888 typedef struct _FILE_COPY_ON_WRITE_INFORMATION
{
889 BOOLEAN ReplaceIfExists
;
890 HANDLE RootDirectory
;
891 ULONG FileNameLength
;
893 } FILE_COPY_ON_WRITE_INFORMATION
, *PFILE_COPY_ON_WRITE_INFORMATION
;
895 typedef struct _FILE_DIRECTORY_INFORMATION
{
896 ULONG NextEntryOffset
;
898 LARGE_INTEGER CreationTime
;
899 LARGE_INTEGER LastAccessTime
;
900 LARGE_INTEGER LastWriteTime
;
901 LARGE_INTEGER ChangeTime
;
902 LARGE_INTEGER EndOfFile
;
903 LARGE_INTEGER AllocationSize
;
904 ULONG FileAttributes
;
905 ULONG FileNameLength
;
907 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
909 typedef struct _FILE_FULL_DIRECTORY_INFORMATION
{
910 ULONG NextEntryOffset
;
912 LARGE_INTEGER CreationTime
;
913 LARGE_INTEGER LastAccessTime
;
914 LARGE_INTEGER LastWriteTime
;
915 LARGE_INTEGER ChangeTime
;
916 LARGE_INTEGER EndOfFile
;
917 LARGE_INTEGER AllocationSize
;
918 ULONG FileAttributes
;
919 ULONG FileNameLength
;
922 } FILE_FULL_DIRECTORY_INFORMATION
, *PFILE_FULL_DIRECTORY_INFORMATION
;
924 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION
{
925 ULONG NextEntryOffset
;
927 LARGE_INTEGER CreationTime
;
928 LARGE_INTEGER LastAccessTime
;
929 LARGE_INTEGER LastWriteTime
;
930 LARGE_INTEGER ChangeTime
;
931 LARGE_INTEGER EndOfFile
;
932 LARGE_INTEGER AllocationSize
;
933 ULONG FileAttributes
;
934 ULONG FileNameLength
;
936 CHAR ShortNameLength
;
939 } FILE_BOTH_DIRECTORY_INFORMATION
, *PFILE_BOTH_DIRECTORY_INFORMATION
;
941 typedef struct _FILE_EA_INFORMATION
{
943 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
945 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
946 ULONG FileSystemAttributes
;
947 ULONG MaximumComponentNameLength
;
948 ULONG FileSystemNameLength
;
949 WCHAR FileSystemName
[1];
950 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
952 typedef struct _FILE_FS_CONTROL_INFORMATION
{
953 LARGE_INTEGER FreeSpaceStartFiltering
;
954 LARGE_INTEGER FreeSpaceThreshold
;
955 LARGE_INTEGER FreeSpaceStopFiltering
;
956 LARGE_INTEGER DefaultQuotaThreshold
;
957 LARGE_INTEGER DefaultQuotaLimit
;
958 ULONG FileSystemControlFlags
;
959 } FILE_FS_CONTROL_INFORMATION
, *PFILE_FS_CONTROL_INFORMATION
;
961 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
962 LARGE_INTEGER TotalAllocationUnits
;
963 LARGE_INTEGER CallerAvailableAllocationUnits
;
964 LARGE_INTEGER ActualAvailableAllocationUnits
;
965 ULONG SectorsPerAllocationUnit
;
966 ULONG BytesPerSector
;
967 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
969 typedef struct _FILE_FS_LABEL_INFORMATION
{
970 ULONG VolumeLabelLength
;
971 WCHAR VolumeLabel
[1];
972 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
974 #if (VER_PRODUCTBUILD >= 2195)
976 typedef struct _FILE_FS_OBJECT_ID_INFORMATION
{
978 UCHAR ExtendedInfo
[48];
979 } FILE_FS_OBJECT_ID_INFORMATION
, *PFILE_FS_OBJECT_ID_INFORMATION
;
981 #endif /* (VER_PRODUCTBUILD >= 2195) */
983 typedef struct _FILE_FS_SIZE_INFORMATION
{
984 LARGE_INTEGER TotalAllocationUnits
;
985 LARGE_INTEGER AvailableAllocationUnits
;
986 ULONG SectorsPerAllocationUnit
;
987 ULONG BytesPerSector
;
988 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
990 typedef struct _FILE_FS_VOLUME_INFORMATION
{
991 LARGE_INTEGER VolumeCreationTime
;
992 ULONG VolumeSerialNumber
;
993 ULONG VolumeLabelLength
;
994 BOOLEAN SupportsObjects
;
995 WCHAR VolumeLabel
[1];
996 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
998 typedef struct _FILE_FULL_DIR_INFORMATION
{
999 ULONG NextEntryOffset
;
1001 LARGE_INTEGER CreationTime
;
1002 LARGE_INTEGER LastAccessTime
;
1003 LARGE_INTEGER LastWriteTime
;
1004 LARGE_INTEGER ChangeTime
;
1005 LARGE_INTEGER EndOfFile
;
1006 LARGE_INTEGER AllocationSize
;
1007 ULONG FileAttributes
;
1008 ULONG FileNameLength
;
1011 } FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
1013 typedef struct _FILE_GET_EA_INFORMATION
{
1014 ULONG NextEntryOffset
;
1017 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
1019 typedef struct _FILE_GET_QUOTA_INFORMATION
{
1020 ULONG NextEntryOffset
;
1023 } FILE_GET_QUOTA_INFORMATION
, *PFILE_GET_QUOTA_INFORMATION
;
1025 typedef struct _FILE_INTERNAL_INFORMATION
{
1026 LARGE_INTEGER IndexNumber
;
1027 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
1029 typedef struct _FILE_LINK_INFORMATION
{
1030 BOOLEAN ReplaceIfExists
;
1031 HANDLE RootDirectory
;
1032 ULONG FileNameLength
;
1034 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
1036 typedef struct _FILE_LOCK_INFO
{
1037 LARGE_INTEGER StartingByte
;
1038 LARGE_INTEGER Length
;
1039 BOOLEAN ExclusiveLock
;
1041 PFILE_OBJECT FileObject
;
1043 LARGE_INTEGER EndingByte
;
1044 } FILE_LOCK_INFO
, *PFILE_LOCK_INFO
;
1046 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
1047 typedef struct _FILE_SHARED_LOCK_ENTRY
{
1050 FILE_LOCK_INFO FileLock
;
1051 } FILE_SHARED_LOCK_ENTRY
, *PFILE_SHARED_LOCK_ENTRY
;
1053 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
1054 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY
{
1055 LIST_ENTRY ListEntry
;
1058 FILE_LOCK_INFO FileLock
;
1059 } FILE_EXCLUSIVE_LOCK_ENTRY
, *PFILE_EXCLUSIVE_LOCK_ENTRY
;
1061 typedef NTSTATUS (*PCOMPLETE_LOCK_IRP_ROUTINE
) (
1066 typedef VOID (NTAPI
*PUNLOCK_ROUTINE
) (
1068 IN PFILE_LOCK_INFO FileLockInfo
1071 typedef struct _FILE_LOCK
{
1072 PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine
;
1073 PUNLOCK_ROUTINE UnlockRoutine
;
1074 BOOLEAN FastIoIsQuestionable
;
1076 PVOID LockInformation
;
1077 FILE_LOCK_INFO LastReturnedLockInfo
;
1078 PVOID LastReturnedLock
;
1079 } FILE_LOCK
, *PFILE_LOCK
;
1081 typedef struct _FILE_MAILSLOT_PEEK_BUFFER
{
1082 ULONG ReadDataAvailable
;
1083 ULONG NumberOfMessages
;
1084 ULONG MessageLength
;
1085 } FILE_MAILSLOT_PEEK_BUFFER
, *PFILE_MAILSLOT_PEEK_BUFFER
;
1087 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
{
1088 ULONG MaximumMessageSize
;
1089 ULONG MailslotQuota
;
1090 ULONG NextMessageSize
;
1091 ULONG MessagesAvailable
;
1092 LARGE_INTEGER ReadTimeout
;
1093 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
1095 typedef struct _FILE_MAILSLOT_SET_INFORMATION
{
1096 LARGE_INTEGER ReadTimeout
;
1097 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
1099 typedef struct _FILE_MODE_INFORMATION
{
1101 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
1103 typedef struct _FILE_ALL_INFORMATION
{
1104 FILE_BASIC_INFORMATION BasicInformation
;
1105 FILE_STANDARD_INFORMATION StandardInformation
;
1106 FILE_INTERNAL_INFORMATION InternalInformation
;
1107 FILE_EA_INFORMATION EaInformation
;
1108 FILE_ACCESS_INFORMATION AccessInformation
;
1109 FILE_POSITION_INFORMATION PositionInformation
;
1110 FILE_MODE_INFORMATION ModeInformation
;
1111 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
1112 FILE_NAME_INFORMATION NameInformation
;
1113 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
1115 typedef struct _FILE_NAMES_INFORMATION
{
1116 ULONG NextEntryOffset
;
1118 ULONG FileNameLength
;
1120 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
1122 typedef struct _FILE_OBJECTID_INFORMATION
{
1123 LONGLONG FileReference
;
1125 _ANONYMOUS_UNION
union {
1127 UCHAR BirthVolumeId
[16];
1128 UCHAR BirthObjectId
[16];
1131 UCHAR ExtendedInfo
[48];
1133 } FILE_OBJECTID_INFORMATION
, *PFILE_OBJECTID_INFORMATION
;
1135 typedef struct _FILE_OLE_CLASSID_INFORMATION
{
1137 } FILE_OLE_CLASSID_INFORMATION
, *PFILE_OLE_CLASSID_INFORMATION
;
1139 typedef struct _FILE_OLE_ALL_INFORMATION
{
1140 FILE_BASIC_INFORMATION BasicInformation
;
1141 FILE_STANDARD_INFORMATION StandardInformation
;
1142 FILE_INTERNAL_INFORMATION InternalInformation
;
1143 FILE_EA_INFORMATION EaInformation
;
1144 FILE_ACCESS_INFORMATION AccessInformation
;
1145 FILE_POSITION_INFORMATION PositionInformation
;
1146 FILE_MODE_INFORMATION ModeInformation
;
1147 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
1150 LARGE_INTEGER SecurityChangeTime
;
1151 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation
;
1152 FILE_OBJECTID_INFORMATION ObjectIdInformation
;
1153 FILE_STORAGE_TYPE StorageType
;
1156 ULONG NumberOfStreamReferences
;
1159 BOOLEAN ContentIndexDisable
;
1160 BOOLEAN InheritContentIndexDisable
;
1161 FILE_NAME_INFORMATION NameInformation
;
1162 } FILE_OLE_ALL_INFORMATION
, *PFILE_OLE_ALL_INFORMATION
;
1164 typedef struct _FILE_OLE_DIR_INFORMATION
{
1165 ULONG NextEntryOffset
;
1167 LARGE_INTEGER CreationTime
;
1168 LARGE_INTEGER LastAccessTime
;
1169 LARGE_INTEGER LastWriteTime
;
1170 LARGE_INTEGER ChangeTime
;
1171 LARGE_INTEGER EndOfFile
;
1172 LARGE_INTEGER AllocationSize
;
1173 ULONG FileAttributes
;
1174 ULONG FileNameLength
;
1175 FILE_STORAGE_TYPE StorageType
;
1178 BOOLEAN ContentIndexDisable
;
1179 BOOLEAN InheritContentIndexDisable
;
1181 } FILE_OLE_DIR_INFORMATION
, *PFILE_OLE_DIR_INFORMATION
;
1183 typedef struct _FILE_OLE_INFORMATION
{
1184 LARGE_INTEGER SecurityChangeTime
;
1185 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation
;
1186 FILE_OBJECTID_INFORMATION ObjectIdInformation
;
1187 FILE_STORAGE_TYPE StorageType
;
1189 BOOLEAN ContentIndexDisable
;
1190 BOOLEAN InheritContentIndexDisable
;
1191 } FILE_OLE_INFORMATION
, *PFILE_OLE_INFORMATION
;
1193 typedef struct _FILE_OLE_STATE_BITS_INFORMATION
{
1195 ULONG StateBitsMask
;
1196 } FILE_OLE_STATE_BITS_INFORMATION
, *PFILE_OLE_STATE_BITS_INFORMATION
;
1198 typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER
{
1201 } FILE_PIPE_ASSIGN_EVENT_BUFFER
, *PFILE_PIPE_ASSIGN_EVENT_BUFFER
;
1203 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER
{
1204 PVOID ClientSession
;
1205 PVOID ClientProcess
;
1206 } FILE_PIPE_CLIENT_PROCESS_BUFFER
, *PFILE_PIPE_CLIENT_PROCESS_BUFFER
;
1208 typedef struct _FILE_PIPE_EVENT_BUFFER
{
1209 ULONG NamedPipeState
;
1213 ULONG NumberRequests
;
1214 } FILE_PIPE_EVENT_BUFFER
, *PFILE_PIPE_EVENT_BUFFER
;
1216 typedef struct _FILE_PIPE_INFORMATION
{
1218 ULONG CompletionMode
;
1219 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
1221 typedef struct _FILE_PIPE_LOCAL_INFORMATION
{
1222 ULONG NamedPipeType
;
1223 ULONG NamedPipeConfiguration
;
1224 ULONG MaximumInstances
;
1225 ULONG CurrentInstances
;
1227 ULONG ReadDataAvailable
;
1228 ULONG OutboundQuota
;
1229 ULONG WriteQuotaAvailable
;
1230 ULONG NamedPipeState
;
1232 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
1234 typedef struct _FILE_PIPE_REMOTE_INFORMATION
{
1235 LARGE_INTEGER CollectDataTime
;
1236 ULONG MaximumCollectionCount
;
1237 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
1239 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
{
1240 LARGE_INTEGER Timeout
;
1242 BOOLEAN TimeoutSpecified
;
1244 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
1246 typedef struct _FILE_QUOTA_INFORMATION
{
1247 ULONG NextEntryOffset
;
1249 LARGE_INTEGER ChangeTime
;
1250 LARGE_INTEGER QuotaUsed
;
1251 LARGE_INTEGER QuotaThreshold
;
1252 LARGE_INTEGER QuotaLimit
;
1254 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
1256 typedef struct _FILE_RENAME_INFORMATION
{
1257 BOOLEAN ReplaceIfExists
;
1258 HANDLE RootDirectory
;
1259 ULONG FileNameLength
;
1261 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
1263 typedef struct _FILE_STREAM_INFORMATION
{
1264 ULONG NextEntryOffset
;
1265 ULONG StreamNameLength
;
1266 LARGE_INTEGER StreamSize
;
1267 LARGE_INTEGER StreamAllocationSize
;
1268 WCHAR StreamName
[1];
1269 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
1271 typedef struct _FILE_TRACKING_INFORMATION
{
1272 HANDLE DestinationFile
;
1273 ULONG ObjectInformationLength
;
1274 CHAR ObjectInformation
[1];
1275 } FILE_TRACKING_INFORMATION
, *PFILE_TRACKING_INFORMATION
;
1277 #if (VER_PRODUCTBUILD >= 2195)
1278 typedef struct _FILE_ZERO_DATA_INFORMATION
{
1279 LARGE_INTEGER FileOffset
;
1280 LARGE_INTEGER BeyondFinalZero
;
1281 } FILE_ZERO_DATA_INFORMATION
, *PFILE_ZERO_DATA_INFORMATION
;
1283 typedef struct FILE_ALLOCATED_RANGE_BUFFER
{
1284 LARGE_INTEGER FileOffset
;
1285 LARGE_INTEGER Length
;
1286 } FILE_ALLOCATED_RANGE_BUFFER
, *PFILE_ALLOCATED_RANGE_BUFFER
;
1287 #endif /* (VER_PRODUCTBUILD >= 2195) */
1289 typedef struct _FSRTL_COMMON_FCB_HEADER
{
1290 CSHORT NodeTypeCode
;
1291 CSHORT NodeByteSize
;
1293 UCHAR IsFastIoPossible
;
1294 #if (VER_PRODUCTBUILD >= 1381)
1297 #endif /* (VER_PRODUCTBUILD >= 1381) */
1298 PERESOURCE Resource
;
1299 PERESOURCE PagingIoResource
;
1300 LARGE_INTEGER AllocationSize
;
1301 LARGE_INTEGER FileSize
;
1302 LARGE_INTEGER ValidDataLength
;
1303 } FSRTL_COMMON_FCB_HEADER
, *PFSRTL_COMMON_FCB_HEADER
;
1305 typedef struct _GENERATE_NAME_CONTEXT
{
1307 BOOLEAN CheckSumInserted
;
1309 WCHAR NameBuffer
[8];
1310 ULONG ExtensionLength
;
1311 WCHAR ExtensionBuffer
[4];
1312 ULONG LastIndexValue
;
1313 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
1315 typedef struct _HANDLE_TABLE_ENTRY
{
1317 ULONG ObjectAttributes
;
1318 ULONG GrantedAccess
;
1319 USHORT GrantedAccessIndex
;
1320 USHORT CreatorBackTraceIndex
;
1321 ULONG NextFreeTableEntry
;
1322 } HANDLE_TABLE_ENTRY
, *PHANDLE_TABLE_ENTRY
;
1324 typedef struct _MAPPING_PAIR
{
1327 } MAPPING_PAIR
, *PMAPPING_PAIR
;
1329 typedef struct _GET_RETRIEVAL_DESCRIPTOR
{
1330 ULONG NumberOfPairs
;
1332 MAPPING_PAIR Pair
[1];
1333 } GET_RETRIEVAL_DESCRIPTOR
, *PGET_RETRIEVAL_DESCRIPTOR
;
1335 typedef struct _IO_CLIENT_EXTENSION
{
1336 struct _IO_CLIENT_EXTENSION
*NextExtension
;
1337 PVOID ClientIdentificationAddress
;
1338 } IO_CLIENT_EXTENSION
, *PIO_CLIENT_EXTENSION
;
1340 typedef struct _IO_COMPLETION_BASIC_INFORMATION
{
1342 } IO_COMPLETION_BASIC_INFORMATION
, *PIO_COMPLETION_BASIC_INFORMATION
;
1344 typedef struct _KEVENT_PAIR
{
1349 } KEVENT_PAIR
, *PKEVENT_PAIR
;
1351 typedef struct _KQUEUE
{
1352 DISPATCHER_HEADER Header
;
1353 LIST_ENTRY EntryListHead
;
1356 LIST_ENTRY ThreadListHead
;
1357 } KQUEUE
, *PKQUEUE
, *RESTRICTED_POINTER PRKQUEUE
;
1359 typedef struct _MAILSLOT_CREATE_PARAMETERS
{
1360 ULONG MailslotQuota
;
1361 ULONG MaximumMessageSize
;
1362 LARGE_INTEGER ReadTimeout
;
1363 BOOLEAN TimeoutSpecified
;
1364 } MAILSLOT_CREATE_PARAMETERS
, *PMAILSLOT_CREATE_PARAMETERS
;
1366 typedef struct _MBCB
{
1367 CSHORT NodeTypeCode
;
1368 CSHORT NodeIsInZone
;
1372 LIST_ENTRY BitmapRanges
;
1373 LONGLONG ResumeWritePage
;
1374 BITMAP_RANGE BitmapRange1
;
1375 BITMAP_RANGE BitmapRange2
;
1376 BITMAP_RANGE BitmapRange3
;
1379 typedef struct _MOVEFILE_DESCRIPTOR
{
1382 LARGE_INTEGER StartVcn
;
1383 LARGE_INTEGER TargetLcn
;
1386 } MOVEFILE_DESCRIPTOR
, *PMOVEFILE_DESCRIPTOR
;
1388 typedef struct _NAMED_PIPE_CREATE_PARAMETERS
{
1389 ULONG NamedPipeType
;
1391 ULONG CompletionMode
;
1392 ULONG MaximumInstances
;
1394 ULONG OutboundQuota
;
1395 LARGE_INTEGER DefaultTimeout
;
1396 BOOLEAN TimeoutSpecified
;
1397 } NAMED_PIPE_CREATE_PARAMETERS
, *PNAMED_PIPE_CREATE_PARAMETERS
;
1399 typedef struct _OBJECT_BASIC_INFO
{
1401 ACCESS_MASK GrantedAccess
;
1403 ULONG ReferenceCount
;
1404 ULONG PagedPoolUsage
;
1405 ULONG NonPagedPoolUsage
;
1407 ULONG NameInformationLength
;
1408 ULONG TypeInformationLength
;
1409 ULONG SecurityDescriptorLength
;
1410 LARGE_INTEGER CreateTime
;
1411 } OBJECT_BASIC_INFO
, *POBJECT_BASIC_INFO
;
1413 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO
{
1415 BOOLEAN ProtectFromClose
;
1416 } OBJECT_HANDLE_ATTRIBUTE_INFO
, *POBJECT_HANDLE_ATTRIBUTE_INFO
;
1418 typedef struct _OBJECT_NAME_INFO
{
1419 UNICODE_STRING ObjectName
;
1420 WCHAR ObjectNameBuffer
[1];
1421 } OBJECT_NAME_INFO
, *POBJECT_NAME_INFO
;
1423 typedef struct _OBJECT_PROTECTION_INFO
{
1425 BOOLEAN ProtectHandle
;
1426 } OBJECT_PROTECTION_INFO
, *POBJECT_PROTECTION_INFO
;
1428 typedef struct _OBJECT_TYPE_INFO
{
1429 UNICODE_STRING ObjectTypeName
;
1430 UCHAR Unknown
[0x58];
1431 WCHAR ObjectTypeNameBuffer
[1];
1432 } OBJECT_TYPE_INFO
, *POBJECT_TYPE_INFO
;
1434 typedef struct _OBJECT_ALL_TYPES_INFO
{
1435 ULONG NumberOfObjectTypes
;
1436 OBJECT_TYPE_INFO ObjectsTypeInfo
[1];
1437 } OBJECT_ALL_TYPES_INFO
, *POBJECT_ALL_TYPES_INFO
;
1439 typedef struct _PAGEFAULT_HISTORY
{
1442 KSPIN_LOCK SpinLock
;
1444 PROCESS_WS_WATCH_INFORMATION WatchInfo
[1];
1445 } PAGEFAULT_HISTORY
, *PPAGEFAULT_HISTORY
;
1447 typedef struct _PATHNAME_BUFFER
{
1448 ULONG PathNameLength
;
1450 } PATHNAME_BUFFER
, *PPATHNAME_BUFFER
;
1452 #if (VER_PRODUCTBUILD >= 2600)
1454 typedef struct _PRIVATE_CACHE_MAP_FLAGS
{
1456 ULONG ReadAheadActive
: 1;
1457 ULONG ReadAheadEnabled
: 1;
1458 ULONG Available
: 14;
1459 } PRIVATE_CACHE_MAP_FLAGS
, *PPRIVATE_CACHE_MAP_FLAGS
;
1461 typedef struct _PRIVATE_CACHE_MAP
{
1462 _ANONYMOUS_UNION
union {
1463 CSHORT NodeTypeCode
;
1464 PRIVATE_CACHE_MAP_FLAGS Flags
;
1467 ULONG ReadAheadMask
;
1468 PFILE_OBJECT FileObject
;
1469 LARGE_INTEGER FileOffset1
;
1470 LARGE_INTEGER BeyondLastByte1
;
1471 LARGE_INTEGER FileOffset2
;
1472 LARGE_INTEGER BeyondLastByte2
;
1473 LARGE_INTEGER ReadAheadOffset
[2];
1474 ULONG ReadAheadLength
[2];
1475 KSPIN_LOCK ReadAheadSpinLock
;
1476 LIST_ENTRY PrivateLinks
;
1477 } PRIVATE_CACHE_MAP
, *PPRIVATE_CACHE_MAP
;
1481 typedef struct _PS_IMPERSONATION_INFORMATION
{
1482 PACCESS_TOKEN Token
;
1484 BOOLEAN EffectiveOnly
;
1485 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
1486 } PS_IMPERSONATION_INFORMATION
, *PPS_IMPERSONATION_INFORMATION
;
1488 typedef struct _PUBLIC_BCB
{
1489 CSHORT NodeTypeCode
;
1490 CSHORT NodeByteSize
;
1492 LARGE_INTEGER MappedFileOffset
;
1493 } PUBLIC_BCB
, *PPUBLIC_BCB
;
1495 typedef struct _QUERY_PATH_REQUEST
{
1496 ULONG PathNameLength
;
1497 PIO_SECURITY_CONTEXT SecurityContext
;
1498 WCHAR FilePathName
[1];
1499 } QUERY_PATH_REQUEST
, *PQUERY_PATH_REQUEST
;
1501 typedef struct _QUERY_PATH_RESPONSE
{
1502 ULONG LengthAccepted
;
1503 } QUERY_PATH_RESPONSE
, *PQUERY_PATH_RESPONSE
;
1505 typedef struct _RETRIEVAL_POINTERS_BUFFER
{
1507 LARGE_INTEGER StartingVcn
;
1509 LARGE_INTEGER NextVcn
;
1512 } RETRIEVAL_POINTERS_BUFFER
, *PRETRIEVAL_POINTERS_BUFFER
;
1514 typedef struct _RTL_SPLAY_LINKS
{
1515 struct _RTL_SPLAY_LINKS
*Parent
;
1516 struct _RTL_SPLAY_LINKS
*LeftChild
;
1517 struct _RTL_SPLAY_LINKS
*RightChild
;
1518 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
1520 typedef struct _SE_EXPORTS
{
1522 LUID SeCreateTokenPrivilege
;
1523 LUID SeAssignPrimaryTokenPrivilege
;
1524 LUID SeLockMemoryPrivilege
;
1525 LUID SeIncreaseQuotaPrivilege
;
1526 LUID SeUnsolicitedInputPrivilege
;
1527 LUID SeTcbPrivilege
;
1528 LUID SeSecurityPrivilege
;
1529 LUID SeTakeOwnershipPrivilege
;
1530 LUID SeLoadDriverPrivilege
;
1531 LUID SeCreatePagefilePrivilege
;
1532 LUID SeIncreaseBasePriorityPrivilege
;
1533 LUID SeSystemProfilePrivilege
;
1534 LUID SeSystemtimePrivilege
;
1535 LUID SeProfileSingleProcessPrivilege
;
1536 LUID SeCreatePermanentPrivilege
;
1537 LUID SeBackupPrivilege
;
1538 LUID SeRestorePrivilege
;
1539 LUID SeShutdownPrivilege
;
1540 LUID SeDebugPrivilege
;
1541 LUID SeAuditPrivilege
;
1542 LUID SeSystemEnvironmentPrivilege
;
1543 LUID SeChangeNotifyPrivilege
;
1544 LUID SeRemoteShutdownPrivilege
;
1549 PSID SeCreatorOwnerSid
;
1550 PSID SeCreatorGroupSid
;
1552 PSID SeNtAuthoritySid
;
1556 PSID SeInteractiveSid
;
1557 PSID SeLocalSystemSid
;
1558 PSID SeAliasAdminsSid
;
1559 PSID SeAliasUsersSid
;
1560 PSID SeAliasGuestsSid
;
1561 PSID SeAliasPowerUsersSid
;
1562 PSID SeAliasAccountOpsSid
;
1563 PSID SeAliasSystemOpsSid
;
1564 PSID SeAliasPrintOpsSid
;
1565 PSID SeAliasBackupOpsSid
;
1567 PSID SeAuthenticatedUsersSid
;
1569 PSID SeRestrictedSid
;
1570 PSID SeAnonymousLogonSid
;
1572 LUID SeUndockPrivilege
;
1573 LUID SeSyncAgentPrivilege
;
1574 LUID SeEnableDelegationPrivilege
;
1576 } SE_EXPORTS
, *PSE_EXPORTS
;
1578 typedef struct _SECTION_BASIC_INFORMATION
{
1582 } SECTION_BASIC_INFORMATION
, *PSECTION_BASIC_INFORMATION
;
1584 typedef struct _SECTION_IMAGE_INFORMATION
{
1590 USHORT MinorSubsystemVersion
;
1591 USHORT MajorSubsystemVersion
;
1593 ULONG Characteristics
;
1598 } SECTION_IMAGE_INFORMATION
, *PSECTION_IMAGE_INFORMATION
;
1600 #if (VER_PRODUCTBUILD >= 2600)
1602 typedef struct _SHARED_CACHE_MAP
{
1603 CSHORT NodeTypeCode
;
1604 CSHORT NodeByteSize
;
1606 LARGE_INTEGER FileSize
;
1608 LARGE_INTEGER SectionSize
;
1609 LARGE_INTEGER ValidDataLength
;
1610 LARGE_INTEGER ValidDataGoal
;
1611 PVACB InitialVacbs
[4];
1613 PFILE_OBJECT FileObject
;
1617 ULONG NeedToZeroPage
;
1618 KSPIN_LOCK ActiveVacbSpinLock
;
1619 ULONG VacbActiveCount
;
1621 LIST_ENTRY SharedCacheMapLinks
;
1626 PKEVENT CreateEvent
;
1627 PKEVENT WaitOnActiveCount
;
1629 LONGLONG BeyondLastFlush
;
1630 PCACHE_MANAGER_CALLBACKS Callbacks
;
1631 PVOID LazyWriteContext
;
1632 LIST_ENTRY PrivateList
;
1634 PVOID FlushToLsnRoutine
;
1635 ULONG DirtyPageThreshold
;
1636 ULONG LazyWritePassCount
;
1637 PCACHE_UNINITIALIZE_EVENT UninitializeEvent
;
1638 PVACB NeedToZeroVacb
;
1639 KSPIN_LOCK BcbSpinLock
;
1642 EX_PUSH_LOCK VacbPushLock
;
1643 PRIVATE_CACHE_MAP PrivateCacheMap
;
1644 } SHARED_CACHE_MAP
, *PSHARED_CACHE_MAP
;
1648 typedef struct _STARTING_VCN_INPUT_BUFFER
{
1649 LARGE_INTEGER StartingVcn
;
1650 } STARTING_VCN_INPUT_BUFFER
, *PSTARTING_VCN_INPUT_BUFFER
;
1652 typedef struct _SYSTEM_CACHE_INFORMATION
{
1655 ULONG PageFaultCount
;
1656 ULONG MinimumWorkingSet
;
1657 ULONG MaximumWorkingSet
;
1659 } SYSTEM_CACHE_INFORMATION
, *PSYSTEM_CACHE_INFORMATION
;
1661 typedef struct _TERMINATION_PORT
{
1662 struct _TERMINATION_PORT
* Next
;
1664 } TERMINATION_PORT
, *PTERMINATION_PORT
;
1666 typedef struct _SECURITY_CLIENT_CONTEXT
{
1667 SECURITY_QUALITY_OF_SERVICE SecurityQos
;
1668 PACCESS_TOKEN ClientToken
;
1669 BOOLEAN DirectlyAccessClientToken
;
1670 BOOLEAN DirectAccessEffectiveOnly
;
1671 BOOLEAN ServerIsRemote
;
1672 TOKEN_CONTROL ClientTokenControl
;
1673 } SECURITY_CLIENT_CONTEXT
, *PSECURITY_CLIENT_CONTEXT
;
1675 typedef struct _TUNNEL
{
1677 PRTL_SPLAY_LINKS Cache
;
1678 LIST_ENTRY TimerQueue
;
1682 typedef struct _VACB
{
1684 PSHARED_CACHE_MAP SharedCacheMap
;
1686 LARGE_INTEGER FileOffset
;
1692 typedef struct _VAD_HEADER
{
1695 PVAD_HEADER ParentLink
;
1696 PVAD_HEADER LeftLink
;
1697 PVAD_HEADER RightLink
;
1698 ULONG Flags
; /* LSB = CommitCharge */
1700 PVOID FirstProtoPte
;
1704 } VAD_HEADER
, *PVAD_HEADER
;
1710 IN PFILE_OBJECT FileObject
,
1711 IN ULONG BytesToWrite
,
1720 IN PFILE_OBJECT FileObject
,
1721 IN PLARGE_INTEGER FileOffset
,
1725 OUT PIO_STATUS_BLOCK IoStatus
1732 IN PFILE_OBJECT FileObject
,
1733 IN PLARGE_INTEGER FileOffset
,
1739 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
1741 typedef VOID (NTAPI
*PCC_POST_DEFERRED_WRITE
) (
1750 IN PFILE_OBJECT FileObject
,
1751 IN PCC_POST_DEFERRED_WRITE PostRoutine
,
1754 IN ULONG BytesToWrite
,
1762 IN PFILE_OBJECT FileObject
,
1763 IN ULONG FileOffset
,
1767 OUT PIO_STATUS_BLOCK IoStatus
1774 IN PFILE_OBJECT FileObject
,
1775 IN ULONG FileOffset
,
1784 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
1785 IN PLARGE_INTEGER FileOffset OPTIONAL
,
1787 OUT PIO_STATUS_BLOCK IoStatus OPTIONAL
1790 typedef VOID (*PDIRTY_PAGE_ROUTINE
) (
1791 IN PFILE_OBJECT FileObject
,
1792 IN PLARGE_INTEGER FileOffset
,
1794 IN PLARGE_INTEGER OldestLsn
,
1795 IN PLARGE_INTEGER NewestLsn
,
1805 IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine
,
1813 CcGetFileObjectFromBcb (
1820 CcGetFileObjectFromSectionPtrs (
1821 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
1824 #define CcGetFileSizePointer(FO) ( \
1825 ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
1828 #if (VER_PRODUCTBUILD >= 2195)
1833 CcGetFlushedValidData (
1834 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
1835 IN BOOLEAN BcbListHeld
1838 #endif /* (VER_PRODUCTBUILD >= 2195) */
1842 CcGetLsnForFileObject (
1843 IN PFILE_OBJECT FileObject
,
1844 OUT PLARGE_INTEGER OldestLsn OPTIONAL
1847 typedef BOOLEAN (NTAPI
*PACQUIRE_FOR_LAZY_WRITE
) (
1852 typedef VOID (NTAPI
*PRELEASE_FROM_LAZY_WRITE
) (
1856 typedef BOOLEAN (NTAPI
*PACQUIRE_FOR_READ_AHEAD
) (
1861 typedef VOID (NTAPI
*PRELEASE_FROM_READ_AHEAD
) (
1865 typedef struct _CACHE_MANAGER_CALLBACKS
{
1866 PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite
;
1867 PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite
;
1868 PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead
;
1869 PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead
;
1870 } CACHE_MANAGER_CALLBACKS
, *PCACHE_MANAGER_CALLBACKS
;
1875 CcInitializeCacheMap (
1876 IN PFILE_OBJECT FileObject
,
1877 IN PCC_FILE_SIZES FileSizes
,
1878 IN BOOLEAN PinAccess
,
1879 IN PCACHE_MANAGER_CALLBACKS Callbacks
,
1880 IN PVOID LazyWriteContext
1883 #define CcIsFileCached(FO) ( \
1884 ((FO)->SectionObjectPointer != NULL) && \
1885 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
1891 CcIsThereDirtyData (
1899 IN PFILE_OBJECT FileObject
,
1900 IN PLARGE_INTEGER FileOffset
,
1911 IN PFILE_OBJECT FileObject
,
1912 IN PLARGE_INTEGER FileOffset
,
1915 OUT PIO_STATUS_BLOCK IoStatus
1922 IN PFILE_OBJECT FileObject
,
1929 CcMdlWriteComplete (
1930 IN PFILE_OBJECT FileObject
,
1931 IN PLARGE_INTEGER FileOffset
,
1939 IN PFILE_OBJECT FileObject
,
1940 IN PLARGE_INTEGER FileOffset
,
1942 #if (VER_PRODUCTBUILD >= 2195)
1954 IN PFILE_OBJECT FileObject
,
1955 IN PLARGE_INTEGER FileOffset
,
1957 #if (VER_PRODUCTBUILD >= 2195)
1970 IN PFILE_OBJECT FileObject
,
1971 IN PLARGE_INTEGER FileOffset
,
1974 OUT PIO_STATUS_BLOCK IoStatus
1981 IN PFILE_OBJECT FileObject
,
1982 IN PLARGE_INTEGER FileOffset
,
1985 #if (VER_PRODUCTBUILD >= 2195)
1997 CcPurgeCacheSection (
1998 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
1999 IN PLARGE_INTEGER FileOffset OPTIONAL
,
2001 IN BOOLEAN UninitializeCacheMaps
2004 #define CcReadAhead(FO, FOFF, LEN) ( \
2005 if ((LEN) >= 256) { \
2006 CcScheduleReadAhead((FO), (FOFF), (LEN)); \
2010 #if (VER_PRODUCTBUILD >= 2195)
2019 #endif /* (VER_PRODUCTBUILD >= 2195) */
2031 CcScheduleReadAhead (
2032 IN PFILE_OBJECT FileObject
,
2033 IN PLARGE_INTEGER FileOffset
,
2040 CcSetAdditionalCacheAttributes (
2041 IN PFILE_OBJECT FileObject
,
2042 IN BOOLEAN DisableReadAhead
,
2043 IN BOOLEAN DisableWriteBehind
2049 CcSetBcbOwnerPointer (
2051 IN PVOID OwnerPointer
2057 CcSetDirtyPageThreshold (
2058 IN PFILE_OBJECT FileObject
,
2059 IN ULONG DirtyPageThreshold
2065 CcSetDirtyPinnedData (
2067 IN PLARGE_INTEGER Lsn OPTIONAL
2074 IN PFILE_OBJECT FileObject
,
2075 IN PCC_FILE_SIZES FileSizes
2078 typedef VOID (NTAPI
*PFLUSH_TO_LSN
) (
2080 IN PLARGE_INTEGER Lsn
2086 CcSetLogHandleForFile (
2087 IN PFILE_OBJECT FileObject
,
2089 IN PFLUSH_TO_LSN FlushToLsnRoutine
2095 CcSetReadAheadGranularity (
2096 IN PFILE_OBJECT FileObject
,
2097 IN ULONG Granularity
/* default: PAGE_SIZE */
2098 /* allowed: 2^n * PAGE_SIZE */
2104 CcUninitializeCacheMap (
2105 IN PFILE_OBJECT FileObject
,
2106 IN PLARGE_INTEGER TruncateSize OPTIONAL
,
2107 IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL
2120 CcUnpinDataForThread (
2122 IN ERESOURCE_THREAD ResourceThreadId
2128 CcUnpinRepinnedBcb (
2130 IN BOOLEAN WriteThrough
,
2131 OUT PIO_STATUS_BLOCK IoStatus
2134 #if (VER_PRODUCTBUILD >= 2195)
2139 CcWaitForCurrentLazyWriterActivity (
2143 #endif /* (VER_PRODUCTBUILD >= 2195) */
2149 IN PFILE_OBJECT FileObject
,
2150 IN PLARGE_INTEGER StartOffset
,
2151 IN PLARGE_INTEGER EndOffset
,
2158 ExDisableResourceBoostLite (
2159 IN PERESOURCE Resource
2165 ExQueryPoolBlockSize (
2167 OUT PBOOLEAN QuotaCharged
2170 #define FlagOn(x, f) ((x) & (f))
2175 FsRtlAddToTunnelCache (
2177 IN ULONGLONG DirectoryKey
,
2178 IN PUNICODE_STRING ShortName
,
2179 IN PUNICODE_STRING LongName
,
2180 IN BOOLEAN KeyByShortName
,
2181 IN ULONG DataLength
,
2185 #if (VER_PRODUCTBUILD >= 2195)
2189 FsRtlAllocateFileLock (
2190 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL
,
2191 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
2194 #endif /* (VER_PRODUCTBUILD >= 2195) */
2200 IN POOL_TYPE PoolType
,
2201 IN ULONG NumberOfBytes
2207 FsRtlAllocatePoolWithQuota (
2208 IN POOL_TYPE PoolType
,
2209 IN ULONG NumberOfBytes
2215 FsRtlAllocatePoolWithQuotaTag (
2216 IN POOL_TYPE PoolType
,
2217 IN ULONG NumberOfBytes
,
2224 FsRtlAllocatePoolWithTag (
2225 IN POOL_TYPE PoolType
,
2226 IN ULONG NumberOfBytes
,
2233 FsRtlAreNamesEqual (
2234 IN PUNICODE_STRING Name1
,
2235 IN PUNICODE_STRING Name2
,
2236 IN BOOLEAN IgnoreCase
,
2237 IN PWCHAR UpcaseTable OPTIONAL
2240 #define FsRtlAreThereCurrentFileLocks(FL) ( \
2241 ((FL)->FastIoIsQuestionable) \
2245 FsRtlCheckLockForReadAccess:
2247 All this really does is pick out the lock parameters from the irp (io stack
2248 location?), get IoGetRequestorProcess, and pass values on to
2249 FsRtlFastCheckLockForRead.
2254 FsRtlCheckLockForReadAccess (
2255 IN PFILE_LOCK FileLock
,
2260 FsRtlCheckLockForWriteAccess:
2262 All this really does is pick out the lock parameters from the irp (io stack
2263 location?), get IoGetRequestorProcess, and pass values on to
2264 FsRtlFastCheckLockForWrite.
2269 FsRtlCheckLockForWriteAccess (
2270 IN PFILE_LOCK FileLock
,
2276 (*POPLOCK_WAIT_COMPLETE_ROUTINE
) (
2283 (*POPLOCK_FS_PREPOST_IRP
) (
2295 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
2296 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
2303 IN PFILE_OBJECT FileObject
,
2304 IN PLARGE_INTEGER FileOffset
,
2309 OUT PIO_STATUS_BLOCK IoStatus
,
2310 IN PDEVICE_OBJECT DeviceObject
2317 IN PFILE_OBJECT FileObject
,
2318 IN PLARGE_INTEGER FileOffset
,
2323 OUT PIO_STATUS_BLOCK IoStatus
,
2324 IN PDEVICE_OBJECT DeviceObject
2330 FsRtlCurrentBatchOplock (
2337 FsRtlDeleteKeyFromTunnelCache (
2339 IN ULONGLONG DirectoryKey
2345 FsRtlDeleteTunnelCache (
2352 FsRtlDeregisterUncProvider (
2360 IN ANSI_STRING Name
,
2361 OUT PANSI_STRING FirstPart
,
2362 OUT PANSI_STRING RemainingPart
2369 IN UNICODE_STRING Name
,
2370 OUT PUNICODE_STRING FirstPart
,
2371 OUT PUNICODE_STRING RemainingPart
2377 FsRtlDoesDbcsContainWildCards (
2378 IN PANSI_STRING Name
2384 FsRtlDoesNameContainWildCards (
2385 IN PUNICODE_STRING Name
2388 #define FsRtlEnterFileSystem KeEnterCriticalRegion
2390 #define FsRtlExitFileSystem KeLeaveCriticalRegion
2395 FsRtlFastCheckLockForRead (
2396 IN PFILE_LOCK FileLock
,
2397 IN PLARGE_INTEGER FileOffset
,
2398 IN PLARGE_INTEGER Length
,
2400 IN PFILE_OBJECT FileObject
,
2401 IN PEPROCESS Process
2407 FsRtlFastCheckLockForWrite (
2408 IN PFILE_LOCK FileLock
,
2409 IN PLARGE_INTEGER FileOffset
,
2410 IN PLARGE_INTEGER Length
,
2412 IN PFILE_OBJECT FileObject
,
2413 IN PEPROCESS Process
2416 #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
2417 FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
2423 FsRtlFastUnlockAll (
2424 IN PFILE_LOCK FileLock
,
2425 IN PFILE_OBJECT FileObject
,
2426 IN PEPROCESS Process
,
2427 IN PVOID Context OPTIONAL
2429 /* ret: STATUS_RANGE_NOT_LOCKED */
2434 FsRtlFastUnlockAllByKey (
2435 IN PFILE_LOCK FileLock
,
2436 IN PFILE_OBJECT FileObject
,
2437 IN PEPROCESS Process
,
2439 IN PVOID Context OPTIONAL
2441 /* ret: STATUS_RANGE_NOT_LOCKED */
2446 FsRtlFastUnlockSingle (
2447 IN PFILE_LOCK FileLock
,
2448 IN PFILE_OBJECT FileObject
,
2449 IN PLARGE_INTEGER FileOffset
,
2450 IN PLARGE_INTEGER Length
,
2451 IN PEPROCESS Process
,
2453 IN PVOID Context OPTIONAL
,
2454 IN BOOLEAN AlreadySynchronized
2456 /* ret: STATUS_RANGE_NOT_LOCKED */
2461 FsRtlFindInTunnelCache (
2463 IN ULONGLONG DirectoryKey
,
2464 IN PUNICODE_STRING Name
,
2465 OUT PUNICODE_STRING ShortName
,
2466 OUT PUNICODE_STRING LongName
,
2467 IN OUT PULONG DataLength
,
2471 #if (VER_PRODUCTBUILD >= 2195)
2477 IN PFILE_LOCK FileLock
2480 #endif /* (VER_PRODUCTBUILD >= 2195) */
2486 IN PFILE_OBJECT FileObject
,
2487 IN OUT PLARGE_INTEGER FileSize
2491 FsRtlGetNextFileLock:
2493 ret: NULL if no more locks
2496 FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
2497 FileLock->LastReturnedLock as storage.
2498 LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
2499 list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
2500 calls with Restart = FALSE.
2505 FsRtlGetNextFileLock (
2506 IN PFILE_LOCK FileLock
,
2513 FsRtlInitializeFileLock (
2514 IN PFILE_LOCK FileLock
,
2515 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL
,
2516 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
2522 FsRtlInitializeOplock (
2523 IN OUT POPLOCK Oplock
2529 FsRtlInitializeTunnelCache (
2536 FsRtlIsNameInExpression (
2537 IN PUNICODE_STRING Expression
,
2538 IN PUNICODE_STRING Name
,
2539 IN BOOLEAN IgnoreCase
,
2540 IN PWCHAR UpcaseTable OPTIONAL
2546 FsRtlIsNtstatusExpected (
2547 IN NTSTATUS Ntstatus
2550 #define FsRtlIsUnicodeCharacterWild(C) ( \
2553 FlagOn((*FsRtlLegalAnsiCharacterArray)[(C)], FSRTL_WILD_CHARACTER )) \
2559 FsRtlMdlReadComplete (
2560 IN PFILE_OBJECT FileObject
,
2567 FsRtlMdlReadCompleteDev (
2568 IN PFILE_OBJECT FileObject
,
2570 IN PDEVICE_OBJECT DeviceObject
2576 FsRtlMdlWriteComplete (
2577 IN PFILE_OBJECT FileObject
,
2578 IN PLARGE_INTEGER FileOffset
,
2585 FsRtlMdlWriteCompleteDev (
2586 IN PFILE_OBJECT FileObject
,
2587 IN PLARGE_INTEGER FileOffset
,
2589 IN PDEVICE_OBJECT DeviceObject
2595 FsRtlNormalizeNtstatus (
2596 IN NTSTATUS Exception
,
2597 IN NTSTATUS GenericException
2603 FsRtlNotifyChangeDirectory (
2604 IN PNOTIFY_SYNC NotifySync
,
2606 IN PSTRING FullDirectoryName
,
2607 IN PLIST_ENTRY NotifyList
,
2608 IN BOOLEAN WatchTree
,
2609 IN ULONG CompletionFilter
,
2616 FsRtlNotifyCleanup (
2617 IN PNOTIFY_SYNC NotifySync
,
2618 IN PLIST_ENTRY NotifyList
,
2622 typedef BOOLEAN (*PCHECK_FOR_TRAVERSE_ACCESS
) (
2623 IN PVOID NotifyContext
,
2624 IN PVOID TargetContext
,
2625 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
2631 FsRtlNotifyFullChangeDirectory (
2632 IN PNOTIFY_SYNC NotifySync
,
2633 IN PLIST_ENTRY NotifyList
,
2635 IN PSTRING FullDirectoryName
,
2636 IN BOOLEAN WatchTree
,
2637 IN BOOLEAN IgnoreBuffer
,
2638 IN ULONG CompletionFilter
,
2640 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL
,
2641 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
2647 FsRtlNotifyFullReportChange (
2648 IN PNOTIFY_SYNC NotifySync
,
2649 IN PLIST_ENTRY NotifyList
,
2650 IN PSTRING FullTargetName
,
2651 IN USHORT TargetNameOffset
,
2652 IN PSTRING StreamName OPTIONAL
,
2653 IN PSTRING NormalizedParentName OPTIONAL
,
2654 IN ULONG FilterMatch
,
2656 IN PVOID TargetContext
2662 FsRtlNotifyInitializeSync (
2663 IN PNOTIFY_SYNC NotifySync
2669 FsRtlNotifyReportChange (
2670 IN PNOTIFY_SYNC NotifySync
,
2671 IN PLIST_ENTRY NotifyList
,
2672 IN PSTRING FullTargetName
,
2673 IN PUSHORT FileNamePartLength
,
2674 IN ULONG FilterMatch
2680 FsRtlNotifyUninitializeSync (
2681 IN PNOTIFY_SYNC NotifySync
2684 #if (VER_PRODUCTBUILD >= 2195)
2689 FsRtlNotifyVolumeEvent (
2690 IN PFILE_OBJECT FileObject
,
2694 #endif /* (VER_PRODUCTBUILD >= 2195) */
2708 FsRtlOplockIsFastIoPossible (
2715 ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
2718 -Calls IoCompleteRequest if Irp
2719 -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
2725 IN PFILE_LOCK FileLock
,
2726 IN PFILE_OBJECT FileObject
,
2727 IN PLARGE_INTEGER FileOffset
,
2728 IN PLARGE_INTEGER Length
,
2729 IN PEPROCESS Process
,
2731 IN BOOLEAN FailImmediately
,
2732 IN BOOLEAN ExclusiveLock
,
2733 OUT PIO_STATUS_BLOCK IoStatus
,
2734 IN PIRP Irp OPTIONAL
,
2736 IN BOOLEAN AlreadySynchronized
2740 FsRtlProcessFileLock:
2743 -STATUS_INVALID_DEVICE_REQUEST
2744 -STATUS_RANGE_NOT_LOCKED from unlock routines.
2745 -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
2746 (redirected IoStatus->Status).
2749 -switch ( Irp->CurrentStackLocation->MinorFunction )
2750 lock: return FsRtlPrivateLock;
2751 unlocksingle: return FsRtlFastUnlockSingle;
2752 unlockall: return FsRtlFastUnlockAll;
2753 unlockallbykey: return FsRtlFastUnlockAllByKey;
2754 default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
2755 return STATUS_INVALID_DEVICE_REQUEST;
2757 -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
2758 -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
2763 FsRtlProcessFileLock (
2764 IN PFILE_LOCK FileLock
,
2766 IN PVOID Context OPTIONAL
2772 FsRtlRegisterUncProvider (
2773 IN OUT PHANDLE MupHandle
,
2774 IN PUNICODE_STRING RedirectorDeviceName
,
2775 IN BOOLEAN MailslotsSupported
2781 FsRtlUninitializeFileLock (
2782 IN PFILE_LOCK FileLock
2788 FsRtlUninitializeOplock (
2789 IN OUT POPLOCK Oplock
2802 HalQueryRealTimeClock (
2803 IN OUT PTIME_FIELDS TimeFields
2809 HalSetRealTimeClock (
2810 IN PTIME_FIELDS TimeFields
2813 #define InitializeMessageHeader(m, l, t) { \
2814 (m)->Length = (USHORT)(l); \
2815 (m)->DataLength = (USHORT)(l - sizeof( LPC_MESSAGE )); \
2816 (m)->MessageType = (USHORT)(t); \
2817 (m)->DataInfoOffset = 0; \
2823 IoAcquireVpbSpinLock (
2830 IoCheckDesiredAccess (
2831 IN OUT PACCESS_MASK DesiredAccess
,
2832 IN ACCESS_MASK GrantedAccess
2838 IoCheckEaBufferValidity (
2839 IN PFILE_FULL_EA_INFORMATION EaBuffer
,
2841 OUT PULONG ErrorOffset
2847 IoCheckFunctionAccess (
2848 IN ACCESS_MASK GrantedAccess
,
2849 IN UCHAR MajorFunction
,
2850 IN UCHAR MinorFunction
,
2851 IN ULONG IoControlCode
,
2852 IN PFILE_INFORMATION_CLASS FileInformationClass OPTIONAL
,
2853 IN PFS_INFORMATION_CLASS FsInformationClass OPTIONAL
2856 #if (VER_PRODUCTBUILD >= 2195)
2861 IoCheckQuotaBufferValidity (
2862 IN PFILE_QUOTA_INFORMATION QuotaBuffer
,
2863 IN ULONG QuotaLength
,
2864 OUT PULONG ErrorOffset
2867 #endif /* (VER_PRODUCTBUILD >= 2195) */
2872 IoCreateStreamFileObject (
2873 IN PFILE_OBJECT FileObject OPTIONAL
,
2874 IN PDEVICE_OBJECT DeviceObject OPTIONAL
2877 #if (VER_PRODUCTBUILD >= 2195)
2882 IoCreateStreamFileObjectLite (
2883 IN PFILE_OBJECT FileObject OPTIONAL
,
2884 IN PDEVICE_OBJECT DeviceObject OPTIONAL
2887 #endif /* (VER_PRODUCTBUILD >= 2195) */
2892 IoFastQueryNetworkAttributes (
2893 IN POBJECT_ATTRIBUTES ObjectAttributes
,
2894 IN ACCESS_MASK DesiredAccess
,
2895 IN ULONG OpenOptions
,
2896 OUT PIO_STATUS_BLOCK IoStatus
,
2897 OUT PFILE_NETWORK_OPEN_INFORMATION Buffer
2903 IoGetAttachedDevice (
2904 IN PDEVICE_OBJECT DeviceObject
2910 IoGetBaseFileSystemDeviceObject (
2911 IN PFILE_OBJECT FileObject
2917 IoGetRequestorProcess (
2921 #if (VER_PRODUCTBUILD >= 2195)
2926 IoGetRequestorProcessId (
2930 #endif /* (VER_PRODUCTBUILD >= 2195) */
2939 #define IoIsFileOpenedExclusively(FileObject) ( \
2941 (FileObject)->SharedRead || \
2942 (FileObject)->SharedWrite || \
2943 (FileObject)->SharedDelete \
2950 IoIsOperationSynchronous (
2961 #if (VER_PRODUCTBUILD >= 2195)
2966 IoIsValidNameGraftingBuffer (
2968 IN PREPARSE_DATA_BUFFER ReparseBuffer
2971 #endif /* (VER_PRODUCTBUILD >= 2195) */
2977 IN PFILE_OBJECT FileObject
,
2979 IN PLARGE_INTEGER Offset
,
2981 OUT PIO_STATUS_BLOCK IoStatusBlock
2987 IoQueryFileInformation (
2988 IN PFILE_OBJECT FileObject
,
2989 IN FILE_INFORMATION_CLASS FileInformationClass
,
2991 OUT PVOID FileInformation
,
2992 OUT PULONG ReturnedLength
2998 IoQueryVolumeInformation (
2999 IN PFILE_OBJECT FileObject
,
3000 IN FS_INFORMATION_CLASS FsInformationClass
,
3002 OUT PVOID FsInformation
,
3003 OUT PULONG ReturnedLength
3009 IoRegisterFileSystem (
3010 IN OUT PDEVICE_OBJECT DeviceObject
3013 #if (VER_PRODUCTBUILD >= 1381)
3015 typedef VOID (NTAPI
*PDRIVER_FS_NOTIFICATION
) (
3016 IN PDEVICE_OBJECT DeviceObject
,
3017 IN BOOLEAN DriverActive
3023 IoRegisterFsRegistrationChange (
3024 IN PDRIVER_OBJECT DriverObject
,
3025 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
3028 #endif /* (VER_PRODUCTBUILD >= 1381) */
3033 IoReleaseVpbSpinLock (
3040 IoSetDeviceToVerify (
3042 IN PDEVICE_OBJECT DeviceObject
3049 IN PFILE_OBJECT FileObject
,
3050 IN FILE_INFORMATION_CLASS FileInformationClass
,
3052 IN PVOID FileInformation
3065 IoSynchronousPageWrite (
3066 IN PFILE_OBJECT FileObject
,
3068 IN PLARGE_INTEGER FileOffset
,
3070 OUT PIO_STATUS_BLOCK IoStatusBlock
3083 IoUnregisterFileSystem (
3084 IN OUT PDEVICE_OBJECT DeviceObject
3087 #if (VER_PRODUCTBUILD >= 1381)
3092 IoUnregisterFsRegistrationChange (
3093 IN PDRIVER_OBJECT DriverObject
,
3094 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
3097 #endif /* (VER_PRODUCTBUILD >= 1381) */
3103 IN PDEVICE_OBJECT DeviceObject
,
3104 IN BOOLEAN AllowRawMount
3111 IN PEPROCESS Process
3126 IN ULONG Count OPTIONAL
3134 IN PLIST_ENTRY Entry
3142 IN PLIST_ENTRY Entry
3150 IN PVOID SystemArgument1
,
3151 IN PVOID SystemArgument2
,
3152 IN KPRIORITY PriorityBoost
3167 IN KPROCESSOR_MODE WaitMode
,
3168 IN PLARGE_INTEGER Timeout OPTIONAL
3178 #if (VER_PRODUCTBUILD >= 2195)
3183 KeStackAttachProcess (
3184 IN PKPROCESS Process
,
3185 OUT PKAPC_STATE ApcState
3191 KeUnstackDetachProcess (
3192 IN PKAPC_STATE ApcState
3195 #endif /* (VER_PRODUCTBUILD >= 2195) */
3200 MmCanFileBeTruncated (
3201 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
3202 IN PLARGE_INTEGER NewFileSize
3208 MmFlushImageSection (
3209 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
3210 IN MMFLUSH_TYPE FlushType
3216 MmForceSectionClosed (
3217 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
3218 IN BOOLEAN DelayClose
3221 #if (VER_PRODUCTBUILD >= 1381)
3226 MmIsRecursiveIoFault (
3232 #define MmIsRecursiveIoFault() ( \
3233 (PsGetCurrentThread()->DisablePageFaultClustering) | \
3234 (PsGetCurrentThread()->ForwardClusterOnly) \
3242 MmMapViewOfSection (
3243 IN PVOID SectionObject
,
3244 IN PEPROCESS Process
,
3245 IN OUT PVOID
*BaseAddress
,
3247 IN ULONG CommitSize
,
3248 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
3249 IN OUT PULONG ViewSize
,
3250 IN SECTION_INHERIT InheritDisposition
,
3251 IN ULONG AllocationType
,
3258 MmSetAddressRangeModified (
3267 IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL
,
3268 IN POBJECT_TYPE ObjectType
,
3269 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
3270 IN KPROCESSOR_MODE AccessMode
,
3271 IN OUT PVOID ParseContext OPTIONAL
,
3272 IN ULONG ObjectSize
,
3273 IN ULONG PagedPoolCharge OPTIONAL
,
3274 IN ULONG NonPagedPoolCharge OPTIONAL
,
3281 ObGetObjectPointerCount (
3290 IN PACCESS_STATE PassedAccessState OPTIONAL
,
3291 IN ACCESS_MASK DesiredAccess
,
3292 IN ULONG AdditionalReferences
,
3293 OUT PVOID
*ReferencedObject OPTIONAL
,
3300 ObMakeTemporaryObject (
3307 ObOpenObjectByPointer (
3309 IN ULONG HandleAttributes
,
3310 IN PACCESS_STATE PassedAccessState OPTIONAL
,
3311 IN ACCESS_MASK DesiredAccess OPTIONAL
,
3312 IN POBJECT_TYPE ObjectType OPTIONAL
,
3313 IN KPROCESSOR_MODE AccessMode
,
3322 OUT POBJECT_NAME_INFORMATION ObjectNameInfo
,
3324 OUT PULONG ReturnLength
3330 ObQueryObjectAuditingByHandle (
3332 OUT PBOOLEAN GenerateOnClose
3338 ObReferenceObjectByName (
3339 IN PUNICODE_STRING ObjectName
,
3340 IN ULONG Attributes
,
3341 IN PACCESS_STATE PassedAccessState OPTIONAL
,
3342 IN ACCESS_MASK DesiredAccess OPTIONAL
,
3343 IN POBJECT_TYPE ObjectType
,
3344 IN KPROCESSOR_MODE AccessMode
,
3345 IN OUT PVOID ParseContext OPTIONAL
,
3353 IN PEPROCESS Process
,
3354 IN POOL_TYPE PoolType
,
3358 #define PsDereferenceImpersonationToken(T) \
3359 {if (ARGUMENT_PRESENT(T)) { \
3360 (ObDereferenceObject((T))); \
3366 #define PsDereferencePrimaryToken(T) (ObDereferenceObject((T)))
3371 PsGetProcessExitTime (
3378 PsIsThreadTerminating (
3385 PsLookupProcessByProcessId (
3387 OUT PEPROCESS
*Process
3393 PsLookupProcessThreadByCid (
3395 OUT PEPROCESS
*Process OPTIONAL
,
3396 OUT PETHREAD
*Thread
3402 PsLookupThreadByThreadId (
3403 IN PVOID UniqueThreadId
,
3404 OUT PETHREAD
*Thread
3410 PsReferenceImpersonationToken (
3412 OUT PBOOLEAN CopyOnUse
,
3413 OUT PBOOLEAN EffectiveOnly
,
3414 OUT PSECURITY_IMPERSONATION_LEVEL Level
3420 PsReferencePrimaryToken (
3421 IN PEPROCESS Process
3428 IN PEPROCESS Process
,
3429 IN POOL_TYPE PoolType
,
3443 RtlAbsoluteToSelfRelativeSD (
3444 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor
,
3445 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor
,
3446 IN PULONG BufferLength
3453 IN HANDLE HeapHandle
,
3462 IN USHORT CompressionFormatAndEngine
,
3463 IN PUCHAR UncompressedBuffer
,
3464 IN ULONG UncompressedBufferSize
,
3465 OUT PUCHAR CompressedBuffer
,
3466 IN ULONG CompressedBufferSize
,
3467 IN ULONG UncompressedChunkSize
,
3468 OUT PULONG FinalCompressedSize
,
3476 IN PUCHAR UncompressedBuffer
,
3477 IN ULONG UncompressedBufferSize
,
3478 OUT PUCHAR CompressedBuffer
,
3479 IN ULONG CompressedBufferSize
,
3480 IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo
,
3481 IN ULONG CompressedDataInfoLength
,
3488 RtlConvertSidToUnicodeString (
3489 OUT PUNICODE_STRING DestinationString
,
3491 IN BOOLEAN AllocateDestinationString
3499 IN PSID Destination
,
3506 RtlDecompressBuffer (
3507 IN USHORT CompressionFormat
,
3508 OUT PUCHAR UncompressedBuffer
,
3509 IN ULONG UncompressedBufferSize
,
3510 IN PUCHAR CompressedBuffer
,
3511 IN ULONG CompressedBufferSize
,
3512 OUT PULONG FinalUncompressedSize
3518 RtlDecompressChunks (
3519 OUT PUCHAR UncompressedBuffer
,
3520 IN ULONG UncompressedBufferSize
,
3521 IN PUCHAR CompressedBuffer
,
3522 IN ULONG CompressedBufferSize
,
3523 IN PUCHAR CompressedTail
,
3524 IN ULONG CompressedTailSize
,
3525 IN PCOMPRESSED_DATA_INFO CompressedDataInfo
3531 RtlDecompressFragment (
3532 IN USHORT CompressionFormat
,
3533 OUT PUCHAR UncompressedFragment
,
3534 IN ULONG UncompressedFragmentSize
,
3535 IN PUCHAR CompressedBuffer
,
3536 IN ULONG CompressedBufferSize
,
3537 IN ULONG FragmentOffset
,
3538 OUT PULONG FinalUncompressedSize
,
3546 IN USHORT CompressionFormat
,
3547 IN OUT PUCHAR
*CompressedBuffer
,
3548 IN PUCHAR EndOfCompressedBufferPlus1
,
3549 OUT PUCHAR
*ChunkBuffer
,
3550 OUT PULONG ChunkSize
3564 RtlFillMemoryUlong (
3565 IN PVOID Destination
,
3574 IN HANDLE HeapHandle
,
3582 RtlGenerate8dot3Name (
3583 IN PUNICODE_STRING Name
,
3584 IN BOOLEAN AllowExtendedCharacters
,
3585 IN OUT PGENERATE_NAME_CONTEXT Context
,
3586 OUT PUNICODE_STRING Name8dot3
3592 RtlGetCompressionWorkSpaceSize (
3593 IN USHORT CompressionFormatAndEngine
,
3594 OUT PULONG CompressBufferWorkSpaceSize
,
3595 OUT PULONG CompressFragmentWorkSpaceSize
3601 RtlGetDaclSecurityDescriptor (
3602 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3603 OUT PBOOLEAN DaclPresent
,
3605 OUT PBOOLEAN DaclDefaulted
3611 RtlGetGroupSecurityDescriptor (
3612 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3614 OUT PBOOLEAN GroupDefaulted
3620 RtlGetOwnerSecurityDescriptor (
3621 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3623 OUT PBOOLEAN OwnerDefaulted
3631 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
3632 IN UCHAR SubAuthorityCount
3638 RtlIsNameLegalDOS8Dot3 (
3639 IN PUNICODE_STRING UnicodeName
,
3640 IN PANSI_STRING AnsiName
,
3647 RtlLengthRequiredSid (
3648 IN UCHAR SubAuthorityCount
3661 RtlNtStatusToDosError (
3669 IN USHORT CompressionFormat
,
3670 IN OUT PUCHAR
*CompressedBuffer
,
3671 IN PUCHAR EndOfCompressedBufferPlus1
,
3672 OUT PUCHAR
*ChunkBuffer
,
3679 RtlSecondsSince1970ToTime (
3680 IN ULONG SecondsSince1970
,
3681 OUT PLARGE_INTEGER Time
3684 #if (VER_PRODUCTBUILD >= 2195)
3689 RtlSelfRelativeToAbsoluteSD (
3690 IN PSECURITY_DESCRIPTOR SelfRelativeSD
,
3691 OUT PSECURITY_DESCRIPTOR AbsoluteSD
,
3692 IN PULONG AbsoluteSDSize
,
3698 IN PULONG OwnerSize
,
3699 IN PSID PrimaryGroup
,
3700 IN PULONG PrimaryGroupSize
3703 #endif /* (VER_PRODUCTBUILD >= 2195) */
3708 RtlSetGroupSecurityDescriptor (
3709 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
3711 IN BOOLEAN GroupDefaulted
3717 RtlSetOwnerSecurityDescriptor (
3718 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
3720 IN BOOLEAN OwnerDefaulted
3726 RtlSetSaclSecurityDescriptor (
3727 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
3728 IN BOOLEAN SaclPresent
,
3730 IN BOOLEAN SaclDefaulted
3736 RtlSubAuthorityCountSid (
3743 RtlSubAuthoritySid (
3745 IN ULONG SubAuthority
3758 SeAppendPrivileges (
3759 PACCESS_STATE AccessState
,
3760 PPRIVILEGE_SET Privileges
3766 SeAuditingFileEvents (
3767 IN BOOLEAN AccessGranted
,
3768 IN PSECURITY_DESCRIPTOR SecurityDescriptor
3774 SeAuditingFileOrGlobalEvents (
3775 IN BOOLEAN AccessGranted
,
3776 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3777 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
3783 SeCaptureSubjectContext (
3784 OUT PSECURITY_SUBJECT_CONTEXT SubjectContext
3790 SeCreateAccessState (
3791 OUT PACCESS_STATE AccessState
,
3793 IN ACCESS_MASK AccessMask
,
3794 IN PGENERIC_MAPPING Mapping
3800 SeCreateClientSecurity (
3802 IN PSECURITY_QUALITY_OF_SERVICE QualityOfService
,
3803 IN BOOLEAN RemoteClient
,
3804 OUT PSECURITY_CLIENT_CONTEXT ClientContext
3807 #if (VER_PRODUCTBUILD >= 2195)
3812 SeCreateClientSecurityFromSubjectContext (
3813 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
3814 IN PSECURITY_QUALITY_OF_SERVICE QualityOfService
,
3815 IN BOOLEAN ServerIsRemote
,
3816 OUT PSECURITY_CLIENT_CONTEXT ClientContext
3819 #endif /* (VER_PRODUCTBUILD >= 2195) */
3821 #define SeDeleteClientSecurity(C) { \
3822 if (SeTokenType((C)->ClientToken) == TokenPrimary) { \
3823 PsDereferencePrimaryToken( (C)->ClientToken ); \
3825 PsDereferenceImpersonationToken( (C)->ClientToken ); \
3832 SeDeleteObjectAuditAlarm (
3837 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
3843 IN PPRIVILEGE_SET Privileges
3849 SeImpersonateClient (
3850 IN PSECURITY_CLIENT_CONTEXT ClientContext
,
3851 IN PETHREAD ServerThread OPTIONAL
3854 #if (VER_PRODUCTBUILD >= 2195)
3859 SeImpersonateClientEx (
3860 IN PSECURITY_CLIENT_CONTEXT ClientContext
,
3861 IN PETHREAD ServerThread OPTIONAL
3864 #endif /* (VER_PRODUCTBUILD >= 2195) */
3869 SeLockSubjectContext (
3870 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
3876 SeMarkLogonSessionForTerminationNotification (
3883 SeOpenObjectAuditAlarm (
3884 IN PUNICODE_STRING ObjectTypeName
,
3885 IN PVOID Object OPTIONAL
,
3886 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL
,
3887 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3888 IN PACCESS_STATE AccessState
,
3889 IN BOOLEAN ObjectCreated
,
3890 IN BOOLEAN AccessGranted
,
3891 IN KPROCESSOR_MODE AccessMode
,
3892 OUT PBOOLEAN GenerateOnClose
3898 SeOpenObjectForDeleteAuditAlarm (
3899 IN PUNICODE_STRING ObjectTypeName
,
3900 IN PVOID Object OPTIONAL
,
3901 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL
,
3902 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
3903 IN PACCESS_STATE AccessState
,
3904 IN BOOLEAN ObjectCreated
,
3905 IN BOOLEAN AccessGranted
,
3906 IN KPROCESSOR_MODE AccessMode
,
3907 OUT PBOOLEAN GenerateOnClose
3914 IN OUT PPRIVILEGE_SET RequiredPrivileges
,
3915 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
3916 IN KPROCESSOR_MODE AccessMode
3922 SeQueryAuthenticationIdToken (
3923 IN PACCESS_TOKEN Token
,
3927 #if (VER_PRODUCTBUILD >= 2195)
3932 SeQueryInformationToken (
3933 IN PACCESS_TOKEN Token
,
3934 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
3935 OUT PVOID
*TokenInformation
3938 #endif /* (VER_PRODUCTBUILD >= 2195) */
3943 SeQuerySecurityDescriptorInfo (
3944 IN PSECURITY_INFORMATION SecurityInformation
,
3945 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
3946 IN OUT PULONG Length
,
3947 IN PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
3950 #if (VER_PRODUCTBUILD >= 2195)
3955 SeQuerySessionIdToken (
3956 IN PACCESS_TOKEN Token
,
3960 #endif /* (VER_PRODUCTBUILD >= 2195) */
3962 #define SeQuerySubjectContextToken( SubjectContext ) \
3963 ( ARGUMENT_PRESENT( \
3964 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken \
3966 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken : \
3967 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
3969 typedef NTSTATUS (*PSE_LOGON_SESSION_TERMINATED_ROUTINE
) (
3976 SeRegisterLogonSessionTerminatedRoutine (
3977 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
3983 SeReleaseSubjectContext (
3984 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
3990 SeSetAccessStateGenericMapping (
3991 PACCESS_STATE AccessState
,
3992 PGENERIC_MAPPING GenericMapping
3998 SeSetSecurityDescriptorInfo (
3999 IN PVOID Object OPTIONAL
,
4000 IN PSECURITY_INFORMATION SecurityInformation
,
4001 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4002 IN OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
4003 IN POOL_TYPE PoolType
,
4004 IN PGENERIC_MAPPING GenericMapping
4007 #if (VER_PRODUCTBUILD >= 2195)
4012 SeSetSecurityDescriptorInfoEx (
4013 IN PVOID Object OPTIONAL
,
4014 IN PSECURITY_INFORMATION SecurityInformation
,
4015 IN PSECURITY_DESCRIPTOR ModificationDescriptor
,
4016 IN OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
4017 IN ULONG AutoInheritFlags
,
4018 IN POOL_TYPE PoolType
,
4019 IN PGENERIC_MAPPING GenericMapping
4026 IN PACCESS_TOKEN Token
4032 SeTokenIsRestricted (
4033 IN PACCESS_TOKEN Token
4036 #endif /* (VER_PRODUCTBUILD >= 2195) */
4042 IN PACCESS_TOKEN Token
4048 SeUnlockSubjectContext (
4049 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
4054 SeUnregisterLogonSessionTerminatedRoutine (
4055 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
4058 #if (VER_PRODUCTBUILD >= 2195)
4063 ZwAdjustPrivilegesToken (
4064 IN HANDLE TokenHandle
,
4065 IN BOOLEAN DisableAllPrivileges
,
4066 IN PTOKEN_PRIVILEGES NewState
,
4067 IN ULONG BufferLength
,
4068 OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL
,
4069 OUT PULONG ReturnLength
4072 #endif /* (VER_PRODUCTBUILD >= 2195) */
4078 IN HANDLE ThreadHandle
4084 ZwAllocateVirtualMemory (
4085 IN HANDLE ProcessHandle
,
4086 IN OUT PVOID
*BaseAddress
,
4088 IN OUT PULONG RegionSize
,
4089 IN ULONG AllocationType
,
4096 ZwAccessCheckAndAuditAlarm (
4097 IN PUNICODE_STRING SubsystemName
,
4099 IN PUNICODE_STRING ObjectTypeName
,
4100 IN PUNICODE_STRING ObjectName
,
4101 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4102 IN ACCESS_MASK DesiredAccess
,
4103 IN PGENERIC_MAPPING GenericMapping
,
4104 IN BOOLEAN ObjectCreation
,
4105 OUT PACCESS_MASK GrantedAccess
,
4106 OUT PBOOLEAN AccessStatus
,
4107 OUT PBOOLEAN GenerateOnClose
4110 #if (VER_PRODUCTBUILD >= 2195)
4116 IN HANDLE FileHandle
,
4117 OUT PIO_STATUS_BLOCK IoStatusBlock
4120 #endif /* (VER_PRODUCTBUILD >= 2195) */
4126 IN HANDLE EventHandle
4132 ZwCloseObjectAuditAlarm (
4133 IN PUNICODE_STRING SubsystemName
,
4135 IN BOOLEAN GenerateOnClose
4142 OUT PHANDLE SectionHandle
,
4143 IN ACCESS_MASK DesiredAccess
,
4144 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4145 IN PLARGE_INTEGER MaximumSize OPTIONAL
,
4146 IN ULONG SectionPageProtection
,
4147 IN ULONG AllocationAttributes
,
4148 IN HANDLE FileHandle OPTIONAL
4154 ZwCreateSymbolicLinkObject (
4155 OUT PHANDLE SymbolicLinkHandle
,
4156 IN ACCESS_MASK DesiredAccess
,
4157 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4158 IN PUNICODE_STRING TargetName
4165 IN POBJECT_ATTRIBUTES ObjectAttributes
4173 IN PUNICODE_STRING Name
4179 ZwDeviceIoControlFile (
4180 IN HANDLE FileHandle
,
4181 IN HANDLE Event OPTIONAL
,
4182 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4183 IN PVOID ApcContext OPTIONAL
,
4184 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4185 IN ULONG IoControlCode
,
4186 IN PVOID InputBuffer OPTIONAL
,
4187 IN ULONG InputBufferLength
,
4188 OUT PVOID OutputBuffer OPTIONAL
,
4189 IN ULONG OutputBufferLength
4196 IN PUNICODE_STRING String
4203 IN HANDLE SourceProcessHandle
,
4204 IN HANDLE SourceHandle
,
4205 IN HANDLE TargetProcessHandle OPTIONAL
,
4206 OUT PHANDLE TargetHandle OPTIONAL
,
4207 IN ACCESS_MASK DesiredAccess
,
4208 IN ULONG HandleAttributes
,
4216 IN HANDLE ExistingTokenHandle
,
4217 IN ACCESS_MASK DesiredAccess
,
4218 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4219 IN BOOLEAN EffectiveOnly
,
4220 IN TOKEN_TYPE TokenType
,
4221 OUT PHANDLE NewTokenHandle
4227 ZwFlushInstructionCache (
4228 IN HANDLE ProcessHandle
,
4229 IN PVOID BaseAddress OPTIONAL
,
4233 #if (VER_PRODUCTBUILD >= 2195)
4238 ZwFlushVirtualMemory (
4239 IN HANDLE ProcessHandle
,
4240 IN OUT PVOID
*BaseAddress
,
4241 IN OUT PULONG FlushSize
,
4242 OUT PIO_STATUS_BLOCK IoStatusBlock
4245 #endif /* (VER_PRODUCTBUILD >= 2195) */
4250 ZwFreeVirtualMemory (
4251 IN HANDLE ProcessHandle
,
4252 IN OUT PVOID
*BaseAddress
,
4253 IN OUT PULONG RegionSize
,
4261 IN HANDLE FileHandle
,
4262 IN HANDLE Event OPTIONAL
,
4263 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4264 IN PVOID ApcContext OPTIONAL
,
4265 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4266 IN ULONG FsControlCode
,
4267 IN PVOID InputBuffer OPTIONAL
,
4268 IN ULONG InputBufferLength
,
4269 OUT PVOID OutputBuffer OPTIONAL
,
4270 IN ULONG OutputBufferLength
4273 #if (VER_PRODUCTBUILD >= 2195)
4278 ZwInitiatePowerAction (
4279 IN POWER_ACTION SystemAction
,
4280 IN SYSTEM_POWER_STATE MinSystemState
,
4282 IN BOOLEAN Asynchronous
4285 #endif /* (VER_PRODUCTBUILD >= 2195) */
4291 /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
4292 IN PUNICODE_STRING RegistryPath
4299 IN POBJECT_ATTRIBUTES KeyObjectAttributes
,
4300 IN POBJECT_ATTRIBUTES FileObjectAttributes
4307 IN HANDLE KeyHandle
,
4308 IN HANDLE EventHandle OPTIONAL
,
4309 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4310 IN PVOID ApcContext OPTIONAL
,
4311 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4312 IN ULONG NotifyFilter
,
4313 IN BOOLEAN WatchSubtree
,
4315 IN ULONG BufferLength
,
4316 IN BOOLEAN Asynchronous
4322 ZwOpenDirectoryObject (
4323 OUT PHANDLE DirectoryHandle
,
4324 IN ACCESS_MASK DesiredAccess
,
4325 IN POBJECT_ATTRIBUTES ObjectAttributes
4332 OUT PHANDLE EventHandle
,
4333 IN ACCESS_MASK DesiredAccess
,
4334 IN POBJECT_ATTRIBUTES ObjectAttributes
4341 OUT PHANDLE ProcessHandle
,
4342 IN ACCESS_MASK DesiredAccess
,
4343 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4344 IN PCLIENT_ID ClientId OPTIONAL
4350 ZwOpenProcessToken (
4351 IN HANDLE ProcessHandle
,
4352 IN ACCESS_MASK DesiredAccess
,
4353 OUT PHANDLE TokenHandle
4360 OUT PHANDLE ThreadHandle
,
4361 IN ACCESS_MASK DesiredAccess
,
4362 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4363 IN PCLIENT_ID ClientId
4370 IN HANDLE ThreadHandle
,
4371 IN ACCESS_MASK DesiredAccess
,
4372 IN BOOLEAN OpenAsSelf
,
4373 OUT PHANDLE TokenHandle
4376 #if (VER_PRODUCTBUILD >= 2195)
4381 ZwPowerInformation (
4382 IN POWER_INFORMATION_LEVEL PowerInformationLevel
,
4383 IN PVOID InputBuffer OPTIONAL
,
4384 IN ULONG InputBufferLength
,
4385 OUT PVOID OutputBuffer OPTIONAL
,
4386 IN ULONG OutputBufferLength
4389 #endif /* (VER_PRODUCTBUILD >= 2195) */
4395 IN HANDLE EventHandle
,
4396 OUT PLONG PreviousState OPTIONAL
4402 ZwQueryDefaultLocale (
4403 IN BOOLEAN ThreadOrSystem
,
4410 ZwQueryDirectoryFile (
4411 IN HANDLE FileHandle
,
4412 IN HANDLE Event OPTIONAL
,
4413 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4414 IN PVOID ApcContext OPTIONAL
,
4415 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4416 OUT PVOID FileInformation
,
4418 IN FILE_INFORMATION_CLASS FileInformationClass
,
4419 IN BOOLEAN ReturnSingleEntry
,
4420 IN PUNICODE_STRING FileName OPTIONAL
,
4421 IN BOOLEAN RestartScan
4424 #if (VER_PRODUCTBUILD >= 2195)
4429 ZwQueryDirectoryObject (
4430 IN HANDLE DirectoryHandle
,
4433 IN BOOLEAN ReturnSingleEntry
,
4434 IN BOOLEAN RestartScan
,
4435 IN OUT PULONG Context
,
4436 OUT PULONG ReturnLength OPTIONAL
4443 IN HANDLE FileHandle
,
4444 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4447 IN BOOLEAN ReturnSingleEntry
,
4448 IN PVOID EaList OPTIONAL
,
4449 IN ULONG EaListLength
,
4450 IN PULONG EaIndex OPTIONAL
,
4451 IN BOOLEAN RestartScan
4454 #endif /* (VER_PRODUCTBUILD >= 2195) */
4459 ZwQueryInformationProcess (
4460 IN HANDLE ProcessHandle
,
4461 IN PROCESSINFOCLASS ProcessInformationClass
,
4462 OUT PVOID ProcessInformation
,
4463 IN ULONG ProcessInformationLength
,
4464 OUT PULONG ReturnLength OPTIONAL
4470 ZwQueryInformationToken (
4471 IN HANDLE TokenHandle
,
4472 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
4473 OUT PVOID TokenInformation
,
4475 OUT PULONG ResultLength
4482 IN HANDLE ObjectHandle
,
4483 IN OBJECT_INFORMATION_CLASS ObjectInformationClass
,
4484 OUT PVOID ObjectInformation
,
4486 OUT PULONG ResultLength
4493 IN HANDLE SectionHandle
,
4494 IN SECTION_INFORMATION_CLASS SectionInformationClass
,
4495 OUT PVOID SectionInformation
,
4496 IN ULONG SectionInformationLength
,
4497 OUT PULONG ResultLength OPTIONAL
4503 ZwQuerySecurityObject (
4504 IN HANDLE FileHandle
,
4505 IN SECURITY_INFORMATION SecurityInformation
,
4506 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
4508 OUT PULONG ResultLength
4514 ZwQuerySystemInformation (
4515 IN SYSTEM_INFORMATION_CLASS SystemInformationClass
,
4516 OUT PVOID SystemInformation
,
4518 OUT PULONG ReturnLength
4524 ZwQueryVolumeInformationFile (
4525 IN HANDLE FileHandle
,
4526 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4527 OUT PVOID FsInformation
,
4529 IN FS_INFORMATION_CLASS FsInformationClass
4536 IN POBJECT_ATTRIBUTES NewFileObjectAttributes
,
4537 IN HANDLE KeyHandle
,
4538 IN POBJECT_ATTRIBUTES OldFileObjectAttributes
4545 IN HANDLE EventHandle
,
4546 OUT PLONG PreviousState OPTIONAL
4549 #if (VER_PRODUCTBUILD >= 2195)
4555 IN HANDLE KeyHandle
,
4556 IN HANDLE FileHandle
,
4560 #endif /* (VER_PRODUCTBUILD >= 2195) */
4566 IN HANDLE KeyHandle
,
4567 IN HANDLE FileHandle
4573 ZwSetDefaultLocale (
4574 IN BOOLEAN ThreadOrSystem
,
4578 #if (VER_PRODUCTBUILD >= 2195)
4583 ZwSetDefaultUILanguage (
4584 IN LANGID LanguageId
4591 IN HANDLE FileHandle
,
4592 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4597 #endif /* (VER_PRODUCTBUILD >= 2195) */
4603 IN HANDLE EventHandle
,
4604 OUT PLONG PreviousState OPTIONAL
4610 ZwSetInformationObject (
4611 IN HANDLE ObjectHandle
,
4612 IN OBJECT_INFORMATION_CLASS ObjectInformationClass
,
4613 IN PVOID ObjectInformation
,
4614 IN ULONG ObjectInformationLength
4620 ZwSetInformationProcess (
4621 IN HANDLE ProcessHandle
,
4622 IN PROCESSINFOCLASS ProcessInformationClass
,
4623 IN PVOID ProcessInformation
,
4624 IN ULONG ProcessInformationLength
4627 #if (VER_PRODUCTBUILD >= 2195)
4632 ZwSetSecurityObject (
4634 IN SECURITY_INFORMATION SecurityInformation
,
4635 IN PSECURITY_DESCRIPTOR SecurityDescriptor
4638 #endif /* (VER_PRODUCTBUILD >= 2195) */
4643 ZwSetSystemInformation (
4644 IN SYSTEM_INFORMATION_CLASS SystemInformationClass
,
4645 IN PVOID SystemInformation
,
4653 IN PLARGE_INTEGER NewTime
,
4654 OUT PLARGE_INTEGER OldTime OPTIONAL
4657 #if (VER_PRODUCTBUILD >= 2195)
4662 ZwSetVolumeInformationFile (
4663 IN HANDLE FileHandle
,
4664 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4665 IN PVOID FsInformation
,
4667 IN FS_INFORMATION_CLASS FsInformationClass
4670 #endif /* (VER_PRODUCTBUILD >= 2195) */
4675 ZwTerminateProcess (
4676 IN HANDLE ProcessHandle OPTIONAL
,
4677 IN NTSTATUS ExitStatus
4684 /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
4685 IN PUNICODE_STRING RegistryPath
4692 IN POBJECT_ATTRIBUTES KeyObjectAttributes
4698 ZwWaitForSingleObject (
4700 IN BOOLEAN Alertable
,
4701 IN PLARGE_INTEGER Timeout OPTIONAL
4707 ZwWaitForMultipleObjects (
4708 IN ULONG HandleCount
,
4710 IN WAIT_TYPE WaitType
,
4711 IN BOOLEAN Alertable
,
4712 IN PLARGE_INTEGER Timeout OPTIONAL
4728 #endif /* _NTIFS_ */