Sync with trunk (aka 'I want my virtualbox mouse integration too')
[reactos.git] / include / ddk / ntifs.h
1 /*
2 * ntifs.h
3 *
4 * Windows NT Filesystem Driver Developer Kit
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Bo Brantén <bosse@acc.umu.se>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23 #pragma once
24
25 #define _NTIFS_INCLUDED_
26 #define _GNU_NTIFS_
27
28 #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 typedef struct _FSRTL_COMMON_FCB_HEADER {
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 } FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER;
6165
6166 #ifdef __cplusplus
6167 typedef struct _FSRTL_ADVANCED_FCB_HEADER:FSRTL_COMMON_FCB_HEADER {
6168 #else /* __cplusplus */
6169 typedef struct _FSRTL_ADVANCED_FCB_HEADER {
6170 FSRTL_COMMON_FCB_HEADER DUMMYSTRUCTNAME;
6171 #endif /* __cplusplus */
6172 PFAST_MUTEX FastMutex;
6173 LIST_ENTRY FilterContexts;
6174 #if (NTDDI_VERSION >= NTDDI_VISTA)
6175 EX_PUSH_LOCK PushLock;
6176 PVOID *FileContextSupportPointer;
6177 #endif
6178 } FSRTL_ADVANCED_FCB_HEADER, *PFSRTL_ADVANCED_FCB_HEADER;
6179
6180 #define FSRTL_FCB_HEADER_V0 (0x00)
6181 #define FSRTL_FCB_HEADER_V1 (0x01)
6182
6183 #define FSRTL_FLAG_FILE_MODIFIED (0x01)
6184 #define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
6185 #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
6186 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
6187 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
6188 #define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
6189 #define FSRTL_FLAG_ADVANCED_HEADER (0x40)
6190 #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
6191
6192 #define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
6193 #define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02)
6194 #define FSRTL_FLAG2_PURGE_WHEN_MAPPED (0x04)
6195 #define FSRTL_FLAG2_IS_PAGING_FILE (0x08)
6196
6197 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
6198 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
6199 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
6200 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
6201 #define FSRTL_NETWORK1_TOP_LEVEL_IRP ((LONG_PTR)0x05)
6202 #define FSRTL_NETWORK2_TOP_LEVEL_IRP ((LONG_PTR)0x06)
6203 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG ((LONG_PTR)0xFFFF)
6204
6205 typedef struct _EOF_WAIT_BLOCK {
6206 LIST_ENTRY EofWaitLinks;
6207 KEVENT Event;
6208 } EOF_WAIT_BLOCK, *PEOF_WAIT_BLOCK;
6209
6210 typedef struct _FSRTL_AUXILIARY_BUFFER {
6211 PVOID Buffer;
6212 ULONG Length;
6213 ULONG Flags;
6214 PMDL Mdl;
6215 } FSRTL_AUXILIARY_BUFFER, *PFSRTL_AUXILIARY_BUFFER;
6216
6217 #define FSRTL_AUXILIARY_FLAG_DEALLOCATE 0x00000001
6218
6219 typedef struct _FILE_LOCK_INFO {
6220 LARGE_INTEGER StartingByte;
6221 LARGE_INTEGER Length;
6222 BOOLEAN ExclusiveLock;
6223 ULONG Key;
6224 PFILE_OBJECT FileObject;
6225 PVOID ProcessId;
6226 LARGE_INTEGER EndingByte;
6227 } FILE_LOCK_INFO, *PFILE_LOCK_INFO;
6228
6229 typedef NTSTATUS
6230 (NTAPI *PCOMPLETE_LOCK_IRP_ROUTINE) (
6231 IN PVOID Context,
6232 IN PIRP Irp);
6233
6234 typedef VOID
6235 (NTAPI *PUNLOCK_ROUTINE) (
6236 IN PVOID Context,
6237 IN PFILE_LOCK_INFO FileLockInfo);
6238
6239 typedef struct _FILE_LOCK {
6240 PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
6241 PUNLOCK_ROUTINE UnlockRoutine;
6242 BOOLEAN FastIoIsQuestionable;
6243 BOOLEAN SpareC[3];
6244 PVOID LockInformation;
6245 FILE_LOCK_INFO LastReturnedLockInfo;
6246 PVOID LastReturnedLock;
6247 LONG volatile LockRequestsInProgress;
6248 } FILE_LOCK, *PFILE_LOCK;
6249
6250 typedef struct _TUNNEL {
6251 FAST_MUTEX Mutex;
6252 PRTL_SPLAY_LINKS Cache;
6253 LIST_ENTRY TimerQueue;
6254 USHORT NumEntries;
6255 } TUNNEL, *PTUNNEL;
6256
6257 typedef enum _FSRTL_COMPARISON_RESULT {
6258 LessThan = -1,
6259 EqualTo = 0,
6260 GreaterThan = 1
6261 } FSRTL_COMPARISON_RESULT;
6262
6263 #define FSRTL_FAT_LEGAL 0x01
6264 #define FSRTL_HPFS_LEGAL 0x02
6265 #define FSRTL_NTFS_LEGAL 0x04
6266 #define FSRTL_WILD_CHARACTER 0x08
6267 #define FSRTL_OLE_LEGAL 0x10
6268 #define FSRTL_NTFS_STREAM_LEGAL (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL)
6269
6270 typedef struct _BASE_MCB {
6271 ULONG MaximumPairCount;
6272 ULONG PairCount;
6273 USHORT PoolType;
6274 USHORT Flags;
6275 PVOID Mapping;
6276 } BASE_MCB, *PBASE_MCB;
6277
6278 typedef struct _LARGE_MCB {
6279 PKGUARDED_MUTEX GuardedMutex;
6280 BASE_MCB BaseMcb;
6281 } LARGE_MCB, *PLARGE_MCB;
6282
6283 #define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
6284
6285 typedef struct _MCB {
6286 LARGE_MCB DummyFieldThatSizesThisStructureCorrectly;
6287 } MCB, *PMCB;
6288
6289 typedef PVOID OPLOCK, *POPLOCK;
6290
6291 typedef VOID
6292 (NTAPI *POPLOCK_WAIT_COMPLETE_ROUTINE) (
6293 IN PVOID Context,
6294 IN PIRP Irp);
6295
6296 typedef VOID
6297 (NTAPI *POPLOCK_FS_PREPOST_IRP) (
6298 IN PVOID Context,
6299 IN PIRP Irp);
6300
6301 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
6302 #define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED 0x00000001
6303 #endif
6304
6305 #if (NTDDI_VERSION >= NTDDI_WIN7)
6306 #define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY 0x00000002
6307 #define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK 0x00000004
6308 #define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS 0x00000008
6309 #define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH 0x00000001
6310 #endif
6311
6312 #if (NTDDI_VERSION >= NTDDI_WIN7)
6313
6314 typedef struct _OPLOCK_KEY_ECP_CONTEXT {
6315 GUID OplockKey;
6316 ULONG Reserved;
6317 } OPLOCK_KEY_ECP_CONTEXT, *POPLOCK_KEY_ECP_CONTEXT;
6318
6319 DEFINE_GUID( GUID_ECP_OPLOCK_KEY, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f );
6320
6321 #endif
6322
6323 #define FSRTL_VOLUME_DISMOUNT 1
6324 #define FSRTL_VOLUME_DISMOUNT_FAILED 2
6325 #define FSRTL_VOLUME_LOCK 3
6326 #define FSRTL_VOLUME_LOCK_FAILED 4
6327 #define FSRTL_VOLUME_UNLOCK 5
6328 #define FSRTL_VOLUME_MOUNT 6
6329 #define FSRTL_VOLUME_NEEDS_CHKDSK 7
6330 #define FSRTL_VOLUME_WORM_NEAR_FULL 8
6331 #define FSRTL_VOLUME_WEARING_OUT 9
6332 #define FSRTL_VOLUME_FORCED_CLOSED 10
6333 #define FSRTL_VOLUME_INFO_MAKE_COMPAT 11
6334 #define FSRTL_VOLUME_PREPARING_EJECT 12
6335 #define FSRTL_VOLUME_CHANGE_SIZE 13
6336 #define FSRTL_VOLUME_BACKGROUND_FORMAT 14
6337
6338 typedef PVOID PNOTIFY_SYNC;
6339
6340 typedef BOOLEAN
6341 (NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) (
6342 IN PVOID NotifyContext,
6343 IN PVOID TargetContext OPTIONAL,
6344 IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
6345
6346 typedef BOOLEAN
6347 (NTAPI *PFILTER_REPORT_CHANGE) (
6348 IN PVOID NotifyContext,
6349 IN PVOID FilterContext);
6350
6351 typedef VOID
6352 (NTAPI *PFSRTL_STACK_OVERFLOW_ROUTINE) (
6353 IN PVOID Context,
6354 IN PKEVENT Event);
6355
6356 #if (NTDDI_VERSION >= NTDDI_VISTA)
6357
6358 #define FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED 0x00000001
6359 #define FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED 0x00000002
6360 #define FSRTL_UNC_PROVIDER_FLAGS_DOMAIN_SVC_AWARE 0x00000004
6361
6362 #define FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA 0x00000001
6363
6364 #define FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA 0x00000001
6365 #define FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL 0x00000002
6366
6367 #define FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL 0x00000002
6368
6369 #define FSRTL_VIRTDISK_FULLY_ALLOCATED 0x00000001
6370 #define FSRTL_VIRTDISK_NO_DRIVE_LETTER 0x00000002
6371
6372 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_1 {
6373 ULONG32 ProviderId;
6374 } FSRTL_MUP_PROVIDER_INFO_LEVEL_1, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_1;
6375
6376 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_2 {
6377 ULONG32 ProviderId;
6378 UNICODE_STRING ProviderName;
6379 } FSRTL_MUP_PROVIDER_INFO_LEVEL_2, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_2;
6380
6381 typedef VOID
6382 (*PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK) (
6383 IN OUT PVOID EcpContext,
6384 IN LPCGUID EcpType);
6385
6386 typedef struct _ECP_LIST ECP_LIST, *PECP_LIST;
6387
6388 typedef ULONG FSRTL_ALLOCATE_ECPLIST_FLAGS;
6389 typedef ULONG FSRTL_ALLOCATE_ECP_FLAGS;
6390 typedef ULONG FSRTL_ECP_LOOKASIDE_FLAGS;
6391
6392 typedef enum _FSRTL_CHANGE_BACKING_TYPE {
6393 ChangeDataControlArea,
6394 ChangeImageControlArea,
6395 ChangeSharedCacheMap
6396 } FSRTL_CHANGE_BACKING_TYPE, *PFSRTL_CHANGE_BACKING_TYPE;
6397
6398 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
6399
6400 typedef struct _FSRTL_PER_FILE_CONTEXT {
6401 LIST_ENTRY Links;
6402 PVOID OwnerId;
6403 PVOID InstanceId;
6404 PFREE_FUNCTION FreeCallback;
6405 } FSRTL_PER_FILE_CONTEXT, *PFSRTL_PER_FILE_CONTEXT;
6406
6407 typedef struct _FSRTL_PER_STREAM_CONTEXT {
6408 LIST_ENTRY Links;
6409 PVOID OwnerId;
6410 PVOID InstanceId;
6411 PFREE_FUNCTION FreeCallback;
6412 } FSRTL_PER_STREAM_CONTEXT, *PFSRTL_PER_STREAM_CONTEXT;
6413
6414 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6415 typedef VOID
6416 (*PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS) (
6417 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
6418 #endif
6419
6420 typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT {
6421 LIST_ENTRY Links;
6422 PVOID OwnerId;
6423 PVOID InstanceId;
6424 } FSRTL_PER_FILEOBJECT_CONTEXT, *PFSRTL_PER_FILEOBJECT_CONTEXT;
6425
6426 #define FsRtlEnterFileSystem KeEnterCriticalRegion
6427 #define FsRtlExitFileSystem KeLeaveCriticalRegion
6428
6429 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_HARD_ERROR 0x1
6430 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_LOG_ENTRY 0x2
6431
6432 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6433
6434 NTKERNELAPI
6435 BOOLEAN
6436 NTAPI
6437 FsRtlCopyRead(
6438 IN PFILE_OBJECT FileObject,
6439 IN PLARGE_INTEGER FileOffset,
6440 IN ULONG Length,
6441 IN BOOLEAN Wait,
6442 IN ULONG LockKey,
6443 OUT PVOID Buffer,
6444 OUT PIO_STATUS_BLOCK IoStatus,
6445 IN PDEVICE_OBJECT DeviceObject);
6446
6447 NTKERNELAPI
6448 BOOLEAN
6449 NTAPI
6450 FsRtlCopyWrite(
6451 IN PFILE_OBJECT FileObject,
6452 IN PLARGE_INTEGER FileOffset,
6453 IN ULONG Length,
6454 IN BOOLEAN Wait,
6455 IN ULONG LockKey,
6456 IN PVOID Buffer,
6457 OUT PIO_STATUS_BLOCK IoStatus,
6458 IN PDEVICE_OBJECT DeviceObject);
6459
6460 NTKERNELAPI
6461 BOOLEAN
6462 NTAPI
6463 FsRtlMdlReadDev(
6464 IN PFILE_OBJECT FileObject,
6465 IN PLARGE_INTEGER FileOffset,
6466 IN ULONG Length,
6467 IN ULONG LockKey,
6468 OUT PMDL *MdlChain,
6469 OUT PIO_STATUS_BLOCK IoStatus,
6470 IN PDEVICE_OBJECT DeviceObject OPTIONAL);
6471
6472 NTKERNELAPI
6473 BOOLEAN
6474 NTAPI
6475 FsRtlMdlReadCompleteDev(
6476 IN PFILE_OBJECT FileObject,
6477 IN PMDL MdlChain,
6478 IN PDEVICE_OBJECT DeviceObject OPTIONAL);
6479
6480 NTKERNELAPI
6481 BOOLEAN
6482 NTAPI
6483 FsRtlPrepareMdlWriteDev(
6484 IN PFILE_OBJECT FileObject,
6485 IN PLARGE_INTEGER FileOffset,
6486 IN ULONG Length,
6487 IN ULONG LockKey,
6488 OUT PMDL *MdlChain,
6489 OUT PIO_STATUS_BLOCK IoStatus,
6490 IN PDEVICE_OBJECT DeviceObject);
6491
6492 NTKERNELAPI
6493 BOOLEAN
6494 NTAPI
6495 FsRtlMdlWriteCompleteDev(
6496 IN PFILE_OBJECT FileObject,
6497 IN PLARGE_INTEGER FileOffset,
6498 IN PMDL MdlChain,
6499 IN PDEVICE_OBJECT DeviceObject);
6500
6501 NTKERNELAPI
6502 VOID
6503 NTAPI
6504 FsRtlAcquireFileExclusive(
6505 IN PFILE_OBJECT FileObject);
6506
6507 NTKERNELAPI
6508 VOID
6509 NTAPI
6510 FsRtlReleaseFile(
6511 IN PFILE_OBJECT FileObject);
6512
6513 NTKERNELAPI
6514 NTSTATUS
6515 NTAPI
6516 FsRtlGetFileSize(
6517 IN PFILE_OBJECT FileObject,
6518 OUT PLARGE_INTEGER FileSize);
6519
6520 NTKERNELAPI
6521 BOOLEAN
6522 NTAPI
6523 FsRtlIsTotalDeviceFailure(
6524 IN NTSTATUS Status);
6525
6526 NTKERNELAPI
6527 PFILE_LOCK
6528 NTAPI
6529 FsRtlAllocateFileLock(
6530 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
6531 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL);
6532
6533 NTKERNELAPI
6534 VOID
6535 NTAPI
6536 FsRtlFreeFileLock(
6537 IN PFILE_LOCK FileLock);
6538
6539 NTKERNELAPI
6540 VOID
6541 NTAPI
6542 FsRtlInitializeFileLock(
6543 IN PFILE_LOCK FileLock,
6544 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
6545 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL);
6546
6547 NTKERNELAPI
6548 VOID
6549 NTAPI
6550 FsRtlUninitializeFileLock(
6551 IN PFILE_LOCK FileLock);
6552
6553 /*
6554 FsRtlProcessFileLock:
6555
6556 ret:
6557 -STATUS_INVALID_DEVICE_REQUEST
6558 -STATUS_RANGE_NOT_LOCKED from unlock routines.
6559 -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
6560 (redirected IoStatus->Status).
6561
6562 Internals:
6563 -switch ( Irp->CurrentStackLocation->MinorFunction )
6564 lock: return FsRtlPrivateLock;
6565 unlocksingle: return FsRtlFastUnlockSingle;
6566 unlockall: return FsRtlFastUnlockAll;
6567 unlockallbykey: return FsRtlFastUnlockAllByKey;
6568 default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
6569 return STATUS_INVALID_DEVICE_REQUEST;
6570
6571 -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
6572 -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
6573 */
6574 NTKERNELAPI
6575 NTSTATUS
6576 NTAPI
6577 FsRtlProcessFileLock(
6578 IN PFILE_LOCK FileLock,
6579 IN PIRP Irp,
6580 IN PVOID Context OPTIONAL);
6581
6582 /*
6583 FsRtlCheckLockForReadAccess:
6584
6585 All this really does is pick out the lock parameters from the irp (io stack
6586 location?), get IoGetRequestorProcess, and pass values on to
6587 FsRtlFastCheckLockForRead.
6588 */
6589 NTKERNELAPI
6590 BOOLEAN
6591 NTAPI
6592 FsRtlCheckLockForReadAccess(
6593 IN PFILE_LOCK FileLock,
6594 IN PIRP Irp);
6595
6596 /*
6597 FsRtlCheckLockForWriteAccess:
6598
6599 All this really does is pick out the lock parameters from the irp (io stack
6600 location?), get IoGetRequestorProcess, and pass values on to
6601 FsRtlFastCheckLockForWrite.
6602 */
6603 NTKERNELAPI
6604 BOOLEAN
6605 NTAPI
6606 FsRtlCheckLockForWriteAccess(
6607 IN PFILE_LOCK FileLock,
6608 IN PIRP Irp);
6609
6610 NTKERNELAPI
6611 BOOLEAN
6612 NTAPI
6613 FsRtlFastCheckLockForRead(
6614 IN PFILE_LOCK FileLock,
6615 IN PLARGE_INTEGER FileOffset,
6616 IN PLARGE_INTEGER Length,
6617 IN ULONG Key,
6618 IN PFILE_OBJECT FileObject,
6619 IN PVOID Process);
6620
6621 NTKERNELAPI
6622 BOOLEAN
6623 NTAPI
6624 FsRtlFastCheckLockForWrite(
6625 IN PFILE_LOCK FileLock,
6626 IN PLARGE_INTEGER FileOffset,
6627 IN PLARGE_INTEGER Length,
6628 IN ULONG Key,
6629 IN PFILE_OBJECT FileObject,
6630 IN PVOID Process);
6631
6632 /*
6633 FsRtlGetNextFileLock:
6634
6635 ret: NULL if no more locks
6636
6637 Internals:
6638 FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
6639 FileLock->LastReturnedLock as storage.
6640 LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
6641 list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
6642 calls with Restart = FALSE.
6643 */
6644 NTKERNELAPI
6645 PFILE_LOCK_INFO
6646 NTAPI
6647 FsRtlGetNextFileLock(
6648 IN PFILE_LOCK FileLock,
6649 IN BOOLEAN Restart);
6650
6651 NTKERNELAPI
6652 NTSTATUS
6653 NTAPI
6654 FsRtlFastUnlockSingle(
6655 IN PFILE_LOCK FileLock,
6656 IN PFILE_OBJECT FileObject,
6657 IN PLARGE_INTEGER FileOffset,
6658 IN PLARGE_INTEGER Length,
6659 IN PEPROCESS Process,
6660 IN ULONG Key,
6661 IN PVOID Context OPTIONAL,
6662 IN BOOLEAN AlreadySynchronized);
6663
6664 NTKERNELAPI
6665 NTSTATUS
6666 NTAPI
6667 FsRtlFastUnlockAll(
6668 IN PFILE_LOCK FileLock,
6669 IN PFILE_OBJECT FileObject,
6670 IN PEPROCESS Process,
6671 IN PVOID Context OPTIONAL);
6672
6673 NTKERNELAPI
6674 NTSTATUS
6675 NTAPI
6676 FsRtlFastUnlockAllByKey(
6677 IN PFILE_LOCK FileLock,
6678 IN PFILE_OBJECT FileObject,
6679 IN PEPROCESS Process,
6680 IN ULONG Key,
6681 IN PVOID Context OPTIONAL);
6682
6683 /*
6684 FsRtlPrivateLock:
6685
6686 ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
6687
6688 Internals:
6689 -Calls IoCompleteRequest if Irp
6690 -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
6691 */
6692 NTKERNELAPI
6693 BOOLEAN
6694 NTAPI
6695 FsRtlPrivateLock(
6696 IN PFILE_LOCK FileLock,
6697 IN PFILE_OBJECT FileObject,
6698 IN PLARGE_INTEGER FileOffset,
6699 IN PLARGE_INTEGER Length,
6700 IN PEPROCESS Process,
6701 IN ULONG Key,
6702 IN BOOLEAN FailImmediately,
6703 IN BOOLEAN ExclusiveLock,
6704 OUT PIO_STATUS_BLOCK IoStatus,
6705 IN PIRP Irp OPTIONAL,
6706 IN PVOID Context,
6707 IN BOOLEAN AlreadySynchronized);
6708
6709 NTKERNELAPI
6710 VOID
6711 NTAPI
6712 FsRtlInitializeTunnelCache(
6713 IN PTUNNEL Cache);
6714
6715 NTKERNELAPI
6716 VOID
6717 NTAPI
6718 FsRtlAddToTunnelCache(
6719 IN PTUNNEL Cache,
6720 IN ULONGLONG DirectoryKey,
6721 IN PUNICODE_STRING ShortName,
6722 IN PUNICODE_STRING LongName,
6723 IN BOOLEAN KeyByShortName,
6724 IN ULONG DataLength,
6725 IN PVOID Data);
6726
6727 NTKERNELAPI
6728 BOOLEAN
6729 NTAPI
6730 FsRtlFindInTunnelCache(
6731 IN PTUNNEL Cache,
6732 IN ULONGLONG DirectoryKey,
6733 IN PUNICODE_STRING Name,
6734 OUT PUNICODE_STRING ShortName,
6735 OUT PUNICODE_STRING LongName,
6736 IN OUT PULONG DataLength,
6737 OUT PVOID Data);
6738
6739 NTKERNELAPI
6740 VOID
6741 NTAPI
6742 FsRtlDeleteKeyFromTunnelCache(
6743 IN PTUNNEL Cache,
6744 IN ULONGLONG DirectoryKey);
6745
6746 NTKERNELAPI
6747 VOID
6748 NTAPI
6749 FsRtlDeleteTunnelCache(
6750 IN PTUNNEL Cache);
6751
6752 NTKERNELAPI
6753 VOID
6754 NTAPI
6755 FsRtlDissectDbcs(
6756 IN ANSI_STRING Name,
6757 OUT PANSI_STRING FirstPart,
6758 OUT PANSI_STRING RemainingPart);
6759
6760 NTKERNELAPI
6761 BOOLEAN
6762 NTAPI
6763 FsRtlDoesDbcsContainWildCards(
6764 IN PANSI_STRING Name);
6765
6766 NTKERNELAPI
6767 BOOLEAN
6768 NTAPI
6769 FsRtlIsDbcsInExpression(
6770 IN PANSI_STRING Expression,
6771 IN PANSI_STRING Name);
6772
6773 NTKERNELAPI
6774 BOOLEAN
6775 NTAPI
6776 FsRtlIsFatDbcsLegal(
6777 IN ANSI_STRING DbcsName,
6778 IN BOOLEAN WildCardsPermissible,
6779 IN BOOLEAN PathNamePermissible,
6780 IN BOOLEAN LeadingBackslashPermissible);
6781
6782 NTKERNELAPI
6783 BOOLEAN
6784 NTAPI
6785 FsRtlIsHpfsDbcsLegal(
6786 IN ANSI_STRING DbcsName,
6787 IN BOOLEAN WildCardsPermissible,
6788 IN BOOLEAN PathNamePermissible,
6789 IN BOOLEAN LeadingBackslashPermissible);
6790
6791 NTKERNELAPI
6792 NTSTATUS
6793 NTAPI
6794 FsRtlNormalizeNtstatus(
6795 IN NTSTATUS Exception,
6796 IN NTSTATUS GenericException);
6797
6798 NTKERNELAPI
6799 BOOLEAN
6800 NTAPI
6801 FsRtlIsNtstatusExpected(
6802 IN NTSTATUS Ntstatus);
6803
6804 NTKERNELAPI
6805 PERESOURCE
6806 NTAPI
6807 FsRtlAllocateResource(
6808 VOID);
6809
6810 NTKERNELAPI
6811 VOID
6812 NTAPI
6813 FsRtlInitializeLargeMcb(
6814 IN PLARGE_MCB Mcb,
6815 IN POOL_TYPE PoolType);
6816
6817 NTKERNELAPI
6818 VOID
6819 NTAPI
6820 FsRtlUninitializeLargeMcb(
6821 IN PLARGE_MCB Mcb);
6822
6823 NTKERNELAPI
6824 VOID
6825 NTAPI
6826 FsRtlResetLargeMcb(
6827 IN PLARGE_MCB Mcb,
6828 IN BOOLEAN SelfSynchronized);
6829
6830 NTKERNELAPI
6831 VOID
6832 NTAPI
6833 FsRtlTruncateLargeMcb(
6834 IN PLARGE_MCB Mcb,
6835 IN LONGLONG Vbn);
6836
6837 NTKERNELAPI
6838 BOOLEAN
6839 NTAPI
6840 FsRtlAddLargeMcbEntry(
6841 IN PLARGE_MCB Mcb,
6842 IN LONGLONG Vbn,
6843 IN LONGLONG Lbn,
6844 IN LONGLONG SectorCount);
6845
6846 NTKERNELAPI
6847 VOID
6848 NTAPI
6849 FsRtlRemoveLargeMcbEntry(
6850 IN PLARGE_MCB Mcb,
6851 IN LONGLONG Vbn,
6852 IN LONGLONG SectorCount);
6853
6854 NTKERNELAPI
6855 BOOLEAN
6856 NTAPI
6857 FsRtlLookupLargeMcbEntry(
6858 IN PLARGE_MCB Mcb,
6859 IN LONGLONG Vbn,
6860 OUT PLONGLONG Lbn OPTIONAL,
6861 OUT PLONGLONG SectorCountFromLbn OPTIONAL,
6862 OUT PLONGLONG StartingLbn OPTIONAL,
6863 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
6864 OUT PULONG Index OPTIONAL);
6865
6866 NTKERNELAPI
6867 BOOLEAN
6868 NTAPI
6869 FsRtlLookupLastLargeMcbEntry(
6870 IN PLARGE_MCB Mcb,
6871 OUT PLONGLONG Vbn,
6872 OUT PLONGLONG Lbn);
6873
6874 NTKERNELAPI
6875 BOOLEAN
6876 NTAPI
6877 FsRtlLookupLastLargeMcbEntryAndIndex(
6878 IN PLARGE_MCB OpaqueMcb,
6879 OUT PLONGLONG LargeVbn,
6880 OUT PLONGLONG LargeLbn,
6881 OUT PULONG Index);
6882
6883 NTKERNELAPI
6884 ULONG
6885 NTAPI
6886 FsRtlNumberOfRunsInLargeMcb(
6887 IN PLARGE_MCB Mcb);
6888
6889 NTKERNELAPI
6890 BOOLEAN
6891 NTAPI
6892 FsRtlGetNextLargeMcbEntry(
6893 IN PLARGE_MCB Mcb,
6894 IN ULONG RunIndex,
6895 OUT PLONGLONG Vbn,
6896 OUT PLONGLONG Lbn,
6897 OUT PLONGLONG SectorCount);
6898
6899 NTKERNELAPI
6900 BOOLEAN
6901 NTAPI
6902 FsRtlSplitLargeMcb(
6903 IN PLARGE_MCB Mcb,
6904 IN LONGLONG Vbn,
6905 IN LONGLONG Amount);
6906
6907 NTKERNELAPI
6908 VOID
6909 NTAPI
6910 FsRtlInitializeMcb(
6911 IN PMCB Mcb,
6912 IN POOL_TYPE PoolType);
6913
6914 NTKERNELAPI
6915 VOID
6916 NTAPI
6917 FsRtlUninitializeMcb(
6918 IN PMCB Mcb);
6919
6920 NTKERNELAPI
6921 VOID
6922 NTAPI
6923 FsRtlTruncateMcb(
6924 IN PMCB Mcb,
6925 IN VBN Vbn);
6926
6927 NTKERNELAPI
6928 BOOLEAN
6929 NTAPI
6930 FsRtlAddMcbEntry(
6931 IN PMCB Mcb,
6932 IN VBN Vbn,
6933 IN LBN Lbn,
6934 IN ULONG SectorCount);
6935
6936 NTKERNELAPI
6937 VOID
6938 NTAPI
6939 FsRtlRemoveMcbEntry(
6940 IN PMCB Mcb,
6941 IN VBN Vbn,
6942 IN ULONG SectorCount);
6943
6944 NTKERNELAPI
6945 BOOLEAN
6946 NTAPI
6947 FsRtlLookupMcbEntry(
6948 IN PMCB Mcb,
6949 IN VBN Vbn,
6950 OUT PLBN Lbn,
6951 OUT PULONG SectorCount OPTIONAL,
6952 OUT PULONG Index);
6953
6954 NTKERNELAPI
6955 BOOLEAN
6956 NTAPI
6957 FsRtlLookupLastMcbEntry(
6958 IN PMCB Mcb,
6959 OUT PVBN Vbn,
6960 OUT PLBN Lbn);
6961
6962 NTKERNELAPI
6963 ULONG
6964 NTAPI
6965 FsRtlNumberOfRunsInMcb(
6966 IN PMCB Mcb);
6967
6968 NTKERNELAPI
6969 BOOLEAN
6970 NTAPI
6971 FsRtlGetNextMcbEntry(
6972 IN PMCB Mcb,
6973 IN ULONG RunIndex,
6974 OUT PVBN Vbn,
6975 OUT PLBN Lbn,
6976 OUT PULONG SectorCount);
6977
6978 NTKERNELAPI
6979 NTSTATUS
6980 NTAPI
6981 FsRtlBalanceReads(
6982 IN PDEVICE_OBJECT TargetDevice);
6983
6984 NTKERNELAPI
6985 VOID
6986 NTAPI
6987 FsRtlInitializeOplock(
6988 IN OUT POPLOCK Oplock);
6989
6990 NTKERNELAPI
6991 VOID
6992 NTAPI
6993 FsRtlUninitializeOplock(
6994 IN OUT POPLOCK Oplock);
6995
6996 NTKERNELAPI
6997 NTSTATUS
6998 NTAPI
6999 FsRtlOplockFsctrl(
7000 IN POPLOCK Oplock,
7001 IN PIRP Irp,
7002 IN ULONG OpenCount);
7003
7004 NTKERNELAPI
7005 NTSTATUS
7006 NTAPI
7007 FsRtlCheckOplock(
7008 IN POPLOCK Oplock,
7009 IN PIRP Irp,
7010 IN PVOID Context,
7011 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
7012 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
7013
7014 NTKERNELAPI
7015 BOOLEAN
7016 NTAPI
7017 FsRtlOplockIsFastIoPossible(
7018 IN POPLOCK Oplock);
7019
7020 NTKERNELAPI
7021 BOOLEAN
7022 NTAPI
7023 FsRtlCurrentBatchOplock(
7024 IN POPLOCK Oplock);
7025
7026 NTKERNELAPI
7027 NTSTATUS
7028 NTAPI
7029 FsRtlNotifyVolumeEvent(
7030 IN PFILE_OBJECT FileObject,
7031 IN ULONG EventCode);
7032
7033 NTKERNELAPI
7034 VOID
7035 NTAPI
7036 FsRtlNotifyInitializeSync(
7037 IN PNOTIFY_SYNC *NotifySync);
7038
7039 NTKERNELAPI
7040 VOID
7041 NTAPI
7042 FsRtlNotifyUninitializeSync(
7043 IN PNOTIFY_SYNC *NotifySync);
7044
7045 NTKERNELAPI
7046 VOID
7047 NTAPI
7048 FsRtlNotifyFullChangeDirectory(
7049 IN PNOTIFY_SYNC NotifySync,
7050 IN PLIST_ENTRY NotifyList,
7051 IN PVOID FsContext,
7052 IN PSTRING FullDirectoryName,
7053 IN BOOLEAN WatchTree,
7054 IN BOOLEAN IgnoreBuffer,
7055 IN ULONG CompletionFilter,
7056 IN PIRP NotifyIrp OPTIONAL,
7057 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
7058 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL);
7059
7060 NTKERNELAPI
7061 VOID
7062 NTAPI
7063 FsRtlNotifyFilterReportChange(
7064 IN PNOTIFY_SYNC NotifySync,
7065 IN PLIST_ENTRY NotifyList,
7066 IN PSTRING FullTargetName,
7067 IN USHORT TargetNameOffset,
7068 IN PSTRING StreamName OPTIONAL,
7069 IN PSTRING NormalizedParentName OPTIONAL,
7070 IN ULONG FilterMatch,
7071 IN ULONG Action,
7072 IN PVOID TargetContext OPTIONAL,
7073 IN PVOID FilterContext OPTIONAL);
7074
7075 NTKERNELAPI
7076 VOID
7077 NTAPI
7078 FsRtlNotifyFullReportChange(
7079 IN PNOTIFY_SYNC NotifySync,
7080 IN PLIST_ENTRY NotifyList,
7081 IN PSTRING FullTargetName,
7082 IN USHORT TargetNameOffset,
7083 IN PSTRING StreamName OPTIONAL,
7084 IN PSTRING NormalizedParentName OPTIONAL,
7085 IN ULONG FilterMatch,
7086 IN ULONG Action,
7087 IN PVOID TargetContext OPTIONAL);
7088
7089 NTKERNELAPI
7090 VOID
7091 NTAPI
7092 FsRtlNotifyCleanup(
7093 IN PNOTIFY_SYNC NotifySync,
7094 IN PLIST_ENTRY NotifyList,
7095 IN PVOID FsContext);
7096
7097 NTKERNELAPI
7098 VOID
7099 NTAPI
7100 FsRtlDissectName(
7101 IN UNICODE_STRING Name,
7102 OUT PUNICODE_STRING FirstPart,
7103 OUT PUNICODE_STRING RemainingPart);
7104
7105 NTKERNELAPI
7106 BOOLEAN
7107 NTAPI
7108 FsRtlDoesNameContainWildCards(
7109 IN PUNICODE_STRING Name);
7110
7111 NTKERNELAPI
7112 BOOLEAN
7113 NTAPI
7114 FsRtlAreNamesEqual(
7115 IN PCUNICODE_STRING Name1,
7116 IN PCUNICODE_STRING Name2,
7117 IN BOOLEAN IgnoreCase,
7118 IN PCWCH UpcaseTable OPTIONAL);
7119
7120 NTKERNELAPI
7121 BOOLEAN
7122 NTAPI
7123 FsRtlIsNameInExpression(
7124 IN PUNICODE_STRING Expression,
7125 IN PUNICODE_STRING Name,
7126 IN BOOLEAN IgnoreCase,
7127 IN PWCHAR UpcaseTable OPTIONAL);
7128
7129 NTKERNELAPI
7130 VOID
7131 NTAPI
7132 FsRtlPostPagingFileStackOverflow(
7133 IN PVOID Context,
7134 IN PKEVENT Event,
7135 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
7136
7137 NTKERNELAPI
7138 VOID
7139 NTAPI
7140 FsRtlPostStackOverflow (
7141 IN PVOID Context,
7142 IN PKEVENT Event,
7143 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
7144
7145 NTKERNELAPI
7146 NTSTATUS
7147 NTAPI
7148 FsRtlRegisterUncProvider(
7149 OUT PHANDLE MupHandle,
7150 IN PUNICODE_STRING RedirectorDeviceName,
7151 IN BOOLEAN MailslotsSupported);
7152
7153 NTKERNELAPI
7154 VOID
7155 NTAPI
7156 FsRtlDeregisterUncProvider(
7157 IN HANDLE Handle);
7158
7159 NTKERNELAPI
7160 VOID
7161 NTAPI
7162 FsRtlTeardownPerStreamContexts(
7163 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
7164
7165 NTKERNELAPI
7166 NTSTATUS
7167 NTAPI
7168 FsRtlCreateSectionForDataScan(
7169 OUT PHANDLE SectionHandle,
7170 OUT PVOID *SectionObject,
7171 OUT PLARGE_INTEGER SectionFileSize OPTIONAL,
7172 IN PFILE_OBJECT FileObject,
7173 IN ACCESS_MASK DesiredAccess,
7174 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
7175 IN PLARGE_INTEGER MaximumSize OPTIONAL,
7176 IN ULONG SectionPageProtection,
7177 IN ULONG AllocationAttributes,
7178 IN ULONG Flags);
7179
7180 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
7181
7182 #if (NTDDI_VERSION >= NTDDI_WINXP)
7183
7184 NTKERNELAPI
7185 VOID
7186 NTAPI
7187 FsRtlNotifyFilterChangeDirectory(
7188 IN PNOTIFY_SYNC NotifySync,
7189 IN PLIST_ENTRY NotifyList,
7190 IN PVOID FsContext,
7191 IN PSTRING FullDirectoryName,
7192 IN BOOLEAN WatchTree,
7193 IN BOOLEAN IgnoreBuffer,
7194 IN ULONG CompletionFilter,
7195 IN PIRP NotifyIrp OPTIONAL,
7196 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
7197 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL,
7198 IN PFILTER_REPORT_CHANGE FilterCallback OPTIONAL);
7199
7200 NTKERNELAPI
7201 NTSTATUS
7202 NTAPI
7203 FsRtlInsertPerStreamContext(
7204 IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext,
7205 IN PFSRTL_PER_STREAM_CONTEXT Ptr);
7206
7207 NTKERNELAPI
7208 PFSRTL_PER_STREAM_CONTEXT
7209 NTAPI
7210 FsRtlLookupPerStreamContextInternal(
7211 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
7212 IN PVOID OwnerId OPTIONAL,
7213 IN PVOID InstanceId OPTIONAL);
7214
7215 NTKERNELAPI
7216 PFSRTL_PER_STREAM_CONTEXT
7217 NTAPI
7218 FsRtlRemovePerStreamContext(
7219 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
7220 IN PVOID OwnerId OPTIONAL,
7221 IN PVOID InstanceId OPTIONAL);
7222
7223 NTKERNELAPI
7224 VOID
7225 NTAPI
7226 FsRtlIncrementCcFastReadNotPossible(
7227 VOID);
7228
7229 NTKERNELAPI
7230 VOID
7231 NTAPI
7232 FsRtlIncrementCcFastReadWait(
7233 VOID);
7234
7235 NTKERNELAPI
7236 VOID
7237 NTAPI
7238 FsRtlIncrementCcFastReadNoWait(
7239 VOID);
7240
7241 NTKERNELAPI
7242 VOID
7243 NTAPI
7244 FsRtlIncrementCcFastReadResourceMiss(
7245 VOID);
7246
7247 NTKERNELAPI
7248 LOGICAL
7249 NTAPI
7250 FsRtlIsPagingFile(
7251 IN PFILE_OBJECT FileObject);
7252
7253 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
7254
7255 #if (NTDDI_VERSION >= NTDDI_WS03)
7256
7257 NTKERNELAPI
7258 VOID
7259 NTAPI
7260 FsRtlInitializeBaseMcb(
7261 IN PBASE_MCB Mcb,
7262 IN POOL_TYPE PoolType);
7263
7264 NTKERNELAPI
7265 VOID
7266 NTAPI
7267 FsRtlUninitializeBaseMcb(
7268 IN PBASE_MCB Mcb);
7269
7270 NTKERNELAPI
7271 VOID
7272 NTAPI
7273 FsRtlResetBaseMcb(
7274 IN PBASE_MCB Mcb);
7275
7276 NTKERNELAPI
7277 VOID
7278 NTAPI
7279 FsRtlTruncateBaseMcb(
7280 IN PBASE_MCB Mcb,
7281 IN LONGLONG Vbn);
7282
7283 NTKERNELAPI
7284 BOOLEAN
7285 NTAPI
7286 FsRtlAddBaseMcbEntry(
7287 IN PBASE_MCB Mcb,
7288 IN LONGLONG Vbn,
7289 IN LONGLONG Lbn,
7290 IN LONGLONG SectorCount);
7291
7292 NTKERNELAPI
7293 BOOLEAN
7294 NTAPI
7295 FsRtlRemoveBaseMcbEntry(
7296 IN PBASE_MCB Mcb,
7297 IN LONGLONG Vbn,
7298 IN LONGLONG SectorCount);
7299
7300 NTKERNELAPI
7301 BOOLEAN
7302 NTAPI
7303 FsRtlLookupBaseMcbEntry(
7304 IN PBASE_MCB Mcb,
7305 IN LONGLONG Vbn,
7306 OUT PLONGLONG Lbn OPTIONAL,
7307 OUT PLONGLONG SectorCountFromLbn OPTIONAL,
7308 OUT PLONGLONG StartingLbn OPTIONAL,
7309 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
7310 OUT PULONG Index OPTIONAL);
7311
7312 NTKERNELAPI
7313 BOOLEAN
7314 NTAPI
7315 FsRtlLookupLastBaseMcbEntry(
7316 IN PBASE_MCB Mcb,
7317 OUT PLONGLONG Vbn,
7318 OUT PLONGLONG Lbn);
7319
7320 NTKERNELAPI
7321 BOOLEAN
7322 NTAPI
7323 FsRtlLookupLastBaseMcbEntryAndIndex(
7324 IN PBASE_MCB OpaqueMcb,
7325 IN OUT PLONGLONG LargeVbn,
7326 IN OUT PLONGLONG LargeLbn,
7327 IN OUT PULONG Index);
7328
7329 NTKERNELAPI
7330 ULONG
7331 NTAPI
7332 FsRtlNumberOfRunsInBaseMcb(
7333 IN PBASE_MCB Mcb);
7334
7335 NTKERNELAPI
7336 BOOLEAN
7337 NTAPI
7338 FsRtlGetNextBaseMcbEntry(
7339 IN PBASE_MCB Mcb,
7340 IN ULONG RunIndex,
7341 OUT PLONGLONG Vbn,
7342 OUT PLONGLONG Lbn,
7343 OUT PLONGLONG SectorCount);
7344
7345 NTKERNELAPI
7346 BOOLEAN
7347 NTAPI
7348 FsRtlSplitBaseMcb(
7349 IN PBASE_MCB Mcb,
7350 IN LONGLONG Vbn,
7351 IN LONGLONG Amount);
7352
7353 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
7354
7355 #if (NTDDI_VERSION >= NTDDI_VISTA)
7356
7357 BOOLEAN
7358 NTAPI
7359 FsRtlInitializeBaseMcbEx(
7360 IN PBASE_MCB Mcb,
7361 IN POOL_TYPE PoolType,
7362 IN USHORT Flags);
7363
7364 NTSTATUS
7365 NTAPI
7366 FsRtlAddBaseMcbEntryEx(
7367 IN PBASE_MCB Mcb,
7368 IN LONGLONG Vbn,
7369 IN LONGLONG Lbn,
7370 IN LONGLONG SectorCount);
7371
7372 NTKERNELAPI
7373 BOOLEAN
7374 NTAPI
7375 FsRtlCurrentOplock(
7376 IN POPLOCK Oplock);
7377
7378 NTKERNELAPI
7379 NTSTATUS
7380 NTAPI
7381 FsRtlOplockBreakToNone(
7382 IN OUT POPLOCK Oplock,
7383 IN PIO_STACK_LOCATION IrpSp OPTIONAL,
7384 IN PIRP Irp,
7385 IN PVOID Context OPTIONAL,
7386 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
7387 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
7388
7389 NTKERNELAPI
7390 NTSTATUS
7391 NTAPI
7392 FsRtlNotifyVolumeEventEx(
7393 IN PFILE_OBJECT FileObject,
7394 IN ULONG EventCode,
7395 IN PTARGET_DEVICE_CUSTOM_NOTIFICATION Event);
7396
7397 NTKERNELAPI
7398 VOID
7399 NTAPI
7400 FsRtlNotifyCleanupAll(
7401 IN PNOTIFY_SYNC NotifySync,
7402 IN PLIST_ENTRY NotifyList);
7403
7404 NTSTATUS
7405 NTAPI
7406 FsRtlRegisterUncProviderEx(
7407 OUT PHANDLE MupHandle,
7408 IN PUNICODE_STRING RedirDevName,
7409 IN PDEVICE_OBJECT DeviceObject,
7410 IN ULONG Flags);
7411
7412 NTKERNELAPI
7413 NTSTATUS
7414 NTAPI
7415 FsRtlCancellableWaitForSingleObject(
7416 IN PVOID Object,
7417 IN PLARGE_INTEGER Timeout OPTIONAL,
7418 IN PIRP Irp OPTIONAL);
7419
7420 NTKERNELAPI
7421 NTSTATUS
7422 NTAPI
7423 FsRtlCancellableWaitForMultipleObjects(
7424 IN ULONG Count,
7425 IN PVOID ObjectArray[],
7426 IN WAIT_TYPE WaitType,
7427 IN PLARGE_INTEGER Timeout OPTIONAL,
7428 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL,
7429 IN PIRP Irp OPTIONAL);
7430
7431 NTKERNELAPI
7432 NTSTATUS
7433 NTAPI
7434 FsRtlMupGetProviderInfoFromFileObject(
7435 IN PFILE_OBJECT pFileObject,
7436 IN ULONG Level,
7437 OUT PVOID pBuffer,
7438 IN OUT PULONG pBufferSize);
7439
7440 NTKERNELAPI
7441 NTSTATUS
7442 NTAPI
7443 FsRtlMupGetProviderIdFromName(
7444 IN PUNICODE_STRING pProviderName,
7445 OUT PULONG32 pProviderId);
7446
7447 NTKERNELAPI
7448 VOID
7449 NTAPI
7450 FsRtlIncrementCcFastMdlReadWait(
7451 VOID);
7452
7453 NTKERNELAPI
7454 NTSTATUS
7455 NTAPI
7456 FsRtlValidateReparsePointBuffer(
7457 IN ULONG BufferLength,
7458 IN PREPARSE_DATA_BUFFER ReparseBuffer);
7459
7460 NTKERNELAPI
7461 NTSTATUS
7462 NTAPI
7463 FsRtlRemoveDotsFromPath(
7464 IN OUT PWSTR OriginalString,
7465 IN USHORT PathLength,
7466 OUT USHORT *NewLength);
7467
7468 NTKERNELAPI
7469 NTSTATUS
7470 NTAPI
7471 FsRtlAllocateExtraCreateParameterList(
7472 IN FSRTL_ALLOCATE_ECPLIST_FLAGS Flags,
7473 OUT PECP_LIST *EcpList);
7474
7475 NTKERNELAPI
7476 VOID
7477 NTAPI
7478 FsRtlFreeExtraCreateParameterList(
7479 IN PECP_LIST EcpList);
7480
7481 NTKERNELAPI
7482 NTSTATUS
7483 NTAPI
7484 FsRtlAllocateExtraCreateParameter(
7485 IN LPCGUID EcpType,
7486 IN ULONG SizeOfContext,
7487 IN FSRTL_ALLOCATE_ECP_FLAGS Flags,
7488 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
7489 IN ULONG PoolTag,
7490 OUT PVOID *EcpContext);
7491
7492 NTKERNELAPI
7493 VOID
7494 NTAPI
7495 FsRtlFreeExtraCreateParameter(
7496 IN PVOID EcpContext);
7497
7498 NTKERNELAPI
7499 VOID
7500 NTAPI
7501 FsRtlInitExtraCreateParameterLookasideList(
7502 IN OUT PVOID Lookaside,
7503 IN FSRTL_ECP_LOOKASIDE_FLAGS Flags,
7504 IN SIZE_T Size,
7505 IN ULONG Tag);
7506
7507 VOID
7508 NTAPI
7509 FsRtlDeleteExtraCreateParameterLookasideList(
7510 IN OUT PVOID Lookaside,
7511 IN FSRTL_ECP_LOOKASIDE_FLAGS Flags);
7512
7513 NTKERNELAPI
7514 NTSTATUS
7515 NTAPI
7516 FsRtlAllocateExtraCreateParameterFromLookasideList(
7517 IN LPCGUID EcpType,
7518 IN ULONG SizeOfContext,
7519 IN FSRTL_ALLOCATE_ECP_FLAGS Flags,
7520 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
7521 IN OUT PVOID LookasideList,
7522 OUT PVOID *EcpContext);
7523
7524 NTKERNELAPI
7525 NTSTATUS
7526 NTAPI
7527 FsRtlInsertExtraCreateParameter(
7528 IN OUT PECP_LIST EcpList,
7529 IN OUT PVOID EcpContext);
7530
7531 NTKERNELAPI
7532 NTSTATUS
7533 NTAPI
7534 FsRtlFindExtraCreateParameter(
7535 IN PECP_LIST EcpList,
7536 IN LPCGUID EcpType,
7537 OUT PVOID *EcpContext OPTIONAL,
7538 OUT ULONG *EcpContextSize OPTIONAL);
7539
7540 NTKERNELAPI
7541 NTSTATUS
7542 NTAPI
7543 FsRtlRemoveExtraCreateParameter(
7544 IN OUT PECP_LIST EcpList,
7545 IN LPCGUID EcpType,
7546 OUT PVOID *EcpContext,
7547 OUT ULONG *EcpContextSize OPTIONAL);
7548
7549 NTKERNELAPI
7550 NTSTATUS
7551 NTAPI
7552 FsRtlGetEcpListFromIrp(
7553 IN PIRP Irp,
7554 OUT PECP_LIST *EcpList OPTIONAL);
7555
7556 NTKERNELAPI
7557 NTSTATUS
7558 NTAPI
7559 FsRtlSetEcpListIntoIrp(
7560 IN OUT PIRP Irp,
7561 IN PECP_LIST EcpList);
7562
7563 NTKERNELAPI
7564 NTSTATUS
7565 NTAPI
7566 FsRtlGetNextExtraCreateParameter(
7567 IN PECP_LIST EcpList,
7568 IN PVOID CurrentEcpContext OPTIONAL,
7569 OUT LPGUID NextEcpType OPTIONAL,
7570 OUT PVOID *NextEcpContext OPTIONAL,
7571 OUT ULONG *NextEcpContextSize OPTIONAL);
7572
7573 NTKERNELAPI
7574 VOID
7575 NTAPI
7576 FsRtlAcknowledgeEcp(
7577 IN PVOID EcpContext);
7578
7579 NTKERNELAPI
7580 BOOLEAN
7581 NTAPI
7582 FsRtlIsEcpAcknowledged(
7583 IN PVOID EcpContext);
7584
7585 NTKERNELAPI
7586 BOOLEAN
7587 NTAPI
7588 FsRtlIsEcpFromUserMode(
7589 IN PVOID EcpContext);
7590
7591 NTKERNELAPI
7592 NTSTATUS
7593 NTAPI
7594 FsRtlChangeBackingFileObject(
7595 IN PFILE_OBJECT CurrentFileObject OPTIONAL,
7596 IN PFILE_OBJECT NewFileObject,
7597 IN FSRTL_CHANGE_BACKING_TYPE ChangeBackingType,
7598 IN ULONG Flags);
7599
7600 NTKERNELAPI
7601 NTSTATUS
7602 NTAPI
7603 FsRtlLogCcFlushError(
7604 IN PUNICODE_STRING FileName,
7605 IN PDEVICE_OBJECT DeviceObject,
7606 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
7607 IN NTSTATUS FlushError,
7608 IN ULONG Flags);
7609
7610 NTKERNELAPI
7611 BOOLEAN
7612 NTAPI
7613 FsRtlAreVolumeStartupApplicationsComplete(
7614 VOID);
7615
7616 NTKERNELAPI
7617 ULONG
7618 NTAPI
7619 FsRtlQueryMaximumVirtualDiskNestingLevel(
7620 VOID);
7621
7622 NTKERNELAPI
7623 NTSTATUS
7624 NTAPI
7625 FsRtlGetVirtualDiskNestingLevel(
7626 IN PDEVICE_OBJECT DeviceObject,
7627 OUT PULONG NestingLevel,
7628 OUT PULONG NestingFlags OPTIONAL);
7629
7630 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
7631
7632 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
7633 NTKERNELAPI
7634 NTSTATUS
7635 NTAPI
7636 FsRtlCheckOplockEx(
7637 IN POPLOCK Oplock,
7638 IN PIRP Irp,
7639 IN ULONG Flags,
7640 IN PVOID Context OPTIONAL,
7641 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
7642 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
7643
7644 #endif
7645
7646 #if (NTDDI_VERSION >= NTDDI_WIN7)
7647
7648 NTKERNELAPI
7649 BOOLEAN
7650 NTAPI
7651 FsRtlAreThereCurrentOrInProgressFileLocks(
7652 IN PFILE_LOCK FileLock);
7653
7654 NTKERNELAPI
7655 BOOLEAN
7656 NTAPI
7657 FsRtlOplockIsSharedRequest(
7658 IN PIRP Irp);
7659
7660 NTKERNELAPI
7661 NTSTATUS
7662 NTAPI
7663 FsRtlOplockBreakH(
7664 IN POPLOCK Oplock,
7665 IN PIRP Irp,
7666 IN ULONG Flags,
7667 IN PVOID Context OPTIONAL,
7668 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
7669 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
7670
7671 NTKERNELAPI
7672 BOOLEAN
7673 NTAPI
7674 FsRtlCurrentOplockH(
7675 IN POPLOCK Oplock);
7676
7677 NTKERNELAPI
7678 NTSTATUS
7679 NTAPI
7680 FsRtlOplockBreakToNoneEx(
7681 IN OUT POPLOCK Oplock,
7682 IN PIRP Irp,
7683 IN ULONG Flags,
7684 IN PVOID Context OPTIONAL,
7685 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
7686 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
7687
7688 NTKERNELAPI
7689 NTSTATUS
7690 NTAPI
7691 FsRtlOplockFsctrlEx(
7692 IN POPLOCK Oplock,
7693 IN PIRP Irp,
7694 IN ULONG OpenCount,
7695 IN ULONG Flags);
7696
7697 NTKERNELAPI
7698 BOOLEAN
7699 NTAPI
7700 FsRtlOplockKeysEqual(
7701 IN PFILE_OBJECT Fo1 OPTIONAL,
7702 IN PFILE_OBJECT Fo2 OPTIONAL);
7703
7704 NTKERNELAPI
7705 NTSTATUS
7706 NTAPI
7707 FsRtlInitializeExtraCreateParameterList(
7708 IN OUT PECP_LIST EcpList);
7709
7710 NTKERNELAPI
7711 VOID
7712 NTAPI
7713 FsRtlInitializeExtraCreateParameter(
7714 IN PECP_HEADER Ecp,
7715 IN ULONG EcpFlags,
7716 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
7717 IN ULONG TotalSize,
7718 IN LPCGUID EcpType,
7719 IN PVOID ListAllocatedFrom OPTIONAL);
7720
7721 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
7722
7723 NTKERNELAPI
7724 NTSTATUS
7725 NTAPI
7726 FsRtlInsertPerFileContext(
7727 IN PVOID* PerFileContextPointer,
7728 IN PFSRTL_PER_FILE_CONTEXT Ptr);
7729
7730 NTKERNELAPI
7731 PFSRTL_PER_FILE_CONTEXT
7732 NTAPI
7733 FsRtlLookupPerFileContext(
7734 IN PVOID* PerFileContextPointer,
7735 IN PVOID OwnerId OPTIONAL,
7736 IN PVOID InstanceId OPTIONAL);
7737
7738 NTKERNELAPI
7739 PFSRTL_PER_FILE_CONTEXT
7740 NTAPI
7741 FsRtlRemovePerFileContext(
7742 IN PVOID* PerFileContextPointer,
7743 IN PVOID OwnerId OPTIONAL,
7744 IN PVOID InstanceId OPTIONAL);
7745
7746 NTKERNELAPI
7747 VOID
7748 NTAPI
7749 FsRtlTeardownPerFileContexts(
7750 IN PVOID* PerFileContextPointer);
7751
7752 NTKERNELAPI
7753 NTSTATUS
7754 NTAPI
7755 FsRtlInsertPerFileObjectContext(
7756 IN PFILE_OBJECT FileObject,
7757 IN PFSRTL_PER_FILEOBJECT_CONTEXT Ptr);
7758
7759 NTKERNELAPI
7760 PFSRTL_PER_FILEOBJECT_CONTEXT
7761 NTAPI
7762 FsRtlLookupPerFileObjectContext(
7763 IN PFILE_OBJECT FileObject,
7764 IN PVOID OwnerId OPTIONAL,
7765 IN PVOID InstanceId OPTIONAL);
7766
7767 NTKERNELAPI
7768 PFSRTL_PER_FILEOBJECT_CONTEXT
7769 NTAPI
7770 FsRtlRemovePerFileObjectContext(
7771 IN PFILE_OBJECT FileObject,
7772 IN PVOID OwnerId OPTIONAL,
7773 IN PVOID InstanceId OPTIONAL);
7774
7775 #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
7776 FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
7777 )
7778
7779 #define FsRtlAreThereCurrentFileLocks(FL) ( \
7780 ((FL)->FastIoIsQuestionable) \
7781 )
7782
7783 #define FsRtlIncrementLockRequestsInProgress(FL) { \
7784 ASSERT( (FL)->LockRequestsInProgress >= 0 ); \
7785 (void) \
7786 (InterlockedIncrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
7787 }
7788
7789 #define FsRtlDecrementLockRequestsInProgress(FL) { \
7790 ASSERT( (FL)->LockRequestsInProgress > 0 ); \
7791 (void) \
7792 (InterlockedDecrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
7793 }
7794
7795 extern NTKERNELAPI PUSHORT NlsOemLeadByteInfo;
7796 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
7797
7798 #ifdef NLS_MB_CODE_PAGE_TAG
7799 #undef NLS_MB_CODE_PAGE_TAG
7800 #endif
7801 #define NLS_MB_CODE_PAGE_TAG NlsMbOemCodePageTag
7802
7803 /* GCC compatible definition, MS one is retarded */
7804 extern NTKERNELAPI const UCHAR * const FsRtlLegalAnsiCharacterArray;
7805 #define LEGAL_ANSI_CHARACTER_ARRAY FsRtlLegalAnsiCharacterArray
7806
7807 #define FsRtlIsAnsiCharacterWild(C) ( \
7808 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \
7809 )
7810
7811 #define FsRtlIsAnsiCharacterLegalFat(C, WILD) ( \
7812 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_FAT_LEGAL) | \
7813 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7814 )
7815
7816 #define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) ( \
7817 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) | \
7818 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7819 )
7820
7821 #define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) ( \
7822 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) | \
7823 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7824 )
7825
7826 #define FsRtlIsAnsiCharacterLegalNtfsStream(C,WILD_OK) ( \
7827 FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_NTFS_STREAM_LEGAL) \
7828 )
7829
7830 #define FsRtlIsAnsiCharacterLegal(C,FLAGS) ( \
7831 FsRtlTestAnsiCharacter((C), TRUE, FALSE, (FLAGS)) \
7832 )
7833
7834 #define FsRtlTestAnsiCharacter(C, DEFAULT_RET, WILD_OK, FLAGS) ( \
7835 ((SCHAR)(C) < 0) ? DEFAULT_RET : \
7836 FlagOn( LEGAL_ANSI_CHARACTER_ARRAY[(C)], \
7837 (FLAGS) | \
7838 ((WILD_OK) ? FSRTL_WILD_CHARACTER : 0) ) \
7839 )
7840
7841 #define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \
7842 (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \
7843 (NLS_MB_CODE_PAGE_TAG && \
7844 (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \
7845 )
7846
7847 #define FsRtlIsUnicodeCharacterWild(C) ( \
7848 (((C) >= 0x40) ? \
7849 FALSE : \
7850 FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER )) \
7851 )
7852
7853 #define FsRtlInitPerFileContext( _fc, _owner, _inst, _cb) \
7854 ((_fc)->OwnerId = (_owner), \
7855 (_fc)->InstanceId = (_inst), \
7856 (_fc)->FreeCallback = (_cb))
7857
7858 #define FsRtlGetPerFileContextPointer(_fo) \
7859 (FsRtlSupportsPerFileContexts(_fo) ? \
7860 FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer : \
7861 NULL)
7862
7863 #define FsRtlSupportsPerFileContexts(_fo) \
7864 ((FsRtlGetPerStreamContextPointer(_fo) != NULL) && \
7865 (FsRtlGetPerStreamContextPointer(_fo)->Version >= FSRTL_FCB_HEADER_V1) && \
7866 (FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer != NULL))
7867
7868 #define FsRtlSetupAdvancedHeaderEx( _advhdr, _fmutx, _fctxptr ) \
7869 { \
7870 FsRtlSetupAdvancedHeader( _advhdr, _fmutx ); \
7871 if ((_fctxptr) != NULL) { \
7872 (_advhdr)->FileContextSupportPointer = (_fctxptr); \
7873 } \
7874 }
7875
7876 #define FsRtlGetPerStreamContextPointer(FO) ( \
7877 (PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext \
7878 )
7879
7880 #define FsRtlInitPerStreamContext(PSC, O, I, FC) ( \
7881 (PSC)->OwnerId = (O), \
7882 (PSC)->InstanceId = (I), \
7883 (PSC)->FreeCallback = (FC) \
7884 )
7885
7886 #define FsRtlSupportsPerStreamContexts(FO) ( \
7887 (BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) && \
7888 FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \
7889 FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS)) \
7890 )
7891
7892 #define FsRtlLookupPerStreamContext(_sc, _oid, _iid) \
7893 (((NULL != (_sc)) && \
7894 FlagOn((_sc)->Flags2,FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS) && \
7895 !IsListEmpty(&(_sc)->FilterContexts)) ? \
7896 FsRtlLookupPerStreamContextInternal((_sc), (_oid), (_iid)) : \
7897 NULL)
7898
7899 VOID
7900 FORCEINLINE
7901 NTAPI
7902 FsRtlSetupAdvancedHeader(
7903 IN PVOID AdvHdr,
7904 IN PFAST_MUTEX FMutex )
7905 {
7906 PFSRTL_ADVANCED_FCB_HEADER localAdvHdr = (PFSRTL_ADVANCED_FCB_HEADER)AdvHdr;
7907
7908 localAdvHdr->Flags |= FSRTL_FLAG_ADVANCED_HEADER;
7909 localAdvHdr->Flags2 |= FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS;
7910 #if (NTDDI_VERSION >= NTDDI_VISTA)
7911 localAdvHdr->Version = FSRTL_FCB_HEADER_V1;
7912 #else
7913 localAdvHdr->Version = FSRTL_FCB_HEADER_V0;
7914 #endif
7915 InitializeListHead( &localAdvHdr->FilterContexts );
7916 if (FMutex != NULL) {
7917 localAdvHdr->FastMutex = FMutex;
7918 }
7919 #if (NTDDI_VERSION >= NTDDI_VISTA)
7920 *((PULONG_PTR)(&localAdvHdr->PushLock)) = 0;
7921 localAdvHdr->FileContextSupportPointer = NULL;
7922 #endif
7923 }
7924
7925 #define FsRtlInitPerFileObjectContext(_fc, _owner, _inst) \
7926 ((_fc)->OwnerId = (_owner), (_fc)->InstanceId = (_inst))
7927
7928 #define FsRtlCompleteRequest(IRP,STATUS) { \
7929 (IRP)->IoStatus.Status = (STATUS); \
7930 IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
7931 }
7932
7933 #if (NTDDI_VERSION >= NTDDI_WIN7)
7934 typedef struct _ECP_HEADER ECP_HEADER, *PECP_HEADER;
7935 #endif
7936
7937 #if (NTDDI_VERSION >= NTDDI_VISTA)
7938
7939 typedef enum _NETWORK_OPEN_LOCATION_QUALIFIER {
7940 NetworkOpenLocationAny,
7941 NetworkOpenLocationRemote,
7942 NetworkOpenLocationLoopback
7943 } NETWORK_OPEN_LOCATION_QUALIFIER;
7944
7945 typedef enum _NETWORK_OPEN_INTEGRITY_QUALIFIER {
7946 NetworkOpenIntegrityAny,
7947 NetworkOpenIntegrityNone,
7948 NetworkOpenIntegritySigned,
7949 NetworkOpenIntegrityEncrypted,
7950 NetworkOpenIntegrityMaximum
7951 } NETWORK_OPEN_INTEGRITY_QUALIFIER;
7952
7953 #if (NTDDI_VERSION >= NTDDI_WIN7)
7954
7955 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_COLLAPSING 0x1
7956 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_DURABILITY 0x2
7957 #define NETWORK_OPEN_ECP_IN_FLAG_FORCE_BUFFERED_SYNCHRONOUS_IO_HACK 0x80000000
7958
7959 typedef struct _NETWORK_OPEN_ECP_CONTEXT {
7960 USHORT Size;
7961 USHORT Reserved;
7962 struct {
7963 struct {
7964 NETWORK_OPEN_LOCATION_QUALIFIER Location;
7965 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
7966 ULONG Flags;
7967 } in;
7968 struct {
7969 NETWORK_OPEN_LOCATION_QUALIFIER Location;
7970 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
7971 ULONG Flags;
7972 } out;
7973 } DUMMYSTRUCTNAME;
7974 } NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
7975
7976 typedef struct _NETWORK_OPEN_ECP_CONTEXT_V0 {
7977 USHORT Size;
7978 USHORT Reserved;
7979 struct {
7980 struct {
7981 NETWORK_OPEN_LOCATION_QUALIFIER Location;
7982 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
7983 } in;
7984 struct {
7985 NETWORK_OPEN_LOCATION_QUALIFIER Location;
7986 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
7987 } out;
7988 } DUMMYSTRUCTNAME;
7989 } NETWORK_OPEN_ECP_CONTEXT_V0, *PNETWORK_OPEN_ECP_CONTEXT_V0;
7990
7991 #elif (NTDDI_VERSION >= NTDDI_VISTA)
7992 typedef struct _NETWORK_OPEN_ECP_CONTEXT {
7993 USHORT Size;
7994 USHORT Reserved;
7995 struct {
7996 struct {
7997 NETWORK_OPEN_LOCATION_QUALIFIER Location;
7998 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
7999 } in;
8000 struct {
8001 NETWORK_OPEN_LOCATION_QUALIFIER Location;
8002 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
8003 } out;
8004 } DUMMYSTRUCTNAME;
8005 } NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
8006 #endif
8007
8008 DEFINE_GUID(GUID_ECP_NETWORK_OPEN_CONTEXT, 0xc584edbf, 0x00df, 0x4d28, 0xb8, 0x84, 0x35, 0xba, 0xca, 0x89, 0x11, 0xe8 );
8009
8010 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8011
8012
8013 #if (NTDDI_VERSION >= NTDDI_VISTA)
8014
8015 typedef struct _PREFETCH_OPEN_ECP_CONTEXT {
8016 PVOID Context;
8017 } PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT;
8018
8019 DEFINE_GUID(GUID_ECP_PREFETCH_OPEN, 0xe1777b21, 0x847e, 0x4837, 0xaa, 0x45, 0x64, 0x16, 0x1d, 0x28, 0x6, 0x55 );
8020
8021 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8022
8023 #if (NTDDI_VERSION >= NTDDI_WIN7)
8024
8025 DEFINE_GUID (GUID_ECP_NFS_OPEN, 0xf326d30c, 0xe5f8, 0x4fe7, 0xab, 0x74, 0xf5, 0xa3, 0x19, 0x6d, 0x92, 0xdb);
8026 DEFINE_GUID(GUID_ECP_SRV_OPEN, 0xbebfaebc, 0xaabf, 0x489d, 0x9d, 0x2c, 0xe9, 0xe3, 0x61, 0x10, 0x28, 0x53 );
8027
8028 typedef struct sockaddr_storage *PSOCKADDR_STORAGE_NFS;
8029
8030 typedef struct _NFS_OPEN_ECP_CONTEXT {
8031 PUNICODE_STRING ExportAlias;
8032 PSOCKADDR_STORAGE_NFS ClientSocketAddress;
8033 } NFS_OPEN_ECP_CONTEXT, *PNFS_OPEN_ECP_CONTEXT, **PPNFS_OPEN_ECP_CONTEXT;
8034
8035 typedef struct _SRV_OPEN_ECP_CONTEXT {
8036 PUNICODE_STRING ShareName;
8037 PSOCKADDR_STORAGE_NFS SocketAddress;
8038 BOOLEAN OplockBlockState;
8039 BOOLEAN OplockAppState;
8040 BOOLEAN OplockFinalState;
8041 } SRV_OPEN_ECP_CONTEXT, *PSRV_OPEN_ECP_CONTEXT;
8042
8043 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
8044
8045 #define VACB_MAPPING_GRANULARITY (0x40000)
8046 #define VACB_OFFSET_SHIFT (18)
8047
8048 typedef struct _PUBLIC_BCB {
8049 CSHORT NodeTypeCode;
8050 CSHORT NodeByteSize;
8051 ULONG MappedLength;
8052 LARGE_INTEGER MappedFileOffset;
8053 } PUBLIC_BCB, *PPUBLIC_BCB;
8054
8055 typedef struct _CC_FILE_SIZES {
8056 LARGE_INTEGER AllocationSize;
8057 LARGE_INTEGER FileSize;
8058 LARGE_INTEGER ValidDataLength;
8059 } CC_FILE_SIZES, *PCC_FILE_SIZES;
8060
8061 typedef BOOLEAN
8062 (NTAPI *PACQUIRE_FOR_LAZY_WRITE) (
8063 IN PVOID Context,
8064 IN BOOLEAN Wait);
8065
8066 typedef VOID
8067 (NTAPI *PRELEASE_FROM_LAZY_WRITE) (
8068 IN PVOID Context);
8069
8070 typedef BOOLEAN
8071 (NTAPI *PACQUIRE_FOR_READ_AHEAD) (
8072 IN PVOID Context,
8073 IN BOOLEAN Wait);
8074
8075 typedef VOID
8076 (NTAPI *PRELEASE_FROM_READ_AHEAD) (
8077 IN PVOID Context);
8078
8079 typedef struct _CACHE_MANAGER_CALLBACKS {
8080 PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite;
8081 PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite;
8082 PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead;
8083 PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead;
8084 } CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
8085
8086 typedef struct _CACHE_UNINITIALIZE_EVENT {
8087 struct _CACHE_UNINITIALIZE_EVENT *Next;
8088 KEVENT Event;
8089 } CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT;
8090
8091 typedef VOID
8092 (NTAPI *PDIRTY_PAGE_ROUTINE) (
8093 IN PFILE_OBJECT FileObject,
8094 IN PLARGE_INTEGER FileOffset,
8095 IN ULONG Length,
8096 IN PLARGE_INTEGER OldestLsn,
8097 IN PLARGE_INTEGER NewestLsn,
8098 IN PVOID Context1,
8099 IN PVOID Context2);
8100
8101 typedef VOID
8102 (NTAPI *PFLUSH_TO_LSN) (
8103 IN PVOID LogHandle,
8104 IN LARGE_INTEGER Lsn);
8105
8106 typedef VOID
8107 (NTAPI *PCC_POST_DEFERRED_WRITE) (
8108 IN PVOID Context1,
8109 IN PVOID Context2);
8110
8111 #define CcIsFileCached(FO) ( \
8112 ((FO)->SectionObjectPointer != NULL) && \
8113 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
8114 )
8115
8116 extern ULONG CcFastMdlReadWait;
8117
8118 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8119
8120 NTKERNELAPI
8121 VOID
8122 NTAPI
8123 CcInitializeCacheMap(
8124 IN PFILE_OBJECT FileObject,
8125 IN PCC_FILE_SIZES FileSizes,
8126 IN BOOLEAN PinAccess,
8127 IN PCACHE_MANAGER_CALLBACKS Callbacks,
8128 IN PVOID LazyWriteContext);
8129
8130 NTKERNELAPI
8131 BOOLEAN
8132 NTAPI
8133 CcUninitializeCacheMap(
8134 IN PFILE_OBJECT FileObject,
8135 IN PLARGE_INTEGER TruncateSize OPTIONAL,
8136 IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL);
8137
8138 NTKERNELAPI
8139 VOID
8140 NTAPI
8141 CcSetFileSizes(
8142 IN PFILE_OBJECT FileObject,
8143 IN PCC_FILE_SIZES FileSizes);
8144
8145 NTKERNELAPI
8146 VOID
8147 NTAPI
8148 CcSetDirtyPageThreshold(
8149 IN PFILE_OBJECT FileObject,
8150 IN ULONG DirtyPageThreshold);
8151
8152 NTKERNELAPI
8153 VOID
8154 NTAPI
8155 CcFlushCache(
8156 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
8157 IN PLARGE_INTEGER FileOffset OPTIONAL,
8158 IN ULONG Length,
8159 OUT PIO_STATUS_BLOCK IoStatus OPTIONAL);
8160
8161 NTKERNELAPI
8162 LARGE_INTEGER
8163 NTAPI
8164 CcGetFlushedValidData(
8165 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
8166 IN BOOLEAN BcbListHeld);
8167
8168 NTKERNELAPI
8169 BOOLEAN
8170 NTAPI
8171 CcZeroData(
8172 IN PFILE_OBJECT FileObject,
8173 IN PLARGE_INTEGER StartOffset,
8174 IN PLARGE_INTEGER EndOffset,
8175 IN BOOLEAN Wait);
8176
8177 NTKERNELAPI
8178 PVOID
8179 NTAPI
8180 CcRemapBcb(
8181 IN PVOID Bcb);
8182
8183 NTKERNELAPI
8184 VOID
8185 NTAPI
8186 CcRepinBcb(
8187 IN PVOID Bcb);
8188
8189 NTKERNELAPI
8190 VOID
8191 NTAPI
8192 CcUnpinRepinnedBcb(
8193 IN PVOID Bcb,
8194 IN BOOLEAN WriteThrough,
8195 OUT PIO_STATUS_BLOCK IoStatus);
8196
8197 NTKERNELAPI
8198 PFILE_OBJECT
8199 NTAPI
8200 CcGetFileObjectFromSectionPtrs(
8201 IN PSECTION_OBJECT_POINTERS SectionObjectPointer);
8202
8203 NTKERNELAPI
8204 PFILE_OBJECT
8205 NTAPI
8206 CcGetFileObjectFromBcb(
8207 IN PVOID Bcb);
8208
8209 NTKERNELAPI
8210 BOOLEAN
8211 NTAPI
8212 CcCanIWrite(
8213 IN PFILE_OBJECT FileObject,
8214 IN ULONG BytesToWrite,
8215 IN BOOLEAN Wait,
8216 IN BOOLEAN Retrying);
8217
8218 NTKERNELAPI
8219 VOID
8220 NTAPI
8221 CcDeferWrite(
8222 IN PFILE_OBJECT FileObject,
8223 IN PCC_POST_DEFERRED_WRITE PostRoutine,
8224 IN PVOID Context1,
8225 IN PVOID Context2,
8226 IN ULONG BytesToWrite,
8227 IN BOOLEAN Retrying);
8228
8229 NTKERNELAPI
8230 BOOLEAN
8231 NTAPI
8232 CcCopyRead(
8233 IN PFILE_OBJECT FileObject,
8234 IN PLARGE_INTEGER FileOffset,
8235 IN ULONG Length,
8236 IN BOOLEAN Wait,
8237 OUT PVOID Buffer,
8238 OUT PIO_STATUS_BLOCK IoStatus);
8239
8240 NTKERNELAPI
8241 VOID
8242 NTAPI
8243 CcFastCopyRead(
8244 IN PFILE_OBJECT FileObject,
8245 IN ULONG FileOffset,
8246 IN ULONG Length,
8247 IN ULONG PageCount,
8248 OUT PVOID Buffer,
8249 OUT PIO_STATUS_BLOCK IoStatus);
8250
8251 NTKERNELAPI
8252 BOOLEAN
8253 NTAPI
8254 CcCopyWrite(
8255 IN PFILE_OBJECT FileObject,
8256 IN PLARGE_INTEGER FileOffset,
8257 IN ULONG Length,
8258 IN BOOLEAN Wait,
8259 IN PVOID Buffer);
8260
8261 NTKERNELAPI
8262 VOID
8263 NTAPI
8264 CcFastCopyWrite(
8265 IN PFILE_OBJECT FileObject,
8266 IN ULONG FileOffset,
8267 IN ULONG Length,
8268 IN PVOID Buffer);
8269
8270 NTKERNELAPI
8271 VOID
8272 NTAPI
8273 CcMdlRead(
8274 IN PFILE_OBJECT FileObject,
8275 IN PLARGE_INTEGER FileOffset,
8276 IN ULONG Length,
8277 OUT PMDL *MdlChain,
8278 OUT PIO_STATUS_BLOCK IoStatus);
8279
8280 NTKERNELAPI
8281 VOID
8282 NTAPI
8283 CcMdlReadComplete(
8284 IN PFILE_OBJECT FileObject,
8285 IN PMDL MdlChain);
8286
8287 NTKERNELAPI
8288 VOID
8289 NTAPI
8290 CcPrepareMdlWrite(
8291 IN PFILE_OBJECT FileObject,
8292 IN PLARGE_INTEGER FileOffset,
8293 IN ULONG Length,
8294 OUT PMDL *MdlChain,
8295 OUT PIO_STATUS_BLOCK IoStatus);
8296
8297 NTKERNELAPI
8298 VOID
8299 NTAPI
8300 CcMdlWriteComplete(
8301 IN PFILE_OBJECT FileObject,
8302 IN PLARGE_INTEGER FileOffset,
8303 IN PMDL MdlChain);
8304
8305 NTKERNELAPI
8306 VOID
8307 NTAPI
8308 CcScheduleReadAhead(
8309 IN PFILE_OBJECT FileObject,
8310 IN PLARGE_INTEGER FileOffset,
8311 IN ULONG Length);
8312
8313 NTKERNELAPI
8314 NTSTATUS
8315 NTAPI
8316 CcWaitForCurrentLazyWriterActivity(
8317 VOID);
8318
8319 NTKERNELAPI
8320 VOID
8321 NTAPI
8322 CcSetReadAheadGranularity(
8323 IN PFILE_OBJECT FileObject,
8324 IN ULONG Granularity);
8325
8326 NTKERNELAPI
8327 BOOLEAN
8328 NTAPI
8329 CcPinRead(
8330 IN PFILE_OBJECT FileObject,
8331 IN PLARGE_INTEGER FileOffset,
8332 IN ULONG Length,
8333 IN ULONG Flags,
8334 OUT PVOID *Bcb,
8335 OUT PVOID *Buffer);
8336
8337 NTKERNELAPI
8338 BOOLEAN
8339 NTAPI
8340 CcPinMappedData(
8341 IN PFILE_OBJECT FileObject,
8342 IN PLARGE_INTEGER FileOffset,
8343 IN ULONG Length,
8344 IN ULONG Flags,
8345 IN OUT PVOID *Bcb);
8346
8347 NTKERNELAPI
8348 BOOLEAN
8349 NTAPI
8350 CcPreparePinWrite(
8351 IN PFILE_OBJECT FileObject,
8352 IN PLARGE_INTEGER FileOffset,
8353 IN ULONG Length,
8354 IN BOOLEAN Zero,
8355 IN ULONG Flags,
8356 OUT PVOID *Bcb,
8357 OUT PVOID *Buffer);
8358
8359 NTKERNELAPI
8360 VOID
8361 NTAPI
8362 CcSetDirtyPinnedData(
8363 IN PVOID BcbVoid,
8364 IN PLARGE_INTEGER Lsn OPTIONAL);
8365
8366 NTKERNELAPI
8367 VOID
8368 NTAPI
8369 CcUnpinData(
8370 IN PVOID Bcb);
8371
8372 NTKERNELAPI
8373 VOID
8374 NTAPI
8375 CcSetBcbOwnerPointer(
8376 IN PVOID Bcb,
8377 IN PVOID OwnerPointer);
8378
8379 NTKERNELAPI
8380 VOID
8381 NTAPI
8382 CcUnpinDataForThread(
8383 IN PVOID Bcb,
8384 IN ERESOURCE_THREAD ResourceThreadId);
8385
8386 NTKERNELAPI
8387 VOID
8388 NTAPI
8389 CcSetAdditionalCacheAttributes(
8390 IN PFILE_OBJECT FileObject,
8391 IN BOOLEAN DisableReadAhead,
8392 IN BOOLEAN DisableWriteBehind);
8393
8394 NTKERNELAPI
8395 BOOLEAN
8396 NTAPI
8397 CcIsThereDirtyData(
8398 IN PVPB Vpb);
8399
8400 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
8401
8402 #if (NTDDI_VERSION >= NTDDI_WINXP)
8403
8404 NTKERNELAPI
8405 VOID
8406 NTAPI
8407 CcMdlWriteAbort(
8408 IN PFILE_OBJECT FileObject,
8409 IN PMDL MdlChain);
8410
8411 NTKERNELAPI
8412 VOID
8413 NTAPI
8414 CcSetLogHandleForFile(
8415 IN PFILE_OBJECT FileObject,
8416 IN PVOID LogHandle,
8417 IN PFLUSH_TO_LSN FlushToLsnRoutine);
8418
8419 NTKERNELAPI
8420 LARGE_INTEGER
8421 NTAPI
8422 CcGetDirtyPages(
8423 IN PVOID LogHandle,
8424 IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
8425 IN PVOID Context1,
8426 IN PVOID Context2);
8427
8428 #endif
8429
8430 #if (NTDDI_VERSION >= NTDDI_WINXP)
8431 NTKERNELAPI
8432 BOOLEAN
8433 NTAPI
8434 CcMapData(
8435 IN PFILE_OBJECT FileObject,
8436 IN PLARGE_INTEGER FileOffset,
8437 IN ULONG Length,
8438 IN ULONG Flags,
8439 OUT PVOID *Bcb,
8440 OUT PVOID *Buffer);
8441 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
8442 NTKERNELAPI
8443 BOOLEAN
8444 NTAPI
8445 CcMapData(
8446 IN PFILE_OBJECT FileObject,
8447 IN PLARGE_INTEGER FileOffset,
8448 IN ULONG Length,
8449 IN BOOLEAN Wait,
8450 OUT PVOID *Bcb,
8451 OUT PVOID *Buffer);
8452 #endif
8453
8454 #if (NTDDI_VERSION >= NTDDI_VISTA)
8455
8456 NTKERNELAPI
8457 NTSTATUS
8458 NTAPI
8459 CcSetFileSizesEx(
8460 IN PFILE_OBJECT FileObject,
8461 IN PCC_FILE_SIZES FileSizes);
8462
8463 NTKERNELAPI
8464 PFILE_OBJECT
8465 NTAPI
8466 CcGetFileObjectFromSectionPtrsRef(
8467 IN PSECTION_OBJECT_POINTERS SectionObjectPointer);
8468
8469 NTKERNELAPI
8470 VOID
8471 NTAPI
8472 CcSetParallelFlushFile(
8473 IN PFILE_OBJECT FileObject,
8474 IN BOOLEAN EnableParallelFlush);
8475
8476 NTKERNELAPI
8477 BOOLEAN
8478 CcIsThereDirtyDataEx(
8479 IN PVPB Vpb,
8480 IN PULONG NumberOfDirtyPages OPTIONAL);
8481
8482 #endif
8483
8484 #if (NTDDI_VERSION >= NTDDI_WIN7)
8485 NTKERNELAPI
8486 VOID
8487 NTAPI
8488 CcCoherencyFlushAndPurgeCache(
8489 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
8490 IN PLARGE_INTEGER FileOffset OPTIONAL,
8491 IN ULONG Length,
8492 OUT PIO_STATUS_BLOCK IoStatus,
8493 IN ULONG Flags OPTIONAL);
8494 #endif
8495
8496 #define CcGetFileSizePointer(FO) ( \
8497 ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
8498 )
8499
8500 #define UNINITIALIZE_CACHE_MAPS (1)
8501 #define DO_NOT_RETRY_PURGE (2)
8502 #define DO_NOT_PURGE_DIRTY_PAGES (0x4)
8503
8504 #define CC_FLUSH_AND_PURGE_NO_PURGE (0x1)
8505
8506 #if (NTDDI_VERSION >= NTDDI_VISTA)
8507 NTKERNELAPI
8508 BOOLEAN
8509 NTAPI
8510 CcPurgeCacheSection(
8511 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
8512 IN PLARGE_INTEGER FileOffset OPTIONAL,
8513 IN ULONG Length,
8514 IN ULONG Flags);
8515 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
8516 NTKERNELAPI
8517 BOOLEAN
8518 NTAPI
8519 CcPurgeCacheSection(
8520 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
8521 IN PLARGE_INTEGER FileOffset OPTIONAL,
8522 IN ULONG Length,
8523 IN BOOLEAN UninitializeCacheMaps);
8524 #endif
8525
8526 #if (NTDDI_VERSION >= NTDDI_WIN7)
8527 NTKERNELAPI
8528 BOOLEAN
8529 NTAPI
8530 CcCopyWriteWontFlush(
8531 IN PFILE_OBJECT FileObject,
8532 IN PLARGE_INTEGER FileOffset,
8533 IN ULONG Length);
8534 #else
8535 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
8536 #endif
8537
8538 #define CcReadAhead(FO, FOFF, LEN) ( \
8539 if ((LEN) >= 256) { \
8540 CcScheduleReadAhead((FO), (FOFF), (LEN)); \
8541 } \
8542 )
8543
8544 #define PIN_WAIT (1)
8545 #define PIN_EXCLUSIVE (2)
8546 #define PIN_NO_READ (4)
8547 #define PIN_IF_BCB (8)
8548 #define PIN_CALLER_TRACKS_DIRTY_DATA (32)
8549 #define PIN_HIGH_PRIORITY (64)
8550
8551 #define MAP_WAIT 1
8552 #define MAP_NO_READ (16)
8553 #define MAP_HIGH_PRIORITY (64)
8554
8555 #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
8556 #define IOCTL_REDIR_QUERY_PATH_EX CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 100, METHOD_NEITHER, FILE_ANY_ACCESS)
8557
8558 typedef struct _QUERY_PATH_REQUEST {
8559 ULONG PathNameLength;
8560 PIO_SECURITY_CONTEXT SecurityContext;
8561 WCHAR FilePathName[1];
8562 } QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST;
8563
8564 typedef struct _QUERY_PATH_REQUEST_EX {
8565 PIO_SECURITY_CONTEXT pSecurityContext;
8566 ULONG EaLength;
8567 PVOID pEaBuffer;
8568 UNICODE_STRING PathName;
8569 UNICODE_STRING DomainServiceName;
8570 ULONG_PTR Reserved[ 3 ];
8571 } QUERY_PATH_REQUEST_EX, *PQUERY_PATH_REQUEST_EX;
8572
8573 typedef struct _QUERY_PATH_RESPONSE {
8574 ULONG LengthAccepted;
8575 } QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE;
8576
8577 #define VOLSNAPCONTROLTYPE 0x00000053
8578 #define IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES CTL_CODE(VOLSNAPCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
8579
8580 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8581
8582 NTSYSAPI
8583 NTSTATUS
8584 NTAPI
8585 ZwQueryObject(
8586 IN HANDLE Handle OPTIONAL,
8587 IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
8588 OUT PVOID ObjectInformation OPTIONAL,
8589 IN ULONG ObjectInformationLength,
8590 OUT PULONG ReturnLength OPTIONAL);
8591
8592 NTSYSAPI
8593 NTSTATUS
8594 NTAPI
8595 ZwNotifyChangeKey(
8596 IN HANDLE KeyHandle,
8597 IN HANDLE EventHandle OPTIONAL,
8598 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
8599 IN PVOID ApcContext OPTIONAL,
8600 OUT PIO_STATUS_BLOCK IoStatusBlock,
8601 IN ULONG NotifyFilter,
8602 IN BOOLEAN WatchSubtree,
8603 OUT PVOID Buffer,
8604 IN ULONG BufferLength,
8605 IN BOOLEAN Asynchronous);
8606
8607 NTSYSAPI
8608 NTSTATUS
8609 NTAPI
8610 ZwCreateEvent(
8611 OUT PHANDLE EventHandle,
8612 IN ACCESS_MASK DesiredAccess,
8613 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
8614 IN EVENT_TYPE EventType,
8615 IN BOOLEAN InitialState);
8616
8617 NTSYSAPI
8618 NTSTATUS
8619 NTAPI
8620 ZwDeleteFile(
8621 IN POBJECT_ATTRIBUTES ObjectAttributes);
8622
8623 NTSYSAPI
8624 NTSTATUS
8625 NTAPI
8626 ZwQueryDirectoryFile(
8627 IN HANDLE FileHandle,
8628 IN HANDLE Event OPTIONAL,
8629 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
8630 IN PVOID ApcContext OPTIONAL,
8631 OUT PIO_STATUS_BLOCK IoStatusBlock,
8632 OUT PVOID FileInformation,
8633 IN ULONG Length,
8634 IN FILE_INFORMATION_CLASS FileInformationClass,
8635 IN BOOLEAN ReturnSingleEntry,
8636 IN PUNICODE_STRING FileName OPTIONAL,
8637 IN BOOLEAN RestartScan);
8638
8639 NTSYSAPI
8640 NTSTATUS
8641 NTAPI
8642 ZwSetVolumeInformationFile(
8643 IN HANDLE FileHandle,
8644 OUT PIO_STATUS_BLOCK IoStatusBlock,
8645 IN PVOID FsInformation,
8646 IN ULONG Length,
8647 IN FS_INFORMATION_CLASS FsInformationClass);
8648
8649 NTSYSAPI
8650 NTSTATUS
8651 NTAPI
8652 ZwFsControlFile(
8653 IN HANDLE FileHandle,
8654 IN HANDLE Event OPTIONAL,
8655 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
8656 IN PVOID ApcContext OPTIONAL,
8657 OUT PIO_STATUS_BLOCK IoStatusBlock,
8658 IN ULONG FsControlCode,
8659 IN PVOID InputBuffer OPTIONAL,
8660 IN ULONG InputBufferLength,
8661 OUT PVOID OutputBuffer OPTIONAL,
8662 IN ULONG OutputBufferLength);
8663
8664 NTSYSAPI
8665 NTSTATUS
8666 NTAPI
8667 ZwDuplicateObject(
8668 IN HANDLE SourceProcessHandle,
8669 IN HANDLE SourceHandle,
8670 IN HANDLE TargetProcessHandle OPTIONAL,
8671 OUT PHANDLE TargetHandle OPTIONAL,
8672 IN ACCESS_MASK DesiredAccess,
8673 IN ULONG HandleAttributes,
8674 IN ULONG Options);
8675
8676 NTSYSAPI
8677 NTSTATUS
8678 NTAPI
8679 ZwOpenDirectoryObject(
8680 OUT PHANDLE DirectoryHandle,
8681 IN ACCESS_MASK DesiredAccess,
8682 IN POBJECT_ATTRIBUTES ObjectAttributes);
8683
8684 NTSYSAPI
8685 NTSTATUS
8686 NTAPI
8687 ZwAllocateVirtualMemory(
8688 IN HANDLE ProcessHandle,
8689 IN OUT PVOID *BaseAddress,
8690 IN ULONG_PTR ZeroBits,
8691 IN OUT PSIZE_T RegionSize,
8692 IN ULONG AllocationType,
8693 IN ULONG Protect);
8694
8695 NTSYSAPI
8696 NTSTATUS
8697 NTAPI
8698 ZwFreeVirtualMemory(
8699 IN HANDLE ProcessHandle,
8700 IN OUT PVOID *BaseAddress,
8701 IN OUT PSIZE_T RegionSize,
8702 IN ULONG FreeType);
8703
8704 NTSYSAPI
8705 NTSTATUS
8706 NTAPI
8707 ZwWaitForSingleObject(
8708 IN HANDLE Handle,
8709 IN BOOLEAN Alertable,
8710 IN PLARGE_INTEGER Timeout OPTIONAL);
8711
8712 NTSYSAPI
8713 NTSTATUS
8714 NTAPI
8715 ZwSetEvent(
8716 IN HANDLE EventHandle,
8717 OUT PLONG PreviousState OPTIONAL);
8718
8719 NTSYSAPI
8720 NTSTATUS
8721 NTAPI
8722 ZwFlushVirtualMemory(
8723 IN HANDLE ProcessHandle,
8724 IN OUT PVOID *BaseAddress,
8725 IN OUT PSIZE_T RegionSize,
8726 OUT PIO_STATUS_BLOCK IoStatusBlock);
8727
8728 NTSYSAPI
8729 NTSTATUS
8730 NTAPI
8731 ZwQueryInformationToken(
8732 IN HANDLE TokenHandle,
8733 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
8734 OUT PVOID TokenInformation,
8735 IN ULONG Length,
8736 OUT PULONG ResultLength);
8737
8738 NTSYSAPI
8739 NTSTATUS
8740 NTAPI
8741 ZwSetSecurityObject(
8742 IN HANDLE Handle,
8743 IN SECURITY_INFORMATION SecurityInformation,
8744 IN PSECURITY_DESCRIPTOR SecurityDescriptor);
8745
8746 NTSYSAPI
8747 NTSTATUS
8748 NTAPI
8749 ZwQuerySecurityObject(
8750 IN HANDLE FileHandle,
8751 IN SECURITY_INFORMATION SecurityInformation,
8752 OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
8753 IN ULONG Length,
8754 OUT PULONG ResultLength);
8755
8756 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
8757
8758 #if (NTDDI_VERSION >= NTDDI_WINXP)
8759
8760 NTSYSAPI
8761 NTSTATUS
8762 NTAPI
8763 ZwOpenProcessTokenEx(
8764 IN HANDLE ProcessHandle,
8765 IN ACCESS_MASK DesiredAccess,
8766 IN ULONG HandleAttributes,
8767 OUT PHANDLE TokenHandle);
8768
8769 NTSYSAPI
8770 NTSTATUS
8771 NTAPI
8772 ZwOpenThreadTokenEx(
8773 IN HANDLE ThreadHandle,
8774 IN ACCESS_MASK DesiredAccess,
8775 IN BOOLEAN OpenAsSelf,
8776 IN ULONG HandleAttributes,
8777 OUT PHANDLE TokenHandle);
8778
8779 #endif
8780
8781 #if (NTDDI_VERSION >= NTDDI_VISTA)
8782
8783 NTSYSAPI
8784 NTSTATUS
8785 NTAPI
8786 ZwLockFile(
8787 IN HANDLE FileHandle,
8788 IN HANDLE Event OPTIONAL,
8789 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
8790 IN PVOID ApcContext OPTIONAL,
8791 OUT PIO_STATUS_BLOCK IoStatusBlock,
8792 IN PLARGE_INTEGER ByteOffset,
8793 IN PLARGE_INTEGER Length,
8794 IN ULONG Key,
8795 IN BOOLEAN FailImmediately,
8796 IN BOOLEAN ExclusiveLock);
8797
8798 NTSYSAPI
8799 NTSTATUS
8800 NTAPI
8801 ZwUnlockFile(
8802 IN HANDLE FileHandle,
8803 OUT PIO_STATUS_BLOCK IoStatusBlock,
8804 IN PLARGE_INTEGER ByteOffset,
8805 IN PLARGE_INTEGER Length,
8806 IN ULONG Key);
8807
8808 NTSYSAPI
8809 NTSTATUS
8810 NTAPI
8811 ZwQueryQuotaInformationFile(
8812 IN HANDLE FileHandle,
8813 OUT PIO_STATUS_BLOCK IoStatusBlock,
8814 OUT PVOID Buffer,
8815 IN ULONG Length,
8816 IN BOOLEAN ReturnSingleEntry,
8817 IN PVOID SidList,
8818 IN ULONG SidListLength,
8819 IN PSID StartSid OPTIONAL,
8820 IN BOOLEAN RestartScan);
8821
8822 NTSYSAPI
8823 NTSTATUS
8824 NTAPI
8825 ZwSetQuotaInformationFile(
8826 IN HANDLE FileHandle,
8827 OUT PIO_STATUS_BLOCK IoStatusBlock,
8828 IN PVOID Buffer,
8829 IN ULONG Length);
8830
8831 NTSYSAPI
8832 NTSTATUS
8833 NTAPI
8834 ZwFlushBuffersFile(
8835 IN HANDLE FileHandle,
8836 OUT PIO_STATUS_BLOCK IoStatusBlock);
8837
8838 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8839
8840 #if (NTDDI_VERSION >= NTDDI_WIN7)
8841 NTSYSAPI
8842 NTSTATUS
8843 NTAPI
8844 ZwSetInformationToken(
8845 IN HANDLE TokenHandle,
8846 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
8847 IN PVOID TokenInformation,
8848 IN ULONG TokenInformationLength);
8849 #endif
8850
8851 NTSYSAPI
8852 NTSTATUS
8853 NTAPI
8854 ZwQueryEaFile(
8855 IN HANDLE FileHandle,
8856 OUT PIO_STATUS_BLOCK IoStatusBlock,
8857 OUT PVOID Buffer,
8858 IN ULONG Length,
8859 IN BOOLEAN ReturnSingleEntry,
8860 IN PVOID EaList OPTIONAL,
8861 IN ULONG EaListLength,
8862 IN PULONG EaIndex OPTIONAL,
8863 IN BOOLEAN RestartScan);
8864
8865 NTSYSAPI
8866 NTSTATUS
8867 NTAPI
8868 ZwSetEaFile(
8869 IN HANDLE FileHandle,
8870 OUT PIO_STATUS_BLOCK IoStatusBlock,
8871 OUT PVOID Buffer,
8872 IN ULONG Length);
8873
8874 NTSYSAPI
8875 NTSTATUS
8876 NTAPI
8877 ZwDuplicateToken(
8878 IN HANDLE ExistingTokenHandle,
8879 IN ACCESS_MASK DesiredAccess,
8880 IN POBJECT_ATTRIBUTES ObjectAttributes,
8881 IN BOOLEAN EffectiveOnly,
8882 IN TOKEN_TYPE TokenType,
8883 OUT PHANDLE NewTokenHandle);
8884
8885 #pragma pack(push,4)
8886
8887 #ifndef VER_PRODUCTBUILD
8888 #define VER_PRODUCTBUILD 10000
8889 #endif
8890
8891 #include "csq.h"
8892
8893 extern PACL SePublicDefaultDacl;
8894 extern PACL SeSystemDefaultDacl;
8895
8896 #define FS_LFN_APIS 0x00004000
8897
8898 #define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
8899 #define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
8900 #define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
8901 #define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
8902 #define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
8903 #define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
8904 #define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
8905 #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
8906 #define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
8907 #define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
8908 #define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
8909 #define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
8910 #define FILE_STORAGE_TYPE_MASK 0x000f0000
8911 #define FILE_STORAGE_TYPE_SHIFT 16
8912
8913 #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
8914
8915 #ifdef _X86_
8916 #define HARDWARE_PTE HARDWARE_PTE_X86
8917 #define PHARDWARE_PTE PHARDWARE_PTE_X86
8918 #endif
8919
8920 #define IO_ATTACH_DEVICE_API 0x80000000
8921
8922 #define IO_TYPE_APC 18
8923 #define IO_TYPE_DPC 19
8924 #define IO_TYPE_DEVICE_QUEUE 20
8925 #define IO_TYPE_EVENT_PAIR 21
8926 #define IO_TYPE_INTERRUPT 22
8927 #define IO_TYPE_PROFILE 23
8928
8929 #define IRP_BEING_VERIFIED 0x10
8930
8931 #define MAILSLOT_CLASS_FIRSTCLASS 1
8932 #define MAILSLOT_CLASS_SECONDCLASS 2
8933
8934 #define MAILSLOT_SIZE_AUTO 0
8935
8936 #define MEM_DOS_LIM 0x40000000
8937
8938 #define OB_TYPE_TYPE 1
8939 #define OB_TYPE_DIRECTORY 2
8940 #define OB_TYPE_SYMBOLIC_LINK 3
8941 #define OB_TYPE_TOKEN 4
8942 #define OB_TYPE_PROCESS 5
8943 #define OB_TYPE_THREAD 6
8944 #define OB_TYPE_EVENT 7
8945 #define OB_TYPE_EVENT_PAIR 8
8946 #define OB_TYPE_MUTANT 9
8947 #define OB_TYPE_SEMAPHORE 10
8948 #define OB_TYPE_TIMER 11
8949 #define OB_TYPE_PROFILE 12
8950 #define OB_TYPE_WINDOW_STATION 13
8951 #define OB_TYPE_DESKTOP 14
8952 #define OB_TYPE_SECTION 15
8953 #define OB_TYPE_KEY 16
8954 #define OB_TYPE_PORT 17
8955 #define OB_TYPE_ADAPTER 18
8956 #define OB_TYPE_CONTROLLER 19
8957 #define OB_TYPE_DEVICE 20
8958 #define OB_TYPE_DRIVER 21
8959 #define OB_TYPE_IO_COMPLETION 22
8960 #define OB_TYPE_FILE 23
8961
8962 #define SEC_BASED 0x00200000
8963
8964 /* end winnt.h */
8965
8966 #define TOKEN_HAS_ADMIN_GROUP 0x08
8967
8968 #if (VER_PRODUCTBUILD >= 1381)
8969 #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
8970 #endif /* (VER_PRODUCTBUILD >= 1381) */
8971
8972 #if (VER_PRODUCTBUILD >= 2195)
8973
8974 #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
8975 #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
8976
8977 #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
8978
8979 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
8980 #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
8981 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
8982 #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
8983 #endif /* (VER_PRODUCTBUILD >= 2195) */
8984
8985 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
8986 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
8987 #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
8988 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
8989 #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
8990 #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
8991 #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
8992 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
8993
8994 typedef enum _FILE_STORAGE_TYPE {
8995 StorageTypeDefault = 1,
8996 StorageTypeDirectory,
8997 StorageTypeFile,
8998 StorageTypeJunctionPoint,
8999 StorageTypeCatalog,
9000 StorageTypeStructuredStorage,
9001 StorageTypeEmbedding,
9002 StorageTypeStream
9003 } FILE_STORAGE_TYPE;
9004
9005 typedef struct _OBJECT_BASIC_INFORMATION
9006 {
9007 ULONG Attributes;
9008 ACCESS_MASK GrantedAccess;
9009 ULONG HandleCount;
9010 ULONG PointerCount;
9011 ULONG PagedPoolCharge;
9012 ULONG NonPagedPoolCharge;
9013 ULONG Reserved[ 3 ];
9014 ULONG NameInfoSize;
9015 ULONG TypeInfoSize;
9016 ULONG SecurityDescriptorSize;
9017 LARGE_INTEGER CreationTime;
9018 } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
9019
9020 typedef struct _BITMAP_RANGE {
9021 LIST_ENTRY Links;
9022 LONGLONG BasePage;
9023 ULONG FirstDirtyPage;
9024 ULONG LastDirtyPage;
9025 ULONG DirtyPages;
9026 PULONG Bitmap;
9027 } BITMAP_RANGE, *PBITMAP_RANGE;
9028
9029 typedef struct _FILE_COPY_ON_WRITE_INFORMATION {
9030 BOOLEAN ReplaceIfExists;
9031 HANDLE RootDirectory;
9032 ULONG FileNameLength;
9033 WCHAR FileName[1];
9034 } FILE_COPY_ON_WRITE_INFORMATION, *PFILE_COPY_ON_WRITE_INFORMATION;
9035
9036 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
9037 ULONG NextEntryOffset;
9038 ULONG FileIndex;
9039 LARGE_INTEGER CreationTime;
9040 LARGE_INTEGER LastAccessTime;
9041 LARGE_INTEGER LastWriteTime;
9042 LARGE_INTEGER ChangeTime;
9043 LARGE_INTEGER EndOfFile;
9044 LARGE_INTEGER AllocationSize;
9045 ULONG FileAttributes;
9046 ULONG FileNameLength;
9047 ULONG EaSize;
9048 WCHAR FileName[ANYSIZE_ARRAY];
9049 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION;
9050
9051 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
9052 typedef struct _FILE_SHARED_LOCK_ENTRY {
9053 PVOID Unknown1;
9054 PVOID Unknown2;
9055 FILE_LOCK_INFO FileLock;
9056 } FILE_SHARED_LOCK_ENTRY, *PFILE_SHARED_LOCK_ENTRY;
9057
9058 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
9059 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY {
9060 LIST_ENTRY ListEntry;
9061 PVOID Unknown1;
9062 PVOID Unknown2;
9063 FILE_LOCK_INFO FileLock;
9064 } FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
9065
9066 typedef struct _FILE_MAILSLOT_PEEK_BUFFER {
9067 ULONG ReadDataAvailable;
9068 ULONG NumberOfMessages;
9069 ULONG MessageLength;
9070 } FILE_MAILSLOT_PEEK_BUFFER, *PFILE_MAILSLOT_PEEK_BUFFER;
9071
9072 typedef struct _FILE_OLE_CLASSID_INFORMATION {
9073 GUID ClassId;
9074 } FILE_OLE_CLASSID_INFORMATION, *PFILE_OLE_CLASSID_INFORMATION;
9075
9076 typedef struct _FILE_OLE_ALL_INFORMATION {
9077 FILE_BASIC_INFORMATION BasicInformation;
9078 FILE_STANDARD_INFORMATION StandardInformation;
9079 FILE_INTERNAL_INFORMATION InternalInformation;
9080 FILE_EA_INFORMATION EaInformation;
9081 FILE_ACCESS_INFORMATION AccessInformation;
9082 FILE_POSITION_INFORMATION PositionInformation;
9083 FILE_MODE_INFORMATION ModeInformation;
9084 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
9085 USN LastChangeUsn;
9086 USN ReplicationUsn;
9087 LARGE_INTEGER SecurityChangeTime;
9088 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
9089 FILE_OBJECTID_INFORMATION ObjectIdInformation;
9090 FILE_STORAGE_TYPE StorageType;
9091 ULONG OleStateBits;
9092 ULONG OleId;
9093 ULONG NumberOfStreamReferences;
9094 ULONG StreamIndex;
9095 ULONG SecurityId;
9096 BOOLEAN ContentIndexDisable;
9097 BOOLEAN InheritContentIndexDisable;
9098 FILE_NAME_INFORMATION NameInformation;
9099 } FILE_OLE_ALL_INFORMATION, *PFILE_OLE_ALL_INFORMATION;
9100
9101 typedef struct _FILE_OLE_DIR_INFORMATION {
9102 ULONG NextEntryOffset;
9103 ULONG FileIndex;
9104 LARGE_INTEGER CreationTime;
9105 LARGE_INTEGER LastAccessTime;
9106 LARGE_INTEGER LastWriteTime;
9107 LARGE_INTEGER ChangeTime;
9108 LARGE_INTEGER EndOfFile;
9109 LARGE_INTEGER AllocationSize;
9110 ULONG FileAttributes;
9111 ULONG FileNameLength;
9112 FILE_STORAGE_TYPE StorageType;
9113 GUID OleClassId;
9114 ULONG OleStateBits;
9115 BOOLEAN ContentIndexDisable;
9116 BOOLEAN InheritContentIndexDisable;
9117 WCHAR FileName[1];
9118 } FILE_OLE_DIR_INFORMATION, *PFILE_OLE_DIR_INFORMATION;
9119
9120 typedef struct _FILE_OLE_INFORMATION {
9121 LARGE_INTEGER SecurityChangeTime;
9122 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
9123 FILE_OBJECTID_INFORMATION ObjectIdInformation;
9124 FILE_STORAGE_TYPE StorageType;
9125 ULONG OleStateBits;
9126 BOOLEAN ContentIndexDisable;
9127 BOOLEAN InheritContentIndexDisable;
9128 } FILE_OLE_INFORMATION, *PFILE_OLE_INFORMATION;
9129
9130 typedef struct _FILE_OLE_STATE_BITS_INFORMATION {
9131 ULONG StateBits;
9132 ULONG StateBitsMask;
9133 } FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION;
9134
9135 typedef struct _MAPPING_PAIR {
9136 ULONGLONG Vcn;
9137 ULONGLONG Lcn;
9138 } MAPPING_PAIR, *PMAPPING_PAIR;
9139
9140 typedef struct _GET_RETRIEVAL_DESCRIPTOR {
9141 ULONG NumberOfPairs;
9142 ULONGLONG StartVcn;
9143 MAPPING_PAIR Pair[1];
9144 } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
9145
9146 typedef struct _MBCB {
9147 CSHORT NodeTypeCode;
9148 CSHORT NodeIsInZone;
9149 ULONG PagesToWrite;
9150 ULONG DirtyPages;
9151 ULONG Reserved;
9152 LIST_ENTRY BitmapRanges;
9153 LONGLONG ResumeWritePage;
9154 BITMAP_RANGE BitmapRange1;
9155 BITMAP_RANGE BitmapRange2;
9156 BITMAP_RANGE BitmapRange3;
9157 } MBCB, *PMBCB;
9158
9159 typedef struct _MOVEFILE_DESCRIPTOR {
9160 HANDLE FileHandle;
9161 ULONG Reserved;
9162 LARGE_INTEGER StartVcn;
9163 LARGE_INTEGER TargetLcn;
9164 ULONG NumVcns;
9165 ULONG Reserved1;
9166 } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
9167
9168 typedef struct _OBJECT_BASIC_INFO {
9169 ULONG Attributes;
9170 ACCESS_MASK GrantedAccess;
9171 ULONG HandleCount;
9172 ULONG ReferenceCount;
9173 ULONG PagedPoolUsage;
9174 ULONG NonPagedPoolUsage;
9175 ULONG Reserved[3];
9176 ULONG NameInformationLength;
9177 ULONG TypeInformationLength;
9178 ULONG SecurityDescriptorLength;
9179 LARGE_INTEGER CreateTime;
9180 } OBJECT_BASIC_INFO, *POBJECT_BASIC_INFO;
9181
9182 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO {
9183 BOOLEAN Inherit;
9184 BOOLEAN ProtectFromClose;
9185 } OBJECT_HANDLE_ATTRIBUTE_INFO, *POBJECT_HANDLE_ATTRIBUTE_INFO;
9186
9187 typedef struct _OBJECT_NAME_INFO {
9188 UNICODE_STRING ObjectName;
9189 WCHAR ObjectNameBuffer[1];
9190 } OBJECT_NAME_INFO, *POBJECT_NAME_INFO;
9191
9192 typedef struct _OBJECT_PROTECTION_INFO {
9193 BOOLEAN Inherit;
9194 BOOLEAN ProtectHandle;
9195 } OBJECT_PROTECTION_INFO, *POBJECT_PROTECTION_INFO;
9196
9197 typedef struct _OBJECT_TYPE_INFO {
9198 UNICODE_STRING ObjectTypeName;
9199 UCHAR Unknown[0x58];
9200 WCHAR ObjectTypeNameBuffer[1];
9201 } OBJECT_TYPE_INFO, *POBJECT_TYPE_INFO;
9202
9203 typedef struct _OBJECT_ALL_TYPES_INFO {
9204 ULONG NumberOfObjectTypes;
9205 OBJECT_TYPE_INFO ObjectsTypeInfo[1];
9206 } OBJECT_ALL_TYPES_INFO, *POBJECT_ALL_TYPES_INFO;
9207
9208 #if defined(USE_LPC6432)
9209 #define LPC_CLIENT_ID CLIENT_ID64
9210 #define LPC_SIZE_T ULONGLONG
9211 #define LPC_PVOID ULONGLONG
9212 #define LPC_HANDLE ULONGLONG
9213 #else
9214 #define LPC_CLIENT_ID CLIENT_ID
9215 #define LPC_SIZE_T SIZE_T
9216 #define LPC_PVOID PVOID
9217 #define LPC_HANDLE HANDLE
9218 #endif
9219
9220 typedef struct _PORT_MESSAGE
9221 {
9222 union
9223 {
9224 struct
9225 {
9226 CSHORT DataLength;
9227 CSHORT TotalLength;
9228 } s1;
9229 ULONG Length;
9230 } u1;
9231 union
9232 {
9233 struct
9234 {
9235 CSHORT Type;
9236 CSHORT DataInfoOffset;
9237 } s2;
9238 ULONG ZeroInit;
9239 } u2;
9240 __GNU_EXTENSION union
9241 {
9242 LPC_CLIENT_ID ClientId;
9243 double DoNotUseThisField;
9244 };
9245 ULONG MessageId;
9246 __GNU_EXTENSION union
9247 {
9248 LPC_SIZE_T ClientViewSize;
9249 ULONG CallbackId;
9250 };
9251 } PORT_MESSAGE, *PPORT_MESSAGE;
9252
9253 #define LPC_KERNELMODE_MESSAGE (CSHORT)((USHORT)0x8000)
9254
9255 typedef struct _PORT_VIEW
9256 {
9257 ULONG Length;
9258 LPC_HANDLE SectionHandle;
9259 ULONG SectionOffset;
9260 LPC_SIZE_T ViewSize;
9261 LPC_PVOID ViewBase;
9262 LPC_PVOID ViewRemoteBase;
9263 } PORT_VIEW, *PPORT_VIEW;
9264
9265 typedef struct _REMOTE_PORT_VIEW
9266 {
9267 ULONG Length;
9268 LPC_SIZE_T ViewSize;
9269 LPC_PVOID ViewBase;
9270 } REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW;
9271
9272 typedef struct _VAD_HEADER {
9273 PVOID StartVPN;
9274 PVOID EndVPN;
9275 struct _VAD_HEADER* ParentLink;
9276 struct _VAD_HEADER* LeftLink;
9277 struct _VAD_HEADER* RightLink;
9278 ULONG Flags; /* LSB = CommitCharge */
9279 PVOID ControlArea;
9280 PVOID FirstProtoPte;
9281 PVOID LastPTE;
9282 ULONG Unknown;
9283 LIST_ENTRY Secured;
9284 } VAD_HEADER, *PVAD_HEADER;
9285
9286 NTKERNELAPI
9287 LARGE_INTEGER
9288 NTAPI
9289 CcGetLsnForFileObject (
9290 IN PFILE_OBJECT FileObject,
9291 OUT PLARGE_INTEGER OldestLsn OPTIONAL
9292 );
9293
9294 NTKERNELAPI
9295 PVOID
9296 NTAPI
9297 FsRtlAllocatePool (
9298 IN POOL_TYPE PoolType,
9299 IN ULONG NumberOfBytes
9300 );
9301
9302 NTKERNELAPI
9303 PVOID
9304 NTAPI
9305 FsRtlAllocatePoolWithQuota (
9306 IN POOL_TYPE PoolType,
9307 IN ULONG NumberOfBytes
9308 );
9309
9310 NTKERNELAPI
9311 PVOID
9312 NTAPI
9313 FsRtlAllocatePoolWithQuotaTag (
9314 IN POOL_TYPE PoolType,
9315 IN ULONG NumberOfBytes,
9316 IN ULONG Tag
9317 );
9318
9319 NTKERNELAPI
9320 PVOID
9321 NTAPI
9322 FsRtlAllocatePoolWithTag (
9323 IN POOL_TYPE PoolType,
9324 IN ULONG NumberOfBytes,
9325 IN ULONG Tag
9326 );
9327
9328 NTKERNELAPI
9329 BOOLEAN
9330 NTAPI
9331 FsRtlIsFatDbcsLegal (
9332 IN ANSI_STRING DbcsName,
9333 IN BOOLEAN WildCardsPermissible,
9334 IN BOOLEAN PathNamePermissible,
9335 IN BOOLEAN LeadingBackslashPermissible
9336 );
9337
9338 NTKERNELAPI
9339 BOOLEAN
9340 NTAPI
9341 FsRtlMdlReadComplete (
9342 IN PFILE_OBJECT FileObject,
9343 IN PMDL MdlChain
9344 );
9345
9346 NTKERNELAPI
9347 BOOLEAN
9348 NTAPI
9349 FsRtlMdlWriteComplete (
9350 IN PFILE_OBJECT FileObject,
9351 IN PLARGE_INTEGER FileOffset,
9352 IN PMDL MdlChain
9353 );
9354
9355 NTKERNELAPI
9356 VOID
9357 NTAPI
9358 FsRtlNotifyChangeDirectory (
9359 IN PNOTIFY_SYNC NotifySync,
9360 IN PVOID FsContext,
9361 IN PSTRING FullDirectoryName,
9362 IN PLIST_ENTRY NotifyList,
9363 IN BOOLEAN WatchTree,
9364 IN ULONG CompletionFilter,
9365 IN PIRP NotifyIrp
9366 );
9367
9368 NTKERNELAPI
9369 NTSTATUS
9370 NTAPI
9371 ObCreateObject (
9372 IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL,
9373 IN POBJECT_TYPE ObjectType,
9374 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
9375 IN KPROCESSOR_MODE AccessMode,
9376 IN OUT PVOID ParseContext OPTIONAL,
9377 IN ULONG ObjectSize,
9378 IN ULONG PagedPoolCharge OPTIONAL,
9379 IN ULONG NonPagedPoolCharge OPTIONAL,
9380 OUT PVOID *Object
9381 );
9382
9383 NTKERNELAPI
9384 ULONG
9385 NTAPI
9386 ObGetObjectPointerCount (
9387 IN PVOID Object
9388 );
9389
9390 NTKERNELAPI
9391 NTSTATUS
9392 NTAPI
9393 ObReferenceObjectByName (
9394 IN PUNICODE_STRING ObjectName,
9395 IN ULONG Attributes,
9396 IN PACCESS_STATE PassedAccessState OPTIONAL,
9397 IN ACCESS_MASK DesiredAccess OPTIONAL,
9398 IN POBJECT_TYPE ObjectType,
9399 IN KPROCESSOR_MODE AccessMode,
9400 IN OUT PVOID ParseContext OPTIONAL,
9401 OUT PVOID *Object
9402 );
9403
9404 #define PsDereferenceImpersonationToken(T) \
9405 {if (ARGUMENT_PRESENT(T)) { \
9406 (ObDereferenceObject((T))); \
9407 } else { \
9408 ; \
9409 } \
9410 }
9411
9412 NTKERNELAPI
9413 NTSTATUS
9414 NTAPI
9415 PsLookupProcessThreadByCid (
9416 IN PCLIENT_ID Cid,
9417 OUT PEPROCESS *Process OPTIONAL,
9418 OUT PETHREAD *Thread
9419 );
9420
9421 NTSYSAPI
9422 NTSTATUS
9423 NTAPI
9424 RtlSetSaclSecurityDescriptor (
9425 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
9426 IN BOOLEAN SaclPresent,
9427 IN PACL Sacl,
9428 IN BOOLEAN SaclDefaulted
9429 );
9430
9431 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
9432
9433 #if (VER_PRODUCTBUILD >= 2195)
9434
9435 NTSYSAPI
9436 NTSTATUS
9437 NTAPI
9438 ZwAdjustPrivilegesToken (
9439 IN HANDLE TokenHandle,
9440 IN BOOLEAN DisableAllPrivileges,
9441 IN PTOKEN_PRIVILEGES NewState,
9442 IN ULONG BufferLength,
9443 OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL,
9444 OUT PULONG ReturnLength
9445 );
9446
9447 #endif /* (VER_PRODUCTBUILD >= 2195) */
9448
9449 NTSYSAPI
9450 NTSTATUS
9451 NTAPI
9452 ZwAlertThread (
9453 IN HANDLE ThreadHandle
9454 );
9455
9456 NTSYSAPI
9457 NTSTATUS
9458 NTAPI
9459 ZwAccessCheckAndAuditAlarm (
9460 IN PUNICODE_STRING SubsystemName,
9461 IN PVOID HandleId,
9462 IN PUNICODE_STRING ObjectTypeName,
9463 IN PUNICODE_STRING ObjectName,
9464 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
9465 IN ACCESS_MASK DesiredAccess,
9466 IN PGENERIC_MAPPING GenericMapping,
9467 IN BOOLEAN ObjectCreation,
9468 OUT PACCESS_MASK GrantedAccess,
9469 OUT PBOOLEAN AccessStatus,
9470 OUT PBOOLEAN GenerateOnClose
9471 );
9472
9473 #if (VER_PRODUCTBUILD >= 2195)
9474
9475 NTSYSAPI
9476 NTSTATUS
9477 NTAPI
9478 ZwCancelIoFile (
9479 IN HANDLE FileHandle,
9480 OUT PIO_STATUS_BLOCK IoStatusBlock
9481 );
9482
9483 #endif /* (VER_PRODUCTBUILD >= 2195) */
9484
9485 NTSYSAPI
9486 NTSTATUS
9487 NTAPI
9488 ZwClearEvent (
9489 IN HANDLE EventHandle
9490 );
9491
9492 NTSYSAPI
9493 NTSTATUS
9494 NTAPI
9495 ZwCloseObjectAuditAlarm (
9496 IN PUNICODE_STRING SubsystemName,
9497 IN PVOID HandleId,
9498 IN BOOLEAN GenerateOnClose
9499 );
9500
9501 NTSYSAPI
9502 NTSTATUS
9503 NTAPI
9504 ZwCreateSymbolicLinkObject (
9505 OUT PHANDLE SymbolicLinkHandle,
9506 IN ACCESS_MASK DesiredAccess,
9507 IN POBJECT_ATTRIBUTES ObjectAttributes,
9508 IN PUNICODE_STRING TargetName
9509 );
9510
9511 NTSYSAPI
9512 NTSTATUS
9513 NTAPI
9514 ZwFlushInstructionCache (
9515 IN HANDLE ProcessHandle,
9516 IN PVOID BaseAddress OPTIONAL,
9517 IN ULONG FlushSize
9518 );
9519
9520 NTSYSAPI
9521 NTSTATUS
9522 NTAPI
9523 ZwFlushBuffersFile(
9524 IN HANDLE FileHandle,
9525 OUT PIO_STATUS_BLOCK IoStatusBlock
9526 );
9527
9528 #if (VER_PRODUCTBUILD >= 2195)
9529
9530 NTSYSAPI
9531 NTSTATUS
9532 NTAPI
9533 ZwInitiatePowerAction (
9534 IN POWER_ACTION SystemAction,
9535 IN SYSTEM_POWER_STATE MinSystemState,
9536 IN ULONG Flags,
9537 IN BOOLEAN Asynchronous
9538 );
9539
9540 #endif /* (VER_PRODUCTBUILD >= 2195) */
9541
9542 NTSYSAPI
9543 NTSTATUS
9544 NTAPI
9545 ZwLoadKey (
9546 IN POBJECT_ATTRIBUTES KeyObjectAttributes,
9547 IN POBJECT_ATTRIBUTES FileObjectAttributes
9548 );
9549
9550 NTSYSAPI
9551 NTSTATUS
9552 NTAPI
9553 ZwOpenProcessToken (
9554 IN HANDLE ProcessHandle,
9555 IN ACCESS_MASK DesiredAccess,
9556 OUT PHANDLE TokenHandle
9557 );
9558
9559 NTSYSAPI
9560 NTSTATUS
9561 NTAPI
9562 ZwOpenThread (
9563 OUT PHANDLE ThreadHandle,
9564 IN ACCESS_MASK DesiredAccess,
9565 IN POBJECT_ATTRIBUTES ObjectAttributes,
9566 IN PCLIENT_ID ClientId
9567 );
9568
9569 NTSYSAPI
9570 NTSTATUS
9571 NTAPI
9572 ZwOpenThreadToken (
9573 IN HANDLE ThreadHandle,
9574 IN ACCESS_MASK DesiredAccess,
9575 IN BOOLEAN OpenAsSelf,
9576 OUT PHANDLE TokenHandle
9577 );
9578
9579 NTSYSAPI
9580 NTSTATUS
9581 NTAPI
9582 ZwPulseEvent (
9583 IN HANDLE EventHandle,
9584 OUT PLONG PreviousState OPTIONAL
9585 );
9586
9587 NTSYSAPI
9588 NTSTATUS
9589 NTAPI
9590 ZwQueryDefaultLocale (
9591 IN BOOLEAN ThreadOrSystem,
9592 OUT PLCID Locale
9593 );
9594
9595 #if (VER_PRODUCTBUILD >= 2195)
9596
9597 NTSYSAPI
9598 NTSTATUS
9599 NTAPI
9600 ZwQueryDirectoryObject (
9601 IN HANDLE DirectoryHandle,
9602 OUT PVOID Buffer,
9603 IN ULONG Length,
9604 IN BOOLEAN ReturnSingleEntry,
9605 IN BOOLEAN RestartScan,
9606 IN OUT PULONG Context,
9607 OUT PULONG ReturnLength OPTIONAL
9608 );
9609
9610 #endif /* (VER_PRODUCTBUILD >= 2195) */
9611
9612 NTSYSAPI
9613 NTSTATUS
9614 NTAPI
9615 ZwQueryInformationProcess (
9616 IN HANDLE ProcessHandle,
9617 IN PROCESSINFOCLASS ProcessInformationClass,
9618 OUT PVOID ProcessInformation,
9619 IN ULONG ProcessInformationLength,
9620 OUT PULONG ReturnLength OPTIONAL
9621 );
9622
9623 NTSYSAPI
9624 NTSTATUS
9625 NTAPI
9626 ZwReplaceKey (
9627 IN POBJECT_ATTRIBUTES NewFileObjectAttributes,
9628 IN HANDLE KeyHandle,
9629 IN POBJECT_ATTRIBUTES OldFileObjectAttributes
9630 );
9631
9632 NTSYSAPI
9633 NTSTATUS
9634 NTAPI
9635 ZwResetEvent (
9636 IN HANDLE EventHandle,
9637 OUT PLONG PreviousState OPTIONAL
9638 );
9639
9640 #if (VER_PRODUCTBUILD >= 2195)
9641
9642 NTSYSAPI
9643 NTSTATUS
9644 NTAPI
9645 ZwRestoreKey (
9646 IN HANDLE KeyHandle,
9647 IN HANDLE FileHandle,
9648 IN ULONG Flags
9649 );
9650
9651 #endif /* (VER_PRODUCTBUILD >= 2195) */
9652
9653 NTSYSAPI
9654 NTSTATUS
9655 NTAPI
9656 ZwSaveKey (
9657 IN HANDLE KeyHandle,
9658 IN HANDLE FileHandle
9659 );
9660
9661 NTSYSAPI
9662 NTSTATUS
9663 NTAPI
9664 ZwSetDefaultLocale (
9665 IN BOOLEAN ThreadOrSystem,
9666 IN LCID Locale
9667 );
9668
9669 #if (VER_PRODUCTBUILD >= 2195)
9670
9671 NTSYSAPI
9672 NTSTATUS
9673 NTAPI
9674 ZwSetDefaultUILanguage (
9675 IN LANGID LanguageId
9676 );
9677
9678 #endif /* (VER_PRODUCTBUILD >= 2195) */
9679
9680 NTSYSAPI
9681 NTSTATUS
9682 NTAPI
9683 ZwSetInformationProcess (
9684 IN HANDLE ProcessHandle,
9685 IN PROCESSINFOCLASS ProcessInformationClass,
9686 IN PVOID ProcessInformation,
9687 IN ULONG ProcessInformationLength
9688 );
9689
9690 NTSYSAPI
9691 NTSTATUS
9692 NTAPI
9693 ZwSetSystemTime (
9694 IN PLARGE_INTEGER NewTime,
9695 OUT PLARGE_INTEGER OldTime OPTIONAL
9696 );
9697
9698 NTSYSAPI
9699 NTSTATUS
9700 NTAPI
9701 ZwUnloadKey (
9702 IN POBJECT_ATTRIBUTES KeyObjectAttributes
9703 );
9704
9705 NTSYSAPI
9706 NTSTATUS
9707 NTAPI
9708 ZwWaitForMultipleObjects (
9709 IN ULONG HandleCount,
9710 IN PHANDLE Handles,
9711 IN WAIT_TYPE WaitType,
9712 IN BOOLEAN Alertable,
9713 IN PLARGE_INTEGER Timeout OPTIONAL
9714 );
9715
9716 NTSYSAPI
9717 NTSTATUS
9718 NTAPI
9719 ZwYieldExecution (
9720 VOID
9721 );
9722
9723 #pragma pack(pop)
9724
9725 #ifdef __cplusplus
9726 }
9727 #endif