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