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