[NTIFS]
[reactos.git] / reactos / 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 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 /* Dependencies */
33 #include <ntddk.h>
34 #include <excpt.h>
35 #include <ntdef.h>
36 #include <ntnls.h>
37 #include <ntstatus.h>
38 #include <bugcodes.h>
39 /* FIXME : #include <ntiologc.h> */
40
41 #ifndef FlagOn
42 #define FlagOn(_F,_SF) ((_F) & (_SF))
43 #endif
44
45 #ifndef BooleanFlagOn
46 #define BooleanFlagOn(F,SF) ((BOOLEAN)(((F) & (SF)) != 0))
47 #endif
48
49 #ifndef SetFlag
50 #define SetFlag(_F,_SF) ((_F) |= (_SF))
51 #endif
52
53 #ifndef ClearFlag
54 #define ClearFlag(_F,_SF) ((_F) &= ~(_SF))
55 #endif
56
57 typedef UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;
58 typedef STRING LSA_STRING, *PLSA_STRING;
59 typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES;
60
61 #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
62 #define SID_IDENTIFIER_AUTHORITY_DEFINED
63 typedef struct _SID_IDENTIFIER_AUTHORITY {
64 UCHAR Value[6];
65 } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
66 #endif
67
68 #ifndef SID_DEFINED
69 #define SID_DEFINED
70 typedef struct _SID {
71 UCHAR Revision;
72 UCHAR SubAuthorityCount;
73 SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
74 ULONG SubAuthority[ANYSIZE_ARRAY];
75 } SID, *PISID;
76 #endif
77
78 #define SID_REVISION 1
79 #define SID_MAX_SUB_AUTHORITIES 15
80 #define SID_RECOMMENDED_SUB_AUTHORITIES 1
81
82 typedef enum _SID_NAME_USE {
83 SidTypeUser = 1,
84 SidTypeGroup,
85 SidTypeDomain,
86 SidTypeAlias,
87 SidTypeWellKnownGroup,
88 SidTypeDeletedAccount,
89 SidTypeInvalid,
90 SidTypeUnknown,
91 SidTypeComputer,
92 SidTypeLabel
93 } SID_NAME_USE, *PSID_NAME_USE;
94
95 typedef struct _SID_AND_ATTRIBUTES {
96 PSID Sid;
97 ULONG Attributes;
98 } SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;
99 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
100 typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
101
102 #define SID_HASH_SIZE 32
103 typedef ULONG_PTR SID_HASH_ENTRY, *PSID_HASH_ENTRY;
104
105 typedef struct _SID_AND_ATTRIBUTES_HASH {
106 ULONG SidCount;
107 PSID_AND_ATTRIBUTES SidAttr;
108 SID_HASH_ENTRY Hash[SID_HASH_SIZE];
109 } SID_AND_ATTRIBUTES_HASH, *PSID_AND_ATTRIBUTES_HASH;
110
111 /* Universal well-known SIDs */
112
113 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
114 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
115 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
116 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
117 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
118 #define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
119
120 #define SECURITY_NULL_RID (0x00000000L)
121 #define SECURITY_WORLD_RID (0x00000000L)
122 #define SECURITY_LOCAL_RID (0x00000000L)
123 #define SECURITY_LOCAL_LOGON_RID (0x00000001L)
124
125 #define SECURITY_CREATOR_OWNER_RID (0x00000000L)
126 #define SECURITY_CREATOR_GROUP_RID (0x00000001L)
127 #define SECURITY_CREATOR_OWNER_SERVER_RID (0x00000002L)
128 #define SECURITY_CREATOR_GROUP_SERVER_RID (0x00000003L)
129 #define SECURITY_CREATOR_OWNER_RIGHTS_RID (0x00000004L)
130
131 /* NT well-known SIDs */
132
133 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
134
135 #define SECURITY_DIALUP_RID (0x00000001L)
136 #define SECURITY_NETWORK_RID (0x00000002L)
137 #define SECURITY_BATCH_RID (0x00000003L)
138 #define SECURITY_INTERACTIVE_RID (0x00000004L)
139 #define SECURITY_LOGON_IDS_RID (0x00000005L)
140 #define SECURITY_LOGON_IDS_RID_COUNT (3L)
141 #define SECURITY_SERVICE_RID (0x00000006L)
142 #define SECURITY_ANONYMOUS_LOGON_RID (0x00000007L)
143 #define SECURITY_PROXY_RID (0x00000008L)
144 #define SECURITY_ENTERPRISE_CONTROLLERS_RID (0x00000009L)
145 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
146 #define SECURITY_PRINCIPAL_SELF_RID (0x0000000AL)
147 #define SECURITY_AUTHENTICATED_USER_RID (0x0000000BL)
148 #define SECURITY_RESTRICTED_CODE_RID (0x0000000CL)
149 #define SECURITY_TERMINAL_SERVER_RID (0x0000000DL)
150 #define SECURITY_REMOTE_LOGON_RID (0x0000000EL)
151 #define SECURITY_THIS_ORGANIZATION_RID (0x0000000FL)
152 #define SECURITY_IUSER_RID (0x00000011L)
153 #define SECURITY_LOCAL_SYSTEM_RID (0x00000012L)
154 #define SECURITY_LOCAL_SERVICE_RID (0x00000013L)
155 #define SECURITY_NETWORK_SERVICE_RID (0x00000014L)
156 #define SECURITY_NT_NON_UNIQUE (0x00000015L)
157 #define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT (3L)
158 #define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID (0x00000016L)
159
160 #define SECURITY_BUILTIN_DOMAIN_RID (0x00000020L)
161 #define SECURITY_WRITE_RESTRICTED_CODE_RID (0x00000021L)
162
163
164 #define SECURITY_PACKAGE_BASE_RID (0x00000040L)
165 #define SECURITY_PACKAGE_RID_COUNT (2L)
166 #define SECURITY_PACKAGE_NTLM_RID (0x0000000AL)
167 #define SECURITY_PACKAGE_SCHANNEL_RID (0x0000000EL)
168 #define SECURITY_PACKAGE_DIGEST_RID (0x00000015L)
169
170 #define SECURITY_CRED_TYPE_BASE_RID (0x00000041L)
171 #define SECURITY_CRED_TYPE_RID_COUNT (2L)
172 #define SECURITY_CRED_TYPE_THIS_ORG_CERT_RID (0x00000001L)
173
174 #define SECURITY_MIN_BASE_RID (0x00000050L)
175 #define SECURITY_SERVICE_ID_BASE_RID (0x00000050L)
176 #define SECURITY_SERVICE_ID_RID_COUNT (6L)
177 #define SECURITY_RESERVED_ID_BASE_RID (0x00000051L)
178 #define SECURITY_APPPOOL_ID_BASE_RID (0x00000052L)
179 #define SECURITY_APPPOOL_ID_RID_COUNT (6L)
180 #define SECURITY_VIRTUALSERVER_ID_BASE_RID (0x00000053L)
181 #define SECURITY_VIRTUALSERVER_ID_RID_COUNT (6L)
182 #define SECURITY_USERMODEDRIVERHOST_ID_BASE_RID (0x00000054L)
183 #define SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT (6L)
184 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID (0x00000055L)
185 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT (6L)
186 #define SECURITY_WMIHOST_ID_BASE_RID (0x00000056L)
187 #define SECURITY_WMIHOST_ID_RID_COUNT (6L)
188 #define SECURITY_TASK_ID_BASE_RID (0x00000057L)
189 #define SECURITY_NFS_ID_BASE_RID (0x00000058L)
190 #define SECURITY_COM_ID_BASE_RID (0x00000059L)
191 #define SECURITY_VIRTUALACCOUNT_ID_RID_COUNT (6L)
192
193 #define SECURITY_MAX_BASE_RID (0x0000006FL)
194
195 #define SECURITY_MAX_ALWAYS_FILTERED (0x000003E7L)
196 #define SECURITY_MIN_NEVER_FILTERED (0x000003E8L)
197
198 #define SECURITY_OTHER_ORGANIZATION_RID (0x000003E8L)
199
200 #define SECURITY_WINDOWSMOBILE_ID_BASE_RID (0x00000070L)
201
202 /* Well-known domain relative sub-authority values (RIDs) */
203
204 #define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS (0x000001F2L)
205
206 #define FOREST_USER_RID_MAX (0x000001F3L)
207
208 /* Well-known users */
209
210 #define DOMAIN_USER_RID_ADMIN (0x000001F4L)
211 #define DOMAIN_USER_RID_GUEST (0x000001F5L)
212 #define DOMAIN_USER_RID_KRBTGT (0x000001F6L)
213
214 #define DOMAIN_USER_RID_MAX (0x000003E7L)
215
216 /* Well-known groups */
217
218 #define DOMAIN_GROUP_RID_ADMINS (0x00000200L)
219 #define DOMAIN_GROUP_RID_USERS (0x00000201L)
220 #define DOMAIN_GROUP_RID_GUESTS (0x00000202L)
221 #define DOMAIN_GROUP_RID_COMPUTERS (0x00000203L)
222 #define DOMAIN_GROUP_RID_CONTROLLERS (0x00000204L)
223 #define DOMAIN_GROUP_RID_CERT_ADMINS (0x00000205L)
224 #define DOMAIN_GROUP_RID_SCHEMA_ADMINS (0x00000206L)
225 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (0x00000207L)
226 #define DOMAIN_GROUP_RID_POLICY_ADMINS (0x00000208L)
227 #define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (0x00000209L)
228
229 /* Well-known aliases */
230
231 #define DOMAIN_ALIAS_RID_ADMINS (0x00000220L)
232 #define DOMAIN_ALIAS_RID_USERS (0x00000221L)
233 #define DOMAIN_ALIAS_RID_GUESTS (0x00000222L)
234 #define DOMAIN_ALIAS_RID_POWER_USERS (0x00000223L)
235
236 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS (0x00000224L)
237 #define DOMAIN_ALIAS_RID_SYSTEM_OPS (0x00000225L)
238 #define DOMAIN_ALIAS_RID_PRINT_OPS (0x00000226L)
239 #define DOMAIN_ALIAS_RID_BACKUP_OPS (0x00000227L)
240
241 #define DOMAIN_ALIAS_RID_REPLICATOR (0x00000228L)
242 #define DOMAIN_ALIAS_RID_RAS_SERVERS (0x00000229L)
243 #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS (0x0000022AL)
244 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS (0x0000022BL)
245 #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS (0x0000022CL)
246 #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS (0x0000022DL)
247
248 #define DOMAIN_ALIAS_RID_MONITORING_USERS (0x0000022EL)
249 #define DOMAIN_ALIAS_RID_LOGGING_USERS (0x0000022FL)
250 #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS (0x00000230L)
251 #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS (0x00000231L)
252 #define DOMAIN_ALIAS_RID_DCOM_USERS (0x00000232L)
253 #define DOMAIN_ALIAS_RID_IUSERS (0x00000238L)
254 #define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS (0x00000239L)
255 #define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP (0x0000023BL)
256 #define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (0x0000023CL)
257 #define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP (0x0000023DL)
258 #define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP (0x0000023EL)
259
260 #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
261 #define SECURITY_MANDATORY_UNTRUSTED_RID (0x00000000L)
262 #define SECURITY_MANDATORY_LOW_RID (0x00001000L)
263 #define SECURITY_MANDATORY_MEDIUM_RID (0x00002000L)
264 #define SECURITY_MANDATORY_HIGH_RID (0x00003000L)
265 #define SECURITY_MANDATORY_SYSTEM_RID (0x00004000L)
266 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID (0x00005000L)
267
268 /* SECURITY_MANDATORY_MAXIMUM_USER_RID is the highest RID that
269 can be set by a usermode caller.*/
270
271 #define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
272
273 #define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
274
275 /* Allocate the System Luid. The first 1000 LUIDs are reserved.
276 Use #999 here (0x3e7 = 999) */
277
278 #define SYSTEM_LUID { 0x3e7, 0x0 }
279 #define ANONYMOUS_LOGON_LUID { 0x3e6, 0x0 }
280 #define LOCALSERVICE_LUID { 0x3e5, 0x0 }
281 #define NETWORKSERVICE_LUID { 0x3e4, 0x0 }
282 #define IUSER_LUID { 0x3e3, 0x0 }
283
284 typedef struct _ACE_HEADER {
285 UCHAR AceType;
286 UCHAR AceFlags;
287 USHORT AceSize;
288 } ACE_HEADER, *PACE_HEADER;
289
290 /* also in winnt.h */
291 #define ACCESS_MIN_MS_ACE_TYPE (0x0)
292 #define ACCESS_ALLOWED_ACE_TYPE (0x0)
293 #define ACCESS_DENIED_ACE_TYPE (0x1)
294 #define SYSTEM_AUDIT_ACE_TYPE (0x2)
295 #define SYSTEM_ALARM_ACE_TYPE (0x3)
296 #define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
297 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
298 #define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
299 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
300 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
301 #define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
302 #define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
303 #define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
304 #define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
305 #define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
306 #define ACCESS_MAX_MS_ACE_TYPE (0x8)
307 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
308 #define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
309 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
310 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
311 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
312 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
313 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
314 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
315 #define ACCESS_MAX_MS_V5_ACE_TYPE (0x11)
316 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE (0x11)
317
318 /* The following are the inherit flags that go into the AceFlags field
319 of an Ace header. */
320
321 #define OBJECT_INHERIT_ACE (0x1)
322 #define CONTAINER_INHERIT_ACE (0x2)
323 #define NO_PROPAGATE_INHERIT_ACE (0x4)
324 #define INHERIT_ONLY_ACE (0x8)
325 #define INHERITED_ACE (0x10)
326 #define VALID_INHERIT_FLAGS (0x1F)
327
328 #define SUCCESSFUL_ACCESS_ACE_FLAG (0x40)
329 #define FAILED_ACCESS_ACE_FLAG (0x80)
330
331 typedef struct _ACCESS_ALLOWED_ACE {
332 ACE_HEADER Header;
333 ACCESS_MASK Mask;
334 ULONG SidStart;
335 } ACCESS_ALLOWED_ACE, *PACCESS_ALLOWED_ACE;
336
337 typedef struct _ACCESS_DENIED_ACE {
338 ACE_HEADER Header;
339 ACCESS_MASK Mask;
340 ULONG SidStart;
341 } ACCESS_DENIED_ACE, *PACCESS_DENIED_ACE;
342
343 typedef struct _SYSTEM_AUDIT_ACE {
344 ACE_HEADER Header;
345 ACCESS_MASK Mask;
346 ULONG SidStart;
347 } SYSTEM_AUDIT_ACE, *PSYSTEM_AUDIT_ACE;
348
349 typedef struct _SYSTEM_ALARM_ACE {
350 ACE_HEADER Header;
351 ACCESS_MASK Mask;
352 ULONG SidStart;
353 } SYSTEM_ALARM_ACE, *PSYSTEM_ALARM_ACE;
354
355 typedef struct _SYSTEM_MANDATORY_LABEL_ACE {
356 ACE_HEADER Header;
357 ACCESS_MASK Mask;
358 ULONG SidStart;
359 } SYSTEM_MANDATORY_LABEL_ACE, *PSYSTEM_MANDATORY_LABEL_ACE;
360
361 #define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1
362 #define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2
363 #define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
364 #define SYSTEM_MANDATORY_LABEL_VALID_MASK (SYSTEM_MANDATORY_LABEL_NO_WRITE_UP | \
365 SYSTEM_MANDATORY_LABEL_NO_READ_UP | \
366 SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP)
367
368 #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
369
370 typedef USHORT SECURITY_DESCRIPTOR_CONTROL,*PSECURITY_DESCRIPTOR_CONTROL;
371
372 #define SE_OWNER_DEFAULTED 0x0001
373 #define SE_GROUP_DEFAULTED 0x0002
374 #define SE_DACL_PRESENT 0x0004
375 #define SE_DACL_DEFAULTED 0x0008
376 #define SE_SACL_PRESENT 0x0010
377 #define SE_SACL_DEFAULTED 0x0020
378 #define SE_DACL_UNTRUSTED 0x0040
379 #define SE_SERVER_SECURITY 0x0080
380 #define SE_DACL_AUTO_INHERIT_REQ 0x0100
381 #define SE_SACL_AUTO_INHERIT_REQ 0x0200
382 #define SE_DACL_AUTO_INHERITED 0x0400
383 #define SE_SACL_AUTO_INHERITED 0x0800
384 #define SE_DACL_PROTECTED 0x1000
385 #define SE_SACL_PROTECTED 0x2000
386 #define SE_RM_CONTROL_VALID 0x4000
387 #define SE_SELF_RELATIVE 0x8000
388
389 typedef struct _SECURITY_DESCRIPTOR_RELATIVE {
390 UCHAR Revision;
391 UCHAR Sbz1;
392 SECURITY_DESCRIPTOR_CONTROL Control;
393 ULONG Owner;
394 ULONG Group;
395 ULONG Sacl;
396 ULONG Dacl;
397 } SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE;
398
399 typedef struct _SECURITY_DESCRIPTOR {
400 UCHAR Revision;
401 UCHAR Sbz1;
402 SECURITY_DESCRIPTOR_CONTROL Control;
403 PSID Owner;
404 PSID Group;
405 PACL Sacl;
406 PACL Dacl;
407 } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
408
409 typedef struct _OBJECT_TYPE_LIST {
410 USHORT Level;
411 USHORT Sbz;
412 GUID *ObjectType;
413 } OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST;
414
415 #define ACCESS_OBJECT_GUID 0
416 #define ACCESS_PROPERTY_SET_GUID 1
417 #define ACCESS_PROPERTY_GUID 2
418 #define ACCESS_MAX_LEVEL 4
419
420 typedef enum _AUDIT_EVENT_TYPE {
421 AuditEventObjectAccess,
422 AuditEventDirectoryServiceAccess
423 } AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE;
424
425 #define AUDIT_ALLOW_NO_PRIVILEGE 0x1
426
427 #define ACCESS_DS_SOURCE_A "DS"
428 #define ACCESS_DS_SOURCE_W L"DS"
429 #define ACCESS_DS_OBJECT_TYPE_NAME_A "Directory Service Object"
430 #define ACCESS_DS_OBJECT_TYPE_NAME_W L"Directory Service Object"
431
432 #define ACCESS_REASON_TYPE_MASK 0xffff0000
433 #define ACCESS_REASON_DATA_MASK 0x0000ffff
434
435 typedef enum _ACCESS_REASON_TYPE {
436 AccessReasonNone = 0x00000000,
437 AccessReasonAllowedAce = 0x00010000,
438 AccessReasonDeniedAce = 0x00020000,
439 AccessReasonAllowedParentAce = 0x00030000,
440 AccessReasonDeniedParentAce = 0x00040000,
441 AccessReasonMissingPrivilege = 0x00100000,
442 AccessReasonFromPrivilege = 0x00200000,
443 AccessReasonIntegrityLevel = 0x00300000,
444 AccessReasonOwnership = 0x00400000,
445 AccessReasonNullDacl = 0x00500000,
446 AccessReasonEmptyDacl = 0x00600000,
447 AccessReasonNoSD = 0x00700000,
448 AccessReasonNoGrant = 0x00800000
449 } ACCESS_REASON_TYPE;
450
451 typedef ULONG ACCESS_REASON;
452
453 typedef struct _ACCESS_REASONS {
454 ACCESS_REASON Data[32];
455 } ACCESS_REASONS, *PACCESS_REASONS;
456
457 #define SE_SECURITY_DESCRIPTOR_FLAG_NO_OWNER_ACE 0x00000001
458 #define SE_SECURITY_DESCRIPTOR_FLAG_NO_LABEL_ACE 0x00000002
459 #define SE_SECURITY_DESCRIPTOR_VALID_FLAGS 0x00000003
460
461 typedef struct _SE_SECURITY_DESCRIPTOR {
462 ULONG Size;
463 ULONG Flags;
464 PSECURITY_DESCRIPTOR SecurityDescriptor;
465 } SE_SECURITY_DESCRIPTOR, *PSE_SECURITY_DESCRIPTOR;
466
467 typedef struct _SE_ACCESS_REQUEST {
468 ULONG Size;
469 PSE_SECURITY_DESCRIPTOR SeSecurityDescriptor;
470 ACCESS_MASK DesiredAccess;
471 ACCESS_MASK PreviouslyGrantedAccess;
472 PSID PrincipalSelfSid;
473 PGENERIC_MAPPING GenericMapping;
474 ULONG ObjectTypeListCount;
475 POBJECT_TYPE_LIST ObjectTypeList;
476 } SE_ACCESS_REQUEST, *PSE_ACCESS_REQUEST;
477
478 typedef struct _SE_ACCESS_REPLY {
479 ULONG Size;
480 ULONG ResultListCount;
481 PACCESS_MASK GrantedAccess;
482 PNTSTATUS AccessStatus;
483 PACCESS_REASONS AccessReason;
484 PPRIVILEGE_SET* Privileges;
485 } SE_ACCESS_REPLY, *PSE_ACCESS_REPLY;
486
487 typedef enum _SE_AUDIT_OPERATION {
488 AuditPrivilegeObject,
489 AuditPrivilegeService,
490 AuditAccessCheck,
491 AuditOpenObject,
492 AuditOpenObjectWithTransaction,
493 AuditCloseObject,
494 AuditDeleteObject,
495 AuditOpenObjectForDelete,
496 AuditOpenObjectForDeleteWithTransaction,
497 AuditCloseNonObject,
498 AuditOpenNonObject,
499 AuditObjectReference,
500 AuditHandleCreation,
501 } SE_AUDIT_OPERATION, *PSE_AUDIT_OPERATION;
502
503 typedef struct _SE_AUDIT_INFO {
504 ULONG Size;
505 AUDIT_EVENT_TYPE AuditType;
506 SE_AUDIT_OPERATION AuditOperation;
507 ULONG AuditFlags;
508 UNICODE_STRING SubsystemName;
509 UNICODE_STRING ObjectTypeName;
510 UNICODE_STRING ObjectName;
511 PVOID HandleId;
512 GUID* TransactionId;
513 LUID* OperationId;
514 BOOLEAN ObjectCreation;
515 BOOLEAN GenerateOnClose;
516 } SE_AUDIT_INFO, *PSE_AUDIT_INFO;
517
518 #define TOKEN_ASSIGN_PRIMARY (0x0001)
519 #define TOKEN_DUPLICATE (0x0002)
520 #define TOKEN_IMPERSONATE (0x0004)
521 #define TOKEN_QUERY (0x0008)
522 #define TOKEN_QUERY_SOURCE (0x0010)
523 #define TOKEN_ADJUST_PRIVILEGES (0x0020)
524 #define TOKEN_ADJUST_GROUPS (0x0040)
525 #define TOKEN_ADJUST_DEFAULT (0x0080)
526 #define TOKEN_ADJUST_SESSIONID (0x0100)
527
528 #define TOKEN_ALL_ACCESS_P (STANDARD_RIGHTS_REQUIRED |\
529 TOKEN_ASSIGN_PRIMARY |\
530 TOKEN_DUPLICATE |\
531 TOKEN_IMPERSONATE |\
532 TOKEN_QUERY |\
533 TOKEN_QUERY_SOURCE |\
534 TOKEN_ADJUST_PRIVILEGES |\
535 TOKEN_ADJUST_GROUPS |\
536 TOKEN_ADJUST_DEFAULT )
537
538 #if ((defined(_WIN32_WINNT) && (_WIN32_WINNT > 0x0400)) || (!defined(_WIN32_WINNT)))
539 #define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P |\
540 TOKEN_ADJUST_SESSIONID )
541 #else
542 #define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P)
543 #endif
544
545 #define TOKEN_READ (STANDARD_RIGHTS_READ |\
546 TOKEN_QUERY)
547
548 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\
549 TOKEN_ADJUST_PRIVILEGES |\
550 TOKEN_ADJUST_GROUPS |\
551 TOKEN_ADJUST_DEFAULT)
552
553 #define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
554
555 typedef enum _TOKEN_TYPE {
556 TokenPrimary = 1,
557 TokenImpersonation
558 } TOKEN_TYPE,*PTOKEN_TYPE;
559
560 typedef enum _TOKEN_INFORMATION_CLASS {
561 TokenUser = 1,
562 TokenGroups,
563 TokenPrivileges,
564 TokenOwner,
565 TokenPrimaryGroup,
566 TokenDefaultDacl,
567 TokenSource,
568 TokenType,
569 TokenImpersonationLevel,
570 TokenStatistics,
571 TokenRestrictedSids,
572 TokenSessionId,
573 TokenGroupsAndPrivileges,
574 TokenSessionReference,
575 TokenSandBoxInert,
576 TokenAuditPolicy,
577 TokenOrigin,
578 TokenElevationType,
579 TokenLinkedToken,
580 TokenElevation,
581 TokenHasRestrictions,
582 TokenAccessInformation,
583 TokenVirtualizationAllowed,
584 TokenVirtualizationEnabled,
585 TokenIntegrityLevel,
586 TokenUIAccess,
587 TokenMandatoryPolicy,
588 TokenLogonSid,
589 MaxTokenInfoClass
590 } TOKEN_INFORMATION_CLASS, *PTOKEN_INFORMATION_CLASS;
591
592 typedef struct _TOKEN_USER {
593 SID_AND_ATTRIBUTES User;
594 } TOKEN_USER, *PTOKEN_USER;
595
596 typedef struct _TOKEN_GROUPS {
597 ULONG GroupCount;
598 SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
599 } TOKEN_GROUPS,*PTOKEN_GROUPS,*LPTOKEN_GROUPS;
600
601 typedef struct _TOKEN_PRIVILEGES {
602 ULONG PrivilegeCount;
603 LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
604 } TOKEN_PRIVILEGES,*PTOKEN_PRIVILEGES,*LPTOKEN_PRIVILEGES;
605
606 typedef struct _TOKEN_OWNER {
607 PSID Owner;
608 } TOKEN_OWNER,*PTOKEN_OWNER;
609
610 typedef struct _TOKEN_PRIMARY_GROUP {
611 PSID PrimaryGroup;
612 } TOKEN_PRIMARY_GROUP,*PTOKEN_PRIMARY_GROUP;
613
614 typedef struct _TOKEN_DEFAULT_DACL {
615 PACL DefaultDacl;
616 } TOKEN_DEFAULT_DACL,*PTOKEN_DEFAULT_DACL;
617
618 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES {
619 ULONG SidCount;
620 ULONG SidLength;
621 PSID_AND_ATTRIBUTES Sids;
622 ULONG RestrictedSidCount;
623 ULONG RestrictedSidLength;
624 PSID_AND_ATTRIBUTES RestrictedSids;
625 ULONG PrivilegeCount;
626 ULONG PrivilegeLength;
627 PLUID_AND_ATTRIBUTES Privileges;
628 LUID AuthenticationId;
629 } TOKEN_GROUPS_AND_PRIVILEGES, *PTOKEN_GROUPS_AND_PRIVILEGES;
630
631 typedef struct _TOKEN_LINKED_TOKEN {
632 HANDLE LinkedToken;
633 } TOKEN_LINKED_TOKEN, *PTOKEN_LINKED_TOKEN;
634
635 typedef struct _TOKEN_ELEVATION {
636 ULONG TokenIsElevated;
637 } TOKEN_ELEVATION, *PTOKEN_ELEVATION;
638
639 typedef struct _TOKEN_MANDATORY_LABEL {
640 SID_AND_ATTRIBUTES Label;
641 } TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL;
642
643 #define TOKEN_MANDATORY_POLICY_OFF 0x0
644 #define TOKEN_MANDATORY_POLICY_NO_WRITE_UP 0x1
645 #define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2
646
647 #define TOKEN_MANDATORY_POLICY_VALID_MASK (TOKEN_MANDATORY_POLICY_NO_WRITE_UP | \
648 TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN)
649
650 typedef struct _TOKEN_MANDATORY_POLICY {
651 ULONG Policy;
652 } TOKEN_MANDATORY_POLICY, *PTOKEN_MANDATORY_POLICY;
653
654 typedef struct _TOKEN_ACCESS_INFORMATION {
655 PSID_AND_ATTRIBUTES_HASH SidHash;
656 PSID_AND_ATTRIBUTES_HASH RestrictedSidHash;
657 PTOKEN_PRIVILEGES Privileges;
658 LUID AuthenticationId;
659 TOKEN_TYPE TokenType;
660 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
661 TOKEN_MANDATORY_POLICY MandatoryPolicy;
662 ULONG Flags;
663 } TOKEN_ACCESS_INFORMATION, *PTOKEN_ACCESS_INFORMATION;
664
665 #define POLICY_AUDIT_SUBCATEGORY_COUNT (53)
666
667 typedef struct _TOKEN_AUDIT_POLICY {
668 UCHAR PerUserPolicy[((POLICY_AUDIT_SUBCATEGORY_COUNT) >> 1) + 1];
669 } TOKEN_AUDIT_POLICY, *PTOKEN_AUDIT_POLICY;
670
671 #define TOKEN_SOURCE_LENGTH 8
672
673 typedef struct _TOKEN_SOURCE {
674 CHAR SourceName[TOKEN_SOURCE_LENGTH];
675 LUID SourceIdentifier;
676 } TOKEN_SOURCE,*PTOKEN_SOURCE;
677
678 typedef struct _TOKEN_STATISTICS {
679 LUID TokenId;
680 LUID AuthenticationId;
681 LARGE_INTEGER ExpirationTime;
682 TOKEN_TYPE TokenType;
683 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
684 ULONG DynamicCharged;
685 ULONG DynamicAvailable;
686 ULONG GroupCount;
687 ULONG PrivilegeCount;
688 LUID ModifiedId;
689 } TOKEN_STATISTICS, *PTOKEN_STATISTICS;
690
691 typedef struct _TOKEN_CONTROL {
692 LUID TokenId;
693 LUID AuthenticationId;
694 LUID ModifiedId;
695 TOKEN_SOURCE TokenSource;
696 } TOKEN_CONTROL,*PTOKEN_CONTROL;
697
698 typedef struct _TOKEN_ORIGIN {
699 LUID OriginatingLogonSession;
700 } TOKEN_ORIGIN, *PTOKEN_ORIGIN;
701
702 typedef enum _MANDATORY_LEVEL {
703 MandatoryLevelUntrusted = 0,
704 MandatoryLevelLow,
705 MandatoryLevelMedium,
706 MandatoryLevelHigh,
707 MandatoryLevelSystem,
708 MandatoryLevelSecureProcess,
709 MandatoryLevelCount
710 } MANDATORY_LEVEL, *PMANDATORY_LEVEL;
711
712 typedef enum _OBJECT_INFORMATION_CLASS {
713 ObjectBasicInformation = 0,
714 ObjectNameInformation = 1, /* FIXME, not in WDK */
715 ObjectTypeInformation = 2,
716 ObjectTypesInformation = 3, /* FIXME, not in WDK */
717 ObjectHandleFlagInformation = 4, /* FIXME, not in WDK */
718 ObjectSessionInformation = 5, /* FIXME, not in WDK */
719 MaxObjectInfoClass /* FIXME, not in WDK */
720 } OBJECT_INFORMATION_CLASS;
721
722 NTSYSCALLAPI
723 NTSTATUS
724 NTAPI
725 NtQueryObject(
726 IN HANDLE Handle OPTIONAL,
727 IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
728 OUT PVOID ObjectInformation OPTIONAL,
729 IN ULONG ObjectInformationLength,
730 OUT PULONG ReturnLength OPTIONAL);
731
732 #if (NTDDI_VERSION >= NTDDI_WIN2K)
733
734 NTSYSCALLAPI
735 NTSTATUS
736 NTAPI
737 NtOpenThreadToken(
738 IN HANDLE ThreadHandle,
739 IN ACCESS_MASK DesiredAccess,
740 IN BOOLEAN OpenAsSelf,
741 OUT PHANDLE TokenHandle);
742
743 NTSYSCALLAPI
744 NTSTATUS
745 NTAPI
746 NtOpenProcessToken(
747 IN HANDLE ProcessHandle,
748 IN ACCESS_MASK DesiredAccess,
749 OUT PHANDLE TokenHandle);
750
751 NTSYSCALLAPI
752 NTSTATUS
753 NTAPI
754 NtQueryInformationToken(
755 IN HANDLE TokenHandle,
756 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
757 OUT PVOID TokenInformation OPTIONAL,
758 IN ULONG TokenInformationLength,
759 OUT PULONG ReturnLength);
760
761 NTSYSCALLAPI
762 NTSTATUS
763 NTAPI
764 NtAdjustPrivilegesToken(
765 IN HANDLE TokenHandle,
766 IN BOOLEAN DisableAllPrivileges,
767 IN PTOKEN_PRIVILEGES NewState OPTIONAL,
768 IN ULONG BufferLength,
769 OUT PTOKEN_PRIVILEGES PreviousState,
770 OUT PULONG ReturnLength OPTIONAL);
771
772 NTSYSCALLAPI
773 NTSTATUS
774 NTAPI
775 NtCreateFile(
776 OUT PHANDLE FileHandle,
777 IN ACCESS_MASK DesiredAccess,
778 IN POBJECT_ATTRIBUTES ObjectAttributes,
779 OUT PIO_STATUS_BLOCK IoStatusBlock,
780 IN PLARGE_INTEGER AllocationSize OPTIONAL,
781 IN ULONG FileAttributes,
782 IN ULONG ShareAccess,
783 IN ULONG CreateDisposition,
784 IN ULONG CreateOptions,
785 IN PVOID EaBuffer,
786 IN ULONG EaLength);
787
788 NTSYSCALLAPI
789 NTSTATUS
790 NTAPI
791 NtDeviceIoControlFile(
792 IN HANDLE FileHandle,
793 IN HANDLE Event OPTIONAL,
794 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
795 IN PVOID ApcContext OPTIONAL,
796 OUT PIO_STATUS_BLOCK IoStatusBlock,
797 IN ULONG IoControlCode,
798 IN PVOID InputBuffer OPTIONAL,
799 IN ULONG InputBufferLength,
800 OUT PVOID OutputBuffer OPTIONAL,
801 IN ULONG OutputBufferLength);
802
803 NTSYSCALLAPI
804 NTSTATUS
805 NTAPI
806 NtFsControlFile(
807 IN HANDLE FileHandle,
808 IN HANDLE Event OPTIONAL,
809 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
810 IN PVOID ApcContext OPTIONAL,
811 OUT PIO_STATUS_BLOCK IoStatusBlock,
812 IN ULONG FsControlCode,
813 IN PVOID InputBuffer OPTIONAL,
814 IN ULONG InputBufferLength,
815 OUT PVOID OutputBuffer OPTIONAL,
816 IN ULONG OutputBufferLength);
817
818 NTSYSCALLAPI
819 NTSTATUS
820 NTAPI
821 NtLockFile(
822 IN HANDLE FileHandle,
823 IN HANDLE Event OPTIONAL,
824 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
825 IN PVOID ApcContext OPTIONAL,
826 OUT PIO_STATUS_BLOCK IoStatusBlock,
827 IN PLARGE_INTEGER ByteOffset,
828 IN PLARGE_INTEGER Length,
829 IN ULONG Key,
830 IN BOOLEAN FailImmediately,
831 IN BOOLEAN ExclusiveLock);
832
833 NTSYSCALLAPI
834 NTSTATUS
835 NTAPI
836 NtOpenFile(
837 OUT PHANDLE FileHandle,
838 IN ACCESS_MASK DesiredAccess,
839 IN POBJECT_ATTRIBUTES ObjectAttributes,
840 OUT PIO_STATUS_BLOCK IoStatusBlock,
841 IN ULONG ShareAccess,
842 IN ULONG OpenOptions);
843
844 NTSYSCALLAPI
845 NTSTATUS
846 NTAPI
847 NtQueryDirectoryFile(
848 IN HANDLE FileHandle,
849 IN HANDLE Event OPTIONAL,
850 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
851 IN PVOID ApcContext OPTIONAL,
852 OUT PIO_STATUS_BLOCK IoStatusBlock,
853 OUT PVOID FileInformation,
854 IN ULONG Length,
855 IN FILE_INFORMATION_CLASS FileInformationClass,
856 IN BOOLEAN ReturnSingleEntry,
857 IN PUNICODE_STRING FileName OPTIONAL,
858 IN BOOLEAN RestartScan);
859
860 NTSYSCALLAPI
861 NTSTATUS
862 NTAPI
863 NtQueryInformationFile(
864 IN HANDLE FileHandle,
865 OUT PIO_STATUS_BLOCK IoStatusBlock,
866 OUT PVOID FileInformation,
867 IN ULONG Length,
868 IN FILE_INFORMATION_CLASS FileInformationClass);
869
870 NTSYSCALLAPI
871 NTSTATUS
872 NTAPI
873 NtQueryQuotaInformationFile(
874 IN HANDLE FileHandle,
875 OUT PIO_STATUS_BLOCK IoStatusBlock,
876 OUT PVOID Buffer,
877 IN ULONG Length,
878 IN BOOLEAN ReturnSingleEntry,
879 IN PVOID SidList,
880 IN ULONG SidListLength,
881 IN PSID StartSid OPTIONAL,
882 IN BOOLEAN RestartScan);
883
884 NTSYSCALLAPI
885 NTSTATUS
886 NTAPI
887 NtQueryVolumeInformationFile(
888 IN HANDLE FileHandle,
889 OUT PIO_STATUS_BLOCK IoStatusBlock,
890 OUT PVOID FsInformation,
891 IN ULONG Length,
892 IN FS_INFORMATION_CLASS FsInformationClass);
893
894 NTSYSCALLAPI
895 NTSTATUS
896 NTAPI
897 NtReadFile(
898 IN HANDLE FileHandle,
899 IN HANDLE Event OPTIONAL,
900 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
901 IN PVOID ApcContext OPTIONAL,
902 OUT PIO_STATUS_BLOCK IoStatusBlock,
903 OUT PVOID Buffer,
904 IN ULONG Length,
905 IN PLARGE_INTEGER ByteOffset OPTIONAL,
906 IN PULONG Key OPTIONAL);
907
908 NTSYSCALLAPI
909 NTSTATUS
910 NTAPI
911 NtSetInformationFile(
912 IN HANDLE FileHandle,
913 OUT PIO_STATUS_BLOCK IoStatusBlock,
914 IN PVOID FileInformation,
915 IN ULONG Length,
916 IN FILE_INFORMATION_CLASS FileInformationClass);
917
918 NTSYSCALLAPI
919 NTSTATUS
920 NTAPI
921 NtSetQuotaInformationFile(
922 IN HANDLE FileHandle,
923 OUT PIO_STATUS_BLOCK IoStatusBlock,
924 IN PVOID Buffer,
925 IN ULONG Length);
926
927 NTSYSCALLAPI
928 NTSTATUS
929 NTAPI
930 NtSetVolumeInformationFile(
931 IN HANDLE FileHandle,
932 OUT PIO_STATUS_BLOCK IoStatusBlock,
933 IN PVOID FsInformation,
934 IN ULONG Length,
935 IN FS_INFORMATION_CLASS FsInformationClass);
936
937 NTSYSCALLAPI
938 NTSTATUS
939 NTAPI
940 NtWriteFile(
941 IN HANDLE FileHandle,
942 IN HANDLE Event OPTIONAL,
943 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
944 IN PVOID ApcContext OPTIONAL,
945 OUT PIO_STATUS_BLOCK IoStatusBlock,
946 IN PVOID Buffer,
947 IN ULONG Length,
948 IN PLARGE_INTEGER ByteOffset OPTIONAL,
949 IN PULONG Key OPTIONAL);
950
951 NTSYSCALLAPI
952 NTSTATUS
953 NTAPI
954 NtUnlockFile(
955 IN HANDLE FileHandle,
956 OUT PIO_STATUS_BLOCK IoStatusBlock,
957 IN PLARGE_INTEGER ByteOffset,
958 IN PLARGE_INTEGER Length,
959 IN ULONG Key);
960
961 NTSYSCALLAPI
962 NTSTATUS
963 NTAPI
964 NtSetSecurityObject(
965 IN HANDLE Handle,
966 IN SECURITY_INFORMATION SecurityInformation,
967 IN PSECURITY_DESCRIPTOR SecurityDescriptor);
968
969 NTSYSCALLAPI
970 NTSTATUS
971 NTAPI
972 NtQuerySecurityObject(
973 IN HANDLE Handle,
974 IN SECURITY_INFORMATION SecurityInformation,
975 OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
976 IN ULONG Length,
977 OUT PULONG LengthNeeded);
978
979 NTSYSCALLAPI
980 NTSTATUS
981 NTAPI
982 NtClose(
983 IN HANDLE Handle);
984
985 NTSYSCALLAPI
986 NTSTATUS
987 NTAPI
988 NtAllocateVirtualMemory(
989 IN HANDLE ProcessHandle,
990 IN OUT PVOID *BaseAddress,
991 IN ULONG_PTR ZeroBits,
992 IN OUT PSIZE_T RegionSize,
993 IN ULONG AllocationType,
994 IN ULONG Protect);
995
996 NTSYSCALLAPI
997 NTSTATUS
998 NTAPI
999 NtFreeVirtualMemory(
1000 IN HANDLE ProcessHandle,
1001 IN OUT PVOID *BaseAddress,
1002 IN OUT PSIZE_T RegionSize,
1003 IN ULONG FreeType);
1004
1005 #endif
1006
1007 #if (NTDDI_VERSION >= NTDDI_WINXP)
1008
1009 NTSYSCALLAPI
1010 NTSTATUS
1011 NTAPI
1012 NtOpenThreadTokenEx(
1013 IN HANDLE ThreadHandle,
1014 IN ACCESS_MASK DesiredAccess,
1015 IN BOOLEAN OpenAsSelf,
1016 IN ULONG HandleAttributes,
1017 OUT PHANDLE TokenHandle);
1018
1019 NTSYSCALLAPI
1020 NTSTATUS
1021 NTAPI
1022 NtOpenProcessTokenEx(
1023 IN HANDLE ProcessHandle,
1024 IN ACCESS_MASK DesiredAccess,
1025 IN ULONG HandleAttributes,
1026 OUT PHANDLE TokenHandle);
1027
1028 NTSYSAPI
1029 NTSTATUS
1030 NTAPI
1031 NtOpenJobObjectToken(
1032 IN HANDLE JobHandle,
1033 IN ACCESS_MASK DesiredAccess,
1034 OUT PHANDLE TokenHandle);
1035
1036 NTSYSCALLAPI
1037 NTSTATUS
1038 NTAPI
1039 NtDuplicateToken(
1040 IN HANDLE ExistingTokenHandle,
1041 IN ACCESS_MASK DesiredAccess,
1042 IN POBJECT_ATTRIBUTES ObjectAttributes,
1043 IN BOOLEAN EffectiveOnly,
1044 IN TOKEN_TYPE TokenType,
1045 OUT PHANDLE NewTokenHandle);
1046
1047 NTSYSCALLAPI
1048 NTSTATUS
1049 NTAPI
1050 NtFilterToken(
1051 IN HANDLE ExistingTokenHandle,
1052 IN ULONG Flags,
1053 IN PTOKEN_GROUPS SidsToDisable OPTIONAL,
1054 IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL,
1055 IN PTOKEN_GROUPS RestrictedSids OPTIONAL,
1056 OUT PHANDLE NewTokenHandle);
1057
1058 NTSYSCALLAPI
1059 NTSTATUS
1060 NTAPI
1061 NtImpersonateAnonymousToken(
1062 IN HANDLE ThreadHandle);
1063
1064 NTSYSCALLAPI
1065 NTSTATUS
1066 NTAPI
1067 NtSetInformationToken(
1068 IN HANDLE TokenHandle,
1069 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
1070 IN PVOID TokenInformation,
1071 IN ULONG TokenInformationLength);
1072
1073 NTSYSCALLAPI
1074 NTSTATUS
1075 NTAPI
1076 NtAdjustGroupsToken(
1077 IN HANDLE TokenHandle,
1078 IN BOOLEAN ResetToDefault,
1079 IN PTOKEN_GROUPS NewState OPTIONAL,
1080 IN ULONG BufferLength OPTIONAL,
1081 OUT PTOKEN_GROUPS PreviousState,
1082 OUT PULONG ReturnLength);
1083
1084 NTSYSCALLAPI
1085 NTSTATUS
1086 NTAPI
1087 NtPrivilegeCheck(
1088 IN HANDLE ClientToken,
1089 IN OUT PPRIVILEGE_SET RequiredPrivileges,
1090 OUT PBOOLEAN Result);
1091
1092 NTSYSCALLAPI
1093 NTSTATUS
1094 NTAPI
1095 NtAccessCheckAndAuditAlarm(
1096 IN PUNICODE_STRING SubsystemName,
1097 IN PVOID HandleId OPTIONAL,
1098 IN PUNICODE_STRING ObjectTypeName,
1099 IN PUNICODE_STRING ObjectName,
1100 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1101 IN ACCESS_MASK DesiredAccess,
1102 IN PGENERIC_MAPPING GenericMapping,
1103 IN BOOLEAN ObjectCreation,
1104 OUT PACCESS_MASK GrantedAccess,
1105 OUT PNTSTATUS AccessStatus,
1106 OUT PBOOLEAN GenerateOnClose);
1107
1108 NTSYSCALLAPI
1109 NTSTATUS
1110 NTAPI
1111 NtAccessCheckByTypeAndAuditAlarm(
1112 IN PUNICODE_STRING SubsystemName,
1113 IN PVOID HandleId,
1114 IN PUNICODE_STRING ObjectTypeName,
1115 IN PUNICODE_STRING ObjectName,
1116 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1117 IN PSID PrincipalSelfSid OPTIONAL,
1118 IN ACCESS_MASK DesiredAccess,
1119 IN AUDIT_EVENT_TYPE AuditType,
1120 IN ULONG Flags,
1121 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL,
1122 IN ULONG ObjectTypeLength,
1123 IN PGENERIC_MAPPING GenericMapping,
1124 IN BOOLEAN ObjectCreation,
1125 OUT PACCESS_MASK GrantedAccess,
1126 OUT PNTSTATUS AccessStatus,
1127 OUT PBOOLEAN GenerateOnClose);
1128
1129 NTSYSCALLAPI
1130 NTSTATUS
1131 NTAPI
1132 NtAccessCheckByTypeResultListAndAuditAlarm(
1133 IN PUNICODE_STRING SubsystemName,
1134 IN PVOID HandleId OPTIONAL,
1135 IN PUNICODE_STRING ObjectTypeName,
1136 IN PUNICODE_STRING ObjectName,
1137 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1138 IN PSID PrincipalSelfSid OPTIONAL,
1139 IN ACCESS_MASK DesiredAccess,
1140 IN AUDIT_EVENT_TYPE AuditType,
1141 IN ULONG Flags,
1142 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL,
1143 IN ULONG ObjectTypeLength,
1144 IN PGENERIC_MAPPING GenericMapping,
1145 IN BOOLEAN ObjectCreation,
1146 OUT PACCESS_MASK GrantedAccess,
1147 OUT PNTSTATUS AccessStatus,
1148 OUT PBOOLEAN GenerateOnClose);
1149
1150 NTSTATUS
1151 NTAPI
1152 NtAccessCheckByTypeResultListAndAuditAlarmByHandle(
1153 IN PUNICODE_STRING SubsystemName,
1154 IN PVOID HandleId OPTIONAL,
1155 IN HANDLE ClientToken,
1156 IN PUNICODE_STRING ObjectTypeName,
1157 IN PUNICODE_STRING ObjectName,
1158 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1159 IN PSID PrincipalSelfSid OPTIONAL,
1160 IN ACCESS_MASK DesiredAccess,
1161 IN AUDIT_EVENT_TYPE AuditType,
1162 IN ULONG Flags,
1163 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL,
1164 IN ULONG ObjectTypeLength,
1165 IN PGENERIC_MAPPING GenericMapping,
1166 IN BOOLEAN ObjectCreation,
1167 OUT PACCESS_MASK GrantedAccess,
1168 OUT PNTSTATUS AccessStatus,
1169 OUT PBOOLEAN GenerateOnClose);
1170
1171 NTSYSCALLAPI
1172 NTSTATUS
1173 NTAPI
1174 NtOpenObjectAuditAlarm(
1175 IN PUNICODE_STRING SubsystemName,
1176 IN PVOID HandleId OPTIONAL,
1177 IN PUNICODE_STRING ObjectTypeName,
1178 IN PUNICODE_STRING ObjectName,
1179 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
1180 IN HANDLE ClientToken,
1181 IN ACCESS_MASK DesiredAccess,
1182 IN ACCESS_MASK GrantedAccess,
1183 IN PPRIVILEGE_SET Privileges OPTIONAL,
1184 IN BOOLEAN ObjectCreation,
1185 IN BOOLEAN AccessGranted,
1186 OUT PBOOLEAN GenerateOnClose);
1187
1188 NTSYSCALLAPI
1189 NTSTATUS
1190 NTAPI
1191 NtPrivilegeObjectAuditAlarm(
1192 IN PUNICODE_STRING SubsystemName,
1193 IN PVOID HandleId OPTIONAL,
1194 IN HANDLE ClientToken,
1195 IN ACCESS_MASK DesiredAccess,
1196 IN PPRIVILEGE_SET Privileges,
1197 IN BOOLEAN AccessGranted);
1198
1199 NTSYSCALLAPI
1200 NTSTATUS
1201 NTAPI
1202 NtCloseObjectAuditAlarm(
1203 IN PUNICODE_STRING SubsystemName,
1204 IN PVOID HandleId OPTIONAL,
1205 IN BOOLEAN GenerateOnClose);
1206
1207 NTSYSCALLAPI
1208 NTSTATUS
1209 NTAPI
1210 NtDeleteObjectAuditAlarm(
1211 IN PUNICODE_STRING SubsystemName,
1212 IN PVOID HandleId OPTIONAL,
1213 IN BOOLEAN GenerateOnClose);
1214
1215 NTSYSCALLAPI
1216 NTSTATUS
1217 NTAPI
1218 NtPrivilegedServiceAuditAlarm(
1219 IN PUNICODE_STRING SubsystemName,
1220 IN PUNICODE_STRING ServiceName,
1221 IN HANDLE ClientToken,
1222 IN PPRIVILEGE_SET Privileges,
1223 IN BOOLEAN AccessGranted);
1224
1225 NTSYSCALLAPI
1226 NTSTATUS
1227 NTAPI
1228 NtSetInformationThread(
1229 IN HANDLE ThreadHandle,
1230 IN THREADINFOCLASS ThreadInformationClass,
1231 IN PVOID ThreadInformation,
1232 IN ULONG ThreadInformationLength);
1233
1234 NTSYSCALLAPI
1235 NTSTATUS
1236 NTAPI
1237 NtCreateSection(
1238 OUT PHANDLE SectionHandle,
1239 IN ACCESS_MASK DesiredAccess,
1240 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
1241 IN PLARGE_INTEGER MaximumSize OPTIONAL,
1242 IN ULONG SectionPageProtection,
1243 IN ULONG AllocationAttributes,
1244 IN HANDLE FileHandle OPTIONAL);
1245
1246 #endif
1247
1248 typedef NTSTATUS
1249 (NTAPI * PRTL_HEAP_COMMIT_ROUTINE) (
1250 IN PVOID Base,
1251 IN OUT PVOID *CommitAddress,
1252 IN OUT PSIZE_T CommitSize);
1253
1254 typedef struct _RTL_HEAP_PARAMETERS {
1255 ULONG Length;
1256 SIZE_T SegmentReserve;
1257 SIZE_T SegmentCommit;
1258 SIZE_T DeCommitFreeBlockThreshold;
1259 SIZE_T DeCommitTotalFreeThreshold;
1260 SIZE_T MaximumAllocationSize;
1261 SIZE_T VirtualMemoryThreshold;
1262 SIZE_T InitialCommit;
1263 SIZE_T InitialReserve;
1264 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
1265 SIZE_T Reserved[2];
1266 } RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
1267
1268 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1269
1270 NTSYSAPI
1271 PVOID
1272 NTAPI
1273 RtlAllocateHeap(
1274 IN HANDLE HeapHandle,
1275 IN ULONG Flags OPTIONAL,
1276 IN SIZE_T Size);
1277
1278 NTSYSAPI
1279 BOOLEAN
1280 NTAPI
1281 RtlFreeHeap(
1282 IN PVOID HeapHandle,
1283 IN ULONG Flags OPTIONAL,
1284 IN PVOID BaseAddress);
1285
1286 NTSYSAPI
1287 VOID
1288 NTAPI
1289 RtlCaptureContext(
1290 OUT PCONTEXT ContextRecord);
1291
1292 NTSYSAPI
1293 ULONG
1294 NTAPI
1295 RtlRandom(
1296 IN OUT PULONG Seed);
1297
1298 NTSYSAPI
1299 BOOLEAN
1300 NTAPI
1301 RtlCreateUnicodeString(
1302 OUT PUNICODE_STRING DestinationString,
1303 IN PCWSTR SourceString);
1304
1305 NTSYSAPI
1306 NTSTATUS
1307 NTAPI
1308 RtlAppendStringToString(
1309 IN OUT PSTRING Destination,
1310 IN const STRING *Source);
1311
1312 NTSYSAPI
1313 NTSTATUS
1314 NTAPI
1315 RtlOemStringToUnicodeString(
1316 IN OUT PUNICODE_STRING DestinationString,
1317 IN PCOEM_STRING SourceString,
1318 IN BOOLEAN AllocateDestinationString);
1319
1320 NTSYSAPI
1321 NTSTATUS
1322 NTAPI
1323 RtlUnicodeStringToOemString(
1324 IN OUT POEM_STRING DestinationString,
1325 IN PCUNICODE_STRING SourceString,
1326 IN BOOLEAN AllocateDestinationString);
1327
1328 NTSYSAPI
1329 NTSTATUS
1330 NTAPI
1331 RtlUpcaseUnicodeStringToOemString(
1332 IN OUT POEM_STRING DestinationString,
1333 IN PCUNICODE_STRING SourceString,
1334 IN BOOLEAN AllocateDestinationString);
1335
1336 NTSYSAPI
1337 NTSTATUS
1338 NTAPI
1339 RtlOemStringToCountedUnicodeString(
1340 IN OUT PUNICODE_STRING DestinationString,
1341 IN PCOEM_STRING SourceString,
1342 IN BOOLEAN AllocateDestinationString);
1343
1344 NTSYSAPI
1345 NTSTATUS
1346 NTAPI
1347 RtlUnicodeStringToCountedOemString(
1348 IN OUT POEM_STRING DestinationString,
1349 IN PCUNICODE_STRING SourceString,
1350 IN BOOLEAN AllocateDestinationString);
1351
1352 NTSYSAPI
1353 NTSTATUS
1354 NTAPI
1355 RtlUpcaseUnicodeStringToCountedOemString(
1356 IN OUT POEM_STRING DestinationString,
1357 IN PCUNICODE_STRING SourceString,
1358 IN BOOLEAN AllocateDestinationString);
1359
1360 NTSYSAPI
1361 NTSTATUS
1362 NTAPI
1363 RtlDowncaseUnicodeString(
1364 IN OUT PUNICODE_STRING UniDest,
1365 IN PCUNICODE_STRING UniSource,
1366 IN BOOLEAN AllocateDestinationString);
1367
1368 NTSYSAPI
1369 VOID
1370 NTAPI
1371 RtlFreeOemString (
1372 IN OUT POEM_STRING OemString);
1373
1374 NTSYSAPI
1375 ULONG
1376 NTAPI
1377 RtlxUnicodeStringToOemSize(
1378 IN PCUNICODE_STRING UnicodeString);
1379
1380 NTSYSAPI
1381 ULONG
1382 NTAPI
1383 RtlxOemStringToUnicodeSize(
1384 IN PCOEM_STRING OemString);
1385
1386 NTSYSAPI
1387 NTSTATUS
1388 NTAPI
1389 RtlMultiByteToUnicodeN(
1390 OUT PWCH UnicodeString,
1391 IN ULONG MaxBytesInUnicodeString,
1392 OUT PULONG BytesInUnicodeString OPTIONAL,
1393 IN const CHAR *MultiByteString,
1394 IN ULONG BytesInMultiByteString);
1395
1396 NTSYSAPI
1397 NTSTATUS
1398 NTAPI
1399 RtlMultiByteToUnicodeSize(
1400 OUT PULONG BytesInUnicodeString,
1401 IN const CHAR *MultiByteString,
1402 IN ULONG BytesInMultiByteString);
1403
1404 NTSYSAPI
1405 NTSTATUS
1406 NTAPI
1407 RtlUnicodeToMultiByteSize(
1408 OUT PULONG BytesInMultiByteString,
1409 IN PCWCH UnicodeString,
1410 IN ULONG BytesInUnicodeString);
1411
1412 NTSYSAPI
1413 NTSTATUS
1414 NTAPI
1415 RtlUnicodeToMultiByteN(
1416 OUT PCHAR MultiByteString,
1417 IN ULONG MaxBytesInMultiByteString,
1418 OUT PULONG BytesInMultiByteString OPTIONAL,
1419 IN PWCH UnicodeString,
1420 IN ULONG BytesInUnicodeString);
1421
1422 NTSYSAPI
1423 NTSTATUS
1424 NTAPI
1425 RtlUpcaseUnicodeToMultiByteN(
1426 OUT PCHAR MultiByteString,
1427 IN ULONG MaxBytesInMultiByteString,
1428 OUT PULONG BytesInMultiByteString OPTIONAL,
1429 IN PCWCH UnicodeString,
1430 IN ULONG BytesInUnicodeString);
1431
1432 NTSYSAPI
1433 NTSTATUS
1434 NTAPI
1435 RtlOemToUnicodeN(
1436 OUT PWSTR UnicodeString,
1437 IN ULONG MaxBytesInUnicodeString,
1438 OUT PULONG BytesInUnicodeString OPTIONAL,
1439 IN PCCH OemString,
1440 IN ULONG BytesInOemString);
1441
1442 NTSYSAPI
1443 NTSTATUS
1444 NTAPI
1445 RtlUnicodeToOemN(
1446 OUT PCHAR OemString,
1447 IN ULONG MaxBytesInOemString,
1448 OUT PULONG BytesInOemString OPTIONAL,
1449 IN PCWCH UnicodeString,
1450 IN ULONG BytesInUnicodeString);
1451
1452 NTSYSAPI
1453 NTSTATUS
1454 NTAPI
1455 RtlUpcaseUnicodeToOemN(
1456 OUT PCHAR OemString,
1457 IN ULONG MaxBytesInOemString,
1458 OUT PULONG BytesInOemString OPTIONAL,
1459 IN PCWCH UnicodeString,
1460 IN ULONG BytesInUnicodeString);
1461
1462 typedef struct _GENERATE_NAME_CONTEXT {
1463 USHORT Checksum;
1464 BOOLEAN CheckSumInserted;
1465 UCHAR NameLength;
1466 WCHAR NameBuffer[8];
1467 ULONG ExtensionLength;
1468 WCHAR ExtensionBuffer[4];
1469 ULONG LastIndexValue;
1470 } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
1471
1472 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1473 NTSYSAPI
1474 NTSTATUS
1475 NTAPI
1476 RtlGenerate8dot3Name(
1477 IN PCUNICODE_STRING Name,
1478 IN BOOLEAN AllowExtendedCharacters,
1479 IN OUT PGENERATE_NAME_CONTEXT Context,
1480 IN OUT PUNICODE_STRING Name8dot3);
1481 #else
1482 NTSYSAPI
1483 VOID
1484 NTAPI
1485 RtlGenerate8dot3Name(
1486 IN PCUNICODE_STRING Name,
1487 IN BOOLEAN AllowExtendedCharacters,
1488 IN OUT PGENERATE_NAME_CONTEXT Context,
1489 IN OUT PUNICODE_STRING Name8dot3);
1490 #endif
1491
1492 NTSYSAPI
1493 BOOLEAN
1494 NTAPI
1495 RtlIsNameLegalDOS8Dot3(
1496 IN PCUNICODE_STRING Name,
1497 IN OUT POEM_STRING OemName OPTIONAL,
1498 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL);
1499
1500 NTSYSAPI
1501 BOOLEAN
1502 NTAPI
1503 RtlIsValidOemCharacter(
1504 IN OUT PWCHAR Char);
1505
1506 typedef struct _PREFIX_TABLE_ENTRY {
1507 CSHORT NodeTypeCode;
1508 CSHORT NameLength;
1509 struct _PREFIX_TABLE_ENTRY *NextPrefixTree;
1510 RTL_SPLAY_LINKS Links;
1511 PSTRING Prefix;
1512 } PREFIX_TABLE_ENTRY, *PPREFIX_TABLE_ENTRY;
1513
1514 typedef struct _PREFIX_TABLE {
1515 CSHORT NodeTypeCode;
1516 CSHORT NameLength;
1517 PPREFIX_TABLE_ENTRY NextPrefixTree;
1518 } PREFIX_TABLE, *PPREFIX_TABLE;
1519
1520 NTSYSAPI
1521 VOID
1522 NTAPI
1523 PfxInitialize(
1524 OUT PPREFIX_TABLE PrefixTable);
1525
1526 NTSYSAPI
1527 BOOLEAN
1528 NTAPI
1529 PfxInsertPrefix(
1530 IN PPREFIX_TABLE PrefixTable,
1531 IN PSTRING Prefix,
1532 OUT PPREFIX_TABLE_ENTRY PrefixTableEntry);
1533
1534 NTSYSAPI
1535 VOID
1536 NTAPI
1537 PfxRemovePrefix(
1538 IN PPREFIX_TABLE PrefixTable,
1539 IN PPREFIX_TABLE_ENTRY PrefixTableEntry);
1540
1541 NTSYSAPI
1542 PPREFIX_TABLE_ENTRY
1543 NTAPI
1544 PfxFindPrefix(
1545 IN PPREFIX_TABLE PrefixTable,
1546 IN PSTRING FullName);
1547
1548 typedef struct _UNICODE_PREFIX_TABLE_ENTRY {
1549 CSHORT NodeTypeCode;
1550 CSHORT NameLength;
1551 struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
1552 struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
1553 RTL_SPLAY_LINKS Links;
1554 PUNICODE_STRING Prefix;
1555 } UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
1556
1557 typedef struct _UNICODE_PREFIX_TABLE {
1558 CSHORT NodeTypeCode;
1559 CSHORT NameLength;
1560 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
1561 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
1562 } UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
1563
1564 NTSYSAPI
1565 VOID
1566 NTAPI
1567 RtlInitializeUnicodePrefix(
1568 OUT PUNICODE_PREFIX_TABLE PrefixTable);
1569
1570 NTSYSAPI
1571 BOOLEAN
1572 NTAPI
1573 RtlInsertUnicodePrefix(
1574 IN PUNICODE_PREFIX_TABLE PrefixTable,
1575 IN PUNICODE_STRING Prefix,
1576 OUT PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry);
1577
1578 NTSYSAPI
1579 VOID
1580 NTAPI
1581 RtlRemoveUnicodePrefix(
1582 IN PUNICODE_PREFIX_TABLE PrefixTable,
1583 IN PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry);
1584
1585 NTSYSAPI
1586 PUNICODE_PREFIX_TABLE_ENTRY
1587 NTAPI
1588 RtlFindUnicodePrefix(
1589 IN PUNICODE_PREFIX_TABLE PrefixTable,
1590 IN PUNICODE_STRING FullName,
1591 IN ULONG CaseInsensitiveIndex);
1592
1593 NTSYSAPI
1594 PUNICODE_PREFIX_TABLE_ENTRY
1595 NTAPI
1596 RtlNextUnicodePrefix(
1597 IN PUNICODE_PREFIX_TABLE PrefixTable,
1598 IN BOOLEAN Restart);
1599
1600 NTSYSAPI
1601 SIZE_T
1602 NTAPI
1603 RtlCompareMemoryUlong(
1604 IN PVOID Source,
1605 IN SIZE_T Length,
1606 IN ULONG Pattern);
1607
1608 NTSYSAPI
1609 BOOLEAN
1610 NTAPI
1611 RtlTimeToSecondsSince1980(
1612 IN PLARGE_INTEGER Time,
1613 OUT PULONG ElapsedSeconds);
1614
1615 NTSYSAPI
1616 VOID
1617 NTAPI
1618 RtlSecondsSince1980ToTime(
1619 IN ULONG ElapsedSeconds,
1620 OUT PLARGE_INTEGER Time);
1621
1622 NTSYSAPI
1623 BOOLEAN
1624 NTAPI
1625 RtlTimeToSecondsSince1970(
1626 IN PLARGE_INTEGER Time,
1627 OUT PULONG ElapsedSeconds);
1628
1629 NTSYSAPI
1630 VOID
1631 NTAPI
1632 RtlSecondsSince1970ToTime(
1633 IN ULONG ElapsedSeconds,
1634 OUT PLARGE_INTEGER Time);
1635
1636 NTSYSAPI
1637 BOOLEAN
1638 NTAPI
1639 RtlValidSid(
1640 IN PSID Sid);
1641
1642 NTSYSAPI
1643 BOOLEAN
1644 NTAPI
1645 RtlEqualSid(
1646 IN PSID Sid1,
1647 IN PSID Sid2);
1648
1649 NTSYSAPI
1650 BOOLEAN
1651 NTAPI
1652 RtlEqualPrefixSid(
1653 IN PSID Sid1,
1654 IN PSID Sid2);
1655
1656 NTSYSAPI
1657 ULONG
1658 NTAPI
1659 RtlLengthRequiredSid(
1660 IN ULONG SubAuthorityCount);
1661
1662 NTSYSAPI
1663 PVOID
1664 NTAPI
1665 RtlFreeSid(
1666 IN PSID Sid);
1667
1668 NTSYSAPI
1669 NTSTATUS
1670 NTAPI
1671 RtlAllocateAndInitializeSid(
1672 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
1673 IN UCHAR SubAuthorityCount,
1674 IN ULONG SubAuthority0,
1675 IN ULONG SubAuthority1,
1676 IN ULONG SubAuthority2,
1677 IN ULONG SubAuthority3,
1678 IN ULONG SubAuthority4,
1679 IN ULONG SubAuthority5,
1680 IN ULONG SubAuthority6,
1681 IN ULONG SubAuthority7,
1682 OUT PSID *Sid);
1683
1684 NTSYSAPI
1685 NTSTATUS
1686 NTAPI
1687 RtlInitializeSid(
1688 OUT PSID Sid,
1689 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
1690 IN UCHAR SubAuthorityCount);
1691
1692 NTSYSAPI
1693 PULONG
1694 NTAPI
1695 RtlSubAuthoritySid(
1696 IN PSID Sid,
1697 IN ULONG SubAuthority);
1698
1699 NTSYSAPI
1700 ULONG
1701 NTAPI
1702 RtlLengthSid(
1703 IN PSID Sid);
1704
1705 NTSYSAPI
1706 NTSTATUS
1707 NTAPI
1708 RtlCopySid(
1709 IN ULONG Length,
1710 IN PSID Destination,
1711 IN PSID Source);
1712
1713 NTSYSAPI
1714 NTSTATUS
1715 NTAPI
1716 RtlConvertSidToUnicodeString(
1717 IN OUT PUNICODE_STRING UnicodeString,
1718 IN PSID Sid,
1719 IN BOOLEAN AllocateDestinationString);
1720
1721 NTSYSAPI
1722 VOID
1723 NTAPI
1724 RtlCopyLuid(
1725 OUT PLUID DestinationLuid,
1726 IN PLUID SourceLuid);
1727
1728 NTSYSAPI
1729 NTSTATUS
1730 NTAPI
1731 RtlCreateAcl(
1732 OUT PACL Acl,
1733 IN ULONG AclLength,
1734 IN ULONG AclRevision);
1735
1736 NTSYSAPI
1737 NTSTATUS
1738 NTAPI
1739 RtlAddAce(
1740 IN OUT PACL Acl,
1741 IN ULONG AceRevision,
1742 IN ULONG StartingAceIndex,
1743 IN PVOID AceList,
1744 IN ULONG AceListLength);
1745
1746 NTSYSAPI
1747 NTSTATUS
1748 NTAPI
1749 RtlDeleteAce(
1750 IN OUT PACL Acl,
1751 IN ULONG AceIndex);
1752
1753 NTSYSAPI
1754 NTSTATUS
1755 NTAPI
1756 RtlGetAce(
1757 IN PACL Acl,
1758 IN ULONG AceIndex,
1759 OUT PVOID *Ace);
1760
1761 NTSYSAPI
1762 NTSTATUS
1763 NTAPI
1764 RtlAddAccessAllowedAce(
1765 IN OUT PACL Acl,
1766 IN ULONG AceRevision,
1767 IN ACCESS_MASK AccessMask,
1768 IN PSID Sid);
1769
1770 NTSYSAPI
1771 NTSTATUS
1772 NTAPI
1773 RtlAddAccessAllowedAceEx(
1774 IN OUT PACL Acl,
1775 IN ULONG AceRevision,
1776 IN ULONG AceFlags,
1777 IN ACCESS_MASK AccessMask,
1778 IN PSID Sid);
1779
1780 NTSYSAPI
1781 NTSTATUS
1782 NTAPI
1783 RtlCreateSecurityDescriptorRelative(
1784 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor,
1785 IN ULONG Revision);
1786
1787 NTSYSAPI
1788 NTSTATUS
1789 NTAPI
1790 RtlGetDaclSecurityDescriptor(
1791 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1792 OUT PBOOLEAN DaclPresent,
1793 OUT PACL *Dacl,
1794 OUT PBOOLEAN DaclDefaulted);
1795
1796 NTSYSAPI
1797 NTSTATUS
1798 NTAPI
1799 RtlSetOwnerSecurityDescriptor(
1800 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1801 IN PSID Owner OPTIONAL,
1802 IN BOOLEAN OwnerDefaulted);
1803
1804 NTSYSAPI
1805 NTSTATUS
1806 NTAPI
1807 RtlGetOwnerSecurityDescriptor(
1808 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1809 OUT PSID *Owner,
1810 OUT PBOOLEAN OwnerDefaulted);
1811
1812 NTSYSAPI
1813 ULONG
1814 NTAPI
1815 RtlNtStatusToDosError(
1816 IN NTSTATUS Status);
1817
1818 NTSYSAPI
1819 NTSTATUS
1820 NTAPI
1821 RtlCustomCPToUnicodeN(
1822 IN PCPTABLEINFO CustomCP,
1823 OUT PWCH UnicodeString,
1824 IN ULONG MaxBytesInUnicodeString,
1825 OUT PULONG BytesInUnicodeString OPTIONAL,
1826 IN PCH CustomCPString,
1827 IN ULONG BytesInCustomCPString);
1828
1829 NTSYSAPI
1830 NTSTATUS
1831 NTAPI
1832 RtlUnicodeToCustomCPN(
1833 IN PCPTABLEINFO CustomCP,
1834 OUT PCH CustomCPString,
1835 IN ULONG MaxBytesInCustomCPString,
1836 OUT PULONG BytesInCustomCPString OPTIONAL,
1837 IN PWCH UnicodeString,
1838 IN ULONG BytesInUnicodeString);
1839
1840 NTSYSAPI
1841 NTSTATUS
1842 NTAPI
1843 RtlUpcaseUnicodeToCustomCPN(
1844 IN PCPTABLEINFO CustomCP,
1845 OUT PCH CustomCPString,
1846 IN ULONG MaxBytesInCustomCPString,
1847 OUT PULONG BytesInCustomCPString OPTIONAL,
1848 IN PWCH UnicodeString,
1849 IN ULONG BytesInUnicodeString);
1850
1851 NTSYSAPI
1852 VOID
1853 NTAPI
1854 RtlInitCodePageTable(
1855 IN PUSHORT TableBase,
1856 IN OUT PCPTABLEINFO CodePageTable);
1857
1858 #endif
1859
1860 #if (NTDDI_VERSION >= NTDDI_WINXP)
1861
1862 NTSYSAPI
1863 PVOID
1864 NTAPI
1865 RtlCreateHeap(
1866 IN ULONG Flags,
1867 IN PVOID HeapBase OPTIONAL,
1868 IN SIZE_T ReserveSize OPTIONAL,
1869 IN SIZE_T CommitSize OPTIONAL,
1870 IN PVOID Lock OPTIONAL,
1871 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL);
1872
1873 NTSYSAPI
1874 PVOID
1875 NTAPI
1876 RtlDestroyHeap(
1877 IN PVOID HeapHandle);
1878
1879 NTSYSAPI
1880 USHORT
1881 NTAPI
1882 RtlCaptureStackBackTrace(
1883 IN ULONG FramesToSkip,
1884 IN ULONG FramesToCapture,
1885 OUT PVOID *BackTrace,
1886 OUT PULONG BackTraceHash OPTIONAL);
1887
1888 NTSYSAPI
1889 ULONG
1890 NTAPI
1891 RtlRandomEx(
1892 IN OUT PULONG Seed);
1893
1894 NTSYSAPI
1895 NTSTATUS
1896 NTAPI
1897 RtlInitUnicodeStringEx(
1898 OUT PUNICODE_STRING DestinationString,
1899 IN PCWSTR SourceString OPTIONAL);
1900
1901 NTSYSAPI
1902 NTSTATUS
1903 NTAPI
1904 RtlValidateUnicodeString(
1905 IN ULONG Flags,
1906 IN PCUNICODE_STRING String);
1907
1908 NTSYSAPI
1909 NTSTATUS
1910 NTAPI
1911 RtlDuplicateUnicodeString(
1912 IN ULONG Flags,
1913 IN PCUNICODE_STRING SourceString,
1914 OUT PUNICODE_STRING DestinationString);
1915
1916 NTSYSAPI
1917 NTSTATUS
1918 NTAPI
1919 RtlGetCompressionWorkSpaceSize(
1920 IN USHORT CompressionFormatAndEngine,
1921 OUT PULONG CompressBufferWorkSpaceSize,
1922 OUT PULONG CompressFragmentWorkSpaceSize);
1923
1924 NTSYSAPI
1925 NTSTATUS
1926 NTAPI
1927 RtlCompressBuffer(
1928 IN USHORT CompressionFormatAndEngine,
1929 IN PUCHAR UncompressedBuffer,
1930 IN ULONG UncompressedBufferSize,
1931 OUT PUCHAR CompressedBuffer,
1932 IN ULONG CompressedBufferSize,
1933 IN ULONG UncompressedChunkSize,
1934 OUT PULONG FinalCompressedSize,
1935 IN PVOID WorkSpace);
1936
1937 NTSYSAPI
1938 NTSTATUS
1939 NTAPI
1940 RtlDecompressBuffer(
1941 IN USHORT CompressionFormat,
1942 OUT PUCHAR UncompressedBuffer,
1943 IN ULONG UncompressedBufferSize,
1944 IN PUCHAR CompressedBuffer,
1945 IN ULONG CompressedBufferSize,
1946 OUT PULONG FinalUncompressedSize);
1947
1948 NTSYSAPI
1949 NTSTATUS
1950 NTAPI
1951 RtlDecompressFragment(
1952 IN USHORT CompressionFormat,
1953 OUT PUCHAR UncompressedFragment,
1954 IN ULONG UncompressedFragmentSize,
1955 IN PUCHAR CompressedBuffer,
1956 IN ULONG CompressedBufferSize,
1957 IN ULONG FragmentOffset,
1958 OUT PULONG FinalUncompressedSize,
1959 IN PVOID WorkSpace);
1960
1961 NTSYSAPI
1962 NTSTATUS
1963 NTAPI
1964 RtlDescribeChunk(
1965 IN USHORT CompressionFormat,
1966 IN OUT PUCHAR *CompressedBuffer,
1967 IN PUCHAR EndOfCompressedBufferPlus1,
1968 OUT PUCHAR *ChunkBuffer,
1969 OUT PULONG ChunkSize);
1970
1971 NTSYSAPI
1972 NTSTATUS
1973 NTAPI
1974 RtlReserveChunk(
1975 IN USHORT CompressionFormat,
1976 IN OUT PUCHAR *CompressedBuffer,
1977 IN PUCHAR EndOfCompressedBufferPlus1,
1978 OUT PUCHAR *ChunkBuffer,
1979 IN ULONG ChunkSize);
1980
1981 typedef struct _COMPRESSED_DATA_INFO {
1982 USHORT CompressionFormatAndEngine;
1983 UCHAR CompressionUnitShift;
1984 UCHAR ChunkShift;
1985 UCHAR ClusterShift;
1986 UCHAR Reserved;
1987 USHORT NumberOfChunks;
1988 ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
1989 } COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
1990
1991 NTSYSAPI
1992 NTSTATUS
1993 NTAPI
1994 RtlDecompressChunks(
1995 OUT PUCHAR UncompressedBuffer,
1996 IN ULONG UncompressedBufferSize,
1997 IN PUCHAR CompressedBuffer,
1998 IN ULONG CompressedBufferSize,
1999 IN PUCHAR CompressedTail,
2000 IN ULONG CompressedTailSize,
2001 IN PCOMPRESSED_DATA_INFO CompressedDataInfo);
2002
2003 NTSYSAPI
2004 NTSTATUS
2005 NTAPI
2006 RtlCompressChunks(
2007 IN PUCHAR UncompressedBuffer,
2008 IN ULONG UncompressedBufferSize,
2009 OUT PUCHAR CompressedBuffer,
2010 IN ULONG CompressedBufferSize,
2011 IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo,
2012 IN ULONG CompressedDataInfoLength,
2013 IN PVOID WorkSpace);
2014
2015 NTSYSAPI
2016 PSID_IDENTIFIER_AUTHORITY
2017 NTAPI
2018 RtlIdentifierAuthoritySid(
2019 IN PSID Sid);
2020
2021 NTSYSAPI
2022 PUCHAR
2023 NTAPI
2024 RtlSubAuthorityCountSid(
2025 IN PSID Sid);
2026
2027 NTSYSAPI
2028 ULONG
2029 NTAPI
2030 RtlNtStatusToDosErrorNoTeb(
2031 IN NTSTATUS Status);
2032
2033 NTSYSAPI
2034 NTSTATUS
2035 NTAPI
2036 RtlCreateSystemVolumeInformationFolder(
2037 IN PCUNICODE_STRING VolumeRootPath);
2038
2039 #endif
2040
2041 #if defined(_M_AMD64)
2042
2043 FORCEINLINE
2044 VOID
2045 RtlFillMemoryUlong (
2046 OUT PVOID Destination,
2047 IN SIZE_T Length,
2048 IN ULONG Pattern)
2049 {
2050 PULONG Address = (PULONG)Destination;
2051 if ((Length /= 4) != 0) {
2052 if (((ULONG64)Address & 4) != 0) {
2053 *Address = Pattern;
2054 if ((Length -= 1) == 0) {
2055 return;
2056 }
2057 Address += 1;
2058 }
2059 __stosq((PULONG64)(Address), Pattern | ((ULONG64)Pattern << 32), Length / 2);
2060 if ((Length & 1) != 0) Address[Length - 1] = Pattern;
2061 }
2062 return;
2063 }
2064
2065 #define RtlFillMemoryUlonglong(Destination, Length, Pattern) \
2066 __stosq((PULONG64)(Destination), Pattern, (Length) / 8)
2067
2068 #else
2069
2070 #if (NTDDI_VERSION >= NTDDI_WINXP)
2071
2072 NTSYSAPI
2073 VOID
2074 NTAPI
2075 RtlFillMemoryUlong(
2076 OUT PVOID Destination,
2077 IN SIZE_T Length,
2078 IN ULONG Pattern);
2079
2080 NTSYSAPI
2081 VOID
2082 NTAPI
2083 RtlFillMemoryUlonglong(
2084 OUT PVOID Destination,
2085 IN SIZE_T Length,
2086 IN ULONGLONG Pattern);
2087
2088 #endif
2089
2090 #endif // defined(_M_AMD64)
2091
2092 #if (NTDDI_VERSION >= NTDDI_WS03)
2093
2094 NTSYSAPI
2095 NTSTATUS
2096 NTAPI
2097 RtlInitAnsiStringEx(
2098 OUT PANSI_STRING DestinationString,
2099 IN PCSZ SourceString OPTIONAL);
2100
2101 #endif
2102
2103 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
2104
2105 NTSYSAPI
2106 NTSTATUS
2107 NTAPI
2108 RtlGetSaclSecurityDescriptor(
2109 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
2110 OUT PBOOLEAN SaclPresent,
2111 OUT PACL *Sacl,
2112 OUT PBOOLEAN SaclDefaulted);
2113
2114 NTSYSAPI
2115 NTSTATUS
2116 NTAPI
2117 RtlSetGroupSecurityDescriptor(
2118 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
2119 IN PSID Group OPTIONAL,
2120 IN BOOLEAN GroupDefaulted OPTIONAL);
2121
2122 NTSYSAPI
2123 NTSTATUS
2124 NTAPI
2125 RtlGetGroupSecurityDescriptor(
2126 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
2127 OUT PSID *Group,
2128 OUT PBOOLEAN GroupDefaulted);
2129
2130 NTSYSAPI
2131 NTSTATUS
2132 NTAPI
2133 RtlAbsoluteToSelfRelativeSD(
2134 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
2135 OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor OPTIONAL,
2136 IN OUT PULONG BufferLength);
2137
2138 NTSYSAPI
2139 NTSTATUS
2140 NTAPI
2141 RtlSelfRelativeToAbsoluteSD(
2142 IN PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
2143 OUT PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor OPTIONAL,
2144 IN OUT PULONG AbsoluteSecurityDescriptorSize,
2145 OUT PACL Dacl OPTIONAL,
2146 IN OUT PULONG DaclSize,
2147 OUT PACL Sacl OPTIONAL,
2148 IN OUT PULONG SaclSize,
2149 OUT PSID Owner OPTIONAL,
2150 IN OUT PULONG OwnerSize,
2151 OUT PSID PrimaryGroup OPTIONAL,
2152 IN OUT PULONG PrimaryGroupSize);
2153
2154 #endif
2155
2156 #if (NTDDI_VERSION >= NTDDI_VISTA)
2157
2158 NTSYSAPI
2159 NTSTATUS
2160 NTAPI
2161 RtlNormalizeString(
2162 IN ULONG NormForm,
2163 IN PCWSTR SourceString,
2164 IN LONG SourceStringLength,
2165 OUT PWSTR DestinationString,
2166 IN OUT PLONG DestinationStringLength);
2167
2168 NTSYSAPI
2169 NTSTATUS
2170 NTAPI
2171 RtlIsNormalizedString(
2172 IN ULONG NormForm,
2173 IN PCWSTR SourceString,
2174 IN LONG SourceStringLength,
2175 OUT PBOOLEAN Normalized);
2176
2177 NTSYSAPI
2178 NTSTATUS
2179 NTAPI
2180 RtlIdnToAscii(
2181 IN ULONG Flags,
2182 IN PCWSTR SourceString,
2183 IN LONG SourceStringLength,
2184 OUT PWSTR DestinationString,
2185 IN OUT PLONG DestinationStringLength);
2186
2187 NTSYSAPI
2188 NTSTATUS
2189 NTAPI
2190 RtlIdnToUnicode(
2191 IN ULONG Flags,
2192 IN PCWSTR SourceString,
2193 IN LONG SourceStringLength,
2194 OUT PWSTR DestinationString,
2195 IN OUT PLONG DestinationStringLength);
2196
2197 NTSYSAPI
2198 NTSTATUS
2199 NTAPI
2200 RtlIdnToNameprepUnicode(
2201 IN ULONG Flags,
2202 IN PCWSTR SourceString,
2203 IN LONG SourceStringLength,
2204 OUT PWSTR DestinationString,
2205 IN OUT PLONG DestinationStringLength);
2206
2207 NTSYSAPI
2208 NTSTATUS
2209 NTAPI
2210 RtlCreateServiceSid(
2211 IN PUNICODE_STRING ServiceName,
2212 OUT PSID ServiceSid,
2213 IN OUT PULONG ServiceSidLength);
2214
2215 NTSYSAPI
2216 LONG
2217 NTAPI
2218 RtlCompareAltitudes(
2219 IN PCUNICODE_STRING Altitude1,
2220 IN PCUNICODE_STRING Altitude2);
2221
2222 #endif
2223
2224 #if (NTDDI_VERSION >= NTDDI_WIN7)
2225
2226 NTSYSAPI
2227 NTSTATUS
2228 NTAPI
2229 RtlUnicodeToUTF8N(
2230 OUT PCHAR UTF8StringDestination,
2231 IN ULONG UTF8StringMaxByteCount,
2232 OUT PULONG UTF8StringActualByteCount,
2233 IN PCWCH UnicodeStringSource,
2234 IN ULONG UnicodeStringByteCount);
2235
2236 NTSYSAPI
2237 NTSTATUS
2238 NTAPI
2239 RtlUTF8ToUnicodeN(
2240 OUT PWSTR UnicodeStringDestination,
2241 IN ULONG UnicodeStringMaxByteCount,
2242 OUT PULONG UnicodeStringActualByteCount,
2243 IN PCCH UTF8StringSource,
2244 IN ULONG UTF8StringByteCount);
2245
2246 NTSYSAPI
2247 NTSTATUS
2248 NTAPI
2249 RtlReplaceSidInSd(
2250 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
2251 IN PSID OldSid,
2252 IN PSID NewSid,
2253 OUT ULONG *NumChanges);
2254
2255 NTSYSAPI
2256 NTSTATUS
2257 NTAPI
2258 RtlCreateVirtualAccountSid(
2259 IN PCUNICODE_STRING Name,
2260 IN ULONG BaseSubAuthority,
2261 OUT PSID Sid,
2262 IN OUT PULONG SidLength);
2263
2264 #endif
2265
2266 #define HEAP_NO_SERIALIZE 0x00000001
2267 #define HEAP_GROWABLE 0x00000002
2268 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
2269 #define HEAP_ZERO_MEMORY 0x00000008
2270 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
2271 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
2272 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
2273 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
2274
2275 #define HEAP_CREATE_ALIGN_16 0x00010000
2276 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
2277 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
2278
2279 #define HEAP_SETTABLE_USER_VALUE 0x00000100
2280 #define HEAP_SETTABLE_USER_FLAG1 0x00000200
2281 #define HEAP_SETTABLE_USER_FLAG2 0x00000400
2282 #define HEAP_SETTABLE_USER_FLAG3 0x00000800
2283 #define HEAP_SETTABLE_USER_FLAGS 0x00000E00
2284
2285 #define HEAP_CLASS_0 0x00000000
2286 #define HEAP_CLASS_1 0x00001000
2287 #define HEAP_CLASS_2 0x00002000
2288 #define HEAP_CLASS_3 0x00003000
2289 #define HEAP_CLASS_4 0x00004000
2290 #define HEAP_CLASS_5 0x00005000
2291 #define HEAP_CLASS_6 0x00006000
2292 #define HEAP_CLASS_7 0x00007000
2293 #define HEAP_CLASS_8 0x00008000
2294 #define HEAP_CLASS_MASK 0x0000F000
2295
2296 #define HEAP_MAXIMUM_TAG 0x0FFF
2297 #define HEAP_GLOBAL_TAG 0x0800
2298 #define HEAP_PSEUDO_TAG_FLAG 0x8000
2299 #define HEAP_TAG_SHIFT 18
2300 #define HEAP_TAG_MASK (HEAP_MAXIMUM_TAG << HEAP_TAG_SHIFT)
2301
2302 #define HEAP_CREATE_VALID_MASK (HEAP_NO_SERIALIZE | \
2303 HEAP_GROWABLE | \
2304 HEAP_GENERATE_EXCEPTIONS | \
2305 HEAP_ZERO_MEMORY | \
2306 HEAP_REALLOC_IN_PLACE_ONLY | \
2307 HEAP_TAIL_CHECKING_ENABLED | \
2308 HEAP_FREE_CHECKING_ENABLED | \
2309 HEAP_DISABLE_COALESCE_ON_FREE | \
2310 HEAP_CLASS_MASK | \
2311 HEAP_CREATE_ALIGN_16 | \
2312 HEAP_CREATE_ENABLE_TRACING | \
2313 HEAP_CREATE_ENABLE_EXECUTE)
2314
2315 FORCEINLINE
2316 ULONG
2317 HEAP_MAKE_TAG_FLAGS(
2318 IN ULONG TagBase,
2319 IN ULONG Tag)
2320 {
2321 //__assume_bound(TagBase); // FIXME
2322 return ((ULONG)((TagBase) + ((Tag) << HEAP_TAG_SHIFT)));
2323 }
2324
2325 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
2326 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
2327
2328 #define RtlUnicodeStringToOemSize(STRING) (NLS_MB_OEM_CODE_PAGE_TAG ? \
2329 RtlxUnicodeStringToOemSize(STRING) : \
2330 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
2331 )
2332
2333 #define RtlOemStringToUnicodeSize(STRING) ( \
2334 NLS_MB_OEM_CODE_PAGE_TAG ? \
2335 RtlxOemStringToUnicodeSize(STRING) : \
2336 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
2337 )
2338
2339 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
2340 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
2341 )
2342
2343 typedef PVOID
2344 (NTAPI *PRTL_ALLOCATE_STRING_ROUTINE)(
2345 IN SIZE_T NumberOfBytes);
2346
2347 #if _WIN32_WINNT >= 0x0600
2348
2349 typedef PVOID
2350 (NTAPI *PRTL_REALLOCATE_STRING_ROUTINE)(
2351 IN SIZE_T NumberOfBytes,
2352 IN PVOID Buffer);
2353
2354 #endif
2355
2356 typedef VOID
2357 (NTAPI *PRTL_FREE_STRING_ROUTINE)(
2358 IN PVOID Buffer);
2359
2360 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine;
2361 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine;
2362
2363 #if _WIN32_WINNT >= 0x0600
2364 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine;
2365 #endif
2366
2367 #define COMPRESSION_FORMAT_NONE (0x0000)
2368 #define COMPRESSION_FORMAT_DEFAULT (0x0001)
2369 #define COMPRESSION_FORMAT_LZNT1 (0x0002)
2370 #define COMPRESSION_ENGINE_STANDARD (0x0000)
2371 #define COMPRESSION_ENGINE_MAXIMUM (0x0100)
2372 #define COMPRESSION_ENGINE_HIBER (0x0200)
2373
2374 #define RtlOffsetToPointer(B,O) ((PCHAR)( ((PCHAR)(B)) + ((ULONG_PTR)(O)) ))
2375 #define RtlPointerToOffset(B,P) ((ULONG)( ((PCHAR)(P)) - ((PCHAR)(B)) ))
2376
2377 #define MAX_UNICODE_STACK_BUFFER_LENGTH 256
2378
2379 #define RTL_SYSTEM_VOLUME_INFORMATION_FOLDER L"System Volume Information"
2380
2381 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
2382
2383 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
2384 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
2385
2386 typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE;
2387
2388 typedef enum _SECURITY_LOGON_TYPE {
2389 UndefinedLogonType = 0,
2390 Interactive = 2,
2391 Network,
2392 Batch,
2393 Service,
2394 Proxy,
2395 Unlock,
2396 NetworkCleartext,
2397 NewCredentials,
2398 #if (_WIN32_WINNT >= 0x0501)
2399 RemoteInteractive,
2400 CachedInteractive,
2401 #endif
2402 #if (_WIN32_WINNT >= 0x0502)
2403 CachedRemoteInteractive,
2404 CachedUnlock
2405 #endif
2406 } SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE;
2407
2408 #ifndef _NTLSA_AUDIT_
2409 #define _NTLSA_AUDIT_
2410
2411 #ifndef GUID_DEFINED
2412 #include <guiddef.h>
2413 #endif
2414
2415 #endif /* _NTLSA_AUDIT_ */
2416
2417 NTSTATUS
2418 NTAPI
2419 LsaRegisterLogonProcess(
2420 IN PLSA_STRING LogonProcessName,
2421 OUT PHANDLE LsaHandle,
2422 OUT PLSA_OPERATIONAL_MODE SecurityMode);
2423
2424 NTSTATUS
2425 NTAPI
2426 LsaLogonUser(
2427 IN HANDLE LsaHandle,
2428 IN PLSA_STRING OriginName,
2429 IN SECURITY_LOGON_TYPE LogonType,
2430 IN ULONG AuthenticationPackage,
2431 IN PVOID AuthenticationInformation,
2432 IN ULONG AuthenticationInformationLength,
2433 IN PTOKEN_GROUPS LocalGroups OPTIONAL,
2434 IN PTOKEN_SOURCE SourceContext,
2435 OUT PVOID *ProfileBuffer,
2436 OUT PULONG ProfileBufferLength,
2437 OUT PLUID LogonId,
2438 OUT PHANDLE Token,
2439 OUT PQUOTA_LIMITS Quotas,
2440 OUT PNTSTATUS SubStatus);
2441
2442 NTSTATUS
2443 NTAPI
2444 LsaFreeReturnBuffer(
2445 IN PVOID Buffer);
2446
2447 #ifndef _NTLSA_IFS_
2448 #define _NTLSA_IFS_
2449 #endif
2450
2451 #define MSV1_0_PACKAGE_NAME "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
2452 #define MSV1_0_PACKAGE_NAMEW L"MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
2453 #define MSV1_0_PACKAGE_NAMEW_LENGTH sizeof(MSV1_0_PACKAGE_NAMEW) - sizeof(WCHAR)
2454
2455 #define MSV1_0_SUBAUTHENTICATION_KEY "SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1_0"
2456 #define MSV1_0_SUBAUTHENTICATION_VALUE "Auth"
2457
2458 #define MSV1_0_CHALLENGE_LENGTH 8
2459 #define MSV1_0_USER_SESSION_KEY_LENGTH 16
2460 #define MSV1_0_LANMAN_SESSION_KEY_LENGTH 8
2461
2462 #define MSV1_0_CLEARTEXT_PASSWORD_ALLOWED 0x02
2463 #define MSV1_0_UPDATE_LOGON_STATISTICS 0x04
2464 #define MSV1_0_RETURN_USER_PARAMETERS 0x08
2465 #define MSV1_0_DONT_TRY_GUEST_ACCOUNT 0x10
2466 #define MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT 0x20
2467 #define MSV1_0_RETURN_PASSWORD_EXPIRY 0x40
2468 #define MSV1_0_USE_CLIENT_CHALLENGE 0x80
2469 #define MSV1_0_TRY_GUEST_ACCOUNT_ONLY 0x100
2470 #define MSV1_0_RETURN_PROFILE_PATH 0x200
2471 #define MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY 0x400
2472 #define MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT 0x800
2473
2474 #define MSV1_0_DISABLE_PERSONAL_FALLBACK 0x00001000
2475 #define MSV1_0_ALLOW_FORCE_GUEST 0x00002000
2476
2477 #if (_WIN32_WINNT >= 0x0502)
2478 #define MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED 0x00004000
2479 #define MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY 0x00008000
2480 #endif
2481
2482 #define MSV1_0_SUBAUTHENTICATION_DLL_EX 0x00100000
2483 #define MSV1_0_ALLOW_MSVCHAPV2 0x00010000
2484
2485 #if (_WIN32_WINNT >= 0x0600)
2486 #define MSV1_0_S4U2SELF 0x00020000
2487 #define MSV1_0_CHECK_LOGONHOURS_FOR_S4U 0x00040000
2488 #endif
2489
2490 #define MSV1_0_SUBAUTHENTICATION_DLL 0xFF000000
2491 #define MSV1_0_SUBAUTHENTICATION_DLL_SHIFT 24
2492 #define MSV1_0_MNS_LOGON 0x01000000
2493
2494 #define MSV1_0_SUBAUTHENTICATION_DLL_RAS 2
2495 #define MSV1_0_SUBAUTHENTICATION_DLL_IIS 132
2496
2497 #define LOGON_GUEST 0x01
2498 #define LOGON_NOENCRYPTION 0x02
2499 #define LOGON_CACHED_ACCOUNT 0x04
2500 #define LOGON_USED_LM_PASSWORD 0x08
2501 #define LOGON_EXTRA_SIDS 0x20
2502 #define LOGON_SUBAUTH_SESSION_KEY 0x40
2503 #define LOGON_SERVER_TRUST_ACCOUNT 0x80
2504 #define LOGON_NTLMV2_ENABLED 0x100
2505 #define LOGON_RESOURCE_GROUPS 0x200
2506 #define LOGON_PROFILE_PATH_RETURNED 0x400
2507 #define LOGON_NT_V2 0x800
2508 #define LOGON_LM_V2 0x1000
2509 #define LOGON_NTLM_V2 0x2000
2510
2511 #if (_WIN32_WINNT >= 0x0600)
2512
2513 #define LOGON_OPTIMIZED 0x4000
2514 #define LOGON_WINLOGON 0x8000
2515 #define LOGON_PKINIT 0x10000
2516 #define LOGON_NO_OPTIMIZED 0x20000
2517
2518 #endif
2519
2520 #define MSV1_0_SUBAUTHENTICATION_FLAGS 0xFF000000
2521
2522 #define LOGON_GRACE_LOGON 0x01000000
2523
2524 #define MSV1_0_OWF_PASSWORD_LENGTH 16
2525 #define MSV1_0_CRED_LM_PRESENT 0x1
2526 #define MSV1_0_CRED_NT_PRESENT 0x2
2527 #define MSV1_0_CRED_VERSION 0
2528
2529 #define MSV1_0_NTLM3_RESPONSE_LENGTH 16
2530 #define MSV1_0_NTLM3_OWF_LENGTH 16
2531
2532 #if (_WIN32_WINNT == 0x0500)
2533 #define MSV1_0_MAX_NTLM3_LIFE 1800
2534 #else
2535 #define MSV1_0_MAX_NTLM3_LIFE 129600
2536 #endif
2537 #define MSV1_0_MAX_AVL_SIZE 64000
2538
2539 #if (_WIN32_WINNT >= 0x0501)
2540
2541 #define MSV1_0_AV_FLAG_FORCE_GUEST 0x00000001
2542
2543 #if (_WIN32_WINNT >= 0x0600)
2544 #define MSV1_0_AV_FLAG_MIC_HANDSHAKE_MESSAGES 0x00000002
2545 #endif
2546
2547 #endif
2548
2549 #define MSV1_0_NTLM3_INPUT_LENGTH (sizeof(MSV1_0_NTLM3_RESPONSE) - MSV1_0_NTLM3_RESPONSE_LENGTH)
2550
2551 #if(_WIN32_WINNT >= 0x0502)
2552 #define MSV1_0_NTLM3_MIN_NT_RESPONSE_LENGTH RTL_SIZEOF_THROUGH_FIELD(MSV1_0_NTLM3_RESPONSE, AvPairsOff)
2553 #endif
2554
2555 #define USE_PRIMARY_PASSWORD 0x01
2556 #define RETURN_PRIMARY_USERNAME 0x02
2557 #define RETURN_PRIMARY_LOGON_DOMAINNAME 0x04
2558 #define RETURN_NON_NT_USER_SESSION_KEY 0x08
2559 #define GENERATE_CLIENT_CHALLENGE 0x10
2560 #define GCR_NTLM3_PARMS 0x20
2561 #define GCR_TARGET_INFO 0x40
2562 #define RETURN_RESERVED_PARAMETER 0x80
2563 #define GCR_ALLOW_NTLM 0x100
2564 #define GCR_USE_OEM_SET 0x200
2565 #define GCR_MACHINE_CREDENTIAL 0x400
2566 #define GCR_USE_OWF_PASSWORD 0x800
2567 #define GCR_ALLOW_LM 0x1000
2568 #define GCR_ALLOW_NO_TARGET 0x2000
2569
2570 typedef enum _MSV1_0_LOGON_SUBMIT_TYPE {
2571 MsV1_0InteractiveLogon = 2,
2572 MsV1_0Lm20Logon,
2573 MsV1_0NetworkLogon,
2574 MsV1_0SubAuthLogon,
2575 MsV1_0WorkstationUnlockLogon = 7,
2576 MsV1_0S4ULogon = 12,
2577 MsV1_0VirtualLogon = 82
2578 } MSV1_0_LOGON_SUBMIT_TYPE, *PMSV1_0_LOGON_SUBMIT_TYPE;
2579
2580 typedef enum _MSV1_0_PROFILE_BUFFER_TYPE {
2581 MsV1_0InteractiveProfile = 2,
2582 MsV1_0Lm20LogonProfile,
2583 MsV1_0SmartCardProfile
2584 } MSV1_0_PROFILE_BUFFER_TYPE, *PMSV1_0_PROFILE_BUFFER_TYPE;
2585
2586 typedef struct _MSV1_0_INTERACTIVE_LOGON {
2587 MSV1_0_LOGON_SUBMIT_TYPE MessageType;
2588 UNICODE_STRING LogonDomainName;
2589 UNICODE_STRING UserName;
2590 UNICODE_STRING Password;
2591 } MSV1_0_INTERACTIVE_LOGON, *PMSV1_0_INTERACTIVE_LOGON;
2592
2593 typedef struct _MSV1_0_INTERACTIVE_PROFILE {
2594 MSV1_0_PROFILE_BUFFER_TYPE MessageType;
2595 USHORT LogonCount;
2596 USHORT BadPasswordCount;
2597 LARGE_INTEGER LogonTime;
2598 LARGE_INTEGER LogoffTime;
2599 LARGE_INTEGER KickOffTime;
2600 LARGE_INTEGER PasswordLastSet;
2601 LARGE_INTEGER PasswordCanChange;
2602 LARGE_INTEGER PasswordMustChange;
2603 UNICODE_STRING LogonScript;
2604 UNICODE_STRING HomeDirectory;
2605 UNICODE_STRING FullName;
2606 UNICODE_STRING ProfilePath;
2607 UNICODE_STRING HomeDirectoryDrive;
2608 UNICODE_STRING LogonServer;
2609 ULONG UserFlags;
2610 } MSV1_0_INTERACTIVE_PROFILE, *PMSV1_0_INTERACTIVE_PROFILE;
2611
2612 typedef struct _MSV1_0_LM20_LOGON {
2613 MSV1_0_LOGON_SUBMIT_TYPE MessageType;
2614 UNICODE_STRING LogonDomainName;
2615 UNICODE_STRING UserName;
2616 UNICODE_STRING Workstation;
2617 UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
2618 STRING CaseSensitiveChallengeResponse;
2619 STRING CaseInsensitiveChallengeResponse;
2620 ULONG ParameterControl;
2621 } MSV1_0_LM20_LOGON, * PMSV1_0_LM20_LOGON;
2622
2623 typedef struct _MSV1_0_SUBAUTH_LOGON {
2624 MSV1_0_LOGON_SUBMIT_TYPE MessageType;
2625 UNICODE_STRING LogonDomainName;
2626 UNICODE_STRING UserName;
2627 UNICODE_STRING Workstation;
2628 UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
2629 STRING AuthenticationInfo1;
2630 STRING AuthenticationInfo2;
2631 ULONG ParameterControl;
2632 ULONG SubAuthPackageId;
2633 } MSV1_0_SUBAUTH_LOGON, * PMSV1_0_SUBAUTH_LOGON;
2634
2635 #if (_WIN32_WINNT >= 0x0600)
2636
2637 #define MSV1_0_S4U_LOGON_FLAG_CHECK_LOGONHOURS 0x2
2638
2639 typedef struct _MSV1_0_S4U_LOGON {
2640 MSV1_0_LOGON_SUBMIT_TYPE MessageType;
2641 ULONG Flags;
2642 UNICODE_STRING UserPrincipalName;
2643 UNICODE_STRING DomainName;
2644 } MSV1_0_S4U_LOGON, *PMSV1_0_S4U_LOGON;
2645
2646 #endif
2647
2648 typedef struct _MSV1_0_LM20_LOGON_PROFILE {
2649 MSV1_0_PROFILE_BUFFER_TYPE MessageType;
2650 LARGE_INTEGER KickOffTime;
2651 LARGE_INTEGER LogoffTime;
2652 ULONG UserFlags;
2653 UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH];
2654 UNICODE_STRING LogonDomainName;
2655 UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH];
2656 UNICODE_STRING LogonServer;
2657 UNICODE_STRING UserParameters;
2658 } MSV1_0_LM20_LOGON_PROFILE, * PMSV1_0_LM20_LOGON_PROFILE;
2659
2660 typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL {
2661 ULONG Version;
2662 ULONG Flags;
2663 UCHAR LmPassword[MSV1_0_OWF_PASSWORD_LENGTH];
2664 UCHAR NtPassword[MSV1_0_OWF_PASSWORD_LENGTH];
2665 } MSV1_0_SUPPLEMENTAL_CREDENTIAL, *PMSV1_0_SUPPLEMENTAL_CREDENTIAL;
2666
2667 typedef struct _MSV1_0_NTLM3_RESPONSE {
2668 UCHAR Response[MSV1_0_NTLM3_RESPONSE_LENGTH];
2669 UCHAR RespType;
2670 UCHAR HiRespType;
2671 USHORT Flags;
2672 ULONG MsgWord;
2673 ULONGLONG TimeStamp;
2674 UCHAR ChallengeFromClient[MSV1_0_CHALLENGE_LENGTH];
2675 ULONG AvPairsOff;
2676 UCHAR Buffer[1];
2677 } MSV1_0_NTLM3_RESPONSE, *PMSV1_0_NTLM3_RESPONSE;
2678
2679 typedef enum _MSV1_0_AVID {
2680 MsvAvEOL,
2681 MsvAvNbComputerName,
2682 MsvAvNbDomainName,
2683 MsvAvDnsComputerName,
2684 MsvAvDnsDomainName,
2685 #if (_WIN32_WINNT >= 0x0501)
2686 MsvAvDnsTreeName,
2687 MsvAvFlags,
2688 #if (_WIN32_WINNT >= 0x0600)
2689 MsvAvTimestamp,
2690 MsvAvRestrictions,
2691 MsvAvTargetName,
2692 MsvAvChannelBindings,
2693 #endif
2694 #endif
2695 } MSV1_0_AVID;
2696
2697 typedef struct _MSV1_0_AV_PAIR {
2698 USHORT AvId;
2699 USHORT AvLen;
2700 } MSV1_0_AV_PAIR, *PMSV1_0_AV_PAIR;
2701
2702 typedef enum _MSV1_0_PROTOCOL_MESSAGE_TYPE {
2703 MsV1_0Lm20ChallengeRequest = 0,
2704 MsV1_0Lm20GetChallengeResponse,
2705 MsV1_0EnumerateUsers,
2706 MsV1_0GetUserInfo,
2707 MsV1_0ReLogonUsers,
2708 MsV1_0ChangePassword,
2709 MsV1_0ChangeCachedPassword,
2710 MsV1_0GenericPassthrough,
2711 MsV1_0CacheLogon,
2712 MsV1_0SubAuth,
2713 MsV1_0DeriveCredential,
2714 MsV1_0CacheLookup,
2715 #if (_WIN32_WINNT >= 0x0501)
2716 MsV1_0SetProcessOption,
2717 #endif
2718 #if (_WIN32_WINNT >= 0x0600)
2719 MsV1_0ConfigLocalAliases,
2720 MsV1_0ClearCachedCredentials,
2721 #endif
2722 } MSV1_0_PROTOCOL_MESSAGE_TYPE, *PMSV1_0_PROTOCOL_MESSAGE_TYPE;
2723
2724 typedef struct _MSV1_0_LM20_CHALLENGE_REQUEST {
2725 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
2726 } MSV1_0_LM20_CHALLENGE_REQUEST, *PMSV1_0_LM20_CHALLENGE_REQUEST;
2727
2728 typedef struct _MSV1_0_LM20_CHALLENGE_RESPONSE {
2729 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
2730 UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
2731 } MSV1_0_LM20_CHALLENGE_RESPONSE, *PMSV1_0_LM20_CHALLENGE_RESPONSE;
2732
2733 typedef struct _MSV1_0_GETCHALLENRESP_REQUEST_V1 {
2734 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
2735 ULONG ParameterControl;
2736 LUID LogonId;
2737 UNICODE_STRING Password;
2738 UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
2739 } MSV1_0_GETCHALLENRESP_REQUEST_V1, *PMSV1_0_GETCHALLENRESP_REQUEST_V1;
2740
2741 typedef struct _MSV1_0_GETCHALLENRESP_REQUEST {
2742 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
2743 ULONG ParameterControl;
2744 LUID LogonId;
2745 UNICODE_STRING Password;
2746 UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
2747 UNICODE_STRING UserName;
2748 UNICODE_STRING LogonDomainName;
2749 UNICODE_STRING ServerName;
2750 } MSV1_0_GETCHALLENRESP_REQUEST, *PMSV1_0_GETCHALLENRESP_REQUEST;
2751
2752 typedef struct _MSV1_0_GETCHALLENRESP_RESPONSE {
2753 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
2754 STRING CaseSensitiveChallengeResponse;
2755 STRING CaseInsensitiveChallengeResponse;
2756 UNICODE_STRING UserName;
2757 UNICODE_STRING LogonDomainName;
2758 UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH];
2759 UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH];
2760 } MSV1_0_GETCHALLENRESP_RESPONSE, *PMSV1_0_GETCHALLENRESP_RESPONSE;
2761
2762 typedef struct _MSV1_0_ENUMUSERS_REQUEST {
2763 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
2764 } MSV1_0_ENUMUSERS_REQUEST, *PMSV1_0_ENUMUSERS_REQUEST;
2765
2766 typedef struct _MSV1_0_ENUMUSERS_RESPONSE {
2767 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
2768 ULONG NumberOfLoggedOnUsers;
2769 PLUID LogonIds;
2770 PULONG EnumHandles;
2771 } MSV1_0_ENUMUSERS_RESPONSE, *PMSV1_0_ENUMUSERS_RESPONSE;
2772
2773 typedef struct _MSV1_0_GETUSERINFO_REQUEST {
2774 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
2775 LUID LogonId;
2776 } MSV1_0_GETUSERINFO_REQUEST, *PMSV1_0_GETUSERINFO_REQUEST;
2777
2778 typedef struct _MSV1_0_GETUSERINFO_RESPONSE {
2779 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
2780 PSID UserSid;
2781 UNICODE_STRING UserName;
2782 UNICODE_STRING LogonDomainName;
2783 UNICODE_STRING LogonServer;
2784 SECURITY_LOGON_TYPE LogonType;
2785 } MSV1_0_GETUSERINFO_RESPONSE, *PMSV1_0_GETUSERINFO_RESPONSE;
2786
2787 #define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007
2788 #define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008
2789 #define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009
2790
2791 /* also in winnt.h */
2792 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
2793 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
2794 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
2795 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
2796 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
2797 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
2798 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
2799 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
2800 #define FILE_NOTIFY_CHANGE_EA 0x00000080
2801 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
2802 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
2803 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
2804 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
2805 #define FILE_NOTIFY_VALID_MASK 0x00000fff
2806
2807 #define FILE_ACTION_ADDED 0x00000001
2808 #define FILE_ACTION_REMOVED 0x00000002
2809 #define FILE_ACTION_MODIFIED 0x00000003
2810 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
2811 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
2812 #define FILE_ACTION_ADDED_STREAM 0x00000006
2813 #define FILE_ACTION_REMOVED_STREAM 0x00000007
2814 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
2815 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
2816 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
2817 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
2818 /* end winnt.h */
2819
2820 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
2821 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
2822
2823 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000
2824 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002
2825
2826 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000
2827 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002
2828 #define FILE_PIPE_TYPE_VALID_MASK 0x00000003
2829
2830 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
2831 #define FILE_PIPE_MESSAGE_MODE 0x00000001
2832
2833 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
2834 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
2835
2836 #define FILE_PIPE_INBOUND 0x00000000
2837 #define FILE_PIPE_OUTBOUND 0x00000001
2838 #define FILE_PIPE_FULL_DUPLEX 0x00000002
2839
2840 #define FILE_PIPE_DISCONNECTED_STATE 0x00000001
2841 #define FILE_PIPE_LISTENING_STATE 0x00000002
2842 #define FILE_PIPE_CONNECTED_STATE 0x00000003
2843 #define FILE_PIPE_CLOSING_STATE 0x00000004
2844
2845 #define FILE_PIPE_CLIENT_END 0x00000000
2846 #define FILE_PIPE_SERVER_END 0x00000001
2847
2848 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
2849 #define FILE_CASE_PRESERVED_NAMES 0x00000002
2850 #define FILE_UNICODE_ON_DISK 0x00000004
2851 #define FILE_PERSISTENT_ACLS 0x00000008
2852 #define FILE_FILE_COMPRESSION 0x00000010
2853 #define FILE_VOLUME_QUOTAS 0x00000020
2854 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
2855 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
2856 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
2857 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
2858 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
2859 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
2860 #define FILE_NAMED_STREAMS 0x00040000
2861 #define FILE_READ_ONLY_VOLUME 0x00080000
2862 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
2863 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
2864 #define FILE_SUPPORTS_HARD_LINKS 0x00400000
2865 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
2866 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
2867 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000
2868
2869 #define FILE_NEED_EA 0x00000080
2870
2871 #define FILE_EA_TYPE_BINARY 0xfffe
2872 #define FILE_EA_TYPE_ASCII 0xfffd
2873 #define FILE_EA_TYPE_BITMAP 0xfffb
2874 #define FILE_EA_TYPE_METAFILE 0xfffa
2875 #define FILE_EA_TYPE_ICON 0xfff9
2876 #define FILE_EA_TYPE_EA 0xffee
2877 #define FILE_EA_TYPE_MVMT 0xffdf
2878 #define FILE_EA_TYPE_MVST 0xffde
2879 #define FILE_EA_TYPE_ASN1 0xffdd
2880 #define FILE_EA_TYPE_FAMILY_IDS 0xff01
2881
2882 typedef struct _FILE_NOTIFY_INFORMATION {
2883 ULONG NextEntryOffset;
2884 ULONG Action;
2885 ULONG FileNameLength;
2886 WCHAR FileName[1];
2887 } FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;
2888
2889 typedef struct _FILE_DIRECTORY_INFORMATION {
2890 ULONG NextEntryOffset;
2891 ULONG FileIndex;
2892 LARGE_INTEGER CreationTime;
2893 LARGE_INTEGER LastAccessTime;
2894 LARGE_INTEGER LastWriteTime;
2895 LARGE_INTEGER ChangeTime;
2896 LARGE_INTEGER EndOfFile;
2897 LARGE_INTEGER AllocationSize;
2898 ULONG FileAttributes;
2899 ULONG FileNameLength;
2900 WCHAR FileName[1];
2901 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
2902
2903 typedef struct _FILE_FULL_DIR_INFORMATION {
2904 ULONG NextEntryOffset;
2905 ULONG FileIndex;
2906 LARGE_INTEGER CreationTime;
2907 LARGE_INTEGER LastAccessTime;
2908 LARGE_INTEGER LastWriteTime;
2909 LARGE_INTEGER ChangeTime;
2910 LARGE_INTEGER EndOfFile;
2911 LARGE_INTEGER AllocationSize;
2912 ULONG FileAttributes;
2913 ULONG FileNameLength;
2914 ULONG EaSize;
2915 WCHAR FileName[1];
2916 } FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
2917
2918 typedef struct _FILE_ID_FULL_DIR_INFORMATION {
2919 ULONG NextEntryOffset;
2920 ULONG FileIndex;
2921 LARGE_INTEGER CreationTime;
2922 LARGE_INTEGER LastAccessTime;
2923 LARGE_INTEGER LastWriteTime;
2924 LARGE_INTEGER ChangeTime;
2925 LARGE_INTEGER EndOfFile;
2926 LARGE_INTEGER AllocationSize;
2927 ULONG FileAttributes;
2928 ULONG FileNameLength;
2929 ULONG EaSize;
2930 LARGE_INTEGER FileId;
2931 WCHAR FileName[1];
2932 } FILE_ID_FULL_DIR_INFORMATION, *PFILE_ID_FULL_DIR_INFORMATION;
2933
2934 typedef struct _FILE_BOTH_DIR_INFORMATION {
2935 ULONG NextEntryOffset;
2936 ULONG FileIndex;
2937 LARGE_INTEGER CreationTime;
2938 LARGE_INTEGER LastAccessTime;
2939 LARGE_INTEGER LastWriteTime;
2940 LARGE_INTEGER ChangeTime;
2941 LARGE_INTEGER EndOfFile;
2942 LARGE_INTEGER AllocationSize;
2943 ULONG FileAttributes;
2944 ULONG FileNameLength;
2945 ULONG EaSize;
2946 CCHAR ShortNameLength;
2947 WCHAR ShortName[12];
2948 WCHAR FileName[1];
2949 } FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
2950
2951 typedef struct _FILE_ID_BOTH_DIR_INFORMATION {
2952 ULONG NextEntryOffset;
2953 ULONG FileIndex;
2954 LARGE_INTEGER CreationTime;
2955 LARGE_INTEGER LastAccessTime;
2956 LARGE_INTEGER LastWriteTime;
2957 LARGE_INTEGER ChangeTime;
2958 LARGE_INTEGER EndOfFile;
2959 LARGE_INTEGER AllocationSize;
2960 ULONG FileAttributes;
2961 ULONG FileNameLength;
2962 ULONG EaSize;
2963 CCHAR ShortNameLength;
2964 WCHAR ShortName[12];
2965 LARGE_INTEGER FileId;
2966 WCHAR FileName[1];
2967 } FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION;
2968
2969 typedef struct _FILE_NAMES_INFORMATION {
2970 ULONG NextEntryOffset;
2971 ULONG FileIndex;
2972 ULONG FileNameLength;
2973 WCHAR FileName[1];
2974 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
2975
2976 typedef struct _FILE_ID_GLOBAL_TX_DIR_INFORMATION {
2977 ULONG NextEntryOffset;
2978 ULONG FileIndex;
2979 LARGE_INTEGER CreationTime;
2980 LARGE_INTEGER LastAccessTime;
2981 LARGE_INTEGER LastWriteTime;
2982 LARGE_INTEGER ChangeTime;
2983 LARGE_INTEGER EndOfFile;
2984 LARGE_INTEGER AllocationSize;
2985 ULONG FileAttributes;
2986 ULONG FileNameLength;
2987 LARGE_INTEGER FileId;
2988 GUID LockingTransactionId;
2989 ULONG TxInfoFlags;
2990 WCHAR FileName[1];
2991 } FILE_ID_GLOBAL_TX_DIR_INFORMATION, *PFILE_ID_GLOBAL_TX_DIR_INFORMATION;
2992
2993 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_WRITELOCKED 0x00000001
2994 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_TO_TX 0x00000002
2995 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_OUTSIDE_TX 0x00000004
2996
2997 typedef struct _FILE_OBJECTID_INFORMATION {
2998 LONGLONG FileReference;
2999 UCHAR ObjectId[16];
3000 _ANONYMOUS_UNION union {
3001 __GNU_EXTENSION struct {
3002 UCHAR BirthVolumeId[16];
3003 UCHAR BirthObjectId[16];
3004 UCHAR DomainId[16];
3005 };
3006 UCHAR ExtendedInfo[48];
3007 } DUMMYUNIONNAME;
3008 } FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION;
3009
3010 #define ANSI_DOS_STAR ('<')
3011 #define ANSI_DOS_QM ('>')
3012 #define ANSI_DOS_DOT ('"')
3013
3014 #define DOS_STAR (L'<')
3015 #define DOS_QM (L'>')
3016 #define DOS_DOT (L'"')
3017
3018 typedef struct _FILE_INTERNAL_INFORMATION {
3019 LARGE_INTEGER IndexNumber;
3020 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
3021
3022 typedef struct _FILE_EA_INFORMATION {
3023 ULONG EaSize;
3024 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
3025
3026 typedef struct _FILE_ACCESS_INFORMATION {
3027 ACCESS_MASK AccessFlags;
3028 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
3029
3030 typedef struct _FILE_MODE_INFORMATION {
3031 ULONG Mode;
3032 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
3033
3034 typedef struct _FILE_ALL_INFORMATION {
3035 FILE_BASIC_INFORMATION BasicInformation;
3036 FILE_STANDARD_INFORMATION StandardInformation;
3037 FILE_INTERNAL_INFORMATION InternalInformation;
3038 FILE_EA_INFORMATION EaInformation;
3039 FILE_ACCESS_INFORMATION AccessInformation;
3040 FILE_POSITION_INFORMATION PositionInformation;
3041 FILE_MODE_INFORMATION ModeInformation;
3042 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
3043 FILE_NAME_INFORMATION NameInformation;
3044 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
3045
3046 typedef struct _FILE_ALLOCATION_INFORMATION {
3047 LARGE_INTEGER AllocationSize;
3048 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
3049
3050 typedef struct _FILE_COMPRESSION_INFORMATION {
3051 LARGE_INTEGER CompressedFileSize;
3052 USHORT CompressionFormat;
3053 UCHAR CompressionUnitShift;
3054 UCHAR ChunkShift;
3055 UCHAR ClusterShift;
3056 UCHAR Reserved[3];
3057 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
3058
3059 typedef struct _FILE_LINK_INFORMATION {
3060 BOOLEAN ReplaceIfExists;
3061 HANDLE RootDirectory;
3062 ULONG FileNameLength;
3063 WCHAR FileName[1];
3064 } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
3065
3066 typedef struct _FILE_MOVE_CLUSTER_INFORMATION {
3067 ULONG ClusterCount;
3068 HANDLE RootDirectory;
3069 ULONG FileNameLength;
3070 WCHAR FileName[1];
3071 } FILE_MOVE_CLUSTER_INFORMATION, *PFILE_MOVE_CLUSTER_INFORMATION;
3072
3073 typedef struct _FILE_RENAME_INFORMATION {
3074 BOOLEAN ReplaceIfExists;
3075 HANDLE RootDirectory;
3076 ULONG FileNameLength;
3077 WCHAR FileName[1];
3078 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
3079
3080 typedef struct _FILE_STREAM_INFORMATION {
3081 ULONG NextEntryOffset;
3082 ULONG StreamNameLength;
3083 LARGE_INTEGER StreamSize;
3084 LARGE_INTEGER StreamAllocationSize;
3085 WCHAR StreamName[1];
3086 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
3087
3088 typedef struct _FILE_TRACKING_INFORMATION {
3089 HANDLE DestinationFile;
3090 ULONG ObjectInformationLength;
3091 CHAR ObjectInformation[1];
3092 } FILE_TRACKING_INFORMATION, *PFILE_TRACKING_INFORMATION;
3093
3094 typedef struct _FILE_COMPLETION_INFORMATION {
3095 HANDLE Port;
3096 PVOID Key;
3097 } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
3098
3099 typedef struct _FILE_PIPE_INFORMATION {
3100 ULONG ReadMode;
3101 ULONG CompletionMode;
3102 } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
3103
3104 typedef struct _FILE_PIPE_LOCAL_INFORMATION {
3105 ULONG NamedPipeType;
3106 ULONG NamedPipeConfiguration;
3107 ULONG MaximumInstances;
3108 ULONG CurrentInstances;
3109 ULONG InboundQuota;
3110 ULONG ReadDataAvailable;
3111 ULONG OutboundQuota;
3112 ULONG WriteQuotaAvailable;
3113 ULONG NamedPipeState;
3114 ULONG NamedPipeEnd;
3115 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
3116
3117 typedef struct _FILE_PIPE_REMOTE_INFORMATION {
3118 LARGE_INTEGER CollectDataTime;
3119 ULONG MaximumCollectionCount;
3120 } FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
3121
3122 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
3123 ULONG MaximumMessageSize;
3124 ULONG MailslotQuota;
3125 ULONG NextMessageSize;
3126 ULONG MessagesAvailable;
3127 LARGE_INTEGER ReadTimeout;
3128 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
3129
3130 typedef struct _FILE_MAILSLOT_SET_INFORMATION {
3131 PLARGE_INTEGER ReadTimeout;
3132 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
3133
3134 typedef struct _FILE_REPARSE_POINT_INFORMATION {
3135 LONGLONG FileReference;
3136 ULONG Tag;
3137 } FILE_REPARSE_POINT_INFORMATION, *PFILE_REPARSE_POINT_INFORMATION;
3138
3139 typedef struct _FILE_LINK_ENTRY_INFORMATION {
3140 ULONG NextEntryOffset;
3141 LONGLONG ParentFileId;
3142 ULONG FileNameLength;
3143 WCHAR FileName[1];
3144 } FILE_LINK_ENTRY_INFORMATION, *PFILE_LINK_ENTRY_INFORMATION;
3145
3146 typedef struct _FILE_LINKS_INFORMATION {
3147 ULONG BytesNeeded;
3148 ULONG EntriesReturned;
3149 FILE_LINK_ENTRY_INFORMATION Entry;
3150 } FILE_LINKS_INFORMATION, *PFILE_LINKS_INFORMATION;
3151
3152 typedef struct _FILE_NETWORK_PHYSICAL_NAME_INFORMATION {
3153 ULONG FileNameLength;
3154 WCHAR FileName[1];
3155 } FILE_NETWORK_PHYSICAL_NAME_INFORMATION, *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION;
3156
3157 typedef struct _FILE_STANDARD_LINK_INFORMATION {
3158 ULONG NumberOfAccessibleLinks;
3159 ULONG TotalNumberOfLinks;
3160 BOOLEAN DeletePending;
3161 BOOLEAN Directory;
3162 } FILE_STANDARD_LINK_INFORMATION, *PFILE_STANDARD_LINK_INFORMATION;
3163
3164 typedef struct _FILE_GET_EA_INFORMATION {
3165 ULONG NextEntryOffset;
3166 UCHAR EaNameLength;
3167 CHAR EaName[1];
3168 } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
3169
3170 #define REMOTE_PROTOCOL_FLAG_LOOPBACK 0x00000001
3171 #define REMOTE_PROTOCOL_FLAG_OFFLINE 0x00000002
3172
3173 typedef struct _FILE_REMOTE_PROTOCOL_INFORMATION {
3174 USHORT StructureVersion;
3175 USHORT StructureSize;
3176 ULONG Protocol;
3177 USHORT ProtocolMajorVersion;
3178 USHORT ProtocolMinorVersion;
3179 USHORT ProtocolRevision;
3180 USHORT Reserved;
3181 ULONG Flags;
3182 struct {
3183 ULONG Reserved[8];
3184 } GenericReserved;
3185 struct {
3186 ULONG Reserved[16];
3187 } ProtocolSpecificReserved;
3188 } FILE_REMOTE_PROTOCOL_INFORMATION, *PFILE_REMOTE_PROTOCOL_INFORMATION;
3189
3190 typedef struct _FILE_GET_QUOTA_INFORMATION {
3191 ULONG NextEntryOffset;
3192 ULONG SidLength;
3193 SID Sid;
3194 } FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION;
3195
3196 typedef struct _FILE_QUOTA_INFORMATION {
3197 ULONG NextEntryOffset;
3198 ULONG SidLength;
3199 LARGE_INTEGER ChangeTime;
3200 LARGE_INTEGER QuotaUsed;
3201 LARGE_INTEGER QuotaThreshold;
3202 LARGE_INTEGER QuotaLimit;
3203 SID Sid;
3204 } FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
3205
3206 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
3207 ULONG FileSystemAttributes;
3208 ULONG MaximumComponentNameLength;
3209 ULONG FileSystemNameLength;
3210 WCHAR FileSystemName[1];
3211 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
3212
3213 typedef struct _FILE_FS_DRIVER_PATH_INFORMATION {
3214 BOOLEAN DriverInPath;
3215 ULONG DriverNameLength;
3216 WCHAR DriverName[1];
3217 } FILE_FS_DRIVER_PATH_INFORMATION, *PFILE_FS_DRIVER_PATH_INFORMATION;
3218
3219 typedef struct _FILE_FS_VOLUME_FLAGS_INFORMATION {
3220 ULONG Flags;
3221 } FILE_FS_VOLUME_FLAGS_INFORMATION, *PFILE_FS_VOLUME_FLAGS_INFORMATION;
3222
3223 #define FILE_VC_QUOTA_NONE 0x00000000
3224 #define FILE_VC_QUOTA_TRACK 0x00000001
3225 #define FILE_VC_QUOTA_ENFORCE 0x00000002
3226 #define FILE_VC_QUOTA_MASK 0x00000003
3227 #define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008
3228 #define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010
3229 #define FILE_VC_LOG_QUOTA_LIMIT 0x00000020
3230 #define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040
3231 #define FILE_VC_LOG_VOLUME_LIMIT 0x00000080
3232 #define FILE_VC_QUOTAS_INCOMPLETE 0x00000100
3233 #define FILE_VC_QUOTAS_REBUILDING 0x00000200
3234 #define FILE_VC_VALID_MASK 0x000003ff
3235
3236 typedef struct _FILE_FS_CONTROL_INFORMATION {
3237 LARGE_INTEGER FreeSpaceStartFiltering;
3238 LARGE_INTEGER FreeSpaceThreshold;
3239 LARGE_INTEGER FreeSpaceStopFiltering;
3240 LARGE_INTEGER DefaultQuotaThreshold;
3241 LARGE_INTEGER DefaultQuotaLimit;
3242 ULONG FileSystemControlFlags;
3243 } FILE_FS_CONTROL_INFORMATION, *PFILE_FS_CONTROL_INFORMATION;
3244
3245 #ifndef _FILESYSTEMFSCTL_
3246 #define _FILESYSTEMFSCTL_
3247
3248 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
3249 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
3250 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
3251 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
3252 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
3253 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
3254 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
3255 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
3256 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
3257 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
3258 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
3259 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
3260 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
3261 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
3262 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
3263 #define FSCTL_SET_BOOTLOADER_ACCESSED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
3264
3265 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
3266 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
3267 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
3268 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
3269 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
3270
3271 #if (_WIN32_WINNT >= 0x0400)
3272
3273 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
3274 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
3275 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS)
3276 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
3277 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
3278 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
3279 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
3280
3281 #endif
3282
3283 #if (_WIN32_WINNT >= 0x0500)
3284
3285 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
3286 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA)
3287 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
3288 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA)
3289 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA)
3290 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
3291 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA)
3292 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_READ_DATA)
3293 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA)
3294 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_READ_DATA)
3295 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA)
3296 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
3297 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA)
3298 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
3299 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
3300 #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
3301 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
3302 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
3303 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_ANY_ACCESS)
3304 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_ANY_ACCESS)
3305 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_READ_DATA)
3306 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_READ_DATA)
3307 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_READ_DATA)
3308 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
3309 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
3310 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
3311 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
3312 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
3313 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
3314 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
3315 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
3316 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3317
3318 #endif
3319
3320 #if (_WIN32_WINNT >= 0x0600)
3321
3322 #define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA)
3323 #define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA)
3324 #define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS)
3325 #define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS)
3326 #define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3327 #define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA)
3328 #define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA)
3329 #define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA)
3330 #define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA)
3331 #define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA)
3332 #define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA)
3333 #define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA)
3334 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA)
3335 #define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA)
3336 #define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA)
3337 #define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA)
3338 #define FSCTL_TXFS_SAVEPOINT_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 94, METHOD_BUFFERED, FILE_WRITE_DATA)
3339 #define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA)
3340 #define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA)
3341 #define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3342 #define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS)
3343 #define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS)
3344 #define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS)
3345 #define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS)
3346 #define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS)
3347 #define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3348 #define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS)
3349 #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS)
3350
3351 #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES \
3352 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA)
3353 #define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA)
3354 #define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS)
3355 #define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS)
3356 #define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS)
3357
3358 #endif
3359
3360 #if (_WIN32_WINNT >= 0x0601)
3361
3362 #define FSCTL_QUERY_DEPENDENT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 124, METHOD_BUFFERED, FILE_ANY_ACCESS)
3363 #define FSCTL_SD_GLOBAL_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 125, METHOD_BUFFERED, FILE_ANY_ACCESS)
3364 #define FSCTL_LOOKUP_STREAM_FROM_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 127, METHOD_BUFFERED, FILE_ANY_ACCESS)
3365 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS)
3366 #define FSCTL_FILE_TYPE_NOTIFICATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS)
3367 #define FSCTL_GET_BOOT_AREA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 140, METHOD_BUFFERED, FILE_ANY_ACCESS)
3368 #define FSCTL_GET_RETRIEVAL_POINTER_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 141, METHOD_BUFFERED, FILE_ANY_ACCESS)
3369 #define FSCTL_SET_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS)
3370 #define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS)
3371
3372 #define FSCTL_REQUEST_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS)
3373
3374 #define FSCTL_CSV_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS)
3375 #define FSCTL_IS_CSV_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS)
3376
3377 #define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 147, METHOD_BUFFERED, FILE_ANY_ACCESS)
3378 #define FSCTL_CSV_GET_VOLUME_PATH_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 148, METHOD_BUFFERED, FILE_ANY_ACCESS)
3379 #define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS)
3380 #define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS)
3381 #define FSCTL_IS_FILE_ON_CSV_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS)
3382
3383 typedef struct _CSV_NAMESPACE_INFO {
3384 ULONG Version;
3385 ULONG DeviceNumber;
3386 LARGE_INTEGER StartingOffset;
3387 ULONG SectorSize;
3388 } CSV_NAMESPACE_INFO, *PCSV_NAMESPACE_INFO;
3389
3390 #define CSV_NAMESPACE_INFO_V1 (sizeof(CSV_NAMESPACE_INFO))
3391 #define CSV_INVALID_DEVICE_NUMBER 0xFFFFFFFF
3392
3393 #endif
3394
3395 #define FSCTL_MARK_AS_SYSTEM_HIVE FSCTL_SET_BOOTLOADER_ACCESSED
3396
3397 typedef struct _PATHNAME_BUFFER {
3398 ULONG PathNameLength;
3399 WCHAR Name[1];
3400 } PATHNAME_BUFFER, *PPATHNAME_BUFFER;
3401
3402 typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER {
3403 UCHAR First0x24BytesOfBootSector[0x24];
3404 } FSCTL_QUERY_FAT_BPB_BUFFER, *PFSCTL_QUERY_FAT_BPB_BUFFER;
3405
3406 #if (_WIN32_WINNT >= 0x0400)
3407
3408 typedef struct _NTFS_VOLUME_DATA_BUFFER {
3409 LARGE_INTEGER VolumeSerialNumber;
3410 LARGE_INTEGER NumberSectors;
3411 LARGE_INTEGER TotalClusters;
3412 LARGE_INTEGER FreeClusters;
3413 LARGE_INTEGER TotalReserved;
3414 ULONG BytesPerSector;
3415 ULONG BytesPerCluster;
3416 ULONG BytesPerFileRecordSegment;
3417 ULONG ClustersPerFileRecordSegment;
3418 LARGE_INTEGER MftValidDataLength;
3419 LARGE_INTEGER MftStartLcn;
3420 LARGE_INTEGER Mft2StartLcn;
3421 LARGE_INTEGER MftZoneStart;
3422 LARGE_INTEGER MftZoneEnd;
3423 } NTFS_VOLUME_DATA_BUFFER, *PNTFS_VOLUME_DATA_BUFFER;
3424
3425 typedef struct _NTFS_EXTENDED_VOLUME_DATA {
3426 ULONG ByteCount;
3427 USHORT MajorVersion;
3428 USHORT MinorVersion;
3429 } NTFS_EXTENDED_VOLUME_DATA, *PNTFS_EXTENDED_VOLUME_DATA;
3430
3431 typedef struct _STARTING_LCN_INPUT_BUFFER {
3432 LARGE_INTEGER StartingLcn;
3433 } STARTING_LCN_INPUT_BUFFER, *PSTARTING_LCN_INPUT_BUFFER;
3434
3435 typedef struct _VOLUME_BITMAP_BUFFER {
3436 LARGE_INTEGER StartingLcn;
3437 LARGE_INTEGER BitmapSize;
3438 UCHAR Buffer[1];
3439 } VOLUME_BITMAP_BUFFER, *PVOLUME_BITMAP_BUFFER;
3440
3441 typedef struct _STARTING_VCN_INPUT_BUFFER {
3442 LARGE_INTEGER StartingVcn;
3443 } STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER;
3444
3445 typedef struct _RETRIEVAL_POINTERS_BUFFER {
3446 ULONG ExtentCount;
3447 LARGE_INTEGER StartingVcn;
3448 struct {
3449 LARGE_INTEGER NextVcn;
3450 LARGE_INTEGER Lcn;
3451 } Extents[1];
3452 } RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
3453
3454 typedef struct _NTFS_FILE_RECORD_INPUT_BUFFER {
3455 LARGE_INTEGER FileReferenceNumber;
3456 } NTFS_FILE_RECORD_INPUT_BUFFER, *PNTFS_FILE_RECORD_INPUT_BUFFER;
3457
3458 typedef struct _NTFS_FILE_RECORD_OUTPUT_BUFFER {
3459 LARGE_INTEGER FileReferenceNumber;
3460 ULONG FileRecordLength;
3461 UCHAR FileRecordBuffer[1];
3462 } NTFS_FILE_RECORD_OUTPUT_BUFFER, *PNTFS_FILE_RECORD_OUTPUT_BUFFER;
3463
3464 typedef struct _MOVE_FILE_DATA {
3465 HANDLE FileHandle;
3466 LARGE_INTEGER StartingVcn;
3467 LARGE_INTEGER StartingLcn;
3468 ULONG ClusterCount;
3469 } MOVE_FILE_DATA, *PMOVE_FILE_DATA;
3470
3471 typedef struct _MOVE_FILE_RECORD_DATA {
3472 HANDLE FileHandle;
3473 LARGE_INTEGER SourceFileRecord;
3474 LARGE_INTEGER TargetFileRecord;
3475 } MOVE_FILE_RECORD_DATA, *PMOVE_FILE_RECORD_DATA;
3476
3477 #if defined(_WIN64)
3478 typedef struct _MOVE_FILE_DATA32 {
3479 UINT32 FileHandle;
3480 LARGE_INTEGER StartingVcn;
3481 LARGE_INTEGER StartingLcn;
3482 ULONG ClusterCount;
3483 } MOVE_FILE_DATA32, *PMOVE_FILE_DATA32;
3484 #endif
3485
3486 #endif /* (_WIN32_WINNT >= 0x0400) */
3487
3488 #if (_WIN32_WINNT >= 0x0500)
3489
3490 typedef struct _FIND_BY_SID_DATA {
3491 ULONG Restart;
3492 SID Sid;
3493 } FIND_BY_SID_DATA, *PFIND_BY_SID_DATA;
3494
3495 typedef struct _FIND_BY_SID_OUTPUT {
3496 ULONG NextEntryOffset;
3497 ULONG FileIndex;
3498 ULONG FileNameLength;
3499 WCHAR FileName[1];
3500 } FIND_BY_SID_OUTPUT, *PFIND_BY_SID_OUTPUT;
3501
3502 typedef struct _MFT_ENUM_DATA {
3503 ULONGLONG StartFileReferenceNumber;
3504 USN LowUsn;
3505 USN HighUsn;
3506 } MFT_ENUM_DATA, *PMFT_ENUM_DATA;
3507
3508 typedef struct _CREATE_USN_JOURNAL_DATA {
3509 ULONGLONG MaximumSize;
3510 ULONGLONG AllocationDelta;
3511 } CREATE_USN_JOURNAL_DATA, *PCREATE_USN_JOURNAL_DATA;
3512
3513 typedef struct _READ_USN_JOURNAL_DATA {
3514 USN StartUsn;
3515 ULONG ReasonMask;
3516 ULONG ReturnOnlyOnClose;
3517 ULONGLONG Timeout;
3518 ULONGLONG BytesToWaitFor;
3519 ULONGLONG UsnJournalID;
3520 } READ_USN_JOURNAL_DATA, *PREAD_USN_JOURNAL_DATA;
3521
3522 typedef struct _USN_RECORD {
3523 ULONG RecordLength;
3524 USHORT MajorVersion;
3525 USHORT MinorVersion;
3526 ULONGLONG FileReferenceNumber;
3527 ULONGLONG ParentFileReferenceNumber;
3528 USN Usn;
3529 LARGE_INTEGER TimeStamp;
3530 ULONG Reason;
3531 ULONG SourceInfo;
3532 ULONG SecurityId;
3533 ULONG FileAttributes;
3534 USHORT FileNameLength;
3535 USHORT FileNameOffset;
3536 WCHAR FileName[1];
3537 } USN_RECORD, *PUSN_RECORD;
3538
3539 #define USN_PAGE_SIZE (0x1000)
3540
3541 #define USN_REASON_DATA_OVERWRITE (0x00000001)
3542 #define USN_REASON_DATA_EXTEND (0x00000002)
3543 #define USN_REASON_DATA_TRUNCATION (0x00000004)
3544 #define USN_REASON_NAMED_DATA_OVERWRITE (0x00000010)
3545 #define USN_REASON_NAMED_DATA_EXTEND (0x00000020)
3546 #define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040)
3547 #define USN_REASON_FILE_CREATE (0x00000100)
3548 #define USN_REASON_FILE_DELETE (0x00000200)
3549 #define USN_REASON_EA_CHANGE (0x00000400)
3550 #define USN_REASON_SECURITY_CHANGE (0x00000800)
3551 #define USN_REASON_RENAME_OLD_NAME (0x00001000)
3552 #define USN_REASON_RENAME_NEW_NAME (0x00002000)
3553 #define USN_REASON_INDEXABLE_CHANGE (0x00004000)
3554 #define USN_REASON_BASIC_INFO_CHANGE (0x00008000)
3555 #define USN_REASON_HARD_LINK_CHANGE (0x00010000)
3556 #define USN_REASON_COMPRESSION_CHANGE (0x00020000)
3557 #define USN_REASON_ENCRYPTION_CHANGE (0x00040000)
3558 #define USN_REASON_OBJECT_ID_CHANGE (0x00080000)
3559 #define USN_REASON_REPARSE_POINT_CHANGE (0x00100000)
3560 #define USN_REASON_STREAM_CHANGE (0x00200000)
3561 #define USN_REASON_TRANSACTED_CHANGE (0x00400000)
3562 #define USN_REASON_CLOSE (0x80000000)
3563
3564 typedef struct _USN_JOURNAL_DATA {
3565 ULONGLONG UsnJournalID;
3566 USN FirstUsn;
3567 USN NextUsn;
3568 USN LowestValidUsn;
3569 USN MaxUsn;
3570 ULONGLONG MaximumSize;
3571 ULONGLONG AllocationDelta;
3572 } USN_JOURNAL_DATA, *PUSN_JOURNAL_DATA;
3573
3574 typedef struct _DELETE_USN_JOURNAL_DATA {
3575 ULONGLONG UsnJournalID;
3576 ULONG DeleteFlags;
3577 } DELETE_USN_JOURNAL_DATA, *PDELETE_USN_JOURNAL_DATA;
3578
3579 #define USN_DELETE_FLAG_DELETE (0x00000001)
3580 #define USN_DELETE_FLAG_NOTIFY (0x00000002)
3581 #define USN_DELETE_VALID_FLAGS (0x00000003)
3582
3583 typedef struct _MARK_HANDLE_INFO {
3584 ULONG UsnSourceInfo;
3585 HANDLE VolumeHandle;
3586 ULONG HandleInfo;
3587 } MARK_HANDLE_INFO, *PMARK_HANDLE_INFO;
3588
3589 #if defined(_WIN64)
3590 typedef struct _MARK_HANDLE_INFO32 {
3591 ULONG UsnSourceInfo;
3592 UINT32 VolumeHandle;
3593 ULONG HandleInfo;
3594 } MARK_HANDLE_INFO32, *PMARK_HANDLE_INFO32;
3595 #endif
3596
3597 #define USN_SOURCE_DATA_MANAGEMENT (0x00000001)
3598 #define USN_SOURCE_AUXILIARY_DATA (0x00000002)
3599 #define USN_SOURCE_REPLICATION_MANAGEMENT (0x00000004)
3600
3601 #define MARK_HANDLE_PROTECT_CLUSTERS (0x00000001)
3602 #define MARK_HANDLE_TXF_SYSTEM_LOG (0x00000004)
3603 #define MARK_HANDLE_NOT_TXF_SYSTEM_LOG (0x00000008)
3604
3605 typedef struct _BULK_SECURITY_TEST_DATA {
3606 ACCESS_MASK DesiredAccess;
3607 ULONG SecurityIds[1];
3608 } BULK_SECURITY_TEST_DATA, *PBULK_SECURITY_TEST_DATA;
3609
3610 #define VOLUME_IS_DIRTY (0x00000001)
3611 #define VOLUME_UPGRADE_SCHEDULED (0x00000002)
3612 #define VOLUME_SESSION_OPEN (0x00000004)
3613
3614 typedef struct _FILE_PREFETCH {
3615 ULONG Type;
3616 ULONG Count;
3617 ULONGLONG Prefetch[1];
3618 } FILE_PREFETCH, *PFILE_PREFETCH;
3619
3620 typedef struct _FILE_PREFETCH_EX {
3621 ULONG Type;
3622 ULONG Count;
3623 PVOID Context;
3624 ULONGLONG Prefetch[1];
3625 } FILE_PREFETCH_EX, *PFILE_PREFETCH_EX;
3626
3627 #define FILE_PREFETCH_TYPE_FOR_CREATE 0x1
3628 #define FILE_PREFETCH_TYPE_FOR_DIRENUM 0x2
3629 #define FILE_PREFETCH_TYPE_FOR_CREATE_EX 0x3
3630 #define FILE_PREFETCH_TYPE_FOR_DIRENUM_EX 0x4
3631
3632 #define FILE_PREFETCH_TYPE_MAX 0x4
3633
3634 typedef struct _FILE_OBJECTID_BUFFER {
3635 UCHAR ObjectId[16];
3636 union {
3637 struct {
3638 UCHAR BirthVolumeId[16];
3639 UCHAR BirthObjectId[16];
3640 UCHAR DomainId[16];
3641 } DUMMYSTRUCTNAME;
3642 UCHAR ExtendedInfo[48];
3643 } DUMMYUNIONNAME;
3644 } FILE_OBJECTID_BUFFER, *PFILE_OBJECTID_BUFFER;
3645
3646 typedef struct _FILE_SET_SPARSE_BUFFER {
3647 BOOLEAN SetSparse;
3648 } FILE_SET_SPARSE_BUFFER, *PFILE_SET_SPARSE_BUFFER;
3649
3650 typedef struct _FILE_ZERO_DATA_INFORMATION {
3651 LARGE_INTEGER FileOffset;
3652 LARGE_INTEGER BeyondFinalZero;
3653 } FILE_ZERO_DATA_INFORMATION, *PFILE_ZERO_DATA_INFORMATION;
3654
3655 typedef struct _FILE_ALLOCATED_RANGE_BUFFER {
3656 LARGE_INTEGER FileOffset;
3657 LARGE_INTEGER Length;
3658 } FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER;
3659
3660 typedef struct _ENCRYPTION_BUFFER {
3661 ULONG EncryptionOperation;
3662 UCHAR Private[1];
3663 } ENCRYPTION_BUFFER, *PENCRYPTION_BUFFER;
3664
3665 #define FILE_SET_ENCRYPTION 0x00000001
3666 #define FILE_CLEAR_ENCRYPTION 0x00000002
3667 #define STREAM_SET_ENCRYPTION 0x00000003
3668 #define STREAM_CLEAR_ENCRYPTION 0x00000004
3669
3670 #define MAXIMUM_ENCRYPTION_VALUE 0x00000004
3671
3672 typedef struct _DECRYPTION_STATUS_BUFFER {
3673 BOOLEAN NoEncryptedStreams;
3674 } DECRYPTION_STATUS_BUFFER, *PDECRYPTION_STATUS_BUFFER;
3675
3676 #define ENCRYPTION_FORMAT_DEFAULT (0x01)
3677
3678 #define COMPRESSION_FORMAT_SPARSE (0x4000)
3679
3680 typedef struct _REQUEST_RAW_ENCRYPTED_DATA {
3681 LONGLONG FileOffset;
3682 ULONG Length;
3683 } REQUEST_RAW_ENCRYPTED_DATA, *PREQUEST_RAW_ENCRYPTED_DATA;
3684
3685 typedef struct _ENCRYPTED_DATA_INFO {
3686 ULONGLONG StartingFileOffset;
3687 ULONG OutputBufferOffset;
3688 ULONG BytesWithinFileSize;
3689 ULONG BytesWithinValidDataLength;
3690 USHORT CompressionFormat;
3691 UCHAR DataUnitShift;
3692 UCHAR ChunkShift;
3693 UCHAR ClusterShift;
3694 UCHAR EncryptionFormat;
3695 USHORT NumberOfDataBlocks;
3696 ULONG DataBlockSize[ANYSIZE_ARRAY];
3697 } ENCRYPTED_DATA_INFO, *PENCRYPTED_DATA_INFO;
3698
3699 typedef struct _PLEX_READ_DATA_REQUEST {
3700 LARGE_INTEGER ByteOffset;
3701 ULONG ByteLength;
3702 ULONG PlexNumber;
3703 } PLEX_READ_DATA_REQUEST, *PPLEX_READ_DATA_REQUEST;
3704
3705 typedef struct _SI_COPYFILE {
3706 ULONG SourceFileNameLength;
3707 ULONG DestinationFileNameLength;
3708 ULONG Flags;
3709 WCHAR FileNameBuffer[1];
3710 } SI_COPYFILE, *PSI_COPYFILE;
3711
3712 #define COPYFILE_SIS_LINK 0x0001
3713 #define COPYFILE_SIS_REPLACE 0x0002
3714 #define COPYFILE_SIS_FLAGS 0x0003
3715
3716 #endif /* (_WIN32_WINNT >= 0x0500) */
3717
3718 #if (_WIN32_WINNT >= 0x0600)
3719
3720 typedef struct _FILE_MAKE_COMPATIBLE_BUFFER {
3721 BOOLEAN CloseDisc;
3722 } FILE_MAKE_COMPATIBLE_BUFFER, *PFILE_MAKE_COMPATIBLE_BUFFER;
3723
3724 typedef struct _FILE_SET_DEFECT_MGMT_BUFFER {
3725 BOOLEAN Disable;
3726 } FILE_SET_DEFECT_MGMT_BUFFER, *PFILE_SET_DEFECT_MGMT_BUFFER;
3727
3728 typedef struct _FILE_QUERY_SPARING_BUFFER {
3729 ULONG SparingUnitBytes;
3730 BOOLEAN SoftwareSparing;
3731 ULONG TotalSpareBlocks;
3732 ULONG FreeSpareBlocks;
3733 } FILE_QUERY_SPARING_BUFFER, *PFILE_QUERY_SPARING_BUFFER;
3734
3735 typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER {
3736 LARGE_INTEGER DirectoryCount;
3737 LARGE_INTEGER FileCount;
3738 USHORT FsFormatMajVersion;
3739 USHORT FsFormatMinVersion;
3740 WCHAR FsFormatName[12];
3741 LARGE_INTEGER FormatTime;
3742 LARGE_INTEGER LastUpdateTime;
3743 WCHAR CopyrightInfo[34];
3744 WCHAR AbstractInfo[34];
3745 WCHAR FormattingImplementationInfo[34];
3746 WCHAR LastModifyingImplementationInfo[34];
3747 } FILE_QUERY_ON_DISK_VOL_INFO_BUFFER, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER;
3748
3749 #define SET_REPAIR_ENABLED (0x00000001)
3750 #define SET_REPAIR_VOLUME_BITMAP_SCAN (0x00000002)
3751 #define SET_REPAIR_DELETE_CROSSLINK (0x00000004)
3752 #define SET_REPAIR_WARN_ABOUT_DATA_LOSS (0x00000008)
3753 #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT (0x00000010)
3754 #define SET_REPAIR_VALID_MASK (0x0000001F)
3755
3756 typedef enum _SHRINK_VOLUME_REQUEST_TYPES {
3757 ShrinkPrepare = 1,
3758 ShrinkCommit,
3759 ShrinkAbort
3760 } SHRINK_VOLUME_REQUEST_TYPES, *PSHRINK_VOLUME_REQUEST_TYPES;
3761
3762 typedef struct _SHRINK_VOLUME_INFORMATION {
3763 SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType;
3764 ULONGLONG Flags;
3765 LONGLONG NewNumberOfSectors;
3766 } SHRINK_VOLUME_INFORMATION, *PSHRINK_VOLUME_INFORMATION;
3767
3768 #define TXFS_RM_FLAG_LOGGING_MODE 0x00000001
3769 #define TXFS_RM_FLAG_RENAME_RM 0x00000002
3770 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004
3771 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008
3772 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010
3773 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020
3774 #define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040
3775 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080
3776 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100
3777 #define TXFS_RM_FLAG_GROW_LOG 0x00000400
3778 #define TXFS_RM_FLAG_SHRINK_LOG 0x00000800
3779 #define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000
3780 #define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000
3781 #define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000
3782 #define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000
3783 #define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000
3784 #define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000
3785
3786 #define TXFS_LOGGING_MODE_SIMPLE (0x0001)
3787 #define TXFS_LOGGING_MODE_FULL (0x0002)
3788
3789 #define TXFS_TRANSACTION_STATE_NONE 0x00
3790 #define TXFS_TRANSACTION_STATE_ACTIVE 0x01
3791 #define TXFS_TRANSACTION_STATE_PREPARED 0x02
3792 #define TXFS_TRANSACTION_STATE_NOTACTIVE 0x03
3793
3794 #define TXFS_MODIFY_RM_VALID_FLAGS \
3795 (TXFS_RM_FLAG_LOGGING_MODE | \
3796 TXFS_RM_FLAG_RENAME_RM | \
3797 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
3798 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
3799 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
3800 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
3801 TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
3802 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
3803 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
3804 TXFS_RM_FLAG_SHRINK_LOG | \
3805 TXFS_RM_FLAG_GROW_LOG | \
3806 TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE | \
3807 TXFS_RM_FLAG_PRESERVE_CHANGES | \
3808 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
3809 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
3810 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
3811 TXFS_RM_FLAG_PREFER_AVAILABILITY)
3812
3813 typedef struct _TXFS_MODIFY_RM {
3814 ULONG Flags;
3815 ULONG LogContainerCountMax;
3816 ULONG LogContainerCountMin;
3817 ULONG LogContainerCount;
3818 ULONG LogGrowthIncrement;
3819 ULONG LogAutoShrinkPercentage;
3820 ULONGLONG Reserved;
3821 USHORT LoggingMode;
3822 } TXFS_MODIFY_RM, *PTXFS_MODIFY_RM;
3823
3824 #define TXFS_RM_STATE_NOT_STARTED 0
3825 #define TXFS_RM_STATE_STARTING 1
3826 #define TXFS_RM_STATE_ACTIVE 2
3827 #define TXFS_RM_STATE_SHUTTING_DOWN 3
3828
3829 #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS \
3830 (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
3831 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
3832 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
3833 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
3834 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
3835 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
3836 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
3837 TXFS_RM_FLAG_PREFER_AVAILABILITY)
3838
3839 typedef struct _TXFS_QUERY_RM_INFORMATION {
3840 ULONG BytesRequired;
3841 ULONGLONG TailLsn;
3842 ULONGLONG CurrentLsn;
3843 ULONGLONG ArchiveTailLsn;
3844 ULONGLONG LogContainerSize;
3845 LARGE_INTEGER HighestVirtualClock;
3846 ULONG LogContainerCount;
3847 ULONG LogContainerCountMax;
3848 ULONG LogContainerCountMin;
3849 ULONG LogGrowthIncrement;
3850 ULONG LogAutoShrinkPercentage;
3851 ULONG Flags;
3852 USHORT LoggingMode;
3853 USHORT Reserved;
3854 ULONG RmState;
3855 ULONGLONG LogCapacity;
3856 ULONGLONG LogFree;
3857 ULONGLONG TopsSize;
3858 ULONGLONG TopsUsed;
3859 ULONGLONG TransactionCount;
3860 ULONGLONG OnePCCount;
3861 ULONGLONG TwoPCCount;
3862 ULONGLONG NumberLogFileFull;
3863 ULONGLONG OldestTransactionAge;
3864 GUID RMName;
3865 ULONG TmLogPathOffset;
3866 } TXFS_QUERY_RM_INFORMATION, *PTXFS_QUERY_RM_INFORMATION;
3867
3868 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x01
3869 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x02
3870
3871 #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS \
3872 (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN | \
3873 TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK)
3874
3875 typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION {
3876 LARGE_INTEGER LastVirtualClock;
3877 ULONGLONG LastRedoLsn;
3878 ULONGLONG HighestRecoveryLsn;
3879 ULONG Flags;
3880 } TXFS_ROLLFORWARD_REDO_INFORMATION, *PTXFS_ROLLFORWARD_REDO_INFORMATION;
3881
3882 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001
3883 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002
3884 #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004
3885 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008
3886 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010
3887 #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020
3888 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040
3889 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080
3890
3891 #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200
3892 #define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400
3893 #define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800
3894
3895 #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000
3896 #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000
3897
3898 #define TXFS_START_RM_VALID_FLAGS \
3899 (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
3900 TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
3901 TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE | \
3902 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
3903 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
3904 TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
3905 TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT | \
3906 TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
3907 TXFS_START_RM_FLAG_LOGGING_MODE | \
3908 TXFS_START_RM_FLAG_PRESERVE_CHANGES | \
3909 TXFS_START_RM_FLAG_PREFER_CONSISTENCY | \
3910 TXFS_START_RM_FLAG_PREFER_AVAILABILITY)
3911
3912 typedef struct _TXFS_START_RM_INFORMATION {
3913 ULONG Flags;
3914 ULONGLONG LogContainerSize;
3915 ULONG LogContainerCountMin;
3916 ULONG LogContainerCountMax;
3917 ULONG LogGrowthIncrement;
3918 ULONG LogAutoShrinkPercentage;
3919 ULONG TmLogPathOffset;
3920 USHORT TmLogPathLength;
3921 USHORT LoggingMode;
3922 USHORT LogPathLength;
3923 USHORT Reserved;
3924 WCHAR LogPath[1];
3925 } TXFS_START_RM_INFORMATION, *PTXFS_START_RM_INFORMATION;
3926
3927 typedef struct _TXFS_GET_METADATA_INFO_OUT {
3928 struct {
3929 LONGLONG LowPart;
3930 LONGLONG HighPart;
3931 } TxfFileId;
3932 GUID LockingTransaction;
3933 ULONGLONG LastLsn;
3934 ULONG TransactionState;
3935 } TXFS_GET_METADATA_INFO_OUT, *PTXFS_GET_METADATA_INFO_OUT;
3936
3937 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001
3938 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x00000002
3939
3940 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY {
3941 ULONGLONG Offset;
3942 ULONG NameFlags;
3943 LONGLONG FileId;
3944 ULONG Reserved1;
3945 ULONG Reserved2;
3946 LONGLONG Reserved3;
3947 WCHAR FileName[1];
3948 } TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY;
3949
3950 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES {
3951 GUID KtmTransaction;
3952 ULONGLONG NumberOfFiles;
3953 ULONGLONG BufferSizeRequired;
3954 ULONGLONG Offset;
3955 } TXFS_LIST_TRANSACTION_LOCKED_FILES, *PTXFS_LIST_TRANSACTION_LOCKED_FILES;
3956
3957 typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY {
3958 GUID TransactionId;
3959 ULONG TransactionState;
3960 ULONG Reserved1;
3961 ULONG Reserved2;
3962 LONGLONG Reserved3;
3963 } TXFS_LIST_TRANSACTIONS_ENTRY, *PTXFS_LIST_TRANSACTIONS_ENTRY;
3964
3965 typedef struct _TXFS_LIST_TRANSACTIONS {
3966 ULONGLONG NumberOfTransactions;
3967 ULONGLONG BufferSizeRequired;
3968 } TXFS_LIST_TRANSACTIONS, *PTXFS_LIST_TRANSACTIONS;
3969
3970 typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT {
3971 union {
3972 ULONG BufferLength;
3973 UCHAR Buffer[1];
3974 } DUMMYUNIONNAME;
3975 } TXFS_READ_BACKUP_INFORMATION_OUT, *PTXFS_READ_BACKUP_INFORMATION_OUT;
3976
3977 typedef struct _TXFS_WRITE_BACKUP_INFORMATION {
3978 UCHAR Buffer[1];
3979 } TXFS_WRITE_BACKUP_INFORMATION, *PTXFS_WRITE_BACKUP_INFORMATION;
3980
3981 #define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFE
3982 #define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFF
3983
3984 typedef struct _TXFS_GET_TRANSACTED_VERSION {
3985 ULONG ThisBaseVersion;
3986 ULONG LatestVersion;
3987 USHORT ThisMiniVersion;
3988 USHORT FirstMiniVersion;
3989 USHORT LatestMiniVersion;
3990 } TXFS_GET_TRANSACTED_VERSION, *PTXFS_GET_TRANSACTED_VERSION;
3991
3992 #define TXFS_SAVEPOINT_SET 0x00000001
3993 #define TXFS_SAVEPOINT_ROLLBACK 0x00000002
3994 #define TXFS_SAVEPOINT_CLEAR 0x00000004
3995 #define TXFS_SAVEPOINT_CLEAR_ALL 0x00000010
3996
3997 typedef struct _TXFS_SAVEPOINT_INFORMATION {
3998 HANDLE KtmTransaction;
3999 ULONG ActionCode;
4000 ULONG SavepointId;
4001 } TXFS_SAVEPOINT_INFORMATION, *PTXFS_SAVEPOINT_INFORMATION;
4002
4003 typedef struct _TXFS_CREATE_MINIVERSION_INFO {
4004 USHORT StructureVersion;
4005 USHORT StructureLength;
4006 ULONG BaseVersion;
4007 USHORT MiniVersion;
4008 } TXFS_CREATE_MINIVERSION_INFO, *PTXFS_CREATE_MINIVERSION_INFO;
4009
4010 typedef struct _TXFS_TRANSACTION_ACTIVE_INFO {
4011 BOOLEAN TransactionsActiveAtSnapshot;
4012 } TXFS_TRANSACTION_ACTIVE_INFO, *PTXFS_TRANSACTION_ACTIVE_INFO;
4013
4014 #endif /* (_WIN32_WINNT >= 0x0600) */
4015
4016 #if (_WIN32_WINNT >= 0x0601)
4017
4018 #define MARK_HANDLE_REALTIME (0x00000020)
4019 #define MARK_HANDLE_NOT_REALTIME (0x00000040)
4020
4021 #define NO_8DOT3_NAME_PRESENT (0x00000001)
4022 #define REMOVED_8DOT3_NAME (0x00000002)
4023
4024 #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED (0x00000001)
4025
4026 typedef struct _BOOT_AREA_INFO {
4027 ULONG BootSectorCount;
4028 struct {
4029 LARGE_INTEGER Offset;
4030 } BootSectors[2];
4031 } BOOT_AREA_INFO, *PBOOT_AREA_INFO;
4032
4033 typedef struct _RETRIEVAL_POINTER_BASE {
4034 LARGE_INTEGER FileAreaOffset;
4035 } RETRIEVAL_POINTER_BASE, *PRETRIEVAL_POINTER_BASE;
4036
4037 typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION {
4038 ULONG VolumeFlags;
4039 ULONG FlagMask;
4040 ULONG Version;
4041 ULONG Reserved;
4042 } FILE_FS_PERSISTENT_VOLUME_INFORMATION, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION;
4043
4044 typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION {
4045 CHAR FileSystem[9];
4046 } FILE_SYSTEM_RECOGNITION_INFORMATION, *PFILE_SYSTEM_RECOGNITION_INFORMATION;
4047
4048 #define OPLOCK_LEVEL_CACHE_READ (0x00000001)
4049 #define OPLOCK_LEVEL_CACHE_HANDLE (0x00000002)
4050 #define OPLOCK_LEVEL_CACHE_WRITE (0x00000004)
4051
4052 #define REQUEST_OPLOCK_INPUT_FLAG_REQUEST (0x00000001)
4053 #define REQUEST_OPLOCK_INPUT_FLAG_ACK (0x00000002)
4054 #define REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE (0x00000004)
4055
4056 #define REQUEST_OPLOCK_CURRENT_VERSION 1
4057
4058 typedef struct _REQUEST_OPLOCK_INPUT_BUFFER {
4059 USHORT StructureVersion;
4060 USHORT StructureLength;
4061 ULONG RequestedOplockLevel;
4062 ULONG Flags;
4063 } REQUEST_OPLOCK_INPUT_BUFFER, *PREQUEST_OPLOCK_INPUT_BUFFER;
4064
4065 #define REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED (0x00000001)
4066 #define REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED (0x00000002)
4067
4068 typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER {
4069 USHORT StructureVersion;
4070 USHORT StructureLength;
4071 ULONG OriginalOplockLevel;
4072 ULONG NewOplockLevel;
4073 ULONG Flags;
4074 ACCESS_MASK AccessMode;
4075 USHORT ShareMode;
4076 } REQUEST_OPLOCK_OUTPUT_BUFFER, *PREQUEST_OPLOCK_OUTPUT_BUFFER;
4077
4078 #define SD_GLOBAL_CHANGE_TYPE_MACHINE_SID 1
4079
4080 typedef struct _SD_CHANGE_MACHINE_SID_INPUT {
4081 USHORT CurrentMachineSIDOffset;
4082 USHORT CurrentMachineSIDLength;
4083 USHORT NewMachineSIDOffset;
4084 USHORT NewMachineSIDLength;
4085 } SD_CHANGE_MACHINE_SID_INPUT, *PSD_CHANGE_MACHINE_SID_INPUT;
4086
4087 typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT {
4088 ULONGLONG NumSDChangedSuccess;
4089 ULONGLONG NumSDChangedFail;
4090 ULONGLONG NumSDUnused;
4091 ULONGLONG NumSDTotal;
4092 ULONGLONG NumMftSDChangedSuccess;
4093 ULONGLONG NumMftSDChangedFail;
4094 ULONGLONG NumMftSDTotal;
4095 } SD_CHANGE_MACHINE_SID_OUTPUT, *PSD_CHANGE_MACHINE_SID_OUTPUT;
4096
4097 typedef struct _SD_GLOBAL_CHANGE_INPUT {
4098 ULONG Flags;
4099 ULONG ChangeType;
4100 union {
4101 SD_CHANGE_MACHINE_SID_INPUT SdChange;
4102 };
4103 } SD_GLOBAL_CHANGE_INPUT, *PSD_GLOBAL_CHANGE_INPUT;
4104
4105 typedef struct _SD_GLOBAL_CHANGE_OUTPUT {
4106 ULONG Flags;
4107 ULONG ChangeType;
4108 union {
4109 SD_CHANGE_MACHINE_SID_OUTPUT SdChange;
4110 };
4111 } SD_GLOBAL_CHANGE_OUTPUT, *PSD_GLOBAL_CHANGE_OUTPUT;
4112
4113 #define ENCRYPTED_DATA_INFO_SPARSE_FILE 1
4114
4115 typedef struct _EXTENDED_ENCRYPTED_DATA_INFO {
4116 ULONG ExtendedCode;
4117 ULONG Length;
4118 ULONG Flags;
4119 ULONG Reserved;
4120 } EXTENDED_ENCRYPTED_DATA_INFO, *PEXTENDED_ENCRYPTED_DATA_INFO;
4121
4122 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT {
4123 ULONG Flags;
4124 ULONG NumberOfClusters;
4125 LARGE_INTEGER Cluster[1];
4126 } LOOKUP_STREAM_FROM_CLUSTER_INPUT, *PLOOKUP_STREAM_FROM_CLUSTER_INPUT;
4127
4128 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT {
4129 ULONG Offset;
4130 ULONG NumberOfMatches;
4131 ULONG BufferSizeRequired;
4132 } LOOKUP_STREAM_FROM_CLUSTER_OUTPUT, *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT;
4133
4134 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE 0x00000001
4135 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET 0x00000002
4136 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE 0x00000004
4137 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE 0x00000008
4138
4139 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK 0xff000000
4140 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA 0x01000000
4141 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX 0x02000000
4142 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM 0x03000000
4143
4144 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY {
4145 ULONG OffsetToNext;
4146 ULONG Flags;
4147 LARGE_INTEGER Reserved;
4148 LARGE_INTEGER Cluster;
4149 WCHAR FileName[1];
4150 } LOOKUP_STREAM_FROM_CLUSTER_ENTRY, *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY;
4151
4152 typedef struct _FILE_TYPE_NOTIFICATION_INPUT {
4153 ULONG Flags;
4154 ULONG NumFileTypeIDs;
4155 GUID FileTypeID[1];
4156 } FILE_TYPE_NOTIFICATION_INPUT, *PFILE_TYPE_NOTIFICATION_INPUT;
4157
4158 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_BEGIN 0x00000001
4159 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_END 0x00000002
4160
4161 DEFINE_GUID( FILE_TYPE_NOTIFICATION_GUID_PAGE_FILE, 0x0d0a64a1, 0x38fc, 0x4db8, 0x9f, 0xe7, 0x3f, 0x43, 0x52, 0xcd, 0x7c, 0x5c );
4162 DEFINE_GUID( FILE_TYPE_NOTIFICATION_GUID_HIBERNATION_FILE, 0xb7624d64, 0xb9a3, 0x4cf8, 0x80, 0x11, 0x5b, 0x86, 0xc9, 0x40, 0xe7, 0xb7 );
4163 DEFINE_GUID( FILE_TYPE_NOTIFICATION_GUID_CRASHDUMP_FILE, 0x9d453eb7, 0xd2a6, 0x4dbd, 0xa2, 0xe3, 0xfb, 0xd0, 0xed, 0x91, 0x09, 0xa9 );
4164
4165 #ifndef _VIRTUAL_STORAGE_TYPE_DEFINED
4166 #define _VIRTUAL_STORAGE_TYPE_DEFINED
4167 typedef struct _VIRTUAL_STORAGE_TYPE {
4168 ULONG DeviceId;
4169 GUID VendorId;
4170 } VIRTUAL_STORAGE_TYPE, *PVIRTUAL_STORAGE_TYPE;
4171 #endif
4172
4173 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST {
4174 ULONG RequestLevel;
4175 ULONG RequestFlags;
4176 } STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST, *PSTORAGE_QUERY_DEPENDENT_VOLUME_REQUEST;
4177
4178 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_HOST_VOLUMES 0x1
4179 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_GUEST_VOLUMES 0x2
4180
4181 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY {
4182 ULONG EntryLength;
4183 ULONG DependencyTypeFlags;
4184 ULONG ProviderSpecificFlags;
4185 VIRTUAL_STORAGE_TYPE VirtualStorageType;
4186 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY;
4187
4188 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY {
4189 ULONG EntryLength;
4190 ULONG DependencyTypeFlags;
4191 ULONG ProviderSpecificFlags;
4192 VIRTUAL_STORAGE_TYPE VirtualStorageType;
4193 ULONG AncestorLevel;
4194 ULONG HostVolumeNameOffset;
4195 ULONG HostVolumeNameSize;
4196 ULONG DependentVolumeNameOffset;
4197 ULONG DependentVolumeNameSize;
4198 ULONG RelativePathOffset;
4199 ULONG RelativePathSize;
4200 ULONG DependentDeviceNameOffset;
4201 ULONG DependentDeviceNameSize;
4202 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY;
4203
4204 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE {
4205 ULONG ResponseLevel;
4206 ULONG NumberEntries;
4207 union {
4208 STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY Lev1Depends[];
4209 STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY Lev2Depends[];
4210 };
4211 } STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE, *PSTORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE;
4212
4213 #endif /* (_WIN32_WINNT >= 0x0601) */
4214
4215 typedef struct _FILESYSTEM_STATISTICS {
4216 USHORT FileSystemType;
4217 USHORT Version;
4218 ULONG SizeOfCompleteStructure;
4219 ULONG UserFileReads;
4220 ULONG UserFileReadBytes;
4221 ULONG UserDiskReads;
4222 ULONG UserFileWrites;
4223 ULONG UserFileWriteBytes;
4224 ULONG UserDiskWrites;
4225 ULONG MetaDataReads;
4226 ULONG MetaDataReadBytes;
4227 ULONG MetaDataDiskReads;
4228 ULONG MetaDataWrites;
4229 ULONG MetaDataWriteBytes;
4230 ULONG MetaDataDiskWrites;
4231 } FILESYSTEM_STATISTICS, *PFILESYSTEM_STATISTICS;
4232
4233 #define FILESYSTEM_STATISTICS_TYPE_NTFS 1
4234 #define FILESYSTEM_STATISTICS_TYPE_FAT 2
4235 #define FILESYSTEM_STATISTICS_TYPE_EXFAT 3
4236
4237 typedef struct _FAT_STATISTICS {
4238 ULONG CreateHits;
4239 ULONG SuccessfulCreates;
4240 ULONG FailedCreates;
4241 ULONG NonCachedReads;
4242 ULONG NonCachedReadBytes;
4243 ULONG NonCachedWrites;
4244 ULONG NonCachedWriteBytes;
4245 ULONG NonCachedDiskReads;
4246 ULONG NonCachedDiskWrites;
4247 } FAT_STATISTICS, *PFAT_STATISTICS;
4248
4249 typedef struct _EXFAT_STATISTICS {
4250 ULONG CreateHits;
4251 ULONG SuccessfulCreates;
4252 ULONG FailedCreates;
4253 ULONG NonCachedReads;
4254 ULONG NonCachedReadBytes;
4255 ULONG NonCachedWrites;
4256 ULONG NonCachedWriteBytes;
4257 ULONG NonCachedDiskReads;
4258 ULONG NonCachedDiskWrites;
4259 } EXFAT_STATISTICS, *PEXFAT_STATISTICS;
4260
4261 typedef struct _NTFS_STATISTICS {
4262 ULONG LogFileFullExceptions;
4263 ULONG OtherExceptions;
4264 ULONG MftReads;
4265 ULONG MftReadBytes;
4266 ULONG MftWrites;
4267 ULONG MftWriteBytes;
4268 struct {
4269 USHORT Write;
4270 USHORT Create;
4271 USHORT SetInfo;
4272 USHORT Flush;
4273 } MftWritesUserLevel;
4274 USHORT MftWritesFlushForLogFileFull;
4275 USHORT MftWritesLazyWriter;
4276 USHORT MftWritesUserRequest;
4277 ULONG Mft2Writes;
4278 ULONG Mft2WriteBytes;
4279 struct {
4280 USHORT Write;
4281 USHORT Create;
4282 USHORT SetInfo;
4283 USHORT Flush;
4284 } Mft2WritesUserLevel;
4285 USHORT Mft2WritesFlushForLogFileFull;
4286 USHORT Mft2WritesLazyWriter;
4287 USHORT Mft2WritesUserRequest;
4288 ULONG RootIndexReads;
4289 ULONG RootIndexReadBytes;
4290 ULONG RootIndexWrites;
4291 ULONG RootIndexWriteBytes;
4292 ULONG BitmapReads;
4293 ULONG BitmapReadBytes;
4294 ULONG BitmapWrites;
4295 ULONG BitmapWriteBytes;
4296 USHORT BitmapWritesFlushForLogFileFull;
4297 USHORT BitmapWritesLazyWriter;
4298 USHORT BitmapWritesUserRequest;
4299 struct {
4300 USHORT Write;
4301 USHORT Create;
4302 USHORT SetInfo;
4303 } BitmapWritesUserLevel;
4304 ULONG MftBitmapReads;
4305 ULONG MftBitmapReadBytes;
4306 ULONG MftBitmapWrites;
4307 ULONG MftBitmapWriteBytes;
4308 USHORT MftBitmapWritesFlushForLogFileFull;
4309 USHORT MftBitmapWritesLazyWriter;
4310 USHORT MftBitmapWritesUserRequest;
4311 struct {
4312 USHORT Write;
4313 USHORT Create;
4314 USHORT SetInfo;
4315 USHORT Flush;
4316 } MftBitmapWritesUserLevel;
4317 ULONG UserIndexReads;
4318 ULONG UserIndexReadBytes;
4319 ULONG UserIndexWrites;
4320 ULONG UserIndexWriteBytes;
4321 ULONG LogFileReads;
4322 ULONG LogFileReadBytes;
4323 ULONG LogFileWrites;
4324 ULONG LogFileWriteBytes;
4325 struct {
4326 ULONG Calls;
4327 ULONG Clusters;
4328 ULONG Hints;
4329 ULONG RunsReturned;
4330 ULONG HintsHonored;
4331 ULONG HintsClusters;
4332 ULONG Cache;
4333 ULONG CacheClusters;
4334 ULONG CacheMiss;
4335 ULONG CacheMissClusters;
4336 } Allocate;
4337 } NTFS_STATISTICS, *PNTFS_STATISTICS;
4338
4339 #endif // _FILESYSTEMFSCTL_
4340
4341 #define SYMLINK_FLAG_RELATIVE 1
4342
4343 typedef struct _REPARSE_DATA_BUFFER {
4344 ULONG ReparseTag;
4345 USHORT ReparseDataLength;
4346 USHORT Reserved;
4347 __GNU_EXTENSION union {
4348 struct {
4349 USHORT SubstituteNameOffset;
4350 USHORT SubstituteNameLength;
4351 USHORT PrintNameOffset;
4352 USHORT PrintNameLength;
4353 ULONG Flags;
4354 WCHAR PathBuffer[1];
4355 } SymbolicLinkReparseBuffer;
4356 struct {
4357 USHORT SubstituteNameOffset;
4358 USHORT SubstituteNameLength;
4359 USHORT PrintNameOffset;
4360 USHORT PrintNameLength;
4361 WCHAR PathBuffer[1];
4362 } MountPointReparseBuffer;
4363 struct {
4364 UCHAR DataBuffer[1];
4365 } GenericReparseBuffer;
4366 };
4367 } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
4368
4369 #define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
4370
4371 typedef struct _REPARSE_GUID_DATA_BUFFER {
4372 ULONG ReparseTag;
4373 USHORT ReparseDataLength;
4374 USHORT Reserved;
4375 GUID ReparseGuid;
4376 struct {
4377 UCHAR DataBuffer[1];
4378 } GenericReparseBuffer;
4379 } REPARSE_GUID_DATA_BUFFER, *PREPARSE_GUID_DATA_BUFFER;
4380
4381 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
4382
4383 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 )
4384
4385 /* Reserved reparse tags */
4386 #define IO_REPARSE_TAG_RESERVED_ZERO (0)
4387 #define IO_REPARSE_TAG_RESERVED_ONE (1)
4388 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
4389
4390 #define IsReparseTagMicrosoft(_tag) (((_tag) & 0x80000000))
4391 #define IsReparseTagNameSurrogate(_tag) (((_tag) & 0x20000000))
4392
4393 #define IO_REPARSE_TAG_VALID_VALUES (0xF000FFFF)
4394
4395 #define IsReparseTagValid(tag) ( \
4396 !((tag) & ~IO_REPARSE_TAG_VALID_VALUES) && \
4397 ((tag) > IO_REPARSE_TAG_RESERVED_RANGE) \
4398 )
4399
4400 /* MicroSoft reparse point tags */
4401 #define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
4402 #define IO_REPARSE_TAG_HSM (0xC0000004L)
4403 #define IO_REPARSE_TAG_DRIVE_EXTENDER (0x80000005L)
4404 #define IO_REPARSE_TAG_HSM2 (0x80000006L)
4405 #define IO_REPARSE_TAG_SIS (0x80000007L)
4406 #define IO_REPARSE_TAG_WIM (0x80000008L)
4407 #define IO_REPARSE_TAG_CSV (0x80000009L)
4408 #define IO_REPARSE_TAG_DFS (0x8000000AL)
4409 #define IO_REPARSE_TAG_FILTER_MANAGER (0x8000000BL)
4410 #define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
4411 #define IO_REPARSE_TAG_IIS_CACHE (0xA0000010L)
4412 #define IO_REPARSE_TAG_DFSR (0x80000012L)
4413
4414 #pragma pack(4)
4415 typedef struct _REPARSE_INDEX_KEY {
4416 ULONG FileReparseTag;
4417 LARGE_INTEGER FileId;
4418 } REPARSE_INDEX_KEY, *PREPARSE_INDEX_KEY;
4419 #pragma pack()
4420
4421 #define FSCTL_LMR_GET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,58,METHOD_BUFFERED,FILE_ANY_ACCESS)
4422 #define FSCTL_LMR_SET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,59,METHOD_BUFFERED,FILE_ANY_ACCESS)
4423 #define IOCTL_LMR_ARE_FILE_OBJECTS_ON_SAME_SERVER CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS)
4424
4425 #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
4426 #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
4427 #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
4428 #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
4429 #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
4430 #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
4431 #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
4432 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
4433 #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
4434 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
4435 #define FSCTL_PIPE_GET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
4436 #define FSCTL_PIPE_SET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
4437 #define FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
4438 #define FSCTL_PIPE_SET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
4439 #define FSCTL_PIPE_GET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
4440 #define FSCTL_PIPE_SET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
4441 #define FSCTL_PIPE_FLUSH CTL_CODE(FILE_DEVICE_NAMED_PIPE, 16, METHOD_BUFFERED, FILE_WRITE_DATA)
4442
4443 #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
4444 #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
4445 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
4446 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
4447
4448 #define FILE_PIPE_READ_DATA 0x00000000
4449 #define FILE_PIPE_WRITE_SPACE 0x00000001
4450
4451 typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER {
4452 HANDLE EventHandle;
4453 ULONG KeyValue;
4454 } FILE_PIPE_ASSIGN_EVENT_BUFFER, *PFILE_PIPE_ASSIGN_EVENT_BUFFER;
4455
4456 typedef struct _FILE_PIPE_EVENT_BUFFER {
4457 ULONG NamedPipeState;
4458 ULONG EntryType;
4459 ULONG ByteCount;
4460 ULONG KeyValue;
4461 ULONG NumberRequests;
4462 } FILE_PIPE_EVENT_BUFFER, *PFILE_PIPE_EVENT_BUFFER;
4463
4464 typedef struct _FILE_PIPE_PEEK_BUFFER {
4465 ULONG NamedPipeState;
4466 ULONG ReadDataAvailable;
4467 ULONG NumberOfMessages;
4468 ULONG MessageLength;
4469 CHAR Data[1];
4470 } FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
4471
4472 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER {
4473 LARGE_INTEGER Timeout;
4474 ULONG NameLength;
4475 BOOLEAN TimeoutSpecified;
4476 WCHAR Name[1];
4477 } FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
4478
4479 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER {
4480 #if !defined(BUILD_WOW6432)
4481 PVOID ClientSession;
4482 PVOID ClientProcess;
4483 #else
4484 ULONGLONG ClientSession;
4485 ULONGLONG ClientProcess;
4486 #endif
4487 } FILE_PIPE_CLIENT_PROCESS_BUFFER, *PFILE_PIPE_CLIENT_PROCESS_BUFFER;
4488
4489 #define FILE_PIPE_COMPUTER_NAME_LENGTH 15
4490
4491 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER_EX {
4492 #if !defined(BUILD_WOW6432)
4493 PVOID ClientSession;
4494 PVOID ClientProcess;
4495 #else
4496 ULONGLONG ClientSession;
4497 ULONGLONG ClientProcess;
4498 #endif
4499 USHORT ClientComputerNameLength;
4500 WCHAR ClientComputerBuffer[FILE_PIPE_COMPUTER_NAME_LENGTH+1];
4501 } FILE_PIPE_CLIENT_PROCESS_BUFFER_EX, *PFILE_PIPE_CLIENT_PROCESS_BUFFER_EX;
4502
4503 #define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
4504
4505 typedef enum _LINK_TRACKING_INFORMATION_TYPE {
4506 NtfsLinkTrackingInformation,
4507 DfsLinkTrackingInformation
4508 } LINK_TRACKING_INFORMATION_TYPE, *PLINK_TRACKING_INFORMATION_TYPE;
4509
4510 typedef struct _LINK_TRACKING_INFORMATION {
4511 LINK_TRACKING_INFORMATION_TYPE Type;
4512 UCHAR VolumeId[16];
4513 } LINK_TRACKING_INFORMATION, *PLINK_TRACKING_INFORMATION;
4514
4515 typedef struct _REMOTE_LINK_TRACKING_INFORMATION {
4516 PVOID TargetFileObject;
4517 ULONG TargetLinkTrackingInformationLength;
4518 UCHAR TargetLinkTrackingInformationBuffer[1];
4519 } REMOTE_LINK_TRACKING_INFORMATION, *PREMOTE_LINK_TRACKING_INFORMATION;
4520
4521 typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION {
4522 ULONG Attributes;
4523 ACCESS_MASK GrantedAccess;
4524 ULONG HandleCount;
4525 ULONG PointerCount;
4526 ULONG Reserved[10];
4527 } PUBLIC_OBJECT_BASIC_INFORMATION, *PPUBLIC_OBJECT_BASIC_INFORMATION;
4528
4529 typedef struct _PUBLIC_OBJECT_TYPE_INFORMATION {
4530 UNICODE_STRING TypeName;
4531 ULONG Reserved [22];
4532 } PUBLIC_OBJECT_TYPE_INFORMATION, *PPUBLIC_OBJECT_TYPE_INFORMATION;
4533
4534 typedef struct _SECURITY_CLIENT_CONTEXT {
4535 SECURITY_QUALITY_OF_SERVICE SecurityQos;
4536 PACCESS_TOKEN ClientToken;
4537 BOOLEAN DirectlyAccessClientToken;
4538 BOOLEAN DirectAccessEffectiveOnly;
4539 BOOLEAN ServerIsRemote;
4540 TOKEN_CONTROL ClientTokenControl;
4541 } SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT;
4542
4543 #define SYSTEM_PAGE_PRIORITY_BITS 3
4544 #define SYSTEM_PAGE_PRIORITY_LEVELS (1 << SYSTEM_PAGE_PRIORITY_BITS)
4545
4546 typedef struct _KAPC_STATE {
4547 LIST_ENTRY ApcListHead[MaximumMode];
4548 PKPROCESS Process;
4549 BOOLEAN KernelApcInProgress;
4550 BOOLEAN KernelApcPending;
4551 BOOLEAN UserApcPending;
4552 } KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE;
4553
4554 #define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
4555
4556 #define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
4557
4558 typedef struct _KQUEUE {
4559 DISPATCHER_HEADER Header;
4560 LIST_ENTRY EntryListHead;
4561 volatile ULONG CurrentCount;
4562 ULONG MaximumCount;
4563 LIST_ENTRY ThreadListHead;
4564 } KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
4565
4566 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4567
4568 NTKERNELAPI
4569 VOID
4570 NTAPI
4571 KeInitializeMutant(
4572 OUT PRKMUTANT Mutant,
4573 IN BOOLEAN InitialOwner);
4574
4575 NTKERNELAPI
4576 LONG
4577 NTAPI
4578 KeReadStateMutant(
4579 IN PRKMUTANT Mutant);
4580
4581 NTKERNELAPI
4582 LONG
4583 NTAPI
4584 KeReleaseMutant(
4585 IN OUT PRKMUTANT Mutant,
4586 IN KPRIORITY Increment,
4587 IN BOOLEAN Abandoned,
4588 IN BOOLEAN Wait);
4589
4590 NTKERNELAPI
4591 VOID
4592 NTAPI
4593 KeInitializeQueue(
4594 OUT PRKQUEUE Queue,
4595 IN ULONG Count);
4596
4597 NTKERNELAPI
4598 LONG
4599 NTAPI
4600 KeReadStateQueue(
4601 IN PRKQUEUE Queue);
4602
4603 NTKERNELAPI
4604 LONG
4605 NTAPI
4606 KeInsertQueue(
4607 IN OUT PRKQUEUE Queue,
4608 IN OUT PLIST_ENTRY Entry);
4609
4610 NTKERNELAPI
4611 LONG
4612 NTAPI
4613 KeInsertHeadQueue(
4614 IN OUT PRKQUEUE Queue,
4615 IN OUT PLIST_ENTRY Entry);
4616
4617 NTKERNELAPI
4618 PLIST_ENTRY
4619 NTAPI
4620 KeRemoveQueue(
4621 IN OUT PRKQUEUE Queue,
4622 IN KPROCESSOR_MODE WaitMode,
4623 IN PLARGE_INTEGER Timeout OPTIONAL);
4624
4625 NTKERNELAPI
4626 VOID
4627 NTAPI
4628 KeAttachProcess(
4629 IN OUT PKPROCESS Process);
4630
4631 NTKERNELAPI
4632 VOID
4633 NTAPI
4634 KeDetachProcess(
4635 VOID);
4636
4637 NTKERNELAPI
4638 PLIST_ENTRY
4639 NTAPI
4640 KeRundownQueue(
4641 IN OUT PRKQUEUE Queue);
4642
4643 NTKERNELAPI
4644 VOID
4645 NTAPI
4646 KeStackAttachProcess(
4647 IN OUT PKPROCESS Process,
4648 OUT PKAPC_STATE ApcState);
4649
4650 NTKERNELAPI
4651 VOID
4652 NTAPI
4653 KeUnstackDetachProcess(
4654 IN PKAPC_STATE ApcState);
4655
4656 NTKERNELAPI
4657 UCHAR
4658 NTAPI
4659 KeSetIdealProcessorThread(
4660 IN OUT PKTHREAD Thread,
4661 IN UCHAR Processor);
4662
4663 NTKERNELAPI
4664 BOOLEAN
4665 NTAPI
4666 KeSetKernelStackSwapEnable(
4667 IN BOOLEAN Enable);
4668
4669 #if defined(_X86_)
4670 NTHALAPI
4671 KIRQL
4672 FASTCALL
4673 KeAcquireSpinLockRaiseToSynch(
4674 IN OUT PKSPIN_LOCK SpinLock);
4675 #else
4676 NTKERNELAPI
4677 KIRQL
4678 KeAcquireSpinLockRaiseToSynch(
4679 IN OUT PKSPIN_LOCK SpinLock);
4680 #endif
4681
4682 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4683
4684 #if (NTDDI_VERSION >= NTDDI_WINXP)
4685
4686 _DECL_HAL_KE_IMPORT
4687 KIRQL
4688 FASTCALL
4689 KeAcquireQueuedSpinLock(
4690 IN OUT KSPIN_LOCK_QUEUE_NUMBER Number);
4691
4692 _DECL_HAL_KE_IMPORT
4693 VOID
4694 FASTCALL
4695 KeReleaseQueuedSpinLock(
4696 IN OUT KSPIN_LOCK_QUEUE_NUMBER Number,
4697 IN KIRQL OldIrql);
4698
4699 _DECL_HAL_KE_IMPORT
4700 LOGICAL
4701 FASTCALL
4702 KeTryToAcquireQueuedSpinLock(
4703 IN KSPIN_LOCK_QUEUE_NUMBER Number,
4704 OUT PKIRQL OldIrql);
4705
4706 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4707
4708 #if (NTDDI_VERSION >= NTDDI_VISTA)
4709
4710 NTKERNELAPI
4711 VOID
4712 KeQueryOwnerMutant(
4713 IN PKMUTANT Mutant,
4714 OUT PCLIENT_ID ClientId);
4715
4716 NTKERNELAPI
4717 ULONG
4718 KeRemoveQueueEx (
4719 IN OUT PKQUEUE Queue,
4720 IN KPROCESSOR_MODE WaitMode,
4721 IN BOOLEAN Alertable,
4722 IN PLARGE_INTEGER Timeout OPTIONAL,
4723 OUT PLIST_ENTRY *EntryArray,
4724 IN ULONG Count);
4725
4726 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4727
4728 #define INVALID_PROCESSOR_INDEX 0xffffffff
4729
4730 NTSTATUS
4731 NTAPI
4732 KeGetProcessorNumberFromIndex(
4733 IN ULONG ProcIndex,
4734 OUT PPROCESSOR_NUMBER ProcNumber);
4735
4736 ULONG
4737 NTAPI
4738 KeGetProcessorIndexFromNumber(
4739 IN PPROCESSOR_NUMBER ProcNumber);
4740
4741 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4742
4743 NTKERNELAPI
4744 SIZE_T
4745 NTAPI
4746 ExQueryPoolBlockSize(
4747 IN PVOID PoolBlock,
4748 OUT PBOOLEAN QuotaCharged);
4749
4750 VOID
4751 ExAdjustLookasideDepth(
4752 VOID);
4753
4754 NTKERNELAPI
4755 VOID
4756 NTAPI
4757 ExDisableResourceBoostLite(
4758 IN PERESOURCE Resource);
4759
4760 #endif
4761
4762 #define ExDisableResourceBoost ExDisableResourceBoostLite
4763
4764 #define EX_PUSH_LOCK ULONG_PTR
4765 #define PEX_PUSH_LOCK PULONG_PTR
4766
4767 VOID
4768 ExInitializePushLock (
4769 OUT PEX_PUSH_LOCK PushLock);
4770
4771 #if (NTDDI_VERSION >= NTDDI_WINXP)
4772 PSLIST_ENTRY
4773 FASTCALL
4774 InterlockedPushListSList(
4775 IN OUT PSLIST_HEADER ListHead,
4776 IN OUT PSLIST_ENTRY List,
4777 IN OUT PSLIST_ENTRY ListEnd,
4778 IN ULONG Count);
4779
4780 #endif
4781
4782 /* #if !defined(_X86AMD64_) FIXME : WHAT ?! */
4783 #if defined(_WIN64)
4784
4785 C_ASSERT(sizeof(ERESOURCE) == 0x68);
4786 C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x18);
4787 C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x1a);
4788
4789 #else
4790
4791 C_ASSERT(sizeof(ERESOURCE) == 0x38);
4792 C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x0c);
4793 C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x0e);
4794
4795 #endif
4796 /* #endif */
4797
4798 #define TOKEN_HAS_TRAVERSE_PRIVILEGE 0x0001
4799 #define TOKEN_HAS_BACKUP_PRIVILEGE 0x0002
4800 #define TOKEN_HAS_RESTORE_PRIVILEGE 0x0004
4801 #define TOKEN_WRITE_RESTRICTED 0x0008
4802 #define TOKEN_IS_RESTRICTED 0x0010
4803 #define TOKEN_SESSION_NOT_REFERENCED 0x0020
4804 #define TOKEN_SANDBOX_INERT 0x0040
4805 #define TOKEN_HAS_IMPERSONATE_PRIVILEGE 0x0080
4806 #define SE_BACKUP_PRIVILEGES_CHECKED 0x0100
4807 #define TOKEN_VIRTUALIZE_ALLOWED 0x0200
4808 #define TOKEN_VIRTUALIZE_ENABLED 0x0400
4809 #define TOKEN_IS_FILTERED 0x0800
4810 #define TOKEN_UIACCESS 0x1000
4811 #define TOKEN_NOT_LOW 0x2000
4812
4813 typedef struct _SE_EXPORTS {
4814 LUID SeCreateTokenPrivilege;
4815 LUID SeAssignPrimaryTokenPrivilege;
4816 LUID SeLockMemoryPrivilege;
4817 LUID SeIncreaseQuotaPrivilege;
4818 LUID SeUnsolicitedInputPrivilege;
4819 LUID SeTcbPrivilege;
4820 LUID SeSecurityPrivilege;
4821 LUID SeTakeOwnershipPrivilege;
4822 LUID SeLoadDriverPrivilege;
4823 LUID SeCreatePagefilePrivilege;
4824 LUID SeIncreaseBasePriorityPrivilege;
4825 LUID SeSystemProfilePrivilege;
4826 LUID SeSystemtimePrivilege;
4827 LUID SeProfileSingleProcessPrivilege;
4828 LUID SeCreatePermanentPrivilege;
4829 LUID SeBackupPrivilege;
4830 LUID SeRestorePrivilege;
4831 LUID SeShutdownPrivilege;
4832 LUID SeDebugPrivilege;
4833 LUID SeAuditPrivilege;
4834 LUID SeSystemEnvironmentPrivilege;
4835 LUID SeChangeNotifyPrivilege;
4836 LUID SeRemoteShutdownPrivilege;
4837 PSID SeNullSid;
4838 PSID SeWorldSid;
4839 PSID SeLocalSid;
4840 PSID SeCreatorOwnerSid;
4841 PSID SeCreatorGroupSid;
4842 PSID SeNtAuthoritySid;
4843 PSID SeDialupSid;
4844 PSID SeNetworkSid;
4845 PSID SeBatchSid;
4846 PSID SeInteractiveSid;
4847 PSID SeLocalSystemSid;
4848 PSID SeAliasAdminsSid;
4849 PSID SeAliasUsersSid;
4850 PSID SeAliasGuestsSid;
4851 PSID SeAliasPowerUsersSid;
4852 PSID SeAliasAccountOpsSid;
4853 PSID SeAliasSystemOpsSid;
4854 PSID SeAliasPrintOpsSid;
4855 PSID SeAliasBackupOpsSid;
4856 PSID SeAuthenticatedUsersSid;
4857 PSID SeRestrictedSid;
4858 PSID SeAnonymousLogonSid;
4859 LUID SeUndockPrivilege;
4860 LUID SeSyncAgentPrivilege;
4861 LUID SeEnableDelegationPrivilege;
4862 PSID SeLocalServiceSid;
4863 PSID SeNetworkServiceSid;
4864 LUID SeManageVolumePrivilege;
4865 LUID SeImpersonatePrivilege;
4866 LUID SeCreateGlobalPrivilege;
4867 LUID SeTrustedCredManAccessPrivilege;
4868 LUID SeRelabelPrivilege;
4869 LUID SeIncreaseWorkingSetPrivilege;
4870 LUID SeTimeZonePrivilege;
4871 LUID SeCreateSymbolicLinkPrivilege;
4872 PSID SeIUserSid;
4873 PSID SeUntrustedMandatorySid;
4874 PSID SeLowMandatorySid;
4875 PSID SeMediumMandatorySid;
4876 PSID SeHighMandatorySid;
4877 PSID SeSystemMandatorySid;
4878 PSID SeOwnerRightsSid;
4879 } SE_EXPORTS, *PSE_EXPORTS;
4880
4881 typedef NTSTATUS
4882 (NTAPI *PSE_LOGON_SESSION_TERMINATED_ROUTINE)(
4883 IN PLUID LogonId);
4884
4885 #define SeLengthSid( Sid ) \
4886 (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
4887
4888 #define SeDeleteClientSecurity(C) { \
4889 if (SeTokenType((C)->ClientToken) == TokenPrimary) { \
4890 PsDereferencePrimaryToken( (C)->ClientToken ); \
4891 } else { \
4892 PsDereferenceImpersonationToken( (C)->ClientToken ); \
4893 } \
4894 }
4895
4896 #define SeStopImpersonatingClient() PsRevertToSelf()
4897
4898 #define SeQuerySubjectContextToken( SubjectContext ) \
4899 ( ARGUMENT_PRESENT( \
4900 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken \
4901 ) ? \
4902 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken : \
4903 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
4904
4905 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4906
4907 NTKERNELAPI
4908 VOID
4909 NTAPI
4910 SeReleaseSubjectContext(
4911 IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
4912
4913 NTKERNELAPI
4914 BOOLEAN
4915 NTAPI
4916 SePrivilegeCheck(
4917 IN OUT PPRIVILEGE_SET RequiredPrivileges,
4918 IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
4919 IN KPROCESSOR_MODE AccessMode);
4920
4921 NTKERNELAPI
4922 VOID
4923 NTAPI
4924 SeOpenObjectAuditAlarm(
4925 IN PUNICODE_STRING ObjectTypeName,
4926 IN PVOID Object OPTIONAL,
4927 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
4928 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
4929 IN PACCESS_STATE AccessState,
4930 IN BOOLEAN ObjectCreated,
4931 IN BOOLEAN AccessGranted,
4932 IN KPROCESSOR_MODE AccessMode,
4933 OUT PBOOLEAN GenerateOnClose);
4934
4935 NTKERNELAPI
4936 VOID
4937 NTAPI
4938 SeOpenObjectForDeleteAuditAlarm(
4939 IN PUNICODE_STRING ObjectTypeName,
4940 IN PVOID Object OPTIONAL,
4941 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
4942 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
4943 IN PACCESS_STATE AccessState,
4944 IN BOOLEAN ObjectCreated,
4945 IN BOOLEAN AccessGranted,
4946 IN KPROCESSOR_MODE AccessMode,
4947 OUT PBOOLEAN GenerateOnClose);
4948
4949 NTKERNELAPI
4950 VOID
4951 NTAPI
4952 SeDeleteObjectAuditAlarm(
4953 IN PVOID Object,
4954 IN HANDLE Handle);
4955
4956 NTKERNELAPI
4957 TOKEN_TYPE
4958 NTAPI
4959 SeTokenType(
4960 IN PACCESS_TOKEN Token);
4961
4962 NTKERNELAPI
4963 BOOLEAN
4964 NTAPI
4965 SeTokenIsAdmin(
4966 IN PACCESS_TOKEN Token);
4967
4968 NTKERNELAPI
4969 BOOLEAN
4970 NTAPI
4971 SeTokenIsRestricted(
4972 IN PACCESS_TOKEN Token);
4973
4974 NTKERNELAPI
4975 NTSTATUS
4976 NTAPI
4977 SeQueryAuthenticationIdToken(
4978 IN PACCESS_TOKEN Token,
4979 OUT PLUID AuthenticationId);
4980
4981 NTKERNELAPI
4982 NTSTATUS
4983 NTAPI
4984 SeQuerySessionIdToken(
4985 IN PACCESS_TOKEN Token,
4986 OUT PULONG SessionId);
4987
4988 NTKERNELAPI
4989 NTSTATUS
4990 NTAPI
4991 SeCreateClientSecurity(
4992 IN PETHREAD ClientThread,
4993 IN PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos,
4994 IN BOOLEAN RemoteSession,
4995 OUT PSECURITY_CLIENT_CONTEXT ClientContext);
4996
4997 NTKERNELAPI
4998 VOID
4999 NTAPI
5000 SeImpersonateClient(
5001 IN PSECURITY_CLIENT_CONTEXT ClientContext,
5002 IN PETHREAD ServerThread OPTIONAL);
5003
5004 NTKERNELAPI
5005 NTSTATUS
5006 NTAPI
5007 SeImpersonateClientEx(
5008 IN PSECURITY_CLIENT_CONTEXT ClientContext,
5009 IN PETHREAD ServerThread OPTIONAL);
5010
5011 NTKERNELAPI
5012 NTSTATUS
5013 NTAPI
5014 SeCreateClientSecurityFromSubjectContext(
5015 IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
5016 IN PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos,
5017 IN BOOLEAN ServerIsRemote,
5018 OUT PSECURITY_CLIENT_CONTEXT ClientContext);
5019
5020 NTKERNELAPI
5021 NTSTATUS
5022 NTAPI
5023 SeQuerySecurityDescriptorInfo(
5024 IN PSECURITY_INFORMATION SecurityInformation,
5025 OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
5026 IN OUT PULONG Length,
5027 IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor);
5028
5029 NTKERNELAPI
5030 NTSTATUS
5031 NTAPI
5032 SeSetSecurityDescriptorInfo(
5033 IN PVOID Object OPTIONAL,
5034 IN PSECURITY_INFORMATION SecurityInformation,
5035 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5036 IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
5037 IN POOL_TYPE PoolType,
5038 IN PGENERIC_MAPPING GenericMapping);
5039
5040 NTKERNELAPI
5041 NTSTATUS
5042 NTAPI
5043 SeSetSecurityDescriptorInfoEx(
5044 IN PVOID Object OPTIONAL,
5045 IN PSECURITY_INFORMATION SecurityInformation,
5046 IN PSECURITY_DESCRIPTOR ModificationDescriptor,
5047 IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
5048 IN ULONG AutoInheritFlags,
5049 IN POOL_TYPE PoolType,
5050 IN PGENERIC_MAPPING GenericMapping);
5051
5052 NTKERNELAPI
5053 NTSTATUS
5054 NTAPI
5055 SeAppendPrivileges(
5056 IN OUT PACCESS_STATE AccessState,
5057 IN PPRIVILEGE_SET Privileges);
5058
5059 NTKERNELAPI
5060 BOOLEAN
5061 NTAPI
5062 SeAuditingFileEvents(
5063 IN BOOLEAN AccessGranted,
5064 IN PSECURITY_DESCRIPTOR SecurityDescriptor);
5065
5066 NTKERNELAPI
5067 BOOLEAN
5068 NTAPI
5069 SeAuditingFileOrGlobalEvents(
5070 IN BOOLEAN AccessGranted,
5071 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5072 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext);
5073
5074 VOID
5075 NTAPI
5076 SeSetAccessStateGenericMapping(
5077 IN OUT PACCESS_STATE AccessState,
5078 IN PGENERIC_MAPPING GenericMapping);
5079
5080 NTKERNELAPI
5081 NTSTATUS
5082 NTAPI
5083 SeRegisterLogonSessionTerminatedRoutine(
5084 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine);
5085
5086 NTKERNELAPI
5087 NTSTATUS
5088 NTAPI
5089 SeUnregisterLogonSessionTerminatedRoutine(
5090 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine);
5091
5092 NTKERNELAPI
5093 NTSTATUS
5094 NTAPI
5095 SeMarkLogonSessionForTerminationNotification(
5096 IN PLUID LogonId);
5097
5098 NTKERNELAPI
5099 NTSTATUS
5100 NTAPI
5101 SeQueryInformationToken(
5102 IN PACCESS_TOKEN Token,
5103 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
5104 OUT PVOID *TokenInformation);
5105
5106 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5107
5108 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
5109 NTKERNELAPI
5110 BOOLEAN
5111 NTAPI
5112 SeAuditingHardLinkEvents(
5113 IN BOOLEAN AccessGranted,
5114 IN PSECURITY_DESCRIPTOR SecurityDescriptor);
5115 #endif
5116
5117 #if (NTDDI_VERSION >= NTDDI_WINXP)
5118
5119 NTKERNELAPI
5120 NTSTATUS
5121 NTAPI
5122 SeFilterToken(
5123 IN PACCESS_TOKEN ExistingToken,
5124 IN ULONG Flags,
5125 IN PTOKEN_GROUPS SidsToDisable OPTIONAL,
5126 IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL,
5127 IN PTOKEN_GROUPS RestrictedSids OPTIONAL,
5128 OUT PACCESS_TOKEN *FilteredToken);
5129
5130 NTKERNELAPI
5131 VOID
5132 NTAPI
5133 SeAuditHardLinkCreation(
5134 IN PUNICODE_STRING FileName,
5135 IN PUNICODE_STRING LinkName,
5136 IN BOOLEAN bSuccess);
5137
5138 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5139
5140 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
5141
5142 NTKERNELAPI
5143 BOOLEAN
5144 NTAPI
5145 SeAuditingFileEventsWithContext(
5146 IN BOOLEAN AccessGranted,
5147 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5148 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL);
5149
5150 NTKERNELAPI
5151 BOOLEAN
5152 NTAPI
5153 SeAuditingHardLinkEventsWithContext(
5154 IN BOOLEAN AccessGranted,
5155 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5156 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL);
5157
5158 #endif
5159
5160 #if (NTDDI_VERSION >= NTDDI_VISTA)
5161
5162 NTKERNELAPI
5163 VOID
5164 NTAPI
5165 SeOpenObjectAuditAlarmWithTransaction(
5166 IN PUNICODE_STRING ObjectTypeName,
5167 IN PVOID Object OPTIONAL,
5168 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
5169 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5170 IN PACCESS_STATE AccessState,
5171 IN BOOLEAN ObjectCreated,
5172 IN BOOLEAN AccessGranted,
5173 IN KPROCESSOR_MODE AccessMode,
5174 IN GUID *TransactionId OPTIONAL,
5175 OUT PBOOLEAN GenerateOnClose);
5176
5177 NTKERNELAPI
5178 VOID
5179 NTAPI
5180 SeOpenObjectForDeleteAuditAlarmWithTransaction(
5181 IN PUNICODE_STRING ObjectTypeName,
5182 IN PVOID Object OPTIONAL,
5183 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
5184 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5185 IN PACCESS_STATE AccessState,
5186 IN BOOLEAN ObjectCreated,
5187 IN BOOLEAN AccessGranted,
5188 IN KPROCESSOR_MODE AccessMode,
5189 IN GUID *TransactionId OPTIONAL,
5190 OUT PBOOLEAN GenerateOnClose);
5191
5192 NTKERNELAPI
5193 VOID
5194 NTAPI
5195 SeExamineSacl(
5196 IN PACL Sacl,
5197 IN PACCESS_TOKEN Token,
5198 IN ACCESS_MASK DesiredAccess,
5199 IN BOOLEAN AccessGranted,
5200 OUT PBOOLEAN GenerateAudit,
5201 OUT PBOOLEAN GenerateAlarm);
5202
5203 NTKERNELAPI
5204 VOID
5205 NTAPI
5206 SeDeleteObjectAuditAlarmWithTransaction(
5207 IN PVOID Object,
5208 IN HANDLE Handle,
5209 IN GUID *TransactionId OPTIONAL);
5210
5211 NTKERNELAPI
5212 VOID
5213 NTAPI
5214 SeQueryTokenIntegrity(
5215 IN PACCESS_TOKEN Token,
5216 IN OUT PSID_AND_ATTRIBUTES IntegritySA);
5217
5218 NTKERNELAPI
5219 NTSTATUS
5220 NTAPI
5221 SeSetSessionIdToken(
5222 IN PACCESS_TOKEN Token,
5223 IN ULONG SessionId);
5224
5225 NTKERNELAPI
5226 VOID
5227 NTAPI
5228 SeAuditHardLinkCreationWithTransaction(
5229 IN PUNICODE_STRING FileName,
5230 IN PUNICODE_STRING LinkName,
5231 IN BOOLEAN bSuccess,
5232 IN GUID *TransactionId OPTIONAL);
5233
5234 NTKERNELAPI
5235 VOID
5236 NTAPI
5237 SeAuditTransactionStateChange(
5238 IN GUID *TransactionId,
5239 IN GUID *ResourceManagerId,
5240 IN ULONG NewTransactionState);
5241
5242 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5243
5244 #if (NTDDI_VERSION >= NTDDI_VISTA || (NTDDI_VERSION >= NTDDI_WINXPSP2 && NTDDI_VERSION < NTDDI_WS03))
5245 NTKERNELAPI
5246 BOOLEAN
5247 NTAPI
5248 SeTokenIsWriteRestricted(
5249 IN PACCESS_TOKEN Token);
5250 #endif
5251
5252 #if (NTDDI_VERSION >= NTDDI_WIN7)
5253
5254 NTKERNELAPI
5255 BOOLEAN
5256 NTAPI
5257 SeAuditingAnyFileEventsWithContext(
5258 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5259 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL);
5260
5261 NTKERNELAPI
5262 VOID
5263 NTAPI
5264 SeExamineGlobalSacl(
5265 IN PUNICODE_STRING ObjectType,
5266 IN PACCESS_TOKEN Token,
5267 IN ACCESS_MASK DesiredAccess,
5268 IN BOOLEAN AccessGranted,
5269 IN OUT PBOOLEAN GenerateAudit,
5270 IN OUT PBOOLEAN GenerateAlarm OPTIONAL);
5271
5272 NTKERNELAPI
5273 VOID
5274 NTAPI
5275 SeMaximumAuditMaskFromGlobalSacl(
5276 IN PUNICODE_STRING ObjectTypeName OPTIONAL,
5277 IN ACCESS_MASK GrantedAccess,
5278 IN PACCESS_TOKEN Token,
5279 IN OUT PACCESS_MASK AuditMask);
5280
5281 #endif
5282
5283 NTSTATUS
5284 NTAPI
5285 SeReportSecurityEventWithSubCategory(
5286 IN ULONG Flags,
5287 IN PUNICODE_STRING SourceName,
5288 IN PSID UserSid OPTIONAL,
5289 IN PSE_ADT_PARAMETER_ARRAY AuditParameters,
5290 IN ULONG AuditSubcategoryId);
5291
5292 BOOLEAN
5293 NTAPI
5294 SeAccessCheckFromState(
5295 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5296 IN PTOKEN_ACCESS_INFORMATION PrimaryTokenInformation,
5297 IN PTOKEN_ACCESS_INFORMATION ClientTokenInformation OPTIONAL,
5298 IN ACCESS_MASK DesiredAccess,
5299 IN ACCESS_MASK PreviouslyGrantedAccess,
5300 OUT PPRIVILEGE_SET *Privileges OPTIONAL,
5301 IN PGENERIC_MAPPING GenericMapping,
5302 IN KPROCESSOR_MODE AccessMode,
5303 OUT PACCESS_MASK GrantedAccess,
5304 OUT PNTSTATUS AccessStatus);
5305
5306 NTKERNELAPI
5307 VOID
5308 NTAPI
5309 SeFreePrivileges(
5310 IN PPRIVILEGE_SET Privileges);
5311
5312 NTSTATUS
5313 NTAPI
5314 SeLocateProcessImageName(
5315 IN OUT PEPROCESS Process,
5316 OUT PUNICODE_STRING *pImageFileName);
5317
5318 extern NTKERNELAPI PSE_EXPORTS SeExports;
5319
5320 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5321
5322 NTKERNELAPI
5323 PACCESS_TOKEN
5324 NTAPI
5325 PsReferenceImpersonationToken(
5326 IN OUT PETHREAD Thread,
5327 OUT PBOOLEAN CopyOnOpen,
5328 OUT PBOOLEAN EffectiveOnly,
5329 OUT PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
5330
5331 NTKERNELAPI
5332 LARGE_INTEGER
5333 NTAPI
5334 PsGetProcessExitTime(
5335 VOID);
5336
5337 NTKERNELAPI
5338 BOOLEAN
5339 NTAPI
5340 PsIsThreadTerminating(
5341 IN PETHREAD Thread);
5342
5343 NTKERNELAPI
5344 NTSTATUS
5345 NTAPI
5346 PsImpersonateClient(
5347 IN OUT PETHREAD Thread,
5348 IN PACCESS_TOKEN Token,
5349 IN BOOLEAN CopyOnOpen,
5350 IN BOOLEAN EffectiveOnly,
5351 IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
5352
5353 NTKERNELAPI
5354 BOOLEAN
5355 NTAPI
5356 PsDisableImpersonation(
5357 IN OUT PETHREAD Thread,
5358 IN OUT PSE_IMPERSONATION_STATE ImpersonationState);
5359
5360 NTKERNELAPI
5361 VOID
5362 NTAPI
5363 PsRestoreImpersonation(
5364 IN PETHREAD Thread,
5365 IN PSE_IMPERSONATION_STATE ImpersonationState);
5366
5367 NTKERNELAPI
5368 VOID
5369 NTAPI
5370 PsRevertToSelf(
5371 VOID);
5372
5373 NTKERNELAPI
5374 VOID
5375 NTAPI
5376 PsChargePoolQuota(
5377 IN PEPROCESS Process,
5378 IN POOL_TYPE PoolType,
5379 IN ULONG_PTR Amount);
5380
5381 NTKERNELAPI
5382 VOID
5383 NTAPI
5384 PsReturnPoolQuota(
5385 IN PEPROCESS Process,
5386 IN POOL_TYPE PoolType,
5387 IN ULONG_PTR Amount);
5388
5389 NTKERNELAPI
5390 NTSTATUS
5391 NTAPI
5392 PsAssignImpersonationToken(
5393 IN PETHREAD Thread,
5394 IN HANDLE Token OPTIONAL);
5395
5396 NTKERNELAPI
5397 HANDLE
5398 NTAPI
5399 PsReferencePrimaryToken(
5400 IN OUT PEPROCESS Process);
5401
5402 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5403
5404 #if (NTDDI_VERSION >= NTDDI_WINXP)
5405
5406 NTKERNELAPI
5407 VOID
5408 NTAPI
5409 PsDereferencePrimaryToken(
5410 IN PACCESS_TOKEN PrimaryToken);
5411
5412 NTKERNELAPI
5413 VOID
5414 NTAPI
5415 PsDereferenceImpersonationToken(
5416 IN PACCESS_TOKEN ImpersonationToken);
5417
5418 NTKERNELAPI
5419 NTSTATUS
5420 NTAPI
5421 PsChargeProcessPoolQuota(
5422 IN PEPROCESS Process,
5423 IN POOL_TYPE PoolType,
5424 IN ULONG_PTR Amount);
5425
5426 NTKERNELAPI
5427 BOOLEAN
5428 NTAPI
5429 PsIsSystemThread(
5430 IN PETHREAD Thread);
5431
5432 #endif
5433
5434 NTKERNELAPI
5435 NTSTATUS
5436 NTAPI
5437 PsLookupProcessByProcessId(
5438 IN HANDLE ProcessId,
5439 OUT PEPROCESS *Process);
5440
5441 NTKERNELAPI
5442 NTSTATUS
5443 NTAPI
5444 PsLookupThreadByThreadId(
5445 IN HANDLE UniqueThreadId,
5446 OUT PETHREAD *Thread);
5447
5448 #define IO_OPEN_PAGING_FILE 0x0002
5449 #define IO_OPEN_TARGET_DIRECTORY 0x0004
5450 #define IO_STOP_ON_SYMLINK 0x0008
5451 #define IO_MM_PAGING_FILE 0x0010
5452
5453 typedef VOID
5454 (NTAPI *PDRIVER_FS_NOTIFICATION) (
5455 IN PDEVICE_OBJECT DeviceObject,
5456 IN BOOLEAN FsActive);
5457
5458 typedef enum _FS_FILTER_SECTION_SYNC_TYPE {
5459 SyncTypeOther = 0,
5460 SyncTypeCreateSection
5461 } FS_FILTER_SECTION_SYNC_TYPE, *PFS_FILTER_SECTION_SYNC_TYPE;
5462
5463 typedef enum _FS_FILTER_STREAM_FO_NOTIFICATION_TYPE {
5464 NotifyTypeCreate = 0,
5465 NotifyTypeRetired
5466 } FS_FILTER_STREAM_FO_NOTIFICATION_TYPE, *PFS_FILTER_STREAM_FO_NOTIFICATION_TYPE;
5467
5468 typedef union _FS_FILTER_PARAMETERS {
5469 struct {
5470 PLARGE_INTEGER EndingOffset;
5471 PERESOURCE *ResourceToRelease;
5472 } AcquireForModifiedPageWriter;
5473 struct {
5474 PERESOURCE ResourceToRelease;
5475 } ReleaseForModifiedPageWriter;
5476 struct {
5477 FS_FILTER_SECTION_SYNC_TYPE SyncType;
5478 ULONG PageProtection;
5479 } AcquireForSectionSynchronization;
5480 struct {
5481 FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType;
5482 BOOLEAN POINTER_ALIGNMENT SafeToRecurse;
5483 } NotifyStreamFileObject;
5484 struct {
5485 PVOID Argument1;
5486 PVOID Argument2;
5487 PVOID Argument3;
5488 PVOID Argument4;
5489 PVOID Argument5;
5490 } Others;
5491 } FS_FILTER_PARAMETERS, *PFS_FILTER_PARAMETERS;
5492
5493 #define FS_FILTER_ACQUIRE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-1
5494 #define FS_FILTER_RELEASE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-2
5495 #define FS_FILTER_ACQUIRE_FOR_MOD_WRITE (UCHAR)-3
5496 #define FS_FILTER_RELEASE_FOR_MOD_WRITE (UCHAR)-4
5497 #define FS_FILTER_ACQUIRE_FOR_CC_FLUSH (UCHAR)-5
5498 #define FS_FILTER_RELEASE_FOR_CC_FLUSH (UCHAR)-6
5499
5500 typedef struct _FS_FILTER_CALLBACK_DATA {
5501 ULONG SizeOfFsFilterCallbackData;
5502 UCHAR Operation;
5503 UCHAR Reserved;
5504 struct _DEVICE_OBJECT *DeviceObject;
5505 struct _FILE_OBJECT *FileObject;
5506 FS_FILTER_PARAMETERS Parameters;
5507 } FS_FILTER_CALLBACK_DATA, *PFS_FILTER_CALLBACK_DATA;
5508
5509 typedef NTSTATUS
5510 (NTAPI *PFS_FILTER_CALLBACK) (
5511 IN PFS_FILTER_CALLBACK_DATA Data,
5512 OUT PVOID *CompletionContext);
5513
5514 typedef VOID
5515 (NTAPI *PFS_FILTER_COMPLETION_CALLBACK) (
5516 IN PFS_FILTER_CALLBACK_DATA Data,
5517 IN NTSTATUS OperationStatus,
5518 IN PVOID CompletionContext);
5519
5520 typedef struct _FS_FILTER_CALLBACKS {
5521 ULONG SizeOfFsFilterCallbacks;
5522 ULONG Reserved;
5523 PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization;
5524 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization;
5525 PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization;
5526 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization;
5527 PFS_FILTER_CALLBACK PreAcquireForCcFlush;
5528 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush;
5529 PFS_FILTER_CALLBACK PreReleaseForCcFlush;
5530 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush;
5531 PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter;
5532 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter;
5533 PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter;
5534 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter;
5535 } FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS;
5536
5537 #if (NTDDI_VERSION >= NTDDI_WINXP)
5538 NTKERNELAPI
5539 NTSTATUS
5540 NTAPI
5541 FsRtlRegisterFileSystemFilterCallbacks(
5542 IN struct _DRIVER_OBJECT *FilterDriverObject,
5543 IN PFS_FILTER_CALLBACKS Callbacks);
5544 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5545
5546 #if (NTDDI_VERSION >= NTDDI_VISTA)
5547 NTKERNELAPI
5548 NTSTATUS
5549 NTAPI
5550 FsRtlNotifyStreamFileObject(
5551 IN struct _FILE_OBJECT * StreamFileObject,
5552 IN struct _DEVICE_OBJECT *DeviceObjectHint OPTIONAL,
5553 IN FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType,
5554 IN BOOLEAN SafeToRecurse);
5555 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5556
5557 #define DO_VERIFY_VOLUME 0x00000002
5558 #define DO_BUFFERED_IO 0x00000004
5559 #define DO_EXCLUSIVE 0x00000008
5560 #define DO_DIRECT_IO 0x00000010
5561 #define DO_MAP_IO_BUFFER 0x00000020
5562 #define DO_DEVICE_HAS_NAME 0x00000040
5563 #define DO_DEVICE_INITIALIZING 0x00000080
5564 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
5565 #define DO_LONG_TERM_REQUESTS 0x00000200
5566 #define DO_NEVER_LAST_DEVICE 0x00000400
5567 #define DO_SHUTDOWN_REGISTERED 0x00000800
5568 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
5569 #define DO_POWER_PAGABLE 0x00002000
5570 #define DO_POWER_INRUSH 0x00004000
5571 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
5572 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
5573 #define DO_FORCE_NEITHER_IO 0x00080000
5574 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
5575 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
5576 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
5577 #define DO_DISALLOW_EXECUTE 0x00800000
5578
5579 extern KSPIN_LOCK IoStatisticsLock;
5580 extern ULONG IoReadOperationCount;
5581 extern ULONG IoWriteOperationCount;
5582 extern ULONG IoOtherOperationCount;
5583 extern LARGE_INTEGER IoReadTransferCount;
5584 extern LARGE_INTEGER IoWriteTransferCount;
5585 extern LARGE_INTEGER IoOtherTransferCount;
5586
5587 #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64
5588 #define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024
5589
5590 #if (NTDDI_VERSION == NTDDI_WIN2K)
5591 NTKERNELAPI
5592 NTSTATUS
5593 NTAPI
5594 IoRegisterFsRegistrationChangeEx(
5595 IN PDRIVER_OBJECT DriverObject,
5596 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
5597 #endif
5598
5599 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5600
5601 NTKERNELAPI
5602 VOID
5603 NTAPI
5604 IoAcquireVpbSpinLock(
5605 OUT PKIRQL Irql);
5606
5607 NTKERNELAPI
5608 NTSTATUS
5609 NTAPI
5610 IoCheckDesiredAccess(
5611 IN OUT PACCESS_MASK DesiredAccess,
5612 IN ACCESS_MASK GrantedAccess);
5613
5614 NTKERNELAPI
5615 NTSTATUS
5616 NTAPI
5617 IoCheckEaBufferValidity(
5618 IN PFILE_FULL_EA_INFORMATION EaBuffer,
5619 IN ULONG EaLength,
5620 OUT PULONG ErrorOffset);
5621
5622 NTKERNELAPI
5623 NTSTATUS
5624 NTAPI
5625 IoCheckFunctionAccess(
5626 IN ACCESS_MASK GrantedAccess,
5627 IN UCHAR MajorFunction,
5628 IN UCHAR MinorFunction,
5629 IN ULONG IoControlCode,
5630 IN PVOID Argument1 OPTIONAL,
5631 IN PVOID Argument2 OPTIONAL);
5632
5633 NTKERNELAPI
5634 NTSTATUS
5635 NTAPI
5636 IoCheckQuerySetFileInformation(
5637 IN FILE_INFORMATION_CLASS FileInformationClass,
5638 IN ULONG Length,
5639 IN BOOLEAN SetOperation);
5640
5641 NTKERNELAPI
5642 NTSTATUS
5643 NTAPI
5644 IoCheckQuerySetVolumeInformation(
5645 IN FS_INFORMATION_CLASS FsInformationClass,
5646 IN ULONG Length,
5647 IN BOOLEAN SetOperation);
5648
5649 NTKERNELAPI
5650 NTSTATUS
5651 NTAPI
5652 IoCheckQuotaBufferValidity(
5653 IN PFILE_QUOTA_INFORMATION QuotaBuffer,
5654 IN ULONG QuotaLength,
5655 OUT PULONG ErrorOffset);
5656
5657 NTKERNELAPI
5658 PFILE_OBJECT
5659 NTAPI
5660 IoCreateStreamFileObject(
5661 IN PFILE_OBJECT FileObject OPTIONAL,
5662 IN PDEVICE_OBJECT DeviceObject OPTIONAL);
5663
5664 NTKERNELAPI
5665 PFILE_OBJECT
5666 NTAPI
5667 IoCreateStreamFileObjectLite(
5668 IN PFILE_OBJECT FileObject OPTIONAL,
5669 IN PDEVICE_OBJECT DeviceObject OPTIONAL);
5670
5671 NTKERNELAPI
5672 BOOLEAN
5673 NTAPI
5674 IoFastQueryNetworkAttributes(
5675 IN POBJECT_ATTRIBUTES ObjectAttributes,
5676 IN ACCESS_MASK DesiredAccess,
5677 IN ULONG OpenOptions,
5678 OUT PIO_STATUS_BLOCK IoStatus,
5679 OUT PFILE_NETWORK_OPEN_INFORMATION Buffer);
5680
5681 NTKERNELAPI
5682 NTSTATUS
5683 NTAPI
5684 IoPageRead(
5685 IN PFILE_OBJECT FileObject,
5686 IN PMDL Mdl,
5687 IN PLARGE_INTEGER Offset,
5688 IN PKEVENT Event,
5689 OUT PIO_STATUS_BLOCK IoStatusBlock);
5690
5691 NTKERNELAPI
5692 PDEVICE_OBJECT
5693 NTAPI
5694 IoGetBaseFileSystemDeviceObject(
5695 IN PFILE_OBJECT FileObject);
5696
5697 NTKERNELAPI
5698 PCONFIGURATION_INFORMATION
5699 NTAPI
5700 IoGetConfigurationInformation(
5701 VOID);
5702
5703 NTKERNELAPI
5704 ULONG
5705 NTAPI
5706 IoGetRequestorProcessId(
5707 IN PIRP Irp);
5708
5709 NTKERNELAPI
5710 PEPROCESS
5711 NTAPI
5712 IoGetRequestorProcess(
5713 IN PIRP Irp);
5714
5715 NTKERNELAPI
5716 PIRP
5717 NTAPI
5718 IoGetTopLevelIrp(
5719 VOID);
5720
5721 NTKERNELAPI
5722 BOOLEAN
5723 NTAPI
5724 IoIsOperationSynchronous(
5725 IN PIRP Irp);
5726
5727 NTKERNELAPI
5728 BOOLEAN
5729 NTAPI
5730 IoIsSystemThread(
5731 IN PETHREAD Thread);
5732
5733 NTKERNELAPI
5734 BOOLEAN
5735 NTAPI
5736 IoIsValidNameGraftingBuffer(
5737 IN PIRP Irp,
5738 IN PREPARSE_DATA_BUFFER ReparseBuffer);
5739
5740 NTKERNELAPI
5741 NTSTATUS
5742 NTAPI
5743 IoQueryFileInformation(
5744 IN PFILE_OBJECT FileObject,
5745 IN FILE_INFORMATION_CLASS FileInformationClass,
5746 IN ULONG Length,
5747 OUT PVOID FileInformation,
5748 OUT PULONG ReturnedLength);
5749
5750 NTKERNELAPI
5751 NTSTATUS
5752 NTAPI
5753 IoQueryVolumeInformation(
5754 IN PFILE_OBJECT FileObject,
5755 IN FS_INFORMATION_CLASS FsInformationClass,
5756 IN ULONG Length,
5757 OUT PVOID FsInformation,
5758 OUT PULONG ReturnedLength);
5759
5760 NTKERNELAPI
5761 VOID
5762 NTAPI
5763 IoQueueThreadIrp(
5764 IN PIRP Irp);
5765
5766 NTKERNELAPI
5767 VOID
5768 NTAPI
5769 IoRegisterFileSystem(
5770 IN PDEVICE_OBJECT DeviceObject);
5771
5772 NTKERNELAPI
5773 NTSTATUS
5774 NTAPI
5775 IoRegisterFsRegistrationChange(
5776 IN PDRIVER_OBJECT DriverObject,
5777 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
5778
5779 NTKERNELAPI
5780 VOID
5781 NTAPI
5782 IoReleaseVpbSpinLock(
5783 IN KIRQL Irql);
5784
5785 NTKERNELAPI
5786 VOID
5787 NTAPI
5788 IoSetDeviceToVerify(
5789 IN PETHREAD Thread,
5790 IN PDEVICE_OBJECT DeviceObject OPTIONAL);
5791
5792 NTKERNELAPI
5793 NTSTATUS
5794 NTAPI
5795 IoSetInformation(
5796 IN PFILE_OBJECT FileObject,
5797 IN FILE_INFORMATION_CLASS FileInformationClass,
5798 IN ULONG Length,
5799 IN PVOID FileInformation);
5800
5801 NTKERNELAPI
5802 VOID
5803 NTAPI
5804 IoSetTopLevelIrp(
5805 IN PIRP Irp OPTIONAL);
5806
5807 NTKERNELAPI
5808 NTSTATUS
5809 NTAPI
5810 IoSynchronousPageWrite(
5811 IN PFILE_OBJECT FileObject,
5812 IN PMDL Mdl,
5813 IN PLARGE_INTEGER FileOffset,
5814 IN PKEVENT Event,
5815 OUT PIO_STATUS_BLOCK IoStatusBlock);
5816
5817 NTKERNELAPI
5818 PEPROCESS
5819 NTAPI
5820 IoThreadToProcess(
5821 IN PETHREAD Thread);
5822
5823 NTKERNELAPI
5824 VOID
5825 NTAPI
5826 IoUnregisterFileSystem(
5827 IN PDEVICE_OBJECT DeviceObject);
5828
5829 NTKERNELAPI
5830 VOID
5831 NTAPI
5832 IoUnregisterFsRegistrationChange(
5833 IN PDRIVER_OBJECT DriverObject,
5834 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
5835
5836 NTKERNELAPI
5837 NTSTATUS
5838 NTAPI
5839 IoVerifyVolume(
5840 IN PDEVICE_OBJECT DeviceObject,
5841 IN BOOLEAN AllowRawMount);
5842
5843 NTKERNELAPI
5844 NTSTATUS
5845 NTAPI
5846 IoGetRequestorSessionId(
5847 IN PIRP Irp,
5848 OUT PULONG pSessionId);
5849
5850 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5851
5852 #if (NTDDI_VERSION >= NTDDI_WINXP)
5853
5854 NTKERNELAPI
5855 PFILE_OBJECT
5856 NTAPI
5857 IoCreateStreamFileObjectEx(
5858 IN PFILE_OBJECT FileObject OPTIONAL,
5859 IN PDEVICE_OBJECT DeviceObject OPTIONAL,
5860 OUT PHANDLE FileObjectHandle OPTIONAL);
5861
5862 NTKERNELAPI
5863 NTSTATUS
5864 NTAPI
5865 IoQueryFileDosDeviceName(
5866 IN PFILE_OBJECT FileObject,
5867 OUT POBJECT_NAME_INFORMATION *ObjectNameInformation);
5868
5869 NTKERNELAPI
5870 NTSTATUS
5871 NTAPI
5872 IoEnumerateDeviceObjectList(
5873 IN PDRIVER_OBJECT DriverObject,
5874 OUT PDEVICE_OBJECT *DeviceObjectList,
5875 IN ULONG DeviceObjectListSize,
5876 OUT PULONG ActualNumberDeviceObjects);
5877
5878 NTKERNELAPI
5879 PDEVICE_OBJECT
5880 NTAPI
5881 IoGetLowerDeviceObject(
5882 IN PDEVICE_OBJECT DeviceObject);
5883
5884 NTKERNELAPI
5885 PDEVICE_OBJECT
5886 NTAPI
5887 IoGetDeviceAttachmentBaseRef(
5888 IN PDEVICE_OBJECT DeviceObject);
5889
5890 NTKERNELAPI
5891 NTSTATUS
5892 NTAPI
5893 IoGetDiskDeviceObject(
5894 IN PDEVICE_OBJECT FileSystemDeviceObject,
5895 OUT PDEVICE_OBJECT *DiskDeviceObject);
5896
5897 #endif
5898
5899 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
5900 NTKERNELAPI
5901 NTSTATUS
5902 NTAPI
5903 IoEnumerateRegisteredFiltersList(
5904 OUT PDRIVER_OBJECT *DriverObjectList,
5905 IN ULONG DriverObjectListSize,
5906 OUT PULONG ActualNumberDriverObjects);
5907 #endif
5908
5909 #if (NTDDI_VERSION >= NTDDI_VISTA)
5910 VOID
5911 FORCEINLINE
5912 NTAPI
5913 IoInitializePriorityInfo(
5914 IN PIO_PRIORITY_INFO PriorityInfo)
5915 {
5916 PriorityInfo->Size = sizeof(IO_PRIORITY_INFO);
5917 PriorityInfo->ThreadPriority = 0xffff;
5918 PriorityInfo->IoPriority = IoPriorityNormal;
5919 PriorityInfo->PagePriority = 0;
5920 }
5921 #endif
5922
5923 #if (NTDDI_VERSION >= NTDDI_WIN7)
5924
5925 NTKERNELAPI
5926 NTSTATUS
5927 NTAPI
5928 IoRegisterFsRegistrationChangeMountAware(
5929 IN PDRIVER_OBJECT DriverObject,
5930 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine,
5931 IN BOOLEAN SynchronizeWithMounts);
5932
5933 NTKERNELAPI
5934 NTSTATUS
5935 NTAPI
5936 IoReplaceFileObjectName(
5937 IN PFILE_OBJECT FileObject,
5938 IN PWSTR NewFileName,
5939 IN USHORT FileNameLength);
5940
5941 #endif
5942
5943 #define IoIsFileOpenedExclusively(FileObject) ( \
5944 (BOOLEAN) !( \
5945 (FileObject)->SharedRead || \
5946 (FileObject)->SharedWrite || \
5947 (FileObject)->SharedDelete \
5948 ) \
5949 )
5950
5951 #if (NTDDI_VERSION >= NTDDI_VISTA)
5952 typedef struct _IO_PRIORITY_INFO {
5953 ULONG Size;
5954 ULONG ThreadPriority;
5955 ULONG PagePriority;
5956 IO_PRIORITY_HINT IoPriority;
5957 } IO_PRIORITY_INFO, *PIO_PRIORITY_INFO;
5958 #endif
5959
5960 #define PO_CB_SYSTEM_POWER_POLICY 0
5961 #define PO_CB_AC_STATUS 1
5962 #define PO_CB_BUTTON_COLLISION 2
5963 #define PO_CB_SYSTEM_STATE_LOCK 3
5964 #define PO_CB_LID_SWITCH_STATE 4
5965 #define PO_CB_PROCESSOR_POWER_POLICY 5
5966
5967 #if (NTDDI_VERSION >= NTDDI_WINXP)
5968 NTKERNELAPI
5969 NTSTATUS
5970 NTAPI
5971 PoQueueShutdownWorkItem(
5972 IN OUT PWORK_QUEUE_ITEM WorkItem);
5973 #endif
5974
5975 #if defined(_IA64_)
5976 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5977 //DECLSPEC_DEPRECATED_DDK
5978 NTHALAPI
5979 ULONG
5980 NTAPI
5981 HalGetDmaAlignmentRequirement(
5982 VOID);
5983 #endif
5984 #endif
5985
5986 #if defined(_M_IX86) || defined(_M_AMD64)
5987 #define HalGetDmaAlignmentRequirement() 1L
5988 #endif
5989
5990 typedef enum _MMFLUSH_TYPE {
5991 MmFlushForDelete,
5992 MmFlushForWrite
5993 } MMFLUSH_TYPE;
5994
5995 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5996
5997 NTKERNELAPI
5998 BOOLEAN
5999 NTAPI
6000 MmIsRecursiveIoFault(
6001 VOID);
6002
6003 NTKERNELAPI
6004 BOOLEAN
6005 NTAPI
6006 MmForceSectionClosed(
6007 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
6008 IN BOOLEAN DelayClose);
6009
6010 NTKERNELAPI
6011 BOOLEAN
6012 NTAPI
6013 MmFlushImageSection(
6014 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
6015 IN MMFLUSH_TYPE FlushType);
6016
6017 NTKERNELAPI
6018 BOOLEAN
6019 NTAPI
6020 MmCanFileBeTruncated(
6021 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
6022 IN PLARGE_INTEGER NewFileSize OPTIONAL);
6023
6024 NTKERNELAPI
6025 BOOLEAN
6026 NTAPI
6027 MmSetAddressRangeModified(
6028 IN PVOID Address,
6029 IN SIZE_T Length);
6030
6031 #endif
6032
6033 typedef struct _READ_LIST {
6034 PFILE_OBJECT FileObject;
6035 ULONG NumberOfEntries;
6036 LOGICAL IsImage;
6037 FILE_SEGMENT_ELEMENT List[ANYSIZE_ARRAY];
6038 } READ_LIST, *PREAD_LIST;
6039
6040 #if (NTDDI_VERSION >= NTDDI_WINXP)
6041 typedef union _MM_PREFETCH_FLAGS {
6042 struct {
6043 ULONG Priority : SYSTEM_PAGE_PRIORITY_BITS;
6044 ULONG RepurposePriority : SYSTEM_PAGE_PRIORITY_BITS;
6045 } Flags;
6046 ULONG AllFlags;
6047 } MM_PREFETCH_FLAGS, *PMM_PREFETCH_FLAGS;
6048
6049 #define MM_PREFETCH_FLAGS_MASK ((1 << (2*SYSTEM_PAGE_PRIORITY_BITS)) - 1)
6050
6051 NTKERNELAPI
6052 NTSTATUS
6053 NTAPI
6054 MmPrefetchPages(
6055 IN ULONG NumberOfLists,
6056 IN PREAD_LIST *ReadLists);
6057 #endif
6058
6059 #if (NTDDI_VERSION >= NTDDI_VISTA)
6060 NTKERNELAPI
6061 ULONG
6062 NTAPI
6063 MmDoesFileHaveUserWritableReferences(
6064 IN PSECTION_OBJECT_POINTERS SectionPointer);
6065 #endif
6066
6067 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6068
6069 NTKERNELAPI
6070 NTSTATUS
6071 NTAPI
6072 ObInsertObject(
6073 IN PVOID Object,
6074 IN OUT PACCESS_STATE PassedAccessState OPTIONAL,
6075 IN ACCESS_MASK DesiredAccess OPTIONAL,
6076 IN ULONG ObjectPointerBias,
6077 OUT PVOID *NewObject OPTIONAL,
6078 OUT PHANDLE Handle OPTIONAL);
6079
6080 NTKERNELAPI
6081 NTSTATUS
6082 NTAPI
6083 ObOpenObjectByPointer(
6084 IN PVOID Object,
6085 IN ULONG HandleAttributes,
6086 IN PACCESS_STATE PassedAccessState OPTIONAL,
6087 IN ACCESS_MASK DesiredAccess OPTIONAL,
6088 IN POBJECT_TYPE ObjectType OPTIONAL,
6089 IN KPROCESSOR_MODE AccessMode,
6090 OUT PHANDLE Handle);
6091
6092 NTKERNELAPI
6093 VOID
6094 NTAPI
6095 ObMakeTemporaryObject(
6096 IN PVOID Object);
6097
6098 NTKERNELAPI
6099 NTSTATUS
6100 NTAPI
6101 ObQueryNameString(
6102 IN PVOID Object,
6103 OUT POBJECT_NAME_INFORMATION ObjectNameInfo OPTIONAL,
6104 IN ULONG Length,
6105 OUT PULONG ReturnLength);
6106
6107 NTKERNELAPI
6108 NTSTATUS
6109 NTAPI
6110 ObQueryObjectAuditingByHandle(
6111 IN HANDLE Handle,
6112 OUT PBOOLEAN GenerateOnClose);
6113
6114 #endif
6115
6116 #if (NTDDI_VERSION >= NTDDI_VISTA)
6117 NTKERNELAPI
6118 BOOLEAN
6119 NTAPI
6120 ObIsKernelHandle(
6121 IN HANDLE Handle);
6122 #endif
6123
6124 #if (NTDDI_VERSION >= NTDDI_WIN7)
6125 NTKERNELAPI
6126 NTSTATUS
6127 NTAPI
6128 ObOpenObjectByPointerWithTag(
6129 IN PVOID Object,
6130 IN ULONG HandleAttributes,
6131 IN PACCESS_STATE PassedAccessState OPTIONAL,
6132 IN ACCESS_MASK DesiredAccess,
6133 IN POBJECT_TYPE ObjectType OPTIONAL,
6134 IN KPROCESSOR_MODE AccessMode,
6135 IN ULONG Tag,
6136 OUT PHANDLE Handle);
6137 #endif
6138
6139 typedef ULONG LBN;
6140 typedef LBN *PLBN;
6141
6142 typedef ULONG VBN;
6143 typedef VBN *PVBN;
6144
6145 typedef enum _FAST_IO_POSSIBLE {
6146 FastIoIsNotPossible = 0,
6147 FastIoIsPossible,
6148 FastIoIsQuestionable
6149 } FAST_IO_POSSIBLE;
6150
6151 #define FSRTL_COMMON_FCB_HEADER_LAYOUT \
6152 CSHORT NodeTypeCode; \
6153 CSHORT NodeByteSize; \
6154 UCHAR Flags; \
6155 UCHAR IsFastIoPossible; \
6156 UCHAR Flags2; \
6157 UCHAR Reserved:4; \
6158 UCHAR Version:4; \
6159 PERESOURCE Resource; \
6160 PERESOURCE PagingIoResource; \
6161 LARGE_INTEGER AllocationSize; \
6162 LARGE_INTEGER FileSize; \
6163 LARGE_INTEGER ValidDataLength;
6164
6165 typedef struct _FSRTL_COMMON_FCB_HEADER {
6166 FSRTL_COMMON_FCB_HEADER_LAYOUT
6167 } FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER;
6168
6169 #ifdef __cplusplus
6170 typedef struct _FSRTL_ADVANCED_FCB_HEADER:FSRTL_COMMON_FCB_HEADER {
6171 #else /* __cplusplus */
6172 typedef struct _FSRTL_ADVANCED_FCB_HEADER {
6173 FSRTL_COMMON_FCB_HEADER_LAYOUT
6174 #endif /* __cplusplus */
6175 PFAST_MUTEX FastMutex;
6176 LIST_ENTRY FilterContexts;
6177 #if (NTDDI_VERSION >= NTDDI_VISTA)
6178 EX_PUSH_LOCK PushLock;
6179 PVOID *FileContextSupportPointer;
6180 #endif
6181 } FSRTL_ADVANCED_FCB_HEADER, *PFSRTL_ADVANCED_FCB_HEADER;
6182
6183 #define FSRTL_FCB_HEADER_V0 (0x00)
6184 #define FSRTL_FCB_HEADER_V1 (0x01)
6185
6186 #define FSRTL_FLAG_FILE_MODIFIED (0x01)
6187 #define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
6188 #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
6189 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
6190 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
6191 #define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
6192 #define FSRTL_FLAG_ADVANCED_HEADER (0x40)
6193 #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
6194
6195 #define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
6196 #define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02)
6197 #define FSRTL_FLAG2_PURGE_WHEN_MAPPED (0x04)
6198 #define FSRTL_FLAG2_IS_PAGING_FILE (0x08)
6199
6200 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
6201 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
6202 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
6203 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
6204 #define FSRTL_NETWORK1_TOP_LEVEL_IRP ((LONG_PTR)0x05)
6205 #define FSRTL_NETWORK2_TOP_LEVEL_IRP ((LONG_PTR)0x06)
6206 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG ((LONG_PTR)0xFFFF)
6207
6208 typedef struct _EOF_WAIT_BLOCK {
6209 LIST_ENTRY EofWaitLinks;
6210 KEVENT Event;
6211 } EOF_WAIT_BLOCK, *PEOF_WAIT_BLOCK;
6212
6213 typedef struct _FSRTL_AUXILIARY_BUFFER {
6214 PVOID Buffer;
6215 ULONG Length;
6216 ULONG Flags;
6217 PMDL Mdl;
6218 } FSRTL_AUXILIARY_BUFFER, *PFSRTL_AUXILIARY_BUFFER;
6219
6220 #define FSRTL_AUXILIARY_FLAG_DEALLOCATE 0x00000001
6221
6222 typedef struct _FILE_LOCK_INFO {
6223 LARGE_INTEGER StartingByte;
6224 LARGE_INTEGER Length;
6225 BOOLEAN ExclusiveLock;
6226 ULONG Key;
6227 PFILE_OBJECT FileObject;
6228 PVOID ProcessId;
6229 LARGE_INTEGER EndingByte;
6230 } FILE_LOCK_INFO, *PFILE_LOCK_INFO;
6231
6232 typedef NTSTATUS
6233 (NTAPI *PCOMPLETE_LOCK_IRP_ROUTINE) (
6234 IN PVOID Context,
6235 IN PIRP Irp);
6236
6237 typedef VOID
6238 (NTAPI *PUNLOCK_ROUTINE) (
6239 IN PVOID Context,
6240 IN PFILE_LOCK_INFO FileLockInfo);
6241
6242 typedef struct _FILE_LOCK {
6243 PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
6244 PUNLOCK_ROUTINE UnlockRoutine;
6245 BOOLEAN FastIoIsQuestionable;
6246 BOOLEAN SpareC[3];
6247 PVOID LockInformation;
6248 FILE_LOCK_INFO LastReturnedLockInfo;
6249 PVOID LastReturnedLock;
6250 LONG volatile LockRequestsInProgress;
6251 } FILE_LOCK, *PFILE_LOCK;
6252
6253 typedef struct _TUNNEL {
6254 FAST_MUTEX Mutex;
6255 PRTL_SPLAY_LINKS Cache;
6256 LIST_ENTRY TimerQueue;
6257 USHORT NumEntries;
6258 } TUNNEL, *PTUNNEL;
6259
6260 typedef enum _FSRTL_COMPARISON_RESULT {
6261 LessThan = -1,
6262 EqualTo = 0,
6263 GreaterThan = 1
6264 } FSRTL_COMPARISON_RESULT;
6265
6266 #define FSRTL_FAT_LEGAL 0x01
6267 #define FSRTL_HPFS_LEGAL 0x02
6268 #define FSRTL_NTFS_LEGAL 0x04
6269 #define FSRTL_WILD_CHARACTER 0x08
6270 #define FSRTL_OLE_LEGAL 0x10
6271 #define FSRTL_NTFS_STREAM_LEGAL (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL)
6272
6273 typedef struct _BASE_MCB {
6274 ULONG MaximumPairCount;
6275 ULONG PairCount;
6276 USHORT PoolType;
6277 USHORT Flags;
6278 PVOID Mapping;
6279 } BASE_MCB, *PBASE_MCB;
6280
6281 typedef struct _LARGE_MCB {
6282 PKGUARDED_MUTEX GuardedMutex;
6283 BASE_MCB BaseMcb;
6284 } LARGE_MCB, *PLARGE_MCB;
6285
6286 #define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
6287
6288 typedef struct _MCB {
6289 LARGE_MCB DummyFieldThatSizesThisStructureCorrectly;
6290 } MCB, *PMCB;
6291
6292 typedef PVOID OPLOCK, *POPLOCK;
6293
6294 typedef VOID
6295 (NTAPI *POPLOCK_WAIT_COMPLETE_ROUTINE) (
6296 IN PVOID Context,
6297 IN PIRP Irp);
6298
6299 typedef VOID
6300 (NTAPI *POPLOCK_FS_PREPOST_IRP) (
6301 IN PVOID Context,
6302 IN PIRP Irp);
6303
6304 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
6305 #define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED 0x00000001
6306 #endif
6307
6308 #if (NTDDI_VERSION >= NTDDI_WIN7)
6309 #define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY 0x00000002
6310 #define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK 0x00000004
6311 #define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS 0x00000008
6312 #define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH 0x00000001
6313 #endif
6314
6315 #if (NTDDI_VERSION >= NTDDI_WIN7)
6316
6317 typedef struct _OPLOCK_KEY_ECP_CONTEXT {
6318 GUID OplockKey;
6319 ULONG Reserved;
6320 } OPLOCK_KEY_ECP_CONTEXT, *POPLOCK_KEY_ECP_CONTEXT;
6321
6322 DEFINE_GUID( GUID_ECP_OPLOCK_KEY, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f );
6323
6324 #endif
6325
6326 #define FSRTL_VOLUME_DISMOUNT 1
6327 #define FSRTL_VOLUME_DISMOUNT_FAILED 2
6328 #define FSRTL_VOLUME_LOCK 3
6329 #define FSRTL_VOLUME_LOCK_FAILED 4
6330 #define FSRTL_VOLUME_UNLOCK 5
6331 #define FSRTL_VOLUME_MOUNT 6
6332 #define FSRTL_VOLUME_NEEDS_CHKDSK 7
6333 #define FSRTL_VOLUME_WORM_NEAR_FULL 8
6334 #define FSRTL_VOLUME_WEARING_OUT 9
6335 #define FSRTL_VOLUME_FORCED_CLOSED 10
6336 #define FSRTL_VOLUME_INFO_MAKE_COMPAT 11
6337 #define FSRTL_VOLUME_PREPARING_EJECT 12
6338 #define FSRTL_VOLUME_CHANGE_SIZE 13
6339 #define FSRTL_VOLUME_BACKGROUND_FORMAT 14
6340
6341 typedef PVOID PNOTIFY_SYNC;
6342
6343 typedef BOOLEAN
6344 (NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) (
6345 IN PVOID NotifyContext,
6346 IN PVOID TargetContext OPTIONAL,
6347 IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
6348
6349 typedef BOOLEAN
6350 (NTAPI *PFILTER_REPORT_CHANGE) (
6351 IN PVOID NotifyContext,
6352 IN PVOID FilterContext);
6353
6354 typedef VOID
6355 (NTAPI *PFSRTL_STACK_OVERFLOW_ROUTINE) (
6356 IN PVOID Context,
6357 IN PKEVENT Event);
6358
6359 #if (NTDDI_VERSION >= NTDDI_VISTA)
6360
6361 #define FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED 0x00000001
6362 #define FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED 0x00000002
6363 #define FSRTL_UNC_PROVIDER_FLAGS_DOMAIN_SVC_AWARE 0x00000004
6364
6365 #define FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA 0x00000001
6366
6367 #define FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA 0x00000001
6368 #define FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL 0x00000002
6369
6370 #define FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL 0x00000002
6371
6372 #define FSRTL_VIRTDISK_FULLY_ALLOCATED 0x00000001
6373 #define FSRTL_VIRTDISK_NO_DRIVE_LETTER 0x00000002
6374
6375 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_1 {
6376 ULONG32 ProviderId;
6377 } FSRTL_MUP_PROVIDER_INFO_LEVEL_1, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_1;
6378
6379 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_2 {
6380 ULONG32 ProviderId;
6381 UNICODE_STRING ProviderName;
6382 } FSRTL_MUP_PROVIDER_INFO_LEVEL_2, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_2;
6383
6384 typedef VOID
6385 (*PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK) (
6386 IN OUT PVOID EcpContext,
6387 IN LPCGUID EcpType);
6388
6389 typedef struct _ECP_LIST ECP_LIST, *PECP_LIST;
6390
6391 typedef ULONG FSRTL_ALLOCATE_ECPLIST_FLAGS;
6392 typedef ULONG FSRTL_ALLOCATE_ECP_FLAGS;
6393 typedef ULONG FSRTL_ECP_LOOKASIDE_FLAGS;
6394
6395 typedef enum _FSRTL_CHANGE_BACKING_TYPE {
6396 ChangeDataControlArea,
6397 ChangeImageControlArea,
6398 ChangeSharedCacheMap
6399 } FSRTL_CHANGE_BACKING_TYPE, *PFSRTL_CHANGE_BACKING_TYPE;
6400
6401 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
6402
6403 typedef struct _FSRTL_PER_FILE_CONTEXT {
6404 LIST_ENTRY Links;
6405 PVOID OwnerId;
6406 PVOID InstanceId;
6407 PFREE_FUNCTION FreeCallback;
6408 } FSRTL_PER_FILE_CONTEXT, *PFSRTL_PER_FILE_CONTEXT;
6409
6410 typedef struct _FSRTL_PER_STREAM_CONTEXT {
6411 LIST_ENTRY Links;
6412 PVOID OwnerId;
6413 PVOID InstanceId;
6414 PFREE_FUNCTION FreeCallback;
6415 } FSRTL_PER_STREAM_CONTEXT, *PFSRTL_PER_STREAM_CONTEXT;
6416
6417 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6418 typedef VOID
6419 (*PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS) (
6420 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
6421 #endif
6422
6423 typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT {
6424 LIST_ENTRY Links;
6425 PVOID OwnerId;
6426 PVOID InstanceId;
6427 } FSRTL_PER_FILEOBJECT_CONTEXT, *PFSRTL_PER_FILEOBJECT_CONTEXT;
6428
6429 #define FsRtlEnterFileSystem KeEnterCriticalRegion
6430 #define FsRtlExitFileSystem KeLeaveCriticalRegion
6431
6432 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_HARD_ERROR 0x1
6433 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_LOG_ENTRY 0x2
6434
6435 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6436
6437 NTKERNELAPI
6438 BOOLEAN
6439 NTAPI
6440 FsRtlCopyRead(
6441 IN PFILE_OBJECT FileObject,
6442 IN PLARGE_INTEGER FileOffset,
6443 IN ULONG Length,
6444 IN BOOLEAN Wait,
6445 IN ULONG LockKey,
6446 OUT PVOID Buffer,
6447 OUT PIO_STATUS_BLOCK IoStatus,
6448 IN PDEVICE_OBJECT DeviceObject);
6449
6450 NTKERNELAPI
6451 BOOLEAN
6452 NTAPI
6453 FsRtlCopyWrite(
6454 IN PFILE_OBJECT FileObject,
6455 IN PLARGE_INTEGER FileOffset,
6456 IN ULONG Length,
6457 IN BOOLEAN Wait,
6458 IN ULONG LockKey,
6459 IN PVOID Buffer,
6460 OUT PIO_STATUS_BLOCK IoStatus,
6461 IN PDEVICE_OBJECT DeviceObject);
6462
6463 NTKERNELAPI
6464 BOOLEAN
6465 NTAPI
6466 FsRtlMdlReadDev(
6467 IN PFILE_OBJECT FileObject,
6468 IN PLARGE_INTEGER FileOffset,
6469 IN ULONG Length,
6470 IN ULONG LockKey,
6471 OUT PMDL *MdlChain,
6472 OUT PIO_STATUS_BLOCK IoStatus,
6473 IN PDEVICE_OBJECT DeviceObject OPTIONAL);
6474
6475 NTKERNELAPI
6476 BOOLEAN
6477 NTAPI
6478 FsRtlMdlReadCompleteDev(
6479 IN PFILE_OBJECT FileObject,
6480 IN PMDL MdlChain,
6481 IN PDEVICE_OBJECT DeviceObject OPTIONAL);
6482
6483 NTKERNELAPI
6484 BOOLEAN
6485 NTAPI
6486 FsRtlPrepareMdlWriteDev(
6487 IN PFILE_OBJECT FileObject,
6488 IN PLARGE_INTEGER FileOffset,
6489 IN ULONG Length,
6490 IN ULONG LockKey,
6491 OUT PMDL *MdlChain,
6492 OUT PIO_STATUS_BLOCK IoStatus,
6493 IN PDEVICE_OBJECT DeviceObject);
6494
6495 NTKERNELAPI
6496 BOOLEAN
6497 NTAPI
6498 FsRtlMdlWriteCompleteDev(
6499 IN PFILE_OBJECT FileObject,
6500 IN PLARGE_INTEGER FileOffset,
6501 IN PMDL MdlChain,
6502 IN PDEVICE_OBJECT DeviceObject);
6503
6504 NTKERNELAPI
6505 VOID
6506 NTAPI
6507 FsRtlAcquireFileExclusive(
6508 IN PFILE_OBJECT FileObject);
6509
6510 NTKERNELAPI
6511 VOID
6512 NTAPI
6513 FsRtlReleaseFile(
6514 IN PFILE_OBJECT FileObject);
6515
6516 NTKERNELAPI
6517 NTSTATUS
6518 NTAPI
6519 FsRtlGetFileSize(
6520 IN PFILE_OBJECT FileObject,
6521 OUT PLARGE_INTEGER FileSize);
6522
6523 NTKERNELAPI
6524 BOOLEAN
6525 NTAPI
6526 FsRtlIsTotalDeviceFailure(
6527 IN NTSTATUS Status);
6528
6529 NTKERNELAPI
6530 PFILE_LOCK
6531 NTAPI
6532 FsRtlAllocateFileLock(
6533 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
6534 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL);
6535
6536 NTKERNELAPI
6537 VOID
6538 NTAPI
6539 FsRtlFreeFileLock(
6540 IN PFILE_LOCK FileLock);
6541
6542 NTKERNELAPI
6543 VOID
6544 NTAPI
6545 FsRtlInitializeFileLock(
6546 IN PFILE_LOCK FileLock,
6547 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
6548 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL);
6549
6550 NTKERNELAPI
6551 VOID
6552 NTAPI
6553 FsRtlUninitializeFileLock(
6554 IN PFILE_LOCK FileLock);
6555
6556 /*
6557 FsRtlProcessFileLock:
6558
6559 ret:
6560 -STATUS_INVALID_DEVICE_REQUEST
6561 -STATUS_RANGE_NOT_LOCKED from unlock routines.
6562 -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
6563 (redirected IoStatus->Status).
6564
6565 Internals:
6566 -switch ( Irp->CurrentStackLocation->MinorFunction )
6567 lock: return FsRtlPrivateLock;
6568 unlocksingle: return FsRtlFastUnlockSingle;
6569 unlockall: return FsRtlFastUnlockAll;
6570 unlockallbykey: return FsRtlFastUnlockAllByKey;
6571 default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
6572 return STATUS_INVALID_DEVICE_REQUEST;
6573
6574 -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
6575 -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
6576 */
6577 NTKERNELAPI
6578 NTSTATUS
6579 NTAPI
6580 FsRtlProcessFileLock(
6581 IN PFILE_LOCK FileLock,
6582 IN PIRP Irp,
6583 IN PVOID Context OPTIONAL);
6584
6585 /*
6586 FsRtlCheckLockForReadAccess:
6587
6588 All this really does is pick out the lock parameters from the irp (io stack
6589 location?), get IoGetRequestorProcess, and pass values on to
6590 FsRtlFastCheckLockForRead.
6591 */
6592 NTKERNELAPI
6593 BOOLEAN
6594 NTAPI
6595 FsRtlCheckLockForReadAccess(
6596 IN PFILE_LOCK FileLock,
6597 IN PIRP Irp);
6598
6599 /*
6600 FsRtlCheckLockForWriteAccess:
6601
6602 All this really does is pick out the lock parameters from the irp (io stack
6603 location?), get IoGetRequestorProcess, and pass values on to
6604 FsRtlFastCheckLockForWrite.
6605 */
6606 NTKERNELAPI
6607 BOOLEAN
6608 NTAPI
6609 FsRtlCheckLockForWriteAccess(
6610 IN PFILE_LOCK FileLock,
6611 IN PIRP Irp);
6612
6613 NTKERNELAPI
6614 BOOLEAN
6615 NTAPI
6616 FsRtlFastCheckLockForRead(
6617 IN PFILE_LOCK FileLock,
6618 IN PLARGE_INTEGER FileOffset,
6619 IN PLARGE_INTEGER Length,
6620 IN ULONG Key,
6621 IN PFILE_OBJECT FileObject,
6622 IN PVOID Process);
6623
6624 NTKERNELAPI
6625 BOOLEAN
6626 NTAPI
6627 FsRtlFastCheckLockForWrite(
6628 IN PFILE_LOCK FileLock,
6629 IN PLARGE_INTEGER FileOffset,
6630 IN PLARGE_INTEGER Length,
6631 IN ULONG Key,
6632 IN PFILE_OBJECT FileObject,
6633 IN PVOID Process);
6634
6635 /*
6636 FsRtlGetNextFileLock:
6637
6638 ret: NULL if no more locks
6639
6640 Internals:
6641 FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
6642 FileLock->LastReturnedLock as storage.
6643 LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
6644 list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
6645 calls with Restart = FALSE.
6646 */
6647 NTKERNELAPI
6648 PFILE_LOCK_INFO
6649 NTAPI
6650 FsRtlGetNextFileLock(
6651 IN PFILE_LOCK FileLock,
6652 IN BOOLEAN Restart);
6653
6654 NTKERNELAPI
6655 NTSTATUS
6656 NTAPI
6657 FsRtlFastUnlockSingle(
6658 IN PFILE_LOCK FileLock,
6659 IN PFILE_OBJECT FileObject,
6660 IN PLARGE_INTEGER FileOffset,
6661 IN PLARGE_INTEGER Length,
6662 IN PEPROCESS Process,
6663 IN ULONG Key,
6664 IN PVOID Context OPTIONAL,
6665 IN BOOLEAN AlreadySynchronized);
6666
6667 NTKERNELAPI
6668 NTSTATUS
6669 NTAPI
6670 FsRtlFastUnlockAll(
6671 IN PFILE_LOCK FileLock,
6672 IN PFILE_OBJECT FileObject,
6673 IN PEPROCESS Process,
6674 IN PVOID Context OPTIONAL);
6675
6676 NTKERNELAPI
6677 NTSTATUS
6678 NTAPI
6679 FsRtlFastUnlockAllByKey(
6680 IN PFILE_LOCK FileLock,
6681 IN PFILE_OBJECT FileObject,
6682 IN PEPROCESS Process,
6683 IN ULONG Key,
6684 IN PVOID Context OPTIONAL);
6685
6686 /*
6687 FsRtlPrivateLock:
6688
6689 ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
6690
6691 Internals:
6692 -Calls IoCompleteRequest if Irp
6693 -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
6694 */
6695 NTKERNELAPI
6696 BOOLEAN
6697 NTAPI
6698 FsRtlPrivateLock(
6699 IN PFILE_LOCK FileLock,
6700 IN PFILE_OBJECT FileObject,
6701 IN PLARGE_INTEGER FileOffset,
6702 IN PLARGE_INTEGER Length,
6703 IN PEPROCESS Process,
6704 IN ULONG Key,
6705 IN BOOLEAN FailImmediately,
6706 IN BOOLEAN ExclusiveLock,
6707 OUT PIO_STATUS_BLOCK IoStatus,
6708 IN PIRP Irp OPTIONAL,
6709 IN PVOID Context,
6710 IN BOOLEAN AlreadySynchronized);
6711
6712 NTKERNELAPI
6713 VOID
6714 NTAPI
6715 FsRtlInitializeTunnelCache(
6716 IN PTUNNEL Cache);
6717
6718 NTKERNELAPI
6719 VOID
6720 NTAPI
6721 FsRtlAddToTunnelCache(
6722 IN PTUNNEL Cache,
6723 IN ULONGLONG DirectoryKey,
6724 IN PUNICODE_STRING ShortName,
6725 IN PUNICODE_STRING LongName,
6726 IN BOOLEAN KeyByShortName,
6727 IN ULONG DataLength,
6728 IN PVOID Data);
6729
6730 NTKERNELAPI
6731 BOOLEAN
6732 NTAPI
6733 FsRtlFindInTunnelCache(
6734 IN PTUNNEL Cache,
6735 IN ULONGLONG DirectoryKey,
6736 IN PUNICODE_STRING Name,
6737 OUT PUNICODE_STRING ShortName,
6738 OUT PUNICODE_STRING LongName,
6739 IN OUT PULONG DataLength,
6740 OUT PVOID Data);
6741
6742 NTKERNELAPI
6743 VOID
6744 NTAPI
6745 FsRtlDeleteKeyFromTunnelCache(
6746 IN PTUNNEL Cache,
6747 IN ULONGLONG DirectoryKey);
6748
6749 NTKERNELAPI
6750 VOID
6751 NTAPI
6752 FsRtlDeleteTunnelCache(
6753 IN PTUNNEL Cache);
6754
6755 NTKERNELAPI
6756 VOID
6757 NTAPI
6758 FsRtlDissectDbcs(
6759 IN ANSI_STRING Name,
6760 OUT PANSI_STRING FirstPart,
6761 OUT PANSI_STRING RemainingPart);
6762
6763 NTKERNELAPI
6764 BOOLEAN
6765 NTAPI
6766 FsRtlDoesDbcsContainWildCards(
6767 IN PANSI_STRING Name);
6768
6769 NTKERNELAPI
6770 BOOLEAN
6771 NTAPI
6772 FsRtlIsDbcsInExpression(
6773 IN PANSI_STRING Expression,
6774 IN PANSI_STRING Name);
6775
6776 NTKERNELAPI
6777 BOOLEAN
6778 NTAPI
6779 FsRtlIsFatDbcsLegal(
6780 IN ANSI_STRING DbcsName,
6781 IN BOOLEAN WildCardsPermissible,
6782 IN BOOLEAN PathNamePermissible,
6783 IN BOOLEAN LeadingBackslashPermissible);
6784
6785 NTKERNELAPI
6786 BOOLEAN
6787 NTAPI
6788 FsRtlIsHpfsDbcsLegal(
6789 IN ANSI_STRING DbcsName,
6790 IN BOOLEAN WildCardsPermissible,
6791 IN BOOLEAN PathNamePermissible,
6792 IN BOOLEAN LeadingBackslashPermissible);
6793
6794 NTKERNELAPI
6795 NTSTATUS
6796 NTAPI
6797 FsRtlNormalizeNtstatus(
6798 IN NTSTATUS Exception,
6799 IN NTSTATUS GenericException);
6800
6801 NTKERNELAPI
6802 BOOLEAN
6803 NTAPI
6804 FsRtlIsNtstatusExpected(
6805 IN NTSTATUS Ntstatus);
6806
6807 NTKERNELAPI
6808 PERESOURCE
6809 NTAPI
6810 FsRtlAllocateResource(
6811 VOID);
6812
6813 NTKERNELAPI
6814 VOID
6815 NTAPI
6816 FsRtlInitializeLargeMcb(
6817 IN PLARGE_MCB Mcb,
6818 IN POOL_TYPE PoolType);
6819
6820 NTKERNELAPI
6821 VOID
6822 NTAPI
6823 FsRtlUninitializeLargeMcb(
6824 IN PLARGE_MCB Mcb);
6825
6826 NTKERNELAPI
6827 VOID
6828 NTAPI
6829 FsRtlResetLargeMcb(
6830 IN PLARGE_MCB Mcb,
6831 IN BOOLEAN SelfSynchronized);
6832
6833 NTKERNELAPI
6834 VOID
6835 NTAPI
6836 FsRtlTruncateLargeMcb(
6837 IN PLARGE_MCB Mcb,
6838 IN LONGLONG Vbn);
6839
6840 NTKERNELAPI
6841 BOOLEAN
6842 NTAPI
6843 FsRtlAddLargeMcbEntry(
6844 IN PLARGE_MCB Mcb,
6845 IN LONGLONG Vbn,
6846 IN LONGLONG Lbn,
6847 IN LONGLONG SectorCount);
6848
6849 NTKERNELAPI
6850 VOID
6851 NTAPI
6852 FsRtlRemoveLargeMcbEntry(
6853 IN PLARGE_MCB Mcb,
6854 IN LONGLONG Vbn,
6855 IN LONGLONG SectorCount);
6856
6857 NTKERNELAPI
6858 BOOLEAN
6859 NTAPI
6860 FsRtlLookupLargeMcbEntry(
6861 IN PLARGE_MCB Mcb,
6862 IN LONGLONG Vbn,
6863 OUT PLONGLONG Lbn OPTIONAL,
6864 OUT PLONGLONG SectorCountFromLbn OPTIONAL,
6865 OUT PLONGLONG StartingLbn OPTIONAL,
6866 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
6867 OUT PULONG Index OPTIONAL);
6868
6869 NTKERNELAPI
6870 BOOLEAN
6871 NTAPI
6872 FsRtlLookupLastLargeMcbEntry(
6873 IN PLARGE_MCB Mcb,
6874 OUT PLONGLONG Vbn,
6875 OUT PLONGLONG Lbn);
6876
6877 NTKERNELAPI
6878 BOOLEAN
6879 NTAPI
6880 FsRtlLookupLastLargeMcbEntryAndIndex(
6881 IN PLARGE_MCB OpaqueMcb,
6882 OUT PLONGLONG LargeVbn,
6883 OUT PLONGLONG LargeLbn,
6884 OUT PULONG Index);
6885
6886 NTKERNELAPI
6887 ULONG
6888 NTAPI
6889 FsRtlNumberOfRunsInLargeMcb(
6890 IN PLARGE_MCB Mcb);
6891
6892 NTKERNELAPI
6893 BOOLEAN
6894 NTAPI
6895 FsRtlGetNextLargeMcbEntry(
6896 IN PLARGE_MCB Mcb,
6897 IN ULONG RunIndex,
6898 OUT PLONGLONG Vbn,
6899 OUT PLONGLONG Lbn,
6900 OUT PLONGLONG SectorCount);
6901
6902 NTKERNELAPI
6903 BOOLEAN
6904 NTAPI
6905 FsRtlSplitLargeMcb(
6906 IN PLARGE_MCB Mcb,
6907 IN LONGLONG Vbn,
6908 IN LONGLONG Amount);
6909
6910 NTKERNELAPI
6911 VOID
6912 NTAPI
6913 FsRtlInitializeMcb(
6914 IN PMCB Mcb,
6915 IN POOL_TYPE PoolType);
6916
6917 NTKERNELAPI
6918 VOID
6919 NTAPI
6920 FsRtlUninitializeMcb(
6921 IN PMCB Mcb);
6922
6923 NTKERNELAPI
6924 VOID
6925 NTAPI
6926 FsRtlTruncateMcb(
6927 IN PMCB Mcb,
6928 IN VBN Vbn);
6929
6930 NTKERNELAPI
6931 BOOLEAN
6932 NTAPI
6933 FsRtlAddMcbEntry(
6934 IN PMCB Mcb,
6935 IN VBN Vbn,
6936 IN LBN Lbn,
6937 IN ULONG SectorCount);
6938
6939 NTKERNELAPI
6940 VOID
6941 NTAPI
6942 FsRtlRemoveMcbEntry(
6943 IN PMCB Mcb,
6944 IN VBN Vbn,
6945 IN ULONG SectorCount);
6946
6947 NTKERNELAPI
6948 BOOLEAN
6949 NTAPI
6950 FsRtlLookupMcbEntry(
6951 IN PMCB Mcb,
6952 IN VBN Vbn,
6953 OUT PLBN Lbn,
6954 OUT PULONG SectorCount OPTIONAL,
6955 OUT PULONG Index);
6956
6957 NTKERNELAPI
6958 BOOLEAN
6959 NTAPI
6960 FsRtlLookupLastMcbEntry(
6961 IN PMCB Mcb,
6962 OUT PVBN Vbn,
6963 OUT PLBN Lbn);
6964
6965 NTKERNELAPI
6966 ULONG
6967 NTAPI
6968 FsRtlNumberOfRunsInMcb(
6969 IN PMCB Mcb);
6970
6971 NTKERNELAPI
6972 BOOLEAN
6973 NTAPI
6974 FsRtlGetNextMcbEntry(
6975 IN PMCB Mcb,
6976 IN ULONG RunIndex,
6977 OUT PVBN Vbn,
6978 OUT PLBN Lbn,
6979 OUT PULONG SectorCount);
6980
6981 NTKERNELAPI
6982 NTSTATUS
6983 NTAPI
6984 FsRtlBalanceReads(
6985 IN PDEVICE_OBJECT TargetDevice);
6986
6987 NTKERNELAPI
6988 VOID
6989 NTAPI
6990 FsRtlInitializeOplock(
6991 IN OUT POPLOCK Oplock);
6992
6993 NTKERNELAPI
6994 VOID
6995 NTAPI
6996 FsRtlUninitializeOplock(
6997 IN OUT POPLOCK Oplock);
6998
6999 NTKERNELAPI
7000 NTSTATUS
7001 NTAPI
7002 FsRtlOplockFsctrl(
7003 IN POPLOCK Oplock,
7004 IN PIRP Irp,
7005 IN ULONG OpenCount);
7006
7007 NTKERNELAPI
7008 NTSTATUS
7009 NTAPI
7010 FsRtlCheckOplock(
7011 IN POPLOCK Oplock,
7012 IN PIRP Irp,
7013 IN PVOID Context,
7014 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
7015 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
7016
7017 NTKERNELAPI
7018 BOOLEAN
7019 NTAPI
7020 FsRtlOplockIsFastIoPossible(
7021 IN POPLOCK Oplock);
7022
7023 NTKERNELAPI
7024 BOOLEAN
7025 NTAPI
7026 FsRtlCurrentBatchOplock(
7027 IN POPLOCK Oplock);
7028
7029 NTKERNELAPI
7030 NTSTATUS
7031 NTAPI
7032 FsRtlNotifyVolumeEvent(
7033 IN PFILE_OBJECT FileObject,
7034 IN ULONG EventCode);
7035
7036 NTKERNELAPI
7037 VOID
7038 NTAPI
7039 FsRtlNotifyInitializeSync(
7040 IN PNOTIFY_SYNC *NotifySync);
7041
7042 NTKERNELAPI
7043 VOID
7044 NTAPI
7045 FsRtlNotifyUninitializeSync(
7046 IN PNOTIFY_SYNC *NotifySync);
7047
7048 NTKERNELAPI
7049 VOID
7050 NTAPI
7051 FsRtlNotifyFullChangeDirectory(
7052 IN PNOTIFY_SYNC NotifySync,
7053 IN PLIST_ENTRY NotifyList,
7054 IN PVOID FsContext,
7055 IN PSTRING FullDirectoryName,
7056 IN BOOLEAN WatchTree,
7057 IN BOOLEAN IgnoreBuffer,
7058 IN ULONG CompletionFilter,
7059 IN PIRP NotifyIrp OPTIONAL,
7060 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
7061 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL);
7062
7063 NTKERNELAPI
7064 VOID
7065 NTAPI
7066 FsRtlNotifyFilterReportChange(
7067 IN PNOTIFY_SYNC NotifySync,
7068 IN PLIST_ENTRY NotifyList,
7069 IN PSTRING FullTargetName,
7070 IN USHORT TargetNameOffset,
7071 IN PSTRING StreamName OPTIONAL,
7072 IN PSTRING NormalizedParentName OPTIONAL,
7073 IN ULONG FilterMatch,
7074 IN ULONG Action,
7075 IN PVOID TargetContext OPTIONAL,
7076 IN PVOID FilterContext OPTIONAL);
7077
7078 NTKERNELAPI
7079 VOID
7080 NTAPI
7081 FsRtlNotifyFullReportChange(
7082 IN PNOTIFY_SYNC NotifySync,
7083 IN PLIST_ENTRY NotifyList,
7084 IN PSTRING FullTargetName,
7085 IN USHORT TargetNameOffset,
7086 IN PSTRING StreamName OPTIONAL,
7087 IN PSTRING NormalizedParentName OPTIONAL,
7088 IN ULONG FilterMatch,
7089 IN ULONG Action,
7090 IN PVOID TargetContext OPTIONAL);
7091
7092 NTKERNELAPI
7093 VOID
7094 NTAPI
7095 FsRtlNotifyCleanup(
7096 IN PNOTIFY_SYNC NotifySync,
7097 IN PLIST_ENTRY NotifyList,
7098 IN PVOID FsContext);
7099
7100 NTKERNELAPI
7101 VOID
7102 NTAPI
7103 FsRtlDissectName(
7104 IN UNICODE_STRING Name,
7105 OUT PUNICODE_STRING FirstPart,
7106 OUT PUNICODE_STRING RemainingPart);
7107
7108 NTKERNELAPI
7109 BOOLEAN
7110 NTAPI
7111 FsRtlDoesNameContainWildCards(
7112 IN PUNICODE_STRING Name);
7113
7114 NTKERNELAPI
7115 BOOLEAN
7116 NTAPI
7117 FsRtlAreNamesEqual(
7118 IN PCUNICODE_STRING Name1,
7119 IN PCUNICODE_STRING Name2,
7120 IN BOOLEAN IgnoreCase,
7121 IN PCWCH UpcaseTable OPTIONAL);
7122
7123 NTKERNELAPI
7124 BOOLEAN
7125 NTAPI
7126 FsRtlIsNameInExpression(
7127 IN PUNICODE_STRING Expression,
7128 IN PUNICODE_STRING Name,
7129 IN BOOLEAN IgnoreCase,
7130 IN PWCHAR UpcaseTable OPTIONAL);
7131
7132 NTKERNELAPI
7133 VOID
7134 NTAPI
7135 FsRtlPostPagingFileStackOverflow(
7136 IN PVOID Context,
7137 IN PKEVENT Event,
7138 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
7139
7140 NTKERNELAPI
7141 VOID
7142 NTAPI
7143 FsRtlPostStackOverflow (
7144 IN PVOID Context,
7145 IN PKEVENT Event,
7146 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
7147
7148 NTKERNELAPI
7149 NTSTATUS
7150 NTAPI
7151 FsRtlRegisterUncProvider(
7152 OUT PHANDLE MupHandle,
7153 IN PUNICODE_STRING RedirectorDeviceName,
7154 IN BOOLEAN MailslotsSupported);
7155
7156 NTKERNELAPI
7157 VOID
7158 NTAPI
7159 FsRtlDeregisterUncProvider(
7160 IN HANDLE Handle);
7161
7162 NTKERNELAPI
7163 VOID
7164 NTAPI
7165 FsRtlTeardownPerStreamContexts(
7166 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
7167
7168 NTKERNELAPI
7169 NTSTATUS
7170 NTAPI
7171 FsRtlCreateSectionForDataScan(
7172 OUT PHANDLE SectionHandle,
7173 OUT PVOID *SectionObject,
7174 OUT PLARGE_INTEGER SectionFileSize OPTIONAL,
7175 IN PFILE_OBJECT FileObject,
7176 IN ACCESS_MASK DesiredAccess,
7177 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
7178 IN PLARGE_INTEGER MaximumSize OPTIONAL,
7179 IN ULONG SectionPageProtection,
7180 IN ULONG AllocationAttributes,
7181 IN ULONG Flags);
7182
7183 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
7184
7185 #if (NTDDI_VERSION >= NTDDI_WINXP)
7186
7187 NTKERNELAPI
7188 VOID
7189 NTAPI
7190 FsRtlNotifyFilterChangeDirectory(
7191 IN PNOTIFY_SYNC NotifySync,
7192 IN PLIST_ENTRY NotifyList,
7193 IN PVOID FsContext,
7194 IN PSTRING FullDirectoryName,
7195 IN BOOLEAN WatchTree,
7196 IN BOOLEAN IgnoreBuffer,
7197 IN ULONG CompletionFilter,
7198 IN PIRP NotifyIrp OPTIONAL,
7199 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
7200 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL,
7201 IN PFILTER_REPORT_CHANGE FilterCallback OPTIONAL);
7202
7203 NTKERNELAPI
7204 NTSTATUS
7205 NTAPI
7206 FsRtlInsertPerStreamContext(
7207 IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext,
7208 IN PFSRTL_PER_STREAM_CONTEXT Ptr);
7209
7210 NTKERNELAPI
7211 PFSRTL_PER_STREAM_CONTEXT
7212 NTAPI
7213 FsRtlLookupPerStreamContextInternal(
7214 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
7215 IN PVOID OwnerId OPTIONAL,
7216 IN PVOID InstanceId OPTIONAL);
7217
7218 NTKERNELAPI
7219 PFSRTL_PER_STREAM_CONTEXT
7220 NTAPI
7221 FsRtlRemovePerStreamContext(
7222 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
7223 IN PVOID OwnerId OPTIONAL,
7224 IN PVOID InstanceId OPTIONAL);
7225
7226 NTKERNELAPI
7227 VOID
7228 NTAPI
7229 FsRtlIncrementCcFastReadNotPossible(
7230 VOID);
7231
7232 NTKERNELAPI
7233 VOID
7234 NTAPI
7235 FsRtlIncrementCcFastReadWait(
7236 VOID);
7237
7238 NTKERNELAPI
7239 VOID
7240 NTAPI
7241 FsRtlIncrementCcFastReadNoWait(
7242 VOID);
7243
7244 NTKERNELAPI
7245 VOID
7246 NTAPI
7247 FsRtlIncrementCcFastReadResourceMiss(
7248 VOID);
7249
7250 NTKERNELAPI
7251 LOGICAL
7252 NTAPI
7253 FsRtlIsPagingFile(
7254 IN PFILE_OBJECT FileObject);
7255
7256 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
7257
7258 #if (NTDDI_VERSION >= NTDDI_WS03)
7259
7260 NTKERNELAPI
7261 VOID
7262 NTAPI
7263 FsRtlInitializeBaseMcb(
7264 IN PBASE_MCB Mcb,
7265 IN POOL_TYPE PoolType);
7266
7267 NTKERNELAPI
7268 VOID
7269 NTAPI
7270 FsRtlUninitializeBaseMcb(
7271 IN PBASE_MCB Mcb);
7272
7273 NTKERNELAPI
7274 VOID
7275 NTAPI
7276 FsRtlResetBaseMcb(
7277 IN PBASE_MCB Mcb);
7278
7279 NTKERNELAPI
7280 VOID
7281 NTAPI
7282 FsRtlTruncateBaseMcb(
7283 IN PBASE_MCB Mcb,
7284 IN LONGLONG Vbn);
7285
7286 NTKERNELAPI
7287 BOOLEAN
7288 NTAPI
7289 FsRtlAddBaseMcbEntry(
7290 IN PBASE_MCB Mcb,
7291 IN LONGLONG Vbn,
7292 IN LONGLONG Lbn,
7293 IN LONGLONG SectorCount);
7294
7295 NTKERNELAPI
7296 BOOLEAN
7297 NTAPI
7298 FsRtlRemoveBaseMcbEntry(
7299 IN PBASE_MCB Mcb,
7300 IN LONGLONG Vbn,
7301 IN LONGLONG SectorCount);
7302
7303 NTKERNELAPI
7304 BOOLEAN
7305 NTAPI
7306 FsRtlLookupBaseMcbEntry(
7307 IN PBASE_MCB Mcb,
7308 IN LONGLONG Vbn,
7309 OUT PLONGLONG Lbn OPTIONAL,
7310 OUT PLONGLONG SectorCountFromLbn OPTIONAL,
7311 OUT PLONGLONG StartingLbn OPTIONAL,
7312 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
7313 OUT PULONG Index OPTIONAL);
7314
7315 NTKERNELAPI
7316 BOOLEAN
7317 NTAPI
7318 FsRtlLookupLastBaseMcbEntry(
7319 IN PBASE_MCB Mcb,
7320 OUT PLONGLONG Vbn,
7321 OUT PLONGLONG Lbn);
7322
7323 NTKERNELAPI
7324 BOOLEAN
7325 NTAPI
7326 FsRtlLookupLastBaseMcbEntryAndIndex(
7327 IN PBASE_MCB OpaqueMcb,
7328 IN OUT PLONGLONG LargeVbn,
7329 IN OUT PLONGLONG LargeLbn,
7330 IN OUT PULONG Index);
7331
7332 NTKERNELAPI
7333 ULONG
7334 NTAPI
7335 FsRtlNumberOfRunsInBaseMcb(
7336 IN PBASE_MCB Mcb);
7337
7338 NTKERNELAPI
7339 BOOLEAN
7340 NTAPI
7341 FsRtlGetNextBaseMcbEntry(
7342 IN PBASE_MCB Mcb,
7343 IN ULONG RunIndex,
7344 OUT PLONGLONG Vbn,
7345 OUT PLONGLONG Lbn,
7346 OUT PLONGLONG SectorCount);
7347
7348 NTKERNELAPI
7349 BOOLEAN
7350 NTAPI
7351 FsRtlSplitBaseMcb(
7352 IN PBASE_MCB Mcb,
7353 IN LONGLONG Vbn,
7354 IN LONGLONG Amount);
7355
7356 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
7357
7358 #if (NTDDI_VERSION >= NTDDI_VISTA)
7359
7360 BOOLEAN
7361 NTAPI
7362 FsRtlInitializeBaseMcbEx(
7363 IN PBASE_MCB Mcb,
7364 IN POOL_TYPE PoolType,
7365 IN USHORT Flags);
7366
7367 NTSTATUS
7368 NTAPI
7369 FsRtlAddBaseMcbEntryEx(
7370 IN PBASE_MCB Mcb,
7371 IN LONGLONG Vbn,
7372 IN LONGLONG Lbn,
7373 IN LONGLONG SectorCount);
7374
7375 NTKERNELAPI
7376 BOOLEAN
7377 NTAPI
7378 FsRtlCurrentOplock(
7379 IN POPLOCK Oplock);
7380
7381 NTKERNELAPI
7382 NTSTATUS
7383 NTAPI
7384 FsRtlOplockBreakToNone(
7385 IN OUT POPLOCK Oplock,
7386 IN PIO_STACK_LOCATION IrpSp OPTIONAL,
7387 IN PIRP Irp,
7388 IN PVOID Context OPTIONAL,
7389 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
7390 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
7391
7392 NTKERNELAPI
7393 NTSTATUS
7394 NTAPI
7395 FsRtlNotifyVolumeEventEx(
7396 IN PFILE_OBJECT FileObject,
7397 IN ULONG EventCode,
7398 IN PTARGET_DEVICE_CUSTOM_NOTIFICATION Event);
7399
7400 NTKERNELAPI
7401 VOID
7402 NTAPI
7403 FsRtlNotifyCleanupAll(
7404 IN PNOTIFY_SYNC NotifySync,
7405 IN PLIST_ENTRY NotifyList);
7406
7407 NTSTATUS
7408 NTAPI
7409 FsRtlRegisterUncProviderEx(
7410 OUT PHANDLE MupHandle,
7411 IN PUNICODE_STRING RedirDevName,
7412 IN PDEVICE_OBJECT DeviceObject,
7413 IN ULONG Flags);
7414
7415 NTKERNELAPI
7416 NTSTATUS
7417 NTAPI
7418 FsRtlCancellableWaitForSingleObject(
7419 IN PVOID Object,
7420 IN PLARGE_INTEGER Timeout OPTIONAL,
7421 IN PIRP Irp OPTIONAL);
7422
7423 NTKERNELAPI
7424 NTSTATUS
7425 NTAPI
7426 FsRtlCancellableWaitForMultipleObjects(
7427 IN ULONG Count,
7428 IN PVOID ObjectArray[],
7429 IN WAIT_TYPE WaitType,
7430 IN PLARGE_INTEGER Timeout OPTIONAL,
7431 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL,
7432 IN PIRP Irp OPTIONAL);
7433
7434 NTKERNELAPI
7435 NTSTATUS
7436 NTAPI
7437 FsRtlMupGetProviderInfoFromFileObject(
7438 IN PFILE_OBJECT pFileObject,
7439 IN ULONG Level,
7440 OUT PVOID pBuffer,
7441 IN OUT PULONG pBufferSize);
7442
7443 NTKERNELAPI
7444 NTSTATUS
7445 NTAPI
7446 FsRtlMupGetProviderIdFromName(
7447 IN PUNICODE_STRING pProviderName,
7448 OUT PULONG32 pProviderId);
7449
7450 NTKERNELAPI
7451 VOID
7452 NTAPI
7453 FsRtlIncrementCcFastMdlReadWait(
7454 VOID);
7455
7456 NTKERNELAPI
7457 NTSTATUS
7458 NTAPI
7459 FsRtlValidateReparsePointBuffer(
7460 IN ULONG BufferLength,
7461 IN PREPARSE_DATA_BUFFER ReparseBuffer);
7462
7463 NTKERNELAPI
7464 NTSTATUS
7465 NTAPI
7466 FsRtlRemoveDotsFromPath(
7467 IN OUT PWSTR OriginalString,
7468 IN USHORT PathLength,
7469 OUT USHORT *NewLength);
7470
7471 NTKERNELAPI
7472 NTSTATUS
7473 NTAPI
7474 FsRtlAllocateExtraCreateParameterList(
7475 IN FSRTL_ALLOCATE_ECPLIST_FLAGS Flags,
7476 OUT PECP_LIST *EcpList);
7477
7478 NTKERNELAPI
7479 VOID
7480 NTAPI
7481 FsRtlFreeExtraCreateParameterList(
7482 IN PECP_LIST EcpList);
7483
7484 NTKERNELAPI
7485 NTSTATUS
7486 NTAPI
7487 FsRtlAllocateExtraCreateParameter(
7488 IN LPCGUID EcpType,
7489 IN ULONG SizeOfContext,
7490 IN FSRTL_ALLOCATE_ECP_FLAGS Flags,
7491 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
7492 IN ULONG PoolTag,
7493 OUT PVOID *EcpContext);
7494
7495 NTKERNELAPI
7496 VOID
7497 NTAPI
7498 FsRtlFreeExtraCreateParameter(
7499 IN PVOID EcpContext);
7500
7501 NTKERNELAPI
7502 VOID
7503 NTAPI
7504 FsRtlInitExtraCreateParameterLookasideList(
7505 IN OUT PVOID Lookaside,
7506 IN FSRTL_ECP_LOOKASIDE_FLAGS Flags,
7507 IN SIZE_T Size,
7508 IN ULONG Tag);
7509
7510 VOID
7511 NTAPI
7512 FsRtlDeleteExtraCreateParameterLookasideList(
7513 IN OUT PVOID Lookaside,
7514 IN FSRTL_ECP_LOOKASIDE_FLAGS Flags);
7515
7516 NTKERNELAPI
7517 NTSTATUS
7518 NTAPI
7519 FsRtlAllocateExtraCreateParameterFromLookasideList(
7520 IN LPCGUID EcpType,
7521 IN ULONG SizeOfContext,
7522 IN FSRTL_ALLOCATE_ECP_FLAGS Flags,
7523 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
7524 IN OUT PVOID LookasideList,
7525 OUT PVOID *EcpContext);
7526
7527 NTKERNELAPI
7528 NTSTATUS
7529 NTAPI
7530 FsRtlInsertExtraCreateParameter(
7531 IN OUT PECP_LIST EcpList,
7532 IN OUT PVOID EcpContext);
7533
7534 NTKERNELAPI
7535 NTSTATUS
7536 NTAPI
7537 FsRtlFindExtraCreateParameter(
7538 IN PECP_LIST EcpList,
7539 IN LPCGUID EcpType,
7540 OUT PVOID *EcpContext OPTIONAL,
7541 OUT ULONG *EcpContextSize OPTIONAL);
7542
7543 NTKERNELAPI
7544 NTSTATUS
7545 NTAPI
7546 FsRtlRemoveExtraCreateParameter(
7547 IN OUT PECP_LIST EcpList,
7548 IN LPCGUID EcpType,
7549 OUT PVOID *EcpContext,
7550 OUT ULONG *EcpContextSize OPTIONAL);
7551
7552 NTKERNELAPI
7553 NTSTATUS
7554 NTAPI
7555 FsRtlGetEcpListFromIrp(
7556 IN PIRP Irp,
7557 OUT PECP_LIST *EcpList OPTIONAL);
7558
7559 NTKERNELAPI
7560 NTSTATUS
7561 NTAPI
7562 FsRtlSetEcpListIntoIrp(
7563 IN OUT PIRP Irp,
7564 IN PECP_LIST EcpList);
7565
7566 NTKERNELAPI
7567 NTSTATUS
7568 NTAPI
7569 FsRtlGetNextExtraCreateParameter(
7570 IN PECP_LIST EcpList,
7571 IN PVOID CurrentEcpContext OPTIONAL,
7572 OUT LPGUID NextEcpType OPTIONAL,
7573 OUT PVOID *NextEcpContext OPTIONAL,
7574 OUT ULONG *NextEcpContextSize OPTIONAL);
7575
7576 NTKERNELAPI
7577 VOID
7578 NTAPI
7579 FsRtlAcknowledgeEcp(
7580 IN PVOID EcpContext);
7581
7582 NTKERNELAPI
7583 BOOLEAN
7584 NTAPI
7585 FsRtlIsEcpAcknowledged(
7586 IN PVOID EcpContext);
7587
7588 NTKERNELAPI
7589 BOOLEAN
7590 NTAPI
7591 FsRtlIsEcpFromUserMode(
7592 IN PVOID EcpContext);
7593
7594 NTKERNELAPI
7595 NTSTATUS
7596 NTAPI
7597 FsRtlChangeBackingFileObject(
7598 IN PFILE_OBJECT CurrentFileObject OPTIONAL,
7599 IN PFILE_OBJECT NewFileObject,
7600 IN FSRTL_CHANGE_BACKING_TYPE ChangeBackingType,
7601 IN ULONG Flags);
7602
7603 NTKERNELAPI
7604 NTSTATUS
7605 NTAPI
7606 FsRtlLogCcFlushError(
7607 IN PUNICODE_STRING FileName,
7608 IN PDEVICE_OBJECT DeviceObject,
7609 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
7610 IN NTSTATUS FlushError,
7611 IN ULONG Flags);
7612
7613 NTKERNELAPI
7614 BOOLEAN
7615 NTAPI
7616 FsRtlAreVolumeStartupApplicationsComplete(
7617 VOID);
7618
7619 NTKERNELAPI
7620 ULONG
7621 NTAPI
7622 FsRtlQueryMaximumVirtualDiskNestingLevel(
7623 VOID);
7624
7625 NTKERNELAPI
7626 NTSTATUS
7627 NTAPI
7628 FsRtlGetVirtualDiskNestingLevel(
7629 IN PDEVICE_OBJECT DeviceObject,
7630 OUT PULONG NestingLevel,
7631 OUT PULONG NestingFlags OPTIONAL);
7632
7633 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
7634
7635 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
7636 NTKERNELAPI
7637 NTSTATUS
7638 NTAPI
7639 FsRtlCheckOplockEx(
7640 IN POPLOCK Oplock,
7641 IN PIRP Irp,
7642 IN ULONG Flags,
7643 IN PVOID Context OPTIONAL,
7644 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
7645 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
7646
7647 #endif
7648
7649 #if (NTDDI_VERSION >= NTDDI_WIN7)
7650
7651 NTKERNELAPI
7652 BOOLEAN
7653 NTAPI
7654 FsRtlAreThereCurrentOrInProgressFileLocks(
7655 IN PFILE_LOCK FileLock);
7656
7657 NTKERNELAPI
7658 BOOLEAN
7659 NTAPI
7660 FsRtlOplockIsSharedRequest(
7661 IN PIRP Irp);
7662
7663 NTKERNELAPI
7664 NTSTATUS
7665 NTAPI
7666 FsRtlOplockBreakH(
7667 IN POPLOCK Oplock,
7668 IN PIRP Irp,
7669 IN ULONG Flags,
7670 IN PVOID Context OPTIONAL,
7671 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
7672 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
7673
7674 NTKERNELAPI
7675 BOOLEAN
7676 NTAPI
7677 FsRtlCurrentOplockH(
7678 IN POPLOCK Oplock);
7679
7680 NTKERNELAPI
7681 NTSTATUS
7682 NTAPI
7683 FsRtlOplockBreakToNoneEx(
7684 IN OUT POPLOCK Oplock,
7685 IN PIRP Irp,
7686 IN ULONG Flags,
7687 IN PVOID Context OPTIONAL,
7688 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
7689 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
7690
7691 NTKERNELAPI
7692 NTSTATUS
7693 NTAPI
7694 FsRtlOplockFsctrlEx(
7695 IN POPLOCK Oplock,
7696 IN PIRP Irp,
7697 IN ULONG OpenCount,
7698 IN ULONG Flags);
7699
7700 NTKERNELAPI
7701 BOOLEAN
7702 NTAPI
7703 FsRtlOplockKeysEqual(
7704 IN PFILE_OBJECT Fo1 OPTIONAL,
7705 IN PFILE_OBJECT Fo2 OPTIONAL);
7706
7707 NTKERNELAPI
7708 NTSTATUS
7709 NTAPI
7710 FsRtlInitializeExtraCreateParameterList(
7711 IN OUT PECP_LIST EcpList);
7712
7713 NTKERNELAPI
7714 VOID
7715 NTAPI
7716 FsRtlInitializeExtraCreateParameter(
7717 IN PECP_HEADER Ecp,
7718 IN ULONG EcpFlags,
7719 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
7720 IN ULONG TotalSize,
7721 IN LPCGUID EcpType,
7722 IN PVOID ListAllocatedFrom OPTIONAL);
7723
7724 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
7725
7726 NTKERNELAPI
7727 NTSTATUS
7728 NTAPI
7729 FsRtlInsertPerFileContext(
7730 IN PVOID* PerFileContextPointer,
7731 IN PFSRTL_PER_FILE_CONTEXT Ptr);
7732
7733 NTKERNELAPI
7734 PFSRTL_PER_FILE_CONTEXT
7735 NTAPI
7736 FsRtlLookupPerFileContext(
7737 IN PVOID* PerFileContextPointer,
7738 IN PVOID OwnerId OPTIONAL,
7739 IN PVOID InstanceId OPTIONAL);
7740
7741 NTKERNELAPI
7742 PFSRTL_PER_FILE_CONTEXT
7743 NTAPI
7744 FsRtlRemovePerFileContext(
7745 IN PVOID* PerFileContextPointer,
7746 IN PVOID OwnerId OPTIONAL,
7747 IN PVOID InstanceId OPTIONAL);
7748
7749 NTKERNELAPI
7750 VOID
7751 NTAPI
7752 FsRtlTeardownPerFileContexts(
7753 IN PVOID* PerFileContextPointer);
7754
7755 NTKERNELAPI
7756 NTSTATUS
7757 NTAPI
7758 FsRtlInsertPerFileObjectContext(
7759 IN PFILE_OBJECT FileObject,
7760 IN PFSRTL_PER_FILEOBJECT_CONTEXT Ptr);
7761
7762 NTKERNELAPI
7763 PFSRTL_PER_FILEOBJECT_CONTEXT
7764 NTAPI
7765 FsRtlLookupPerFileObjectContext(
7766 IN PFILE_OBJECT FileObject,
7767 IN PVOID OwnerId OPTIONAL,
7768 IN PVOID InstanceId OPTIONAL);
7769
7770 NTKERNELAPI
7771 PFSRTL_PER_FILEOBJECT_CONTEXT
7772 NTAPI
7773 FsRtlRemovePerFileObjectContext(
7774 IN PFILE_OBJECT FileObject,
7775 IN PVOID OwnerId OPTIONAL,
7776 IN PVOID InstanceId OPTIONAL);
7777
7778 #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
7779 FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
7780 )
7781
7782 #define FsRtlAreThereCurrentFileLocks(FL) ( \
7783 ((FL)->FastIoIsQuestionable) \
7784 )
7785
7786 #define FsRtlIncrementLockRequestsInProgress(FL) { \
7787 ASSERT( (FL)->LockRequestsInProgress >= 0 ); \
7788 (void) \
7789 (InterlockedIncrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
7790 }
7791
7792 #define FsRtlDecrementLockRequestsInProgress(FL) { \
7793 ASSERT( (FL)->LockRequestsInProgress > 0 ); \
7794 (void) \
7795 (InterlockedDecrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
7796 }
7797
7798 extern NTKERNELAPI PUSHORT NlsOemLeadByteInfo;
7799 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
7800
7801 #ifdef NLS_MB_CODE_PAGE_TAG
7802 #undef NLS_MB_CODE_PAGE_TAG
7803 #endif
7804 #define NLS_MB_CODE_PAGE_TAG NlsMbOemCodePageTag
7805
7806 /* GCC compatible definition, MS one is retarded */
7807 extern NTKERNELAPI const UCHAR * const FsRtlLegalAnsiCharacterArray;
7808 #define LEGAL_ANSI_CHARACTER_ARRAY FsRtlLegalAnsiCharacterArray
7809
7810 #define FsRtlIsAnsiCharacterWild(C) ( \
7811 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \
7812 )
7813
7814 #define FsRtlIsAnsiCharacterLegalFat(C, WILD) ( \
7815 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_FAT_LEGAL) | \
7816 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7817 )
7818
7819 #define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) ( \
7820 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) | \
7821 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7822 )
7823
7824 #define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) ( \
7825 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) | \
7826 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7827 )
7828
7829 #define FsRtlIsAnsiCharacterLegalNtfsStream(C,WILD_OK) ( \
7830 FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_NTFS_STREAM_LEGAL) \
7831 )
7832
7833 #define FsRtlIsAnsiCharacterLegal(C,FLAGS) ( \
7834 FsRtlTestAnsiCharacter((C), TRUE, FALSE, (FLAGS)) \
7835 )
7836
7837 #define FsRtlTestAnsiCharacter(C, DEFAULT_RET, WILD_OK, FLAGS) ( \
7838 ((SCHAR)(C) < 0) ? DEFAULT_RET : \
7839 FlagOn( LEGAL_ANSI_CHARACTER_ARRAY[(C)], \
7840 (FLAGS) | \
7841 ((WILD_OK) ? FSRTL_WILD_CHARACTER : 0) ) \
7842 )
7843
7844 #define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \
7845 (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \
7846 (NLS_MB_CODE_PAGE_TAG && \
7847 (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \
7848 )
7849
7850 #define FsRtlIsUnicodeCharacterWild(C) ( \
7851 (((C) >= 0x40) ? \
7852 FALSE : \
7853 FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER )) \
7854 )
7855
7856 #define FsRtlInitPerFileContext( _fc, _owner, _inst, _cb) \
7857 ((_fc)->OwnerId = (_owner), \
7858 (_fc)->InstanceId = (_inst), \
7859 (_fc)->FreeCallback = (_cb))
7860
7861 #define FsRtlGetPerFileContextPointer(_fo) \
7862 (FsRtlSupportsPerFileContexts(_fo) ? \
7863 FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer : \
7864 NULL)
7865
7866 #define FsRtlSupportsPerFileContexts(_fo) \
7867 ((FsRtlGetPerStreamContextPointer(_fo) != NULL) && \
7868 (FsRtlGetPerStreamContextPointer(_fo)->Version >= FSRTL_FCB_HEADER_V1) && \
7869 (FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer != NULL))
7870
7871 #define FsRtlSetupAdvancedHeaderEx( _advhdr, _fmutx, _fctxptr ) \
7872 { \
7873 FsRtlSetupAdvancedHeader( _advhdr, _fmutx ); \
7874 if ((_fctxptr) != NULL) { \
7875 (_advhdr)->FileContextSupportPointer = (_fctxptr); \
7876 } \
7877 }
7878
7879 #define FsRtlGetPerStreamContextPointer(FO) ( \
7880 (PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext \
7881 )
7882
7883 #define FsRtlInitPerStreamContext(PSC, O, I, FC) ( \
7884 (PSC)->OwnerId = (O), \
7885 (PSC)->InstanceId = (I), \
7886 (PSC)->FreeCallback = (FC) \
7887 )
7888
7889 #define FsRtlSupportsPerStreamContexts(FO) ( \
7890 (BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) && \
7891 FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \
7892 FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS)) \
7893 )
7894
7895 #define FsRtlLookupPerStreamContext(_sc, _oid, _iid) \
7896 (((NULL != (_sc)) && \
7897 FlagOn((_sc)->Flags2,FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS) && \
7898 !IsListEmpty(&(_sc)->FilterContexts)) ? \
7899 FsRtlLookupPerStreamContextInternal((_sc), (_oid), (_iid)) : \
7900 NULL)
7901
7902 VOID
7903 FORCEINLINE
7904 NTAPI
7905 FsRtlSetupAdvancedHeader(
7906 IN PVOID AdvHdr,
7907 IN PFAST_MUTEX FMutex )
7908 {
7909 PFSRTL_ADVANCED_FCB_HEADER localAdvHdr = (PFSRTL_ADVANCED_FCB_HEADER)AdvHdr;
7910
7911 localAdvHdr->Flags |= FSRTL_FLAG_ADVANCED_HEADER;
7912 localAdvHdr->Flags2 |= FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS;
7913 #if (NTDDI_VERSION >= NTDDI_VISTA)
7914 localAdvHdr->Version = FSRTL_FCB_HEADER_V1;
7915 #else
7916 localAdvHdr->Version = FSRTL_FCB_HEADER_V0;
7917 #endif
7918 InitializeListHead( &localAdvHdr->FilterContexts );
7919 if (FMutex != NULL) {
7920 localAdvHdr->FastMutex = FMutex;
7921 }
7922 #if (NTDDI_VERSION >= NTDDI_VISTA)
7923 *((PULONG_PTR)(&localAdvHdr->PushLock)) = 0;
7924 localAdvHdr->FileContextSupportPointer = NULL;
7925 #endif
7926 }
7927
7928 #define FsRtlInitPerFileObjectContext(_fc, _owner, _inst) \
7929 ((_fc)->OwnerId = (_owner), (_fc)->InstanceId = (_inst))
7930
7931 #define FsRtlCompleteRequest(IRP,STATUS) { \
7932 (IRP)->IoStatus.Status = (STATUS); \
7933 IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
7934 }
7935
7936 #if (NTDDI_VERSION >= NTDDI_WIN7)
7937 typedef struct _ECP_HEADER ECP_HEADER, *PECP_HEADER;
7938 #endif
7939
7940 #if (NTDDI_VERSION >= NTDDI_VISTA)
7941
7942 typedef enum _NETWORK_OPEN_LOCATION_QUALIFIER {
7943 NetworkOpenLocationAny,
7944 NetworkOpenLocationRemote,
7945 NetworkOpenLocationLoopback
7946 } NETWORK_OPEN_LOCATION_QUALIFIER;
7947
7948 typedef enum _NETWORK_OPEN_INTEGRITY_QUALIFIER {
7949 NetworkOpenIntegrityAny,
7950 NetworkOpenIntegrityNone,
7951 NetworkOpenIntegritySigned,
7952 NetworkOpenIntegrityEncrypted,
7953 NetworkOpenIntegrityMaximum
7954 } NETWORK_OPEN_INTEGRITY_QUALIFIER;
7955
7956 #if (NTDDI_VERSION >= NTDDI_WIN7)
7957
7958 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_COLLAPSING 0x1
7959 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_DURABILITY 0x2
7960 #define NETWORK_OPEN_ECP_IN_FLAG_FORCE_BUFFERED_SYNCHRONOUS_IO_HACK 0x80000000
7961
7962 typedef struct _NETWORK_OPEN_ECP_CONTEXT {
7963 USHORT Size;
7964 USHORT Reserved;
7965 struct {
7966 struct {
7967 NETWORK_OPEN_LOCATION_QUALIFIER Location;
7968 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
7969 ULONG Flags;
7970 } in;
7971 struct {
7972 NETWORK_OPEN_LOCATION_QUALIFIER Location;
7973 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
7974 ULONG Flags;
7975 } out;
7976 } DUMMYSTRUCTNAME;
7977 } NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
7978
7979 typedef struct _NETWORK_OPEN_ECP_CONTEXT_V0 {
7980 USHORT Size;
7981 USHORT Reserved;
7982 struct {
7983 struct {
7984 NETWORK_OPEN_LOCATION_QUALIFIER Location;
7985 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
7986 } in;
7987 struct {
7988 NETWORK_OPEN_LOCATION_QUALIFIER Location;
7989 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
7990 } out;
7991 } DUMMYSTRUCTNAME;
7992 } NETWORK_OPEN_ECP_CONTEXT_V0, *PNETWORK_OPEN_ECP_CONTEXT_V0;
7993
7994 #elif (NTDDI_VERSION >= NTDDI_VISTA)
7995 typedef struct _NETWORK_OPEN_ECP_CONTEXT {
7996 USHORT Size;
7997 USHORT Reserved;
7998 struct {
7999 struct {
8000 NETWORK_OPEN_LOCATION_QUALIFIER Location;
8001 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
8002 } in;
8003 struct {
8004 NETWORK_OPEN_LOCATION_QUALIFIER Location;
8005 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
8006 } out;
8007 } DUMMYSTRUCTNAME;
8008 } NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
8009 #endif
8010
8011 DEFINE_GUID(GUID_ECP_NETWORK_OPEN_CONTEXT, 0xc584edbf, 0x00df, 0x4d28, 0xb8, 0x84, 0x35, 0xba, 0xca, 0x89, 0x11, 0xe8 );
8012
8013 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8014
8015
8016 #if (NTDDI_VERSION >= NTDDI_VISTA)
8017
8018 typedef struct _PREFETCH_OPEN_ECP_CONTEXT {
8019 PVOID Context;
8020 } PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT;
8021
8022 DEFINE_GUID(GUID_ECP_PREFETCH_OPEN, 0xe1777b21, 0x847e, 0x4837, 0xaa, 0x45, 0x64, 0x16, 0x1d, 0x28, 0x6, 0x55 );
8023
8024 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8025
8026 #if (NTDDI_VERSION >= NTDDI_WIN7)
8027
8028 DEFINE_GUID (GUID_ECP_NFS_OPEN, 0xf326d30c, 0xe5f8, 0x4fe7, 0xab, 0x74, 0xf5, 0xa3, 0x19, 0x6d, 0x92, 0xdb);
8029 DEFINE_GUID(GUID_ECP_SRV_OPEN, 0xbebfaebc, 0xaabf, 0x489d, 0x9d, 0x2c, 0xe9, 0xe3, 0x61, 0x10, 0x28, 0x53 );
8030
8031 typedef struct sockaddr_storage *PSOCKADDR_STORAGE_NFS;
8032
8033 typedef struct _NFS_OPEN_ECP_CONTEXT {
8034 PUNICODE_STRING ExportAlias;
8035 PSOCKADDR_STORAGE_NFS ClientSocketAddress;
8036 } NFS_OPEN_ECP_CONTEXT, *PNFS_OPEN_ECP_CONTEXT, **PPNFS_OPEN_ECP_CONTEXT;
8037
8038 typedef struct _SRV_OPEN_ECP_CONTEXT {
8039 PUNICODE_STRING ShareName;
8040 PSOCKADDR_STORAGE_NFS SocketAddress;
8041 BOOLEAN OplockBlockState;
8042 BOOLEAN OplockAppState;
8043 BOOLEAN OplockFinalState;
8044 } SRV_OPEN_ECP_CONTEXT, *PSRV_OPEN_ECP_CONTEXT;
8045
8046 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
8047
8048 #define VACB_MAPPING_GRANULARITY (0x40000)
8049 #define VACB_OFFSET_SHIFT (18)
8050
8051 typedef struct _PUBLIC_BCB {
8052 CSHORT NodeTypeCode;
8053 CSHORT NodeByteSize;
8054 ULONG MappedLength;
8055 LARGE_INTEGER MappedFileOffset;
8056 } PUBLIC_BCB, *PPUBLIC_BCB;
8057
8058 typedef struct _CC_FILE_SIZES {
8059 LARGE_INTEGER AllocationSize;
8060 LARGE_INTEGER FileSize;
8061 LARGE_INTEGER ValidDataLength;
8062 } CC_FILE_SIZES, *PCC_FILE_SIZES;
8063
8064 typedef BOOLEAN
8065 (NTAPI *PACQUIRE_FOR_LAZY_WRITE) (
8066 IN PVOID Context,
8067 IN BOOLEAN Wait);
8068
8069 typedef VOID
8070 (NTAPI *PRELEASE_FROM_LAZY_WRITE) (
8071 IN PVOID Context);
8072
8073 typedef BOOLEAN
8074 (NTAPI *PACQUIRE_FOR_READ_AHEAD) (
8075 IN PVOID Context,
8076 IN BOOLEAN Wait);
8077
8078 typedef VOID
8079 (NTAPI *PRELEASE_FROM_READ_AHEAD) (
8080 IN PVOID Context);
8081
8082 typedef struct _CACHE_MANAGER_CALLBACKS {
8083 PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite;
8084 PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite;
8085 PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead;
8086 PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead;
8087 } CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
8088
8089 typedef struct _CACHE_UNINITIALIZE_EVENT {
8090 struct _CACHE_UNINITIALIZE_EVENT *Next;
8091 KEVENT Event;
8092 } CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT;
8093
8094 typedef VOID
8095 (NTAPI *PDIRTY_PAGE_ROUTINE) (
8096 IN PFILE_OBJECT FileObject,
8097 IN PLARGE_INTEGER FileOffset,
8098 IN ULONG Length,
8099 IN PLARGE_INTEGER OldestLsn,
8100 IN PLARGE_INTEGER NewestLsn,
8101 IN PVOID Context1,
8102 IN PVOID Context2);
8103
8104 typedef VOID
8105 (NTAPI *PFLUSH_TO_LSN) (
8106 IN PVOID LogHandle,
8107 IN LARGE_INTEGER Lsn);
8108
8109 typedef VOID
8110 (NTAPI *PCC_POST_DEFERRED_WRITE) (
8111 IN PVOID Context1,
8112 IN PVOID Context2);
8113
8114 #define CcIsFileCached(FO) ( \
8115 ((FO)->SectionObjectPointer != NULL) && \
8116 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
8117 )
8118
8119 extern ULONG CcFastMdlReadWait;
8120
8121 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8122
8123 NTKERNELAPI
8124 VOID
8125 NTAPI
8126 CcInitializeCacheMap(
8127 IN PFILE_OBJECT FileObject,
8128 IN PCC_FILE_SIZES FileSizes,
8129 IN BOOLEAN PinAccess,
8130 IN PCACHE_MANAGER_CALLBACKS Callbacks,
8131 IN PVOID LazyWriteContext);
8132
8133 NTKERNELAPI
8134 BOOLEAN
8135 NTAPI
8136 CcUninitializeCacheMap(
8137 IN PFILE_OBJECT FileObject,
8138 IN PLARGE_INTEGER TruncateSize OPTIONAL,
8139 IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL);
8140
8141 NTKERNELAPI
8142 VOID
8143 NTAPI
8144 CcSetFileSizes(
8145 IN PFILE_OBJECT FileObject,
8146 IN PCC_FILE_SIZES FileSizes);
8147
8148 NTKERNELAPI
8149 VOID
8150 NTAPI
8151 CcSetDirtyPageThreshold(
8152 IN PFILE_OBJECT FileObject,
8153 IN ULONG DirtyPageThreshold);
8154
8155 NTKERNELAPI
8156 VOID
8157 NTAPI
8158 CcFlushCache(
8159 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
8160 IN PLARGE_INTEGER FileOffset OPTIONAL,
8161 IN ULONG Length,
8162 OUT PIO_STATUS_BLOCK IoStatus OPTIONAL);
8163
8164 NTKERNELAPI
8165 LARGE_INTEGER
8166 NTAPI
8167 CcGetFlushedValidData(
8168 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
8169 IN BOOLEAN BcbListHeld);
8170
8171 NTKERNELAPI
8172 BOOLEAN
8173 NTAPI
8174 CcZeroData(
8175 IN PFILE_OBJECT FileObject,
8176 IN PLARGE_INTEGER StartOffset,
8177 IN PLARGE_INTEGER EndOffset,
8178 IN BOOLEAN Wait);
8179
8180 NTKERNELAPI
8181 PVOID
8182 NTAPI
8183 CcRemapBcb(
8184 IN PVOID Bcb);
8185
8186 NTKERNELAPI
8187 VOID
8188 NTAPI
8189 CcRepinBcb(
8190 IN PVOID Bcb);
8191
8192 NTKERNELAPI
8193 VOID
8194 NTAPI
8195 CcUnpinRepinnedBcb(
8196 IN PVOID Bcb,
8197 IN BOOLEAN WriteThrough,
8198 OUT PIO_STATUS_BLOCK IoStatus);
8199
8200 NTKERNELAPI
8201 PFILE_OBJECT
8202 NTAPI
8203 CcGetFileObjectFromSectionPtrs(
8204 IN PSECTION_OBJECT_POINTERS SectionObjectPointer);
8205
8206 NTKERNELAPI
8207 PFILE_OBJECT
8208 NTAPI
8209 CcGetFileObjectFromBcb(
8210 IN PVOID Bcb);
8211
8212 NTKERNELAPI
8213 BOOLEAN
8214 NTAPI
8215 CcCanIWrite(
8216 IN PFILE_OBJECT FileObject,
8217 IN ULONG BytesToWrite,
8218 IN BOOLEAN Wait,
8219 IN BOOLEAN Retrying);
8220
8221 NTKERNELAPI
8222 VOID
8223 NTAPI
8224 CcDeferWrite(
8225 IN PFILE_OBJECT FileObject,
8226 IN PCC_POST_DEFERRED_WRITE PostRoutine,
8227 IN PVOID Context1,
8228 IN PVOID Context2,
8229 IN ULONG BytesToWrite,
8230 IN BOOLEAN Retrying);
8231
8232 NTKERNELAPI
8233 BOOLEAN
8234 NTAPI
8235 CcCopyRead(
8236 IN PFILE_OBJECT FileObject,
8237 IN PLARGE_INTEGER FileOffset,
8238 IN ULONG Length,
8239 IN BOOLEAN Wait,
8240 OUT PVOID Buffer,
8241 OUT PIO_STATUS_BLOCK IoStatus);
8242
8243 NTKERNELAPI
8244 VOID
8245 NTAPI
8246 CcFastCopyRead(
8247 IN PFILE_OBJECT FileObject,
8248 IN ULONG FileOffset,
8249 IN ULONG Length,
8250 IN ULONG PageCount,
8251 OUT PVOID Buffer,
8252 OUT PIO_STATUS_BLOCK IoStatus);
8253
8254 NTKERNELAPI
8255 BOOLEAN
8256 NTAPI
8257 CcCopyWrite(
8258 IN PFILE_OBJECT FileObject,
8259 IN PLARGE_INTEGER FileOffset,
8260 IN ULONG Length,
8261 IN BOOLEAN Wait,
8262 IN PVOID Buffer);
8263
8264 NTKERNELAPI
8265 VOID
8266 NTAPI
8267 CcFastCopyWrite(
8268 IN PFILE_OBJECT FileObject,
8269 IN ULONG FileOffset,
8270 IN ULONG Length,
8271 IN PVOID Buffer);
8272
8273 NTKERNELAPI
8274 VOID
8275 NTAPI
8276 CcMdlRead(
8277 IN PFILE_OBJECT FileObject,
8278 IN PLARGE_INTEGER FileOffset,
8279 IN ULONG Length,
8280 OUT PMDL *MdlChain,
8281 OUT PIO_STATUS_BLOCK IoStatus);
8282
8283 NTKERNELAPI
8284 VOID
8285 NTAPI
8286 CcMdlReadComplete(
8287 IN PFILE_OBJECT FileObject,
8288 IN PMDL MdlChain);
8289
8290 NTKERNELAPI
8291 VOID
8292 NTAPI
8293 CcPrepareMdlWrite(
8294 IN PFILE_OBJECT FileObject,
8295 IN PLARGE_INTEGER FileOffset,
8296 IN ULONG Length,
8297 OUT PMDL *MdlChain,
8298 OUT PIO_STATUS_BLOCK IoStatus);
8299
8300 NTKERNELAPI
8301 VOID
8302 NTAPI
8303 CcMdlWriteComplete(
8304 IN PFILE_OBJECT FileObject,
8305 IN PLARGE_INTEGER FileOffset,
8306 IN PMDL MdlChain);
8307
8308 NTKERNELAPI
8309 VOID
8310 NTAPI
8311 CcScheduleReadAhead(
8312 IN PFILE_OBJECT FileObject,
8313 IN PLARGE_INTEGER FileOffset,
8314 IN ULONG Length);
8315
8316 NTKERNELAPI
8317 NTSTATUS
8318 NTAPI
8319 CcWaitForCurrentLazyWriterActivity(
8320 VOID);
8321
8322 NTKERNELAPI
8323 VOID
8324 NTAPI
8325 CcSetReadAheadGranularity(
8326 IN PFILE_OBJECT FileObject,
8327 IN ULONG Granularity);
8328
8329 NTKERNELAPI
8330 BOOLEAN
8331 NTAPI
8332 CcPinRead(
8333 IN PFILE_OBJECT FileObject,
8334 IN PLARGE_INTEGER FileOffset,
8335 IN ULONG Length,
8336 IN ULONG Flags,
8337 OUT PVOID *Bcb,
8338 OUT PVOID *Buffer);
8339
8340 NTKERNELAPI
8341 BOOLEAN
8342 NTAPI
8343 CcPinMappedData(
8344 IN PFILE_OBJECT FileObject,
8345 IN PLARGE_INTEGER FileOffset,
8346 IN ULONG Length,
8347 IN ULONG Flags,
8348 IN OUT PVOID *Bcb);
8349
8350 NTKERNELAPI
8351 BOOLEAN
8352 NTAPI
8353 CcPreparePinWrite(
8354 IN PFILE_OBJECT FileObject,
8355 IN PLARGE_INTEGER FileOffset,
8356 IN ULONG Length,
8357 IN BOOLEAN Zero,
8358 IN ULONG Flags,
8359 OUT PVOID *Bcb,
8360 OUT PVOID *Buffer);
8361
8362 NTKERNELAPI
8363 VOID
8364 NTAPI
8365 CcSetDirtyPinnedData(
8366 IN PVOID BcbVoid,
8367 IN PLARGE_INTEGER Lsn OPTIONAL);
8368
8369 NTKERNELAPI
8370 VOID
8371 NTAPI
8372 CcUnpinData(
8373 IN PVOID Bcb);
8374
8375 NTKERNELAPI
8376 VOID
8377 NTAPI
8378 CcSetBcbOwnerPointer(
8379 IN PVOID Bcb,
8380 IN PVOID OwnerPointer);
8381
8382 NTKERNELAPI
8383 VOID
8384 NTAPI
8385 CcUnpinDataForThread(
8386 IN PVOID Bcb,
8387 IN ERESOURCE_THREAD ResourceThreadId);
8388
8389 NTKERNELAPI
8390 VOID
8391 NTAPI
8392 CcSetAdditionalCacheAttributes(
8393 IN PFILE_OBJECT FileObject,
8394 IN BOOLEAN DisableReadAhead,
8395 IN BOOLEAN DisableWriteBehind);
8396
8397 NTKERNELAPI
8398 BOOLEAN
8399 NTAPI
8400 CcIsThereDirtyData(
8401 IN PVPB Vpb);
8402
8403 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
8404
8405 #if (NTDDI_VERSION >= NTDDI_WINXP)
8406
8407 NTKERNELAPI
8408 VOID
8409 NTAPI
8410 CcMdlWriteAbort(
8411 IN PFILE_OBJECT FileObject,
8412 IN PMDL MdlChain);
8413
8414 NTKERNELAPI
8415 VOID
8416 NTAPI
8417 CcSetLogHandleForFile(
8418 IN PFILE_OBJECT FileObject,
8419 IN PVOID LogHandle,
8420 IN PFLUSH_TO_LSN FlushToLsnRoutine);
8421
8422 NTKERNELAPI
8423 LARGE_INTEGER
8424 NTAPI
8425 CcGetDirtyPages(
8426 IN PVOID LogHandle,
8427 IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
8428 IN PVOID Context1,
8429 IN PVOID Context2);
8430
8431 #endif
8432
8433 #if (NTDDI_VERSION >= NTDDI_WINXP)
8434 NTKERNELAPI
8435 BOOLEAN
8436 NTAPI
8437 CcMapData(
8438 IN PFILE_OBJECT FileObject,
8439 IN PLARGE_INTEGER FileOffset,
8440 IN ULONG Length,
8441 IN ULONG Flags,
8442 OUT PVOID *Bcb,
8443 OUT PVOID *Buffer);
8444 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
8445 NTKERNELAPI
8446 BOOLEAN
8447 NTAPI
8448 CcMapData(
8449 IN PFILE_OBJECT FileObject,
8450 IN PLARGE_INTEGER FileOffset,
8451 IN ULONG Length,
8452 IN BOOLEAN Wait,
8453 OUT PVOID *Bcb,
8454 OUT PVOID *Buffer);
8455 #endif
8456
8457 #if (NTDDI_VERSION >= NTDDI_VISTA)
8458
8459 NTKERNELAPI
8460 NTSTATUS
8461 NTAPI
8462 CcSetFileSizesEx(
8463 IN PFILE_OBJECT FileObject,
8464 IN PCC_FILE_SIZES FileSizes);
8465
8466 NTKERNELAPI
8467 PFILE_OBJECT
8468 NTAPI
8469 CcGetFileObjectFromSectionPtrsRef(
8470 IN PSECTION_OBJECT_POINTERS SectionObjectPointer);
8471
8472 NTKERNELAPI
8473 VOID
8474 NTAPI
8475 CcSetParallelFlushFile(
8476 IN PFILE_OBJECT FileObject,
8477 IN BOOLEAN EnableParallelFlush);
8478
8479 NTKERNELAPI
8480 BOOLEAN
8481 CcIsThereDirtyDataEx(
8482 IN PVPB Vpb,
8483 IN PULONG NumberOfDirtyPages OPTIONAL);
8484
8485 #endif
8486
8487 #if (NTDDI_VERSION >= NTDDI_WIN7)
8488 NTKERNELAPI
8489 VOID
8490 NTAPI
8491 CcCoherencyFlushAndPurgeCache(
8492 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
8493 IN PLARGE_INTEGER FileOffset OPTIONAL,
8494 IN ULONG Length,
8495 OUT PIO_STATUS_BLOCK IoStatus,
8496 IN ULONG Flags OPTIONAL);
8497 #endif
8498
8499 #define CcGetFileSizePointer(FO) ( \
8500 ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
8501 )
8502
8503 #define UNINITIALIZE_CACHE_MAPS (1)
8504 #define DO_NOT_RETRY_PURGE (2)
8505 #define DO_NOT_PURGE_DIRTY_PAGES (0x4)
8506
8507 #define CC_FLUSH_AND_PURGE_NO_PURGE (0x1)
8508
8509 #if (NTDDI_VERSION >= NTDDI_VISTA)
8510 NTKERNELAPI
8511 BOOLEAN
8512 NTAPI
8513 CcPurgeCacheSection(
8514 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
8515 IN PLARGE_INTEGER FileOffset OPTIONAL,
8516 IN ULONG Length,
8517 IN ULONG Flags);
8518 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
8519 NTKERNELAPI
8520 BOOLEAN
8521 NTAPI
8522 CcPurgeCacheSection(
8523 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
8524 IN PLARGE_INTEGER FileOffset OPTIONAL,
8525 IN ULONG Length,
8526 IN BOOLEAN UninitializeCacheMaps);
8527 #endif
8528
8529 #if (NTDDI_VERSION >= NTDDI_WIN7)
8530 NTKERNELAPI
8531 BOOLEAN
8532 NTAPI
8533 CcCopyWriteWontFlush(
8534 IN PFILE_OBJECT FileObject,
8535 IN PLARGE_INTEGER FileOffset,
8536 IN ULONG Length);
8537 #else
8538 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
8539 #endif
8540
8541 #define CcReadAhead(FO, FOFF, LEN) ( \
8542 if ((LEN) >= 256) { \
8543 CcScheduleReadAhead((FO), (FOFF), (LEN)); \
8544 } \
8545 )
8546
8547 #define PIN_WAIT (1)
8548 #define PIN_EXCLUSIVE (2)
8549 #define PIN_NO_READ (4)
8550 #define PIN_IF_BCB (8)
8551 #define PIN_CALLER_TRACKS_DIRTY_DATA (32)
8552 #define PIN_HIGH_PRIORITY (64)
8553
8554 #define MAP_WAIT 1
8555 #define MAP_NO_READ (16)
8556 #define MAP_HIGH_PRIORITY (64)
8557
8558 #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
8559 #define IOCTL_REDIR_QUERY_PATH_EX CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 100, METHOD_NEITHER, FILE_ANY_ACCESS)
8560
8561 typedef struct _QUERY_PATH_REQUEST {
8562 ULONG PathNameLength;
8563 PIO_SECURITY_CONTEXT SecurityContext;
8564 WCHAR FilePathName[1];
8565 } QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST;
8566
8567 typedef struct _QUERY_PATH_REQUEST_EX {
8568 PIO_SECURITY_CONTEXT pSecurityContext;
8569 ULONG EaLength;
8570 PVOID pEaBuffer;
8571 UNICODE_STRING PathName;
8572 UNICODE_STRING DomainServiceName;
8573 ULONG_PTR Reserved[ 3 ];
8574 } QUERY_PATH_REQUEST_EX, *PQUERY_PATH_REQUEST_EX;
8575
8576 typedef struct _QUERY_PATH_RESPONSE {
8577 ULONG LengthAccepted;
8578 } QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE;
8579
8580 #define VOLSNAPCONTROLTYPE 0x00000053
8581 #define IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES CTL_CODE(VOLSNAPCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
8582
8583 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8584
8585 NTSYSAPI
8586 NTSTATUS
8587 NTAPI
8588 ZwQueryObject(
8589 IN HANDLE Handle OPTIONAL,
8590 IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
8591 OUT PVOID ObjectInformation OPTIONAL,
8592 IN ULONG ObjectInformationLength,
8593 OUT PULONG ReturnLength OPTIONAL);
8594
8595 NTSYSAPI
8596 NTSTATUS
8597 NTAPI
8598 ZwNotifyChangeKey(
8599 IN HANDLE KeyHandle,
8600 IN HANDLE EventHandle OPTIONAL,
8601 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
8602 IN PVOID ApcContext OPTIONAL,
8603 OUT PIO_STATUS_BLOCK IoStatusBlock,
8604 IN ULONG NotifyFilter,
8605 IN BOOLEAN WatchSubtree,
8606 OUT PVOID Buffer,
8607 IN ULONG BufferLength,
8608 IN BOOLEAN Asynchronous);
8609
8610 NTSYSAPI
8611 NTSTATUS
8612 NTAPI
8613 ZwCreateEvent(
8614 OUT PHANDLE EventHandle,
8615 IN ACCESS_MASK DesiredAccess,
8616 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
8617 IN EVENT_TYPE EventType,
8618 IN BOOLEAN InitialState);
8619
8620 NTSYSAPI
8621 NTSTATUS
8622 NTAPI
8623 ZwDeleteFile(
8624 IN POBJECT_ATTRIBUTES ObjectAttributes);
8625
8626 NTSYSAPI
8627 NTSTATUS
8628 NTAPI
8629 ZwQueryDirectoryFile(
8630 IN HANDLE FileHandle,
8631 IN HANDLE Event OPTIONAL,
8632 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
8633 IN PVOID ApcContext OPTIONAL,
8634 OUT PIO_STATUS_BLOCK IoStatusBlock,
8635 OUT PVOID FileInformation,
8636 IN ULONG Length,
8637 IN FILE_INFORMATION_CLASS FileInformationClass,
8638 IN BOOLEAN ReturnSingleEntry,
8639 IN PUNICODE_STRING FileName OPTIONAL,
8640 IN BOOLEAN RestartScan);
8641
8642 NTSYSAPI
8643 NTSTATUS
8644 NTAPI
8645 ZwSetVolumeInformationFile(
8646 IN HANDLE FileHandle,
8647 OUT PIO_STATUS_BLOCK IoStatusBlock,
8648 IN PVOID FsInformation,
8649 IN ULONG Length,
8650 IN FS_INFORMATION_CLASS FsInformationClass);
8651
8652 NTSYSAPI
8653 NTSTATUS
8654 NTAPI
8655 ZwFsControlFile(
8656 IN HANDLE FileHandle,
8657 IN HANDLE Event OPTIONAL,
8658 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
8659 IN PVOID ApcContext OPTIONAL,
8660 OUT PIO_STATUS_BLOCK IoStatusBlock,
8661 IN ULONG FsControlCode,
8662 IN PVOID InputBuffer OPTIONAL,
8663 IN ULONG InputBufferLength,
8664 OUT PVOID OutputBuffer OPTIONAL,
8665 IN ULONG OutputBufferLength);
8666
8667 NTSYSAPI
8668 NTSTATUS
8669 NTAPI
8670 ZwDuplicateObject(
8671 IN HANDLE SourceProcessHandle,
8672 IN HANDLE SourceHandle,
8673 IN HANDLE TargetProcessHandle OPTIONAL,
8674 OUT PHANDLE TargetHandle OPTIONAL,
8675 IN ACCESS_MASK DesiredAccess,
8676 IN ULONG HandleAttributes,
8677 IN ULONG Options);
8678
8679 NTSYSAPI
8680 NTSTATUS
8681 NTAPI
8682 ZwOpenDirectoryObject(
8683 OUT PHANDLE DirectoryHandle,
8684 IN ACCESS_MASK DesiredAccess,
8685 IN POBJECT_ATTRIBUTES ObjectAttributes);
8686
8687 NTSYSAPI
8688 NTSTATUS
8689 NTAPI
8690 ZwAllocateVirtualMemory(
8691 IN HANDLE ProcessHandle,
8692 IN OUT PVOID *BaseAddress,
8693 IN ULONG_PTR ZeroBits,
8694 IN OUT PSIZE_T RegionSize,
8695 IN ULONG AllocationType,
8696 IN ULONG Protect);
8697
8698 NTSYSAPI
8699 NTSTATUS
8700 NTAPI
8701 ZwFreeVirtualMemory(
8702 IN HANDLE ProcessHandle,
8703 IN OUT PVOID *BaseAddress,
8704 IN OUT PSIZE_T RegionSize,
8705 IN ULONG FreeType);
8706
8707 NTSYSAPI
8708 NTSTATUS
8709 NTAPI
8710 ZwWaitForSingleObject(
8711 IN HANDLE Handle,
8712 IN BOOLEAN Alertable,
8713 IN PLARGE_INTEGER Timeout OPTIONAL);
8714
8715 NTSYSAPI
8716 NTSTATUS
8717 NTAPI
8718 ZwSetEvent(
8719 IN HANDLE EventHandle,
8720 OUT PLONG PreviousState OPTIONAL);
8721
8722 NTSYSAPI
8723 NTSTATUS
8724 NTAPI
8725 ZwFlushVirtualMemory(
8726 IN HANDLE ProcessHandle,
8727 IN OUT PVOID *BaseAddress,
8728 IN OUT PSIZE_T RegionSize,
8729 OUT PIO_STATUS_BLOCK IoStatusBlock);
8730
8731 NTSYSAPI
8732 NTSTATUS
8733 NTAPI
8734 ZwQueryInformationToken(
8735 IN HANDLE TokenHandle,
8736 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
8737 OUT PVOID TokenInformation,
8738 IN ULONG Length,
8739 OUT PULONG ResultLength);
8740
8741 NTSYSAPI
8742 NTSTATUS
8743 NTAPI
8744 ZwSetSecurityObject(
8745 IN HANDLE Handle,
8746 IN SECURITY_INFORMATION SecurityInformation,
8747 IN PSECURITY_DESCRIPTOR SecurityDescriptor);
8748
8749 NTSYSAPI
8750 NTSTATUS
8751 NTAPI
8752 ZwQuerySecurityObject(
8753 IN HANDLE FileHandle,
8754 IN SECURITY_INFORMATION SecurityInformation,
8755 OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
8756 IN ULONG Length,
8757 OUT PULONG ResultLength);
8758
8759 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
8760
8761 #if (NTDDI_VERSION >= NTDDI_WINXP)
8762
8763 NTSYSAPI
8764 NTSTATUS
8765 NTAPI
8766 ZwOpenProcessTokenEx(
8767 IN HANDLE ProcessHandle,
8768 IN ACCESS_MASK DesiredAccess,
8769 IN ULONG HandleAttributes,
8770 OUT PHANDLE TokenHandle);
8771
8772 NTSYSAPI
8773 NTSTATUS
8774 NTAPI
8775 ZwOpenThreadTokenEx(
8776 IN HANDLE ThreadHandle,
8777 IN ACCESS_MASK DesiredAccess,
8778 IN BOOLEAN OpenAsSelf,
8779 IN ULONG HandleAttributes,
8780 OUT PHANDLE TokenHandle);
8781
8782 #endif
8783
8784 #if (NTDDI_VERSION >= NTDDI_VISTA)
8785
8786 NTSYSAPI
8787 NTSTATUS
8788 NTAPI
8789 ZwLockFile(
8790 IN HANDLE FileHandle,
8791 IN HANDLE Event OPTIONAL,
8792 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
8793 IN PVOID ApcContext OPTIONAL,
8794 OUT PIO_STATUS_BLOCK IoStatusBlock,
8795 IN PLARGE_INTEGER ByteOffset,
8796 IN PLARGE_INTEGER Length,
8797 IN ULONG Key,
8798 IN BOOLEAN FailImmediately,
8799 IN BOOLEAN ExclusiveLock);
8800
8801 NTSYSAPI
8802 NTSTATUS
8803 NTAPI
8804 ZwUnlockFile(
8805 IN HANDLE FileHandle,
8806 OUT PIO_STATUS_BLOCK IoStatusBlock,
8807 IN PLARGE_INTEGER ByteOffset,
8808 IN PLARGE_INTEGER Length,
8809 IN ULONG Key);
8810
8811 NTSYSAPI
8812 NTSTATUS
8813 NTAPI
8814 ZwQueryQuotaInformationFile(
8815 IN HANDLE FileHandle,
8816 OUT PIO_STATUS_BLOCK IoStatusBlock,
8817 OUT PVOID Buffer,
8818 IN ULONG Length,
8819 IN BOOLEAN ReturnSingleEntry,
8820 IN PVOID SidList,
8821 IN ULONG SidListLength,
8822 IN PSID StartSid OPTIONAL,
8823 IN BOOLEAN RestartScan);
8824
8825 NTSYSAPI
8826 NTSTATUS
8827 NTAPI
8828 ZwSetQuotaInformationFile(
8829 IN HANDLE FileHandle,
8830 OUT PIO_STATUS_BLOCK IoStatusBlock,
8831 IN PVOID Buffer,
8832 IN ULONG Length);
8833
8834 NTSYSAPI
8835 NTSTATUS
8836 NTAPI
8837 ZwFlushBuffersFile(
8838 IN HANDLE FileHandle,
8839 OUT PIO_STATUS_BLOCK IoStatusBlock);
8840
8841 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8842
8843 #if (NTDDI_VERSION >= NTDDI_WIN7)
8844 NTSYSAPI
8845 NTSTATUS
8846 NTAPI
8847 ZwSetInformationToken(
8848 IN HANDLE TokenHandle,
8849 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
8850 IN PVOID TokenInformation,
8851 IN ULONG TokenInformationLength);
8852 #endif
8853
8854 NTSYSAPI
8855 NTSTATUS
8856 NTAPI
8857 ZwQueryEaFile(
8858 IN HANDLE FileHandle,
8859 OUT PIO_STATUS_BLOCK IoStatusBlock,
8860 OUT PVOID Buffer,
8861 IN ULONG Length,
8862 IN BOOLEAN ReturnSingleEntry,
8863 IN PVOID EaList OPTIONAL,
8864 IN ULONG EaListLength,
8865 IN PULONG EaIndex OPTIONAL,
8866 IN BOOLEAN RestartScan);
8867
8868 NTSYSAPI
8869 NTSTATUS
8870 NTAPI
8871 ZwSetEaFile(
8872 IN HANDLE FileHandle,
8873 OUT PIO_STATUS_BLOCK IoStatusBlock,
8874 OUT PVOID Buffer,
8875 IN ULONG Length);
8876
8877 NTSYSAPI
8878 NTSTATUS
8879 NTAPI
8880 ZwDuplicateToken(
8881 IN HANDLE ExistingTokenHandle,
8882 IN ACCESS_MASK DesiredAccess,
8883 IN POBJECT_ATTRIBUTES ObjectAttributes,
8884 IN BOOLEAN EffectiveOnly,
8885 IN TOKEN_TYPE TokenType,
8886 OUT PHANDLE NewTokenHandle);
8887
8888 #pragma pack(push,4)
8889
8890 #ifndef VER_PRODUCTBUILD
8891 #define VER_PRODUCTBUILD 10000
8892 #endif
8893
8894 #include "csq.h"
8895
8896 extern PACL SePublicDefaultDacl;
8897 extern PACL SeSystemDefaultDacl;
8898
8899 #define FS_LFN_APIS 0x00004000
8900
8901 #define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
8902 #define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
8903 #define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
8904 #define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
8905 #define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
8906 #define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
8907 #define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
8908 #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
8909 #define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
8910 #define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
8911 #define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
8912 #define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
8913 #define FILE_STORAGE_TYPE_MASK 0x000f0000
8914 #define FILE_STORAGE_TYPE_SHIFT 16
8915
8916 #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
8917
8918 #ifdef _X86_
8919 #define HARDWARE_PTE HARDWARE_PTE_X86
8920 #define PHARDWARE_PTE PHARDWARE_PTE_X86
8921 #endif
8922
8923 #define IO_ATTACH_DEVICE_API 0x80000000
8924
8925 #define IO_TYPE_APC 18
8926 #define IO_TYPE_DPC 19
8927 #define IO_TYPE_DEVICE_QUEUE 20
8928 #define IO_TYPE_EVENT_PAIR 21
8929 #define IO_TYPE_INTERRUPT 22
8930 #define IO_TYPE_PROFILE 23
8931
8932 #define IRP_BEING_VERIFIED 0x10
8933
8934 #define MAILSLOT_CLASS_FIRSTCLASS 1
8935 #define MAILSLOT_CLASS_SECONDCLASS 2
8936
8937 #define MAILSLOT_SIZE_AUTO 0
8938
8939 #define MEM_DOS_LIM 0x40000000
8940
8941 #define OB_TYPE_TYPE 1
8942 #define OB_TYPE_DIRECTORY 2
8943 #define OB_TYPE_SYMBOLIC_LINK 3
8944 #define OB_TYPE_TOKEN 4
8945 #define OB_TYPE_PROCESS 5
8946 #define OB_TYPE_THREAD 6
8947 #define OB_TYPE_EVENT 7
8948 #define OB_TYPE_EVENT_PAIR 8
8949 #define OB_TYPE_MUTANT 9
8950 #define OB_TYPE_SEMAPHORE 10
8951 #define OB_TYPE_TIMER 11
8952 #define OB_TYPE_PROFILE 12
8953 #define OB_TYPE_WINDOW_STATION 13
8954 #define OB_TYPE_DESKTOP 14
8955 #define OB_TYPE_SECTION 15
8956 #define OB_TYPE_KEY 16
8957 #define OB_TYPE_PORT 17
8958 #define OB_TYPE_ADAPTER 18
8959 #define OB_TYPE_CONTROLLER 19
8960 #define OB_TYPE_DEVICE 20
8961 #define OB_TYPE_DRIVER 21
8962 #define OB_TYPE_IO_COMPLETION 22
8963 #define OB_TYPE_FILE 23
8964
8965 #define SEC_BASED 0x00200000
8966
8967 /* end winnt.h */
8968
8969 #define TOKEN_HAS_ADMIN_GROUP 0x08
8970
8971 #if (VER_PRODUCTBUILD >= 1381)
8972 #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
8973 #endif /* (VER_PRODUCTBUILD >= 1381) */
8974
8975 #if (VER_PRODUCTBUILD >= 2195)
8976
8977 #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
8978 #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
8979
8980 #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
8981
8982 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
8983 #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
8984 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
8985 #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
8986 #endif /* (VER_PRODUCTBUILD >= 2195) */
8987
8988 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
8989 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
8990 #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
8991 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
8992 #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
8993 #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
8994 #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
8995 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
8996
8997 typedef enum _FILE_STORAGE_TYPE {
8998 StorageTypeDefault = 1,
8999 StorageTypeDirectory,
9000 StorageTypeFile,
9001 StorageTypeJunctionPoint,
9002 StorageTypeCatalog,
9003 StorageTypeStructuredStorage,
9004 StorageTypeEmbedding,
9005 StorageTypeStream
9006 } FILE_STORAGE_TYPE;
9007
9008 typedef struct _OBJECT_BASIC_INFORMATION
9009 {
9010 ULONG Attributes;
9011 ACCESS_MASK GrantedAccess;
9012 ULONG HandleCount;
9013 ULONG PointerCount;
9014 ULONG PagedPoolCharge;
9015 ULONG NonPagedPoolCharge;
9016 ULONG Reserved[ 3 ];
9017 ULONG NameInfoSize;
9018 ULONG TypeInfoSize;
9019 ULONG SecurityDescriptorSize;
9020 LARGE_INTEGER CreationTime;
9021 } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
9022
9023 typedef struct _BITMAP_RANGE {
9024 LIST_ENTRY Links;
9025 LONGLONG BasePage;
9026 ULONG FirstDirtyPage;
9027 ULONG LastDirtyPage;
9028 ULONG DirtyPages;
9029 PULONG Bitmap;
9030 } BITMAP_RANGE, *PBITMAP_RANGE;
9031
9032 typedef struct _FILE_COPY_ON_WRITE_INFORMATION {
9033 BOOLEAN ReplaceIfExists;
9034 HANDLE RootDirectory;
9035 ULONG FileNameLength;
9036 WCHAR FileName[1];
9037 } FILE_COPY_ON_WRITE_INFORMATION, *PFILE_COPY_ON_WRITE_INFORMATION;
9038
9039 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
9040 ULONG NextEntryOffset;
9041 ULONG FileIndex;
9042 LARGE_INTEGER CreationTime;
9043 LARGE_INTEGER LastAccessTime;
9044 LARGE_INTEGER LastWriteTime;
9045 LARGE_INTEGER ChangeTime;
9046 LARGE_INTEGER EndOfFile;
9047 LARGE_INTEGER AllocationSize;
9048 ULONG FileAttributes;
9049 ULONG FileNameLength;
9050 ULONG EaSize;
9051 WCHAR FileName[ANYSIZE_ARRAY];
9052 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION;
9053
9054 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
9055 typedef struct _FILE_SHARED_LOCK_ENTRY {
9056 PVOID Unknown1;
9057 PVOID Unknown2;
9058 FILE_LOCK_INFO FileLock;
9059 } FILE_SHARED_LOCK_ENTRY, *PFILE_SHARED_LOCK_ENTRY;
9060
9061 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
9062 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY {
9063 LIST_ENTRY ListEntry;
9064 PVOID Unknown1;
9065 PVOID Unknown2;
9066 FILE_LOCK_INFO FileLock;
9067 } FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
9068
9069 typedef struct _FILE_MAILSLOT_PEEK_BUFFER {
9070 ULONG ReadDataAvailable;
9071 ULONG NumberOfMessages;
9072 ULONG MessageLength;
9073 } FILE_MAILSLOT_PEEK_BUFFER, *PFILE_MAILSLOT_PEEK_BUFFER;
9074
9075 typedef struct _FILE_OLE_CLASSID_INFORMATION {
9076 GUID ClassId;
9077 } FILE_OLE_CLASSID_INFORMATION, *PFILE_OLE_CLASSID_INFORMATION;
9078
9079 typedef struct _FILE_OLE_ALL_INFORMATION {
9080 FILE_BASIC_INFORMATION BasicInformation;
9081 FILE_STANDARD_INFORMATION StandardInformation;
9082 FILE_INTERNAL_INFORMATION InternalInformation;
9083 FILE_EA_INFORMATION EaInformation;
9084 FILE_ACCESS_INFORMATION AccessInformation;
9085 FILE_POSITION_INFORMATION PositionInformation;
9086 FILE_MODE_INFORMATION ModeInformation;
9087 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
9088 USN LastChangeUsn;
9089 USN ReplicationUsn;
9090 LARGE_INTEGER SecurityChangeTime;
9091 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
9092 FILE_OBJECTID_INFORMATION ObjectIdInformation;
9093 FILE_STORAGE_TYPE StorageType;
9094 ULONG OleStateBits;
9095 ULONG OleId;
9096 ULONG NumberOfStreamReferences;
9097 ULONG StreamIndex;
9098 ULONG SecurityId;
9099 BOOLEAN ContentIndexDisable;
9100 BOOLEAN InheritContentIndexDisable;
9101 FILE_NAME_INFORMATION NameInformation;
9102 } FILE_OLE_ALL_INFORMATION, *PFILE_OLE_ALL_INFORMATION;
9103
9104 typedef struct _FILE_OLE_DIR_INFORMATION {
9105 ULONG NextEntryOffset;
9106 ULONG FileIndex;
9107 LARGE_INTEGER CreationTime;
9108 LARGE_INTEGER LastAccessTime;
9109 LARGE_INTEGER LastWriteTime;
9110 LARGE_INTEGER ChangeTime;
9111 LARGE_INTEGER EndOfFile;
9112 LARGE_INTEGER AllocationSize;
9113 ULONG FileAttributes;
9114 ULONG FileNameLength;
9115 FILE_STORAGE_TYPE StorageType;
9116 GUID OleClassId;
9117 ULONG OleStateBits;
9118 BOOLEAN ContentIndexDisable;
9119 BOOLEAN InheritContentIndexDisable;
9120 WCHAR FileName[1];
9121 } FILE_OLE_DIR_INFORMATION, *PFILE_OLE_DIR_INFORMATION;
9122
9123 typedef struct _FILE_OLE_INFORMATION {
9124 LARGE_INTEGER SecurityChangeTime;
9125 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
9126 FILE_OBJECTID_INFORMATION ObjectIdInformation;
9127 FILE_STORAGE_TYPE StorageType;
9128 ULONG OleStateBits;
9129 BOOLEAN ContentIndexDisable;
9130 BOOLEAN InheritContentIndexDisable;
9131 } FILE_OLE_INFORMATION, *PFILE_OLE_INFORMATION;
9132
9133 typedef struct _FILE_OLE_STATE_BITS_INFORMATION {
9134 ULONG StateBits;
9135 ULONG StateBitsMask;
9136 } FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION;
9137
9138 typedef struct _MAPPING_PAIR {
9139 ULONGLONG Vcn;
9140 ULONGLONG Lcn;
9141 } MAPPING_PAIR, *PMAPPING_PAIR;
9142
9143 typedef struct _GET_RETRIEVAL_DESCRIPTOR {
9144 ULONG NumberOfPairs;
9145 ULONGLONG StartVcn;
9146 MAPPING_PAIR Pair[1];
9147 } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
9148
9149 typedef struct _MBCB {
9150 CSHORT NodeTypeCode;
9151 CSHORT NodeIsInZone;
9152 ULONG PagesToWrite;
9153 ULONG DirtyPages;
9154 ULONG Reserved;
9155 LIST_ENTRY BitmapRanges;
9156 LONGLONG ResumeWritePage;
9157 BITMAP_RANGE BitmapRange1;
9158 BITMAP_RANGE BitmapRange2;
9159 BITMAP_RANGE BitmapRange3;
9160 } MBCB, *PMBCB;
9161
9162 typedef struct _MOVEFILE_DESCRIPTOR {
9163 HANDLE FileHandle;
9164 ULONG Reserved;
9165 LARGE_INTEGER StartVcn;
9166 LARGE_INTEGER TargetLcn;
9167 ULONG NumVcns;
9168 ULONG Reserved1;
9169 } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
9170
9171 typedef struct _OBJECT_BASIC_INFO {
9172 ULONG Attributes;
9173 ACCESS_MASK GrantedAccess;
9174 ULONG HandleCount;
9175 ULONG ReferenceCount;
9176 ULONG PagedPoolUsage;
9177 ULONG NonPagedPoolUsage;
9178 ULONG Reserved[3];
9179 ULONG NameInformationLength;
9180 ULONG TypeInformationLength;
9181 ULONG SecurityDescriptorLength;
9182 LARGE_INTEGER CreateTime;
9183 } OBJECT_BASIC_INFO, *POBJECT_BASIC_INFO;
9184
9185 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO {
9186 BOOLEAN Inherit;
9187 BOOLEAN ProtectFromClose;
9188 } OBJECT_HANDLE_ATTRIBUTE_INFO, *POBJECT_HANDLE_ATTRIBUTE_INFO;
9189
9190 typedef struct _OBJECT_NAME_INFO {
9191 UNICODE_STRING ObjectName;
9192 WCHAR ObjectNameBuffer[1];
9193 } OBJECT_NAME_INFO, *POBJECT_NAME_INFO;
9194
9195 typedef struct _OBJECT_PROTECTION_INFO {
9196 BOOLEAN Inherit;
9197 BOOLEAN ProtectHandle;
9198 } OBJECT_PROTECTION_INFO, *POBJECT_PROTECTION_INFO;
9199
9200 typedef struct _OBJECT_TYPE_INFO {
9201 UNICODE_STRING ObjectTypeName;
9202 UCHAR Unknown[0x58];
9203 WCHAR ObjectTypeNameBuffer[1];
9204 } OBJECT_TYPE_INFO, *POBJECT_TYPE_INFO;
9205
9206 typedef struct _OBJECT_ALL_TYPES_INFO {
9207 ULONG NumberOfObjectTypes;
9208 OBJECT_TYPE_INFO ObjectsTypeInfo[1];
9209 } OBJECT_ALL_TYPES_INFO, *POBJECT_ALL_TYPES_INFO;
9210
9211 #if defined(USE_LPC6432)
9212 #define LPC_CLIENT_ID CLIENT_ID64
9213 #define LPC_SIZE_T ULONGLONG
9214 #define LPC_PVOID ULONGLONG
9215 #define LPC_HANDLE ULONGLONG
9216 #else
9217 #define LPC_CLIENT_ID CLIENT_ID
9218 #define LPC_SIZE_T SIZE_T
9219 #define LPC_PVOID PVOID
9220 #define LPC_HANDLE HANDLE
9221 #endif
9222
9223 typedef struct _PORT_MESSAGE
9224 {
9225 union
9226 {
9227 struct
9228 {
9229 CSHORT DataLength;
9230 CSHORT TotalLength;
9231 } s1;
9232 ULONG Length;
9233 } u1;
9234 union
9235 {
9236 struct
9237 {
9238 CSHORT Type;
9239 CSHORT DataInfoOffset;
9240 } s2;
9241 ULONG ZeroInit;
9242 } u2;
9243 __GNU_EXTENSION union
9244 {
9245 LPC_CLIENT_ID ClientId;
9246 double DoNotUseThisField;
9247 };
9248 ULONG MessageId;
9249 __GNU_EXTENSION union
9250 {
9251 LPC_SIZE_T ClientViewSize;
9252 ULONG CallbackId;
9253 };
9254 } PORT_MESSAGE, *PPORT_MESSAGE;
9255
9256 #define LPC_KERNELMODE_MESSAGE (CSHORT)((USHORT)0x8000)
9257
9258 typedef struct _PORT_VIEW
9259 {
9260 ULONG Length;
9261 LPC_HANDLE SectionHandle;
9262 ULONG SectionOffset;
9263 LPC_SIZE_T ViewSize;
9264 LPC_PVOID ViewBase;
9265 LPC_PVOID ViewRemoteBase;
9266 } PORT_VIEW, *PPORT_VIEW;
9267
9268 typedef struct _REMOTE_PORT_VIEW
9269 {
9270 ULONG Length;
9271 LPC_SIZE_T ViewSize;
9272 LPC_PVOID ViewBase;
9273 } REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW;
9274
9275 typedef struct _VAD_HEADER {
9276 PVOID StartVPN;
9277 PVOID EndVPN;
9278 struct _VAD_HEADER* ParentLink;
9279 struct _VAD_HEADER* LeftLink;
9280 struct _VAD_HEADER* RightLink;
9281 ULONG Flags; /* LSB = CommitCharge */
9282 PVOID ControlArea;
9283 PVOID FirstProtoPte;
9284 PVOID LastPTE;
9285 ULONG Unknown;
9286 LIST_ENTRY Secured;
9287 } VAD_HEADER, *PVAD_HEADER;
9288
9289 NTKERNELAPI
9290 LARGE_INTEGER
9291 NTAPI
9292 CcGetLsnForFileObject (
9293 IN PFILE_OBJECT FileObject,
9294 OUT PLARGE_INTEGER OldestLsn OPTIONAL
9295 );
9296
9297 NTKERNELAPI
9298 PVOID
9299 NTAPI
9300 FsRtlAllocatePool (
9301 IN POOL_TYPE PoolType,
9302 IN ULONG NumberOfBytes
9303 );
9304
9305 NTKERNELAPI
9306 PVOID
9307 NTAPI
9308 FsRtlAllocatePoolWithQuota (
9309 IN POOL_TYPE PoolType,
9310 IN ULONG NumberOfBytes
9311 );
9312
9313 NTKERNELAPI
9314 PVOID
9315 NTAPI
9316 FsRtlAllocatePoolWithQuotaTag (
9317 IN POOL_TYPE PoolType,
9318 IN ULONG NumberOfBytes,
9319 IN ULONG Tag
9320 );
9321
9322 NTKERNELAPI
9323 PVOID
9324 NTAPI
9325 FsRtlAllocatePoolWithTag (
9326 IN POOL_TYPE PoolType,
9327 IN ULONG NumberOfBytes,
9328 IN ULONG Tag
9329 );
9330
9331 NTKERNELAPI
9332 BOOLEAN
9333 NTAPI
9334 FsRtlIsFatDbcsLegal (
9335 IN ANSI_STRING DbcsName,
9336 IN BOOLEAN WildCardsPermissible,
9337 IN BOOLEAN PathNamePermissible,
9338 IN BOOLEAN LeadingBackslashPermissible
9339 );
9340
9341 NTKERNELAPI
9342 BOOLEAN
9343 NTAPI
9344 FsRtlMdlReadComplete (
9345 IN PFILE_OBJECT FileObject,
9346 IN PMDL MdlChain
9347 );
9348
9349 NTKERNELAPI
9350 BOOLEAN
9351 NTAPI
9352 FsRtlMdlWriteComplete (
9353 IN PFILE_OBJECT FileObject,
9354 IN PLARGE_INTEGER FileOffset,
9355 IN PMDL MdlChain
9356 );
9357
9358 NTKERNELAPI
9359 VOID
9360 NTAPI
9361 FsRtlNotifyChangeDirectory (
9362 IN PNOTIFY_SYNC NotifySync,
9363 IN PVOID FsContext,
9364 IN PSTRING FullDirectoryName,
9365 IN PLIST_ENTRY NotifyList,
9366 IN BOOLEAN WatchTree,
9367 IN ULONG CompletionFilter,
9368 IN PIRP NotifyIrp
9369 );
9370
9371 NTKERNELAPI
9372 NTSTATUS
9373 NTAPI
9374 ObCreateObject (
9375 IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL,
9376 IN POBJECT_TYPE ObjectType,
9377 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
9378 IN KPROCESSOR_MODE AccessMode,
9379 IN OUT PVOID ParseContext OPTIONAL,
9380 IN ULONG ObjectSize,
9381 IN ULONG PagedPoolCharge OPTIONAL,
9382 IN ULONG NonPagedPoolCharge OPTIONAL,
9383 OUT PVOID *Object
9384 );
9385
9386 NTKERNELAPI
9387 ULONG
9388 NTAPI
9389 ObGetObjectPointerCount (
9390 IN PVOID Object
9391 );
9392
9393 NTKERNELAPI
9394 NTSTATUS
9395 NTAPI
9396 ObReferenceObjectByName (
9397 IN PUNICODE_STRING ObjectName,
9398 IN ULONG Attributes,
9399 IN PACCESS_STATE PassedAccessState OPTIONAL,
9400 IN ACCESS_MASK DesiredAccess OPTIONAL,
9401 IN POBJECT_TYPE ObjectType,
9402 IN KPROCESSOR_MODE AccessMode,
9403 IN OUT PVOID ParseContext OPTIONAL,
9404 OUT PVOID *Object
9405 );
9406
9407 #define PsDereferenceImpersonationToken(T) \
9408 {if (ARGUMENT_PRESENT(T)) { \
9409 (ObDereferenceObject((T))); \
9410 } else { \
9411 ; \
9412 } \
9413 }
9414
9415 NTKERNELAPI
9416 NTSTATUS
9417 NTAPI
9418 PsLookupProcessThreadByCid (
9419 IN PCLIENT_ID Cid,
9420 OUT PEPROCESS *Process OPTIONAL,
9421 OUT PETHREAD *Thread
9422 );
9423
9424 NTSYSAPI
9425 NTSTATUS
9426 NTAPI
9427 RtlSetSaclSecurityDescriptor (
9428 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
9429 IN BOOLEAN SaclPresent,
9430 IN PACL Sacl,
9431 IN BOOLEAN SaclDefaulted
9432 );
9433
9434 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
9435
9436 #if (VER_PRODUCTBUILD >= 2195)
9437
9438 NTSYSAPI
9439 NTSTATUS
9440 NTAPI
9441 ZwAdjustPrivilegesToken (
9442 IN HANDLE TokenHandle,
9443 IN BOOLEAN DisableAllPrivileges,
9444 IN PTOKEN_PRIVILEGES NewState,
9445 IN ULONG BufferLength,
9446 OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL,
9447 OUT PULONG ReturnLength
9448 );
9449
9450 #endif /* (VER_PRODUCTBUILD >= 2195) */
9451
9452 NTSYSAPI
9453 NTSTATUS
9454 NTAPI
9455 ZwAlertThread (
9456 IN HANDLE ThreadHandle
9457 );
9458
9459 NTSYSAPI
9460 NTSTATUS
9461 NTAPI
9462 ZwAccessCheckAndAuditAlarm (
9463 IN PUNICODE_STRING SubsystemName,
9464 IN PVOID HandleId,
9465 IN PUNICODE_STRING ObjectTypeName,
9466 IN PUNICODE_STRING ObjectName,
9467 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
9468 IN ACCESS_MASK DesiredAccess,
9469 IN PGENERIC_MAPPING GenericMapping,
9470 IN BOOLEAN ObjectCreation,
9471 OUT PACCESS_MASK GrantedAccess,
9472 OUT PBOOLEAN AccessStatus,
9473 OUT PBOOLEAN GenerateOnClose
9474 );
9475
9476 #if (VER_PRODUCTBUILD >= 2195)
9477
9478 NTSYSAPI
9479 NTSTATUS
9480 NTAPI
9481 ZwCancelIoFile (
9482 IN HANDLE FileHandle,
9483 OUT PIO_STATUS_BLOCK IoStatusBlock
9484 );
9485
9486 #endif /* (VER_PRODUCTBUILD >= 2195) */
9487
9488 NTSYSAPI
9489 NTSTATUS
9490 NTAPI
9491 ZwClearEvent (
9492 IN HANDLE EventHandle
9493 );
9494
9495 NTSYSAPI
9496 NTSTATUS
9497 NTAPI
9498 ZwCloseObjectAuditAlarm (
9499 IN PUNICODE_STRING SubsystemName,
9500 IN PVOID HandleId,
9501 IN BOOLEAN GenerateOnClose
9502 );
9503
9504 NTSYSAPI
9505 NTSTATUS
9506 NTAPI
9507 ZwCreateSymbolicLinkObject (
9508 OUT PHANDLE SymbolicLinkHandle,
9509 IN ACCESS_MASK DesiredAccess,
9510 IN POBJECT_ATTRIBUTES ObjectAttributes,
9511 IN PUNICODE_STRING TargetName
9512 );
9513
9514 NTSYSAPI
9515 NTSTATUS
9516 NTAPI
9517 ZwFlushInstructionCache (
9518 IN HANDLE ProcessHandle,
9519 IN PVOID BaseAddress OPTIONAL,
9520 IN ULONG FlushSize
9521 );
9522
9523 NTSYSAPI
9524 NTSTATUS
9525 NTAPI
9526 ZwFlushBuffersFile(
9527 IN HANDLE FileHandle,
9528 OUT PIO_STATUS_BLOCK IoStatusBlock
9529 );
9530
9531 #if (VER_PRODUCTBUILD >= 2195)
9532
9533 NTSYSAPI
9534 NTSTATUS
9535 NTAPI
9536 ZwInitiatePowerAction (
9537 IN POWER_ACTION SystemAction,
9538 IN SYSTEM_POWER_STATE MinSystemState,
9539 IN ULONG Flags,
9540 IN BOOLEAN Asynchronous
9541 );
9542
9543 #endif /* (VER_PRODUCTBUILD >= 2195) */
9544
9545 NTSYSAPI
9546 NTSTATUS
9547 NTAPI
9548 ZwLoadKey (
9549 IN POBJECT_ATTRIBUTES KeyObjectAttributes,
9550 IN POBJECT_ATTRIBUTES FileObjectAttributes
9551 );
9552
9553 NTSYSAPI
9554 NTSTATUS
9555 NTAPI
9556 ZwOpenProcessToken (
9557 IN HANDLE ProcessHandle,
9558 IN ACCESS_MASK DesiredAccess,
9559 OUT PHANDLE TokenHandle
9560 );
9561
9562 NTSYSAPI
9563 NTSTATUS
9564 NTAPI
9565 ZwOpenThread (
9566 OUT PHANDLE ThreadHandle,
9567 IN ACCESS_MASK DesiredAccess,
9568 IN POBJECT_ATTRIBUTES ObjectAttributes,
9569 IN PCLIENT_ID ClientId
9570 );
9571
9572 NTSYSAPI
9573 NTSTATUS
9574 NTAPI
9575 ZwOpenThreadToken (
9576 IN HANDLE ThreadHandle,
9577 IN ACCESS_MASK DesiredAccess,
9578 IN BOOLEAN OpenAsSelf,
9579 OUT PHANDLE TokenHandle
9580 );
9581
9582 NTSYSAPI
9583 NTSTATUS
9584 NTAPI
9585 ZwPulseEvent (
9586 IN HANDLE EventHandle,
9587 OUT PLONG PreviousState OPTIONAL
9588 );
9589
9590 NTSYSAPI
9591 NTSTATUS
9592 NTAPI
9593 ZwQueryDefaultLocale (
9594 IN BOOLEAN ThreadOrSystem,
9595 OUT PLCID Locale
9596 );
9597
9598 #if (VER_PRODUCTBUILD >= 2195)
9599
9600 NTSYSAPI
9601 NTSTATUS
9602 NTAPI
9603 ZwQueryDirectoryObject (
9604 IN HANDLE DirectoryHandle,
9605 OUT PVOID Buffer,
9606 IN ULONG Length,
9607 IN BOOLEAN ReturnSingleEntry,
9608 IN BOOLEAN RestartScan,
9609 IN OUT PULONG Context,
9610 OUT PULONG ReturnLength OPTIONAL
9611 );
9612
9613 #endif /* (VER_PRODUCTBUILD >= 2195) */
9614
9615 NTSYSAPI
9616 NTSTATUS
9617 NTAPI
9618 ZwQueryInformationProcess (
9619 IN HANDLE ProcessHandle,
9620 IN PROCESSINFOCLASS ProcessInformationClass,
9621 OUT PVOID ProcessInformation,
9622 IN ULONG ProcessInformationLength,
9623 OUT PULONG ReturnLength OPTIONAL
9624 );
9625
9626 NTSYSAPI
9627 NTSTATUS
9628 NTAPI
9629 ZwReplaceKey (
9630 IN POBJECT_ATTRIBUTES NewFileObjectAttributes,
9631 IN HANDLE KeyHandle,
9632 IN POBJECT_ATTRIBUTES OldFileObjectAttributes
9633 );
9634
9635 NTSYSAPI
9636 NTSTATUS
9637 NTAPI
9638 ZwResetEvent (
9639 IN HANDLE EventHandle,
9640 OUT PLONG PreviousState OPTIONAL
9641 );
9642
9643 #if (VER_PRODUCTBUILD >= 2195)
9644
9645 NTSYSAPI
9646 NTSTATUS
9647 NTAPI
9648 ZwRestoreKey (
9649 IN HANDLE KeyHandle,
9650 IN HANDLE FileHandle,
9651 IN ULONG Flags
9652 );
9653
9654 #endif /* (VER_PRODUCTBUILD >= 2195) */
9655
9656 NTSYSAPI
9657 NTSTATUS
9658 NTAPI
9659 ZwSaveKey (
9660 IN HANDLE KeyHandle,
9661 IN HANDLE FileHandle
9662 );
9663
9664 NTSYSAPI
9665 NTSTATUS
9666 NTAPI
9667 ZwSetDefaultLocale (
9668 IN BOOLEAN ThreadOrSystem,
9669 IN LCID Locale
9670 );
9671
9672 #if (VER_PRODUCTBUILD >= 2195)
9673
9674 NTSYSAPI
9675 NTSTATUS
9676 NTAPI
9677 ZwSetDefaultUILanguage (
9678 IN LANGID LanguageId
9679 );
9680
9681 #endif /* (VER_PRODUCTBUILD >= 2195) */
9682
9683 NTSYSAPI
9684 NTSTATUS
9685 NTAPI
9686 ZwSetInformationProcess (
9687 IN HANDLE ProcessHandle,
9688 IN PROCESSINFOCLASS ProcessInformationClass,
9689 IN PVOID ProcessInformation,
9690 IN ULONG ProcessInformationLength
9691 );
9692
9693 NTSYSAPI
9694 NTSTATUS
9695 NTAPI
9696 ZwSetSystemTime (
9697 IN PLARGE_INTEGER NewTime,
9698 OUT PLARGE_INTEGER OldTime OPTIONAL
9699 );
9700
9701 NTSYSAPI
9702 NTSTATUS
9703 NTAPI
9704 ZwUnloadKey (
9705 IN POBJECT_ATTRIBUTES KeyObjectAttributes
9706 );
9707
9708 NTSYSAPI
9709 NTSTATUS
9710 NTAPI
9711 ZwWaitForMultipleObjects (
9712 IN ULONG HandleCount,
9713 IN PHANDLE Handles,
9714 IN WAIT_TYPE WaitType,
9715 IN BOOLEAN Alertable,
9716 IN PLARGE_INTEGER Timeout OPTIONAL
9717 );
9718
9719 NTSYSAPI
9720 NTSTATUS
9721 NTAPI
9722 ZwYieldExecution (
9723 VOID
9724 );
9725
9726 #pragma pack(pop)
9727
9728 #ifdef __cplusplus
9729 }
9730 #endif