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