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