- Add missing definitions to headers.
[reactos.git] / reactos / include / ddk / ntifs.h
1 /*
2 * ntifs.h
3 *
4 * Windows NT Filesystem Driver Developer Kit
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Bo Brantén <bosse@acc.umu.se>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23 #ifndef _NTIFS_
24 #define _NTIFS_
25 #define _GNU_NTIFS_
26
27 #if __GNUC__ >= 3
28 #pragma GCC system_header
29 #endif
30
31 #ifdef _NTOSKRNL_
32 /* HACKHACKHACK!!! We shouldn't include this header from ntoskrnl! */
33 #define NTKERNELAPI
34 #else
35 #define NTKERNELAPI DECLSPEC_IMPORT
36 #endif
37
38 #include "ntddk.h"
39
40 #define _NTIFS_INCLUDED_
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44
45 #pragma pack(push,4)
46
47 #ifndef VER_PRODUCTBUILD
48 #define VER_PRODUCTBUILD 10000
49 #endif
50
51 #ifndef NTSYSAPI
52 #define NTSYSAPI
53 #endif
54
55 #define EX_PUSH_LOCK ULONG_PTR
56 #define PEX_PUSH_LOCK PULONG_PTR
57
58
59 #ifndef FlagOn
60 #define FlagOn(_F,_SF) ((_F) & (_SF))
61 #endif
62
63 #ifndef BooleanFlagOn
64 #define BooleanFlagOn(F,SF) ((BOOLEAN)(((F) & (SF)) != 0))
65 #endif
66
67 #ifndef SetFlag
68 #define SetFlag(_F,_SF) ((_F) |= (_SF))
69 #endif
70
71 #ifndef ClearFlag
72 #define ClearFlag(_F,_SF) ((_F) &= ~(_SF))
73 #endif
74
75 #include "csq.h"
76
77 typedef struct _SE_EXPORTS *PSE_EXPORTS;
78
79 #ifdef _NTOSKRNL_
80 extern PUCHAR FsRtlLegalAnsiCharacterArray;
81 #else
82 extern DECLSPEC_IMPORT PUCHAR FsRtlLegalAnsiCharacterArray;
83 #endif
84 extern PSE_EXPORTS SeExports;
85 extern PACL SePublicDefaultDacl;
86 extern PACL SeSystemDefaultDacl;
87
88 extern KSPIN_LOCK IoStatisticsLock;
89 extern ULONG IoReadOperationCount;
90 extern ULONG IoWriteOperationCount;
91 extern ULONG IoOtherOperationCount;
92 extern LARGE_INTEGER IoReadTransferCount;
93 extern LARGE_INTEGER IoWriteTransferCount;
94 extern LARGE_INTEGER IoOtherTransferCount;
95
96 typedef STRING LSA_STRING, *PLSA_STRING;
97 typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE;
98
99 typedef enum _SECURITY_LOGON_TYPE
100 {
101 UndefinedLogonType = 0,
102 Interactive = 2,
103 Network,
104 Batch,
105 Service,
106 Proxy,
107 Unlock,
108 NetworkCleartext,
109 NewCredentials,
110 #if (_WIN32_WINNT >= 0x0501)
111 RemoteInteractive,
112 CachedInteractive,
113 #endif
114 #if (_WIN32_WINNT >= 0x0502)
115 CachedRemoteInteractive,
116 CachedUnlock
117 #endif
118 } SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE;
119
120 #define ANSI_DOS_STAR ('<')
121 #define ANSI_DOS_QM ('>')
122 #define ANSI_DOS_DOT ('"')
123
124 #define DOS_STAR (L'<')
125 #define DOS_QM (L'>')
126 #define DOS_DOT (L'"')
127
128 /* also in winnt.h */
129 #define ACCESS_MIN_MS_ACE_TYPE (0x0)
130 #define ACCESS_ALLOWED_ACE_TYPE (0x0)
131 #define ACCESS_DENIED_ACE_TYPE (0x1)
132 #define SYSTEM_AUDIT_ACE_TYPE (0x2)
133 #define SYSTEM_ALARM_ACE_TYPE (0x3)
134 #define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
135 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
136 #define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
137 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
138 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
139 #define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
140 #define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
141 #define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
142 #define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
143 #define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
144 #define ACCESS_MAX_MS_ACE_TYPE (0x8)
145 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
146 #define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
147 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
148 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
149 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
150 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
151 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
152 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
153 #define ACCESS_MAX_MS_V5_ACE_TYPE (0x10)
154
155 #define COMPRESSION_FORMAT_NONE (0x0000)
156 #define COMPRESSION_FORMAT_DEFAULT (0x0001)
157 #define COMPRESSION_FORMAT_LZNT1 (0x0002)
158 #define COMPRESSION_ENGINE_STANDARD (0x0000)
159 #define COMPRESSION_ENGINE_MAXIMUM (0x0100)
160 #define COMPRESSION_ENGINE_HIBER (0x0200)
161
162 #define FILE_ACTION_ADDED 0x00000001
163 #define FILE_ACTION_REMOVED 0x00000002
164 #define FILE_ACTION_MODIFIED 0x00000003
165 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
166 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
167 #define FILE_ACTION_ADDED_STREAM 0x00000006
168 #define FILE_ACTION_REMOVED_STREAM 0x00000007
169 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
170 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
171 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
172 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
173 /* end winnt.h */
174
175 #define FILE_EA_TYPE_BINARY 0xfffe
176 #define FILE_EA_TYPE_ASCII 0xfffd
177 #define FILE_EA_TYPE_BITMAP 0xfffb
178 #define FILE_EA_TYPE_METAFILE 0xfffa
179 #define FILE_EA_TYPE_ICON 0xfff9
180 #define FILE_EA_TYPE_EA 0xffee
181 #define FILE_EA_TYPE_MVMT 0xffdf
182 #define FILE_EA_TYPE_MVST 0xffde
183 #define FILE_EA_TYPE_ASN1 0xffdd
184 #define FILE_EA_TYPE_FAMILY_IDS 0xff01
185
186 #define FILE_NEED_EA 0x00000080
187
188 /* also in winnt.h */
189 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
190 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
191 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
192 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
193 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
194 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
195 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
196 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
197 #define FILE_NOTIFY_CHANGE_EA 0x00000080
198 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
199 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
200 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
201 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
202 #define FILE_NOTIFY_VALID_MASK 0x00000fff
203 /* end winnt.h */
204
205 #define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007
206 #define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008
207
208 #define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009
209
210 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
211 #define FILE_CASE_PRESERVED_NAMES 0x00000002
212 #define FILE_UNICODE_ON_DISK 0x00000004
213 #define FILE_PERSISTENT_ACLS 0x00000008
214 #define FILE_FILE_COMPRESSION 0x00000010
215 #define FILE_VOLUME_QUOTAS 0x00000020
216 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
217 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
218 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
219 #define FS_LFN_APIS 0x00004000
220 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
221 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
222 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
223 #define FILE_NAMED_STREAMS 0x00040000
224 #define FILE_READ_ONLY_VOLUME 0x00080000
225 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
226 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
227
228 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
229 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
230
231 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
232 #define FILE_PIPE_MESSAGE_MODE 0x00000001
233
234 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
235 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
236
237 #define FILE_PIPE_INBOUND 0x00000000
238 #define FILE_PIPE_OUTBOUND 0x00000001
239 #define FILE_PIPE_FULL_DUPLEX 0x00000002
240
241 #define FILE_PIPE_DISCONNECTED_STATE 0x00000001
242 #define FILE_PIPE_LISTENING_STATE 0x00000002
243 #define FILE_PIPE_CONNECTED_STATE 0x00000003
244 #define FILE_PIPE_CLOSING_STATE 0x00000004
245
246 #define FILE_PIPE_CLIENT_END 0x00000000
247 #define FILE_PIPE_SERVER_END 0x00000001
248
249 #define FILE_PIPE_READ_DATA 0x00000000
250 #define FILE_PIPE_WRITE_SPACE 0x00000001
251
252 #define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
253 #define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
254 #define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
255 #define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
256 #define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
257 #define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
258 #define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
259 #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
260 #define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
261 #define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
262 #define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
263 #define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
264 #define FILE_STORAGE_TYPE_MASK 0x000f0000
265 #define FILE_STORAGE_TYPE_SHIFT 16
266
267 #define FILE_VC_QUOTA_NONE 0x00000000
268 #define FILE_VC_QUOTA_TRACK 0x00000001
269 #define FILE_VC_QUOTA_ENFORCE 0x00000002
270 #define FILE_VC_QUOTA_MASK 0x00000003
271
272 #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
273 #define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008
274
275 #define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010
276 #define FILE_VC_LOG_QUOTA_LIMIT 0x00000020
277 #define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040
278 #define FILE_VC_LOG_VOLUME_LIMIT 0x00000080
279
280 #define FILE_VC_QUOTAS_INCOMPLETE 0x00000100
281 #define FILE_VC_QUOTAS_REBUILDING 0x00000200
282
283 #define FILE_VC_VALID_MASK 0x000003ff
284
285 #define FSRTL_FLAG_FILE_MODIFIED (0x01)
286 #define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
287 #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
288 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
289 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
290 #define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
291 #define FSRTL_FLAG_ADVANCED_HEADER (0x40)
292 #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
293
294 #define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
295 #define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02)
296 #define FSRTL_FLAG2_PURGE_WHEN_MAPPED (0x04)
297 #define FSRTL_FLAG2_IS_PAGING_FILE (0x08)
298
299 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
300 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
301 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
302 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
303 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG (0x04)
304
305 #define FSRTL_VOLUME_DISMOUNT 1
306 #define FSRTL_VOLUME_DISMOUNT_FAILED 2
307 #define FSRTL_VOLUME_LOCK 3
308 #define FSRTL_VOLUME_LOCK_FAILED 4
309 #define FSRTL_VOLUME_UNLOCK 5
310 #define FSRTL_VOLUME_MOUNT 6
311
312 #define FSRTL_WILD_CHARACTER 0x08
313
314 #define FSRTL_FAT_LEGAL 0x01
315 #define FSRTL_HPFS_LEGAL 0x02
316 #define FSRTL_NTFS_LEGAL 0x04
317 #define FSRTL_WILD_CHARACTER 0x08
318 #define FSRTL_OLE_LEGAL 0x10
319 #define FSRTL_NTFS_STREAM_LEGAL 0x14
320
321 #ifdef _X86_
322 #define HARDWARE_PTE HARDWARE_PTE_X86
323 #define PHARDWARE_PTE PHARDWARE_PTE_X86
324 #endif
325
326 #define IO_CHECK_CREATE_PARAMETERS 0x0200
327 #define IO_ATTACH_DEVICE 0x0400
328
329 #define IO_ATTACH_DEVICE_API 0x80000000
330
331 #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64
332 #define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024
333
334 #define IO_TYPE_APC 18
335 #define IO_TYPE_DPC 19
336 #define IO_TYPE_DEVICE_QUEUE 20
337 #define IO_TYPE_EVENT_PAIR 21
338 #define IO_TYPE_INTERRUPT 22
339 #define IO_TYPE_PROFILE 23
340
341 #define IRP_BEING_VERIFIED 0x10
342
343 #define MAILSLOT_CLASS_FIRSTCLASS 1
344 #define MAILSLOT_CLASS_SECONDCLASS 2
345
346 #define MAILSLOT_SIZE_AUTO 0
347
348 #define MAP_PROCESS 1L
349 #define MAP_SYSTEM 2L
350 #define MEM_DOS_LIM 0x40000000
351
352 #define OB_TYPE_TYPE 1
353 #define OB_TYPE_DIRECTORY 2
354 #define OB_TYPE_SYMBOLIC_LINK 3
355 #define OB_TYPE_TOKEN 4
356 #define OB_TYPE_PROCESS 5
357 #define OB_TYPE_THREAD 6
358 #define OB_TYPE_EVENT 7
359 #define OB_TYPE_EVENT_PAIR 8
360 #define OB_TYPE_MUTANT 9
361 #define OB_TYPE_SEMAPHORE 10
362 #define OB_TYPE_TIMER 11
363 #define OB_TYPE_PROFILE 12
364 #define OB_TYPE_WINDOW_STATION 13
365 #define OB_TYPE_DESKTOP 14
366 #define OB_TYPE_SECTION 15
367 #define OB_TYPE_KEY 16
368 #define OB_TYPE_PORT 17
369 #define OB_TYPE_ADAPTER 18
370 #define OB_TYPE_CONTROLLER 19
371 #define OB_TYPE_DEVICE 20
372 #define OB_TYPE_DRIVER 21
373 #define OB_TYPE_IO_COMPLETION 22
374 #define OB_TYPE_FILE 23
375
376 #define PIN_WAIT (1)
377 #define PIN_EXCLUSIVE (2)
378 #define PIN_NO_READ (4)
379 #define PIN_IF_BCB (8)
380
381 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
382 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
383
384 #define SEC_BASED 0x00200000
385
386 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
387 #define SECURITY_WORLD_RID (0x00000000L)
388
389 #define SID_REVISION 1
390 #define SID_MAX_SUB_AUTHORITIES 15
391 #define SID_RECOMMENDED_SUB_AUTHORITIES 1
392
393 #define TOKEN_ASSIGN_PRIMARY (0x0001)
394 #define TOKEN_DUPLICATE (0x0002)
395 #define TOKEN_IMPERSONATE (0x0004)
396 #define TOKEN_QUERY (0x0008)
397 #define TOKEN_QUERY_SOURCE (0x0010)
398 #define TOKEN_ADJUST_PRIVILEGES (0x0020)
399 #define TOKEN_ADJUST_GROUPS (0x0040)
400 #define TOKEN_ADJUST_DEFAULT (0x0080)
401 #define TOKEN_ADJUST_SESSIONID (0x0100)
402
403 #define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
404 TOKEN_ASSIGN_PRIMARY |\
405 TOKEN_DUPLICATE |\
406 TOKEN_IMPERSONATE |\
407 TOKEN_QUERY |\
408 TOKEN_QUERY_SOURCE |\
409 TOKEN_ADJUST_PRIVILEGES |\
410 TOKEN_ADJUST_GROUPS |\
411 TOKEN_ADJUST_DEFAULT |\
412 TOKEN_ADJUST_SESSIONID)
413
414 #define TOKEN_READ (STANDARD_RIGHTS_READ |\
415 TOKEN_QUERY)
416
417 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\
418 TOKEN_ADJUST_PRIVILEGES |\
419 TOKEN_ADJUST_GROUPS |\
420 TOKEN_ADJUST_DEFAULT)
421
422 #define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
423
424 #define TOKEN_SOURCE_LENGTH 8
425 /* end winnt.h */
426
427 #define TOKEN_HAS_TRAVERSE_PRIVILEGE 0x01
428 #define TOKEN_HAS_BACKUP_PRIVILEGE 0x02
429 #define TOKEN_HAS_RESTORE_PRIVILEGE 0x04
430 #define TOKEN_HAS_ADMIN_GROUP 0x08
431 #define TOKEN_WRITE_RESTRICTED 0x08
432 #define TOKEN_IS_RESTRICTED 0x10
433 #define SE_BACKUP_PRIVILEGES_CHECKED 0x0100
434
435 #define VACB_MAPPING_GRANULARITY (0x40000)
436 #define VACB_OFFSET_SHIFT (18)
437
438 #define SE_OWNER_DEFAULTED 0x0001
439 #define SE_GROUP_DEFAULTED 0x0002
440 #define SE_DACL_PRESENT 0x0004
441 #define SE_DACL_DEFAULTED 0x0008
442 #define SE_SACL_PRESENT 0x0010
443 #define SE_SACL_DEFAULTED 0x0020
444 #define SE_DACL_UNTRUSTED 0x0040
445 #define SE_SERVER_SECURITY 0x0080
446 #define SE_DACL_AUTO_INHERIT_REQ 0x0100
447 #define SE_SACL_AUTO_INHERIT_REQ 0x0200
448 #define SE_DACL_AUTO_INHERITED 0x0400
449 #define SE_SACL_AUTO_INHERITED 0x0800
450 #define SE_DACL_PROTECTED 0x1000
451 #define SE_SACL_PROTECTED 0x2000
452 #define SE_RM_CONTROL_VALID 0x4000
453 #define SE_SELF_RELATIVE 0x8000
454
455 #ifndef _WINNT_H
456 #define _AUDIT_EVENT_TYPE_HACK 0
457 #endif
458 #if (_AUDIT_EVENT_TYPE_HACK == 1)
459
460 #else
461 typedef enum _AUDIT_EVENT_TYPE
462 {
463 AuditEventObjectAccess,
464 AuditEventDirectoryServiceAccess
465 } AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE;
466 #endif
467
468 #define AUDIT_ALLOW_NO_PRIVILEGE 0x1
469
470 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
471 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
472 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
473 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
474 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
475 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
476 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
477 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
478 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
479
480 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
481 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
482 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
483
484 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
485 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
486 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
487
488
489 #define FSCTL_MARK_AS_SYSTEM_HIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
490 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
491 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
492 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
493 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
494 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
495
496 #if (VER_PRODUCTBUILD >= 1381)
497
498 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
499 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
500 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS)
501 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
502 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
503 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
504 #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
505 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
506
507 #endif /* (VER_PRODUCTBUILD >= 1381) */
508
509 #if (VER_PRODUCTBUILD >= 2195)
510
511 #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
512 #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
513 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
514
515 #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
516 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA)
517 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
518 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA)
519 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA)
520 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
521 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA)
522 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_READ_DATA)
523 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA)
524 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_READ_DATA)
525 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA)
526 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
527 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA)
528 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
529 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
530 #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
531 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
532 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
533 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_ANY_ACCESS)
534 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_ANY_ACCESS)
535 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_READ_DATA)
536 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_READ_DATA)
537 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_READ_DATA)
538 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
539 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
540 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
541 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
542 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
543 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
544 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
545 #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
546 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
547 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
548 #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
549 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
550 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
551
552 #endif /* (VER_PRODUCTBUILD >= 2195) */
553
554 #define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
555
556 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
557 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
558 #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
559 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
560 #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
561 #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
562 #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
563 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
564
565 #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
566 #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
567 #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
568 #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
569 #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
570 #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
571 #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
572 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
573 #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
574 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
575 #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
576 #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
577 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
578 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
579
580 #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
581
582 typedef PVOID OPLOCK, *POPLOCK;
583
584 typedef struct _CACHE_MANAGER_CALLBACKS *PCACHE_MANAGER_CALLBACKS;
585 typedef struct _FILE_GET_QUOTA_INFORMATION *PFILE_GET_QUOTA_INFORMATION;
586 typedef struct _HANDLE_TABLE *PHANDLE_TABLE;
587 typedef struct _KPROCESS *PKPROCESS;
588 typedef struct _KQUEUE *PKQUEUE;
589 typedef struct _KTRAP_FRAME *PKTRAP_FRAME;
590 typedef struct _OBJECT_DIRECTORY *POBJECT_DIRECTORY;
591 typedef struct _SHARED_CACHE_MAP *PSHARED_CACHE_MAP;
592 typedef struct _VACB *PVACB;
593 typedef struct _VAD_HEADER *PVAD_HEADER;
594
595 typedef ULONG LBN;
596 typedef LBN *PLBN;
597
598 typedef ULONG VBN;
599 typedef VBN *PVBN;
600
601 typedef struct _NOTIFY_SYNC
602 {
603 ULONG Unknown0;
604 ULONG Unknown1;
605 ULONG Unknown2;
606 USHORT Unknown3;
607 USHORT Unknown4;
608 ULONG Unknown5;
609 ULONG Unknown6;
610 ULONG Unknown7;
611 ULONG Unknown8;
612 ULONG Unknown9;
613 ULONG Unknown10;
614 } NOTIFY_SYNC, * PNOTIFY_SYNC;
615
616 typedef enum _FAST_IO_POSSIBLE {
617 FastIoIsNotPossible,
618 FastIoIsPossible,
619 FastIoIsQuestionable
620 } FAST_IO_POSSIBLE;
621
622 typedef enum _FILE_STORAGE_TYPE {
623 StorageTypeDefault = 1,
624 StorageTypeDirectory,
625 StorageTypeFile,
626 StorageTypeJunctionPoint,
627 StorageTypeCatalog,
628 StorageTypeStructuredStorage,
629 StorageTypeEmbedding,
630 StorageTypeStream
631 } FILE_STORAGE_TYPE;
632
633 typedef enum _OBJECT_INFORMATION_CLASS
634 {
635 ObjectBasicInformation,
636 ObjectNameInformation,
637 ObjectTypeInformation,
638 ObjectTypesInformation,
639 ObjectHandleFlagInformation,
640 ObjectSessionInformation,
641 MaxObjectInfoClass
642 } OBJECT_INFORMATION_CLASS;
643
644 typedef struct _OBJECT_BASIC_INFORMATION
645 {
646 ULONG Attributes;
647 ACCESS_MASK GrantedAccess;
648 ULONG HandleCount;
649 ULONG PointerCount;
650 ULONG PagedPoolCharge;
651 ULONG NonPagedPoolCharge;
652 ULONG Reserved[ 3 ];
653 ULONG NameInfoSize;
654 ULONG TypeInfoSize;
655 ULONG SecurityDescriptorSize;
656 LARGE_INTEGER CreationTime;
657 } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
658
659 typedef struct _KAPC_STATE {
660 LIST_ENTRY ApcListHead[2];
661 PKPROCESS Process;
662 BOOLEAN KernelApcInProgress;
663 BOOLEAN KernelApcPending;
664 BOOLEAN UserApcPending;
665 } KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE;
666 #define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
667
668 typedef struct _BITMAP_RANGE {
669 LIST_ENTRY Links;
670 LONGLONG BasePage;
671 ULONG FirstDirtyPage;
672 ULONG LastDirtyPage;
673 ULONG DirtyPages;
674 PULONG Bitmap;
675 } BITMAP_RANGE, *PBITMAP_RANGE;
676
677 typedef struct _CACHE_UNINITIALIZE_EVENT {
678 struct _CACHE_UNINITIALIZE_EVENT *Next;
679 KEVENT Event;
680 } CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT;
681
682 typedef struct _CC_FILE_SIZES {
683 LARGE_INTEGER AllocationSize;
684 LARGE_INTEGER FileSize;
685 LARGE_INTEGER ValidDataLength;
686 } CC_FILE_SIZES, *PCC_FILE_SIZES;
687
688 typedef struct _COMPRESSED_DATA_INFO {
689 USHORT CompressionFormatAndEngine;
690 UCHAR CompressionUnitShift;
691 UCHAR ChunkShift;
692 UCHAR ClusterShift;
693 UCHAR Reserved;
694 USHORT NumberOfChunks;
695 ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
696 } COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
697
698 typedef struct _SID_IDENTIFIER_AUTHORITY {
699 BYTE Value[6];
700 } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
701 typedef PVOID PSID;
702 typedef struct _SID {
703 BYTE Revision;
704 BYTE SubAuthorityCount;
705 SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
706 DWORD SubAuthority[ANYSIZE_ARRAY];
707 } SID, *PISID;
708 typedef struct _SID_AND_ATTRIBUTES {
709 PSID Sid;
710 DWORD Attributes;
711 } SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;
712 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
713 typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
714 typedef struct _TOKEN_SOURCE {
715 CHAR SourceName[TOKEN_SOURCE_LENGTH];
716 LUID SourceIdentifier;
717 } TOKEN_SOURCE,*PTOKEN_SOURCE;
718 typedef struct _TOKEN_CONTROL {
719 LUID TokenId;
720 LUID AuthenticationId;
721 LUID ModifiedId;
722 TOKEN_SOURCE TokenSource;
723 } TOKEN_CONTROL,*PTOKEN_CONTROL;
724 typedef struct _TOKEN_DEFAULT_DACL {
725 PACL DefaultDacl;
726 } TOKEN_DEFAULT_DACL,*PTOKEN_DEFAULT_DACL;
727 typedef struct _TOKEN_GROUPS {
728 DWORD GroupCount;
729 SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
730 } TOKEN_GROUPS,*PTOKEN_GROUPS,*LPTOKEN_GROUPS;
731 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES {
732 ULONG SidCount;
733 ULONG SidLength;
734 PSID_AND_ATTRIBUTES Sids;
735 ULONG RestrictedSidCount;
736 ULONG RestrictedSidLength;
737 PSID_AND_ATTRIBUTES RestrictedSids;
738 ULONG PrivilegeCount;
739 ULONG PrivilegeLength;
740 PLUID_AND_ATTRIBUTES Privileges;
741 LUID AuthenticationId;
742 } TOKEN_GROUPS_AND_PRIVILEGES, *PTOKEN_GROUPS_AND_PRIVILEGES;
743 typedef struct _TOKEN_ORIGIN {
744 LUID OriginatingLogonSession;
745 } TOKEN_ORIGIN, *PTOKEN_ORIGIN;
746 typedef struct _TOKEN_OWNER {
747 PSID Owner;
748 } TOKEN_OWNER,*PTOKEN_OWNER;
749 typedef struct _TOKEN_PRIMARY_GROUP {
750 PSID PrimaryGroup;
751 } TOKEN_PRIMARY_GROUP,*PTOKEN_PRIMARY_GROUP;
752 typedef struct _TOKEN_PRIVILEGES {
753 DWORD PrivilegeCount;
754 LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
755 } TOKEN_PRIVILEGES,*PTOKEN_PRIVILEGES,*LPTOKEN_PRIVILEGES;
756 typedef enum tagTOKEN_TYPE {
757 TokenPrimary = 1,
758 TokenImpersonation
759 } TOKEN_TYPE,*PTOKEN_TYPE;
760 typedef struct _TOKEN_STATISTICS {
761 LUID TokenId;
762 LUID AuthenticationId;
763 LARGE_INTEGER ExpirationTime;
764 TOKEN_TYPE TokenType;
765 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
766 DWORD DynamicCharged;
767 DWORD DynamicAvailable;
768 DWORD GroupCount;
769 DWORD PrivilegeCount;
770 LUID ModifiedId;
771 } TOKEN_STATISTICS, *PTOKEN_STATISTICS;
772 typedef struct _TOKEN_USER {
773 SID_AND_ATTRIBUTES User;
774 } TOKEN_USER, *PTOKEN_USER;
775 typedef DWORD SECURITY_INFORMATION,*PSECURITY_INFORMATION;
776 typedef WORD SECURITY_DESCRIPTOR_CONTROL,*PSECURITY_DESCRIPTOR_CONTROL;
777 typedef struct _SECURITY_DESCRIPTOR {
778 BYTE Revision;
779 BYTE Sbz1;
780 SECURITY_DESCRIPTOR_CONTROL Control;
781 PSID Owner;
782 PSID Group;
783 PACL Sacl;
784 PACL Dacl;
785 } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
786 typedef struct _SECURITY_DESCRIPTOR_RELATIVE {
787 BYTE Revision;
788 BYTE Sbz1;
789 SECURITY_DESCRIPTOR_CONTROL Control;
790 DWORD_PTR Owner;
791 DWORD_PTR Group;
792 DWORD_PTR Sacl;
793 DWORD_PTR Dacl;
794 } SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE;
795 typedef enum _TOKEN_INFORMATION_CLASS {
796 TokenUser=1,TokenGroups,TokenPrivileges,TokenOwner,
797 TokenPrimaryGroup,TokenDefaultDacl,TokenSource,TokenType,
798 TokenImpersonationLevel,TokenStatistics,TokenRestrictedSids,
799 TokenSessionId,TokenGroupsAndPrivileges,TokenSessionReference,
800 TokenSandBoxInert,TokenAuditPolicy,TokenOrigin,
801 } TOKEN_INFORMATION_CLASS;
802
803 #define SYMLINK_FLAG_RELATIVE 1
804
805 typedef struct _REPARSE_DATA_BUFFER {
806 ULONG ReparseTag;
807 USHORT ReparseDataLength;
808 USHORT Reserved;
809 union {
810 struct {
811 USHORT SubstituteNameOffset;
812 USHORT SubstituteNameLength;
813 USHORT PrintNameOffset;
814 USHORT PrintNameLength;
815 ULONG Flags;
816 WCHAR PathBuffer[1];
817 } SymbolicLinkReparseBuffer;
818 struct {
819 USHORT SubstituteNameOffset;
820 USHORT SubstituteNameLength;
821 USHORT PrintNameOffset;
822 USHORT PrintNameLength;
823 WCHAR PathBuffer[1];
824 } MountPointReparseBuffer;
825 struct {
826 UCHAR DataBuffer[1];
827 } GenericReparseBuffer;
828 };
829 } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
830
831 #define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
832
833 typedef struct _FILE_ACCESS_INFORMATION {
834 ACCESS_MASK AccessFlags;
835 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
836
837 typedef struct _FILE_ALLOCATION_INFORMATION {
838 LARGE_INTEGER AllocationSize;
839 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
840
841 typedef struct _FILE_BOTH_DIR_INFORMATION {
842 ULONG NextEntryOffset;
843 ULONG FileIndex;
844 LARGE_INTEGER CreationTime;
845 LARGE_INTEGER LastAccessTime;
846 LARGE_INTEGER LastWriteTime;
847 LARGE_INTEGER ChangeTime;
848 LARGE_INTEGER EndOfFile;
849 LARGE_INTEGER AllocationSize;
850 ULONG FileAttributes;
851 ULONG FileNameLength;
852 ULONG EaSize;
853 CCHAR ShortNameLength;
854 WCHAR ShortName[12];
855 WCHAR FileName[1];
856 } FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
857
858 typedef struct _FILE_COMPLETION_INFORMATION {
859 HANDLE Port;
860 PVOID Key;
861 } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
862
863 typedef struct _FILE_COMPRESSION_INFORMATION {
864 LARGE_INTEGER CompressedFileSize;
865 USHORT CompressionFormat;
866 UCHAR CompressionUnitShift;
867 UCHAR ChunkShift;
868 UCHAR ClusterShift;
869 UCHAR Reserved[3];
870 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
871
872 typedef struct _FILE_COPY_ON_WRITE_INFORMATION {
873 BOOLEAN ReplaceIfExists;
874 HANDLE RootDirectory;
875 ULONG FileNameLength;
876 WCHAR FileName[1];
877 } FILE_COPY_ON_WRITE_INFORMATION, *PFILE_COPY_ON_WRITE_INFORMATION;
878
879 typedef struct _FILE_DIRECTORY_INFORMATION {
880 ULONG NextEntryOffset;
881 ULONG FileIndex;
882 LARGE_INTEGER CreationTime;
883 LARGE_INTEGER LastAccessTime;
884 LARGE_INTEGER LastWriteTime;
885 LARGE_INTEGER ChangeTime;
886 LARGE_INTEGER EndOfFile;
887 LARGE_INTEGER AllocationSize;
888 ULONG FileAttributes;
889 ULONG FileNameLength;
890 WCHAR FileName[1];
891 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
892
893 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
894 ULONG NextEntryOffset;
895 ULONG FileIndex;
896 LARGE_INTEGER CreationTime;
897 LARGE_INTEGER LastAccessTime;
898 LARGE_INTEGER LastWriteTime;
899 LARGE_INTEGER ChangeTime;
900 LARGE_INTEGER EndOfFile;
901 LARGE_INTEGER AllocationSize;
902 ULONG FileAttributes;
903 ULONG FileNameLength;
904 ULONG EaSize;
905 WCHAR FileName[0];
906 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION;
907
908 typedef struct _FILE_ID_FULL_DIR_INFORMATION {
909 ULONG NextEntryOffset;
910 ULONG FileIndex;
911 LARGE_INTEGER CreationTime;
912 LARGE_INTEGER LastAccessTime;
913 LARGE_INTEGER LastWriteTime;
914 LARGE_INTEGER ChangeTime;
915 LARGE_INTEGER EndOfFile;
916 LARGE_INTEGER AllocationSize;
917 ULONG FileAttributes;
918 ULONG FileNameLength;
919 ULONG EaSize;
920 LARGE_INTEGER FileId;
921 WCHAR FileName[1];
922 } FILE_ID_FULL_DIR_INFORMATION, *PFILE_ID_FULL_DIR_INFORMATION;
923
924 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
925 ULONG NextEntryOffset;
926 ULONG FileIndex;
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;
935 ULONG EaSize;
936 CHAR ShortNameLength;
937 WCHAR ShortName[12];
938 WCHAR FileName[0];
939 } FILE_BOTH_DIRECTORY_INFORMATION, *PFILE_BOTH_DIRECTORY_INFORMATION;
940
941 typedef struct _FILE_ID_BOTH_DIR_INFORMATION {
942 ULONG NextEntryOffset;
943 ULONG FileIndex;
944 LARGE_INTEGER CreationTime;
945 LARGE_INTEGER LastAccessTime;
946 LARGE_INTEGER LastWriteTime;
947 LARGE_INTEGER ChangeTime;
948 LARGE_INTEGER EndOfFile;
949 LARGE_INTEGER AllocationSize;
950 ULONG FileAttributes;
951 ULONG FileNameLength;
952 ULONG EaSize;
953 CCHAR ShortNameLength;
954 WCHAR ShortName[12];
955 LARGE_INTEGER FileId;
956 WCHAR FileName[1];
957 } FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION;
958
959 typedef struct _FILE_EA_INFORMATION {
960 ULONG EaSize;
961 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
962
963 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
964 ULONG FileSystemAttributes;
965 ULONG MaximumComponentNameLength;
966 ULONG FileSystemNameLength;
967 WCHAR FileSystemName[1];
968 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
969
970 typedef struct _FILE_FS_CONTROL_INFORMATION {
971 LARGE_INTEGER FreeSpaceStartFiltering;
972 LARGE_INTEGER FreeSpaceThreshold;
973 LARGE_INTEGER FreeSpaceStopFiltering;
974 LARGE_INTEGER DefaultQuotaThreshold;
975 LARGE_INTEGER DefaultQuotaLimit;
976 ULONG FileSystemControlFlags;
977 } FILE_FS_CONTROL_INFORMATION, *PFILE_FS_CONTROL_INFORMATION;
978
979 typedef struct _FILE_FS_FULL_SIZE_INFORMATION {
980 LARGE_INTEGER TotalAllocationUnits;
981 LARGE_INTEGER CallerAvailableAllocationUnits;
982 LARGE_INTEGER ActualAvailableAllocationUnits;
983 ULONG SectorsPerAllocationUnit;
984 ULONG BytesPerSector;
985 } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
986
987 typedef struct _FILE_FS_LABEL_INFORMATION {
988 ULONG VolumeLabelLength;
989 WCHAR VolumeLabel[1];
990 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
991
992 #if (VER_PRODUCTBUILD >= 2195)
993
994 typedef struct _FILE_FS_OBJECT_ID_INFORMATION {
995 UCHAR ObjectId[16];
996 UCHAR ExtendedInfo[48];
997 } FILE_FS_OBJECT_ID_INFORMATION, *PFILE_FS_OBJECT_ID_INFORMATION;
998
999 #endif /* (VER_PRODUCTBUILD >= 2195) */
1000
1001 typedef struct _FILE_FS_SIZE_INFORMATION {
1002 LARGE_INTEGER TotalAllocationUnits;
1003 LARGE_INTEGER AvailableAllocationUnits;
1004 ULONG SectorsPerAllocationUnit;
1005 ULONG BytesPerSector;
1006 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
1007
1008 typedef struct _FILE_FS_VOLUME_INFORMATION {
1009 LARGE_INTEGER VolumeCreationTime;
1010 ULONG VolumeSerialNumber;
1011 ULONG VolumeLabelLength;
1012 BOOLEAN SupportsObjects;
1013 WCHAR VolumeLabel[1];
1014 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
1015
1016 typedef struct _FILE_FS_OBJECTID_INFORMATION
1017 {
1018 UCHAR ObjectId[16];
1019 UCHAR ExtendedInfo[48];
1020 } FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
1021
1022 typedef struct _FILE_FS_DRIVER_PATH_INFORMATION
1023 {
1024 BOOLEAN DriverInPath;
1025 ULONG DriverNameLength;
1026 WCHAR DriverName[1];
1027 } FILE_FS_DRIVER_PATH_INFORMATION, *PFILE_FS_DRIVER_PATH_INFORMATION;
1028
1029 typedef struct _FILE_FULL_DIR_INFORMATION {
1030 ULONG NextEntryOffset;
1031 ULONG FileIndex;
1032 LARGE_INTEGER CreationTime;
1033 LARGE_INTEGER LastAccessTime;
1034 LARGE_INTEGER LastWriteTime;
1035 LARGE_INTEGER ChangeTime;
1036 LARGE_INTEGER EndOfFile;
1037 LARGE_INTEGER AllocationSize;
1038 ULONG FileAttributes;
1039 ULONG FileNameLength;
1040 ULONG EaSize;
1041 WCHAR FileName[1];
1042 } FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
1043
1044 typedef struct _FILE_GET_EA_INFORMATION {
1045 ULONG NextEntryOffset;
1046 UCHAR EaNameLength;
1047 CHAR EaName[1];
1048 } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
1049
1050 typedef struct _FILE_GET_QUOTA_INFORMATION {
1051 ULONG NextEntryOffset;
1052 ULONG SidLength;
1053 SID Sid;
1054 } FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION;
1055
1056 typedef struct _FILE_QUOTA_INFORMATION
1057 {
1058 ULONG NextEntryOffset;
1059 ULONG SidLength;
1060 LARGE_INTEGER ChangeTime;
1061 LARGE_INTEGER QuotaUsed;
1062 LARGE_INTEGER QuotaThreshold;
1063 LARGE_INTEGER QuotaLimit;
1064 SID Sid;
1065 } FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
1066
1067 typedef struct _FILE_INTERNAL_INFORMATION {
1068 LARGE_INTEGER IndexNumber;
1069 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
1070
1071 typedef struct _FILE_LINK_INFORMATION {
1072 BOOLEAN ReplaceIfExists;
1073 HANDLE RootDirectory;
1074 ULONG FileNameLength;
1075 WCHAR FileName[1];
1076 } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
1077
1078 typedef struct _FILE_LOCK_INFO
1079 {
1080 LARGE_INTEGER StartingByte;
1081 LARGE_INTEGER Length;
1082 BOOLEAN ExclusiveLock;
1083 ULONG Key;
1084 PFILE_OBJECT FileObject;
1085 PVOID ProcessId;
1086 LARGE_INTEGER EndingByte;
1087 } FILE_LOCK_INFO, *PFILE_LOCK_INFO;
1088
1089 typedef struct _FILE_REPARSE_POINT_INFORMATION
1090 {
1091 LONGLONG FileReference;
1092 ULONG Tag;
1093 } FILE_REPARSE_POINT_INFORMATION, *PFILE_REPARSE_POINT_INFORMATION;
1094
1095 typedef struct _FILE_MOVE_CLUSTER_INFORMATION
1096 {
1097 ULONG ClusterCount;
1098 HANDLE RootDirectory;
1099 ULONG FileNameLength;
1100 WCHAR FileName[1];
1101 } FILE_MOVE_CLUSTER_INFORMATION, *PFILE_MOVE_CLUSTER_INFORMATION;
1102
1103 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
1104 typedef struct _FILE_SHARED_LOCK_ENTRY {
1105 PVOID Unknown1;
1106 PVOID Unknown2;
1107 FILE_LOCK_INFO FileLock;
1108 } FILE_SHARED_LOCK_ENTRY, *PFILE_SHARED_LOCK_ENTRY;
1109
1110 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
1111 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY {
1112 LIST_ENTRY ListEntry;
1113 PVOID Unknown1;
1114 PVOID Unknown2;
1115 FILE_LOCK_INFO FileLock;
1116 } FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
1117
1118 typedef NTSTATUS (NTAPI *PCOMPLETE_LOCK_IRP_ROUTINE) (
1119 IN PVOID Context,
1120 IN PIRP Irp
1121 );
1122
1123 typedef VOID (NTAPI *PUNLOCK_ROUTINE) (
1124 IN PVOID Context,
1125 IN PFILE_LOCK_INFO FileLockInfo
1126 );
1127
1128 typedef struct _FILE_LOCK {
1129 PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
1130 PUNLOCK_ROUTINE UnlockRoutine;
1131 BOOLEAN FastIoIsQuestionable;
1132 BOOLEAN Pad[3];
1133 PVOID LockInformation;
1134 FILE_LOCK_INFO LastReturnedLockInfo;
1135 PVOID LastReturnedLock;
1136 } FILE_LOCK, *PFILE_LOCK;
1137
1138 typedef struct _FILE_MAILSLOT_PEEK_BUFFER {
1139 ULONG ReadDataAvailable;
1140 ULONG NumberOfMessages;
1141 ULONG MessageLength;
1142 } FILE_MAILSLOT_PEEK_BUFFER, *PFILE_MAILSLOT_PEEK_BUFFER;
1143
1144 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
1145 ULONG MaximumMessageSize;
1146 ULONG MailslotQuota;
1147 ULONG NextMessageSize;
1148 ULONG MessagesAvailable;
1149 LARGE_INTEGER ReadTimeout;
1150 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
1151
1152 typedef struct _FILE_MAILSLOT_SET_INFORMATION {
1153 PLARGE_INTEGER ReadTimeout;
1154 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
1155
1156 typedef struct _FILE_MODE_INFORMATION {
1157 ULONG Mode;
1158 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
1159
1160 typedef struct _FILE_ALL_INFORMATION {
1161 FILE_BASIC_INFORMATION BasicInformation;
1162 FILE_STANDARD_INFORMATION StandardInformation;
1163 FILE_INTERNAL_INFORMATION InternalInformation;
1164 FILE_EA_INFORMATION EaInformation;
1165 FILE_ACCESS_INFORMATION AccessInformation;
1166 FILE_POSITION_INFORMATION PositionInformation;
1167 FILE_MODE_INFORMATION ModeInformation;
1168 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
1169 FILE_NAME_INFORMATION NameInformation;
1170 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
1171
1172 typedef struct _FILE_NAMES_INFORMATION {
1173 ULONG NextEntryOffset;
1174 ULONG FileIndex;
1175 ULONG FileNameLength;
1176 WCHAR FileName[1];
1177 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
1178
1179 typedef struct _FILE_OBJECTID_INFORMATION {
1180 LONGLONG FileReference;
1181 UCHAR ObjectId[16];
1182 _ANONYMOUS_UNION union {
1183 struct {
1184 UCHAR BirthVolumeId[16];
1185 UCHAR BirthObjectId[16];
1186 UCHAR DomainId[16];
1187 } ;
1188 UCHAR ExtendedInfo[48];
1189 } DUMMYUNIONNAME;
1190 } FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION;
1191
1192 typedef struct _FILE_OLE_CLASSID_INFORMATION {
1193 GUID ClassId;
1194 } FILE_OLE_CLASSID_INFORMATION, *PFILE_OLE_CLASSID_INFORMATION;
1195
1196 typedef struct _FILE_OLE_ALL_INFORMATION {
1197 FILE_BASIC_INFORMATION BasicInformation;
1198 FILE_STANDARD_INFORMATION StandardInformation;
1199 FILE_INTERNAL_INFORMATION InternalInformation;
1200 FILE_EA_INFORMATION EaInformation;
1201 FILE_ACCESS_INFORMATION AccessInformation;
1202 FILE_POSITION_INFORMATION PositionInformation;
1203 FILE_MODE_INFORMATION ModeInformation;
1204 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
1205 USN LastChangeUsn;
1206 USN ReplicationUsn;
1207 LARGE_INTEGER SecurityChangeTime;
1208 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
1209 FILE_OBJECTID_INFORMATION ObjectIdInformation;
1210 FILE_STORAGE_TYPE StorageType;
1211 ULONG OleStateBits;
1212 ULONG OleId;
1213 ULONG NumberOfStreamReferences;
1214 ULONG StreamIndex;
1215 ULONG SecurityId;
1216 BOOLEAN ContentIndexDisable;
1217 BOOLEAN InheritContentIndexDisable;
1218 FILE_NAME_INFORMATION NameInformation;
1219 } FILE_OLE_ALL_INFORMATION, *PFILE_OLE_ALL_INFORMATION;
1220
1221 typedef struct _FILE_OLE_DIR_INFORMATION {
1222 ULONG NextEntryOffset;
1223 ULONG FileIndex;
1224 LARGE_INTEGER CreationTime;
1225 LARGE_INTEGER LastAccessTime;
1226 LARGE_INTEGER LastWriteTime;
1227 LARGE_INTEGER ChangeTime;
1228 LARGE_INTEGER EndOfFile;
1229 LARGE_INTEGER AllocationSize;
1230 ULONG FileAttributes;
1231 ULONG FileNameLength;
1232 FILE_STORAGE_TYPE StorageType;
1233 GUID OleClassId;
1234 ULONG OleStateBits;
1235 BOOLEAN ContentIndexDisable;
1236 BOOLEAN InheritContentIndexDisable;
1237 WCHAR FileName[1];
1238 } FILE_OLE_DIR_INFORMATION, *PFILE_OLE_DIR_INFORMATION;
1239
1240 typedef struct _FILE_OLE_INFORMATION {
1241 LARGE_INTEGER SecurityChangeTime;
1242 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
1243 FILE_OBJECTID_INFORMATION ObjectIdInformation;
1244 FILE_STORAGE_TYPE StorageType;
1245 ULONG OleStateBits;
1246 BOOLEAN ContentIndexDisable;
1247 BOOLEAN InheritContentIndexDisable;
1248 } FILE_OLE_INFORMATION, *PFILE_OLE_INFORMATION;
1249
1250 typedef struct _FILE_OLE_STATE_BITS_INFORMATION {
1251 ULONG StateBits;
1252 ULONG StateBitsMask;
1253 } FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION;
1254
1255 typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER {
1256 HANDLE EventHandle;
1257 ULONG KeyValue;
1258 } FILE_PIPE_ASSIGN_EVENT_BUFFER, *PFILE_PIPE_ASSIGN_EVENT_BUFFER;
1259
1260 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER {
1261 PVOID ClientSession;
1262 PVOID ClientProcess;
1263 } FILE_PIPE_CLIENT_PROCESS_BUFFER, *PFILE_PIPE_CLIENT_PROCESS_BUFFER;
1264
1265 typedef struct _FILE_PIPE_EVENT_BUFFER {
1266 ULONG NamedPipeState;
1267 ULONG EntryType;
1268 ULONG ByteCount;
1269 ULONG KeyValue;
1270 ULONG NumberRequests;
1271 } FILE_PIPE_EVENT_BUFFER, *PFILE_PIPE_EVENT_BUFFER;
1272
1273 typedef struct _FILE_PIPE_PEEK_BUFFER
1274 {
1275 ULONG NamedPipeState;
1276 ULONG ReadDataAvailable;
1277 ULONG NumberOfMessages;
1278 ULONG MessageLength;
1279 CHAR Data[1];
1280 } FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
1281
1282 typedef struct _FILE_PIPE_INFORMATION {
1283 ULONG ReadMode;
1284 ULONG CompletionMode;
1285 } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
1286
1287 typedef struct _FILE_PIPE_LOCAL_INFORMATION {
1288 ULONG NamedPipeType;
1289 ULONG NamedPipeConfiguration;
1290 ULONG MaximumInstances;
1291 ULONG CurrentInstances;
1292 ULONG InboundQuota;
1293 ULONG ReadDataAvailable;
1294 ULONG OutboundQuota;
1295 ULONG WriteQuotaAvailable;
1296 ULONG NamedPipeState;
1297 ULONG NamedPipeEnd;
1298 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
1299
1300 typedef struct _FILE_PIPE_REMOTE_INFORMATION {
1301 LARGE_INTEGER CollectDataTime;
1302 ULONG MaximumCollectionCount;
1303 } FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
1304
1305 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER {
1306 LARGE_INTEGER Timeout;
1307 ULONG NameLength;
1308 BOOLEAN TimeoutSpecified;
1309 WCHAR Name[1];
1310 } FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
1311
1312 typedef struct _FILE_RENAME_INFORMATION {
1313 BOOLEAN ReplaceIfExists;
1314 HANDLE RootDirectory;
1315 ULONG FileNameLength;
1316 WCHAR FileName[1];
1317 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
1318
1319 typedef struct _FILE_STREAM_INFORMATION {
1320 ULONG NextEntryOffset;
1321 ULONG StreamNameLength;
1322 LARGE_INTEGER StreamSize;
1323 LARGE_INTEGER StreamAllocationSize;
1324 WCHAR StreamName[1];
1325 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
1326
1327 typedef struct _FILE_TRACKING_INFORMATION {
1328 HANDLE DestinationFile;
1329 ULONG ObjectInformationLength;
1330 CHAR ObjectInformation[1];
1331 } FILE_TRACKING_INFORMATION, *PFILE_TRACKING_INFORMATION;
1332
1333 #if (VER_PRODUCTBUILD >= 2195)
1334 typedef struct _FILE_ZERO_DATA_INFORMATION {
1335 LARGE_INTEGER FileOffset;
1336 LARGE_INTEGER BeyondFinalZero;
1337 } FILE_ZERO_DATA_INFORMATION, *PFILE_ZERO_DATA_INFORMATION;
1338
1339 typedef struct FILE_ALLOCATED_RANGE_BUFFER {
1340 LARGE_INTEGER FileOffset;
1341 LARGE_INTEGER Length;
1342 } FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER;
1343 #endif /* (VER_PRODUCTBUILD >= 2195) */
1344
1345 #define FSRTL_FCB_HEADER_V0 (0x00)
1346 #define FSRTL_FCB_HEADER_V1 (0x01)
1347
1348
1349 typedef struct _FSRTL_COMMON_FCB_HEADER {
1350 CSHORT NodeTypeCode;
1351 CSHORT NodeByteSize;
1352 UCHAR Flags;
1353 UCHAR IsFastIoPossible;
1354 #if (VER_PRODUCTBUILD >= 1381)
1355 UCHAR Flags2;
1356 UCHAR Reserved;
1357 #endif /* (VER_PRODUCTBUILD >= 1381) */
1358 PERESOURCE Resource;
1359 PERESOURCE PagingIoResource;
1360 LARGE_INTEGER AllocationSize;
1361 LARGE_INTEGER FileSize;
1362 LARGE_INTEGER ValidDataLength;
1363 } FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER;
1364
1365 typedef enum _FSRTL_COMPARISON_RESULT
1366 {
1367 LessThan = -1,
1368 EqualTo = 0,
1369 GreaterThan = 1
1370 } FSRTL_COMPARISON_RESULT;
1371
1372 #if (VER_PRODUCTBUILD >= 2600)
1373
1374 typedef struct _FSRTL_ADVANCED_FCB_HEADER {
1375 CSHORT NodeTypeCode;
1376 CSHORT NodeByteSize;
1377 UCHAR Flags;
1378 UCHAR IsFastIoPossible;
1379 UCHAR Flags2;
1380 UCHAR Reserved: 4;
1381 UCHAR Version: 4;
1382 PERESOURCE Resource;
1383 PERESOURCE PagingIoResource;
1384 LARGE_INTEGER AllocationSize;
1385 LARGE_INTEGER FileSize;
1386 LARGE_INTEGER ValidDataLength;
1387 PFAST_MUTEX FastMutex;
1388 LIST_ENTRY FilterContexts;
1389 EX_PUSH_LOCK PushLock;
1390 PVOID *FileContextSupportPointer;
1391 } FSRTL_ADVANCED_FCB_HEADER, *PFSRTL_ADVANCED_FCB_HEADER;
1392
1393 typedef struct _FSRTL_PER_STREAM_CONTEXT {
1394 LIST_ENTRY Links;
1395 PVOID OwnerId;
1396 PVOID InstanceId;
1397 PFREE_FUNCTION FreeCallback;
1398 } FSRTL_PER_STREAM_CONTEXT, *PFSRTL_PER_STREAM_CONTEXT;
1399
1400 typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT
1401 {
1402 LIST_ENTRY Links;
1403 PVOID OwnerId;
1404 PVOID InstanceId;
1405 } FSRTL_PER_FILEOBJECT_CONTEXT, *PFSRTL_PER_FILEOBJECT_CONTEXT;
1406
1407 #endif /* (VER_PRODUCTBUILD >= 2600) */
1408
1409 typedef struct _BASE_MCB
1410 {
1411 ULONG MaximumPairCount;
1412 ULONG PairCount;
1413 USHORT PoolType;
1414 USHORT Flags;
1415 PVOID Mapping;
1416 } BASE_MCB, *PBASE_MCB;
1417
1418 typedef struct _LARGE_MCB
1419 {
1420 PKGUARDED_MUTEX GuardedMutex;
1421 BASE_MCB BaseMcb;
1422 } LARGE_MCB, *PLARGE_MCB;
1423
1424 typedef struct _MCB
1425 {
1426 LARGE_MCB DummyFieldThatSizesThisStructureCorrectly;
1427 } MCB, *PMCB;
1428
1429 typedef struct _GENERATE_NAME_CONTEXT {
1430 USHORT Checksum;
1431 BOOLEAN CheckSumInserted;
1432 UCHAR NameLength;
1433 WCHAR NameBuffer[8];
1434 ULONG ExtensionLength;
1435 WCHAR ExtensionBuffer[4];
1436 ULONG LastIndexValue;
1437 } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
1438
1439 typedef struct _MAPPING_PAIR {
1440 ULONGLONG Vcn;
1441 ULONGLONG Lcn;
1442 } MAPPING_PAIR, *PMAPPING_PAIR;
1443
1444 typedef struct _GET_RETRIEVAL_DESCRIPTOR {
1445 ULONG NumberOfPairs;
1446 ULONGLONG StartVcn;
1447 MAPPING_PAIR Pair[1];
1448 } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
1449
1450 typedef struct _KQUEUE {
1451 DISPATCHER_HEADER Header;
1452 LIST_ENTRY EntryListHead;
1453 ULONG CurrentCount;
1454 ULONG MaximumCount;
1455 LIST_ENTRY ThreadListHead;
1456 } KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
1457
1458 #define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
1459
1460 typedef struct _MBCB {
1461 CSHORT NodeTypeCode;
1462 CSHORT NodeIsInZone;
1463 ULONG PagesToWrite;
1464 ULONG DirtyPages;
1465 ULONG Reserved;
1466 LIST_ENTRY BitmapRanges;
1467 LONGLONG ResumeWritePage;
1468 BITMAP_RANGE BitmapRange1;
1469 BITMAP_RANGE BitmapRange2;
1470 BITMAP_RANGE BitmapRange3;
1471 } MBCB, *PMBCB;
1472
1473 typedef struct _MOVEFILE_DESCRIPTOR {
1474 HANDLE FileHandle;
1475 ULONG Reserved;
1476 LARGE_INTEGER StartVcn;
1477 LARGE_INTEGER TargetLcn;
1478 ULONG NumVcns;
1479 ULONG Reserved1;
1480 } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
1481
1482 typedef struct _OBJECT_BASIC_INFO {
1483 ULONG Attributes;
1484 ACCESS_MASK GrantedAccess;
1485 ULONG HandleCount;
1486 ULONG ReferenceCount;
1487 ULONG PagedPoolUsage;
1488 ULONG NonPagedPoolUsage;
1489 ULONG Reserved[3];
1490 ULONG NameInformationLength;
1491 ULONG TypeInformationLength;
1492 ULONG SecurityDescriptorLength;
1493 LARGE_INTEGER CreateTime;
1494 } OBJECT_BASIC_INFO, *POBJECT_BASIC_INFO;
1495
1496 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO {
1497 BOOLEAN Inherit;
1498 BOOLEAN ProtectFromClose;
1499 } OBJECT_HANDLE_ATTRIBUTE_INFO, *POBJECT_HANDLE_ATTRIBUTE_INFO;
1500
1501 typedef struct _OBJECT_NAME_INFO {
1502 UNICODE_STRING ObjectName;
1503 WCHAR ObjectNameBuffer[1];
1504 } OBJECT_NAME_INFO, *POBJECT_NAME_INFO;
1505
1506 typedef struct _OBJECT_PROTECTION_INFO {
1507 BOOLEAN Inherit;
1508 BOOLEAN ProtectHandle;
1509 } OBJECT_PROTECTION_INFO, *POBJECT_PROTECTION_INFO;
1510
1511 typedef struct _OBJECT_TYPE_INFO {
1512 UNICODE_STRING ObjectTypeName;
1513 UCHAR Unknown[0x58];
1514 WCHAR ObjectTypeNameBuffer[1];
1515 } OBJECT_TYPE_INFO, *POBJECT_TYPE_INFO;
1516
1517 typedef struct _OBJECT_ALL_TYPES_INFO {
1518 ULONG NumberOfObjectTypes;
1519 OBJECT_TYPE_INFO ObjectsTypeInfo[1];
1520 } OBJECT_ALL_TYPES_INFO, *POBJECT_ALL_TYPES_INFO;
1521
1522
1523 typedef struct _PATHNAME_BUFFER {
1524 ULONG PathNameLength;
1525 WCHAR Name[1];
1526 } PATHNAME_BUFFER, *PPATHNAME_BUFFER;
1527
1528 typedef enum _RTL_GENERIC_COMPARE_RESULTS
1529 {
1530 GenericLessThan,
1531 GenericGreaterThan,
1532 GenericEqual
1533 } RTL_GENERIC_COMPARE_RESULTS;
1534
1535 typedef enum _TABLE_SEARCH_RESULT
1536 {
1537 TableEmptyTree,
1538 TableFoundNode,
1539 TableInsertAsLeft,
1540 TableInsertAsRight
1541 } TABLE_SEARCH_RESULT;
1542
1543 typedef NTSTATUS
1544 (NTAPI *PRTL_AVL_MATCH_FUNCTION)(
1545 struct _RTL_AVL_TABLE *Table,
1546 PVOID UserData,
1547 PVOID MatchData
1548 );
1549
1550 typedef RTL_GENERIC_COMPARE_RESULTS
1551 (NTAPI *PRTL_AVL_COMPARE_ROUTINE) (
1552 struct _RTL_AVL_TABLE *Table,
1553 PVOID FirstStruct,
1554 PVOID SecondStruct
1555 );
1556
1557 typedef RTL_GENERIC_COMPARE_RESULTS
1558 (NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) (
1559 struct _RTL_GENERIC_TABLE *Table,
1560 PVOID FirstStruct,
1561 PVOID SecondStruct
1562 );
1563
1564 typedef PVOID
1565 (NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
1566 struct _RTL_GENERIC_TABLE *Table,
1567 CLONG ByteSize
1568 );
1569
1570 typedef VOID
1571 (NTAPI *PRTL_GENERIC_FREE_ROUTINE) (
1572 struct _RTL_GENERIC_TABLE *Table,
1573 PVOID Buffer
1574 );
1575
1576 typedef PVOID
1577 (NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) (
1578 struct _RTL_AVL_TABLE *Table,
1579 CLONG ByteSize
1580 );
1581
1582 typedef VOID
1583 (NTAPI *PRTL_AVL_FREE_ROUTINE) (
1584 struct _RTL_AVL_TABLE *Table,
1585 PVOID Buffer
1586 );
1587
1588 typedef struct _PUBLIC_BCB {
1589 CSHORT NodeTypeCode;
1590 CSHORT NodeByteSize;
1591 ULONG MappedLength;
1592 LARGE_INTEGER MappedFileOffset;
1593 } PUBLIC_BCB, *PPUBLIC_BCB;
1594
1595 typedef struct _QUERY_PATH_REQUEST {
1596 ULONG PathNameLength;
1597 PIO_SECURITY_CONTEXT SecurityContext;
1598 WCHAR FilePathName[1];
1599 } QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST;
1600
1601 typedef struct _QUERY_PATH_RESPONSE {
1602 ULONG LengthAccepted;
1603 } QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE;
1604
1605 typedef struct _RETRIEVAL_POINTERS_BUFFER {
1606 ULONG ExtentCount;
1607 LARGE_INTEGER StartingVcn;
1608 struct {
1609 LARGE_INTEGER NextVcn;
1610 LARGE_INTEGER Lcn;
1611 } Extents[1];
1612 } RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
1613
1614 typedef struct _RTL_SPLAY_LINKS {
1615 struct _RTL_SPLAY_LINKS *Parent;
1616 struct _RTL_SPLAY_LINKS *LeftChild;
1617 struct _RTL_SPLAY_LINKS *RightChild;
1618 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
1619
1620 typedef struct _RTL_BALANCED_LINKS
1621 {
1622 struct _RTL_BALANCED_LINKS *Parent;
1623 struct _RTL_BALANCED_LINKS *LeftChild;
1624 struct _RTL_BALANCED_LINKS *RightChild;
1625 CHAR Balance;
1626 UCHAR Reserved[3];
1627 } RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
1628
1629 typedef struct _RTL_GENERIC_TABLE
1630 {
1631 PRTL_SPLAY_LINKS TableRoot;
1632 LIST_ENTRY InsertOrderList;
1633 PLIST_ENTRY OrderedPointer;
1634 ULONG WhichOrderedElement;
1635 ULONG NumberGenericTableElements;
1636 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
1637 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
1638 PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
1639 PVOID TableContext;
1640 } RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
1641
1642 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
1643 {
1644 CSHORT NodeTypeCode;
1645 CSHORT NameLength;
1646 struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
1647 struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
1648 RTL_SPLAY_LINKS Links;
1649 PUNICODE_STRING Prefix;
1650 } UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
1651
1652 typedef struct _UNICODE_PREFIX_TABLE
1653 {
1654 CSHORT NodeTypeCode;
1655 CSHORT NameLength;
1656 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
1657 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
1658 } UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
1659
1660 NTSYSAPI
1661 VOID
1662 NTAPI
1663 RtlInitializeUnicodePrefix (
1664 IN PUNICODE_PREFIX_TABLE PrefixTable
1665 );
1666
1667 NTSYSAPI
1668 BOOLEAN
1669 NTAPI
1670 RtlInsertUnicodePrefix (
1671 IN PUNICODE_PREFIX_TABLE PrefixTable,
1672 IN PUNICODE_STRING Prefix,
1673 IN PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
1674 );
1675
1676 NTSYSAPI
1677 VOID
1678 NTAPI
1679 RtlRemoveUnicodePrefix (
1680 IN PUNICODE_PREFIX_TABLE PrefixTable,
1681 IN PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
1682 );
1683
1684 NTSYSAPI
1685 PUNICODE_PREFIX_TABLE_ENTRY
1686 NTAPI
1687 RtlFindUnicodePrefix (
1688 IN PUNICODE_PREFIX_TABLE PrefixTable,
1689 IN PUNICODE_STRING FullName,
1690 IN ULONG CaseInsensitiveIndex
1691 );
1692
1693 NTSYSAPI
1694 PUNICODE_PREFIX_TABLE_ENTRY
1695 NTAPI
1696 RtlNextUnicodePrefix (
1697 IN PUNICODE_PREFIX_TABLE PrefixTable,
1698 IN BOOLEAN Restart
1699 );
1700
1701 #undef PRTL_GENERIC_COMPARE_ROUTINE
1702 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
1703 #undef PRTL_GENERIC_FREE_ROUTINE
1704 #undef RTL_GENERIC_TABLE
1705 #undef PRTL_GENERIC_TABLE
1706
1707 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
1708 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
1709 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
1710 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
1711 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
1712
1713 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
1714 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
1715 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
1716 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
1717 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
1718 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
1719 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
1720 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
1721 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
1722 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
1723 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
1724
1725 typedef struct _RTL_AVL_TABLE
1726 {
1727 RTL_BALANCED_LINKS BalancedRoot;
1728 PVOID OrderedPointer;
1729 ULONG WhichOrderedElement;
1730 ULONG NumberGenericTableElements;
1731 ULONG DepthOfTree;
1732 PRTL_BALANCED_LINKS RestartKey;
1733 ULONG DeleteCount;
1734 PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
1735 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
1736 PRTL_AVL_FREE_ROUTINE FreeRoutine;
1737 PVOID TableContext;
1738 } RTL_AVL_TABLE, *PRTL_AVL_TABLE;
1739
1740 NTSYSAPI
1741 VOID
1742 NTAPI
1743 RtlInitializeGenericTableAvl(
1744 PRTL_AVL_TABLE Table,
1745 PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
1746 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
1747 PRTL_AVL_FREE_ROUTINE FreeRoutine,
1748 PVOID TableContext
1749 );
1750
1751 NTSYSAPI
1752 PVOID
1753 NTAPI
1754 RtlInsertElementGenericTableAvl (
1755 PRTL_AVL_TABLE Table,
1756 PVOID Buffer,
1757 CLONG BufferSize,
1758 PBOOLEAN NewElement OPTIONAL
1759 );
1760
1761 NTSYSAPI
1762 BOOLEAN
1763 NTAPI
1764 RtlDeleteElementGenericTableAvl (
1765 PRTL_AVL_TABLE Table,
1766 PVOID Buffer
1767 );
1768
1769 NTSYSAPI
1770 PVOID
1771 NTAPI
1772 RtlLookupElementGenericTableAvl (
1773 PRTL_AVL_TABLE Table,
1774 PVOID Buffer
1775 );
1776
1777 NTSYSAPI
1778 PVOID
1779 NTAPI
1780 RtlEnumerateGenericTableWithoutSplayingAvl (
1781 PRTL_AVL_TABLE Table,
1782 PVOID *RestartKey
1783 );
1784
1785 #if defined(USE_LPC6432)
1786 #define LPC_CLIENT_ID CLIENT_ID64
1787 #define LPC_SIZE_T ULONGLONG
1788 #define LPC_PVOID ULONGLONG
1789 #define LPC_HANDLE ULONGLONG
1790 #else
1791 #define LPC_CLIENT_ID CLIENT_ID
1792 #define LPC_SIZE_T SIZE_T
1793 #define LPC_PVOID PVOID
1794 #define LPC_HANDLE HANDLE
1795 #endif
1796
1797 typedef struct _PORT_MESSAGE
1798 {
1799 union
1800 {
1801 struct
1802 {
1803 CSHORT DataLength;
1804 CSHORT TotalLength;
1805 } s1;
1806 ULONG Length;
1807 } u1;
1808 union
1809 {
1810 struct
1811 {
1812 CSHORT Type;
1813 CSHORT DataInfoOffset;
1814 } s2;
1815 ULONG ZeroInit;
1816 } u2;
1817 union
1818 {
1819 LPC_CLIENT_ID ClientId;
1820 double DoNotUseThisField;
1821 };
1822 ULONG MessageId;
1823 union
1824 {
1825 LPC_SIZE_T ClientViewSize;
1826 ULONG CallbackId;
1827 };
1828 } PORT_MESSAGE, *PPORT_MESSAGE;
1829
1830 #define LPC_KERNELMODE_MESSAGE (CSHORT)((USHORT)0x8000)
1831
1832 typedef struct _PORT_VIEW
1833 {
1834 ULONG Length;
1835 LPC_HANDLE SectionHandle;
1836 ULONG SectionOffset;
1837 LPC_SIZE_T ViewSize;
1838 LPC_PVOID ViewBase;
1839 LPC_PVOID ViewRemoteBase;
1840 } PORT_VIEW, *PPORT_VIEW;
1841
1842 typedef struct _REMOTE_PORT_VIEW
1843 {
1844 ULONG Length;
1845 LPC_SIZE_T ViewSize;
1846 LPC_PVOID ViewBase;
1847 } REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW;
1848
1849 typedef struct _SE_EXPORTS {
1850
1851 LUID SeCreateTokenPrivilege;
1852 LUID SeAssignPrimaryTokenPrivilege;
1853 LUID SeLockMemoryPrivilege;
1854 LUID SeIncreaseQuotaPrivilege;
1855 LUID SeUnsolicitedInputPrivilege;
1856 LUID SeTcbPrivilege;
1857 LUID SeSecurityPrivilege;
1858 LUID SeTakeOwnershipPrivilege;
1859 LUID SeLoadDriverPrivilege;
1860 LUID SeCreatePagefilePrivilege;
1861 LUID SeIncreaseBasePriorityPrivilege;
1862 LUID SeSystemProfilePrivilege;
1863 LUID SeSystemtimePrivilege;
1864 LUID SeProfileSingleProcessPrivilege;
1865 LUID SeCreatePermanentPrivilege;
1866 LUID SeBackupPrivilege;
1867 LUID SeRestorePrivilege;
1868 LUID SeShutdownPrivilege;
1869 LUID SeDebugPrivilege;
1870 LUID SeAuditPrivilege;
1871 LUID SeSystemEnvironmentPrivilege;
1872 LUID SeChangeNotifyPrivilege;
1873 LUID SeRemoteShutdownPrivilege;
1874
1875 PSID SeNullSid;
1876 PSID SeWorldSid;
1877 PSID SeLocalSid;
1878 PSID SeCreatorOwnerSid;
1879 PSID SeCreatorGroupSid;
1880
1881 PSID SeNtAuthoritySid;
1882 PSID SeDialupSid;
1883 PSID SeNetworkSid;
1884 PSID SeBatchSid;
1885 PSID SeInteractiveSid;
1886 PSID SeLocalSystemSid;
1887 PSID SeAliasAdminsSid;
1888 PSID SeAliasUsersSid;
1889 PSID SeAliasGuestsSid;
1890 PSID SeAliasPowerUsersSid;
1891 PSID SeAliasAccountOpsSid;
1892 PSID SeAliasSystemOpsSid;
1893 PSID SeAliasPrintOpsSid;
1894 PSID SeAliasBackupOpsSid;
1895
1896 PSID SeAuthenticatedUsersSid;
1897
1898 PSID SeRestrictedSid;
1899 PSID SeAnonymousLogonSid;
1900
1901 LUID SeUndockPrivilege;
1902 LUID SeSyncAgentPrivilege;
1903 LUID SeEnableDelegationPrivilege;
1904
1905 } SE_EXPORTS, *PSE_EXPORTS;
1906
1907 typedef struct
1908 {
1909 LARGE_INTEGER StartingLcn;
1910 } STARTING_LCN_INPUT_BUFFER, *PSTARTING_LCN_INPUT_BUFFER;
1911
1912 typedef struct _STARTING_VCN_INPUT_BUFFER {
1913 LARGE_INTEGER StartingVcn;
1914 } STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER;
1915
1916 typedef struct _SECURITY_CLIENT_CONTEXT {
1917 SECURITY_QUALITY_OF_SERVICE SecurityQos;
1918 PACCESS_TOKEN ClientToken;
1919 BOOLEAN DirectlyAccessClientToken;
1920 BOOLEAN DirectAccessEffectiveOnly;
1921 BOOLEAN ServerIsRemote;
1922 TOKEN_CONTROL ClientTokenControl;
1923 } SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT;
1924
1925 typedef struct _ACE_HEADER
1926 {
1927 UCHAR AceType;
1928 UCHAR AceFlags;
1929 USHORT AceSize;
1930 } ACE_HEADER, *PACE_HEADER;
1931
1932 typedef struct _ACCESS_ALLOWED_ACE
1933 {
1934 ACE_HEADER Header;
1935 ACCESS_MASK Mask;
1936 ULONG SidStart;
1937 } ACCESS_ALLOWED_ACE, *PACCESS_ALLOWED_ACE;
1938
1939 typedef struct _ACCESS_DENIED_ACE
1940 {
1941 ACE_HEADER Header;
1942 ACCESS_MASK Mask;
1943 ULONG SidStart;
1944 } ACCESS_DENIED_ACE, *PACCESS_DENIED_ACE;
1945
1946 typedef struct _SYSTEM_AUDIT_ACE
1947 {
1948 ACE_HEADER Header;
1949 ACCESS_MASK Mask;
1950 ULONG SidStart;
1951 } SYSTEM_AUDIT_ACE, *PSYSTEM_AUDIT_ACE;
1952
1953 typedef struct _SYSTEM_ALARM_ACE
1954 {
1955 ACE_HEADER Header;
1956 ACCESS_MASK Mask;
1957 ULONG SidStart;
1958 } SYSTEM_ALARM_ACE, *PSYSTEM_ALARM_ACE;
1959
1960 typedef struct _SYSTEM_MANDATORY_LABEL_ACE
1961 {
1962 ACE_HEADER Header;
1963 ACCESS_MASK Mask;
1964 ULONG SidStart;
1965 } SYSTEM_MANDATORY_LABEL_ACE, *PSYSTEM_MANDATORY_LABEL_ACE;
1966
1967 typedef struct _TUNNEL {
1968 FAST_MUTEX Mutex;
1969 PRTL_SPLAY_LINKS Cache;
1970 LIST_ENTRY TimerQueue;
1971 USHORT NumEntries;
1972 } TUNNEL, *PTUNNEL;
1973
1974 typedef struct _VAD_HEADER {
1975 PVOID StartVPN;
1976 PVOID EndVPN;
1977 PVAD_HEADER ParentLink;
1978 PVAD_HEADER LeftLink;
1979 PVAD_HEADER RightLink;
1980 ULONG Flags; /* LSB = CommitCharge */
1981 PVOID ControlArea;
1982 PVOID FirstProtoPte;
1983 PVOID LastPTE;
1984 ULONG Unknown;
1985 LIST_ENTRY Secured;
1986 } VAD_HEADER, *PVAD_HEADER;
1987
1988 typedef struct
1989 {
1990 LARGE_INTEGER StartingLcn;
1991 LARGE_INTEGER BitmapSize;
1992 UCHAR Buffer[1];
1993 } VOLUME_BITMAP_BUFFER, *PVOLUME_BITMAP_BUFFER;
1994
1995 #if (VER_PRODUCTBUILD >= 2600)
1996
1997 typedef BOOLEAN
1998 (NTAPI *PFILTER_REPORT_CHANGE) (
1999 IN PVOID NotifyContext,
2000 IN PVOID FilterContext
2001 );
2002
2003 typedef enum _FS_FILTER_SECTION_SYNC_TYPE {
2004 SyncTypeOther = 0,
2005 SyncTypeCreateSection
2006 } FS_FILTER_SECTION_SYNC_TYPE, *PFS_FILTER_SECTION_SYNC_TYPE;
2007
2008 typedef enum _FS_FILTER_STREAM_FO_NOTIFICATION_TYPE {
2009 NotifyTypeCreate = 0,
2010 NotifyTypeRetired
2011 } FS_FILTER_STREAM_FO_NOTIFICATION_TYPE, *PFS_FILTER_STREAM_FO_NOTIFICATION_TYPE;
2012
2013 typedef union _FS_FILTER_PARAMETERS {
2014 struct {
2015 PLARGE_INTEGER EndingOffset;
2016 PERESOURCE *ResourceToRelease;
2017 } AcquireForModifiedPageWriter;
2018
2019 struct {
2020 PERESOURCE ResourceToRelease;
2021 } ReleaseForModifiedPageWriter;
2022
2023 struct {
2024 FS_FILTER_SECTION_SYNC_TYPE SyncType;
2025 ULONG PageProtection;
2026 } AcquireForSectionSynchronization;
2027
2028 struct {
2029 FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType;
2030 BOOLEAN POINTER_ALIGNMENT SafeToRecurse;
2031 } NotifyStreamFileObject;
2032
2033 struct {
2034 PVOID Argument1;
2035 PVOID Argument2;
2036 PVOID Argument3;
2037 PVOID Argument4;
2038 PVOID Argument5;
2039 } Others;
2040 } FS_FILTER_PARAMETERS, *PFS_FILTER_PARAMETERS;
2041
2042 typedef struct _FS_FILTER_CALLBACK_DATA {
2043 ULONG SizeOfFsFilterCallbackData;
2044 UCHAR Operation;
2045 UCHAR Reserved;
2046 struct _DEVICE_OBJECT *DeviceObject;
2047 struct _FILE_OBJECT *FileObject;
2048 FS_FILTER_PARAMETERS Parameters;
2049 } FS_FILTER_CALLBACK_DATA, *PFS_FILTER_CALLBACK_DATA;
2050
2051 typedef NTSTATUS
2052 (NTAPI *PFS_FILTER_CALLBACK) (
2053 IN PFS_FILTER_CALLBACK_DATA Data,
2054 OUT PVOID *CompletionContext
2055 );
2056
2057 typedef VOID
2058 (NTAPI *PFS_FILTER_COMPLETION_CALLBACK) (
2059 IN PFS_FILTER_CALLBACK_DATA Data,
2060 IN NTSTATUS OperationStatus,
2061 IN PVOID CompletionContext
2062 );
2063
2064 typedef struct _FS_FILTER_CALLBACKS {
2065 ULONG SizeOfFsFilterCallbacks;
2066 ULONG Reserved;
2067 PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization;
2068 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization;
2069 PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization;
2070 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization;
2071 PFS_FILTER_CALLBACK PreAcquireForCcFlush;
2072 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush;
2073 PFS_FILTER_CALLBACK PreReleaseForCcFlush;
2074 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush;
2075 PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter;
2076 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter;
2077 PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter;
2078 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter;
2079 } FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS;
2080
2081 typedef struct _READ_LIST {
2082 PFILE_OBJECT FileObject;
2083 ULONG NumberOfEntries;
2084 LOGICAL IsImage;
2085 FILE_SEGMENT_ELEMENT List[ANYSIZE_ARRAY];
2086 } READ_LIST, *PREAD_LIST;
2087
2088 #endif
2089
2090 typedef NTSTATUS
2091 (NTAPI * PRTL_HEAP_COMMIT_ROUTINE) (
2092 IN PVOID Base,
2093 IN OUT PVOID *CommitAddress,
2094 IN OUT PSIZE_T CommitSize
2095 );
2096
2097 typedef struct _RTL_HEAP_PARAMETERS {
2098 ULONG Length;
2099 SIZE_T SegmentReserve;
2100 SIZE_T SegmentCommit;
2101 SIZE_T DeCommitFreeBlockThreshold;
2102 SIZE_T DeCommitTotalFreeThreshold;
2103 SIZE_T MaximumAllocationSize;
2104 SIZE_T VirtualMemoryThreshold;
2105 SIZE_T InitialCommit;
2106 SIZE_T InitialReserve;
2107 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
2108 SIZE_T Reserved[2];
2109 } RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
2110
2111 NTKERNELAPI
2112 BOOLEAN
2113 NTAPI
2114 CcCanIWrite (
2115 IN PFILE_OBJECT FileObject,
2116 IN ULONG BytesToWrite,
2117 IN BOOLEAN Wait,
2118 IN BOOLEAN Retrying
2119 );
2120
2121 NTKERNELAPI
2122 BOOLEAN
2123 NTAPI
2124 CcCopyRead (
2125 IN PFILE_OBJECT FileObject,
2126 IN PLARGE_INTEGER FileOffset,
2127 IN ULONG Length,
2128 IN BOOLEAN Wait,
2129 OUT PVOID Buffer,
2130 OUT PIO_STATUS_BLOCK IoStatus
2131 );
2132
2133 NTKERNELAPI
2134 BOOLEAN
2135 NTAPI
2136 CcCopyWrite (
2137 IN PFILE_OBJECT FileObject,
2138 IN PLARGE_INTEGER FileOffset,
2139 IN ULONG Length,
2140 IN BOOLEAN Wait,
2141 IN PVOID Buffer
2142 );
2143
2144 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
2145
2146 typedef VOID (NTAPI *PCC_POST_DEFERRED_WRITE) (
2147 IN PVOID Context1,
2148 IN PVOID Context2
2149 );
2150
2151 NTKERNELAPI
2152 VOID
2153 NTAPI
2154 CcDeferWrite (
2155 IN PFILE_OBJECT FileObject,
2156 IN PCC_POST_DEFERRED_WRITE PostRoutine,
2157 IN PVOID Context1,
2158 IN PVOID Context2,
2159 IN ULONG BytesToWrite,
2160 IN BOOLEAN Retrying
2161 );
2162
2163 NTKERNELAPI
2164 VOID
2165 NTAPI
2166 CcFastCopyRead (
2167 IN PFILE_OBJECT FileObject,
2168 IN ULONG FileOffset,
2169 IN ULONG Length,
2170 IN ULONG PageCount,
2171 OUT PVOID Buffer,
2172 OUT PIO_STATUS_BLOCK IoStatus
2173 );
2174
2175 NTKERNELAPI
2176 VOID
2177 NTAPI
2178 CcFastCopyWrite (
2179 IN PFILE_OBJECT FileObject,
2180 IN ULONG FileOffset,
2181 IN ULONG Length,
2182 IN PVOID Buffer
2183 );
2184
2185 NTKERNELAPI
2186 VOID
2187 NTAPI
2188 CcFlushCache (
2189 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
2190 IN PLARGE_INTEGER FileOffset OPTIONAL,
2191 IN ULONG Length,
2192 OUT PIO_STATUS_BLOCK IoStatus OPTIONAL
2193 );
2194
2195 typedef VOID (*PDIRTY_PAGE_ROUTINE) (
2196 IN PFILE_OBJECT FileObject,
2197 IN PLARGE_INTEGER FileOffset,
2198 IN ULONG Length,
2199 IN PLARGE_INTEGER OldestLsn,
2200 IN PLARGE_INTEGER NewestLsn,
2201 IN PVOID Context1,
2202 IN PVOID Context2
2203 );
2204
2205 NTKERNELAPI
2206 LARGE_INTEGER
2207 NTAPI
2208 CcGetDirtyPages (
2209 IN PVOID LogHandle,
2210 IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
2211 IN PVOID Context1,
2212 IN PVOID Context2
2213 );
2214
2215 NTKERNELAPI
2216 PFILE_OBJECT
2217 NTAPI
2218 CcGetFileObjectFromBcb (
2219 IN PVOID Bcb
2220 );
2221
2222 NTKERNELAPI
2223 PFILE_OBJECT
2224 NTAPI
2225 CcGetFileObjectFromSectionPtrs (
2226 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
2227 );
2228
2229 #define CcGetFileSizePointer(FO) ( \
2230 ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
2231 )
2232
2233 #if (VER_PRODUCTBUILD >= 2195)
2234
2235 NTKERNELAPI
2236 LARGE_INTEGER
2237 NTAPI
2238 CcGetFlushedValidData (
2239 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
2240 IN BOOLEAN BcbListHeld
2241 );
2242
2243 #endif /* (VER_PRODUCTBUILD >= 2195) */
2244
2245 NTKERNELAPI
2246 LARGE_INTEGER
2247 NTAPI
2248 CcGetLsnForFileObject (
2249 IN PFILE_OBJECT FileObject,
2250 OUT PLARGE_INTEGER OldestLsn OPTIONAL
2251 );
2252
2253 typedef BOOLEAN (NTAPI *PACQUIRE_FOR_LAZY_WRITE) (
2254 IN PVOID Context,
2255 IN BOOLEAN Wait
2256 );
2257
2258 typedef VOID (NTAPI *PRELEASE_FROM_LAZY_WRITE) (
2259 IN PVOID Context
2260 );
2261
2262 typedef BOOLEAN (NTAPI *PACQUIRE_FOR_READ_AHEAD) (
2263 IN PVOID Context,
2264 IN BOOLEAN Wait
2265 );
2266
2267 typedef VOID (NTAPI *PRELEASE_FROM_READ_AHEAD) (
2268 IN PVOID Context
2269 );
2270
2271 typedef struct _CACHE_MANAGER_CALLBACKS {
2272 PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite;
2273 PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite;
2274 PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead;
2275 PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead;
2276 } CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
2277
2278 NTKERNELAPI
2279 VOID
2280 NTAPI
2281 CcInitializeCacheMap (
2282 IN PFILE_OBJECT FileObject,
2283 IN PCC_FILE_SIZES FileSizes,
2284 IN BOOLEAN PinAccess,
2285 IN PCACHE_MANAGER_CALLBACKS Callbacks,
2286 IN PVOID LazyWriteContext
2287 );
2288
2289 #define CcIsFileCached(FO) ( \
2290 ((FO)->SectionObjectPointer != NULL) && \
2291 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
2292 )
2293
2294 extern ULONG CcFastMdlReadWait;
2295
2296 NTKERNELAPI
2297 BOOLEAN
2298 NTAPI
2299 CcIsThereDirtyData (
2300 IN PVPB Vpb
2301 );
2302
2303 NTKERNELAPI
2304 BOOLEAN
2305 NTAPI
2306 CcMapData (
2307 IN PFILE_OBJECT FileObject,
2308 IN PLARGE_INTEGER FileOffset,
2309 IN ULONG Length,
2310 IN ULONG Flags,
2311 OUT PVOID *Bcb,
2312 OUT PVOID *Buffer
2313 );
2314
2315 NTKERNELAPI
2316 VOID
2317 NTAPI
2318 CcMdlRead (
2319 IN PFILE_OBJECT FileObject,
2320 IN PLARGE_INTEGER FileOffset,
2321 IN ULONG Length,
2322 OUT PMDL *MdlChain,
2323 OUT PIO_STATUS_BLOCK IoStatus
2324 );
2325
2326 NTKERNELAPI
2327 VOID
2328 NTAPI
2329 CcMdlReadComplete (
2330 IN PFILE_OBJECT FileObject,
2331 IN PMDL MdlChain
2332 );
2333
2334 NTKERNELAPI
2335 VOID
2336 NTAPI
2337 CcMdlWriteComplete (
2338 IN PFILE_OBJECT FileObject,
2339 IN PLARGE_INTEGER FileOffset,
2340 IN PMDL MdlChain
2341 );
2342
2343 #define MAP_WAIT 1
2344
2345 NTKERNELAPI
2346 BOOLEAN
2347 NTAPI
2348 CcPinMappedData (
2349 IN PFILE_OBJECT FileObject,
2350 IN PLARGE_INTEGER FileOffset,
2351 IN ULONG Length,
2352 IN ULONG Flags,
2353 IN OUT PVOID *Bcb
2354 );
2355
2356 NTKERNELAPI
2357 BOOLEAN
2358 NTAPI
2359 CcPinRead (
2360 IN PFILE_OBJECT FileObject,
2361 IN PLARGE_INTEGER FileOffset,
2362 IN ULONG Length,
2363 IN ULONG Flags,
2364 OUT PVOID *Bcb,
2365 OUT PVOID *Buffer
2366 );
2367
2368 NTKERNELAPI
2369 VOID
2370 NTAPI
2371 CcPrepareMdlWrite (
2372 IN PFILE_OBJECT FileObject,
2373 IN PLARGE_INTEGER FileOffset,
2374 IN ULONG Length,
2375 OUT PMDL *MdlChain,
2376 OUT PIO_STATUS_BLOCK IoStatus
2377 );
2378
2379 NTKERNELAPI
2380 BOOLEAN
2381 NTAPI
2382 CcPreparePinWrite (
2383 IN PFILE_OBJECT FileObject,
2384 IN PLARGE_INTEGER FileOffset,
2385 IN ULONG Length,
2386 IN BOOLEAN Zero,
2387 IN ULONG Flags,
2388 OUT PVOID *Bcb,
2389 OUT PVOID *Buffer
2390 );
2391
2392 NTKERNELAPI
2393 BOOLEAN
2394 NTAPI
2395 CcPurgeCacheSection (
2396 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
2397 IN PLARGE_INTEGER FileOffset OPTIONAL,
2398 IN ULONG Length,
2399 IN BOOLEAN UninitializeCacheMaps
2400 );
2401
2402 #define CcReadAhead(FO, FOFF, LEN) ( \
2403 if ((LEN) >= 256) { \
2404 CcScheduleReadAhead((FO), (FOFF), (LEN)); \
2405 } \
2406 )
2407
2408 #if (VER_PRODUCTBUILD >= 2195)
2409
2410 NTKERNELAPI
2411 PVOID
2412 NTAPI
2413 CcRemapBcb (
2414 IN PVOID Bcb
2415 );
2416
2417 #endif /* (VER_PRODUCTBUILD >= 2195) */
2418
2419 NTKERNELAPI
2420 VOID
2421 NTAPI
2422 CcRepinBcb (
2423 IN PVOID Bcb
2424 );
2425
2426 NTKERNELAPI
2427 VOID
2428 NTAPI
2429 CcScheduleReadAhead (
2430 IN PFILE_OBJECT FileObject,
2431 IN PLARGE_INTEGER FileOffset,
2432 IN ULONG Length
2433 );
2434
2435 NTKERNELAPI
2436 VOID
2437 NTAPI
2438 CcSetAdditionalCacheAttributes (
2439 IN PFILE_OBJECT FileObject,
2440 IN BOOLEAN DisableReadAhead,
2441 IN BOOLEAN DisableWriteBehind
2442 );
2443
2444 NTKERNELAPI
2445 VOID
2446 NTAPI
2447 CcSetBcbOwnerPointer (
2448 IN PVOID Bcb,
2449 IN PVOID OwnerPointer
2450 );
2451
2452 NTKERNELAPI
2453 VOID
2454 NTAPI
2455 CcSetDirtyPageThreshold (
2456 IN PFILE_OBJECT FileObject,
2457 IN ULONG DirtyPageThreshold
2458 );
2459
2460 NTKERNELAPI
2461 VOID
2462 NTAPI
2463 CcSetDirtyPinnedData (
2464 IN PVOID BcbVoid,
2465 IN PLARGE_INTEGER Lsn OPTIONAL
2466 );
2467
2468 NTKERNELAPI
2469 VOID
2470 NTAPI
2471 CcSetFileSizes (
2472 IN PFILE_OBJECT FileObject,
2473 IN PCC_FILE_SIZES FileSizes
2474 );
2475
2476 typedef VOID (NTAPI *PFLUSH_TO_LSN) (
2477 IN PVOID LogHandle,
2478 IN LARGE_INTEGER Lsn
2479 );
2480
2481 NTKERNELAPI
2482 VOID
2483 NTAPI
2484 CcSetLogHandleForFile (
2485 IN PFILE_OBJECT FileObject,
2486 IN PVOID LogHandle,
2487 IN PFLUSH_TO_LSN FlushToLsnRoutine
2488 );
2489
2490 NTKERNELAPI
2491 VOID
2492 NTAPI
2493 CcSetReadAheadGranularity (
2494 IN PFILE_OBJECT FileObject,
2495 IN ULONG Granularity /* default: PAGE_SIZE */
2496 /* allowed: 2^n * PAGE_SIZE */
2497 );
2498
2499 NTKERNELAPI
2500 BOOLEAN
2501 NTAPI
2502 CcUninitializeCacheMap (
2503 IN PFILE_OBJECT FileObject,
2504 IN PLARGE_INTEGER TruncateSize OPTIONAL,
2505 IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL
2506 );
2507
2508 NTKERNELAPI
2509 VOID
2510 NTAPI
2511 CcUnpinData (
2512 IN PVOID Bcb
2513 );
2514
2515 NTKERNELAPI
2516 VOID
2517 NTAPI
2518 CcUnpinDataForThread (
2519 IN PVOID Bcb,
2520 IN ERESOURCE_THREAD ResourceThreadId
2521 );
2522
2523 NTKERNELAPI
2524 VOID
2525 NTAPI
2526 CcUnpinRepinnedBcb (
2527 IN PVOID Bcb,
2528 IN BOOLEAN WriteThrough,
2529 OUT PIO_STATUS_BLOCK IoStatus
2530 );
2531
2532 #if (VER_PRODUCTBUILD >= 2195)
2533
2534 NTKERNELAPI
2535 NTSTATUS
2536 NTAPI
2537 CcWaitForCurrentLazyWriterActivity (
2538 VOID
2539 );
2540
2541 #endif /* (VER_PRODUCTBUILD >= 2195) */
2542
2543 NTKERNELAPI
2544 BOOLEAN
2545 NTAPI
2546 CcZeroData (
2547 IN PFILE_OBJECT FileObject,
2548 IN PLARGE_INTEGER StartOffset,
2549 IN PLARGE_INTEGER EndOffset,
2550 IN BOOLEAN Wait
2551 );
2552
2553 NTKERNELAPI
2554 VOID
2555 NTAPI
2556 ExDisableResourceBoostLite (
2557 IN PERESOURCE Resource
2558 );
2559
2560 NTKERNELAPI
2561 SIZE_T
2562 NTAPI
2563 ExQueryPoolBlockSize (
2564 IN PVOID PoolBlock,
2565 OUT PBOOLEAN QuotaCharged
2566 );
2567
2568 #if (VER_PRODUCTBUILD >= 2600)
2569
2570 #ifndef __NTOSKRNL__
2571 NTKERNELAPI
2572 VOID
2573 FASTCALL
2574 ExInitializeRundownProtection (
2575 IN PEX_RUNDOWN_REF RunRef
2576 );
2577
2578 NTKERNELAPI
2579 VOID
2580 FASTCALL
2581 ExReInitializeRundownProtection (
2582 IN PEX_RUNDOWN_REF RunRef
2583 );
2584
2585 NTKERNELAPI
2586 BOOLEAN
2587 FASTCALL
2588 ExAcquireRundownProtection (
2589 IN PEX_RUNDOWN_REF RunRef
2590 );
2591
2592 NTKERNELAPI
2593 BOOLEAN
2594 FASTCALL
2595 ExAcquireRundownProtectionEx (
2596 IN PEX_RUNDOWN_REF RunRef,
2597 IN ULONG Count
2598 );
2599
2600 NTKERNELAPI
2601 VOID
2602 FASTCALL
2603 ExReleaseRundownProtection (
2604 IN PEX_RUNDOWN_REF RunRef
2605 );
2606
2607 NTKERNELAPI
2608 VOID
2609 FASTCALL
2610 ExReleaseRundownProtectionEx (
2611 IN PEX_RUNDOWN_REF RunRef,
2612 IN ULONG Count
2613 );
2614
2615 NTKERNELAPI
2616 VOID
2617 FASTCALL
2618 ExRundownCompleted (
2619 IN PEX_RUNDOWN_REF RunRef
2620 );
2621
2622 NTKERNELAPI
2623 VOID
2624 FASTCALL
2625 ExWaitForRundownProtectionRelease (
2626 IN PEX_RUNDOWN_REF RunRef
2627 );
2628
2629 #endif
2630 #endif /* (VER_PRODUCTBUILD >= 2600) */
2631
2632
2633 #define FsRtlSetupAdvancedHeader( _advhdr, _fmutx ) \
2634 { \
2635 SetFlag( (_advhdr)->Flags, FSRTL_FLAG_ADVANCED_HEADER ); \
2636 SetFlag( (_advhdr)->Flags2, FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS ); \
2637 (_advhdr)->Version = FSRTL_FCB_HEADER_V1; \
2638 InitializeListHead( &(_advhdr)->FilterContexts ); \
2639 if ((_fmutx) != NULL) { \
2640 (_advhdr)->FastMutex = (_fmutx); \
2641 } \
2642 *((PULONG_PTR)(&(_advhdr)->PushLock)) = 0; \
2643 /*ExInitializePushLock( &(_advhdr)->PushLock ); API Not avaliable downlevel*/\
2644 (_advhdr)->FileContextSupportPointer = NULL; \
2645 }
2646
2647 #define FlagOn(x, f) ((x) & (f))
2648
2649 NTKERNELAPI
2650 VOID
2651 NTAPI
2652 FsRtlAddToTunnelCache (
2653 IN PTUNNEL Cache,
2654 IN ULONGLONG DirectoryKey,
2655 IN PUNICODE_STRING ShortName,
2656 IN PUNICODE_STRING LongName,
2657 IN BOOLEAN KeyByShortName,
2658 IN ULONG DataLength,
2659 IN PVOID Data
2660 );
2661
2662 #if (VER_PRODUCTBUILD >= 2195)
2663
2664 PFILE_LOCK
2665 NTAPI
2666 FsRtlAllocateFileLock (
2667 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
2668 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
2669 );
2670
2671 #endif /* (VER_PRODUCTBUILD >= 2195) */
2672
2673 NTKERNELAPI
2674 PVOID
2675 NTAPI
2676 FsRtlAllocatePool (
2677 IN POOL_TYPE PoolType,
2678 IN ULONG NumberOfBytes
2679 );
2680
2681 NTKERNELAPI
2682 PVOID
2683 NTAPI
2684 FsRtlAllocatePoolWithQuota (
2685 IN POOL_TYPE PoolType,
2686 IN ULONG NumberOfBytes
2687 );
2688
2689 NTKERNELAPI
2690 PVOID
2691 NTAPI
2692 FsRtlAllocatePoolWithQuotaTag (
2693 IN POOL_TYPE PoolType,
2694 IN ULONG NumberOfBytes,
2695 IN ULONG Tag
2696 );
2697
2698 NTKERNELAPI
2699 PVOID
2700 NTAPI
2701 FsRtlAllocatePoolWithTag (
2702 IN POOL_TYPE PoolType,
2703 IN ULONG NumberOfBytes,
2704 IN ULONG Tag
2705 );
2706
2707 NTKERNELAPI
2708 BOOLEAN
2709 NTAPI
2710 FsRtlAreNamesEqual (
2711 IN PCUNICODE_STRING Name1,
2712 IN PCUNICODE_STRING Name2,
2713 IN BOOLEAN IgnoreCase,
2714 IN PCWCH UpcaseTable OPTIONAL
2715 );
2716
2717 #define FsRtlAreThereCurrentFileLocks(FL) ( \
2718 ((FL)->FastIoIsQuestionable) \
2719 )
2720
2721 /*
2722 FsRtlCheckLockForReadAccess:
2723
2724 All this really does is pick out the lock parameters from the irp (io stack
2725 location?), get IoGetRequestorProcess, and pass values on to
2726 FsRtlFastCheckLockForRead.
2727 */
2728 NTKERNELAPI
2729 BOOLEAN
2730 NTAPI
2731 FsRtlCheckLockForReadAccess (
2732 IN PFILE_LOCK FileLock,
2733 IN PIRP Irp
2734 );
2735
2736 /*
2737 FsRtlCheckLockForWriteAccess:
2738
2739 All this really does is pick out the lock parameters from the irp (io stack
2740 location?), get IoGetRequestorProcess, and pass values on to
2741 FsRtlFastCheckLockForWrite.
2742 */
2743 NTKERNELAPI
2744 BOOLEAN
2745 NTAPI
2746 FsRtlCheckLockForWriteAccess (
2747 IN PFILE_LOCK FileLock,
2748 IN PIRP Irp
2749 );
2750
2751 typedef
2752 VOID
2753 (NTAPI*POPLOCK_WAIT_COMPLETE_ROUTINE) (
2754 IN PVOID Context,
2755 IN PIRP Irp
2756 );
2757
2758 typedef
2759 VOID
2760 (NTAPI*POPLOCK_FS_PREPOST_IRP) (
2761 IN PVOID Context,
2762 IN PIRP Irp
2763 );
2764
2765 NTKERNELAPI
2766 NTSTATUS
2767 NTAPI
2768 FsRtlCheckOplock (
2769 IN POPLOCK Oplock,
2770 IN PIRP Irp,
2771 IN PVOID Context,
2772 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
2773 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
2774 );
2775
2776 NTKERNELAPI
2777 BOOLEAN
2778 NTAPI
2779 FsRtlCopyRead (
2780 IN PFILE_OBJECT FileObject,
2781 IN PLARGE_INTEGER FileOffset,
2782 IN ULONG Length,
2783 IN BOOLEAN Wait,
2784 IN ULONG LockKey,
2785 OUT PVOID Buffer,
2786 OUT PIO_STATUS_BLOCK IoStatus,
2787 IN PDEVICE_OBJECT DeviceObject
2788 );
2789
2790 NTKERNELAPI
2791 BOOLEAN
2792 NTAPI
2793 FsRtlCopyWrite (
2794 IN PFILE_OBJECT FileObject,
2795 IN PLARGE_INTEGER FileOffset,
2796 IN ULONG Length,
2797 IN BOOLEAN Wait,
2798 IN ULONG LockKey,
2799 IN PVOID Buffer,
2800 OUT PIO_STATUS_BLOCK IoStatus,
2801 IN PDEVICE_OBJECT DeviceObject
2802 );
2803
2804 NTSYSAPI
2805 PVOID
2806 NTAPI
2807 RtlCreateHeap (
2808 IN ULONG Flags,
2809 IN PVOID HeapBase OPTIONAL,
2810 IN SIZE_T ReserveSize OPTIONAL,
2811 IN SIZE_T CommitSize OPTIONAL,
2812 IN PVOID Lock OPTIONAL,
2813 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
2814 );
2815
2816 NTKERNELAPI
2817 BOOLEAN
2818 NTAPI
2819 FsRtlCurrentBatchOplock (
2820 IN POPLOCK Oplock
2821 );
2822
2823 NTKERNELAPI
2824 VOID
2825 NTAPI
2826 FsRtlDeleteKeyFromTunnelCache (
2827 IN PTUNNEL Cache,
2828 IN ULONGLONG DirectoryKey
2829 );
2830
2831 NTKERNELAPI
2832 VOID
2833 NTAPI
2834 FsRtlDeleteTunnelCache (
2835 IN PTUNNEL Cache
2836 );
2837
2838 NTKERNELAPI
2839 VOID
2840 NTAPI
2841 FsRtlDeregisterUncProvider (
2842 IN HANDLE Handle
2843 );
2844
2845 NTSYSAPI
2846 PVOID
2847 NTAPI
2848 RtlDestroyHeap(
2849 IN PVOID HeapHandle
2850 );
2851
2852 NTKERNELAPI
2853 VOID
2854 NTAPI
2855 FsRtlDissectDbcs (
2856 IN ANSI_STRING Name,
2857 OUT PANSI_STRING FirstPart,
2858 OUT PANSI_STRING RemainingPart
2859 );
2860
2861 NTKERNELAPI
2862 VOID
2863 NTAPI
2864 FsRtlDissectName (
2865 IN UNICODE_STRING Name,
2866 OUT PUNICODE_STRING FirstPart,
2867 OUT PUNICODE_STRING RemainingPart
2868 );
2869
2870 NTKERNELAPI
2871 BOOLEAN
2872 NTAPI
2873 FsRtlDoesDbcsContainWildCards (
2874 IN PANSI_STRING Name
2875 );
2876
2877 NTKERNELAPI
2878 BOOLEAN
2879 NTAPI
2880 FsRtlDoesNameContainWildCards (
2881 IN PUNICODE_STRING Name
2882 );
2883
2884 NTKERNELAPI
2885 BOOLEAN
2886 NTAPI
2887 FsRtlIsFatDbcsLegal (
2888 IN ANSI_STRING DbcsName,
2889 IN BOOLEAN WildCardsPermissible,
2890 IN BOOLEAN PathNamePermissible,
2891 IN BOOLEAN LeadingBackslashPermissible
2892 );
2893
2894
2895 #define FsRtlCompleteRequest(IRP,STATUS) { \
2896 (IRP)->IoStatus.Status = (STATUS); \
2897 IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
2898 }
2899
2900 #define FsRtlEnterFileSystem KeEnterCriticalRegion
2901
2902 #define FsRtlExitFileSystem KeLeaveCriticalRegion
2903
2904 NTKERNELAPI
2905 BOOLEAN
2906 NTAPI
2907 FsRtlFastCheckLockForRead (
2908 IN PFILE_LOCK FileLock,
2909 IN PLARGE_INTEGER FileOffset,
2910 IN PLARGE_INTEGER Length,
2911 IN ULONG Key,
2912 IN PFILE_OBJECT FileObject,
2913 IN PEPROCESS Process
2914 );
2915
2916 NTKERNELAPI
2917 BOOLEAN
2918 NTAPI
2919 FsRtlFastCheckLockForWrite (
2920 IN PFILE_LOCK FileLock,
2921 IN PLARGE_INTEGER FileOffset,
2922 IN PLARGE_INTEGER Length,
2923 IN ULONG Key,
2924 IN PFILE_OBJECT FileObject,
2925 IN PEPROCESS Process
2926 );
2927
2928 #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
2929 FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
2930 )
2931
2932 NTKERNELAPI
2933 NTSTATUS
2934 NTAPI
2935 FsRtlFastUnlockAll (
2936 IN PFILE_LOCK FileLock,
2937 IN PFILE_OBJECT FileObject,
2938 IN PEPROCESS Process,
2939 IN PVOID Context OPTIONAL
2940 );
2941 /* ret: STATUS_RANGE_NOT_LOCKED */
2942
2943 NTKERNELAPI
2944 NTSTATUS
2945 NTAPI
2946 FsRtlFastUnlockAllByKey (
2947 IN PFILE_LOCK FileLock,
2948 IN PFILE_OBJECT FileObject,
2949 IN PEPROCESS Process,
2950 IN ULONG Key,
2951 IN PVOID Context OPTIONAL
2952 );
2953 /* ret: STATUS_RANGE_NOT_LOCKED */
2954
2955 NTKERNELAPI
2956 NTSTATUS
2957 NTAPI
2958 FsRtlFastUnlockSingle (
2959 IN PFILE_LOCK FileLock,
2960 IN PFILE_OBJECT FileObject,
2961 IN PLARGE_INTEGER FileOffset,
2962 IN PLARGE_INTEGER Length,
2963 IN PEPROCESS Process,
2964 IN ULONG Key,
2965 IN PVOID Context OPTIONAL,
2966 IN BOOLEAN AlreadySynchronized
2967 );
2968 /* ret: STATUS_RANGE_NOT_LOCKED */
2969
2970 NTKERNELAPI
2971 BOOLEAN
2972 NTAPI
2973 FsRtlFindInTunnelCache (
2974 IN PTUNNEL Cache,
2975 IN ULONGLONG DirectoryKey,
2976 IN PUNICODE_STRING Name,
2977 OUT PUNICODE_STRING ShortName,
2978 OUT PUNICODE_STRING LongName,
2979 IN OUT PULONG DataLength,
2980 OUT PVOID Data
2981 );
2982
2983 #if (VER_PRODUCTBUILD >= 2195)
2984
2985 NTKERNELAPI
2986 VOID
2987 NTAPI
2988 FsRtlFreeFileLock (
2989 IN PFILE_LOCK FileLock
2990 );
2991
2992 #endif /* (VER_PRODUCTBUILD >= 2195) */
2993
2994 NTKERNELAPI
2995 NTSTATUS
2996 NTAPI
2997 FsRtlGetFileSize (
2998 IN PFILE_OBJECT FileObject,
2999 IN OUT PLARGE_INTEGER FileSize
3000 );
3001
3002 /*
3003 FsRtlGetNextFileLock:
3004
3005 ret: NULL if no more locks
3006
3007 Internals:
3008 FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
3009 FileLock->LastReturnedLock as storage.
3010 LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
3011 list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
3012 calls with Restart = FALSE.
3013 */
3014 NTKERNELAPI
3015 PFILE_LOCK_INFO
3016 NTAPI
3017 FsRtlGetNextFileLock (
3018 IN PFILE_LOCK FileLock,
3019 IN BOOLEAN Restart
3020 );
3021
3022 NTKERNELAPI
3023 VOID
3024 NTAPI
3025 FsRtlInitializeFileLock (
3026 IN PFILE_LOCK FileLock,
3027 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
3028 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
3029 );
3030
3031 NTKERNELAPI
3032 VOID
3033 NTAPI
3034 FsRtlInitializeOplock (
3035 IN OUT POPLOCK Oplock
3036 );
3037
3038 NTKERNELAPI
3039 VOID
3040 NTAPI
3041 FsRtlInitializeTunnelCache (
3042 IN PTUNNEL Cache
3043 );
3044
3045 NTKERNELAPI
3046 BOOLEAN
3047 NTAPI
3048 FsRtlIsNameInExpression (
3049 IN PUNICODE_STRING Expression,
3050 IN PUNICODE_STRING Name,
3051 IN BOOLEAN IgnoreCase,
3052 IN PWCHAR UpcaseTable OPTIONAL
3053 );
3054
3055 NTKERNELAPI
3056 BOOLEAN
3057 NTAPI
3058 FsRtlIsNtstatusExpected (
3059 IN NTSTATUS Ntstatus
3060 );
3061
3062 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
3063
3064 extern PUSHORT NlsOemLeadByteInfo;
3065
3066 #define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \
3067 (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \
3068 (NLS_MB_CODE_PAGE_TAG && \
3069 (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \
3070 )
3071
3072 #define FsRtlIsAnsiCharacterWild(C) ( \
3073 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \
3074 )
3075
3076 #define FsRtlIsUnicodeCharacterWild(C) ( \
3077 (((C) >= 0x40) ? \
3078 FALSE : \
3079 FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER )) \
3080 )
3081
3082 NTKERNELAPI
3083 BOOLEAN
3084 NTAPI
3085 FsRtlMdlReadDev (
3086 IN PFILE_OBJECT FileObject,
3087 IN PLARGE_INTEGER FileOffset,
3088 IN ULONG Length,
3089 IN ULONG LockKey,
3090 OUT PMDL *MdlChain,
3091 OUT PIO_STATUS_BLOCK IoStatus,
3092 IN PDEVICE_OBJECT DeviceObject
3093 );
3094
3095 NTKERNELAPI
3096 BOOLEAN
3097 NTAPI
3098 FsRtlMdlReadComplete (
3099 IN PFILE_OBJECT FileObject,
3100 IN PMDL MdlChain
3101 );
3102
3103 NTKERNELAPI
3104 BOOLEAN
3105 NTAPI
3106 FsRtlMdlReadCompleteDev (
3107 IN PFILE_OBJECT FileObject,
3108 IN PMDL MdlChain,
3109 IN PDEVICE_OBJECT DeviceObject
3110 );
3111
3112 NTKERNELAPI
3113 BOOLEAN
3114 NTAPI
3115 FsRtlPrepareMdlWriteDev (
3116 IN PFILE_OBJECT FileObject,
3117 IN PLARGE_INTEGER FileOffset,
3118 IN ULONG Length,
3119 IN ULONG LockKey,
3120 OUT PMDL *MdlChain,
3121 OUT PIO_STATUS_BLOCK IoStatus,
3122 IN PDEVICE_OBJECT DeviceObject
3123 );
3124
3125 NTKERNELAPI
3126 BOOLEAN
3127 NTAPI
3128 FsRtlMdlWriteComplete (
3129 IN PFILE_OBJECT FileObject,
3130 IN PLARGE_INTEGER FileOffset,
3131 IN PMDL MdlChain
3132 );
3133
3134 NTKERNELAPI
3135 BOOLEAN
3136 NTAPI
3137 FsRtlMdlWriteCompleteDev (
3138 IN PFILE_OBJECT FileObject,
3139 IN PLARGE_INTEGER FileOffset,
3140 IN PMDL MdlChain,
3141 IN PDEVICE_OBJECT DeviceObject
3142 );
3143
3144 NTKERNELAPI
3145 NTSTATUS
3146 NTAPI
3147 FsRtlNormalizeNtstatus (
3148 IN NTSTATUS Exception,
3149 IN NTSTATUS GenericException
3150 );
3151
3152 NTKERNELAPI
3153 VOID
3154 NTAPI
3155 FsRtlNotifyChangeDirectory (
3156 IN PNOTIFY_SYNC NotifySync,
3157 IN PVOID FsContext,
3158 IN PSTRING FullDirectoryName,
3159 IN PLIST_ENTRY NotifyList,
3160 IN BOOLEAN WatchTree,
3161 IN ULONG CompletionFilter,
3162 IN PIRP NotifyIrp
3163 );
3164
3165 NTKERNELAPI
3166 VOID
3167 NTAPI
3168 FsRtlNotifyCleanup (
3169 IN PNOTIFY_SYNC NotifySync,
3170 IN PLIST_ENTRY NotifyList,
3171 IN PVOID FsContext
3172 );
3173
3174 typedef BOOLEAN (*PCHECK_FOR_TRAVERSE_ACCESS) (
3175 IN PVOID NotifyContext,
3176 IN PVOID TargetContext,
3177 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
3178 );
3179
3180 NTKERNELAPI
3181 VOID
3182 NTAPI
3183 FsRtlNotifyFullChangeDirectory (
3184 IN PNOTIFY_SYNC NotifySync,
3185 IN PLIST_ENTRY NotifyList,
3186 IN PVOID FsContext,
3187 IN PSTRING FullDirectoryName,
3188 IN BOOLEAN WatchTree,
3189 IN BOOLEAN IgnoreBuffer,
3190 IN ULONG CompletionFilter,
3191 IN PIRP NotifyIrp,
3192 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
3193 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
3194 );
3195
3196 NTKERNELAPI
3197 VOID
3198 NTAPI
3199 FsRtlNotifyFullReportChange (
3200 IN PNOTIFY_SYNC NotifySync,
3201 IN PLIST_ENTRY NotifyList,
3202 IN PSTRING FullTargetName,
3203 IN USHORT TargetNameOffset,
3204 IN PSTRING StreamName OPTIONAL,
3205 IN PSTRING NormalizedParentName OPTIONAL,
3206 IN ULONG FilterMatch,
3207 IN ULONG Action,
3208 IN PVOID TargetContext
3209 );
3210
3211 NTKERNELAPI
3212 VOID
3213 NTAPI
3214 FsRtlNotifyInitializeSync (
3215 IN PNOTIFY_SYNC *NotifySync
3216 );
3217
3218 NTKERNELAPI
3219 VOID
3220 NTAPI
3221 FsRtlNotifyReportChange (
3222 IN PNOTIFY_SYNC NotifySync,
3223 IN PLIST_ENTRY NotifyList,
3224 IN PSTRING FullTargetName,
3225 IN PUSHORT FileNamePartLength,
3226 IN ULONG FilterMatch
3227 );
3228
3229 NTKERNELAPI
3230 VOID
3231 NTAPI
3232 FsRtlNotifyUninitializeSync (
3233 IN PNOTIFY_SYNC *NotifySync
3234 );
3235
3236 #if (VER_PRODUCTBUILD >= 2195)
3237
3238 NTKERNELAPI
3239 NTSTATUS
3240 NTAPI
3241 FsRtlNotifyVolumeEvent (
3242 IN PFILE_OBJECT FileObject,
3243 IN ULONG EventCode
3244 );
3245
3246 #endif /* (VER_PRODUCTBUILD >= 2195) */
3247
3248 NTKERNELAPI
3249 NTSTATUS
3250 NTAPI
3251 FsRtlOplockFsctrl (
3252 IN POPLOCK Oplock,
3253 IN PIRP Irp,
3254 IN ULONG OpenCount
3255 );
3256
3257 NTKERNELAPI
3258 BOOLEAN
3259 NTAPI
3260 FsRtlOplockIsFastIoPossible (
3261 IN POPLOCK Oplock
3262 );
3263
3264 /*
3265 FsRtlPrivateLock:
3266
3267 ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
3268
3269 Internals:
3270 -Calls IoCompleteRequest if Irp
3271 -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
3272 */
3273 NTKERNELAPI
3274 BOOLEAN
3275 NTAPI
3276 FsRtlPrivateLock (
3277 IN PFILE_LOCK FileLock,
3278 IN PFILE_OBJECT FileObject,
3279 IN PLARGE_INTEGER FileOffset,
3280 IN PLARGE_INTEGER Length,
3281 IN PEPROCESS Process,
3282 IN ULONG Key,
3283 IN BOOLEAN FailImmediately,
3284 IN BOOLEAN ExclusiveLock,
3285 OUT PIO_STATUS_BLOCK IoStatus,
3286 IN PIRP Irp OPTIONAL,
3287 IN PVOID Context,
3288 IN BOOLEAN AlreadySynchronized
3289 );
3290
3291 /*
3292 FsRtlProcessFileLock:
3293
3294 ret:
3295 -STATUS_INVALID_DEVICE_REQUEST
3296 -STATUS_RANGE_NOT_LOCKED from unlock routines.
3297 -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
3298 (redirected IoStatus->Status).
3299
3300 Internals:
3301 -switch ( Irp->CurrentStackLocation->MinorFunction )
3302 lock: return FsRtlPrivateLock;
3303 unlocksingle: return FsRtlFastUnlockSingle;
3304 unlockall: return FsRtlFastUnlockAll;
3305 unlockallbykey: return FsRtlFastUnlockAllByKey;
3306 default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
3307 return STATUS_INVALID_DEVICE_REQUEST;
3308
3309 -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
3310 -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
3311 */
3312 NTKERNELAPI
3313 NTSTATUS
3314 NTAPI
3315 FsRtlProcessFileLock (
3316 IN PFILE_LOCK FileLock,
3317 IN PIRP Irp,
3318 IN PVOID Context OPTIONAL
3319 );
3320
3321 NTKERNELAPI
3322 NTSTATUS
3323 NTAPI
3324 FsRtlRegisterUncProvider (
3325 IN OUT PHANDLE MupHandle,
3326 IN PUNICODE_STRING RedirectorDeviceName,
3327 IN BOOLEAN MailslotsSupported
3328 );
3329
3330 typedef VOID
3331 (NTAPI *PFSRTL_STACK_OVERFLOW_ROUTINE) (
3332 IN PVOID Context,
3333 IN PKEVENT Event
3334 );
3335
3336 NTKERNELAPI
3337 VOID
3338 NTAPI
3339 FsRtlPostStackOverflow (
3340 IN PVOID Context,
3341 IN PKEVENT Event,
3342 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
3343 );
3344
3345 NTKERNELAPI
3346 VOID
3347 NTAPI
3348 FsRtlPostPagingFileStackOverflow (
3349 IN PVOID Context,
3350 IN PKEVENT Event,
3351 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
3352 );
3353
3354 NTKERNELAPI
3355 VOID
3356 NTAPI
3357 FsRtlTeardownPerStreamContexts (
3358 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader
3359 );
3360
3361 NTKERNELAPI
3362 VOID
3363 NTAPI
3364 FsRtlUninitializeFileLock (
3365 IN PFILE_LOCK FileLock
3366 );
3367
3368 NTKERNELAPI
3369 VOID
3370 NTAPI
3371 FsRtlUninitializeOplock (
3372 IN OUT POPLOCK Oplock
3373 );
3374
3375 NTHALAPI
3376 VOID
3377 NTAPI
3378 HalDisplayString (
3379 IN PCHAR String
3380 );
3381
3382 NTKERNELAPI
3383 UCHAR
3384 NTAPI
3385 KeSetIdealProcessorThread(
3386 IN OUT PKTHREAD Thread,
3387 IN UCHAR Processor
3388 );
3389
3390 NTKERNELAPI
3391 NTSTATUS
3392 NTAPI
3393 IoAttachDeviceToDeviceStackSafe(
3394 IN PDEVICE_OBJECT SourceDevice,
3395 IN PDEVICE_OBJECT TargetDevice,
3396 OUT PDEVICE_OBJECT *AttachedToDeviceObject
3397 );
3398
3399 NTKERNELAPI
3400 VOID
3401 NTAPI
3402 IoAcquireVpbSpinLock (
3403 OUT PKIRQL Irql
3404 );
3405
3406 NTKERNELAPI
3407 NTSTATUS
3408 NTAPI
3409 IoCheckDesiredAccess (
3410 IN OUT PACCESS_MASK DesiredAccess,
3411 IN ACCESS_MASK GrantedAccess
3412 );
3413
3414 NTKERNELAPI
3415 NTSTATUS
3416 NTAPI
3417 IoCheckEaBufferValidity (
3418 IN PFILE_FULL_EA_INFORMATION EaBuffer,
3419 IN ULONG EaLength,
3420 OUT PULONG ErrorOffset
3421 );
3422
3423 NTKERNELAPI
3424 NTSTATUS
3425 NTAPI
3426 IoCheckFunctionAccess (
3427 IN ACCESS_MASK GrantedAccess,
3428 IN UCHAR MajorFunction,
3429 IN UCHAR MinorFunction,
3430 IN ULONG IoControlCode,
3431 IN PVOID Argument1 OPTIONAL,
3432 IN PVOID Argument2 OPTIONAL
3433 );
3434
3435 #if (VER_PRODUCTBUILD >= 2195)
3436
3437 NTKERNELAPI
3438 NTSTATUS
3439 NTAPI
3440 IoCheckQuotaBufferValidity (
3441 IN PFILE_QUOTA_INFORMATION QuotaBuffer,
3442 IN ULONG QuotaLength,
3443 OUT PULONG ErrorOffset
3444 );
3445
3446 #endif /* (VER_PRODUCTBUILD >= 2195) */
3447
3448 NTKERNELAPI
3449 PFILE_OBJECT
3450 NTAPI
3451 IoCreateStreamFileObject (
3452 IN PFILE_OBJECT FileObject OPTIONAL,
3453 IN PDEVICE_OBJECT DeviceObject OPTIONAL
3454 );
3455
3456 #if (VER_PRODUCTBUILD >= 2195)
3457
3458 NTKERNELAPI
3459 PFILE_OBJECT
3460 NTAPI
3461 IoCreateStreamFileObjectLite (
3462 IN PFILE_OBJECT FileObject OPTIONAL,
3463 IN PDEVICE_OBJECT DeviceObject OPTIONAL
3464 );
3465
3466 #endif /* (VER_PRODUCTBUILD >= 2195) */
3467
3468 NTKERNELAPI
3469 BOOLEAN
3470 NTAPI
3471 IoFastQueryNetworkAttributes (
3472 IN POBJECT_ATTRIBUTES ObjectAttributes,
3473 IN ACCESS_MASK DesiredAccess,
3474 IN ULONG OpenOptions,
3475 OUT PIO_STATUS_BLOCK IoStatus,
3476 OUT PFILE_NETWORK_OPEN_INFORMATION Buffer
3477 );
3478
3479 NTKERNELAPI
3480 PDEVICE_OBJECT
3481 NTAPI
3482 IoGetAttachedDevice (
3483 IN PDEVICE_OBJECT DeviceObject
3484 );
3485
3486 NTKERNELAPI
3487 PDEVICE_OBJECT
3488 NTAPI
3489 IoGetBaseFileSystemDeviceObject (
3490 IN PFILE_OBJECT FileObject
3491 );
3492
3493 NTKERNELAPI
3494 PEPROCESS
3495 NTAPI
3496 IoGetRequestorProcess (
3497 IN PIRP Irp
3498 );
3499
3500 #if (VER_PRODUCTBUILD >= 2195)
3501
3502 NTKERNELAPI
3503 ULONG
3504 NTAPI
3505 IoGetRequestorProcessId (
3506 IN PIRP Irp
3507 );
3508
3509 #endif /* (VER_PRODUCTBUILD >= 2195) */
3510
3511 NTKERNELAPI
3512 PIRP
3513 NTAPI
3514 IoGetTopLevelIrp (
3515 VOID
3516 );
3517
3518 #define IoIsFileOpenedExclusively(FileObject) ( \
3519 (BOOLEAN) !( \
3520 (FileObject)->SharedRead || \
3521 (FileObject)->SharedWrite || \
3522 (FileObject)->SharedDelete \
3523 ) \
3524 )
3525
3526 NTKERNELAPI
3527 BOOLEAN
3528 NTAPI
3529 IoIsOperationSynchronous (
3530 IN PIRP Irp
3531 );
3532
3533 NTKERNELAPI
3534 BOOLEAN
3535 NTAPI
3536 IoIsSystemThread (
3537 IN PETHREAD Thread
3538 );
3539
3540 #if (VER_PRODUCTBUILD >= 2195)
3541
3542 NTKERNELAPI
3543 BOOLEAN
3544 NTAPI
3545 IoIsValidNameGraftingBuffer (
3546 IN PIRP Irp,
3547 IN PREPARSE_DATA_BUFFER ReparseBuffer
3548 );
3549
3550 #endif /* (VER_PRODUCTBUILD >= 2195) */
3551
3552 NTKERNELAPI
3553 NTSTATUS
3554 NTAPI
3555 IoPageRead (
3556 IN PFILE_OBJECT FileObject,
3557 IN PMDL Mdl,
3558 IN PLARGE_INTEGER Offset,
3559 IN PKEVENT Event,
3560 OUT PIO_STATUS_BLOCK IoStatusBlock
3561 );
3562
3563 NTKERNELAPI
3564 NTSTATUS
3565 NTAPI
3566 IoQueryFileInformation (
3567 IN PFILE_OBJECT FileObject,
3568 IN FILE_INFORMATION_CLASS FileInformationClass,
3569 IN ULONG Length,
3570 OUT PVOID FileInformation,
3571 OUT PULONG ReturnedLength
3572 );
3573
3574 NTKERNELAPI
3575 NTSTATUS
3576 NTAPI
3577 IoQueryVolumeInformation (
3578 IN PFILE_OBJECT FileObject,
3579 IN FS_INFORMATION_CLASS FsInformationClass,
3580 IN ULONG Length,
3581 OUT PVOID FsInformation,
3582 OUT PULONG ReturnedLength
3583 );
3584
3585 NTKERNELAPI
3586 VOID
3587 NTAPI
3588 IoQueueThreadIrp(
3589 IN PIRP Irp
3590 );
3591
3592 NTKERNELAPI
3593 VOID
3594 NTAPI
3595 IoRegisterFileSystem (
3596 IN OUT PDEVICE_OBJECT DeviceObject
3597 );
3598
3599 #if (VER_PRODUCTBUILD >= 1381)
3600
3601 typedef VOID (NTAPI *PDRIVER_FS_NOTIFICATION) (
3602 IN PDEVICE_OBJECT DeviceObject,
3603 IN BOOLEAN DriverActive
3604 );
3605
3606 NTKERNELAPI
3607 NTSTATUS
3608 NTAPI
3609 IoRegisterFsRegistrationChange (
3610 IN PDRIVER_OBJECT DriverObject,
3611 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
3612 );
3613
3614 #endif /* (VER_PRODUCTBUILD >= 1381) */
3615
3616 NTKERNELAPI
3617 VOID
3618 NTAPI
3619 IoReleaseVpbSpinLock (
3620 IN KIRQL Irql
3621 );
3622
3623 NTKERNELAPI
3624 VOID
3625 NTAPI
3626 IoSetDeviceToVerify (
3627 IN PETHREAD Thread,
3628 IN PDEVICE_OBJECT DeviceObject
3629 );
3630
3631 NTKERNELAPI
3632 NTSTATUS
3633 NTAPI
3634 IoSetInformation (
3635 IN PFILE_OBJECT FileObject,
3636 IN FILE_INFORMATION_CLASS FileInformationClass,
3637 IN ULONG Length,
3638 IN PVOID FileInformation
3639 );
3640
3641 NTKERNELAPI
3642 VOID
3643 NTAPI
3644 IoSetTopLevelIrp (
3645 IN PIRP Irp
3646 );
3647
3648 NTKERNELAPI
3649 NTSTATUS
3650 NTAPI
3651 IoSynchronousPageWrite (
3652 IN PFILE_OBJECT FileObject,
3653 IN PMDL Mdl,
3654 IN PLARGE_INTEGER FileOffset,
3655 IN PKEVENT Event,
3656 OUT PIO_STATUS_BLOCK IoStatusBlock
3657 );
3658
3659 NTKERNELAPI
3660 PEPROCESS
3661 NTAPI
3662 IoThreadToProcess (
3663 IN PETHREAD Thread
3664 );
3665
3666 NTKERNELAPI
3667 VOID
3668 NTAPI
3669 IoUnregisterFileSystem (
3670 IN OUT PDEVICE_OBJECT DeviceObject
3671 );
3672
3673 #if (VER_PRODUCTBUILD >= 1381)
3674
3675 NTKERNELAPI
3676 VOID
3677 NTAPI
3678 IoUnregisterFsRegistrationChange (
3679 IN PDRIVER_OBJECT DriverObject,
3680 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
3681 );
3682
3683 #endif /* (VER_PRODUCTBUILD >= 1381) */
3684
3685 NTKERNELAPI
3686 NTSTATUS
3687 NTAPI
3688 IoVerifyVolume (
3689 IN PDEVICE_OBJECT DeviceObject,
3690 IN BOOLEAN AllowRawMount
3691 );
3692
3693 #if !defined (_M_AMD64)
3694
3695 NTHALAPI
3696 KIRQL
3697 FASTCALL
3698 KeAcquireQueuedSpinLock (
3699 IN KSPIN_LOCK_QUEUE_NUMBER Number
3700 );
3701
3702 NTHALAPI
3703 VOID
3704 FASTCALL
3705 KeReleaseQueuedSpinLock (
3706 IN KSPIN_LOCK_QUEUE_NUMBER Number,
3707 IN KIRQL OldIrql
3708 );
3709
3710 NTHALAPI
3711 KIRQL
3712 FASTCALL
3713 KeAcquireSpinLockRaiseToSynch(
3714 IN OUT PKSPIN_LOCK SpinLock
3715 );
3716
3717 NTHALAPI
3718 LOGICAL
3719 FASTCALL
3720 KeTryToAcquireQueuedSpinLock(
3721 KSPIN_LOCK_QUEUE_NUMBER Number,
3722 PKIRQL OldIrql);
3723
3724 #else
3725
3726 NTKERNELAPI
3727 KIRQL
3728 FASTCALL
3729 KeAcquireQueuedSpinLock (
3730 IN KSPIN_LOCK_QUEUE_NUMBER Number
3731 );
3732
3733 NTKERNELAPI
3734 VOID
3735 FASTCALL
3736 KeReleaseQueuedSpinLock (
3737 IN KSPIN_LOCK_QUEUE_NUMBER Number,
3738 IN KIRQL OldIrql
3739 );
3740
3741 NTKERNELAPI
3742 KIRQL
3743 KeAcquireSpinLockRaiseToSynch(
3744 IN OUT PKSPIN_LOCK SpinLock
3745 );
3746
3747 NTKERNELAPI
3748 LOGICAL
3749 KeTryToAcquireQueuedSpinLock(
3750 KSPIN_LOCK_QUEUE_NUMBER Number,
3751 PKIRQL OldIrql);
3752
3753 #endif
3754
3755 NTKERNELAPI
3756 VOID
3757 NTAPI
3758 KeAttachProcess (
3759 IN PKPROCESS Process
3760 );
3761
3762 NTKERNELAPI
3763 VOID
3764 NTAPI
3765 KeDetachProcess (
3766 VOID
3767 );
3768
3769 NTKERNELAPI
3770 VOID
3771 NTAPI
3772 KeInitializeQueue (
3773 IN PRKQUEUE Queue,
3774 IN ULONG Count OPTIONAL
3775 );
3776
3777 NTKERNELAPI
3778 LONG
3779 NTAPI
3780 KeInsertHeadQueue (
3781 IN PRKQUEUE Queue,
3782 IN PLIST_ENTRY Entry
3783 );
3784
3785 NTKERNELAPI
3786 LONG
3787 NTAPI
3788 KeInsertQueue (
3789 IN PRKQUEUE Queue,
3790 IN PLIST_ENTRY Entry
3791 );
3792
3793 NTKERNELAPI
3794 LONG
3795 NTAPI
3796 KeReadStateQueue (
3797 IN PRKQUEUE Queue
3798 );
3799
3800 NTKERNELAPI
3801 PLIST_ENTRY
3802 NTAPI
3803 KeRemoveQueue (
3804 IN PRKQUEUE Queue,
3805 IN KPROCESSOR_MODE WaitMode,
3806 IN PLARGE_INTEGER Timeout OPTIONAL
3807 );
3808
3809 NTKERNELAPI
3810 PLIST_ENTRY
3811 NTAPI
3812 KeRundownQueue (
3813 IN PRKQUEUE Queue
3814 );
3815
3816 NTKERNELAPI
3817 VOID
3818 NTAPI
3819 KeInitializeMutant (
3820 IN PRKMUTANT Mutant,
3821 IN BOOLEAN InitialOwner
3822 );
3823
3824 NTKERNELAPI
3825 LONG
3826 NTAPI
3827 KeReadStateMutant (
3828 IN PRKMUTANT Mutant
3829 );
3830
3831 NTKERNELAPI
3832 LONG
3833 NTAPI
3834 KeReleaseMutant (
3835 IN PRKMUTANT Mutant,
3836 IN KPRIORITY Increment,
3837 IN BOOLEAN Abandoned,
3838 IN BOOLEAN Wait
3839 );
3840
3841 #if (VER_PRODUCTBUILD >= 2195)
3842
3843 NTKERNELAPI
3844 VOID
3845 NTAPI
3846 KeStackAttachProcess (
3847 IN PKPROCESS Process,
3848 OUT PKAPC_STATE ApcState
3849 );
3850
3851 NTKERNELAPI
3852 VOID
3853 NTAPI
3854 KeUnstackDetachProcess (
3855 IN PKAPC_STATE ApcState
3856 );
3857
3858 #endif /* (VER_PRODUCTBUILD >= 2195) */
3859
3860 NTKERNELAPI
3861 BOOLEAN
3862 NTAPI
3863 KeSetKernelStackSwapEnable(
3864 IN BOOLEAN Enable
3865 );
3866
3867 NTKERNELAPI
3868 BOOLEAN
3869 NTAPI
3870 MmCanFileBeTruncated (
3871 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
3872 IN PLARGE_INTEGER NewFileSize
3873 );
3874
3875 NTKERNELAPI
3876 BOOLEAN
3877 NTAPI
3878 MmFlushImageSection (
3879 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
3880 IN MMFLUSH_TYPE FlushType
3881 );
3882
3883 NTKERNELAPI
3884 BOOLEAN
3885 NTAPI
3886 MmForceSectionClosed (
3887 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
3888 IN BOOLEAN DelayClose
3889 );
3890
3891 #if (VER_PRODUCTBUILD >= 1381)
3892
3893 NTKERNELAPI
3894 BOOLEAN
3895 NTAPI
3896 MmIsRecursiveIoFault (
3897 VOID
3898 );
3899
3900 #else
3901
3902 #define MmIsRecursiveIoFault() ( \
3903 (PsGetCurrentThread()->DisablePageFaultClustering) | \
3904 (PsGetCurrentThread()->ForwardClusterOnly) \
3905 )
3906
3907 #endif
3908
3909
3910 NTKERNELAPI
3911 BOOLEAN
3912 NTAPI
3913 MmSetAddressRangeModified (
3914 IN PVOID Address,
3915 IN ULONG Length
3916 );
3917
3918 NTKERNELAPI
3919 NTSTATUS
3920 NTAPI
3921 ObCreateObject (
3922 IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL,
3923 IN POBJECT_TYPE ObjectType,
3924 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
3925 IN KPROCESSOR_MODE AccessMode,
3926 IN OUT PVOID ParseContext OPTIONAL,
3927 IN ULONG ObjectSize,
3928 IN ULONG PagedPoolCharge OPTIONAL,
3929 IN ULONG NonPagedPoolCharge OPTIONAL,
3930 OUT PVOID *Object
3931 );
3932
3933 NTKERNELAPI
3934 ULONG
3935 NTAPI
3936 ObGetObjectPointerCount (
3937 IN PVOID Object
3938 );
3939
3940 NTKERNELAPI
3941 NTSTATUS
3942 NTAPI
3943 ObInsertObject (
3944 IN PVOID Object,
3945 IN PACCESS_STATE PassedAccessState OPTIONAL,
3946 IN ACCESS_MASK DesiredAccess,
3947 IN ULONG AdditionalReferences,
3948 OUT PVOID *ReferencedObject OPTIONAL,
3949 OUT PHANDLE Handle
3950 );
3951
3952 NTKERNELAPI
3953 VOID
3954 NTAPI
3955 ObMakeTemporaryObject (
3956 IN PVOID Object
3957 );
3958
3959 NTKERNELAPI
3960 NTSTATUS
3961 NTAPI
3962 ObOpenObjectByPointer (
3963 IN PVOID Object,
3964 IN ULONG HandleAttributes,
3965 IN PACCESS_STATE PassedAccessState OPTIONAL,
3966 IN ACCESS_MASK DesiredAccess OPTIONAL,
3967 IN POBJECT_TYPE ObjectType OPTIONAL,
3968 IN KPROCESSOR_MODE AccessMode,
3969 OUT PHANDLE Handle
3970 );
3971
3972 NTKERNELAPI
3973 NTSTATUS
3974 NTAPI
3975 ObQueryNameString (
3976 IN PVOID Object,
3977 OUT POBJECT_NAME_INFORMATION ObjectNameInfo,
3978 IN ULONG Length,
3979 OUT PULONG ReturnLength
3980 );
3981
3982 NTKERNELAPI
3983 NTSTATUS
3984 NTAPI
3985 ObQueryObjectAuditingByHandle (
3986 IN HANDLE Handle,
3987 OUT PBOOLEAN GenerateOnClose
3988 );
3989
3990 NTKERNELAPI
3991 NTSTATUS
3992 NTAPI
3993 ObReferenceObjectByName (
3994 IN PUNICODE_STRING ObjectName,
3995 IN ULONG Attributes,
3996 IN PACCESS_STATE PassedAccessState OPTIONAL,
3997 IN ACCESS_MASK DesiredAccess OPTIONAL,
3998 IN POBJECT_TYPE ObjectType,
3999 IN KPROCESSOR_MODE AccessMode,
4000 IN OUT PVOID ParseContext OPTIONAL,
4001 OUT PVOID *Object
4002 );
4003
4004 NTKERNELAPI
4005 NTSTATUS
4006 NTAPI
4007 PsAssignImpersonationToken (
4008 IN PETHREAD Thread,
4009 IN HANDLE Token
4010 );
4011
4012 NTKERNELAPI
4013 VOID
4014 NTAPI
4015 PsChargePoolQuota (
4016 IN PEPROCESS Process,
4017 IN POOL_TYPE PoolType,
4018 IN SIZE_T Amount
4019 );
4020
4021 NTKERNELAPI
4022 NTSTATUS
4023 NTAPI
4024 PsChargeProcessPoolQuota (
4025 IN PEPROCESS Process,
4026 IN POOL_TYPE PoolType,
4027 IN SIZE_T Amount
4028 );
4029
4030 #define PsDereferenceImpersonationToken(T) \
4031 {if (ARGUMENT_PRESENT(T)) { \
4032 (ObDereferenceObject((T))); \
4033 } else { \
4034 ; \
4035 } \
4036 }
4037
4038 #define PsDereferencePrimaryToken(T) (ObDereferenceObject((T)))
4039
4040 NTKERNELAPI
4041 BOOLEAN
4042 NTAPI
4043 PsDisableImpersonation(
4044 IN PETHREAD Thread,
4045 IN PSE_IMPERSONATION_STATE ImpersonationState
4046 );
4047
4048 NTKERNELAPI
4049 LARGE_INTEGER
4050 NTAPI
4051 PsGetProcessExitTime (
4052 VOID
4053 );
4054
4055 NTKERNELAPI
4056 NTSTATUS
4057 NTAPI
4058 PsImpersonateClient(
4059 IN PETHREAD Thread,
4060 IN PACCESS_TOKEN Token,
4061 IN BOOLEAN CopyOnOpen,
4062 IN BOOLEAN EffectiveOnly,
4063 IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
4064 );
4065
4066 NTKERNELAPI
4067 BOOLEAN
4068 NTAPI
4069 PsIsSystemThread(
4070 IN PETHREAD Thread
4071 );
4072
4073 NTKERNELAPI
4074 BOOLEAN
4075 NTAPI
4076 PsIsThreadTerminating (
4077 IN PETHREAD Thread
4078 );
4079
4080 NTKERNELAPI
4081 NTSTATUS
4082 NTAPI
4083 PsLookupProcessByProcessId (
4084 IN HANDLE ProcessId,
4085 OUT PEPROCESS *Process
4086 );
4087
4088 NTKERNELAPI
4089 NTSTATUS
4090 NTAPI
4091 PsLookupProcessThreadByCid (
4092 IN PCLIENT_ID Cid,
4093 OUT PEPROCESS *Process OPTIONAL,
4094 OUT PETHREAD *Thread
4095 );
4096
4097 NTKERNELAPI
4098 NTSTATUS
4099 NTAPI
4100 PsLookupThreadByThreadId (
4101 IN HANDLE UniqueThreadId,
4102 OUT PETHREAD *Thread
4103 );
4104
4105 NTKERNELAPI
4106 PACCESS_TOKEN
4107 NTAPI
4108 PsReferenceImpersonationToken (
4109 IN PETHREAD Thread,
4110 OUT PBOOLEAN CopyOnUse,
4111 OUT PBOOLEAN EffectiveOnly,
4112 OUT PSECURITY_IMPERSONATION_LEVEL Level
4113 );
4114
4115 NTKERNELAPI
4116 HANDLE
4117 NTAPI
4118 PsReferencePrimaryToken (
4119 IN PEPROCESS Process
4120 );
4121
4122 NTKERNELAPI
4123 VOID
4124 NTAPI
4125 PsRestoreImpersonation(
4126 IN PETHREAD Thread,
4127 IN PSE_IMPERSONATION_STATE ImpersonationState
4128 );
4129
4130 NTKERNELAPI
4131 VOID
4132 NTAPI
4133 PsReturnPoolQuota (
4134 IN PEPROCESS Process,
4135 IN POOL_TYPE PoolType,
4136 IN SIZE_T Amount
4137 );
4138
4139 NTKERNELAPI
4140 VOID
4141 NTAPI
4142 PsRevertToSelf (
4143 VOID
4144 );
4145
4146 NTSYSAPI
4147 NTSTATUS
4148 NTAPI
4149 RtlAbsoluteToSelfRelativeSD (
4150 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
4151 IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
4152 IN PULONG BufferLength
4153 );
4154
4155 NTSYSAPI
4156 PVOID
4157 NTAPI
4158 RtlAllocateHeap (
4159 IN HANDLE HeapHandle,
4160 IN ULONG Flags,
4161 IN ULONG Size
4162 );
4163
4164 NTSYSAPI
4165 NTSTATUS
4166 NTAPI
4167 RtlAppendStringToString(
4168 PSTRING Destination,
4169 const STRING *Source
4170 );
4171
4172 NTSYSAPI
4173 USHORT
4174 NTAPI
4175 RtlCaptureStackBackTrace (
4176 IN ULONG FramesToSkip,
4177 IN ULONG FramesToCapture,
4178 OUT PVOID *BackTrace,
4179 OUT PULONG BackTraceHash OPTIONAL
4180 );
4181
4182 NTSYSAPI
4183 SIZE_T
4184 NTAPI
4185 RtlCompareMemoryUlong (
4186 PVOID Source,
4187 SIZE_T Length,
4188 ULONG Pattern
4189 );
4190
4191 NTSYSAPI
4192 NTSTATUS
4193 NTAPI
4194 RtlCompressBuffer (
4195 IN USHORT CompressionFormatAndEngine,
4196 IN PUCHAR UncompressedBuffer,
4197 IN ULONG UncompressedBufferSize,
4198 OUT PUCHAR CompressedBuffer,
4199 IN ULONG CompressedBufferSize,
4200 IN ULONG UncompressedChunkSize,
4201 OUT PULONG FinalCompressedSize,
4202 IN PVOID WorkSpace
4203 );
4204
4205 NTSYSAPI
4206 NTSTATUS
4207 NTAPI
4208 RtlCompressChunks (
4209 IN PUCHAR UncompressedBuffer,
4210 IN ULONG UncompressedBufferSize,
4211 OUT PUCHAR CompressedBuffer,
4212 IN ULONG CompressedBufferSize,
4213 IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo,
4214 IN ULONG CompressedDataInfoLength,
4215 IN PVOID WorkSpace
4216 );
4217
4218 NTSYSAPI
4219 NTSTATUS
4220 NTAPI
4221 RtlConvertSidToUnicodeString (
4222 OUT PUNICODE_STRING DestinationString,
4223 IN PSID Sid,
4224 IN BOOLEAN AllocateDestinationString
4225 );
4226
4227 NTSYSAPI
4228 NTSTATUS
4229 NTAPI
4230 RtlCopySid (
4231 IN ULONG Length,
4232 IN PSID Destination,
4233 IN PSID Source
4234 );
4235
4236 NTSYSAPI
4237 BOOLEAN
4238 NTAPI
4239 RtlCreateUnicodeString(
4240 PUNICODE_STRING DestinationString,
4241 PCWSTR SourceString
4242 );
4243
4244 NTSYSAPI
4245 NTSTATUS
4246 NTAPI
4247 RtlDecompressBuffer (
4248 IN USHORT CompressionFormat,
4249 OUT PUCHAR UncompressedBuffer,
4250 IN ULONG UncompressedBufferSize,
4251 IN PUCHAR CompressedBuffer,
4252 IN ULONG CompressedBufferSize,
4253 OUT PULONG FinalUncompressedSize
4254 );
4255
4256 NTSYSAPI
4257 NTSTATUS
4258 NTAPI
4259 RtlDecompressChunks (
4260 OUT PUCHAR UncompressedBuffer,
4261 IN ULONG UncompressedBufferSize,
4262 IN PUCHAR CompressedBuffer,
4263 IN ULONG CompressedBufferSize,
4264 IN PUCHAR CompressedTail,
4265 IN ULONG CompressedTailSize,
4266 IN PCOMPRESSED_DATA_INFO CompressedDataInfo
4267 );
4268
4269 NTSYSAPI
4270 NTSTATUS
4271 NTAPI
4272 RtlDecompressFragment (
4273 IN USHORT CompressionFormat,
4274 OUT PUCHAR UncompressedFragment,
4275 IN ULONG UncompressedFragmentSize,
4276 IN PUCHAR CompressedBuffer,
4277 IN ULONG CompressedBufferSize,
4278 IN ULONG FragmentOffset,
4279 OUT PULONG FinalUncompressedSize,
4280 IN PVOID WorkSpace
4281 );
4282
4283 NTSYSAPI
4284 NTSTATUS
4285 NTAPI
4286 RtlDescribeChunk (
4287 IN USHORT CompressionFormat,
4288 IN OUT PUCHAR *CompressedBuffer,
4289 IN PUCHAR EndOfCompressedBufferPlus1,
4290 OUT PUCHAR *ChunkBuffer,
4291 OUT PULONG ChunkSize
4292 );
4293
4294 NTSYSAPI
4295 NTSTATUS
4296 NTAPI
4297 RtlDowncaseUnicodeString(
4298 IN OUT PUNICODE_STRING UniDest,
4299 IN PCUNICODE_STRING UniSource,
4300 IN BOOLEAN AllocateDestinationString
4301 );
4302
4303 NTSYSAPI
4304 NTSTATUS
4305 NTAPI
4306 RtlDuplicateUnicodeString(
4307 IN ULONG Flags,
4308 IN PCUNICODE_STRING SourceString,
4309 OUT PUNICODE_STRING DestinationString
4310 );
4311
4312 NTSYSAPI
4313 BOOLEAN
4314 NTAPI
4315 RtlEqualSid (
4316 IN PSID Sid1,
4317 IN PSID Sid2
4318 );
4319
4320 NTSYSAPI
4321 VOID
4322 NTAPI
4323 RtlFillMemoryUlong (
4324 IN PVOID Destination,
4325 IN ULONG Length,
4326 IN ULONG Fill
4327 );
4328
4329 NTSYSAPI
4330 BOOLEAN
4331 NTAPI
4332 RtlFreeHeap (
4333 IN HANDLE HeapHandle,
4334 IN ULONG Flags,
4335 IN PVOID P
4336 );
4337
4338 NTSYSAPI
4339 VOID
4340 NTAPI
4341 RtlFreeOemString(
4342 IN OUT POEM_STRING OemString
4343 );
4344
4345 NTSYSAPI
4346 VOID
4347 NTAPI
4348 RtlGenerate8dot3Name (
4349 IN PUNICODE_STRING Name,
4350 IN BOOLEAN AllowExtendedCharacters,
4351 IN OUT PGENERATE_NAME_CONTEXT Context,
4352 OUT PUNICODE_STRING Name8dot3
4353 );
4354
4355 NTSYSAPI
4356 NTSTATUS
4357 NTAPI
4358 RtlGetCompressionWorkSpaceSize (
4359 IN USHORT CompressionFormatAndEngine,
4360 OUT PULONG CompressBufferWorkSpaceSize,
4361 OUT PULONG CompressFragmentWorkSpaceSize
4362 );
4363
4364 NTSYSAPI
4365 NTSTATUS
4366 NTAPI
4367 RtlGetDaclSecurityDescriptor (
4368 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
4369 OUT PBOOLEAN DaclPresent,
4370 OUT PACL *Dacl,
4371 OUT PBOOLEAN DaclDefaulted
4372 );
4373
4374 NTSYSAPI
4375 NTSTATUS
4376 NTAPI
4377 RtlGetGroupSecurityDescriptor (
4378 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
4379 OUT PSID *Group,
4380 OUT PBOOLEAN GroupDefaulted
4381 );
4382
4383 NTSYSAPI
4384 NTSTATUS
4385 NTAPI
4386 RtlGetOwnerSecurityDescriptor (
4387 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
4388 OUT PSID *Owner,
4389 OUT PBOOLEAN OwnerDefaulted
4390 );
4391
4392 NTSYSAPI
4393 NTSTATUS
4394 NTAPI
4395 RtlInitializeSid (
4396 IN OUT PSID Sid,
4397 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
4398 IN UCHAR SubAuthorityCount
4399 );
4400
4401 NTSYSAPI
4402 BOOLEAN
4403 NTAPI
4404 RtlIsNameLegalDOS8Dot3(
4405 IN PCUNICODE_STRING Name,
4406 IN OUT POEM_STRING OemName OPTIONAL,
4407 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
4408 );
4409
4410 NTSYSAPI
4411 ULONG
4412 NTAPI
4413 RtlLengthRequiredSid (
4414 IN ULONG SubAuthorityCount
4415 );
4416
4417 NTSYSAPI
4418 ULONG
4419 NTAPI
4420 RtlLengthSid (
4421 IN PSID Sid
4422 );
4423
4424 NTSYSAPI
4425 ULONG
4426 NTAPI
4427 RtlNtStatusToDosError (
4428 IN NTSTATUS Status
4429 );
4430
4431 NTSYSAPI
4432 NTSTATUS
4433 NTAPI
4434 RtlOemStringToUnicodeString(
4435 IN OUT PUNICODE_STRING DestinationString,
4436 IN PCOEM_STRING SourceString,
4437 IN BOOLEAN AllocateDestinationString
4438 );
4439
4440 NTSYSAPI
4441 NTSTATUS
4442 NTAPI
4443 RtlUnicodeStringToOemString(
4444 IN OUT POEM_STRING DestinationString,
4445 IN PCUNICODE_STRING SourceString,
4446 IN BOOLEAN AllocateDestinationString
4447 );
4448
4449 NTSYSAPI
4450 NTSTATUS
4451 NTAPI
4452 RtlOemStringToCountedUnicodeString(
4453 IN OUT PUNICODE_STRING DestinationString,
4454 IN PCOEM_STRING SourceString,
4455 IN BOOLEAN AllocateDestinationString
4456 );
4457
4458 NTSYSAPI
4459 NTSTATUS
4460 NTAPI
4461 RtlUnicodeStringToCountedOemString(
4462 IN OUT POEM_STRING DestinationString,
4463 IN PCUNICODE_STRING SourceString,
4464 IN BOOLEAN AllocateDestinationString
4465 );
4466
4467 NTSYSAPI
4468 NTSTATUS
4469 NTAPI
4470 RtlReserveChunk (
4471 IN USHORT CompressionFormat,
4472 IN OUT PUCHAR *CompressedBuffer,
4473 IN PUCHAR EndOfCompressedBufferPlus1,
4474 OUT PUCHAR *ChunkBuffer,
4475 IN ULONG ChunkSize
4476 );
4477
4478 NTSYSAPI
4479 VOID
4480 NTAPI
4481 RtlSecondsSince1970ToTime (
4482 IN ULONG SecondsSince1970,
4483 OUT PLARGE_INTEGER Time
4484 );
4485
4486 NTSYSAPI
4487 NTSTATUS
4488 NTAPI
4489 RtlSetGroupSecurityDescriptor (
4490 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
4491 IN PSID Group,
4492 IN BOOLEAN GroupDefaulted
4493 );
4494
4495 NTSYSAPI
4496 NTSTATUS
4497 NTAPI
4498 RtlSetOwnerSecurityDescriptor (
4499 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
4500 IN PSID Owner,
4501 IN BOOLEAN OwnerDefaulted
4502 );
4503
4504 NTSYSAPI
4505 NTSTATUS
4506 NTAPI
4507 RtlSetSaclSecurityDescriptor (
4508 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
4509 IN BOOLEAN SaclPresent,
4510 IN PACL Sacl,
4511 IN BOOLEAN SaclDefaulted
4512 );
4513
4514 NTSYSAPI
4515 PUCHAR
4516 NTAPI
4517 RtlSubAuthorityCountSid (
4518 IN PSID Sid
4519 );
4520
4521 NTSYSAPI
4522 PULONG
4523 NTAPI
4524 RtlSubAuthoritySid (
4525 IN PSID Sid,
4526 IN ULONG SubAuthority
4527 );
4528
4529 NTSYSAPI
4530 NTSTATUS
4531 NTAPI
4532 RtlUnicodeToMultiByteN(
4533 OUT PCHAR MultiByteString,
4534 IN ULONG MaxBytesInMultiByteString,
4535 OUT PULONG BytesInMultiByteString OPTIONAL,
4536 IN PWCH UnicodeString,
4537 IN ULONG BytesInUnicodeString
4538 );
4539
4540 NTSYSAPI
4541 NTSTATUS
4542 NTAPI
4543 RtlOemToUnicodeN(
4544 OUT PWSTR UnicodeString,
4545 IN ULONG MaxBytesInUnicodeString,
4546 OUT PULONG BytesInUnicodeString OPTIONAL,
4547 IN PCH OemString,
4548 IN ULONG BytesInOemString
4549 );
4550
4551 /* RTL Splay Tree Functions */
4552 NTSYSAPI
4553 PRTL_SPLAY_LINKS
4554 NTAPI
4555 RtlSplay(PRTL_SPLAY_LINKS Links);
4556
4557 NTSYSAPI
4558 PRTL_SPLAY_LINKS
4559 NTAPI
4560 RtlDelete(PRTL_SPLAY_LINKS Links);
4561
4562 NTSYSAPI
4563 VOID
4564 NTAPI
4565 RtlDeleteNoSplay(
4566 PRTL_SPLAY_LINKS Links,
4567 PRTL_SPLAY_LINKS *Root
4568 );
4569
4570 NTSYSAPI
4571 PRTL_SPLAY_LINKS
4572 NTAPI
4573 RtlSubtreeSuccessor(PRTL_SPLAY_LINKS Links);
4574
4575 NTSYSAPI
4576 PRTL_SPLAY_LINKS
4577 NTAPI
4578 RtlSubtreePredecessor(PRTL_SPLAY_LINKS Links);
4579
4580 NTSYSAPI
4581 PRTL_SPLAY_LINKS
4582 NTAPI
4583 RtlRealSuccessor(PRTL_SPLAY_LINKS Links);
4584
4585 NTSYSAPI
4586 PRTL_SPLAY_LINKS
4587 NTAPI
4588 RtlRealPredecessor(PRTL_SPLAY_LINKS Links);
4589
4590 #define RtlIsLeftChild(Links) \
4591 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
4592
4593 #define RtlIsRightChild(Links) \
4594 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
4595
4596 #define RtlRightChild(Links) \
4597 ((PRTL_SPLAY_LINKS)(Links))->RightChild
4598
4599 #define RtlIsRoot(Links) \
4600 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
4601
4602 #define RtlLeftChild(Links) \
4603 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
4604
4605 #define RtlParent(Links) \
4606 ((PRTL_SPLAY_LINKS)(Links))->Parent
4607
4608 #define RtlInitializeSplayLinks(Links) \
4609 { \
4610 PRTL_SPLAY_LINKS _SplayLinks; \
4611 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
4612 _SplayLinks->Parent = _SplayLinks; \
4613 _SplayLinks->LeftChild = NULL; \
4614 _SplayLinks->RightChild = NULL; \
4615 }
4616
4617 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
4618 { \
4619 PRTL_SPLAY_LINKS _SplayParent; \
4620 PRTL_SPLAY_LINKS _SplayChild; \
4621 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
4622 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
4623 _SplayParent->LeftChild = _SplayChild; \
4624 _SplayChild->Parent = _SplayParent; \
4625 }
4626
4627 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
4628 { \
4629 PRTL_SPLAY_LINKS _SplayParent; \
4630 PRTL_SPLAY_LINKS _SplayChild; \
4631 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
4632 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
4633 _SplayParent->RightChild = _SplayChild; \
4634 _SplayChild->Parent = _SplayParent; \
4635 }
4636
4637 NTSYSAPI
4638 BOOLEAN
4639 NTAPI
4640 RtlValidSid (
4641 IN PSID Sid
4642 );
4643
4644 NTKERNELAPI
4645 NTSTATUS
4646 NTAPI
4647 SeAppendPrivileges (
4648 PACCESS_STATE AccessState,
4649 PPRIVILEGE_SET Privileges
4650 );
4651
4652 NTKERNELAPI
4653 BOOLEAN
4654 NTAPI
4655 SeAuditingFileEvents (
4656 IN BOOLEAN AccessGranted,
4657 IN PSECURITY_DESCRIPTOR SecurityDescriptor
4658 );
4659
4660 NTKERNELAPI
4661 BOOLEAN
4662 NTAPI
4663 SeAuditingFileOrGlobalEvents (
4664 IN BOOLEAN AccessGranted,
4665 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
4666 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
4667 );
4668
4669 NTKERNELAPI
4670 VOID
4671 NTAPI
4672 SeCaptureSubjectContext (
4673 OUT PSECURITY_SUBJECT_CONTEXT SubjectContext
4674 );
4675
4676 NTKERNELAPI
4677 NTSTATUS
4678 NTAPI
4679 SeCreateClientSecurity (
4680 IN PETHREAD Thread,
4681 IN PSECURITY_QUALITY_OF_SERVICE QualityOfService,
4682 IN BOOLEAN RemoteClient,
4683 OUT PSECURITY_CLIENT_CONTEXT ClientContext
4684 );
4685
4686 #if (VER_PRODUCTBUILD >= 2195)
4687
4688 NTKERNELAPI
4689 NTSTATUS
4690 NTAPI
4691 SeCreateClientSecurityFromSubjectContext (
4692 IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
4693 IN PSECURITY_QUALITY_OF_SERVICE QualityOfService,
4694 IN BOOLEAN ServerIsRemote,
4695 OUT PSECURITY_CLIENT_CONTEXT ClientContext
4696 );
4697
4698 #endif /* (VER_PRODUCTBUILD >= 2195) */
4699
4700
4701 #define SeLengthSid( Sid ) \
4702 (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
4703
4704 #define SeDeleteClientSecurity(C) { \
4705 if (SeTokenType((C)->ClientToken) == TokenPrimary) { \
4706 PsDereferencePrimaryToken( (C)->ClientToken ); \
4707 } else { \
4708 PsDereferenceImpersonationToken( (C)->ClientToken ); \
4709 } \
4710 }
4711
4712 NTKERNELAPI
4713 VOID
4714 NTAPI
4715 SeDeleteObjectAuditAlarm (
4716 IN PVOID Object,
4717 IN HANDLE Handle
4718 );
4719
4720 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
4721
4722 NTKERNELAPI
4723 VOID
4724 NTAPI
4725 SeFreePrivileges (
4726 IN PPRIVILEGE_SET Privileges
4727 );
4728
4729 NTKERNELAPI
4730 VOID
4731 NTAPI
4732 SeImpersonateClient (
4733 IN PSECURITY_CLIENT_CONTEXT ClientContext,
4734 IN PETHREAD ServerThread OPTIONAL
4735 );
4736
4737 #if (VER_PRODUCTBUILD >= 2195)
4738
4739 NTKERNELAPI
4740 NTSTATUS
4741 NTAPI
4742 SeImpersonateClientEx (
4743 IN PSECURITY_CLIENT_CONTEXT ClientContext,
4744 IN PETHREAD ServerThread OPTIONAL
4745 );
4746
4747 #endif /* (VER_PRODUCTBUILD >= 2195) */
4748
4749 NTKERNELAPI
4750 VOID
4751 NTAPI
4752 SeLockSubjectContext (
4753 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
4754 );
4755
4756 NTKERNELAPI
4757 NTSTATUS
4758 NTAPI
4759 SeMarkLogonSessionForTerminationNotification (
4760 IN PLUID LogonId
4761 );
4762
4763 NTKERNELAPI
4764 VOID
4765 NTAPI
4766 SeOpenObjectAuditAlarm (
4767 IN PUNICODE_STRING ObjectTypeName,
4768 IN PVOID Object OPTIONAL,
4769 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
4770 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
4771 IN PACCESS_STATE AccessState,
4772 IN BOOLEAN ObjectCreated,
4773 IN BOOLEAN AccessGranted,
4774 IN KPROCESSOR_MODE AccessMode,
4775 OUT PBOOLEAN GenerateOnClose
4776 );
4777
4778 NTKERNELAPI
4779 VOID
4780 NTAPI
4781 SeOpenObjectForDeleteAuditAlarm (
4782 IN PUNICODE_STRING ObjectTypeName,
4783 IN PVOID Object OPTIONAL,
4784 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
4785 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
4786 IN PACCESS_STATE AccessState,
4787 IN BOOLEAN ObjectCreated,
4788 IN BOOLEAN AccessGranted,
4789 IN KPROCESSOR_MODE AccessMode,
4790 OUT PBOOLEAN GenerateOnClose
4791 );
4792
4793 NTKERNELAPI
4794 BOOLEAN
4795 NTAPI
4796 SePrivilegeCheck (
4797 IN OUT PPRIVILEGE_SET RequiredPrivileges,
4798 IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
4799 IN KPROCESSOR_MODE AccessMode
4800 );
4801
4802 NTKERNELAPI
4803 NTSTATUS
4804 NTAPI
4805 SeQueryAuthenticationIdToken (
4806 IN PACCESS_TOKEN Token,
4807 OUT PLUID LogonId
4808 );
4809
4810 #if (VER_PRODUCTBUILD >= 2195)
4811
4812 NTKERNELAPI
4813 NTSTATUS
4814 NTAPI
4815 SeQueryInformationToken (
4816 IN PACCESS_TOKEN Token,
4817 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
4818 OUT PVOID *TokenInformation
4819 );
4820
4821 #endif /* (VER_PRODUCTBUILD >= 2195) */
4822
4823 NTKERNELAPI
4824 NTSTATUS
4825 NTAPI
4826 SeQuerySecurityDescriptorInfo (
4827 IN PSECURITY_INFORMATION SecurityInformation,
4828 OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
4829 IN OUT PULONG Length,
4830 IN PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor
4831 );
4832
4833 #if (VER_PRODUCTBUILD >= 2195)
4834
4835 NTKERNELAPI
4836 NTSTATUS
4837 NTAPI
4838 SeQuerySessionIdToken (
4839 IN PACCESS_TOKEN Token,
4840 IN PULONG SessionId
4841 );
4842
4843 #endif /* (VER_PRODUCTBUILD >= 2195) */
4844
4845 #define SeQuerySubjectContextToken( SubjectContext ) \
4846 ( ARGUMENT_PRESENT( \
4847 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken \
4848 ) ? \
4849 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken : \
4850 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
4851
4852 typedef NTSTATUS (*PSE_LOGON_SESSION_TERMINATED_ROUTINE) (
4853 IN PLUID LogonId
4854 );
4855
4856 NTKERNELAPI
4857 NTSTATUS
4858 NTAPI
4859 SeRegisterLogonSessionTerminatedRoutine (
4860 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
4861 );
4862
4863 NTKERNELAPI
4864 VOID
4865 NTAPI
4866 SeReleaseSubjectContext (
4867 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
4868 );
4869
4870 NTKERNELAPI
4871 VOID
4872 NTAPI
4873 SeSetAccessStateGenericMapping (
4874 PACCESS_STATE AccessState,
4875 PGENERIC_MAPPING GenericMapping
4876 );
4877
4878 NTKERNELAPI
4879 NTSTATUS
4880 NTAPI
4881 SeSetSecurityDescriptorInfo (
4882 IN PVOID Object OPTIONAL,
4883 IN PSECURITY_INFORMATION SecurityInformation,
4884 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
4885 IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
4886 IN POOL_TYPE PoolType,
4887 IN PGENERIC_MAPPING GenericMapping
4888 );
4889
4890 #if (VER_PRODUCTBUILD >= 2195)
4891
4892 NTKERNELAPI
4893 NTSTATUS
4894 NTAPI
4895 SeSetSecurityDescriptorInfoEx (
4896 IN PVOID Object OPTIONAL,
4897 IN PSECURITY_INFORMATION SecurityInformation,
4898 IN PSECURITY_DESCRIPTOR ModificationDescriptor,
4899 IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
4900 IN ULONG AutoInheritFlags,
4901 IN POOL_TYPE PoolType,
4902 IN PGENERIC_MAPPING GenericMapping
4903 );
4904
4905 NTKERNELAPI
4906 BOOLEAN
4907 NTAPI
4908 SeTokenIsAdmin (
4909 IN PACCESS_TOKEN Token
4910 );
4911
4912 NTKERNELAPI
4913 BOOLEAN
4914 NTAPI
4915 SeTokenIsRestricted (
4916 IN PACCESS_TOKEN Token
4917 );
4918
4919
4920 NTSTATUS
4921 NTAPI
4922 SeLocateProcessImageName(
4923 IN PEPROCESS Process,
4924 OUT PUNICODE_STRING *pImageFileName
4925 );
4926
4927 #endif /* (VER_PRODUCTBUILD >= 2195) */
4928
4929 NTKERNELAPI
4930 TOKEN_TYPE
4931 NTAPI
4932 SeTokenType (
4933 IN PACCESS_TOKEN Token
4934 );
4935
4936 NTKERNELAPI
4937 VOID
4938 NTAPI
4939 SeUnlockSubjectContext (
4940 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
4941 );
4942
4943 NTKERNELAPI
4944 NTSTATUS
4945 NTAPI
4946 SeUnregisterLogonSessionTerminatedRoutine (
4947 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
4948 );
4949
4950 #if (VER_PRODUCTBUILD >= 2195)
4951
4952 NTSYSAPI
4953 NTSTATUS
4954 NTAPI
4955 ZwAdjustPrivilegesToken (
4956 IN HANDLE TokenHandle,
4957 IN BOOLEAN DisableAllPrivileges,
4958 IN PTOKEN_PRIVILEGES NewState,
4959 IN ULONG BufferLength,
4960 OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL,
4961 OUT PULONG ReturnLength
4962 );
4963
4964 #endif /* (VER_PRODUCTBUILD >= 2195) */
4965
4966 NTSYSAPI
4967 NTSTATUS
4968 NTAPI
4969 ZwAlertThread (
4970 IN HANDLE ThreadHandle
4971 );
4972
4973 NTSYSAPI
4974 NTSTATUS
4975 NTAPI
4976 ZwAllocateVirtualMemory (
4977 IN HANDLE ProcessHandle,
4978 IN OUT PVOID *BaseAddress,
4979 IN ULONG_PTR ZeroBits,
4980 IN OUT PSIZE_T RegionSize,
4981 IN ULONG AllocationType,
4982 IN ULONG Protect
4983 );
4984
4985 NTSTATUS
4986 NTAPI
4987 NtAccessCheckByTypeAndAuditAlarm(
4988 IN PUNICODE_STRING SubsystemName,
4989 IN HANDLE HandleId,
4990 IN PUNICODE_STRING ObjectTypeName,
4991 IN PUNICODE_STRING ObjectName,
4992 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
4993 IN PSID PrincipalSelfSid,
4994 IN ACCESS_MASK DesiredAccess,
4995 IN AUDIT_EVENT_TYPE AuditType,
4996 IN ULONG Flags,
4997 IN POBJECT_TYPE_LIST ObjectTypeList,
4998 IN ULONG ObjectTypeLength,
4999 IN PGENERIC_MAPPING GenericMapping,
5000 IN BOOLEAN ObjectCreation,
5001 OUT PACCESS_MASK GrantedAccess,
5002 OUT PNTSTATUS AccessStatus,
5003 OUT PBOOLEAN GenerateOnClose
5004 );
5005
5006 NTSTATUS
5007 NTAPI
5008 NtAccessCheckByTypeResultListAndAuditAlarm(
5009 IN PUNICODE_STRING SubsystemName,
5010 IN HANDLE HandleId,
5011 IN PUNICODE_STRING ObjectTypeName,
5012 IN PUNICODE_STRING ObjectName,
5013 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5014 IN PSID PrincipalSelfSid,
5015 IN ACCESS_MASK DesiredAccess,
5016 IN AUDIT_EVENT_TYPE AuditType,
5017 IN ULONG Flags,
5018 IN POBJECT_TYPE_LIST ObjectTypeList,
5019 IN ULONG ObjectTypeLength,
5020 IN PGENERIC_MAPPING GenericMapping,
5021 IN BOOLEAN ObjectCreation,
5022 OUT PACCESS_MASK GrantedAccess,
5023 OUT PNTSTATUS AccessStatus,
5024 OUT PBOOLEAN GenerateOnClose
5025 );
5026
5027 NTSTATUS
5028 NTAPI
5029 NtAccessCheckByTypeResultListAndAuditAlarmByHandle(
5030 IN PUNICODE_STRING SubsystemName,
5031 IN HANDLE HandleId,
5032 IN HANDLE ClientToken,
5033 IN PUNICODE_STRING ObjectTypeName,
5034 IN PUNICODE_STRING ObjectName,
5035 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5036 IN PSID PrincipalSelfSid,
5037 IN ACCESS_MASK DesiredAccess,
5038 IN AUDIT_EVENT_TYPE AuditType,
5039 IN ULONG Flags,
5040 IN POBJECT_TYPE_LIST ObjectTypeList,
5041 IN ULONG ObjectTypeLength,
5042 IN PGENERIC_MAPPING GenericMapping,
5043 IN BOOLEAN ObjectCreation,
5044 OUT PACCESS_MASK GrantedAccess,
5045 OUT PNTSTATUS AccessStatus,
5046 OUT PBOOLEAN GenerateOnClose
5047 );
5048
5049 NTSYSAPI
5050 NTSTATUS
5051 NTAPI
5052 ZwAccessCheckAndAuditAlarm (
5053 IN PUNICODE_STRING SubsystemName,
5054 IN PVOID HandleId,
5055 IN PUNICODE_STRING ObjectTypeName,
5056 IN PUNICODE_STRING ObjectName,
5057 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5058 IN ACCESS_MASK DesiredAccess,
5059 IN PGENERIC_MAPPING GenericMapping,
5060 IN BOOLEAN ObjectCreation,
5061 OUT PACCESS_MASK GrantedAccess,
5062 OUT PBOOLEAN AccessStatus,
5063 OUT PBOOLEAN GenerateOnClose
5064 );
5065
5066 #if (VER_PRODUCTBUILD >= 2195)
5067
5068 NTSYSAPI
5069 NTSTATUS
5070 NTAPI
5071 ZwCancelIoFile (
5072 IN HANDLE FileHandle,
5073 OUT PIO_STATUS_BLOCK IoStatusBlock
5074 );
5075
5076 #endif /* (VER_PRODUCTBUILD >= 2195) */
5077
5078 NTSYSAPI
5079 NTSTATUS
5080 NTAPI
5081 ZwClearEvent (
5082 IN HANDLE EventHandle
5083 );
5084
5085 NTSYSAPI
5086 NTSTATUS
5087 NTAPI
5088 ZwCloseObjectAuditAlarm (
5089 IN PUNICODE_STRING SubsystemName,
5090 IN PVOID HandleId,
5091 IN BOOLEAN GenerateOnClose
5092 );
5093
5094 NTSYSAPI
5095 NTSTATUS
5096 NTAPI
5097 ZwCreateSection (
5098 OUT PHANDLE SectionHandle,
5099 IN ACCESS_MASK DesiredAccess,
5100 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
5101 IN PLARGE_INTEGER MaximumSize OPTIONAL,
5102 IN ULONG SectionPageProtection,
5103 IN ULONG AllocationAttributes,
5104 IN HANDLE FileHandle OPTIONAL
5105 );
5106
5107 NTSYSAPI
5108 NTSTATUS
5109 NTAPI
5110 ZwCreateSymbolicLinkObject (
5111 OUT PHANDLE SymbolicLinkHandle,
5112 IN ACCESS_MASK DesiredAccess,
5113 IN POBJECT_ATTRIBUTES ObjectAttributes,
5114 IN PUNICODE_STRING TargetName
5115 );
5116
5117 NTSYSAPI
5118 NTSTATUS
5119 NTAPI
5120 ZwDeleteFile (
5121 IN POBJECT_ATTRIBUTES ObjectAttributes
5122 );
5123
5124 NTSYSAPI
5125 NTSTATUS
5126 NTAPI
5127 ZwDeleteValueKey (
5128 IN HANDLE Handle,
5129 IN PUNICODE_STRING Name
5130 );
5131
5132 NTSYSAPI
5133 NTSTATUS
5134 NTAPI
5135 ZwDeviceIoControlFile (
5136 IN HANDLE FileHandle,
5137 IN HANDLE Event OPTIONAL,
5138 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
5139 IN PVOID ApcContext OPTIONAL,
5140 OUT PIO_STATUS_BLOCK IoStatusBlock,
5141 IN ULONG IoControlCode,
5142 IN PVOID InputBuffer OPTIONAL,
5143 IN ULONG InputBufferLength,
5144 OUT PVOID OutputBuffer OPTIONAL,
5145 IN ULONG OutputBufferLength
5146 );
5147
5148 NTSYSAPI
5149 NTSTATUS
5150 NTAPI
5151 ZwDisplayString (
5152 IN PUNICODE_STRING String
5153 );
5154
5155 NTSYSAPI
5156 NTSTATUS
5157 NTAPI
5158 ZwDuplicateObject (
5159 IN HANDLE SourceProcessHandle,
5160 IN HANDLE SourceHandle,
5161 IN HANDLE TargetProcessHandle OPTIONAL,
5162 OUT PHANDLE TargetHandle OPTIONAL,
5163 IN ACCESS_MASK DesiredAccess,
5164 IN ULONG HandleAttributes,
5165 IN ULONG Options
5166 );
5167
5168 NTSYSAPI
5169 NTSTATUS
5170 NTAPI
5171 ZwDuplicateToken (
5172 IN HANDLE ExistingTokenHandle,
5173 IN ACCESS_MASK DesiredAccess,
5174 IN POBJECT_ATTRIBUTES ObjectAttributes,
5175 IN BOOLEAN EffectiveOnly,
5176 IN TOKEN_TYPE TokenType,
5177 OUT PHANDLE NewTokenHandle
5178 );
5179
5180 NTSTATUS
5181 NTAPI
5182 NtFilterToken(
5183 IN HANDLE ExistingTokenHandle,
5184 IN ULONG Flags,
5185 IN PTOKEN_GROUPS SidsToDisable OPTIONAL,
5186 IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL,
5187 IN PTOKEN_GROUPS RestrictedSids OPTIONAL,
5188 OUT PHANDLE NewTokenHandle
5189 );
5190
5191 NTSYSAPI
5192 NTSTATUS
5193 NTAPI
5194 ZwFlushInstructionCache (
5195 IN HANDLE ProcessHandle,
5196 IN PVOID BaseAddress OPTIONAL,
5197 IN ULONG FlushSize
5198 );
5199
5200 NTSYSAPI
5201 NTSTATUS
5202 NTAPI
5203 ZwFlushBuffersFile(
5204 IN HANDLE FileHandle,
5205 OUT PIO_STATUS_BLOCK IoStatusBlock
5206 );
5207
5208 #if (VER_PRODUCTBUILD >= 2195)
5209
5210 NTSYSAPI
5211 NTSTATUS
5212 NTAPI
5213 ZwFlushVirtualMemory (
5214 IN HANDLE ProcessHandle,
5215 IN OUT PVOID *BaseAddress,
5216 IN OUT PULONG FlushSize,
5217 OUT PIO_STATUS_BLOCK IoStatusBlock
5218 );
5219
5220 #endif /* (VER_PRODUCTBUILD >= 2195) */
5221
5222 NTSYSAPI
5223 NTSTATUS
5224 NTAPI
5225 ZwFreeVirtualMemory (
5226 IN HANDLE ProcessHandle,
5227 IN OUT PVOID *BaseAddress,
5228 IN OUT PSIZE_T RegionSize,
5229 IN ULONG FreeType
5230 );
5231
5232 NTSYSAPI
5233 NTSTATUS
5234 NTAPI
5235 ZwFsControlFile (
5236 IN HANDLE FileHandle,
5237 IN HANDLE Event OPTIONAL,
5238 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
5239 IN PVOID ApcContext OPTIONAL,
5240 OUT PIO_STATUS_BLOCK IoStatusBlock,
5241 IN ULONG FsControlCode,
5242 IN PVOID InputBuffer OPTIONAL,
5243 IN ULONG InputBufferLength,
5244 OUT PVOID OutputBuffer OPTIONAL,
5245 IN ULONG OutputBufferLength
5246 );
5247
5248 #if (VER_PRODUCTBUILD >= 2195)
5249
5250 NTSYSAPI
5251 NTSTATUS
5252 NTAPI
5253 ZwInitiatePowerAction (
5254 IN POWER_ACTION SystemAction,
5255 IN SYSTEM_POWER_STATE MinSystemState,
5256 IN ULONG Flags,
5257 IN BOOLEAN Asynchronous
5258 );
5259
5260 #endif /* (VER_PRODUCTBUILD >= 2195) */
5261
5262 NTSYSAPI
5263 NTSTATUS
5264 NTAPI
5265 ZwLoadDriver (
5266 /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
5267 IN PUNICODE_STRING RegistryPath
5268 );
5269
5270 NTSYSAPI
5271 NTSTATUS
5272 NTAPI
5273 ZwLoadKey (
5274 IN POBJECT_ATTRIBUTES KeyObjectAttributes,
5275 IN POBJECT_ATTRIBUTES FileObjectAttributes
5276 );
5277
5278 NTSYSAPI
5279 NTSTATUS
5280 NTAPI
5281 ZwNotifyChangeKey (
5282 IN HANDLE KeyHandle,
5283 IN HANDLE EventHandle OPTIONAL,
5284 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
5285 IN PVOID ApcContext OPTIONAL,
5286 OUT PIO_STATUS_BLOCK IoStatusBlock,
5287 IN ULONG NotifyFilter,
5288 IN BOOLEAN WatchSubtree,
5289 IN PVOID Buffer,
5290 IN ULONG BufferLength,
5291 IN BOOLEAN Asynchronous
5292 );
5293
5294 NTSYSAPI
5295 NTSTATUS
5296 NTAPI
5297 ZwOpenDirectoryObject (
5298 OUT PHANDLE DirectoryHandle,
5299 IN ACCESS_MASK DesiredAccess,
5300 IN POBJECT_ATTRIBUTES ObjectAttributes
5301 );
5302
5303 NTSYSAPI
5304 NTSTATUS
5305 NTAPI
5306 ZwOpenEvent (
5307 OUT PHANDLE EventHandle,
5308 IN ACCESS_MASK DesiredAccess,
5309 IN POBJECT_ATTRIBUTES ObjectAttributes
5310 );
5311
5312 NTSYSAPI
5313 NTSTATUS
5314 NTAPI
5315 ZwOpenProcess (
5316 OUT PHANDLE ProcessHandle,
5317 IN ACCESS_MASK DesiredAccess,
5318 IN POBJECT_ATTRIBUTES ObjectAttributes,
5319 IN PCLIENT_ID ClientId OPTIONAL
5320 );
5321
5322 NTSYSAPI
5323 NTSTATUS
5324 NTAPI
5325 ZwOpenProcessToken (
5326 IN HANDLE ProcessHandle,
5327 IN ACCESS_MASK DesiredAccess,
5328 OUT PHANDLE TokenHandle
5329 );
5330
5331 NTSYSAPI
5332 NTSTATUS
5333 NTAPI
5334 ZwOpenThread (
5335 OUT PHANDLE ThreadHandle,
5336 IN ACCESS_MASK DesiredAccess,
5337 IN POBJECT_ATTRIBUTES ObjectAttributes,
5338 IN PCLIENT_ID ClientId
5339 );
5340
5341 NTSYSAPI
5342 NTSTATUS
5343 NTAPI
5344 ZwOpenThreadToken (
5345 IN HANDLE ThreadHandle,
5346 IN ACCESS_MASK DesiredAccess,
5347 IN BOOLEAN OpenAsSelf,
5348 OUT PHANDLE TokenHandle
5349 );
5350
5351 #if (VER_PRODUCTBUILD >= 2195)
5352
5353 NTSYSAPI
5354 NTSTATUS
5355 NTAPI
5356 ZwPowerInformation (
5357 IN POWER_INFORMATION_LEVEL PowerInformationLevel,
5358 IN PVOID InputBuffer OPTIONAL,
5359 IN ULONG InputBufferLength,
5360 OUT PVOID OutputBuffer OPTIONAL,
5361 IN ULONG OutputBufferLength
5362 );
5363
5364 #endif /* (VER_PRODUCTBUILD >= 2195) */
5365
5366 NTSYSAPI
5367 NTSTATUS
5368 NTAPI
5369 ZwPulseEvent (
5370 IN HANDLE EventHandle,
5371 OUT PLONG PreviousState OPTIONAL
5372 );
5373
5374 NTSYSAPI
5375 NTSTATUS
5376 NTAPI
5377 ZwQueryDefaultLocale (
5378 IN BOOLEAN ThreadOrSystem,
5379 OUT PLCID Locale
5380 );
5381
5382 NTSYSAPI
5383 NTSTATUS
5384 NTAPI
5385 ZwQueryDirectoryFile (
5386 IN HANDLE FileHandle,
5387 IN HANDLE Event OPTIONAL,
5388 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
5389 IN PVOID ApcContext OPTIONAL,
5390 OUT PIO_STATUS_BLOCK IoStatusBlock,
5391 OUT PVOID FileInformation,
5392 IN ULONG Length,
5393 IN FILE_INFORMATION_CLASS FileInformationClass,
5394 IN BOOLEAN ReturnSingleEntry,
5395 IN PUNICODE_STRING FileName OPTIONAL,
5396 IN BOOLEAN RestartScan
5397 );
5398
5399 #if (VER_PRODUCTBUILD >= 2195)
5400
5401 NTSYSAPI
5402 NTSTATUS
5403 NTAPI
5404 ZwQueryDirectoryObject (
5405 IN HANDLE DirectoryHandle,
5406 OUT PVOID Buffer,
5407 IN ULONG Length,
5408 IN BOOLEAN ReturnSingleEntry,
5409 IN BOOLEAN RestartScan,
5410 IN OUT PULONG Context,
5411 OUT PULONG ReturnLength OPTIONAL
5412 );
5413
5414 NTSYSAPI
5415 NTSTATUS
5416 NTAPI
5417 ZwQueryEaFile (
5418 IN HANDLE FileHandle,
5419 OUT PIO_STATUS_BLOCK IoStatusBlock,
5420 OUT PVOID Buffer,
5421 IN ULONG Length,
5422 IN BOOLEAN ReturnSingleEntry,
5423 IN PVOID EaList OPTIONAL,
5424 IN ULONG EaListLength,
5425 IN PULONG EaIndex OPTIONAL,
5426 IN BOOLEAN RestartScan
5427 );
5428
5429 #endif /* (VER_PRODUCTBUILD >= 2195) */
5430
5431 NTSYSAPI
5432 NTSTATUS
5433 NTAPI
5434 ZwQueryInformationProcess (
5435 IN HANDLE ProcessHandle,
5436 IN PROCESSINFOCLASS ProcessInformationClass,
5437 OUT PVOID ProcessInformation,
5438 IN ULONG ProcessInformationLength,
5439 OUT PULONG ReturnLength OPTIONAL
5440 );
5441
5442 NTSYSAPI
5443 NTSTATUS
5444 NTAPI
5445 ZwQueryInformationToken (
5446 IN HANDLE TokenHandle,
5447 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
5448 OUT PVOID TokenInformation,
5449 IN ULONG Length,
5450 OUT PULONG ResultLength
5451 );
5452
5453 NTSYSAPI
5454 NTSTATUS
5455 NTAPI
5456 ZwQuerySecurityObject (
5457 IN HANDLE FileHandle,
5458 IN SECURITY_INFORMATION SecurityInformation,
5459 OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
5460 IN ULONG Length,
5461 OUT PULONG ResultLength
5462 );
5463
5464 NTSYSAPI
5465 NTSTATUS
5466 NTAPI
5467 ZwQueryVolumeInformationFile (
5468 IN HANDLE FileHandle,
5469 OUT PIO_STATUS_BLOCK IoStatusBlock,
5470 OUT PVOID FsInformation,
5471 IN ULONG Length,
5472 IN FS_INFORMATION_CLASS FsInformationClass
5473 );
5474
5475 NTSYSAPI
5476 NTSTATUS
5477 NTAPI
5478 ZwReplaceKey (
5479 IN POBJECT_ATTRIBUTES NewFileObjectAttributes,
5480 IN HANDLE KeyHandle,
5481 IN POBJECT_ATTRIBUTES OldFileObjectAttributes
5482 );
5483
5484 NTSYSAPI
5485 NTSTATUS
5486 NTAPI
5487 ZwResetEvent (
5488 IN HANDLE EventHandle,
5489 OUT PLONG PreviousState OPTIONAL
5490 );
5491
5492 #if (VER_PRODUCTBUILD >= 2195)
5493
5494 NTSYSAPI
5495 NTSTATUS
5496 NTAPI
5497 ZwRestoreKey (
5498 IN HANDLE KeyHandle,
5499 IN HANDLE FileHandle,
5500 IN ULONG Flags
5501 );
5502
5503 #endif /* (VER_PRODUCTBUILD >= 2195) */
5504
5505 NTSYSAPI
5506 NTSTATUS
5507 NTAPI
5508 ZwSaveKey (
5509 IN HANDLE KeyHandle,
5510 IN HANDLE FileHandle
5511 );
5512
5513 NTSYSAPI
5514 NTSTATUS
5515 NTAPI
5516 ZwSetDefaultLocale (
5517 IN BOOLEAN ThreadOrSystem,
5518 IN LCID Locale
5519 );
5520
5521 #if (VER_PRODUCTBUILD >= 2195)
5522
5523 NTSYSAPI
5524 NTSTATUS
5525 NTAPI
5526 ZwSetDefaultUILanguage (
5527 IN LANGID LanguageId
5528 );
5529
5530 NTSYSAPI
5531 NTSTATUS
5532 NTAPI
5533 ZwSetEaFile (
5534 IN HANDLE FileHandle,
5535 OUT PIO_STATUS_BLOCK IoStatusBlock,
5536 OUT PVOID Buffer,
5537 IN ULONG Length
5538 );
5539
5540 #endif /* (VER_PRODUCTBUILD >= 2195) */
5541
5542 NTSYSAPI
5543 NTSTATUS
5544 NTAPI
5545 ZwSetEvent (
5546 IN HANDLE EventHandle,
5547 OUT PLONG PreviousState OPTIONAL
5548 );
5549
5550 NTSYSAPI
5551 NTSTATUS
5552 NTAPI
5553 ZwSetInformationProcess (
5554 IN HANDLE ProcessHandle,
5555 IN PROCESSINFOCLASS ProcessInformationClass,
5556 IN PVOID ProcessInformation,
5557 IN ULONG ProcessInformationLength
5558 );
5559
5560 #if (VER_PRODUCTBUILD >= 2195)
5561
5562 NTSYSAPI
5563 NTSTATUS
5564 NTAPI
5565 ZwSetSecurityObject (
5566 IN HANDLE Handle,
5567 IN SECURITY_INFORMATION SecurityInformation,
5568 IN PSECURITY_DESCRIPTOR SecurityDescriptor
5569 );
5570
5571 #endif /* (VER_PRODUCTBUILD >= 2195) */
5572
5573 NTSYSAPI
5574 NTSTATUS
5575 NTAPI
5576 ZwSetSystemTime (
5577 IN PLARGE_INTEGER NewTime,
5578 OUT PLARGE_INTEGER OldTime OPTIONAL
5579 );
5580
5581 #if (VER_PRODUCTBUILD >= 2195)
5582
5583 NTSYSAPI
5584 NTSTATUS
5585 NTAPI
5586 ZwSetVolumeInformationFile (
5587 IN HANDLE FileHandle,
5588 OUT PIO_STATUS_BLOCK IoStatusBlock,
5589 IN PVOID FsInformation,
5590 IN ULONG Length,
5591 IN FS_INFORMATION_CLASS FsInformationClass
5592 );
5593
5594 #endif /* (VER_PRODUCTBUILD >= 2195) */
5595
5596 NTSYSAPI
5597 NTSTATUS
5598 NTAPI
5599 ZwTerminateProcess (
5600 IN HANDLE ProcessHandle OPTIONAL,
5601 IN NTSTATUS ExitStatus
5602 );
5603
5604 NTSYSAPI
5605 NTSTATUS
5606 NTAPI
5607 ZwUnloadDriver (
5608 /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
5609 IN PUNICODE_STRING RegistryPath
5610 );
5611
5612 NTSYSAPI
5613 NTSTATUS
5614 NTAPI
5615 ZwUnloadKey (
5616 IN POBJECT_ATTRIBUTES KeyObjectAttributes
5617 );
5618
5619 NTSYSAPI
5620 NTSTATUS
5621 NTAPI
5622 ZwWaitForSingleObject (
5623 IN HANDLE Handle,
5624 IN BOOLEAN Alertable,
5625 IN PLARGE_INTEGER Timeout OPTIONAL
5626 );
5627
5628 NTSYSAPI
5629 NTSTATUS
5630 NTAPI
5631 ZwWaitForMultipleObjects (
5632 IN ULONG HandleCount,
5633 IN PHANDLE Handles,
5634 IN WAIT_TYPE WaitType,
5635 IN BOOLEAN Alertable,
5636 IN PLARGE_INTEGER Timeout OPTIONAL
5637 );
5638
5639 NTSYSAPI
5640 NTSTATUS
5641 NTAPI
5642 ZwYieldExecution (
5643 VOID
5644 );
5645
5646 #pragma pack(pop)
5647
5648 #ifdef __cplusplus
5649 }
5650 #endif
5651
5652 #endif /* _NTIFS_ */