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