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