Merge 13511:13830 from trunk
[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 #pragma pack(push,8)
1410 typedef struct _RETRIEVAL_POINTERS_BUFFER {
1411 ULONG ExtentCount;
1412 LARGE_INTEGER StartingVcn;
1413 struct {
1414 LARGE_INTEGER NextVcn;
1415 LARGE_INTEGER Lcn;
1416 } Extents[1];
1417 } RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
1418 #pragma pack(pop)
1419
1420 typedef struct _RTL_SPLAY_LINKS {
1421 struct _RTL_SPLAY_LINKS *Parent;
1422 struct _RTL_SPLAY_LINKS *LeftChild;
1423 struct _RTL_SPLAY_LINKS *RightChild;
1424 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
1425
1426 typedef struct _SE_EXPORTS {
1427
1428 LUID SeCreateTokenPrivilege;
1429 LUID SeAssignPrimaryTokenPrivilege;
1430 LUID SeLockMemoryPrivilege;
1431 LUID SeIncreaseQuotaPrivilege;
1432 LUID SeUnsolicitedInputPrivilege;
1433 LUID SeTcbPrivilege;
1434 LUID SeSecurityPrivilege;
1435 LUID SeTakeOwnershipPrivilege;
1436 LUID SeLoadDriverPrivilege;
1437 LUID SeCreatePagefilePrivilege;
1438 LUID SeIncreaseBasePriorityPrivilege;
1439 LUID SeSystemProfilePrivilege;
1440 LUID SeSystemtimePrivilege;
1441 LUID SeProfileSingleProcessPrivilege;
1442 LUID SeCreatePermanentPrivilege;
1443 LUID SeBackupPrivilege;
1444 LUID SeRestorePrivilege;
1445 LUID SeShutdownPrivilege;
1446 LUID SeDebugPrivilege;
1447 LUID SeAuditPrivilege;
1448 LUID SeSystemEnvironmentPrivilege;
1449 LUID SeChangeNotifyPrivilege;
1450 LUID SeRemoteShutdownPrivilege;
1451
1452 PSID SeNullSid;
1453 PSID SeWorldSid;
1454 PSID SeLocalSid;
1455 PSID SeCreatorOwnerSid;
1456 PSID SeCreatorGroupSid;
1457
1458 PSID SeNtAuthoritySid;
1459 PSID SeDialupSid;
1460 PSID SeNetworkSid;
1461 PSID SeBatchSid;
1462 PSID SeInteractiveSid;
1463 PSID SeLocalSystemSid;
1464 PSID SeAliasAdminsSid;
1465 PSID SeAliasUsersSid;
1466 PSID SeAliasGuestsSid;
1467 PSID SeAliasPowerUsersSid;
1468 PSID SeAliasAccountOpsSid;
1469 PSID SeAliasSystemOpsSid;
1470 PSID SeAliasPrintOpsSid;
1471 PSID SeAliasBackupOpsSid;
1472
1473 PSID SeAuthenticatedUsersSid;
1474
1475 PSID SeRestrictedSid;
1476 PSID SeAnonymousLogonSid;
1477
1478 LUID SeUndockPrivilege;
1479 LUID SeSyncAgentPrivilege;
1480 LUID SeEnableDelegationPrivilege;
1481
1482 } SE_EXPORTS, *PSE_EXPORTS;
1483
1484 typedef struct _SECTION_BASIC_INFORMATION {
1485 PVOID BaseAddress;
1486 ULONG Attributes;
1487 LARGE_INTEGER Size;
1488 } SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION;
1489
1490 typedef struct _SECTION_IMAGE_INFORMATION {
1491 ULONG EntryPoint;
1492 ULONG Unknown1;
1493 ULONG_PTR StackReserve;
1494 ULONG_PTR StackCommit;
1495 ULONG Subsystem;
1496 USHORT MinorSubsystemVersion;
1497 USHORT MajorSubsystemVersion;
1498 ULONG Unknown2;
1499 ULONG Characteristics;
1500 USHORT ImageNumber;
1501 BOOLEAN Executable;
1502 UCHAR Unknown3;
1503 ULONG Unknown4[3];
1504 } SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION;
1505
1506 #if (VER_PRODUCTBUILD >= 2600)
1507
1508 typedef struct _SHARED_CACHE_MAP {
1509 CSHORT NodeTypeCode;
1510 CSHORT NodeByteSize;
1511 ULONG OpenCount;
1512 LARGE_INTEGER FileSize;
1513 LIST_ENTRY BcbList;
1514 LARGE_INTEGER SectionSize;
1515 LARGE_INTEGER ValidDataLength;
1516 LARGE_INTEGER ValidDataGoal;
1517 PVACB InitialVacbs[4];
1518 PVACB *Vacbs;
1519 PFILE_OBJECT FileObject;
1520 PVACB ActiveVacb;
1521 PVOID NeedToZero;
1522 ULONG ActivePage;
1523 ULONG NeedToZeroPage;
1524 KSPIN_LOCK ActiveVacbSpinLock;
1525 ULONG VacbActiveCount;
1526 ULONG DirtyPages;
1527 LIST_ENTRY SharedCacheMapLinks;
1528 ULONG Flags;
1529 NTSTATUS Status;
1530 PMBCB Mbcb;
1531 PVOID Section;
1532 PKEVENT CreateEvent;
1533 PKEVENT WaitOnActiveCount;
1534 ULONG PagesToWrite;
1535 LONGLONG BeyondLastFlush;
1536 PCACHE_MANAGER_CALLBACKS Callbacks;
1537 PVOID LazyWriteContext;
1538 LIST_ENTRY PrivateList;
1539 PVOID LogHandle;
1540 PVOID FlushToLsnRoutine;
1541 ULONG DirtyPageThreshold;
1542 ULONG LazyWritePassCount;
1543 PCACHE_UNINITIALIZE_EVENT UninitializeEvent;
1544 PVACB NeedToZeroVacb;
1545 KSPIN_LOCK BcbSpinLock;
1546 PVOID Reserved;
1547 KEVENT Event;
1548 EX_PUSH_LOCK VacbPushLock;
1549 PRIVATE_CACHE_MAP PrivateCacheMap;
1550 } SHARED_CACHE_MAP, *PSHARED_CACHE_MAP;
1551
1552 #endif
1553
1554 typedef struct _STARTING_VCN_INPUT_BUFFER {
1555 LARGE_INTEGER StartingVcn;
1556 } STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER;
1557
1558 typedef struct _SYSTEM_CACHE_INFORMATION {
1559 ULONG CurrentSize;
1560 ULONG PeakSize;
1561 ULONG PageFaultCount;
1562 ULONG MinimumWorkingSet;
1563 ULONG MaximumWorkingSet;
1564 ULONG Unused[4];
1565 } SYSTEM_CACHE_INFORMATION, *PSYSTEM_CACHE_INFORMATION;
1566
1567 typedef struct _TERMINATION_PORT {
1568 struct _TERMINATION_PORT* Next;
1569 PVOID Port;
1570 } TERMINATION_PORT, *PTERMINATION_PORT;
1571
1572 typedef struct _SECURITY_CLIENT_CONTEXT {
1573 SECURITY_QUALITY_OF_SERVICE SecurityQos;
1574 PACCESS_TOKEN ClientToken;
1575 BOOLEAN DirectlyAccessClientToken;
1576 BOOLEAN DirectAccessEffectiveOnly;
1577 BOOLEAN ServerIsRemote;
1578 TOKEN_CONTROL ClientTokenControl;
1579 } SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT;
1580
1581 typedef struct _TUNNEL {
1582 FAST_MUTEX Mutex;
1583 PRTL_SPLAY_LINKS Cache;
1584 LIST_ENTRY TimerQueue;
1585 USHORT NumEntries;
1586 } TUNNEL, *PTUNNEL;
1587
1588 typedef struct _VACB {
1589 PVOID BaseAddress;
1590 PSHARED_CACHE_MAP SharedCacheMap;
1591 union {
1592 LARGE_INTEGER FileOffset;
1593 USHORT ActiveCount;
1594 } Overlay;
1595 LIST_ENTRY LruList;
1596 } VACB, *PVACB;
1597
1598 typedef struct _VAD_HEADER {
1599 PVOID StartVPN;
1600 PVOID EndVPN;
1601 PVAD_HEADER ParentLink;
1602 PVAD_HEADER LeftLink;
1603 PVAD_HEADER RightLink;
1604 ULONG Flags; /* LSB = CommitCharge */
1605 PVOID ControlArea;
1606 PVOID FirstProtoPte;
1607 PVOID LastPTE;
1608 ULONG Unknown;
1609 LIST_ENTRY Secured;
1610 } VAD_HEADER, *PVAD_HEADER;
1611
1612 NTKERNELAPI
1613 BOOLEAN
1614 NTAPI
1615 CcCanIWrite (
1616 IN PFILE_OBJECT FileObject,
1617 IN ULONG BytesToWrite,
1618 IN BOOLEAN Wait,
1619 IN BOOLEAN Retrying
1620 );
1621
1622 NTKERNELAPI
1623 BOOLEAN
1624 NTAPI
1625 CcCopyRead (
1626 IN PFILE_OBJECT FileObject,
1627 IN PLARGE_INTEGER FileOffset,
1628 IN ULONG Length,
1629 IN BOOLEAN Wait,
1630 OUT PVOID Buffer,
1631 OUT PIO_STATUS_BLOCK IoStatus
1632 );
1633
1634 NTKERNELAPI
1635 BOOLEAN
1636 NTAPI
1637 CcCopyWrite (
1638 IN PFILE_OBJECT FileObject,
1639 IN PLARGE_INTEGER FileOffset,
1640 IN ULONG Length,
1641 IN BOOLEAN Wait,
1642 IN PVOID Buffer
1643 );
1644
1645 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
1646
1647 typedef VOID (NTAPI *PCC_POST_DEFERRED_WRITE) (
1648 IN PVOID Context1,
1649 IN PVOID Context2
1650 );
1651
1652 NTKERNELAPI
1653 VOID
1654 NTAPI
1655 CcDeferWrite (
1656 IN PFILE_OBJECT FileObject,
1657 IN PCC_POST_DEFERRED_WRITE PostRoutine,
1658 IN PVOID Context1,
1659 IN PVOID Context2,
1660 IN ULONG BytesToWrite,
1661 IN BOOLEAN Retrying
1662 );
1663
1664 NTKERNELAPI
1665 VOID
1666 NTAPI
1667 CcFastCopyRead (
1668 IN PFILE_OBJECT FileObject,
1669 IN ULONG FileOffset,
1670 IN ULONG Length,
1671 IN ULONG PageCount,
1672 OUT PVOID Buffer,
1673 OUT PIO_STATUS_BLOCK IoStatus
1674 );
1675
1676 NTKERNELAPI
1677 VOID
1678 NTAPI
1679 CcFastCopyWrite (
1680 IN PFILE_OBJECT FileObject,
1681 IN ULONG FileOffset,
1682 IN ULONG Length,
1683 IN PVOID Buffer
1684 );
1685
1686 NTKERNELAPI
1687 VOID
1688 NTAPI
1689 CcFlushCache (
1690 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
1691 IN PLARGE_INTEGER FileOffset OPTIONAL,
1692 IN ULONG Length,
1693 OUT PIO_STATUS_BLOCK IoStatus OPTIONAL
1694 );
1695
1696 typedef VOID (*PDIRTY_PAGE_ROUTINE) (
1697 IN PFILE_OBJECT FileObject,
1698 IN PLARGE_INTEGER FileOffset,
1699 IN ULONG Length,
1700 IN PLARGE_INTEGER OldestLsn,
1701 IN PLARGE_INTEGER NewestLsn,
1702 IN PVOID Context1,
1703 IN PVOID Context2
1704 );
1705
1706 NTKERNELAPI
1707 LARGE_INTEGER
1708 NTAPI
1709 CcGetDirtyPages (
1710 IN PVOID LogHandle,
1711 IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
1712 IN PVOID Context1,
1713 IN PVOID Context2
1714 );
1715
1716 NTKERNELAPI
1717 PFILE_OBJECT
1718 NTAPI
1719 CcGetFileObjectFromBcb (
1720 IN PVOID Bcb
1721 );
1722
1723 NTKERNELAPI
1724 PFILE_OBJECT
1725 NTAPI
1726 CcGetFileObjectFromSectionPtrs (
1727 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
1728 );
1729
1730 #define CcGetFileSizePointer(FO) ( \
1731 ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
1732 )
1733
1734 #if (VER_PRODUCTBUILD >= 2195)
1735
1736 NTKERNELAPI
1737 LARGE_INTEGER
1738 NTAPI
1739 CcGetFlushedValidData (
1740 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
1741 IN BOOLEAN BcbListHeld
1742 );
1743
1744 #endif /* (VER_PRODUCTBUILD >= 2195) */
1745
1746 NTKERNELAPI
1747 LARGE_INTEGER
1748 CcGetLsnForFileObject (
1749 IN PFILE_OBJECT FileObject,
1750 OUT PLARGE_INTEGER OldestLsn OPTIONAL
1751 );
1752
1753 typedef BOOLEAN (NTAPI *PACQUIRE_FOR_LAZY_WRITE) (
1754 IN PVOID Context,
1755 IN BOOLEAN Wait
1756 );
1757
1758 typedef VOID (NTAPI *PRELEASE_FROM_LAZY_WRITE) (
1759 IN PVOID Context
1760 );
1761
1762 typedef BOOLEAN (NTAPI *PACQUIRE_FOR_READ_AHEAD) (
1763 IN PVOID Context,
1764 IN BOOLEAN Wait
1765 );
1766
1767 typedef VOID (NTAPI *PRELEASE_FROM_READ_AHEAD) (
1768 IN PVOID Context
1769 );
1770
1771 typedef struct _CACHE_MANAGER_CALLBACKS {
1772 PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite;
1773 PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite;
1774 PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead;
1775 PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead;
1776 } CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
1777
1778 NTKERNELAPI
1779 VOID
1780 NTAPI
1781 CcInitializeCacheMap (
1782 IN PFILE_OBJECT FileObject,
1783 IN PCC_FILE_SIZES FileSizes,
1784 IN BOOLEAN PinAccess,
1785 IN PCACHE_MANAGER_CALLBACKS Callbacks,
1786 IN PVOID LazyWriteContext
1787 );
1788
1789 #define CcIsFileCached(FO) ( \
1790 ((FO)->SectionObjectPointer != NULL) && \
1791 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
1792 )
1793
1794 NTKERNELAPI
1795 BOOLEAN
1796 NTAPI
1797 CcIsThereDirtyData (
1798 IN PVPB Vpb
1799 );
1800
1801 NTKERNELAPI
1802 BOOLEAN
1803 NTAPI
1804 CcMapData (
1805 IN PFILE_OBJECT FileObject,
1806 IN PLARGE_INTEGER FileOffset,
1807 IN ULONG Length,
1808 IN BOOLEAN Wait,
1809 OUT PVOID *Bcb,
1810 OUT PVOID *Buffer
1811 );
1812
1813 NTKERNELAPI
1814 VOID
1815 NTAPI
1816 CcMdlRead (
1817 IN PFILE_OBJECT FileObject,
1818 IN PLARGE_INTEGER FileOffset,
1819 IN ULONG Length,
1820 OUT PMDL *MdlChain,
1821 OUT PIO_STATUS_BLOCK IoStatus
1822 );
1823
1824 NTKERNELAPI
1825 VOID
1826 NTAPI
1827 CcMdlReadComplete (
1828 IN PFILE_OBJECT FileObject,
1829 IN PMDL MdlChain
1830 );
1831
1832 NTKERNELAPI
1833 VOID
1834 NTAPI
1835 CcMdlWriteComplete (
1836 IN PFILE_OBJECT FileObject,
1837 IN PLARGE_INTEGER FileOffset,
1838 IN PMDL MdlChain
1839 );
1840
1841 NTKERNELAPI
1842 BOOLEAN
1843 NTAPI
1844 CcPinMappedData (
1845 IN PFILE_OBJECT FileObject,
1846 IN PLARGE_INTEGER FileOffset,
1847 IN ULONG Length,
1848 #if (VER_PRODUCTBUILD >= 2195)
1849 IN ULONG Flags,
1850 #else
1851 IN BOOLEAN Wait,
1852 #endif
1853 IN OUT PVOID *Bcb
1854 );
1855
1856 NTKERNELAPI
1857 BOOLEAN
1858 NTAPI
1859 CcPinRead (
1860 IN PFILE_OBJECT FileObject,
1861 IN PLARGE_INTEGER FileOffset,
1862 IN ULONG Length,
1863 #if (VER_PRODUCTBUILD >= 2195)
1864 IN ULONG Flags,
1865 #else
1866 IN BOOLEAN Wait,
1867 #endif
1868 OUT PVOID *Bcb,
1869 OUT PVOID *Buffer
1870 );
1871
1872 NTKERNELAPI
1873 VOID
1874 NTAPI
1875 CcPrepareMdlWrite (
1876 IN PFILE_OBJECT FileObject,
1877 IN PLARGE_INTEGER FileOffset,
1878 IN ULONG Length,
1879 OUT PMDL *MdlChain,
1880 OUT PIO_STATUS_BLOCK IoStatus
1881 );
1882
1883 NTKERNELAPI
1884 BOOLEAN
1885 NTAPI
1886 CcPreparePinWrite (
1887 IN PFILE_OBJECT FileObject,
1888 IN PLARGE_INTEGER FileOffset,
1889 IN ULONG Length,
1890 IN BOOLEAN Zero,
1891 #if (VER_PRODUCTBUILD >= 2195)
1892 IN ULONG Flags,
1893 #else
1894 IN BOOLEAN Wait,
1895 #endif
1896 OUT PVOID *Bcb,
1897 OUT PVOID *Buffer
1898 );
1899
1900 NTKERNELAPI
1901 BOOLEAN
1902 NTAPI
1903 CcPurgeCacheSection (
1904 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
1905 IN PLARGE_INTEGER FileOffset OPTIONAL,
1906 IN ULONG Length,
1907 IN BOOLEAN UninitializeCacheMaps
1908 );
1909
1910 #define CcReadAhead(FO, FOFF, LEN) ( \
1911 if ((LEN) >= 256) { \
1912 CcScheduleReadAhead((FO), (FOFF), (LEN)); \
1913 } \
1914 )
1915
1916 #if (VER_PRODUCTBUILD >= 2195)
1917
1918 NTKERNELAPI
1919 PVOID
1920 NTAPI
1921 CcRemapBcb (
1922 IN PVOID Bcb
1923 );
1924
1925 #endif /* (VER_PRODUCTBUILD >= 2195) */
1926
1927 NTKERNELAPI
1928 VOID
1929 NTAPI
1930 CcRepinBcb (
1931 IN PVOID Bcb
1932 );
1933
1934 NTKERNELAPI
1935 VOID
1936 NTAPI
1937 CcScheduleReadAhead (
1938 IN PFILE_OBJECT FileObject,
1939 IN PLARGE_INTEGER FileOffset,
1940 IN ULONG Length
1941 );
1942
1943 NTKERNELAPI
1944 VOID
1945 NTAPI
1946 CcSetAdditionalCacheAttributes (
1947 IN PFILE_OBJECT FileObject,
1948 IN BOOLEAN DisableReadAhead,
1949 IN BOOLEAN DisableWriteBehind
1950 );
1951
1952 NTKERNELAPI
1953 VOID
1954 NTAPI
1955 CcSetBcbOwnerPointer (
1956 IN PVOID Bcb,
1957 IN PVOID OwnerPointer
1958 );
1959
1960 NTKERNELAPI
1961 VOID
1962 NTAPI
1963 CcSetDirtyPageThreshold (
1964 IN PFILE_OBJECT FileObject,
1965 IN ULONG DirtyPageThreshold
1966 );
1967
1968 NTKERNELAPI
1969 VOID
1970 NTAPI
1971 CcSetDirtyPinnedData (
1972 IN PVOID BcbVoid,
1973 IN PLARGE_INTEGER Lsn OPTIONAL
1974 );
1975
1976 NTKERNELAPI
1977 VOID
1978 NTAPI
1979 CcSetFileSizes (
1980 IN PFILE_OBJECT FileObject,
1981 IN PCC_FILE_SIZES FileSizes
1982 );
1983
1984 typedef VOID (NTAPI *PFLUSH_TO_LSN) (
1985 IN PVOID LogHandle,
1986 IN PLARGE_INTEGER Lsn
1987 );
1988
1989 NTKERNELAPI
1990 VOID
1991 NTAPI
1992 CcSetLogHandleForFile (
1993 IN PFILE_OBJECT FileObject,
1994 IN PVOID LogHandle,
1995 IN PFLUSH_TO_LSN FlushToLsnRoutine
1996 );
1997
1998 NTKERNELAPI
1999 VOID
2000 NTAPI
2001 CcSetReadAheadGranularity (
2002 IN PFILE_OBJECT FileObject,
2003 IN ULONG Granularity /* default: PAGE_SIZE */
2004 /* allowed: 2^n * PAGE_SIZE */
2005 );
2006
2007 NTKERNELAPI
2008 BOOLEAN
2009 NTAPI
2010 CcUninitializeCacheMap (
2011 IN PFILE_OBJECT FileObject,
2012 IN PLARGE_INTEGER TruncateSize OPTIONAL,
2013 IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL
2014 );
2015
2016 NTKERNELAPI
2017 VOID
2018 NTAPI
2019 CcUnpinData (
2020 IN PVOID Bcb
2021 );
2022
2023 NTKERNELAPI
2024 VOID
2025 NTAPI
2026 CcUnpinDataForThread (
2027 IN PVOID Bcb,
2028 IN ERESOURCE_THREAD ResourceThreadId
2029 );
2030
2031 NTKERNELAPI
2032 VOID
2033 NTAPI
2034 CcUnpinRepinnedBcb (
2035 IN PVOID Bcb,
2036 IN BOOLEAN WriteThrough,
2037 OUT PIO_STATUS_BLOCK IoStatus
2038 );
2039
2040 #if (VER_PRODUCTBUILD >= 2195)
2041
2042 NTKERNELAPI
2043 NTSTATUS
2044 NTAPI
2045 CcWaitForCurrentLazyWriterActivity (
2046 VOID
2047 );
2048
2049 #endif /* (VER_PRODUCTBUILD >= 2195) */
2050
2051 NTKERNELAPI
2052 BOOLEAN
2053 NTAPI
2054 CcZeroData (
2055 IN PFILE_OBJECT FileObject,
2056 IN PLARGE_INTEGER StartOffset,
2057 IN PLARGE_INTEGER EndOffset,
2058 IN BOOLEAN Wait
2059 );
2060
2061 NTKERNELAPI
2062 VOID
2063 NTAPI
2064 ExDisableResourceBoostLite (
2065 IN PERESOURCE Resource
2066 );
2067
2068 NTKERNELAPI
2069 ULONG
2070 NTAPI
2071 ExQueryPoolBlockSize (
2072 IN PVOID PoolBlock,
2073 OUT PBOOLEAN QuotaCharged
2074 );
2075
2076 #define FlagOn(x, f) ((x) & (f))
2077
2078 NTKERNELAPI
2079 VOID
2080 NTAPI
2081 FsRtlAddToTunnelCache (
2082 IN PTUNNEL Cache,
2083 IN ULONGLONG DirectoryKey,
2084 IN PUNICODE_STRING ShortName,
2085 IN PUNICODE_STRING LongName,
2086 IN BOOLEAN KeyByShortName,
2087 IN ULONG DataLength,
2088 IN PVOID Data
2089 );
2090
2091 #if (VER_PRODUCTBUILD >= 2195)
2092
2093 PFILE_LOCK
2094 NTAPI
2095 FsRtlAllocateFileLock (
2096 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
2097 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
2098 );
2099
2100 #endif /* (VER_PRODUCTBUILD >= 2195) */
2101
2102 NTKERNELAPI
2103 PVOID
2104 NTAPI
2105 FsRtlAllocatePool (
2106 IN POOL_TYPE PoolType,
2107 IN ULONG NumberOfBytes
2108 );
2109
2110 NTKERNELAPI
2111 PVOID
2112 NTAPI
2113 FsRtlAllocatePoolWithQuota (
2114 IN POOL_TYPE PoolType,
2115 IN ULONG NumberOfBytes
2116 );
2117
2118 NTKERNELAPI
2119 PVOID
2120 NTAPI
2121 FsRtlAllocatePoolWithQuotaTag (
2122 IN POOL_TYPE PoolType,
2123 IN ULONG NumberOfBytes,
2124 IN ULONG Tag
2125 );
2126
2127 NTKERNELAPI
2128 PVOID
2129 NTAPI
2130 FsRtlAllocatePoolWithTag (
2131 IN POOL_TYPE PoolType,
2132 IN ULONG NumberOfBytes,
2133 IN ULONG Tag
2134 );
2135
2136 NTKERNELAPI
2137 BOOLEAN
2138 NTAPI
2139 FsRtlAreNamesEqual (
2140 IN PUNICODE_STRING Name1,
2141 IN PUNICODE_STRING Name2,
2142 IN BOOLEAN IgnoreCase,
2143 IN PWCHAR UpcaseTable OPTIONAL
2144 );
2145
2146 #define FsRtlAreThereCurrentFileLocks(FL) ( \
2147 ((FL)->FastIoIsQuestionable) \
2148 )
2149
2150 /*
2151 FsRtlCheckLockForReadAccess:
2152
2153 All this really does is pick out the lock parameters from the irp (io stack
2154 location?), get IoGetRequestorProcess, and pass values on to
2155 FsRtlFastCheckLockForRead.
2156 */
2157 NTKERNELAPI
2158 BOOLEAN
2159 NTAPI
2160 FsRtlCheckLockForReadAccess (
2161 IN PFILE_LOCK FileLock,
2162 IN PIRP Irp
2163 );
2164
2165 /*
2166 FsRtlCheckLockForWriteAccess:
2167
2168 All this really does is pick out the lock parameters from the irp (io stack
2169 location?), get IoGetRequestorProcess, and pass values on to
2170 FsRtlFastCheckLockForWrite.
2171 */
2172 NTKERNELAPI
2173 BOOLEAN
2174 NTAPI
2175 FsRtlCheckLockForWriteAccess (
2176 IN PFILE_LOCK FileLock,
2177 IN PIRP Irp
2178 );
2179
2180 typedef
2181 VOID NTAPI
2182 (*POPLOCK_WAIT_COMPLETE_ROUTINE) (
2183 IN PVOID Context,
2184 IN PIRP Irp
2185 );
2186
2187 typedef
2188 VOID NTAPI
2189 (*POPLOCK_FS_PREPOST_IRP) (
2190 IN PVOID Context,
2191 IN PIRP Irp
2192 );
2193
2194 NTKERNELAPI
2195 NTSTATUS
2196 NTAPI
2197 FsRtlCheckOplock (
2198 IN POPLOCK Oplock,
2199 IN PIRP Irp,
2200 IN PVOID Context,
2201 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
2202 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
2203 );
2204
2205 NTKERNELAPI
2206 BOOLEAN
2207 NTAPI
2208 FsRtlCopyRead (
2209 IN PFILE_OBJECT FileObject,
2210 IN PLARGE_INTEGER FileOffset,
2211 IN ULONG Length,
2212 IN BOOLEAN Wait,
2213 IN ULONG LockKey,
2214 OUT PVOID Buffer,
2215 OUT PIO_STATUS_BLOCK IoStatus,
2216 IN PDEVICE_OBJECT DeviceObject
2217 );
2218
2219 NTKERNELAPI
2220 BOOLEAN
2221 NTAPI
2222 FsRtlCopyWrite (
2223 IN PFILE_OBJECT FileObject,
2224 IN PLARGE_INTEGER FileOffset,
2225 IN ULONG Length,
2226 IN BOOLEAN Wait,
2227 IN ULONG LockKey,
2228 IN PVOID Buffer,
2229 OUT PIO_STATUS_BLOCK IoStatus,
2230 IN PDEVICE_OBJECT DeviceObject
2231 );
2232
2233 NTKERNELAPI
2234 BOOLEAN
2235 NTAPI
2236 FsRtlCurrentBatchOplock (
2237 IN POPLOCK Oplock
2238 );
2239
2240 NTKERNELAPI
2241 VOID
2242 NTAPI
2243 FsRtlDeleteKeyFromTunnelCache (
2244 IN PTUNNEL Cache,
2245 IN ULONGLONG DirectoryKey
2246 );
2247
2248 NTKERNELAPI
2249 VOID
2250 NTAPI
2251 FsRtlDeleteTunnelCache (
2252 IN PTUNNEL Cache
2253 );
2254
2255 NTKERNELAPI
2256 VOID
2257 NTAPI
2258 FsRtlDeregisterUncProvider (
2259 IN HANDLE Handle
2260 );
2261
2262 NTKERNELAPI
2263 VOID
2264 NTAPI
2265 FsRtlDissectDbcs (
2266 IN ANSI_STRING Name,
2267 OUT PANSI_STRING FirstPart,
2268 OUT PANSI_STRING RemainingPart
2269 );
2270
2271 NTKERNELAPI
2272 VOID
2273 NTAPI
2274 FsRtlDissectName (
2275 IN UNICODE_STRING Name,
2276 OUT PUNICODE_STRING FirstPart,
2277 OUT PUNICODE_STRING RemainingPart
2278 );
2279
2280 NTKERNELAPI
2281 BOOLEAN
2282 NTAPI
2283 FsRtlDoesDbcsContainWildCards (
2284 IN PANSI_STRING Name
2285 );
2286
2287 NTKERNELAPI
2288 BOOLEAN
2289 NTAPI
2290 FsRtlDoesNameContainWildCards (
2291 IN PUNICODE_STRING Name
2292 );
2293
2294 #define FsRtlEnterFileSystem KeEnterCriticalRegion
2295
2296 #define FsRtlExitFileSystem KeLeaveCriticalRegion
2297
2298 NTKERNELAPI
2299 BOOLEAN
2300 NTAPI
2301 FsRtlFastCheckLockForRead (
2302 IN PFILE_LOCK FileLock,
2303 IN PLARGE_INTEGER FileOffset,
2304 IN PLARGE_INTEGER Length,
2305 IN ULONG Key,
2306 IN PFILE_OBJECT FileObject,
2307 IN PEPROCESS Process
2308 );
2309
2310 NTKERNELAPI
2311 BOOLEAN
2312 NTAPI
2313 FsRtlFastCheckLockForWrite (
2314 IN PFILE_LOCK FileLock,
2315 IN PLARGE_INTEGER FileOffset,
2316 IN PLARGE_INTEGER Length,
2317 IN ULONG Key,
2318 IN PFILE_OBJECT FileObject,
2319 IN PEPROCESS Process
2320 );
2321
2322 #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
2323 FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
2324 )
2325
2326 NTKERNELAPI
2327 NTSTATUS
2328 NTAPI
2329 FsRtlFastUnlockAll (
2330 IN PFILE_LOCK FileLock,
2331 IN PFILE_OBJECT FileObject,
2332 IN PEPROCESS Process,
2333 IN PVOID Context OPTIONAL
2334 );
2335 /* ret: STATUS_RANGE_NOT_LOCKED */
2336
2337 NTKERNELAPI
2338 NTSTATUS
2339 NTAPI
2340 FsRtlFastUnlockAllByKey (
2341 IN PFILE_LOCK FileLock,
2342 IN PFILE_OBJECT FileObject,
2343 IN PEPROCESS Process,
2344 IN ULONG Key,
2345 IN PVOID Context OPTIONAL
2346 );
2347 /* ret: STATUS_RANGE_NOT_LOCKED */
2348
2349 NTKERNELAPI
2350 NTSTATUS
2351 NTAPI
2352 FsRtlFastUnlockSingle (
2353 IN PFILE_LOCK FileLock,
2354 IN PFILE_OBJECT FileObject,
2355 IN PLARGE_INTEGER FileOffset,
2356 IN PLARGE_INTEGER Length,
2357 IN PEPROCESS Process,
2358 IN ULONG Key,
2359 IN PVOID Context OPTIONAL,
2360 IN BOOLEAN AlreadySynchronized
2361 );
2362 /* ret: STATUS_RANGE_NOT_LOCKED */
2363
2364 NTKERNELAPI
2365 BOOLEAN
2366 NTAPI
2367 FsRtlFindInTunnelCache (
2368 IN PTUNNEL Cache,
2369 IN ULONGLONG DirectoryKey,
2370 IN PUNICODE_STRING Name,
2371 OUT PUNICODE_STRING ShortName,
2372 OUT PUNICODE_STRING LongName,
2373 IN OUT PULONG DataLength,
2374 OUT PVOID Data
2375 );
2376
2377 #if (VER_PRODUCTBUILD >= 2195)
2378
2379 NTKERNELAPI
2380 VOID
2381 NTAPI
2382 FsRtlFreeFileLock (
2383 IN PFILE_LOCK FileLock
2384 );
2385
2386 #endif /* (VER_PRODUCTBUILD >= 2195) */
2387
2388 NTKERNELAPI
2389 NTSTATUS
2390 NTAPI
2391 FsRtlGetFileSize (
2392 IN PFILE_OBJECT FileObject,
2393 IN OUT PLARGE_INTEGER FileSize
2394 );
2395
2396 /*
2397 FsRtlGetNextFileLock:
2398
2399 ret: NULL if no more locks
2400
2401 Internals:
2402 FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
2403 FileLock->LastReturnedLock as storage.
2404 LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
2405 list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
2406 calls with Restart = FALSE.
2407 */
2408 NTKERNELAPI
2409 PFILE_LOCK_INFO
2410 NTAPI
2411 FsRtlGetNextFileLock (
2412 IN PFILE_LOCK FileLock,
2413 IN BOOLEAN Restart
2414 );
2415
2416 NTKERNELAPI
2417 VOID
2418 NTAPI
2419 FsRtlInitializeFileLock (
2420 IN PFILE_LOCK FileLock,
2421 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
2422 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
2423 );
2424
2425 NTKERNELAPI
2426 VOID
2427 NTAPI
2428 FsRtlInitializeOplock (
2429 IN OUT POPLOCK Oplock
2430 );
2431
2432 NTKERNELAPI
2433 VOID
2434 NTAPI
2435 FsRtlInitializeTunnelCache (
2436 IN PTUNNEL Cache
2437 );
2438
2439 NTKERNELAPI
2440 BOOLEAN
2441 NTAPI
2442 FsRtlIsNameInExpression (
2443 IN PUNICODE_STRING Expression,
2444 IN PUNICODE_STRING Name,
2445 IN BOOLEAN IgnoreCase,
2446 IN PWCHAR UpcaseTable OPTIONAL
2447 );
2448
2449 NTKERNELAPI
2450 BOOLEAN
2451 NTAPI
2452 FsRtlIsNtstatusExpected (
2453 IN NTSTATUS Ntstatus
2454 );
2455
2456 #define FsRtlIsUnicodeCharacterWild(C) ( \
2457 (((C) >= 0x40) ? \
2458 FALSE : \
2459 FlagOn((*FsRtlLegalAnsiCharacterArray)[(C)], FSRTL_WILD_CHARACTER )) \
2460 )
2461
2462 NTKERNELAPI
2463 BOOLEAN
2464 NTAPI
2465 FsRtlMdlReadComplete (
2466 IN PFILE_OBJECT FileObject,
2467 IN PMDL MdlChain
2468 );
2469
2470 NTKERNELAPI
2471 BOOLEAN
2472 NTAPI
2473 FsRtlMdlReadCompleteDev (
2474 IN PFILE_OBJECT FileObject,
2475 IN PMDL MdlChain,
2476 IN PDEVICE_OBJECT DeviceObject
2477 );
2478
2479 NTKERNELAPI
2480 BOOLEAN
2481 NTAPI
2482 FsRtlMdlWriteComplete (
2483 IN PFILE_OBJECT FileObject,
2484 IN PLARGE_INTEGER FileOffset,
2485 IN PMDL MdlChain
2486 );
2487
2488 NTKERNELAPI
2489 BOOLEAN
2490 NTAPI
2491 FsRtlMdlWriteCompleteDev (
2492 IN PFILE_OBJECT FileObject,
2493 IN PLARGE_INTEGER FileOffset,
2494 IN PMDL MdlChain,
2495 IN PDEVICE_OBJECT DeviceObject
2496 );
2497
2498 NTKERNELAPI
2499 NTSTATUS
2500 NTAPI
2501 FsRtlNormalizeNtstatus (
2502 IN NTSTATUS Exception,
2503 IN NTSTATUS GenericException
2504 );
2505
2506 NTKERNELAPI
2507 VOID
2508 NTAPI
2509 FsRtlNotifyChangeDirectory (
2510 IN PNOTIFY_SYNC NotifySync,
2511 IN PVOID FsContext,
2512 IN PSTRING FullDirectoryName,
2513 IN PLIST_ENTRY NotifyList,
2514 IN BOOLEAN WatchTree,
2515 IN ULONG CompletionFilter,
2516 IN PIRP NotifyIrp
2517 );
2518
2519 NTKERNELAPI
2520 VOID
2521 NTAPI
2522 FsRtlNotifyCleanup (
2523 IN PNOTIFY_SYNC NotifySync,
2524 IN PLIST_ENTRY NotifyList,
2525 IN PVOID FsContext
2526 );
2527
2528 typedef BOOLEAN (*PCHECK_FOR_TRAVERSE_ACCESS) (
2529 IN PVOID NotifyContext,
2530 IN PVOID TargetContext,
2531 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
2532 );
2533
2534 NTKERNELAPI
2535 VOID
2536 NTAPI
2537 FsRtlNotifyFullChangeDirectory (
2538 IN PNOTIFY_SYNC NotifySync,
2539 IN PLIST_ENTRY NotifyList,
2540 IN PVOID FsContext,
2541 IN PSTRING FullDirectoryName,
2542 IN BOOLEAN WatchTree,
2543 IN BOOLEAN IgnoreBuffer,
2544 IN ULONG CompletionFilter,
2545 IN PIRP NotifyIrp,
2546 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
2547 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
2548 );
2549
2550 NTKERNELAPI
2551 VOID
2552 NTAPI
2553 FsRtlNotifyFullReportChange (
2554 IN PNOTIFY_SYNC NotifySync,
2555 IN PLIST_ENTRY NotifyList,
2556 IN PSTRING FullTargetName,
2557 IN USHORT TargetNameOffset,
2558 IN PSTRING StreamName OPTIONAL,
2559 IN PSTRING NormalizedParentName OPTIONAL,
2560 IN ULONG FilterMatch,
2561 IN ULONG Action,
2562 IN PVOID TargetContext
2563 );
2564
2565 NTKERNELAPI
2566 VOID
2567 NTAPI
2568 FsRtlNotifyInitializeSync (
2569 IN PNOTIFY_SYNC NotifySync
2570 );
2571
2572 NTKERNELAPI
2573 VOID
2574 NTAPI
2575 FsRtlNotifyReportChange (
2576 IN PNOTIFY_SYNC NotifySync,
2577 IN PLIST_ENTRY NotifyList,
2578 IN PSTRING FullTargetName,
2579 IN PUSHORT FileNamePartLength,
2580 IN ULONG FilterMatch
2581 );
2582
2583 NTKERNELAPI
2584 VOID
2585 NTAPI
2586 FsRtlNotifyUninitializeSync (
2587 IN PNOTIFY_SYNC NotifySync
2588 );
2589
2590 #if (VER_PRODUCTBUILD >= 2195)
2591
2592 NTKERNELAPI
2593 NTSTATUS
2594 NTAPI
2595 FsRtlNotifyVolumeEvent (
2596 IN PFILE_OBJECT FileObject,
2597 IN ULONG EventCode
2598 );
2599
2600 #endif /* (VER_PRODUCTBUILD >= 2195) */
2601
2602 NTKERNELAPI
2603 NTSTATUS
2604 NTAPI
2605 FsRtlOplockFsctrl (
2606 IN POPLOCK Oplock,
2607 IN PIRP Irp,
2608 IN ULONG OpenCount
2609 );
2610
2611 NTKERNELAPI
2612 BOOLEAN
2613 NTAPI
2614 FsRtlOplockIsFastIoPossible (
2615 IN POPLOCK Oplock
2616 );
2617
2618 /*
2619 FsRtlPrivateLock:
2620
2621 ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
2622
2623 Internals:
2624 -Calls IoCompleteRequest if Irp
2625 -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
2626 */
2627 NTKERNELAPI
2628 BOOLEAN
2629 NTAPI
2630 FsRtlPrivateLock (
2631 IN PFILE_LOCK FileLock,
2632 IN PFILE_OBJECT FileObject,
2633 IN PLARGE_INTEGER FileOffset,
2634 IN PLARGE_INTEGER Length,
2635 IN PEPROCESS Process,
2636 IN ULONG Key,
2637 IN BOOLEAN FailImmediately,
2638 IN BOOLEAN ExclusiveLock,
2639 OUT PIO_STATUS_BLOCK IoStatus,
2640 IN PIRP Irp OPTIONAL,
2641 IN PVOID Context,
2642 IN BOOLEAN AlreadySynchronized
2643 );
2644
2645 /*
2646 FsRtlProcessFileLock:
2647
2648 ret:
2649 -STATUS_INVALID_DEVICE_REQUEST
2650 -STATUS_RANGE_NOT_LOCKED from unlock routines.
2651 -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
2652 (redirected IoStatus->Status).
2653
2654 Internals:
2655 -switch ( Irp->CurrentStackLocation->MinorFunction )
2656 lock: return FsRtlPrivateLock;
2657 unlocksingle: return FsRtlFastUnlockSingle;
2658 unlockall: return FsRtlFastUnlockAll;
2659 unlockallbykey: return FsRtlFastUnlockAllByKey;
2660 default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
2661 return STATUS_INVALID_DEVICE_REQUEST;
2662
2663 -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
2664 -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
2665 */
2666 NTKERNELAPI
2667 NTSTATUS
2668 NTAPI
2669 FsRtlProcessFileLock (
2670 IN PFILE_LOCK FileLock,
2671 IN PIRP Irp,
2672 IN PVOID Context OPTIONAL
2673 );
2674
2675 NTKERNELAPI
2676 NTSTATUS
2677 NTAPI
2678 FsRtlRegisterUncProvider (
2679 IN OUT PHANDLE MupHandle,
2680 IN PUNICODE_STRING RedirectorDeviceName,
2681 IN BOOLEAN MailslotsSupported
2682 );
2683
2684 NTKERNELAPI
2685 VOID
2686 NTAPI
2687 FsRtlUninitializeFileLock (
2688 IN PFILE_LOCK FileLock
2689 );
2690
2691 NTKERNELAPI
2692 VOID
2693 NTAPI
2694 FsRtlUninitializeOplock (
2695 IN OUT POPLOCK Oplock
2696 );
2697
2698 NTSYSAPI
2699 VOID
2700 NTAPI
2701 HalDisplayString (
2702 IN PCHAR String
2703 );
2704
2705 NTSYSAPI
2706 VOID
2707 NTAPI
2708 HalQueryRealTimeClock (
2709 IN OUT PTIME_FIELDS TimeFields
2710 );
2711
2712 NTSYSAPI
2713 VOID
2714 NTAPI
2715 HalSetRealTimeClock (
2716 IN PTIME_FIELDS TimeFields
2717 );
2718
2719 #define InitializeMessageHeader(m, l, t) { \
2720 (m)->Length = (USHORT)(l); \
2721 (m)->DataLength = (USHORT)(l - sizeof( LPC_MESSAGE )); \
2722 (m)->MessageType = (USHORT)(t); \
2723 (m)->DataInfoOffset = 0; \
2724 }
2725
2726 NTKERNELAPI
2727 VOID
2728 NTAPI
2729 IoAcquireVpbSpinLock (
2730 OUT PKIRQL Irql
2731 );
2732
2733 NTKERNELAPI
2734 NTSTATUS
2735 NTAPI
2736 IoCheckDesiredAccess (
2737 IN OUT PACCESS_MASK DesiredAccess,
2738 IN ACCESS_MASK GrantedAccess
2739 );
2740
2741 NTKERNELAPI
2742 NTSTATUS
2743 NTAPI
2744 IoCheckEaBufferValidity (
2745 IN PFILE_FULL_EA_INFORMATION EaBuffer,
2746 IN ULONG EaLength,
2747 OUT PULONG ErrorOffset
2748 );
2749
2750 NTKERNELAPI
2751 NTSTATUS
2752 NTAPI
2753 IoCheckFunctionAccess (
2754 IN ACCESS_MASK GrantedAccess,
2755 IN UCHAR MajorFunction,
2756 IN UCHAR MinorFunction,
2757 IN ULONG IoControlCode,
2758 IN PFILE_INFORMATION_CLASS FileInformationClass OPTIONAL,
2759 IN PFS_INFORMATION_CLASS FsInformationClass OPTIONAL
2760 );
2761
2762 #if (VER_PRODUCTBUILD >= 2195)
2763
2764 NTKERNELAPI
2765 NTSTATUS
2766 NTAPI
2767 IoCheckQuotaBufferValidity (
2768 IN PFILE_QUOTA_INFORMATION QuotaBuffer,
2769 IN ULONG QuotaLength,
2770 OUT PULONG ErrorOffset
2771 );
2772
2773 #endif /* (VER_PRODUCTBUILD >= 2195) */
2774
2775 NTKERNELAPI
2776 PFILE_OBJECT
2777 NTAPI
2778 IoCreateStreamFileObject (
2779 IN PFILE_OBJECT FileObject OPTIONAL,
2780 IN PDEVICE_OBJECT DeviceObject OPTIONAL
2781 );
2782
2783 #if (VER_PRODUCTBUILD >= 2195)
2784
2785 NTKERNELAPI
2786 PFILE_OBJECT
2787 NTAPI
2788 IoCreateStreamFileObjectLite (
2789 IN PFILE_OBJECT FileObject OPTIONAL,
2790 IN PDEVICE_OBJECT DeviceObject OPTIONAL
2791 );
2792
2793 #endif /* (VER_PRODUCTBUILD >= 2195) */
2794
2795 NTKERNELAPI
2796 BOOLEAN
2797 NTAPI
2798 IoFastQueryNetworkAttributes (
2799 IN POBJECT_ATTRIBUTES ObjectAttributes,
2800 IN ACCESS_MASK DesiredAccess,
2801 IN ULONG OpenOptions,
2802 OUT PIO_STATUS_BLOCK IoStatus,
2803 OUT PFILE_NETWORK_OPEN_INFORMATION Buffer
2804 );
2805
2806 NTKERNELAPI
2807 PDEVICE_OBJECT
2808 NTAPI
2809 IoGetAttachedDevice (
2810 IN PDEVICE_OBJECT DeviceObject
2811 );
2812
2813 NTKERNELAPI
2814 PDEVICE_OBJECT
2815 NTAPI
2816 IoGetBaseFileSystemDeviceObject (
2817 IN PFILE_OBJECT FileObject
2818 );
2819
2820 NTKERNELAPI
2821 PEPROCESS
2822 NTAPI
2823 IoGetRequestorProcess (
2824 IN PIRP Irp
2825 );
2826
2827 #if (VER_PRODUCTBUILD >= 2195)
2828
2829 NTKERNELAPI
2830 ULONG
2831 NTAPI
2832 IoGetRequestorProcessId (
2833 IN PIRP Irp
2834 );
2835
2836 #endif /* (VER_PRODUCTBUILD >= 2195) */
2837
2838 NTKERNELAPI
2839 PIRP
2840 NTAPI
2841 IoGetTopLevelIrp (
2842 VOID
2843 );
2844
2845 #define IoIsFileOpenedExclusively(FileObject) ( \
2846 (BOOLEAN) !( \
2847 (FileObject)->SharedRead || \
2848 (FileObject)->SharedWrite || \
2849 (FileObject)->SharedDelete \
2850 ) \
2851 )
2852
2853 NTKERNELAPI
2854 BOOLEAN
2855 NTAPI
2856 IoIsOperationSynchronous (
2857 IN PIRP Irp
2858 );
2859
2860 NTKERNELAPI
2861 BOOLEAN
2862 NTAPI
2863 IoIsSystemThread (
2864 IN PETHREAD Thread
2865 );
2866
2867 #if (VER_PRODUCTBUILD >= 2195)
2868
2869 NTKERNELAPI
2870 BOOLEAN
2871 NTAPI
2872 IoIsValidNameGraftingBuffer (
2873 IN PIRP Irp,
2874 IN PREPARSE_DATA_BUFFER ReparseBuffer
2875 );
2876
2877 #endif /* (VER_PRODUCTBUILD >= 2195) */
2878
2879 NTKERNELAPI
2880 NTSTATUS
2881 NTAPI
2882 IoPageRead (
2883 IN PFILE_OBJECT FileObject,
2884 IN PMDL Mdl,
2885 IN PLARGE_INTEGER Offset,
2886 IN PKEVENT Event,
2887 OUT PIO_STATUS_BLOCK IoStatusBlock
2888 );
2889
2890 NTKERNELAPI
2891 NTSTATUS
2892 NTAPI
2893 IoQueryFileInformation (
2894 IN PFILE_OBJECT FileObject,
2895 IN FILE_INFORMATION_CLASS FileInformationClass,
2896 IN ULONG Length,
2897 OUT PVOID FileInformation,
2898 OUT PULONG ReturnedLength
2899 );
2900
2901 NTKERNELAPI
2902 NTSTATUS
2903 NTAPI
2904 IoQueryVolumeInformation (
2905 IN PFILE_OBJECT FileObject,
2906 IN FS_INFORMATION_CLASS FsInformationClass,
2907 IN ULONG Length,
2908 OUT PVOID FsInformation,
2909 OUT PULONG ReturnedLength
2910 );
2911
2912 NTKERNELAPI
2913 VOID
2914 NTAPI
2915 IoRegisterFileSystem (
2916 IN OUT PDEVICE_OBJECT DeviceObject
2917 );
2918
2919 #if (VER_PRODUCTBUILD >= 1381)
2920
2921 typedef VOID (NTAPI *PDRIVER_FS_NOTIFICATION) (
2922 IN PDEVICE_OBJECT DeviceObject,
2923 IN BOOLEAN DriverActive
2924 );
2925
2926 NTKERNELAPI
2927 NTSTATUS
2928 NTAPI
2929 IoRegisterFsRegistrationChange (
2930 IN PDRIVER_OBJECT DriverObject,
2931 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
2932 );
2933
2934 #endif /* (VER_PRODUCTBUILD >= 1381) */
2935
2936 NTKERNELAPI
2937 VOID
2938 NTAPI
2939 IoReleaseVpbSpinLock (
2940 IN KIRQL Irql
2941 );
2942
2943 NTKERNELAPI
2944 VOID
2945 NTAPI
2946 IoSetDeviceToVerify (
2947 IN PETHREAD Thread,
2948 IN PDEVICE_OBJECT DeviceObject
2949 );
2950
2951 NTKERNELAPI
2952 NTSTATUS
2953 NTAPI
2954 IoSetInformation (
2955 IN PFILE_OBJECT FileObject,
2956 IN FILE_INFORMATION_CLASS FileInformationClass,
2957 IN ULONG Length,
2958 IN PVOID FileInformation
2959 );
2960
2961 NTKERNELAPI
2962 VOID
2963 NTAPI
2964 IoSetTopLevelIrp (
2965 IN PIRP Irp
2966 );
2967
2968 NTKERNELAPI
2969 NTSTATUS
2970 NTAPI
2971 IoSynchronousPageWrite (
2972 IN PFILE_OBJECT FileObject,
2973 IN PMDL Mdl,
2974 IN PLARGE_INTEGER FileOffset,
2975 IN PKEVENT Event,
2976 OUT PIO_STATUS_BLOCK IoStatusBlock
2977 );
2978
2979 NTKERNELAPI
2980 PEPROCESS
2981 NTAPI
2982 IoThreadToProcess (
2983 IN PETHREAD Thread
2984 );
2985
2986 NTKERNELAPI
2987 VOID
2988 NTAPI
2989 IoUnregisterFileSystem (
2990 IN OUT PDEVICE_OBJECT DeviceObject
2991 );
2992
2993 #if (VER_PRODUCTBUILD >= 1381)
2994
2995 NTKERNELAPI
2996 NTSTATUS
2997 NTAPI
2998 IoUnregisterFsRegistrationChange (
2999 IN PDRIVER_OBJECT DriverObject,
3000 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
3001 );
3002
3003 #endif /* (VER_PRODUCTBUILD >= 1381) */
3004
3005 NTKERNELAPI
3006 NTSTATUS
3007 NTAPI
3008 IoVerifyVolume (
3009 IN PDEVICE_OBJECT DeviceObject,
3010 IN BOOLEAN AllowRawMount
3011 );
3012
3013 NTKERNELAPI
3014 VOID
3015 NTAPI
3016 KeAttachProcess (
3017 IN PEPROCESS Process
3018 );
3019
3020 NTKERNELAPI
3021 VOID
3022 NTAPI
3023 KeDetachProcess (
3024 VOID
3025 );
3026
3027 NTKERNELAPI
3028 VOID
3029 NTAPI
3030 KeInitializeQueue (
3031 IN PRKQUEUE Queue,
3032 IN ULONG Count OPTIONAL
3033 );
3034
3035 NTKERNELAPI
3036 LONG
3037 NTAPI
3038 KeInsertHeadQueue (
3039 IN PRKQUEUE Queue,
3040 IN PLIST_ENTRY Entry
3041 );
3042
3043 NTKERNELAPI
3044 LONG
3045 NTAPI
3046 KeInsertQueue (
3047 IN PRKQUEUE Queue,
3048 IN PLIST_ENTRY Entry
3049 );
3050
3051 NTKERNELAPI
3052 BOOLEAN
3053 NTAPI
3054 KeInsertQueueApc (
3055 IN PKAPC Apc,
3056 IN PVOID SystemArgument1,
3057 IN PVOID SystemArgument2,
3058 IN KPRIORITY PriorityBoost
3059 );
3060
3061 NTKERNELAPI
3062 LONG
3063 NTAPI
3064 KeReadStateQueue (
3065 IN PRKQUEUE Queue
3066 );
3067
3068 NTKERNELAPI
3069 PLIST_ENTRY
3070 NTAPI
3071 KeRemoveQueue (
3072 IN PRKQUEUE Queue,
3073 IN KPROCESSOR_MODE WaitMode,
3074 IN PLARGE_INTEGER Timeout OPTIONAL
3075 );
3076
3077 NTKERNELAPI
3078 PLIST_ENTRY
3079 NTAPI
3080 KeRundownQueue (
3081 IN PRKQUEUE Queue
3082 );
3083
3084 #if (VER_PRODUCTBUILD >= 2195)
3085
3086 NTKERNELAPI
3087 VOID
3088 NTAPI
3089 KeStackAttachProcess (
3090 IN PKPROCESS Process,
3091 OUT PKAPC_STATE ApcState
3092 );
3093
3094 NTKERNELAPI
3095 VOID
3096 NTAPI
3097 KeUnstackDetachProcess (
3098 IN PKAPC_STATE ApcState
3099 );
3100
3101 #endif /* (VER_PRODUCTBUILD >= 2195) */
3102
3103 NTKERNELAPI
3104 BOOLEAN
3105 NTAPI
3106 MmCanFileBeTruncated (
3107 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
3108 IN PLARGE_INTEGER NewFileSize
3109 );
3110
3111 NTKERNELAPI
3112 BOOLEAN
3113 NTAPI
3114 MmFlushImageSection (
3115 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
3116 IN MMFLUSH_TYPE FlushType
3117 );
3118
3119 NTKERNELAPI
3120 BOOLEAN
3121 NTAPI
3122 MmForceSectionClosed (
3123 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
3124 IN BOOLEAN DelayClose
3125 );
3126
3127 #if (VER_PRODUCTBUILD >= 1381)
3128
3129 NTKERNELAPI
3130 BOOLEAN
3131 NTAPI
3132 MmIsRecursiveIoFault (
3133 VOID
3134 );
3135
3136 #else
3137
3138 #define MmIsRecursiveIoFault() ( \
3139 (PsGetCurrentThread()->DisablePageFaultClustering) | \
3140 (PsGetCurrentThread()->ForwardClusterOnly) \
3141 )
3142
3143 #endif
3144
3145 NTKERNELAPI
3146 NTSTATUS
3147 NTAPI
3148 MmMapViewOfSection (
3149 IN PVOID SectionObject,
3150 IN PEPROCESS Process,
3151 IN OUT PVOID *BaseAddress,
3152 IN ULONG ZeroBits,
3153 IN ULONG CommitSize,
3154 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL,
3155 IN OUT PULONG ViewSize,
3156 IN SECTION_INHERIT InheritDisposition,
3157 IN ULONG AllocationType,
3158 IN ULONG Protect
3159 );
3160
3161 NTKERNELAPI
3162 BOOLEAN
3163 NTAPI
3164 MmSetAddressRangeModified (
3165 IN PVOID Address,
3166 IN ULONG Length
3167 );
3168
3169 NTKERNELAPI
3170 NTSTATUS
3171 NTAPI
3172 ObCreateObject (
3173 IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL,
3174 IN POBJECT_TYPE ObjectType,
3175 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
3176 IN KPROCESSOR_MODE AccessMode,
3177 IN OUT PVOID ParseContext OPTIONAL,
3178 IN ULONG ObjectSize,
3179 IN ULONG PagedPoolCharge OPTIONAL,
3180 IN ULONG NonPagedPoolCharge OPTIONAL,
3181 OUT PVOID *Object
3182 );
3183
3184 NTKERNELAPI
3185 ULONG
3186 NTAPI
3187 ObGetObjectPointerCount (
3188 IN PVOID Object
3189 );
3190
3191 NTKERNELAPI
3192 NTSTATUS
3193 NTAPI
3194 ObInsertObject (
3195 IN PVOID Object,
3196 IN PACCESS_STATE PassedAccessState OPTIONAL,
3197 IN ACCESS_MASK DesiredAccess,
3198 IN ULONG AdditionalReferences,
3199 OUT PVOID *ReferencedObject OPTIONAL,
3200 OUT PHANDLE Handle
3201 );
3202
3203 NTKERNELAPI
3204 VOID
3205 NTAPI
3206 ObMakeTemporaryObject (
3207 IN PVOID Object
3208 );
3209
3210 NTKERNELAPI
3211 NTSTATUS
3212 NTAPI
3213 ObOpenObjectByPointer (
3214 IN PVOID Object,
3215 IN ULONG HandleAttributes,
3216 IN PACCESS_STATE PassedAccessState OPTIONAL,
3217 IN ACCESS_MASK DesiredAccess OPTIONAL,
3218 IN POBJECT_TYPE ObjectType OPTIONAL,
3219 IN KPROCESSOR_MODE AccessMode,
3220 OUT PHANDLE Handle
3221 );
3222
3223 NTKERNELAPI
3224 NTSTATUS
3225 NTAPI
3226 ObQueryNameString (
3227 IN PVOID Object,
3228 OUT POBJECT_NAME_INFORMATION ObjectNameInfo,
3229 IN ULONG Length,
3230 OUT PULONG ReturnLength
3231 );
3232
3233 NTKERNELAPI
3234 NTSTATUS
3235 NTAPI
3236 ObQueryObjectAuditingByHandle (
3237 IN HANDLE Handle,
3238 OUT PBOOLEAN GenerateOnClose
3239 );
3240
3241 NTKERNELAPI
3242 NTSTATUS
3243 NTAPI
3244 ObReferenceObjectByName (
3245 IN PUNICODE_STRING ObjectName,
3246 IN ULONG Attributes,
3247 IN PACCESS_STATE PassedAccessState OPTIONAL,
3248 IN ACCESS_MASK DesiredAccess OPTIONAL,
3249 IN POBJECT_TYPE ObjectType,
3250 IN KPROCESSOR_MODE AccessMode,
3251 IN OUT PVOID ParseContext OPTIONAL,
3252 OUT PVOID *Object
3253 );
3254
3255 NTKERNELAPI
3256 VOID
3257 NTAPI
3258 PsChargePoolQuota (
3259 IN PEPROCESS Process,
3260 IN POOL_TYPE PoolType,
3261 IN ULONG Amount
3262 );
3263
3264 #define PsDereferenceImpersonationToken(T) \
3265 {if (ARGUMENT_PRESENT(T)) { \
3266 (ObDereferenceObject((T))); \
3267 } else { \
3268 ; \
3269 } \
3270 }
3271
3272 #define PsDereferencePrimaryToken(T) (ObDereferenceObject((T)))
3273
3274 NTKERNELAPI
3275 ULONGLONG
3276 NTAPI
3277 PsGetProcessExitTime (
3278 VOID
3279 );
3280
3281 NTKERNELAPI
3282 BOOLEAN
3283 NTAPI
3284 PsIsThreadTerminating (
3285 IN PETHREAD Thread
3286 );
3287
3288 NTKERNELAPI
3289 NTSTATUS
3290 NTAPI
3291 PsLookupProcessByProcessId (
3292 IN HANDLE ProcessId,
3293 OUT PEPROCESS *Process
3294 );
3295
3296 NTKERNELAPI
3297 NTSTATUS
3298 NTAPI
3299 PsLookupProcessThreadByCid (
3300 IN PCLIENT_ID Cid,
3301 OUT PEPROCESS *Process OPTIONAL,
3302 OUT PETHREAD *Thread
3303 );
3304
3305 NTKERNELAPI
3306 NTSTATUS
3307 NTAPI
3308 PsLookupThreadByThreadId (
3309 IN HANDLE UniqueThreadId,
3310 OUT PETHREAD *Thread
3311 );
3312
3313 NTKERNELAPI
3314 PACCESS_TOKEN
3315 NTAPI
3316 PsReferenceImpersonationToken (
3317 IN PETHREAD Thread,
3318 OUT PBOOLEAN CopyOnUse,
3319 OUT PBOOLEAN EffectiveOnly,
3320 OUT PSECURITY_IMPERSONATION_LEVEL Level
3321 );
3322
3323 NTKERNELAPI
3324 HANDLE
3325 NTAPI
3326 PsReferencePrimaryToken (
3327 IN PEPROCESS Process
3328 );
3329
3330 NTKERNELAPI
3331 VOID
3332 NTAPI
3333 PsReturnPoolQuota (
3334 IN PEPROCESS Process,
3335 IN POOL_TYPE PoolType,
3336 IN ULONG Amount
3337 );
3338
3339 NTKERNELAPI
3340 VOID
3341 NTAPI
3342 PsRevertToSelf (
3343 VOID
3344 );
3345
3346 NTSYSAPI
3347 NTSTATUS
3348 NTAPI
3349 RtlAbsoluteToSelfRelativeSD (
3350 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
3351 IN OUT PSECURITY_DESCRIPTOR_RELATIVE SelfRelativeSecurityDescriptor,
3352 IN PULONG BufferLength
3353 );
3354
3355 NTSYSAPI
3356 PVOID
3357 NTAPI
3358 RtlAllocateHeap (
3359 IN HANDLE HeapHandle,
3360 IN ULONG Flags,
3361 IN ULONG Size
3362 );
3363
3364 NTSYSAPI
3365 NTSTATUS
3366 NTAPI
3367 RtlCompressBuffer (
3368 IN USHORT CompressionFormatAndEngine,
3369 IN PUCHAR UncompressedBuffer,
3370 IN ULONG UncompressedBufferSize,
3371 OUT PUCHAR CompressedBuffer,
3372 IN ULONG CompressedBufferSize,
3373 IN ULONG UncompressedChunkSize,
3374 OUT PULONG FinalCompressedSize,
3375 IN PVOID WorkSpace
3376 );
3377
3378 NTSYSAPI
3379 NTSTATUS
3380 NTAPI
3381 RtlCompressChunks (
3382 IN PUCHAR UncompressedBuffer,
3383 IN ULONG UncompressedBufferSize,
3384 OUT PUCHAR CompressedBuffer,
3385 IN ULONG CompressedBufferSize,
3386 IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo,
3387 IN ULONG CompressedDataInfoLength,
3388 IN PVOID WorkSpace
3389 );
3390
3391 NTSYSAPI
3392 NTSTATUS
3393 NTAPI
3394 RtlConvertSidToUnicodeString (
3395 OUT PUNICODE_STRING DestinationString,
3396 IN PSID Sid,
3397 IN BOOLEAN AllocateDestinationString
3398 );
3399
3400 NTSYSAPI
3401 NTSTATUS
3402 NTAPI
3403 RtlCopySid (
3404 IN ULONG Length,
3405 IN PSID Destination,
3406 IN PSID Source
3407 );
3408
3409 NTSYSAPI
3410 NTSTATUS
3411 NTAPI
3412 RtlDecompressBuffer (
3413 IN USHORT CompressionFormat,
3414 OUT PUCHAR UncompressedBuffer,
3415 IN ULONG UncompressedBufferSize,
3416 IN PUCHAR CompressedBuffer,
3417 IN ULONG CompressedBufferSize,
3418 OUT PULONG FinalUncompressedSize
3419 );
3420
3421 NTSYSAPI
3422 NTSTATUS
3423 NTAPI
3424 RtlDecompressChunks (
3425 OUT PUCHAR UncompressedBuffer,
3426 IN ULONG UncompressedBufferSize,
3427 IN PUCHAR CompressedBuffer,
3428 IN ULONG CompressedBufferSize,
3429 IN PUCHAR CompressedTail,
3430 IN ULONG CompressedTailSize,
3431 IN PCOMPRESSED_DATA_INFO CompressedDataInfo
3432 );
3433
3434 NTSYSAPI
3435 NTSTATUS
3436 NTAPI
3437 RtlDecompressFragment (
3438 IN USHORT CompressionFormat,
3439 OUT PUCHAR UncompressedFragment,
3440 IN ULONG UncompressedFragmentSize,
3441 IN PUCHAR CompressedBuffer,
3442 IN ULONG CompressedBufferSize,
3443 IN ULONG FragmentOffset,
3444 OUT PULONG FinalUncompressedSize,
3445 IN PVOID WorkSpace
3446 );
3447
3448 NTSYSAPI
3449 NTSTATUS
3450 NTAPI
3451 RtlDescribeChunk (
3452 IN USHORT CompressionFormat,
3453 IN OUT PUCHAR *CompressedBuffer,
3454 IN PUCHAR EndOfCompressedBufferPlus1,
3455 OUT PUCHAR *ChunkBuffer,
3456 OUT PULONG ChunkSize
3457 );
3458
3459 NTSYSAPI
3460 BOOLEAN
3461 NTAPI
3462 RtlEqualSid (
3463 IN PSID Sid1,
3464 IN PSID Sid2
3465 );
3466
3467 NTSYSAPI
3468 VOID
3469 NTAPI
3470 RtlFillMemoryUlong (
3471 IN PVOID Destination,
3472 IN ULONG Length,
3473 IN ULONG Fill
3474 );
3475
3476 NTSYSAPI
3477 BOOLEAN
3478 NTAPI
3479 RtlFreeHeap (
3480 IN HANDLE HeapHandle,
3481 IN ULONG Flags,
3482 IN PVOID P
3483 );
3484
3485 NTSYSAPI
3486 VOID
3487 NTAPI
3488 RtlGenerate8dot3Name (
3489 IN PUNICODE_STRING Name,
3490 IN BOOLEAN AllowExtendedCharacters,
3491 IN OUT PGENERATE_NAME_CONTEXT Context,
3492 OUT PUNICODE_STRING Name8dot3
3493 );
3494
3495 NTSYSAPI
3496 NTSTATUS
3497 NTAPI
3498 RtlGetCompressionWorkSpaceSize (
3499 IN USHORT CompressionFormatAndEngine,
3500 OUT PULONG CompressBufferWorkSpaceSize,
3501 OUT PULONG CompressFragmentWorkSpaceSize
3502 );
3503
3504 NTSYSAPI
3505 NTSTATUS
3506 NTAPI
3507 RtlGetDaclSecurityDescriptor (
3508 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
3509 OUT PBOOLEAN DaclPresent,
3510 OUT PACL *Dacl,
3511 OUT PBOOLEAN DaclDefaulted
3512 );
3513
3514 NTSYSAPI
3515 NTSTATUS
3516 NTAPI
3517 RtlGetGroupSecurityDescriptor (
3518 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
3519 OUT PSID *Group,
3520 OUT PBOOLEAN GroupDefaulted
3521 );
3522
3523 NTSYSAPI
3524 NTSTATUS
3525 NTAPI
3526 RtlGetOwnerSecurityDescriptor (
3527 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
3528 OUT PSID *Owner,
3529 OUT PBOOLEAN OwnerDefaulted
3530 );
3531
3532 NTSYSAPI
3533 NTSTATUS
3534 NTAPI
3535 RtlInitializeSid (
3536 IN OUT PSID Sid,
3537 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
3538 IN UCHAR SubAuthorityCount
3539 );
3540
3541 NTSYSAPI
3542 BOOLEAN
3543 NTAPI
3544 RtlIsNameLegalDOS8Dot3 (
3545 IN PUNICODE_STRING UnicodeName,
3546 IN PANSI_STRING AnsiName,
3547 PBOOLEAN Unknown
3548 );
3549
3550 NTSYSAPI
3551 ULONG
3552 NTAPI
3553 RtlLengthRequiredSid (
3554 IN UCHAR SubAuthorityCount
3555 );
3556
3557 NTSYSAPI
3558 ULONG
3559 NTAPI
3560 RtlLengthSid (
3561 IN PSID Sid
3562 );
3563
3564 NTSYSAPI
3565 ULONG
3566 NTAPI
3567 RtlNtStatusToDosError (
3568 IN NTSTATUS Status
3569 );
3570
3571 NTSYSAPI
3572 NTSTATUS
3573 NTAPI
3574 RtlReserveChunk (
3575 IN USHORT CompressionFormat,
3576 IN OUT PUCHAR *CompressedBuffer,
3577 IN PUCHAR EndOfCompressedBufferPlus1,
3578 OUT PUCHAR *ChunkBuffer,
3579 IN ULONG ChunkSize
3580 );
3581
3582 NTSYSAPI
3583 VOID
3584 NTAPI
3585 RtlSecondsSince1970ToTime (
3586 IN ULONG SecondsSince1970,
3587 OUT PLARGE_INTEGER Time
3588 );
3589
3590 #if (VER_PRODUCTBUILD >= 2195)
3591
3592 NTSYSAPI
3593 NTSTATUS
3594 NTAPI
3595 RtlSelfRelativeToAbsoluteSD (
3596 IN PSECURITY_DESCRIPTOR_RELATIVE SelfRelativeSD,
3597 OUT PSECURITY_DESCRIPTOR AbsoluteSD,
3598 IN PULONG AbsoluteSDSize,
3599 IN PACL Dacl,
3600 IN PULONG DaclSize,
3601 IN PACL Sacl,
3602 IN PULONG SaclSize,
3603 IN PSID Owner,
3604 IN PULONG OwnerSize,
3605 IN PSID PrimaryGroup,
3606 IN PULONG PrimaryGroupSize
3607 );
3608
3609 #endif /* (VER_PRODUCTBUILD >= 2195) */
3610
3611 NTSYSAPI
3612 NTSTATUS
3613 NTAPI
3614 RtlSetGroupSecurityDescriptor (
3615 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
3616 IN PSID Group,
3617 IN BOOLEAN GroupDefaulted
3618 );
3619
3620 NTSYSAPI
3621 NTSTATUS
3622 NTAPI
3623 RtlSetOwnerSecurityDescriptor (
3624 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
3625 IN PSID Owner,
3626 IN BOOLEAN OwnerDefaulted
3627 );
3628
3629 NTSYSAPI
3630 NTSTATUS
3631 NTAPI
3632 RtlSetSaclSecurityDescriptor (
3633 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
3634 IN BOOLEAN SaclPresent,
3635 IN PACL Sacl,
3636 IN BOOLEAN SaclDefaulted
3637 );
3638
3639 NTSYSAPI
3640 PUCHAR
3641 NTAPI
3642 RtlSubAuthorityCountSid (
3643 IN PSID Sid
3644 );
3645
3646 NTSYSAPI
3647 PULONG
3648 NTAPI
3649 RtlSubAuthoritySid (
3650 IN PSID Sid,
3651 IN ULONG SubAuthority
3652 );
3653
3654 NTSYSAPI
3655 BOOLEAN
3656 NTAPI
3657 RtlValidSid (
3658 IN PSID Sid
3659 );
3660
3661 NTKERNELAPI
3662 NTSTATUS
3663 NTAPI
3664 SeAppendPrivileges (
3665 PACCESS_STATE AccessState,
3666 PPRIVILEGE_SET Privileges
3667 );
3668
3669 NTKERNELAPI
3670 BOOLEAN
3671 NTAPI
3672 SeAuditingFileEvents (
3673 IN BOOLEAN AccessGranted,
3674 IN PSECURITY_DESCRIPTOR SecurityDescriptor
3675 );
3676
3677 NTKERNELAPI
3678 BOOLEAN
3679 NTAPI
3680 SeAuditingFileOrGlobalEvents (
3681 IN BOOLEAN AccessGranted,
3682 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
3683 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
3684 );
3685
3686 NTKERNELAPI
3687 VOID
3688 NTAPI
3689 SeCaptureSubjectContext (
3690 OUT PSECURITY_SUBJECT_CONTEXT SubjectContext
3691 );
3692
3693 NTKERNELAPI
3694 NTSTATUS
3695 NTAPI
3696 SeCreateAccessState (
3697 OUT PACCESS_STATE AccessState,
3698 IN PVOID AuxData,
3699 IN ACCESS_MASK AccessMask,
3700 IN PGENERIC_MAPPING Mapping
3701 );
3702
3703 NTKERNELAPI
3704 NTSTATUS
3705 NTAPI
3706 SeCreateClientSecurity (
3707 IN PETHREAD Thread,
3708 IN PSECURITY_QUALITY_OF_SERVICE QualityOfService,
3709 IN BOOLEAN RemoteClient,
3710 OUT PSECURITY_CLIENT_CONTEXT ClientContext
3711 );
3712
3713 #if (VER_PRODUCTBUILD >= 2195)
3714
3715 NTKERNELAPI
3716 NTSTATUS
3717 NTAPI
3718 SeCreateClientSecurityFromSubjectContext (
3719 IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
3720 IN PSECURITY_QUALITY_OF_SERVICE QualityOfService,
3721 IN BOOLEAN ServerIsRemote,
3722 OUT PSECURITY_CLIENT_CONTEXT ClientContext
3723 );
3724
3725 #endif /* (VER_PRODUCTBUILD >= 2195) */
3726
3727 #define SeDeleteClientSecurity(C) { \
3728 if (SeTokenType((C)->ClientToken) == TokenPrimary) { \
3729 PsDereferencePrimaryToken( (C)->ClientToken ); \
3730 } else { \
3731 PsDereferenceImpersonationToken( (C)->ClientToken ); \
3732 } \
3733 }
3734
3735 NTKERNELAPI
3736 VOID
3737 NTAPI
3738 SeDeleteObjectAuditAlarm (
3739 IN PVOID Object,
3740 IN HANDLE Handle
3741 );
3742
3743 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
3744
3745 NTKERNELAPI
3746 VOID
3747 NTAPI
3748 SeFreePrivileges (
3749 IN PPRIVILEGE_SET Privileges
3750 );
3751
3752 NTKERNELAPI
3753 VOID
3754 NTAPI
3755 SeImpersonateClient (
3756 IN PSECURITY_CLIENT_CONTEXT ClientContext,
3757 IN PETHREAD ServerThread OPTIONAL
3758 );
3759
3760 #if (VER_PRODUCTBUILD >= 2195)
3761
3762 NTKERNELAPI
3763 NTSTATUS
3764 NTAPI
3765 SeImpersonateClientEx (
3766 IN PSECURITY_CLIENT_CONTEXT ClientContext,
3767 IN PETHREAD ServerThread OPTIONAL
3768 );
3769
3770 #endif /* (VER_PRODUCTBUILD >= 2195) */
3771
3772 NTKERNELAPI
3773 VOID
3774 NTAPI
3775 SeLockSubjectContext (
3776 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
3777 );
3778
3779 NTKERNELAPI
3780 NTSTATUS
3781 NTAPI
3782 SeMarkLogonSessionForTerminationNotification (
3783 IN PLUID LogonId
3784 );
3785
3786 NTKERNELAPI
3787 VOID
3788 NTAPI
3789 SeOpenObjectAuditAlarm (
3790 IN PUNICODE_STRING ObjectTypeName,
3791 IN PVOID Object OPTIONAL,
3792 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
3793 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
3794 IN PACCESS_STATE AccessState,
3795 IN BOOLEAN ObjectCreated,
3796 IN BOOLEAN AccessGranted,
3797 IN KPROCESSOR_MODE AccessMode,
3798 OUT PBOOLEAN GenerateOnClose
3799 );
3800
3801 NTKERNELAPI
3802 VOID
3803 NTAPI
3804 SeOpenObjectForDeleteAuditAlarm (
3805 IN PUNICODE_STRING ObjectTypeName,
3806 IN PVOID Object OPTIONAL,
3807 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
3808 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
3809 IN PACCESS_STATE AccessState,
3810 IN BOOLEAN ObjectCreated,
3811 IN BOOLEAN AccessGranted,
3812 IN KPROCESSOR_MODE AccessMode,
3813 OUT PBOOLEAN GenerateOnClose
3814 );
3815
3816 NTKERNELAPI
3817 BOOLEAN
3818 NTAPI
3819 SePrivilegeCheck (
3820 IN OUT PPRIVILEGE_SET RequiredPrivileges,
3821 IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
3822 IN KPROCESSOR_MODE AccessMode
3823 );
3824
3825 NTKERNELAPI
3826 NTSTATUS
3827 NTAPI
3828 SeQueryAuthenticationIdToken (
3829 IN PACCESS_TOKEN Token,
3830 OUT PLUID LogonId
3831 );
3832
3833 #if (VER_PRODUCTBUILD >= 2195)
3834
3835 NTKERNELAPI
3836 NTSTATUS
3837 NTAPI
3838 SeQueryInformationToken (
3839 IN PACCESS_TOKEN Token,
3840 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
3841 OUT PVOID *TokenInformation
3842 );
3843
3844 #endif /* (VER_PRODUCTBUILD >= 2195) */
3845
3846 NTKERNELAPI
3847 NTSTATUS
3848 NTAPI
3849 SeQuerySecurityDescriptorInfo (
3850 IN PSECURITY_INFORMATION SecurityInformation,
3851 OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
3852 IN OUT PULONG Length,
3853 IN PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor
3854 );
3855
3856 #if (VER_PRODUCTBUILD >= 2195)
3857
3858 NTKERNELAPI
3859 NTSTATUS
3860 NTAPI
3861 SeQuerySessionIdToken (
3862 IN PACCESS_TOKEN Token,
3863 IN PULONG SessionId
3864 );
3865
3866 #endif /* (VER_PRODUCTBUILD >= 2195) */
3867
3868 #define SeQuerySubjectContextToken( SubjectContext ) \
3869 ( ARGUMENT_PRESENT( \
3870 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken \
3871 ) ? \
3872 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken : \
3873 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
3874
3875 typedef NTSTATUS (*PSE_LOGON_SESSION_TERMINATED_ROUTINE) (
3876 IN PLUID LogonId
3877 );
3878
3879 NTKERNELAPI
3880 NTSTATUS
3881 NTAPI
3882 SeRegisterLogonSessionTerminatedRoutine (
3883 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
3884 );
3885
3886 NTKERNELAPI
3887 VOID
3888 NTAPI
3889 SeReleaseSubjectContext (
3890 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
3891 );
3892
3893 NTKERNELAPI
3894 VOID
3895 NTAPI
3896 SeSetAccessStateGenericMapping (
3897 PACCESS_STATE AccessState,
3898 PGENERIC_MAPPING GenericMapping
3899 );
3900
3901 NTKERNELAPI
3902 NTSTATUS
3903 NTAPI
3904 SeSetSecurityDescriptorInfo (
3905 IN PVOID Object OPTIONAL,
3906 IN PSECURITY_INFORMATION SecurityInformation,
3907 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
3908 IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
3909 IN POOL_TYPE PoolType,
3910 IN PGENERIC_MAPPING GenericMapping
3911 );
3912
3913 #if (VER_PRODUCTBUILD >= 2195)
3914
3915 NTKERNELAPI
3916 NTSTATUS
3917 NTAPI
3918 SeSetSecurityDescriptorInfoEx (
3919 IN PVOID Object OPTIONAL,
3920 IN PSECURITY_INFORMATION SecurityInformation,
3921 IN PSECURITY_DESCRIPTOR ModificationDescriptor,
3922 IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
3923 IN ULONG AutoInheritFlags,
3924 IN POOL_TYPE PoolType,
3925 IN PGENERIC_MAPPING GenericMapping
3926 );
3927
3928 NTKERNELAPI
3929 BOOLEAN
3930 NTAPI
3931 SeTokenIsAdmin (
3932 IN PACCESS_TOKEN Token
3933 );
3934
3935 NTKERNELAPI
3936 BOOLEAN
3937 NTAPI
3938 SeTokenIsRestricted (
3939 IN PACCESS_TOKEN Token
3940 );
3941
3942 #endif /* (VER_PRODUCTBUILD >= 2195) */
3943
3944 NTKERNELAPI
3945 TOKEN_TYPE
3946 NTAPI
3947 SeTokenType (
3948 IN PACCESS_TOKEN Token
3949 );
3950
3951 NTKERNELAPI
3952 VOID
3953 NTAPI
3954 SeUnlockSubjectContext (
3955 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
3956 );
3957
3958 NTKERNELAPI
3959 NTSTATUS
3960 SeUnregisterLogonSessionTerminatedRoutine (
3961 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
3962 );
3963
3964 #if (VER_PRODUCTBUILD >= 2195)
3965
3966 NTSYSAPI
3967 NTSTATUS
3968 NTAPI
3969 ZwAdjustPrivilegesToken (
3970 IN HANDLE TokenHandle,
3971 IN BOOLEAN DisableAllPrivileges,
3972 IN PTOKEN_PRIVILEGES NewState,
3973 IN ULONG BufferLength,
3974 OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL,
3975 OUT PULONG ReturnLength
3976 );
3977
3978 #endif /* (VER_PRODUCTBUILD >= 2195) */
3979
3980 NTSYSAPI
3981 NTSTATUS
3982 NTAPI
3983 ZwAlertThread (
3984 IN HANDLE ThreadHandle
3985 );
3986
3987 NTSYSAPI
3988 NTSTATUS
3989 NTAPI
3990 ZwAllocateVirtualMemory (
3991 IN HANDLE ProcessHandle,
3992 IN OUT PVOID *BaseAddress,
3993 IN ULONG ZeroBits,
3994 IN OUT PULONG RegionSize,
3995 IN ULONG AllocationType,
3996 IN ULONG Protect
3997 );
3998
3999 NTSYSAPI
4000 NTSTATUS
4001 NTAPI
4002 ZwAccessCheckAndAuditAlarm (
4003 IN PUNICODE_STRING SubsystemName,
4004 IN PVOID HandleId,
4005 IN PUNICODE_STRING ObjectTypeName,
4006 IN PUNICODE_STRING ObjectName,
4007 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
4008 IN ACCESS_MASK DesiredAccess,
4009 IN PGENERIC_MAPPING GenericMapping,
4010 IN BOOLEAN ObjectCreation,
4011 OUT PACCESS_MASK GrantedAccess,
4012 OUT PBOOLEAN AccessStatus,
4013 OUT PBOOLEAN GenerateOnClose
4014 );
4015
4016 #if (VER_PRODUCTBUILD >= 2195)
4017
4018 NTSYSAPI
4019 NTSTATUS
4020 NTAPI
4021 ZwCancelIoFile (
4022 IN HANDLE FileHandle,
4023 OUT PIO_STATUS_BLOCK IoStatusBlock
4024 );
4025
4026 #endif /* (VER_PRODUCTBUILD >= 2195) */
4027
4028 NTSYSAPI
4029 NTSTATUS
4030 NTAPI
4031 ZwClearEvent (
4032 IN HANDLE EventHandle
4033 );
4034
4035 NTSYSAPI
4036 NTSTATUS
4037 NTAPI
4038 ZwCloseObjectAuditAlarm (
4039 IN PUNICODE_STRING SubsystemName,
4040 IN PVOID HandleId,
4041 IN BOOLEAN GenerateOnClose
4042 );
4043
4044 NTSYSAPI
4045 NTSTATUS
4046 NTAPI
4047 ZwCreateSection (
4048 OUT PHANDLE SectionHandle,
4049 IN ACCESS_MASK DesiredAccess,
4050 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
4051 IN PLARGE_INTEGER MaximumSize OPTIONAL,
4052 IN ULONG SectionPageProtection,
4053 IN ULONG AllocationAttributes,
4054 IN HANDLE FileHandle OPTIONAL
4055 );
4056
4057 NTSYSAPI
4058 NTSTATUS
4059 NTAPI
4060 ZwCreateSymbolicLinkObject (
4061 OUT PHANDLE SymbolicLinkHandle,
4062 IN ACCESS_MASK DesiredAccess,
4063 IN POBJECT_ATTRIBUTES ObjectAttributes,
4064 IN PUNICODE_STRING TargetName
4065 );
4066
4067 NTSYSAPI
4068 NTSTATUS
4069 NTAPI
4070 ZwDeleteFile (
4071 IN POBJECT_ATTRIBUTES ObjectAttributes
4072 );
4073
4074 NTSYSAPI
4075 NTSTATUS
4076 NTAPI
4077 ZwDeleteValueKey (
4078 IN HANDLE Handle,
4079 IN PUNICODE_STRING Name
4080 );
4081
4082 NTSYSAPI
4083 NTSTATUS
4084 NTAPI
4085 ZwDeviceIoControlFile (
4086 IN HANDLE FileHandle,
4087 IN HANDLE Event OPTIONAL,
4088 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
4089 IN PVOID ApcContext OPTIONAL,
4090 OUT PIO_STATUS_BLOCK IoStatusBlock,
4091 IN ULONG IoControlCode,
4092 IN PVOID InputBuffer OPTIONAL,
4093 IN ULONG InputBufferLength,
4094 OUT PVOID OutputBuffer OPTIONAL,
4095 IN ULONG OutputBufferLength
4096 );
4097
4098 NTSYSAPI
4099 NTSTATUS
4100 NTAPI
4101 ZwDisplayString (
4102 IN PUNICODE_STRING String
4103 );
4104
4105 NTSYSAPI
4106 NTSTATUS
4107 NTAPI
4108 ZwDuplicateObject (
4109 IN HANDLE SourceProcessHandle,
4110 IN HANDLE SourceHandle,
4111 IN HANDLE TargetProcessHandle OPTIONAL,
4112 OUT PHANDLE TargetHandle OPTIONAL,
4113 IN ACCESS_MASK DesiredAccess,
4114 IN ULONG HandleAttributes,
4115 IN ULONG Options
4116 );
4117
4118 NTSYSAPI
4119 NTSTATUS
4120 NTAPI
4121 ZwDuplicateToken (
4122 IN HANDLE ExistingTokenHandle,
4123 IN ACCESS_MASK DesiredAccess,
4124 IN POBJECT_ATTRIBUTES ObjectAttributes,
4125 IN BOOLEAN EffectiveOnly,
4126 IN TOKEN_TYPE TokenType,
4127 OUT PHANDLE NewTokenHandle
4128 );
4129
4130 NTSYSAPI
4131 NTSTATUS
4132 NTAPI
4133 ZwFlushInstructionCache (
4134 IN HANDLE ProcessHandle,
4135 IN PVOID BaseAddress OPTIONAL,
4136 IN ULONG FlushSize
4137 );
4138
4139 #if (VER_PRODUCTBUILD >= 2195)
4140
4141 NTSYSAPI
4142 NTSTATUS
4143 NTAPI
4144 ZwFlushVirtualMemory (
4145 IN HANDLE ProcessHandle,
4146 IN OUT PVOID *BaseAddress,
4147 IN OUT PULONG FlushSize,
4148 OUT PIO_STATUS_BLOCK IoStatusBlock
4149 );
4150
4151 #endif /* (VER_PRODUCTBUILD >= 2195) */
4152
4153 NTSYSAPI
4154 NTSTATUS
4155 NTAPI
4156 ZwFreeVirtualMemory (
4157 IN HANDLE ProcessHandle,
4158 IN OUT PVOID *BaseAddress,
4159 IN OUT PULONG RegionSize,
4160 IN ULONG FreeType
4161 );
4162
4163 NTSYSAPI
4164 NTSTATUS
4165 NTAPI
4166 ZwFsControlFile (
4167 IN HANDLE FileHandle,
4168 IN HANDLE Event OPTIONAL,
4169 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
4170 IN PVOID ApcContext OPTIONAL,
4171 OUT PIO_STATUS_BLOCK IoStatusBlock,
4172 IN ULONG FsControlCode,
4173 IN PVOID InputBuffer OPTIONAL,
4174 IN ULONG InputBufferLength,
4175 OUT PVOID OutputBuffer OPTIONAL,
4176 IN ULONG OutputBufferLength
4177 );
4178
4179 #if (VER_PRODUCTBUILD >= 2195)
4180
4181 NTSYSAPI
4182 NTSTATUS
4183 NTAPI
4184 ZwInitiatePowerAction (
4185 IN POWER_ACTION SystemAction,
4186 IN SYSTEM_POWER_STATE MinSystemState,
4187 IN ULONG Flags,
4188 IN BOOLEAN Asynchronous
4189 );
4190
4191 #endif /* (VER_PRODUCTBUILD >= 2195) */
4192
4193 NTSYSAPI
4194 NTSTATUS
4195 NTAPI
4196 ZwLoadDriver (
4197 /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
4198 IN PUNICODE_STRING RegistryPath
4199 );
4200
4201 NTSYSAPI
4202 NTSTATUS
4203 NTAPI
4204 ZwLoadKey (
4205 IN POBJECT_ATTRIBUTES KeyObjectAttributes,
4206 IN POBJECT_ATTRIBUTES FileObjectAttributes
4207 );
4208
4209 NTSYSAPI
4210 NTSTATUS
4211 NTAPI
4212 ZwNotifyChangeKey (
4213 IN HANDLE KeyHandle,
4214 IN HANDLE EventHandle OPTIONAL,
4215 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
4216 IN PVOID ApcContext OPTIONAL,
4217 OUT PIO_STATUS_BLOCK IoStatusBlock,
4218 IN ULONG NotifyFilter,
4219 IN BOOLEAN WatchSubtree,
4220 IN PVOID Buffer,
4221 IN ULONG BufferLength,
4222 IN BOOLEAN Asynchronous
4223 );
4224
4225 NTSYSAPI
4226 NTSTATUS
4227 NTAPI
4228 ZwOpenDirectoryObject (
4229 OUT PHANDLE DirectoryHandle,
4230 IN ACCESS_MASK DesiredAccess,
4231 IN POBJECT_ATTRIBUTES ObjectAttributes
4232 );
4233
4234 NTSYSAPI
4235 NTSTATUS
4236 NTAPI
4237 ZwOpenEvent (
4238 OUT PHANDLE EventHandle,
4239 IN ACCESS_MASK DesiredAccess,
4240 IN POBJECT_ATTRIBUTES ObjectAttributes
4241 );
4242
4243 NTSYSAPI
4244 NTSTATUS
4245 NTAPI
4246 ZwOpenProcess (
4247 OUT PHANDLE ProcessHandle,
4248 IN ACCESS_MASK DesiredAccess,
4249 IN POBJECT_ATTRIBUTES ObjectAttributes,
4250 IN PCLIENT_ID ClientId OPTIONAL
4251 );
4252
4253 NTSYSAPI
4254 NTSTATUS
4255 NTAPI
4256 ZwOpenProcessToken (
4257 IN HANDLE ProcessHandle,
4258 IN ACCESS_MASK DesiredAccess,
4259 OUT PHANDLE TokenHandle
4260 );
4261
4262 NTSYSAPI
4263 NTSTATUS
4264 NTAPI
4265 ZwOpenThread (
4266 OUT PHANDLE ThreadHandle,
4267 IN ACCESS_MASK DesiredAccess,
4268 IN POBJECT_ATTRIBUTES ObjectAttributes,
4269 IN PCLIENT_ID ClientId
4270 );
4271
4272 NTSYSAPI
4273 NTSTATUS
4274 NTAPI
4275 ZwOpenThreadToken (
4276 IN HANDLE ThreadHandle,
4277 IN ACCESS_MASK DesiredAccess,
4278 IN BOOLEAN OpenAsSelf,
4279 OUT PHANDLE TokenHandle
4280 );
4281
4282 #if (VER_PRODUCTBUILD >= 2195)
4283
4284 NTSYSAPI
4285 NTSTATUS
4286 NTAPI
4287 ZwPowerInformation (
4288 IN POWER_INFORMATION_LEVEL PowerInformationLevel,
4289 IN PVOID InputBuffer OPTIONAL,
4290 IN ULONG InputBufferLength,
4291 OUT PVOID OutputBuffer OPTIONAL,
4292 IN ULONG OutputBufferLength
4293 );
4294
4295 #endif /* (VER_PRODUCTBUILD >= 2195) */
4296
4297 NTSYSAPI
4298 NTSTATUS
4299 NTAPI
4300 ZwPulseEvent (
4301 IN HANDLE EventHandle,
4302 OUT PLONG PreviousState OPTIONAL
4303 );
4304
4305 NTSYSAPI
4306 NTSTATUS
4307 NTAPI
4308 ZwQueryDefaultLocale (
4309 IN BOOLEAN ThreadOrSystem,
4310 OUT PLCID Locale
4311 );
4312
4313 NTSYSAPI
4314 NTSTATUS
4315 NTAPI
4316 ZwQueryDirectoryFile (
4317 IN HANDLE FileHandle,
4318 IN HANDLE Event OPTIONAL,
4319 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
4320 IN PVOID ApcContext OPTIONAL,
4321 OUT PIO_STATUS_BLOCK IoStatusBlock,
4322 OUT PVOID FileInformation,
4323 IN ULONG Length,
4324 IN FILE_INFORMATION_CLASS FileInformationClass,
4325 IN BOOLEAN ReturnSingleEntry,
4326 IN PUNICODE_STRING FileName OPTIONAL,
4327 IN BOOLEAN RestartScan
4328 );
4329
4330 #if (VER_PRODUCTBUILD >= 2195)
4331
4332 NTSYSAPI
4333 NTSTATUS
4334 NTAPI
4335 ZwQueryDirectoryObject (
4336 IN HANDLE DirectoryHandle,
4337 OUT PVOID Buffer,
4338 IN ULONG Length,
4339 IN BOOLEAN ReturnSingleEntry,
4340 IN BOOLEAN RestartScan,
4341 IN OUT PULONG Context,
4342 OUT PULONG ReturnLength OPTIONAL
4343 );
4344
4345 NTSYSAPI
4346 NTSTATUS
4347 NTAPI
4348 ZwQueryEaFile (
4349 IN HANDLE FileHandle,
4350 OUT PIO_STATUS_BLOCK IoStatusBlock,
4351 OUT PVOID Buffer,
4352 IN ULONG Length,
4353 IN BOOLEAN ReturnSingleEntry,
4354 IN PVOID EaList OPTIONAL,
4355 IN ULONG EaListLength,
4356 IN PULONG EaIndex OPTIONAL,
4357 IN BOOLEAN RestartScan
4358 );
4359
4360 #endif /* (VER_PRODUCTBUILD >= 2195) */
4361
4362 NTSYSAPI
4363 NTSTATUS
4364 NTAPI
4365 ZwQueryInformationProcess (
4366 IN HANDLE ProcessHandle,
4367 IN PROCESSINFOCLASS ProcessInformationClass,
4368 OUT PVOID ProcessInformation,
4369 IN ULONG ProcessInformationLength,
4370 OUT PULONG ReturnLength OPTIONAL
4371 );
4372
4373 NTSYSAPI
4374 NTSTATUS
4375 NTAPI
4376 ZwQueryInformationToken (
4377 IN HANDLE TokenHandle,
4378 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
4379 OUT PVOID TokenInformation,
4380 IN ULONG Length,
4381 OUT PULONG ResultLength
4382 );
4383
4384 NTSYSAPI
4385 NTSTATUS
4386 NTAPI
4387 ZwQueryObject (
4388 IN HANDLE ObjectHandle,
4389 IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
4390 OUT PVOID ObjectInformation,
4391 IN ULONG Length,
4392 OUT PULONG ResultLength
4393 );
4394
4395 NTSYSAPI
4396 NTSTATUS
4397 NTAPI
4398 ZwQuerySection (
4399 IN HANDLE SectionHandle,
4400 IN SECTION_INFORMATION_CLASS SectionInformationClass,
4401 OUT PVOID SectionInformation,
4402 IN ULONG SectionInformationLength,
4403 OUT PULONG ResultLength OPTIONAL
4404 );
4405
4406 NTSYSAPI
4407 NTSTATUS
4408 NTAPI
4409 ZwQuerySecurityObject (
4410 IN HANDLE FileHandle,
4411 IN SECURITY_INFORMATION SecurityInformation,
4412 OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
4413 IN ULONG Length,
4414 OUT PULONG ResultLength
4415 );
4416
4417 NTSYSAPI
4418 NTSTATUS
4419 NTAPI
4420 ZwQuerySystemInformation (
4421 IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
4422 OUT PVOID SystemInformation,
4423 IN ULONG Length,
4424 OUT PULONG ReturnLength
4425 );
4426
4427 NTSYSAPI
4428 NTSTATUS
4429 NTAPI
4430 ZwQueryVolumeInformationFile (
4431 IN HANDLE FileHandle,
4432 OUT PIO_STATUS_BLOCK IoStatusBlock,
4433 OUT PVOID FsInformation,
4434 IN ULONG Length,
4435 IN FS_INFORMATION_CLASS FsInformationClass
4436 );
4437
4438 NTSYSAPI
4439 NTSTATUS
4440 NTAPI
4441 ZwReplaceKey (
4442 IN POBJECT_ATTRIBUTES NewFileObjectAttributes,
4443 IN HANDLE KeyHandle,
4444 IN POBJECT_ATTRIBUTES OldFileObjectAttributes
4445 );
4446
4447 NTSYSAPI
4448 NTSTATUS
4449 NTAPI
4450 ZwResetEvent (
4451 IN HANDLE EventHandle,
4452 OUT PLONG PreviousState OPTIONAL
4453 );
4454
4455 #if (VER_PRODUCTBUILD >= 2195)
4456
4457 NTSYSAPI
4458 NTSTATUS
4459 NTAPI
4460 ZwRestoreKey (
4461 IN HANDLE KeyHandle,
4462 IN HANDLE FileHandle,
4463 IN ULONG Flags
4464 );
4465
4466 #endif /* (VER_PRODUCTBUILD >= 2195) */
4467
4468 NTSYSAPI
4469 NTSTATUS
4470 NTAPI
4471 ZwSaveKey (
4472 IN HANDLE KeyHandle,
4473 IN HANDLE FileHandle
4474 );
4475
4476 NTSYSAPI
4477 NTSTATUS
4478 NTAPI
4479 ZwSetDefaultLocale (
4480 IN BOOLEAN ThreadOrSystem,
4481 IN LCID Locale
4482 );
4483
4484 #if (VER_PRODUCTBUILD >= 2195)
4485
4486 NTSYSAPI
4487 NTSTATUS
4488 NTAPI
4489 ZwSetDefaultUILanguage (
4490 IN LANGID LanguageId
4491 );
4492
4493 NTSYSAPI
4494 NTSTATUS
4495 NTAPI
4496 ZwSetEaFile (
4497 IN HANDLE FileHandle,
4498 OUT PIO_STATUS_BLOCK IoStatusBlock,
4499 OUT PVOID Buffer,
4500 IN ULONG Length
4501 );
4502
4503 #endif /* (VER_PRODUCTBUILD >= 2195) */
4504
4505 NTSYSAPI
4506 NTSTATUS
4507 NTAPI
4508 ZwSetEvent (
4509 IN HANDLE EventHandle,
4510 OUT PLONG PreviousState OPTIONAL
4511 );
4512
4513 NTSYSAPI
4514 NTSTATUS
4515 NTAPI
4516 ZwSetInformationObject (
4517 IN HANDLE ObjectHandle,
4518 IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
4519 IN PVOID ObjectInformation,
4520 IN ULONG ObjectInformationLength
4521 );
4522
4523 NTSYSAPI
4524 NTSTATUS
4525 NTAPI
4526 ZwSetInformationProcess (
4527 IN HANDLE ProcessHandle,
4528 IN PROCESSINFOCLASS ProcessInformationClass,
4529 IN PVOID ProcessInformation,
4530 IN ULONG ProcessInformationLength
4531 );
4532
4533 #if (VER_PRODUCTBUILD >= 2195)
4534
4535 NTSYSAPI
4536 NTSTATUS
4537 NTAPI
4538 ZwSetSecurityObject (
4539 IN HANDLE Handle,
4540 IN SECURITY_INFORMATION SecurityInformation,
4541 IN PSECURITY_DESCRIPTOR SecurityDescriptor
4542 );
4543
4544 #endif /* (VER_PRODUCTBUILD >= 2195) */
4545
4546 NTSYSAPI
4547 NTSTATUS
4548 NTAPI
4549 ZwSetSystemInformation (
4550 IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
4551 IN PVOID SystemInformation,
4552 IN ULONG Length
4553 );
4554
4555 NTSYSAPI
4556 NTSTATUS
4557 NTAPI
4558 ZwSetSystemTime (
4559 IN PLARGE_INTEGER NewTime,
4560 OUT PLARGE_INTEGER OldTime OPTIONAL
4561 );
4562
4563 #if (VER_PRODUCTBUILD >= 2195)
4564
4565 NTSYSAPI
4566 NTSTATUS
4567 NTAPI
4568 ZwSetVolumeInformationFile (
4569 IN HANDLE FileHandle,
4570 OUT PIO_STATUS_BLOCK IoStatusBlock,
4571 IN PVOID FsInformation,
4572 IN ULONG Length,
4573 IN FS_INFORMATION_CLASS FsInformationClass
4574 );
4575
4576 #endif /* (VER_PRODUCTBUILD >= 2195) */
4577
4578 NTSYSAPI
4579 NTSTATUS
4580 NTAPI
4581 ZwTerminateProcess (
4582 IN HANDLE ProcessHandle OPTIONAL,
4583 IN NTSTATUS ExitStatus
4584 );
4585
4586 NTSYSAPI
4587 NTSTATUS
4588 NTAPI
4589 ZwUnloadDriver (
4590 /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
4591 IN PUNICODE_STRING RegistryPath
4592 );
4593
4594 NTSYSAPI
4595 NTSTATUS
4596 NTAPI
4597 ZwUnloadKey (
4598 IN POBJECT_ATTRIBUTES KeyObjectAttributes
4599 );
4600
4601 NTSYSAPI
4602 NTSTATUS
4603 NTAPI
4604 ZwWaitForSingleObject (
4605 IN HANDLE Handle,
4606 IN BOOLEAN Alertable,
4607 IN PLARGE_INTEGER Timeout OPTIONAL
4608 );
4609
4610 NTSYSAPI
4611 NTSTATUS
4612 NTAPI
4613 ZwWaitForMultipleObjects (
4614 IN ULONG HandleCount,
4615 IN PHANDLE Handles,
4616 IN WAIT_TYPE WaitType,
4617 IN BOOLEAN Alertable,
4618 IN PLARGE_INTEGER Timeout OPTIONAL
4619 );
4620
4621 NTSYSAPI
4622 NTSTATUS
4623 NTAPI
4624 ZwYieldExecution (
4625 VOID
4626 );
4627
4628 #pragma pack(pop)
4629
4630 #ifdef __cplusplus
4631 }
4632 #endif
4633
4634 #endif /* _NTIFS_ */