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