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