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