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