Sync with trunk head (part 1 of 2)
[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 _ANONYMOUS_STRUCT struct {
3058 UCHAR BirthVolumeId[16];
3059 UCHAR BirthObjectId[16];
3060 UCHAR DomainId[16];
3061 } DUMMYSTRUCTNAME;
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 _ANONYMOUS_UNION union {
3693 _ANONYMOUS_STRUCT 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 (TXFS_RM_FLAG_LOGGING_MODE | \
3851 TXFS_RM_FLAG_RENAME_RM | \
3852 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
3853 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
3854 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
3855 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
3856 TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
3857 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
3858 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
3859 TXFS_RM_FLAG_SHRINK_LOG | \
3860 TXFS_RM_FLAG_GROW_LOG | \
3861 TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE | \
3862 TXFS_RM_FLAG_PRESERVE_CHANGES | \
3863 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
3864 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
3865 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
3866 TXFS_RM_FLAG_PREFER_AVAILABILITY)
3867
3868 typedef struct _TXFS_MODIFY_RM {
3869 ULONG Flags;
3870 ULONG LogContainerCountMax;
3871 ULONG LogContainerCountMin;
3872 ULONG LogContainerCount;
3873 ULONG LogGrowthIncrement;
3874 ULONG LogAutoShrinkPercentage;
3875 ULONGLONG Reserved;
3876 USHORT LoggingMode;
3877 } TXFS_MODIFY_RM, *PTXFS_MODIFY_RM;
3878
3879 #define TXFS_RM_STATE_NOT_STARTED 0
3880 #define TXFS_RM_STATE_STARTING 1
3881 #define TXFS_RM_STATE_ACTIVE 2
3882 #define TXFS_RM_STATE_SHUTTING_DOWN 3
3883
3884 #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS \
3885 (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
3886 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
3887 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
3888 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
3889 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
3890 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
3891 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
3892 TXFS_RM_FLAG_PREFER_AVAILABILITY)
3893
3894 typedef struct _TXFS_QUERY_RM_INFORMATION {
3895 ULONG BytesRequired;
3896 ULONGLONG TailLsn;
3897 ULONGLONG CurrentLsn;
3898 ULONGLONG ArchiveTailLsn;
3899 ULONGLONG LogContainerSize;
3900 LARGE_INTEGER HighestVirtualClock;
3901 ULONG LogContainerCount;
3902 ULONG LogContainerCountMax;
3903 ULONG LogContainerCountMin;
3904 ULONG LogGrowthIncrement;
3905 ULONG LogAutoShrinkPercentage;
3906 ULONG Flags;
3907 USHORT LoggingMode;
3908 USHORT Reserved;
3909 ULONG RmState;
3910 ULONGLONG LogCapacity;
3911 ULONGLONG LogFree;
3912 ULONGLONG TopsSize;
3913 ULONGLONG TopsUsed;
3914 ULONGLONG TransactionCount;
3915 ULONGLONG OnePCCount;
3916 ULONGLONG TwoPCCount;
3917 ULONGLONG NumberLogFileFull;
3918 ULONGLONG OldestTransactionAge;
3919 GUID RMName;
3920 ULONG TmLogPathOffset;
3921 } TXFS_QUERY_RM_INFORMATION, *PTXFS_QUERY_RM_INFORMATION;
3922
3923 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x01
3924 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x02
3925
3926 #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS \
3927 (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN | \
3928 TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK)
3929
3930 typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION {
3931 LARGE_INTEGER LastVirtualClock;
3932 ULONGLONG LastRedoLsn;
3933 ULONGLONG HighestRecoveryLsn;
3934 ULONG Flags;
3935 } TXFS_ROLLFORWARD_REDO_INFORMATION, *PTXFS_ROLLFORWARD_REDO_INFORMATION;
3936
3937 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001
3938 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002
3939 #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004
3940 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008
3941 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010
3942 #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020
3943 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040
3944 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080
3945
3946 #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200
3947 #define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400
3948 #define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800
3949
3950 #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000
3951 #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000
3952
3953 #define TXFS_START_RM_VALID_FLAGS \
3954 (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
3955 TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
3956 TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE | \
3957 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
3958 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
3959 TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
3960 TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT | \
3961 TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
3962 TXFS_START_RM_FLAG_LOGGING_MODE | \
3963 TXFS_START_RM_FLAG_PRESERVE_CHANGES | \
3964 TXFS_START_RM_FLAG_PREFER_CONSISTENCY | \
3965 TXFS_START_RM_FLAG_PREFER_AVAILABILITY)
3966
3967 typedef struct _TXFS_START_RM_INFORMATION {
3968 ULONG Flags;
3969 ULONGLONG LogContainerSize;
3970 ULONG LogContainerCountMin;
3971 ULONG LogContainerCountMax;
3972 ULONG LogGrowthIncrement;
3973 ULONG LogAutoShrinkPercentage;
3974 ULONG TmLogPathOffset;
3975 USHORT TmLogPathLength;
3976 USHORT LoggingMode;
3977 USHORT LogPathLength;
3978 USHORT Reserved;
3979 WCHAR LogPath[1];
3980 } TXFS_START_RM_INFORMATION, *PTXFS_START_RM_INFORMATION;
3981
3982 typedef struct _TXFS_GET_METADATA_INFO_OUT {
3983 struct {
3984 LONGLONG LowPart;
3985 LONGLONG HighPart;
3986 } TxfFileId;
3987 GUID LockingTransaction;
3988 ULONGLONG LastLsn;
3989 ULONG TransactionState;
3990 } TXFS_GET_METADATA_INFO_OUT, *PTXFS_GET_METADATA_INFO_OUT;
3991
3992 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001
3993 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x00000002
3994
3995 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY {
3996 ULONGLONG Offset;
3997 ULONG NameFlags;
3998 LONGLONG FileId;
3999 ULONG Reserved1;
4000 ULONG Reserved2;
4001 LONGLONG Reserved3;
4002 WCHAR FileName[1];
4003 } TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY;
4004
4005 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES {
4006 GUID KtmTransaction;
4007 ULONGLONG NumberOfFiles;
4008 ULONGLONG BufferSizeRequired;
4009 ULONGLONG Offset;
4010 } TXFS_LIST_TRANSACTION_LOCKED_FILES, *PTXFS_LIST_TRANSACTION_LOCKED_FILES;
4011
4012 typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY {
4013 GUID TransactionId;
4014 ULONG TransactionState;
4015 ULONG Reserved1;
4016 ULONG Reserved2;
4017 LONGLONG Reserved3;
4018 } TXFS_LIST_TRANSACTIONS_ENTRY, *PTXFS_LIST_TRANSACTIONS_ENTRY;
4019
4020 typedef struct _TXFS_LIST_TRANSACTIONS {
4021 ULONGLONG NumberOfTransactions;
4022 ULONGLONG BufferSizeRequired;
4023 } TXFS_LIST_TRANSACTIONS, *PTXFS_LIST_TRANSACTIONS;
4024
4025 typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT {
4026 _ANONYMOUS_UNION union {
4027 ULONG BufferLength;
4028 UCHAR Buffer[1];
4029 } DUMMYUNIONNAME;
4030 } TXFS_READ_BACKUP_INFORMATION_OUT, *PTXFS_READ_BACKUP_INFORMATION_OUT;
4031
4032 typedef struct _TXFS_WRITE_BACKUP_INFORMATION {
4033 UCHAR Buffer[1];
4034 } TXFS_WRITE_BACKUP_INFORMATION, *PTXFS_WRITE_BACKUP_INFORMATION;
4035
4036 #define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFE
4037 #define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFF
4038
4039 typedef struct _TXFS_GET_TRANSACTED_VERSION {
4040 ULONG ThisBaseVersion;
4041 ULONG LatestVersion;
4042 USHORT ThisMiniVersion;
4043 USHORT FirstMiniVersion;
4044 USHORT LatestMiniVersion;
4045 } TXFS_GET_TRANSACTED_VERSION, *PTXFS_GET_TRANSACTED_VERSION;
4046
4047 #define TXFS_SAVEPOINT_SET 0x00000001
4048 #define TXFS_SAVEPOINT_ROLLBACK 0x00000002
4049 #define TXFS_SAVEPOINT_CLEAR 0x00000004
4050 #define TXFS_SAVEPOINT_CLEAR_ALL 0x00000010
4051
4052 typedef struct _TXFS_SAVEPOINT_INFORMATION {
4053 HANDLE KtmTransaction;
4054 ULONG ActionCode;
4055 ULONG SavepointId;
4056 } TXFS_SAVEPOINT_INFORMATION, *PTXFS_SAVEPOINT_INFORMATION;
4057
4058 typedef struct _TXFS_CREATE_MINIVERSION_INFO {
4059 USHORT StructureVersion;
4060 USHORT StructureLength;
4061 ULONG BaseVersion;
4062 USHORT MiniVersion;
4063 } TXFS_CREATE_MINIVERSION_INFO, *PTXFS_CREATE_MINIVERSION_INFO;
4064
4065 typedef struct _TXFS_TRANSACTION_ACTIVE_INFO {
4066 BOOLEAN TransactionsActiveAtSnapshot;
4067 } TXFS_TRANSACTION_ACTIVE_INFO, *PTXFS_TRANSACTION_ACTIVE_INFO;
4068
4069 #endif /* (_WIN32_WINNT >= 0x0600) */
4070
4071 #if (_WIN32_WINNT >= 0x0601)
4072
4073 #define MARK_HANDLE_REALTIME (0x00000020)
4074 #define MARK_HANDLE_NOT_REALTIME (0x00000040)
4075
4076 #define NO_8DOT3_NAME_PRESENT (0x00000001)
4077 #define REMOVED_8DOT3_NAME (0x00000002)
4078
4079 #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED (0x00000001)
4080
4081 typedef struct _BOOT_AREA_INFO {
4082 ULONG BootSectorCount;
4083 struct {
4084 LARGE_INTEGER Offset;
4085 } BootSectors[2];
4086 } BOOT_AREA_INFO, *PBOOT_AREA_INFO;
4087
4088 typedef struct _RETRIEVAL_POINTER_BASE {
4089 LARGE_INTEGER FileAreaOffset;
4090 } RETRIEVAL_POINTER_BASE, *PRETRIEVAL_POINTER_BASE;
4091
4092 typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION {
4093 ULONG VolumeFlags;
4094 ULONG FlagMask;
4095 ULONG Version;
4096 ULONG Reserved;
4097 } FILE_FS_PERSISTENT_VOLUME_INFORMATION, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION;
4098
4099 typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION {
4100 CHAR FileSystem[9];
4101 } FILE_SYSTEM_RECOGNITION_INFORMATION, *PFILE_SYSTEM_RECOGNITION_INFORMATION;
4102
4103 #define OPLOCK_LEVEL_CACHE_READ (0x00000001)
4104 #define OPLOCK_LEVEL_CACHE_HANDLE (0x00000002)
4105 #define OPLOCK_LEVEL_CACHE_WRITE (0x00000004)
4106
4107 #define REQUEST_OPLOCK_INPUT_FLAG_REQUEST (0x00000001)
4108 #define REQUEST_OPLOCK_INPUT_FLAG_ACK (0x00000002)
4109 #define REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE (0x00000004)
4110
4111 #define REQUEST_OPLOCK_CURRENT_VERSION 1
4112
4113 typedef struct _REQUEST_OPLOCK_INPUT_BUFFER {
4114 USHORT StructureVersion;
4115 USHORT StructureLength;
4116 ULONG RequestedOplockLevel;
4117 ULONG Flags;
4118 } REQUEST_OPLOCK_INPUT_BUFFER, *PREQUEST_OPLOCK_INPUT_BUFFER;
4119
4120 #define REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED (0x00000001)
4121 #define REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED (0x00000002)
4122
4123 typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER {
4124 USHORT StructureVersion;
4125 USHORT StructureLength;
4126 ULONG OriginalOplockLevel;
4127 ULONG NewOplockLevel;
4128 ULONG Flags;
4129 ACCESS_MASK AccessMode;
4130 USHORT ShareMode;
4131 } REQUEST_OPLOCK_OUTPUT_BUFFER, *PREQUEST_OPLOCK_OUTPUT_BUFFER;
4132
4133 #define SD_GLOBAL_CHANGE_TYPE_MACHINE_SID 1
4134
4135 typedef struct _SD_CHANGE_MACHINE_SID_INPUT {
4136 USHORT CurrentMachineSIDOffset;
4137 USHORT CurrentMachineSIDLength;
4138 USHORT NewMachineSIDOffset;
4139 USHORT NewMachineSIDLength;
4140 } SD_CHANGE_MACHINE_SID_INPUT, *PSD_CHANGE_MACHINE_SID_INPUT;
4141
4142 typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT {
4143 ULONGLONG NumSDChangedSuccess;
4144 ULONGLONG NumSDChangedFail;
4145 ULONGLONG NumSDUnused;
4146 ULONGLONG NumSDTotal;
4147 ULONGLONG NumMftSDChangedSuccess;
4148 ULONGLONG NumMftSDChangedFail;
4149 ULONGLONG NumMftSDTotal;
4150 } SD_CHANGE_MACHINE_SID_OUTPUT, *PSD_CHANGE_MACHINE_SID_OUTPUT;
4151
4152 typedef struct _SD_GLOBAL_CHANGE_INPUT {
4153 ULONG Flags;
4154 ULONG ChangeType;
4155 _ANONYMOUS_UNION union {
4156 SD_CHANGE_MACHINE_SID_INPUT SdChange;
4157 } DUMMYUNIONNAME;
4158 } SD_GLOBAL_CHANGE_INPUT, *PSD_GLOBAL_CHANGE_INPUT;
4159
4160 typedef struct _SD_GLOBAL_CHANGE_OUTPUT {
4161 ULONG Flags;
4162 ULONG ChangeType;
4163 _ANONYMOUS_UNION union {
4164 SD_CHANGE_MACHINE_SID_OUTPUT SdChange;
4165 } DUMMYUNIONNAME;
4166 } SD_GLOBAL_CHANGE_OUTPUT, *PSD_GLOBAL_CHANGE_OUTPUT;
4167
4168 #define ENCRYPTED_DATA_INFO_SPARSE_FILE 1
4169
4170 typedef struct _EXTENDED_ENCRYPTED_DATA_INFO {
4171 ULONG ExtendedCode;
4172 ULONG Length;
4173 ULONG Flags;
4174 ULONG Reserved;
4175 } EXTENDED_ENCRYPTED_DATA_INFO, *PEXTENDED_ENCRYPTED_DATA_INFO;
4176
4177 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT {
4178 ULONG Flags;
4179 ULONG NumberOfClusters;
4180 LARGE_INTEGER Cluster[1];
4181 } LOOKUP_STREAM_FROM_CLUSTER_INPUT, *PLOOKUP_STREAM_FROM_CLUSTER_INPUT;
4182
4183 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT {
4184 ULONG Offset;
4185 ULONG NumberOfMatches;
4186 ULONG BufferSizeRequired;
4187 } LOOKUP_STREAM_FROM_CLUSTER_OUTPUT, *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT;
4188
4189 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE 0x00000001
4190 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET 0x00000002
4191 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE 0x00000004
4192 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE 0x00000008
4193
4194 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK 0xff000000
4195 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA 0x01000000
4196 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX 0x02000000
4197 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM 0x03000000
4198
4199 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY {
4200 ULONG OffsetToNext;
4201 ULONG Flags;
4202 LARGE_INTEGER Reserved;
4203 LARGE_INTEGER Cluster;
4204 WCHAR FileName[1];
4205 } LOOKUP_STREAM_FROM_CLUSTER_ENTRY, *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY;
4206
4207 typedef struct _FILE_TYPE_NOTIFICATION_INPUT {
4208 ULONG Flags;
4209 ULONG NumFileTypeIDs;
4210 GUID FileTypeID[1];
4211 } FILE_TYPE_NOTIFICATION_INPUT, *PFILE_TYPE_NOTIFICATION_INPUT;
4212
4213 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_BEGIN 0x00000001
4214 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_END 0x00000002
4215
4216 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_PAGE_FILE, 0x0d0a64a1, 0x38fc, 0x4db8, 0x9f, 0xe7, 0x3f, 0x43, 0x52, 0xcd, 0x7c, 0x5c);
4217 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_HIBERNATION_FILE, 0xb7624d64, 0xb9a3, 0x4cf8, 0x80, 0x11, 0x5b, 0x86, 0xc9, 0x40, 0xe7, 0xb7);
4218 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_CRASHDUMP_FILE, 0x9d453eb7, 0xd2a6, 0x4dbd, 0xa2, 0xe3, 0xfb, 0xd0, 0xed, 0x91, 0x09, 0xa9);
4219
4220 #ifndef _VIRTUAL_STORAGE_TYPE_DEFINED
4221 #define _VIRTUAL_STORAGE_TYPE_DEFINED
4222 typedef struct _VIRTUAL_STORAGE_TYPE {
4223 ULONG DeviceId;
4224 GUID VendorId;
4225 } VIRTUAL_STORAGE_TYPE, *PVIRTUAL_STORAGE_TYPE;
4226 #endif
4227
4228 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST {
4229 ULONG RequestLevel;
4230 ULONG RequestFlags;
4231 } STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST, *PSTORAGE_QUERY_DEPENDENT_VOLUME_REQUEST;
4232
4233 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_HOST_VOLUMES 0x1
4234 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_GUEST_VOLUMES 0x2
4235
4236 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY {
4237 ULONG EntryLength;
4238 ULONG DependencyTypeFlags;
4239 ULONG ProviderSpecificFlags;
4240 VIRTUAL_STORAGE_TYPE VirtualStorageType;
4241 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY;
4242
4243 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY {
4244 ULONG EntryLength;
4245 ULONG DependencyTypeFlags;
4246 ULONG ProviderSpecificFlags;
4247 VIRTUAL_STORAGE_TYPE VirtualStorageType;
4248 ULONG AncestorLevel;
4249 ULONG HostVolumeNameOffset;
4250 ULONG HostVolumeNameSize;
4251 ULONG DependentVolumeNameOffset;
4252 ULONG DependentVolumeNameSize;
4253 ULONG RelativePathOffset;
4254 ULONG RelativePathSize;
4255 ULONG DependentDeviceNameOffset;
4256 ULONG DependentDeviceNameSize;
4257 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY;
4258
4259 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE {
4260 ULONG ResponseLevel;
4261 ULONG NumberEntries;
4262 _ANONYMOUS_UNION union {
4263 STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY Lev1Depends[];
4264 STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY Lev2Depends[];
4265 } DUMMYUNIONNAME;
4266 } STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE, *PSTORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE;
4267
4268 #endif /* (_WIN32_WINNT >= 0x0601) */
4269
4270 typedef struct _FILESYSTEM_STATISTICS {
4271 USHORT FileSystemType;
4272 USHORT Version;
4273 ULONG SizeOfCompleteStructure;
4274 ULONG UserFileReads;
4275 ULONG UserFileReadBytes;
4276 ULONG UserDiskReads;
4277 ULONG UserFileWrites;
4278 ULONG UserFileWriteBytes;
4279 ULONG UserDiskWrites;
4280 ULONG MetaDataReads;
4281 ULONG MetaDataReadBytes;
4282 ULONG MetaDataDiskReads;
4283 ULONG MetaDataWrites;
4284 ULONG MetaDataWriteBytes;
4285 ULONG MetaDataDiskWrites;
4286 } FILESYSTEM_STATISTICS, *PFILESYSTEM_STATISTICS;
4287
4288 #define FILESYSTEM_STATISTICS_TYPE_NTFS 1
4289 #define FILESYSTEM_STATISTICS_TYPE_FAT 2
4290 #define FILESYSTEM_STATISTICS_TYPE_EXFAT 3
4291
4292 typedef struct _FAT_STATISTICS {
4293 ULONG CreateHits;
4294 ULONG SuccessfulCreates;
4295 ULONG FailedCreates;
4296 ULONG NonCachedReads;
4297 ULONG NonCachedReadBytes;
4298 ULONG NonCachedWrites;
4299 ULONG NonCachedWriteBytes;
4300 ULONG NonCachedDiskReads;
4301 ULONG NonCachedDiskWrites;
4302 } FAT_STATISTICS, *PFAT_STATISTICS;
4303
4304 typedef struct _EXFAT_STATISTICS {
4305 ULONG CreateHits;
4306 ULONG SuccessfulCreates;
4307 ULONG FailedCreates;
4308 ULONG NonCachedReads;
4309 ULONG NonCachedReadBytes;
4310 ULONG NonCachedWrites;
4311 ULONG NonCachedWriteBytes;
4312 ULONG NonCachedDiskReads;
4313 ULONG NonCachedDiskWrites;
4314 } EXFAT_STATISTICS, *PEXFAT_STATISTICS;
4315
4316 typedef struct _NTFS_STATISTICS {
4317 ULONG LogFileFullExceptions;
4318 ULONG OtherExceptions;
4319 ULONG MftReads;
4320 ULONG MftReadBytes;
4321 ULONG MftWrites;
4322 ULONG MftWriteBytes;
4323 struct {
4324 USHORT Write;
4325 USHORT Create;
4326 USHORT SetInfo;
4327 USHORT Flush;
4328 } MftWritesUserLevel;
4329 USHORT MftWritesFlushForLogFileFull;
4330 USHORT MftWritesLazyWriter;
4331 USHORT MftWritesUserRequest;
4332 ULONG Mft2Writes;
4333 ULONG Mft2WriteBytes;
4334 struct {
4335 USHORT Write;
4336 USHORT Create;
4337 USHORT SetInfo;
4338 USHORT Flush;
4339 } Mft2WritesUserLevel;
4340 USHORT Mft2WritesFlushForLogFileFull;
4341 USHORT Mft2WritesLazyWriter;
4342 USHORT Mft2WritesUserRequest;
4343 ULONG RootIndexReads;
4344 ULONG RootIndexReadBytes;
4345 ULONG RootIndexWrites;
4346 ULONG RootIndexWriteBytes;
4347 ULONG BitmapReads;
4348 ULONG BitmapReadBytes;
4349 ULONG BitmapWrites;
4350 ULONG BitmapWriteBytes;
4351 USHORT BitmapWritesFlushForLogFileFull;
4352 USHORT BitmapWritesLazyWriter;
4353 USHORT BitmapWritesUserRequest;
4354 struct {
4355 USHORT Write;
4356 USHORT Create;
4357 USHORT SetInfo;
4358 } BitmapWritesUserLevel;
4359 ULONG MftBitmapReads;
4360 ULONG MftBitmapReadBytes;
4361 ULONG MftBitmapWrites;
4362 ULONG MftBitmapWriteBytes;
4363 USHORT MftBitmapWritesFlushForLogFileFull;
4364 USHORT MftBitmapWritesLazyWriter;
4365 USHORT MftBitmapWritesUserRequest;
4366 struct {
4367 USHORT Write;
4368 USHORT Create;
4369 USHORT SetInfo;
4370 USHORT Flush;
4371 } MftBitmapWritesUserLevel;
4372 ULONG UserIndexReads;
4373 ULONG UserIndexReadBytes;
4374 ULONG UserIndexWrites;
4375 ULONG UserIndexWriteBytes;
4376 ULONG LogFileReads;
4377 ULONG LogFileReadBytes;
4378 ULONG LogFileWrites;
4379 ULONG LogFileWriteBytes;
4380 struct {
4381 ULONG Calls;
4382 ULONG Clusters;
4383 ULONG Hints;
4384 ULONG RunsReturned;
4385 ULONG HintsHonored;
4386 ULONG HintsClusters;
4387 ULONG Cache;
4388 ULONG CacheClusters;
4389 ULONG CacheMiss;
4390 ULONG CacheMissClusters;
4391 } Allocate;
4392 } NTFS_STATISTICS, *PNTFS_STATISTICS;
4393
4394 #endif /* _FILESYSTEMFSCTL_ */
4395
4396 #define SYMLINK_FLAG_RELATIVE 1
4397
4398 typedef struct _REPARSE_DATA_BUFFER {
4399 ULONG ReparseTag;
4400 USHORT ReparseDataLength;
4401 USHORT Reserved;
4402 _ANONYMOUS_UNION union {
4403 struct {
4404 USHORT SubstituteNameOffset;
4405 USHORT SubstituteNameLength;
4406 USHORT PrintNameOffset;
4407 USHORT PrintNameLength;
4408 ULONG Flags;
4409 WCHAR PathBuffer[1];
4410 } SymbolicLinkReparseBuffer;
4411 struct {
4412 USHORT SubstituteNameOffset;
4413 USHORT SubstituteNameLength;
4414 USHORT PrintNameOffset;
4415 USHORT PrintNameLength;
4416 WCHAR PathBuffer[1];
4417 } MountPointReparseBuffer;
4418 struct {
4419 UCHAR DataBuffer[1];
4420 } GenericReparseBuffer;
4421 } DUMMYUNIONNAME;
4422 } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
4423
4424 #define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
4425
4426 typedef struct _REPARSE_GUID_DATA_BUFFER {
4427 ULONG ReparseTag;
4428 USHORT ReparseDataLength;
4429 USHORT Reserved;
4430 GUID ReparseGuid;
4431 struct {
4432 UCHAR DataBuffer[1];
4433 } GenericReparseBuffer;
4434 } REPARSE_GUID_DATA_BUFFER, *PREPARSE_GUID_DATA_BUFFER;
4435
4436 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
4437
4438 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 )
4439
4440 /* Reserved reparse tags */
4441 #define IO_REPARSE_TAG_RESERVED_ZERO (0)
4442 #define IO_REPARSE_TAG_RESERVED_ONE (1)
4443 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
4444
4445 #define IsReparseTagMicrosoft(_tag) (((_tag) & 0x80000000))
4446 #define IsReparseTagNameSurrogate(_tag) (((_tag) & 0x20000000))
4447
4448 #define IO_REPARSE_TAG_VALID_VALUES (0xF000FFFF)
4449
4450 #define IsReparseTagValid(tag) ( \
4451 !((tag) & ~IO_REPARSE_TAG_VALID_VALUES) && \
4452 ((tag) > IO_REPARSE_TAG_RESERVED_RANGE) \
4453 )
4454
4455 /* MicroSoft reparse point tags */
4456 #define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
4457 #define IO_REPARSE_TAG_HSM (0xC0000004L)
4458 #define IO_REPARSE_TAG_DRIVE_EXTENDER (0x80000005L)
4459 #define IO_REPARSE_TAG_HSM2 (0x80000006L)
4460 #define IO_REPARSE_TAG_SIS (0x80000007L)
4461 #define IO_REPARSE_TAG_WIM (0x80000008L)
4462 #define IO_REPARSE_TAG_CSV (0x80000009L)
4463 #define IO_REPARSE_TAG_DFS (0x8000000AL)
4464 #define IO_REPARSE_TAG_FILTER_MANAGER (0x8000000BL)
4465 #define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
4466 #define IO_REPARSE_TAG_IIS_CACHE (0xA0000010L)
4467 #define IO_REPARSE_TAG_DFSR (0x80000012L)
4468
4469 #pragma pack(4)
4470 typedef struct _REPARSE_INDEX_KEY {
4471 ULONG FileReparseTag;
4472 LARGE_INTEGER FileId;
4473 } REPARSE_INDEX_KEY, *PREPARSE_INDEX_KEY;
4474 #pragma pack()
4475
4476 #define FSCTL_LMR_GET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,58,METHOD_BUFFERED,FILE_ANY_ACCESS)
4477 #define FSCTL_LMR_SET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,59,METHOD_BUFFERED,FILE_ANY_ACCESS)
4478 #define IOCTL_LMR_ARE_FILE_OBJECTS_ON_SAME_SERVER CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS)
4479
4480 #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
4481 #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
4482 #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
4483 #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
4484 #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
4485 #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
4486 #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
4487 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
4488 #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
4489 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
4490 #define FSCTL_PIPE_GET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
4491 #define FSCTL_PIPE_SET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
4492 #define FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
4493 #define FSCTL_PIPE_SET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
4494 #define FSCTL_PIPE_GET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
4495 #define FSCTL_PIPE_SET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
4496 #define FSCTL_PIPE_FLUSH CTL_CODE(FILE_DEVICE_NAMED_PIPE, 16, METHOD_BUFFERED, FILE_WRITE_DATA)
4497
4498 #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
4499 #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
4500 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
4501 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
4502
4503 #define FILE_PIPE_READ_DATA 0x00000000
4504 #define FILE_PIPE_WRITE_SPACE 0x00000001
4505
4506 typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER {
4507 HANDLE EventHandle;
4508 ULONG KeyValue;
4509 } FILE_PIPE_ASSIGN_EVENT_BUFFER, *PFILE_PIPE_ASSIGN_EVENT_BUFFER;
4510
4511 typedef struct _FILE_PIPE_EVENT_BUFFER {
4512 ULONG NamedPipeState;
4513 ULONG EntryType;
4514 ULONG ByteCount;
4515 ULONG KeyValue;
4516 ULONG NumberRequests;
4517 } FILE_PIPE_EVENT_BUFFER, *PFILE_PIPE_EVENT_BUFFER;
4518
4519 typedef struct _FILE_PIPE_PEEK_BUFFER {
4520 ULONG NamedPipeState;
4521 ULONG ReadDataAvailable;
4522 ULONG NumberOfMessages;
4523 ULONG MessageLength;
4524 CHAR Data[1];
4525 } FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
4526
4527 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER {
4528 LARGE_INTEGER Timeout;
4529 ULONG NameLength;
4530 BOOLEAN TimeoutSpecified;
4531 WCHAR Name[1];
4532 } FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
4533
4534 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER {
4535 #if !defined(BUILD_WOW6432)
4536 PVOID ClientSession;
4537 PVOID ClientProcess;
4538 #else
4539 ULONGLONG ClientSession;
4540 ULONGLONG ClientProcess;
4541 #endif
4542 } FILE_PIPE_CLIENT_PROCESS_BUFFER, *PFILE_PIPE_CLIENT_PROCESS_BUFFER;
4543
4544 #define FILE_PIPE_COMPUTER_NAME_LENGTH 15
4545
4546 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER_EX {
4547 #if !defined(BUILD_WOW6432)
4548 PVOID ClientSession;
4549 PVOID ClientProcess;
4550 #else
4551 ULONGLONG ClientSession;
4552 ULONGLONG ClientProcess;
4553 #endif
4554 USHORT ClientComputerNameLength;
4555 WCHAR ClientComputerBuffer[FILE_PIPE_COMPUTER_NAME_LENGTH+1];
4556 } FILE_PIPE_CLIENT_PROCESS_BUFFER_EX, *PFILE_PIPE_CLIENT_PROCESS_BUFFER_EX;
4557
4558 #define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
4559
4560 typedef enum _LINK_TRACKING_INFORMATION_TYPE {
4561 NtfsLinkTrackingInformation,
4562 DfsLinkTrackingInformation
4563 } LINK_TRACKING_INFORMATION_TYPE, *PLINK_TRACKING_INFORMATION_TYPE;
4564
4565 typedef struct _LINK_TRACKING_INFORMATION {
4566 LINK_TRACKING_INFORMATION_TYPE Type;
4567 UCHAR VolumeId[16];
4568 } LINK_TRACKING_INFORMATION, *PLINK_TRACKING_INFORMATION;
4569
4570 typedef struct _REMOTE_LINK_TRACKING_INFORMATION {
4571 PVOID TargetFileObject;
4572 ULONG TargetLinkTrackingInformationLength;
4573 UCHAR TargetLinkTrackingInformationBuffer[1];
4574 } REMOTE_LINK_TRACKING_INFORMATION, *PREMOTE_LINK_TRACKING_INFORMATION;
4575
4576 #define IO_OPEN_PAGING_FILE 0x0002
4577 #define IO_OPEN_TARGET_DIRECTORY 0x0004
4578 #define IO_STOP_ON_SYMLINK 0x0008
4579 #define IO_MM_PAGING_FILE 0x0010
4580
4581 typedef VOID
4582 (NTAPI *PDRIVER_FS_NOTIFICATION) (
4583 IN PDEVICE_OBJECT DeviceObject,
4584 IN BOOLEAN FsActive);
4585
4586 typedef enum _FS_FILTER_SECTION_SYNC_TYPE {
4587 SyncTypeOther = 0,
4588 SyncTypeCreateSection
4589 } FS_FILTER_SECTION_SYNC_TYPE, *PFS_FILTER_SECTION_SYNC_TYPE;
4590
4591 typedef enum _FS_FILTER_STREAM_FO_NOTIFICATION_TYPE {
4592 NotifyTypeCreate = 0,
4593 NotifyTypeRetired
4594 } FS_FILTER_STREAM_FO_NOTIFICATION_TYPE, *PFS_FILTER_STREAM_FO_NOTIFICATION_TYPE;
4595
4596 typedef union _FS_FILTER_PARAMETERS {
4597 struct {
4598 PLARGE_INTEGER EndingOffset;
4599 PERESOURCE *ResourceToRelease;
4600 } AcquireForModifiedPageWriter;
4601 struct {
4602 PERESOURCE ResourceToRelease;
4603 } ReleaseForModifiedPageWriter;
4604 struct {
4605 FS_FILTER_SECTION_SYNC_TYPE SyncType;
4606 ULONG PageProtection;
4607 } AcquireForSectionSynchronization;
4608 struct {
4609 FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType;
4610 BOOLEAN POINTER_ALIGNMENT SafeToRecurse;
4611 } NotifyStreamFileObject;
4612 struct {
4613 PVOID Argument1;
4614 PVOID Argument2;
4615 PVOID Argument3;
4616 PVOID Argument4;
4617 PVOID Argument5;
4618 } Others;
4619 } FS_FILTER_PARAMETERS, *PFS_FILTER_PARAMETERS;
4620
4621 #define FS_FILTER_ACQUIRE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-1
4622 #define FS_FILTER_RELEASE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-2
4623 #define FS_FILTER_ACQUIRE_FOR_MOD_WRITE (UCHAR)-3
4624 #define FS_FILTER_RELEASE_FOR_MOD_WRITE (UCHAR)-4
4625 #define FS_FILTER_ACQUIRE_FOR_CC_FLUSH (UCHAR)-5
4626 #define FS_FILTER_RELEASE_FOR_CC_FLUSH (UCHAR)-6
4627
4628 typedef struct _FS_FILTER_CALLBACK_DATA {
4629 ULONG SizeOfFsFilterCallbackData;
4630 UCHAR Operation;
4631 UCHAR Reserved;
4632 struct _DEVICE_OBJECT *DeviceObject;
4633 struct _FILE_OBJECT *FileObject;
4634 FS_FILTER_PARAMETERS Parameters;
4635 } FS_FILTER_CALLBACK_DATA, *PFS_FILTER_CALLBACK_DATA;
4636
4637 typedef NTSTATUS
4638 (NTAPI *PFS_FILTER_CALLBACK) (
4639 IN PFS_FILTER_CALLBACK_DATA Data,
4640 OUT PVOID *CompletionContext);
4641
4642 typedef VOID
4643 (NTAPI *PFS_FILTER_COMPLETION_CALLBACK) (
4644 IN PFS_FILTER_CALLBACK_DATA Data,
4645 IN NTSTATUS OperationStatus,
4646 IN PVOID CompletionContext);
4647
4648 typedef struct _FS_FILTER_CALLBACKS {
4649 ULONG SizeOfFsFilterCallbacks;
4650 ULONG Reserved;
4651 PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization;
4652 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization;
4653 PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization;
4654 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization;
4655 PFS_FILTER_CALLBACK PreAcquireForCcFlush;
4656 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush;
4657 PFS_FILTER_CALLBACK PreReleaseForCcFlush;
4658 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush;
4659 PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter;
4660 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter;
4661 PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter;
4662 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter;
4663 } FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS;
4664
4665 #if (NTDDI_VERSION >= NTDDI_WINXP)
4666 NTKERNELAPI
4667 NTSTATUS
4668 NTAPI
4669 FsRtlRegisterFileSystemFilterCallbacks(
4670 IN struct _DRIVER_OBJECT *FilterDriverObject,
4671 IN PFS_FILTER_CALLBACKS Callbacks);
4672 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4673
4674 #if (NTDDI_VERSION >= NTDDI_VISTA)
4675 NTKERNELAPI
4676 NTSTATUS
4677 NTAPI
4678 FsRtlNotifyStreamFileObject(
4679 IN struct _FILE_OBJECT * StreamFileObject,
4680 IN struct _DEVICE_OBJECT *DeviceObjectHint OPTIONAL,
4681 IN FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType,
4682 IN BOOLEAN SafeToRecurse);
4683 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4684
4685 #define DO_VERIFY_VOLUME 0x00000002
4686 #define DO_BUFFERED_IO 0x00000004
4687 #define DO_EXCLUSIVE 0x00000008
4688 #define DO_DIRECT_IO 0x00000010
4689 #define DO_MAP_IO_BUFFER 0x00000020
4690 #define DO_DEVICE_HAS_NAME 0x00000040
4691 #define DO_DEVICE_INITIALIZING 0x00000080
4692 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
4693 #define DO_LONG_TERM_REQUESTS 0x00000200
4694 #define DO_NEVER_LAST_DEVICE 0x00000400
4695 #define DO_SHUTDOWN_REGISTERED 0x00000800
4696 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
4697 #define DO_POWER_PAGABLE 0x00002000
4698 #define DO_POWER_INRUSH 0x00004000
4699 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
4700 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
4701 #define DO_FORCE_NEITHER_IO 0x00080000
4702 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
4703 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
4704 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
4705 #define DO_DISALLOW_EXECUTE 0x00800000
4706
4707 extern KSPIN_LOCK IoStatisticsLock;
4708 extern ULONG IoReadOperationCount;
4709 extern ULONG IoWriteOperationCount;
4710 extern ULONG IoOtherOperationCount;
4711 extern LARGE_INTEGER IoReadTransferCount;
4712 extern LARGE_INTEGER IoWriteTransferCount;
4713 extern LARGE_INTEGER IoOtherTransferCount;
4714
4715 #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64
4716 #define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024
4717
4718 #if (NTDDI_VERSION >= NTDDI_VISTA)
4719 typedef struct _IO_PRIORITY_INFO {
4720 ULONG Size;
4721 ULONG ThreadPriority;
4722 ULONG PagePriority;
4723 IO_PRIORITY_HINT IoPriority;
4724 } IO_PRIORITY_INFO, *PIO_PRIORITY_INFO;
4725 #endif
4726
4727 typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION {
4728 ULONG Attributes;
4729 ACCESS_MASK GrantedAccess;
4730 ULONG HandleCount;
4731 ULONG PointerCount;
4732 ULONG Reserved[10];
4733 } PUBLIC_OBJECT_BASIC_INFORMATION, *PPUBLIC_OBJECT_BASIC_INFORMATION;
4734
4735 typedef struct _PUBLIC_OBJECT_TYPE_INFORMATION {
4736 UNICODE_STRING TypeName;
4737 ULONG Reserved [22];
4738 } PUBLIC_OBJECT_TYPE_INFORMATION, *PPUBLIC_OBJECT_TYPE_INFORMATION;
4739
4740 typedef struct _SECURITY_CLIENT_CONTEXT {
4741 SECURITY_QUALITY_OF_SERVICE SecurityQos;
4742 PACCESS_TOKEN ClientToken;
4743 BOOLEAN DirectlyAccessClientToken;
4744 BOOLEAN DirectAccessEffectiveOnly;
4745 BOOLEAN ServerIsRemote;
4746 TOKEN_CONTROL ClientTokenControl;
4747 } SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT;
4748
4749 #define SYSTEM_PAGE_PRIORITY_BITS 3
4750 #define SYSTEM_PAGE_PRIORITY_LEVELS (1 << SYSTEM_PAGE_PRIORITY_BITS)
4751
4752 typedef struct _KAPC_STATE {
4753 LIST_ENTRY ApcListHead[MaximumMode];
4754 PKPROCESS Process;
4755 BOOLEAN KernelApcInProgress;
4756 BOOLEAN KernelApcPending;
4757 BOOLEAN UserApcPending;
4758 } KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE;
4759
4760 #define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
4761
4762 #define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
4763
4764 typedef struct _KQUEUE {
4765 DISPATCHER_HEADER Header;
4766 LIST_ENTRY EntryListHead;
4767 volatile ULONG CurrentCount;
4768 ULONG MaximumCount;
4769 LIST_ENTRY ThreadListHead;
4770 } KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
4771
4772 /******************************************************************************
4773 * Kernel Functions *
4774 ******************************************************************************/
4775
4776 NTSTATUS
4777 NTAPI
4778 KeGetProcessorNumberFromIndex(
4779 IN ULONG ProcIndex,
4780 OUT PPROCESSOR_NUMBER ProcNumber);
4781
4782 ULONG
4783 NTAPI
4784 KeGetProcessorIndexFromNumber(
4785 IN PPROCESSOR_NUMBER ProcNumber);
4786
4787 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4788
4789
4790
4791
4792 NTKERNELAPI
4793 VOID
4794 NTAPI
4795 KeInitializeMutant(
4796 OUT PRKMUTANT Mutant,
4797 IN BOOLEAN InitialOwner);
4798
4799 NTKERNELAPI
4800 LONG
4801 NTAPI
4802 KeReadStateMutant(
4803 IN PRKMUTANT Mutant);
4804
4805 NTKERNELAPI
4806 LONG
4807 NTAPI
4808 KeReleaseMutant(
4809 IN OUT PRKMUTANT Mutant,
4810 IN KPRIORITY Increment,
4811 IN BOOLEAN Abandoned,
4812 IN BOOLEAN Wait);
4813
4814 NTKERNELAPI
4815 VOID
4816 NTAPI
4817 KeInitializeQueue(
4818 OUT PRKQUEUE Queue,
4819 IN ULONG Count);
4820
4821 NTKERNELAPI
4822 LONG
4823 NTAPI
4824 KeReadStateQueue(
4825 IN PRKQUEUE Queue);
4826
4827 NTKERNELAPI
4828 LONG
4829 NTAPI
4830 KeInsertQueue(
4831 IN OUT PRKQUEUE Queue,
4832 IN OUT PLIST_ENTRY Entry);
4833
4834 NTKERNELAPI
4835 LONG
4836 NTAPI
4837 KeInsertHeadQueue(
4838 IN OUT PRKQUEUE Queue,
4839 IN OUT PLIST_ENTRY Entry);
4840
4841 NTKERNELAPI
4842 PLIST_ENTRY
4843 NTAPI
4844 KeRemoveQueue(
4845 IN OUT PRKQUEUE Queue,
4846 IN KPROCESSOR_MODE WaitMode,
4847 IN PLARGE_INTEGER Timeout OPTIONAL);
4848
4849 NTKERNELAPI
4850 VOID
4851 NTAPI
4852 KeAttachProcess(
4853 IN OUT PKPROCESS Process);
4854
4855 NTKERNELAPI
4856 VOID
4857 NTAPI
4858 KeDetachProcess(
4859 VOID);
4860
4861 NTKERNELAPI
4862 PLIST_ENTRY
4863 NTAPI
4864 KeRundownQueue(
4865 IN OUT PRKQUEUE Queue);
4866
4867 NTKERNELAPI
4868 VOID
4869 NTAPI
4870 KeStackAttachProcess(
4871 IN OUT PKPROCESS Process,
4872 OUT PKAPC_STATE ApcState);
4873
4874 NTKERNELAPI
4875 VOID
4876 NTAPI
4877 KeUnstackDetachProcess(
4878 IN PKAPC_STATE ApcState);
4879
4880 NTKERNELAPI
4881 UCHAR
4882 NTAPI
4883 KeSetIdealProcessorThread(
4884 IN OUT PKTHREAD Thread,
4885 IN UCHAR Processor);
4886
4887 NTKERNELAPI
4888 BOOLEAN
4889 NTAPI
4890 KeSetKernelStackSwapEnable(
4891 IN BOOLEAN Enable);
4892
4893 #if defined(_X86_)
4894 NTHALAPI
4895 KIRQL
4896 FASTCALL
4897 KeAcquireSpinLockRaiseToSynch(
4898 IN OUT PKSPIN_LOCK SpinLock);
4899 #else
4900 NTKERNELAPI
4901 KIRQL
4902 KeAcquireSpinLockRaiseToSynch(
4903 IN OUT PKSPIN_LOCK SpinLock);
4904 #endif
4905
4906 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4907
4908 #if (NTDDI_VERSION >= NTDDI_WINXP)
4909
4910
4911 _DECL_HAL_KE_IMPORT
4912 KIRQL
4913 FASTCALL
4914 KeAcquireQueuedSpinLock(
4915 IN OUT KSPIN_LOCK_QUEUE_NUMBER Number);
4916
4917 _DECL_HAL_KE_IMPORT
4918 VOID
4919 FASTCALL
4920 KeReleaseQueuedSpinLock(
4921 IN OUT KSPIN_LOCK_QUEUE_NUMBER Number,
4922 IN KIRQL OldIrql);
4923
4924 _DECL_HAL_KE_IMPORT
4925 LOGICAL
4926 FASTCALL
4927 KeTryToAcquireQueuedSpinLock(
4928 IN KSPIN_LOCK_QUEUE_NUMBER Number,
4929 OUT PKIRQL OldIrql);
4930
4931 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4932
4933
4934
4935
4936
4937 #if (NTDDI_VERSION >= NTDDI_VISTA)
4938
4939 NTKERNELAPI
4940 VOID
4941 KeQueryOwnerMutant(
4942 IN PKMUTANT Mutant,
4943 OUT PCLIENT_ID ClientId);
4944
4945 NTKERNELAPI
4946 ULONG
4947 KeRemoveQueueEx (
4948 IN OUT PKQUEUE Queue,
4949 IN KPROCESSOR_MODE WaitMode,
4950 IN BOOLEAN Alertable,
4951 IN PLARGE_INTEGER Timeout OPTIONAL,
4952 OUT PLIST_ENTRY *EntryArray,
4953 IN ULONG Count);
4954
4955 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4956
4957
4958
4959 #define INVALID_PROCESSOR_INDEX 0xffffffff
4960
4961 #define EX_PUSH_LOCK ULONG_PTR
4962 #define PEX_PUSH_LOCK PULONG_PTR
4963 /******************************************************************************
4964 * Executive Functions *
4965 ******************************************************************************/
4966
4967
4968 #define ExDisableResourceBoost ExDisableResourceBoostLite
4969
4970 VOID
4971 ExInitializePushLock (
4972 OUT PEX_PUSH_LOCK PushLock);
4973
4974 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4975
4976 NTKERNELAPI
4977 SIZE_T
4978 NTAPI
4979 ExQueryPoolBlockSize(
4980 IN PVOID PoolBlock,
4981 OUT PBOOLEAN QuotaCharged);
4982
4983 VOID
4984 ExAdjustLookasideDepth(
4985 VOID);
4986
4987 NTKERNELAPI
4988 VOID
4989 NTAPI
4990 ExDisableResourceBoostLite(
4991 IN PERESOURCE Resource);
4992 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4993
4994 #if (NTDDI_VERSION >= NTDDI_WINXP)
4995
4996 PSLIST_ENTRY
4997 FASTCALL
4998 InterlockedPushListSList(
4999 IN OUT PSLIST_HEADER ListHead,
5000 IN OUT PSLIST_ENTRY List,
5001 IN OUT PSLIST_ENTRY ListEnd,
5002 IN ULONG Count);
5003 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5004
5005 /******************************************************************************
5006 * Security Manager Functions *
5007 ******************************************************************************/
5008
5009 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5010
5011
5012 NTKERNELAPI
5013 VOID
5014 NTAPI
5015 SeReleaseSubjectContext(
5016 IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
5017
5018 NTKERNELAPI
5019 BOOLEAN
5020 NTAPI
5021 SePrivilegeCheck(
5022 IN OUT PPRIVILEGE_SET RequiredPrivileges,
5023 IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
5024 IN KPROCESSOR_MODE AccessMode);
5025
5026 NTKERNELAPI
5027 VOID
5028 NTAPI
5029 SeOpenObjectAuditAlarm(
5030 IN PUNICODE_STRING ObjectTypeName,
5031 IN PVOID Object OPTIONAL,
5032 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
5033 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5034 IN PACCESS_STATE AccessState,
5035 IN BOOLEAN ObjectCreated,
5036 IN BOOLEAN AccessGranted,
5037 IN KPROCESSOR_MODE AccessMode,
5038 OUT PBOOLEAN GenerateOnClose);
5039
5040 NTKERNELAPI
5041 VOID
5042 NTAPI
5043 SeOpenObjectForDeleteAuditAlarm(
5044 IN PUNICODE_STRING ObjectTypeName,
5045 IN PVOID Object OPTIONAL,
5046 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
5047 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5048 IN PACCESS_STATE AccessState,
5049 IN BOOLEAN ObjectCreated,
5050 IN BOOLEAN AccessGranted,
5051 IN KPROCESSOR_MODE AccessMode,
5052 OUT PBOOLEAN GenerateOnClose);
5053
5054 NTKERNELAPI
5055 VOID
5056 NTAPI
5057 SeDeleteObjectAuditAlarm(
5058 IN PVOID Object,
5059 IN HANDLE Handle);
5060
5061 NTKERNELAPI
5062 TOKEN_TYPE
5063 NTAPI
5064 SeTokenType(
5065 IN PACCESS_TOKEN Token);
5066
5067 NTKERNELAPI
5068 BOOLEAN
5069 NTAPI
5070 SeTokenIsAdmin(
5071 IN PACCESS_TOKEN Token);
5072
5073 NTKERNELAPI
5074 BOOLEAN
5075 NTAPI
5076 SeTokenIsRestricted(
5077 IN PACCESS_TOKEN Token);
5078
5079 NTKERNELAPI
5080 NTSTATUS
5081 NTAPI
5082 SeQueryAuthenticationIdToken(
5083 IN PACCESS_TOKEN Token,
5084 OUT PLUID AuthenticationId);
5085
5086 NTKERNELAPI
5087 NTSTATUS
5088 NTAPI
5089 SeQuerySessionIdToken(
5090 IN PACCESS_TOKEN Token,
5091 OUT PULONG SessionId);
5092
5093 NTKERNELAPI
5094 NTSTATUS
5095 NTAPI
5096 SeCreateClientSecurity(
5097 IN PETHREAD ClientThread,
5098 IN PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos,
5099 IN BOOLEAN RemoteSession,
5100 OUT PSECURITY_CLIENT_CONTEXT ClientContext);
5101
5102 NTKERNELAPI
5103 VOID
5104 NTAPI
5105 SeImpersonateClient(
5106 IN PSECURITY_CLIENT_CONTEXT ClientContext,
5107 IN PETHREAD ServerThread OPTIONAL);
5108
5109 NTKERNELAPI
5110 NTSTATUS
5111 NTAPI
5112 SeImpersonateClientEx(
5113 IN PSECURITY_CLIENT_CONTEXT ClientContext,
5114 IN PETHREAD ServerThread OPTIONAL);
5115
5116 NTKERNELAPI
5117 NTSTATUS
5118 NTAPI
5119 SeCreateClientSecurityFromSubjectContext(
5120 IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
5121 IN PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos,
5122 IN BOOLEAN ServerIsRemote,
5123 OUT PSECURITY_CLIENT_CONTEXT ClientContext);
5124
5125 NTKERNELAPI
5126 NTSTATUS
5127 NTAPI
5128 SeQuerySecurityDescriptorInfo(
5129 IN PSECURITY_INFORMATION SecurityInformation,
5130 OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
5131 IN OUT PULONG Length,
5132 IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor);
5133
5134 NTKERNELAPI
5135 NTSTATUS
5136 NTAPI
5137 SeSetSecurityDescriptorInfo(
5138 IN PVOID Object OPTIONAL,
5139 IN PSECURITY_INFORMATION SecurityInformation,
5140 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5141 IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
5142 IN POOL_TYPE PoolType,
5143 IN PGENERIC_MAPPING GenericMapping);
5144
5145 NTKERNELAPI
5146 NTSTATUS
5147 NTAPI
5148 SeSetSecurityDescriptorInfoEx(
5149 IN PVOID Object OPTIONAL,
5150 IN PSECURITY_INFORMATION SecurityInformation,
5151 IN PSECURITY_DESCRIPTOR ModificationDescriptor,
5152 IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
5153 IN ULONG AutoInheritFlags,
5154 IN POOL_TYPE PoolType,
5155 IN PGENERIC_MAPPING GenericMapping);
5156
5157 NTKERNELAPI
5158 NTSTATUS
5159 NTAPI
5160 SeAppendPrivileges(
5161 IN OUT PACCESS_STATE AccessState,
5162 IN PPRIVILEGE_SET Privileges);
5163
5164 NTKERNELAPI
5165 BOOLEAN
5166 NTAPI
5167 SeAuditingFileEvents(
5168 IN BOOLEAN AccessGranted,
5169 IN PSECURITY_DESCRIPTOR SecurityDescriptor);
5170
5171 NTKERNELAPI
5172 BOOLEAN
5173 NTAPI
5174 SeAuditingFileOrGlobalEvents(
5175 IN BOOLEAN AccessGranted,
5176 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5177 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext);
5178
5179 VOID
5180 NTAPI
5181 SeSetAccessStateGenericMapping(
5182 IN OUT PACCESS_STATE AccessState,
5183 IN PGENERIC_MAPPING GenericMapping);
5184
5185 NTKERNELAPI
5186 NTSTATUS
5187 NTAPI
5188 SeRegisterLogonSessionTerminatedRoutine(
5189 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine);
5190
5191 NTKERNELAPI
5192 NTSTATUS
5193 NTAPI
5194 SeUnregisterLogonSessionTerminatedRoutine(
5195 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine);
5196
5197 NTKERNELAPI
5198 NTSTATUS
5199 NTAPI
5200 SeMarkLogonSessionForTerminationNotification(
5201 IN PLUID LogonId);
5202
5203 NTKERNELAPI
5204 NTSTATUS
5205 NTAPI
5206 SeQueryInformationToken(
5207 IN PACCESS_TOKEN Token,
5208 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
5209 OUT PVOID *TokenInformation);
5210
5211 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5212 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
5213 NTKERNELAPI
5214 BOOLEAN
5215 NTAPI
5216 SeAuditingHardLinkEvents(
5217 IN BOOLEAN AccessGranted,
5218 IN PSECURITY_DESCRIPTOR SecurityDescriptor);
5219 #endif
5220
5221 #if (NTDDI_VERSION >= NTDDI_WINXP)
5222
5223 NTKERNELAPI
5224 NTSTATUS
5225 NTAPI
5226 SeFilterToken(
5227 IN PACCESS_TOKEN ExistingToken,
5228 IN ULONG Flags,
5229 IN PTOKEN_GROUPS SidsToDisable OPTIONAL,
5230 IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL,
5231 IN PTOKEN_GROUPS RestrictedSids OPTIONAL,
5232 OUT PACCESS_TOKEN *FilteredToken);
5233
5234 NTKERNELAPI
5235 VOID
5236 NTAPI
5237 SeAuditHardLinkCreation(
5238 IN PUNICODE_STRING FileName,
5239 IN PUNICODE_STRING LinkName,
5240 IN BOOLEAN bSuccess);
5241
5242 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5243
5244 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
5245
5246 NTKERNELAPI
5247 BOOLEAN
5248 NTAPI
5249 SeAuditingFileEventsWithContext(
5250 IN BOOLEAN AccessGranted,
5251 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5252 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL);
5253
5254 NTKERNELAPI
5255 BOOLEAN
5256 NTAPI
5257 SeAuditingHardLinkEventsWithContext(
5258 IN BOOLEAN AccessGranted,
5259 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5260 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL);
5261
5262 #endif
5263
5264
5265 #if (NTDDI_VERSION >= NTDDI_VISTA)
5266
5267 NTKERNELAPI
5268 VOID
5269 NTAPI
5270 SeOpenObjectAuditAlarmWithTransaction(
5271 IN PUNICODE_STRING ObjectTypeName,
5272 IN PVOID Object OPTIONAL,
5273 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
5274 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5275 IN PACCESS_STATE AccessState,
5276 IN BOOLEAN ObjectCreated,
5277 IN BOOLEAN AccessGranted,
5278 IN KPROCESSOR_MODE AccessMode,
5279 IN GUID *TransactionId OPTIONAL,
5280 OUT PBOOLEAN GenerateOnClose);
5281
5282 NTKERNELAPI
5283 VOID
5284 NTAPI
5285 SeOpenObjectForDeleteAuditAlarmWithTransaction(
5286 IN PUNICODE_STRING ObjectTypeName,
5287 IN PVOID Object OPTIONAL,
5288 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
5289 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5290 IN PACCESS_STATE AccessState,
5291 IN BOOLEAN ObjectCreated,
5292 IN BOOLEAN AccessGranted,
5293 IN KPROCESSOR_MODE AccessMode,
5294 IN GUID *TransactionId OPTIONAL,
5295 OUT PBOOLEAN GenerateOnClose);
5296
5297 NTKERNELAPI
5298 VOID
5299 NTAPI
5300 SeExamineSacl(
5301 IN PACL Sacl,
5302 IN PACCESS_TOKEN Token,
5303 IN ACCESS_MASK DesiredAccess,
5304 IN BOOLEAN AccessGranted,
5305 OUT PBOOLEAN GenerateAudit,
5306 OUT PBOOLEAN GenerateAlarm);
5307
5308 NTKERNELAPI
5309 VOID
5310 NTAPI
5311 SeDeleteObjectAuditAlarmWithTransaction(
5312 IN PVOID Object,
5313 IN HANDLE Handle,
5314 IN GUID *TransactionId OPTIONAL);
5315
5316 NTKERNELAPI
5317 VOID
5318 NTAPI
5319 SeQueryTokenIntegrity(
5320 IN PACCESS_TOKEN Token,
5321 IN OUT PSID_AND_ATTRIBUTES IntegritySA);
5322
5323 NTKERNELAPI
5324 NTSTATUS
5325 NTAPI
5326 SeSetSessionIdToken(
5327 IN PACCESS_TOKEN Token,
5328 IN ULONG SessionId);
5329
5330 NTKERNELAPI
5331 VOID
5332 NTAPI
5333 SeAuditHardLinkCreationWithTransaction(
5334 IN PUNICODE_STRING FileName,
5335 IN PUNICODE_STRING LinkName,
5336 IN BOOLEAN bSuccess,
5337 IN GUID *TransactionId OPTIONAL);
5338
5339 NTKERNELAPI
5340 VOID
5341 NTAPI
5342 SeAuditTransactionStateChange(
5343 IN GUID *TransactionId,
5344 IN GUID *ResourceManagerId,
5345 IN ULONG NewTransactionState);
5346 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5347
5348 #if (NTDDI_VERSION >= NTDDI_VISTA || (NTDDI_VERSION >= NTDDI_WINXPSP2 && NTDDI_VERSION < NTDDI_WS03))
5349 NTKERNELAPI
5350 BOOLEAN
5351 NTAPI
5352 SeTokenIsWriteRestricted(
5353 IN PACCESS_TOKEN Token);
5354 #endif
5355
5356 #if (NTDDI_VERSION >= NTDDI_WIN7)
5357
5358 NTKERNELAPI
5359 BOOLEAN
5360 NTAPI
5361 SeAuditingAnyFileEventsWithContext(
5362 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5363 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL);
5364
5365 NTKERNELAPI
5366 VOID
5367 NTAPI
5368 SeExamineGlobalSacl(
5369 IN PUNICODE_STRING ObjectType,
5370 IN PACCESS_TOKEN Token,
5371 IN ACCESS_MASK DesiredAccess,
5372 IN BOOLEAN AccessGranted,
5373 IN OUT PBOOLEAN GenerateAudit,
5374 IN OUT PBOOLEAN GenerateAlarm OPTIONAL);
5375
5376 NTKERNELAPI
5377 VOID
5378 NTAPI
5379 SeMaximumAuditMaskFromGlobalSacl(
5380 IN PUNICODE_STRING ObjectTypeName OPTIONAL,
5381 IN ACCESS_MASK GrantedAccess,
5382 IN PACCESS_TOKEN Token,
5383 IN OUT PACCESS_MASK AuditMask);
5384
5385 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5386
5387 NTSTATUS
5388 NTAPI
5389 SeReportSecurityEventWithSubCategory(
5390 IN ULONG Flags,
5391 IN PUNICODE_STRING SourceName,
5392 IN PSID UserSid OPTIONAL,
5393 IN PSE_ADT_PARAMETER_ARRAY AuditParameters,
5394 IN ULONG AuditSubcategoryId);
5395
5396 BOOLEAN
5397 NTAPI
5398 SeAccessCheckFromState(
5399 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5400 IN PTOKEN_ACCESS_INFORMATION PrimaryTokenInformation,
5401 IN PTOKEN_ACCESS_INFORMATION ClientTokenInformation OPTIONAL,
5402 IN ACCESS_MASK DesiredAccess,
5403 IN ACCESS_MASK PreviouslyGrantedAccess,
5404 OUT PPRIVILEGE_SET *Privileges OPTIONAL,
5405 IN PGENERIC_MAPPING GenericMapping,
5406 IN KPROCESSOR_MODE AccessMode,
5407 OUT PACCESS_MASK GrantedAccess,
5408 OUT PNTSTATUS AccessStatus);
5409
5410 NTKERNELAPI
5411 VOID
5412 NTAPI
5413 SeFreePrivileges(
5414 IN PPRIVILEGE_SET Privileges);
5415
5416 NTSTATUS
5417 NTAPI
5418 SeLocateProcessImageName(
5419 IN OUT PEPROCESS Process,
5420 OUT PUNICODE_STRING *pImageFileName);
5421
5422 #define SeLengthSid( Sid ) \
5423 (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
5424
5425 #define SeDeleteClientSecurity(C) { \
5426 if (SeTokenType((C)->ClientToken) == TokenPrimary) { \
5427 PsDereferencePrimaryToken( (C)->ClientToken ); \
5428 } else { \
5429 PsDereferenceImpersonationToken( (C)->ClientToken ); \
5430 } \
5431 }
5432
5433 #define SeStopImpersonatingClient() PsRevertToSelf()
5434
5435 #define SeQuerySubjectContextToken( SubjectContext ) \
5436 ( ARGUMENT_PRESENT( \
5437 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken \
5438 ) ? \
5439 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken : \
5440 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
5441
5442 extern NTKERNELAPI PSE_EXPORTS SeExports;
5443 /******************************************************************************
5444 * Process Manager Functions *
5445 ******************************************************************************/
5446
5447 NTKERNELAPI
5448 NTSTATUS
5449 NTAPI
5450 PsLookupProcessByProcessId(
5451 IN HANDLE ProcessId,
5452 OUT PEPROCESS *Process);
5453
5454 NTKERNELAPI
5455 NTSTATUS
5456 NTAPI
5457 PsLookupThreadByThreadId(
5458 IN HANDLE UniqueThreadId,
5459 OUT PETHREAD *Thread);
5460
5461 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5462
5463
5464 NTKERNELAPI
5465 PACCESS_TOKEN
5466 NTAPI
5467 PsReferenceImpersonationToken(
5468 IN OUT PETHREAD Thread,
5469 OUT PBOOLEAN CopyOnOpen,
5470 OUT PBOOLEAN EffectiveOnly,
5471 OUT PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
5472
5473 NTKERNELAPI
5474 LARGE_INTEGER
5475 NTAPI
5476 PsGetProcessExitTime(VOID);
5477
5478 NTKERNELAPI
5479 BOOLEAN
5480 NTAPI
5481 PsIsThreadTerminating(
5482 IN PETHREAD Thread);
5483
5484 NTKERNELAPI
5485 NTSTATUS
5486 NTAPI
5487 PsImpersonateClient(
5488 IN OUT PETHREAD Thread,
5489 IN PACCESS_TOKEN Token,
5490 IN BOOLEAN CopyOnOpen,
5491 IN BOOLEAN EffectiveOnly,
5492 IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
5493
5494 NTKERNELAPI
5495 BOOLEAN
5496 NTAPI
5497 PsDisableImpersonation(
5498 IN OUT PETHREAD Thread,
5499 IN OUT PSE_IMPERSONATION_STATE ImpersonationState);
5500
5501 NTKERNELAPI
5502 VOID
5503 NTAPI
5504 PsRestoreImpersonation(
5505 IN PETHREAD Thread,
5506 IN PSE_IMPERSONATION_STATE ImpersonationState);
5507
5508 NTKERNELAPI
5509 VOID
5510 NTAPI
5511 PsRevertToSelf(VOID);
5512
5513 NTKERNELAPI
5514 VOID
5515 NTAPI
5516 PsChargePoolQuota(
5517 IN PEPROCESS Process,
5518 IN POOL_TYPE PoolType,
5519 IN ULONG_PTR Amount);
5520
5521 NTKERNELAPI
5522 VOID
5523 NTAPI
5524 PsReturnPoolQuota(
5525 IN PEPROCESS Process,
5526 IN POOL_TYPE PoolType,
5527 IN ULONG_PTR Amount);
5528
5529 NTKERNELAPI
5530 NTSTATUS
5531 NTAPI
5532 PsAssignImpersonationToken(
5533 IN PETHREAD Thread,
5534 IN HANDLE Token OPTIONAL);
5535
5536 NTKERNELAPI
5537 HANDLE
5538 NTAPI
5539 PsReferencePrimaryToken(
5540 IN OUT PEPROCESS Process);
5541 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5542 #if (NTDDI_VERSION >= NTDDI_WINXP)
5543
5544
5545 NTKERNELAPI
5546 VOID
5547 NTAPI
5548 PsDereferencePrimaryToken(
5549 IN PACCESS_TOKEN PrimaryToken);
5550
5551 NTKERNELAPI
5552 VOID
5553 NTAPI
5554 PsDereferenceImpersonationToken(
5555 IN PACCESS_TOKEN ImpersonationToken);
5556
5557 NTKERNELAPI
5558 NTSTATUS
5559 NTAPI
5560 PsChargeProcessPoolQuota(
5561 IN PEPROCESS Process,
5562 IN POOL_TYPE PoolType,
5563 IN ULONG_PTR Amount);
5564
5565 NTKERNELAPI
5566 BOOLEAN
5567 NTAPI
5568 PsIsSystemThread(
5569 IN PETHREAD Thread);
5570 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5571
5572 /******************************************************************************
5573 * I/O Manager Functions *
5574 ******************************************************************************/
5575
5576 #define IoIsFileOpenedExclusively(FileObject) ( \
5577 (BOOLEAN) !( \
5578 (FileObject)->SharedRead || \
5579 (FileObject)->SharedWrite || \
5580 (FileObject)->SharedDelete \
5581 ) \
5582 )
5583
5584 #if (NTDDI_VERSION == NTDDI_WIN2K)
5585 NTKERNELAPI
5586 NTSTATUS
5587 NTAPI
5588 IoRegisterFsRegistrationChangeEx(
5589 IN PDRIVER_OBJECT DriverObject,
5590 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
5591 #endif
5592 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5593
5594
5595 NTKERNELAPI
5596 VOID
5597 NTAPI
5598 IoAcquireVpbSpinLock(
5599 OUT PKIRQL Irql);
5600
5601 NTKERNELAPI
5602 NTSTATUS
5603 NTAPI
5604 IoCheckDesiredAccess(
5605 IN OUT PACCESS_MASK DesiredAccess,
5606 IN ACCESS_MASK GrantedAccess);
5607
5608 NTKERNELAPI
5609 NTSTATUS
5610 NTAPI
5611 IoCheckEaBufferValidity(
5612 IN PFILE_FULL_EA_INFORMATION EaBuffer,
5613 IN ULONG EaLength,
5614 OUT PULONG ErrorOffset);
5615
5616 NTKERNELAPI
5617 NTSTATUS
5618 NTAPI
5619 IoCheckFunctionAccess(
5620 IN ACCESS_MASK GrantedAccess,
5621 IN UCHAR MajorFunction,
5622 IN UCHAR MinorFunction,
5623 IN ULONG IoControlCode,
5624 IN PVOID Argument1 OPTIONAL,
5625 IN PVOID Argument2 OPTIONAL);
5626
5627 NTKERNELAPI
5628 NTSTATUS
5629 NTAPI
5630 IoCheckQuerySetFileInformation(
5631 IN FILE_INFORMATION_CLASS FileInformationClass,
5632 IN ULONG Length,
5633 IN BOOLEAN SetOperation);
5634
5635 NTKERNELAPI
5636 NTSTATUS
5637 NTAPI
5638 IoCheckQuerySetVolumeInformation(
5639 IN FS_INFORMATION_CLASS FsInformationClass,
5640 IN ULONG Length,
5641 IN BOOLEAN SetOperation);
5642
5643 NTKERNELAPI
5644 NTSTATUS
5645 NTAPI
5646 IoCheckQuotaBufferValidity(
5647 IN PFILE_QUOTA_INFORMATION QuotaBuffer,
5648 IN ULONG QuotaLength,
5649 OUT PULONG ErrorOffset);
5650
5651 NTKERNELAPI
5652 PFILE_OBJECT
5653 NTAPI
5654 IoCreateStreamFileObject(
5655 IN PFILE_OBJECT FileObject OPTIONAL,
5656 IN PDEVICE_OBJECT DeviceObject OPTIONAL);
5657
5658 NTKERNELAPI
5659 PFILE_OBJECT
5660 NTAPI
5661 IoCreateStreamFileObjectLite(
5662 IN PFILE_OBJECT FileObject OPTIONAL,
5663 IN PDEVICE_OBJECT DeviceObject OPTIONAL);
5664
5665 NTKERNELAPI
5666 BOOLEAN
5667 NTAPI
5668 IoFastQueryNetworkAttributes(
5669 IN POBJECT_ATTRIBUTES ObjectAttributes,
5670 IN ACCESS_MASK DesiredAccess,
5671 IN ULONG OpenOptions,
5672 OUT PIO_STATUS_BLOCK IoStatus,
5673 OUT PFILE_NETWORK_OPEN_INFORMATION Buffer);
5674
5675 NTKERNELAPI
5676 NTSTATUS
5677 NTAPI
5678 IoPageRead(
5679 IN PFILE_OBJECT FileObject,
5680 IN PMDL Mdl,
5681 IN PLARGE_INTEGER Offset,
5682 IN PKEVENT Event,
5683 OUT PIO_STATUS_BLOCK IoStatusBlock);
5684
5685 NTKERNELAPI
5686 PDEVICE_OBJECT
5687 NTAPI
5688 IoGetBaseFileSystemDeviceObject(
5689 IN PFILE_OBJECT FileObject);
5690
5691 NTKERNELAPI
5692 PCONFIGURATION_INFORMATION
5693 NTAPI
5694 IoGetConfigurationInformation(VOID);
5695
5696 NTKERNELAPI
5697 ULONG
5698 NTAPI
5699 IoGetRequestorProcessId(
5700 IN PIRP Irp);
5701
5702 NTKERNELAPI
5703 PEPROCESS
5704 NTAPI
5705 IoGetRequestorProcess(
5706 IN PIRP Irp);
5707
5708 NTKERNELAPI
5709 PIRP
5710 NTAPI
5711 IoGetTopLevelIrp(VOID);
5712
5713 NTKERNELAPI
5714 BOOLEAN
5715 NTAPI
5716 IoIsOperationSynchronous(
5717 IN PIRP Irp);
5718
5719 NTKERNELAPI
5720 BOOLEAN
5721 NTAPI
5722 IoIsSystemThread(
5723 IN PETHREAD Thread);
5724
5725 NTKERNELAPI
5726 BOOLEAN
5727 NTAPI
5728 IoIsValidNameGraftingBuffer(
5729 IN PIRP Irp,
5730 IN PREPARSE_DATA_BUFFER ReparseBuffer);
5731
5732 NTKERNELAPI
5733 NTSTATUS
5734 NTAPI
5735 IoQueryFileInformation(
5736 IN PFILE_OBJECT FileObject,
5737 IN FILE_INFORMATION_CLASS FileInformationClass,
5738 IN ULONG Length,
5739 OUT PVOID FileInformation,
5740 OUT PULONG ReturnedLength);
5741
5742 NTKERNELAPI
5743 NTSTATUS
5744 NTAPI
5745 IoQueryVolumeInformation(
5746 IN PFILE_OBJECT FileObject,
5747 IN FS_INFORMATION_CLASS FsInformationClass,
5748 IN ULONG Length,
5749 OUT PVOID FsInformation,
5750 OUT PULONG ReturnedLength);
5751
5752 NTKERNELAPI
5753 VOID
5754 NTAPI
5755 IoQueueThreadIrp(
5756 IN PIRP Irp);
5757
5758 NTKERNELAPI
5759 VOID
5760 NTAPI
5761 IoRegisterFileSystem(
5762 IN PDEVICE_OBJECT DeviceObject);
5763
5764 NTKERNELAPI
5765 NTSTATUS
5766 NTAPI
5767 IoRegisterFsRegistrationChange(
5768 IN PDRIVER_OBJECT DriverObject,
5769 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
5770
5771 NTKERNELAPI
5772 VOID
5773 NTAPI
5774 IoReleaseVpbSpinLock(
5775 IN KIRQL Irql);
5776
5777 NTKERNELAPI
5778 VOID
5779 NTAPI
5780 IoSetDeviceToVerify(
5781 IN PETHREAD Thread,
5782 IN PDEVICE_OBJECT DeviceObject OPTIONAL);
5783
5784 NTKERNELAPI
5785 NTSTATUS
5786 NTAPI
5787 IoSetInformation(
5788 IN PFILE_OBJECT FileObject,
5789 IN FILE_INFORMATION_CLASS FileInformationClass,
5790 IN ULONG Length,
5791 IN PVOID FileInformation);
5792
5793 NTKERNELAPI
5794 VOID
5795 NTAPI
5796 IoSetTopLevelIrp(
5797 IN PIRP Irp OPTIONAL);
5798
5799 NTKERNELAPI
5800 NTSTATUS
5801 NTAPI
5802 IoSynchronousPageWrite(
5803 IN PFILE_OBJECT FileObject,
5804 IN PMDL Mdl,
5805 IN PLARGE_INTEGER FileOffset,
5806 IN PKEVENT Event,
5807 OUT PIO_STATUS_BLOCK IoStatusBlock);
5808
5809 NTKERNELAPI
5810 PEPROCESS
5811 NTAPI
5812 IoThreadToProcess(
5813 IN PETHREAD Thread);
5814
5815 NTKERNELAPI
5816 VOID
5817 NTAPI
5818 IoUnregisterFileSystem(
5819 IN PDEVICE_OBJECT DeviceObject);
5820
5821 NTKERNELAPI
5822 VOID
5823 NTAPI
5824 IoUnregisterFsRegistrationChange(
5825 IN PDRIVER_OBJECT DriverObject,
5826 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
5827
5828 NTKERNELAPI
5829 NTSTATUS
5830 NTAPI
5831 IoVerifyVolume(
5832 IN PDEVICE_OBJECT DeviceObject,
5833 IN BOOLEAN AllowRawMount);
5834
5835 NTKERNELAPI
5836 NTSTATUS
5837 NTAPI
5838 IoGetRequestorSessionId(
5839 IN PIRP Irp,
5840 OUT PULONG pSessionId);
5841
5842 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5843
5844
5845 #if (NTDDI_VERSION >= NTDDI_WINXP)
5846
5847
5848 NTKERNELAPI
5849 PFILE_OBJECT
5850 NTAPI
5851 IoCreateStreamFileObjectEx(
5852 IN PFILE_OBJECT FileObject OPTIONAL,
5853 IN PDEVICE_OBJECT DeviceObject OPTIONAL,
5854 OUT PHANDLE FileObjectHandle OPTIONAL);
5855
5856 NTKERNELAPI
5857 NTSTATUS
5858 NTAPI
5859 IoQueryFileDosDeviceName(
5860 IN PFILE_OBJECT FileObject,
5861 OUT POBJECT_NAME_INFORMATION *ObjectNameInformation);
5862
5863 NTKERNELAPI
5864 NTSTATUS
5865 NTAPI
5866 IoEnumerateDeviceObjectList(
5867 IN PDRIVER_OBJECT DriverObject,
5868 OUT PDEVICE_OBJECT *DeviceObjectList,
5869 IN ULONG DeviceObjectListSize,
5870 OUT PULONG ActualNumberDeviceObjects);
5871
5872 NTKERNELAPI
5873 PDEVICE_OBJECT
5874 NTAPI
5875 IoGetLowerDeviceObject(
5876 IN PDEVICE_OBJECT DeviceObject);
5877
5878 NTKERNELAPI
5879 PDEVICE_OBJECT
5880 NTAPI
5881 IoGetDeviceAttachmentBaseRef(
5882 IN PDEVICE_OBJECT DeviceObject);
5883
5884 NTKERNELAPI
5885 NTSTATUS
5886 NTAPI
5887 IoGetDiskDeviceObject(
5888 IN PDEVICE_OBJECT FileSystemDeviceObject,
5889 OUT PDEVICE_OBJECT *DiskDeviceObject);
5890
5891 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5892
5893 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
5894
5895
5896 NTKERNELAPI
5897 NTSTATUS
5898 NTAPI
5899 IoEnumerateRegisteredFiltersList(
5900 OUT PDRIVER_OBJECT *DriverObjectList,
5901 IN ULONG DriverObjectListSize,
5902 OUT PULONG ActualNumberDriverObjects);
5903 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
5904
5905 #if (NTDDI_VERSION >= NTDDI_VISTA)
5906
5907 VOID
5908 FORCEINLINE
5909 NTAPI
5910 IoInitializePriorityInfo(
5911 IN PIO_PRIORITY_INFO PriorityInfo)
5912 {
5913 PriorityInfo->Size = sizeof(IO_PRIORITY_INFO);
5914 PriorityInfo->ThreadPriority = 0xffff;
5915 PriorityInfo->IoPriority = IoPriorityNormal;
5916 PriorityInfo->PagePriority = 0;
5917 }
5918 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5919
5920 #if (NTDDI_VERSION >= NTDDI_WIN7)
5921
5922
5923 NTKERNELAPI
5924 NTSTATUS
5925 NTAPI
5926 IoRegisterFsRegistrationChangeMountAware(
5927 IN PDRIVER_OBJECT DriverObject,
5928 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine,
5929 IN BOOLEAN SynchronizeWithMounts);
5930
5931 NTKERNELAPI
5932 NTSTATUS
5933 NTAPI
5934 IoReplaceFileObjectName(
5935 IN PFILE_OBJECT FileObject,
5936 IN PWSTR NewFileName,
5937 IN USHORT FileNameLength);
5938 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5939
5940
5941 #define PO_CB_SYSTEM_POWER_POLICY 0
5942 #define PO_CB_AC_STATUS 1
5943 #define PO_CB_BUTTON_COLLISION 2
5944 #define PO_CB_SYSTEM_STATE_LOCK 3
5945 #define PO_CB_LID_SWITCH_STATE 4
5946 #define PO_CB_PROCESSOR_POWER_POLICY 5
5947
5948
5949 #if (NTDDI_VERSION >= NTDDI_WINXP)
5950 NTKERNELAPI
5951 NTSTATUS
5952 NTAPI
5953 PoQueueShutdownWorkItem(
5954 IN OUT PWORK_QUEUE_ITEM WorkItem);
5955 #endif
5956 /******************************************************************************
5957 * Memory manager Types *
5958 ******************************************************************************/
5959 typedef enum _MMFLUSH_TYPE {
5960 MmFlushForDelete,
5961 MmFlushForWrite
5962 } MMFLUSH_TYPE;
5963
5964 typedef struct _READ_LIST {
5965 PFILE_OBJECT FileObject;
5966 ULONG NumberOfEntries;
5967 LOGICAL IsImage;
5968 FILE_SEGMENT_ELEMENT List[ANYSIZE_ARRAY];
5969 } READ_LIST, *PREAD_LIST;
5970
5971 #if (NTDDI_VERSION >= NTDDI_WINXP)
5972
5973 typedef union _MM_PREFETCH_FLAGS {
5974 struct {
5975 ULONG Priority : SYSTEM_PAGE_PRIORITY_BITS;
5976 ULONG RepurposePriority : SYSTEM_PAGE_PRIORITY_BITS;
5977 } Flags;
5978 ULONG AllFlags;
5979 } MM_PREFETCH_FLAGS, *PMM_PREFETCH_FLAGS;
5980
5981 #define MM_PREFETCH_FLAGS_MASK ((1 << (2*SYSTEM_PAGE_PRIORITY_BITS)) - 1)
5982
5983 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5984
5985 #define HEAP_NO_SERIALIZE 0x00000001
5986 #define HEAP_GROWABLE 0x00000002
5987 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
5988 #define HEAP_ZERO_MEMORY 0x00000008
5989 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
5990 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
5991 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
5992 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
5993
5994 #define HEAP_CREATE_ALIGN_16 0x00010000
5995 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
5996 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
5997
5998 #define HEAP_SETTABLE_USER_VALUE 0x00000100
5999 #define HEAP_SETTABLE_USER_FLAG1 0x00000200
6000 #define HEAP_SETTABLE_USER_FLAG2 0x00000400
6001 #define HEAP_SETTABLE_USER_FLAG3 0x00000800
6002 #define HEAP_SETTABLE_USER_FLAGS 0x00000E00
6003
6004 #define HEAP_CLASS_0 0x00000000
6005 #define HEAP_CLASS_1 0x00001000
6006 #define HEAP_CLASS_2 0x00002000
6007 #define HEAP_CLASS_3 0x00003000
6008 #define HEAP_CLASS_4 0x00004000
6009 #define HEAP_CLASS_5 0x00005000
6010 #define HEAP_CLASS_6 0x00006000
6011 #define HEAP_CLASS_7 0x00007000
6012 #define HEAP_CLASS_8 0x00008000
6013 #define HEAP_CLASS_MASK 0x0000F000
6014
6015 #define HEAP_MAXIMUM_TAG 0x0FFF
6016 #define HEAP_GLOBAL_TAG 0x0800
6017 #define HEAP_PSEUDO_TAG_FLAG 0x8000
6018 #define HEAP_TAG_SHIFT 18
6019 #define HEAP_TAG_MASK (HEAP_MAXIMUM_TAG << HEAP_TAG_SHIFT)
6020
6021 #define HEAP_CREATE_VALID_MASK (HEAP_NO_SERIALIZE | \
6022 HEAP_GROWABLE | \
6023 HEAP_GENERATE_EXCEPTIONS | \
6024 HEAP_ZERO_MEMORY | \
6025 HEAP_REALLOC_IN_PLACE_ONLY | \
6026 HEAP_TAIL_CHECKING_ENABLED | \
6027 HEAP_FREE_CHECKING_ENABLED | \
6028 HEAP_DISABLE_COALESCE_ON_FREE | \
6029 HEAP_CLASS_MASK | \
6030 HEAP_CREATE_ALIGN_16 | \
6031 HEAP_CREATE_ENABLE_TRACING | \
6032 HEAP_CREATE_ENABLE_EXECUTE)
6033
6034 /******************************************************************************
6035 * Memory manager Functions *
6036 ******************************************************************************/
6037
6038 FORCEINLINE
6039 ULONG
6040 HEAP_MAKE_TAG_FLAGS(
6041 IN ULONG TagBase,
6042 IN ULONG Tag)
6043 {
6044 //__assume_bound(TagBase); // FIXME
6045 return ((ULONG)((TagBase) + ((Tag) << HEAP_TAG_SHIFT)));
6046 }
6047
6048 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6049
6050 NTKERNELAPI
6051 BOOLEAN
6052 NTAPI
6053 MmIsRecursiveIoFault(
6054 VOID);
6055
6056 NTKERNELAPI
6057 BOOLEAN
6058 NTAPI
6059 MmForceSectionClosed(
6060 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
6061 IN BOOLEAN DelayClose);
6062
6063 NTKERNELAPI
6064 BOOLEAN
6065 NTAPI
6066 MmFlushImageSection(
6067 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
6068 IN MMFLUSH_TYPE FlushType);
6069
6070 NTKERNELAPI
6071 BOOLEAN
6072 NTAPI
6073 MmCanFileBeTruncated(
6074 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
6075 IN PLARGE_INTEGER NewFileSize OPTIONAL);
6076
6077 NTKERNELAPI
6078 BOOLEAN
6079 NTAPI
6080 MmSetAddressRangeModified(
6081 IN PVOID Address,
6082 IN SIZE_T Length);
6083
6084 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
6085
6086 #if (NTDDI_VERSION >= NTDDI_WINXP)
6087
6088
6089 NTKERNELAPI
6090 NTSTATUS
6091 NTAPI
6092 MmPrefetchPages(
6093 IN ULONG NumberOfLists,
6094 IN PREAD_LIST *ReadLists);
6095
6096 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
6097
6098
6099 #if (NTDDI_VERSION >= NTDDI_VISTA)
6100
6101 NTKERNELAPI
6102 ULONG
6103 NTAPI
6104 MmDoesFileHaveUserWritableReferences(
6105 IN PSECTION_OBJECT_POINTERS SectionPointer);
6106 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
6107
6108
6109 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6110
6111 NTKERNELAPI
6112 NTSTATUS
6113 NTAPI
6114 ObInsertObject(
6115 IN PVOID Object,
6116 IN OUT PACCESS_STATE PassedAccessState OPTIONAL,
6117 IN ACCESS_MASK DesiredAccess OPTIONAL,
6118 IN ULONG ObjectPointerBias,
6119 OUT PVOID *NewObject OPTIONAL,
6120 OUT PHANDLE Handle OPTIONAL);
6121
6122 NTKERNELAPI
6123 NTSTATUS
6124 NTAPI
6125 ObOpenObjectByPointer(
6126 IN PVOID Object,
6127 IN ULONG HandleAttributes,
6128 IN PACCESS_STATE PassedAccessState OPTIONAL,
6129 IN ACCESS_MASK DesiredAccess OPTIONAL,
6130 IN POBJECT_TYPE ObjectType OPTIONAL,
6131 IN KPROCESSOR_MODE AccessMode,
6132 OUT PHANDLE Handle);
6133
6134 NTKERNELAPI
6135 VOID
6136 NTAPI
6137 ObMakeTemporaryObject(
6138 IN PVOID Object);
6139
6140 NTKERNELAPI
6141 NTSTATUS
6142 NTAPI
6143 ObQueryNameString(
6144 IN PVOID Object,
6145 OUT POBJECT_NAME_INFORMATION ObjectNameInfo OPTIONAL,
6146 IN ULONG Length,
6147 OUT PULONG ReturnLength);
6148
6149 NTKERNELAPI
6150 NTSTATUS
6151 NTAPI
6152 ObQueryObjectAuditingByHandle(
6153 IN HANDLE Handle,
6154 OUT PBOOLEAN GenerateOnClose);
6155 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
6156
6157 #if (NTDDI_VERSION >= NTDDI_VISTA)
6158
6159 NTKERNELAPI
6160 BOOLEAN
6161 NTAPI
6162 ObIsKernelHandle(
6163 IN HANDLE Handle);
6164 #endif
6165
6166
6167 #if (NTDDI_VERSION >= NTDDI_WIN7)
6168
6169 NTKERNELAPI
6170 NTSTATUS
6171 NTAPI
6172 ObOpenObjectByPointerWithTag(
6173 IN PVOID Object,
6174 IN ULONG HandleAttributes,
6175 IN PACCESS_STATE PassedAccessState OPTIONAL,
6176 IN ACCESS_MASK DesiredAccess,
6177 IN POBJECT_TYPE ObjectType OPTIONAL,
6178 IN KPROCESSOR_MODE AccessMode,
6179 IN ULONG Tag,
6180 OUT PHANDLE Handle);
6181 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
6182
6183 /* FSRTL Types */
6184
6185 typedef ULONG LBN;
6186 typedef LBN *PLBN;
6187
6188 typedef ULONG VBN;
6189 typedef VBN *PVBN;
6190
6191 typedef struct _FSRTL_COMMON_FCB_HEADER {
6192 CSHORT NodeTypeCode;
6193 CSHORT NodeByteSize;
6194 UCHAR Flags;
6195 UCHAR IsFastIoPossible;
6196 UCHAR Flags2;
6197 UCHAR Reserved:4;
6198 UCHAR Version:4;
6199 PERESOURCE Resource;
6200 PERESOURCE PagingIoResource;
6201 LARGE_INTEGER AllocationSize;
6202 LARGE_INTEGER FileSize;
6203 LARGE_INTEGER ValidDataLength;
6204 } FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER;
6205
6206 #ifdef __cplusplus
6207 typedef struct _FSRTL_ADVANCED_FCB_HEADER:FSRTL_COMMON_FCB_HEADER {
6208 #else /* __cplusplus */
6209 typedef struct _FSRTL_ADVANCED_FCB_HEADER {
6210 FSRTL_COMMON_FCB_HEADER DUMMYSTRUCTNAME;
6211 #endif /* __cplusplus */
6212 PFAST_MUTEX FastMutex;
6213 LIST_ENTRY FilterContexts;
6214 #if (NTDDI_VERSION >= NTDDI_VISTA)
6215 EX_PUSH_LOCK PushLock;
6216 PVOID *FileContextSupportPointer;
6217 #endif
6218 } FSRTL_ADVANCED_FCB_HEADER, *PFSRTL_ADVANCED_FCB_HEADER;
6219
6220 #define FSRTL_FCB_HEADER_V0 (0x00)
6221 #define FSRTL_FCB_HEADER_V1 (0x01)
6222
6223 #define FSRTL_FLAG_FILE_MODIFIED (0x01)
6224 #define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
6225 #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
6226 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
6227 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
6228 #define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
6229 #define FSRTL_FLAG_ADVANCED_HEADER (0x40)
6230 #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
6231
6232 #define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
6233 #define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02)
6234 #define FSRTL_FLAG2_PURGE_WHEN_MAPPED (0x04)
6235 #define FSRTL_FLAG2_IS_PAGING_FILE (0x08)
6236
6237 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
6238 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
6239 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
6240 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
6241 #define FSRTL_NETWORK1_TOP_LEVEL_IRP ((LONG_PTR)0x05)
6242 #define FSRTL_NETWORK2_TOP_LEVEL_IRP ((LONG_PTR)0x06)
6243 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG ((LONG_PTR)0xFFFF)
6244
6245 typedef struct _FSRTL_AUXILIARY_BUFFER {
6246 PVOID Buffer;
6247 ULONG Length;
6248 ULONG Flags;
6249 PMDL Mdl;
6250 } FSRTL_AUXILIARY_BUFFER, *PFSRTL_AUXILIARY_BUFFER;
6251
6252 #define FSRTL_AUXILIARY_FLAG_DEALLOCATE 0x00000001
6253
6254 typedef enum _FSRTL_COMPARISON_RESULT {
6255 LessThan = -1,
6256 EqualTo = 0,
6257 GreaterThan = 1
6258 } FSRTL_COMPARISON_RESULT;
6259
6260 #define FSRTL_FAT_LEGAL 0x01
6261 #define FSRTL_HPFS_LEGAL 0x02
6262 #define FSRTL_NTFS_LEGAL 0x04
6263 #define FSRTL_WILD_CHARACTER 0x08
6264 #define FSRTL_OLE_LEGAL 0x10
6265 #define FSRTL_NTFS_STREAM_LEGAL (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL)
6266
6267 #define FSRTL_VOLUME_DISMOUNT 1
6268 #define FSRTL_VOLUME_DISMOUNT_FAILED 2
6269 #define FSRTL_VOLUME_LOCK 3
6270 #define FSRTL_VOLUME_LOCK_FAILED 4
6271 #define FSRTL_VOLUME_UNLOCK 5
6272 #define FSRTL_VOLUME_MOUNT 6
6273 #define FSRTL_VOLUME_NEEDS_CHKDSK 7
6274 #define FSRTL_VOLUME_WORM_NEAR_FULL 8
6275 #define FSRTL_VOLUME_WEARING_OUT 9
6276 #define FSRTL_VOLUME_FORCED_CLOSED 10
6277 #define FSRTL_VOLUME_INFO_MAKE_COMPAT 11
6278 #define FSRTL_VOLUME_PREPARING_EJECT 12
6279 #define FSRTL_VOLUME_CHANGE_SIZE 13
6280 #define FSRTL_VOLUME_BACKGROUND_FORMAT 14
6281
6282 typedef VOID
6283 (NTAPI *PFSRTL_STACK_OVERFLOW_ROUTINE) (
6284 IN PVOID Context,
6285 IN PKEVENT Event);
6286
6287 #if (NTDDI_VERSION >= NTDDI_VISTA)
6288
6289 #define FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED 0x00000001
6290 #define FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED 0x00000002
6291 #define FSRTL_UNC_PROVIDER_FLAGS_DOMAIN_SVC_AWARE 0x00000004
6292
6293 #define FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA 0x00000001
6294
6295 #define FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA 0x00000001
6296 #define FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL 0x00000002
6297
6298 #define FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL 0x00000002
6299
6300 #define FSRTL_VIRTDISK_FULLY_ALLOCATED 0x00000001
6301 #define FSRTL_VIRTDISK_NO_DRIVE_LETTER 0x00000002
6302
6303 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_1 {
6304 ULONG32 ProviderId;
6305 } FSRTL_MUP_PROVIDER_INFO_LEVEL_1, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_1;
6306
6307 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_2 {
6308 ULONG32 ProviderId;
6309 UNICODE_STRING ProviderName;
6310 } FSRTL_MUP_PROVIDER_INFO_LEVEL_2, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_2;
6311
6312 typedef VOID
6313 (*PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK) (
6314 IN OUT PVOID EcpContext,
6315 IN LPCGUID EcpType);
6316
6317 typedef struct _ECP_LIST ECP_LIST, *PECP_LIST;
6318
6319 typedef ULONG FSRTL_ALLOCATE_ECPLIST_FLAGS;
6320 typedef ULONG FSRTL_ALLOCATE_ECP_FLAGS;
6321 typedef ULONG FSRTL_ECP_LOOKASIDE_FLAGS;
6322
6323 typedef enum _FSRTL_CHANGE_BACKING_TYPE {
6324 ChangeDataControlArea,
6325 ChangeImageControlArea,
6326 ChangeSharedCacheMap
6327 } FSRTL_CHANGE_BACKING_TYPE, *PFSRTL_CHANGE_BACKING_TYPE;
6328
6329 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
6330
6331 typedef struct _FSRTL_PER_FILE_CONTEXT {
6332 LIST_ENTRY Links;
6333 PVOID OwnerId;
6334 PVOID InstanceId;
6335 PFREE_FUNCTION FreeCallback;
6336 } FSRTL_PER_FILE_CONTEXT, *PFSRTL_PER_FILE_CONTEXT;
6337
6338 typedef struct _FSRTL_PER_STREAM_CONTEXT {
6339 LIST_ENTRY Links;
6340 PVOID OwnerId;
6341 PVOID InstanceId;
6342 PFREE_FUNCTION FreeCallback;
6343 } FSRTL_PER_STREAM_CONTEXT, *PFSRTL_PER_STREAM_CONTEXT;
6344
6345 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6346 typedef VOID
6347 (*PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS) (
6348 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
6349 #endif
6350
6351 typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT {
6352 LIST_ENTRY Links;
6353 PVOID OwnerId;
6354 PVOID InstanceId;
6355 } FSRTL_PER_FILEOBJECT_CONTEXT, *PFSRTL_PER_FILEOBJECT_CONTEXT;
6356
6357 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_HARD_ERROR 0x1
6358 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_LOG_ENTRY 0x2
6359
6360 typedef NTSTATUS
6361 (NTAPI *PCOMPLETE_LOCK_IRP_ROUTINE) (
6362 IN PVOID Context,
6363 IN PIRP Irp);
6364
6365 typedef struct _FILE_LOCK_INFO {
6366 LARGE_INTEGER StartingByte;
6367 LARGE_INTEGER Length;
6368 BOOLEAN ExclusiveLock;
6369 ULONG Key;
6370 PFILE_OBJECT FileObject;
6371 PVOID ProcessId;
6372 LARGE_INTEGER EndingByte;
6373 } FILE_LOCK_INFO, *PFILE_LOCK_INFO;
6374
6375 typedef VOID
6376 (NTAPI *PUNLOCK_ROUTINE) (
6377 IN PVOID Context,
6378 IN PFILE_LOCK_INFO FileLockInfo);
6379
6380 typedef struct _FILE_LOCK {
6381 PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
6382 PUNLOCK_ROUTINE UnlockRoutine;
6383 BOOLEAN FastIoIsQuestionable;
6384 BOOLEAN SpareC[3];
6385 PVOID LockInformation;
6386 FILE_LOCK_INFO LastReturnedLockInfo;
6387 PVOID LastReturnedLock;
6388 LONG volatile LockRequestsInProgress;
6389 } FILE_LOCK, *PFILE_LOCK;
6390
6391 typedef struct _TUNNEL {
6392 FAST_MUTEX Mutex;
6393 PRTL_SPLAY_LINKS Cache;
6394 LIST_ENTRY TimerQueue;
6395 USHORT NumEntries;
6396 } TUNNEL, *PTUNNEL;
6397
6398 typedef struct _BASE_MCB {
6399 ULONG MaximumPairCount;
6400 ULONG PairCount;
6401 USHORT PoolType;
6402 USHORT Flags;
6403 PVOID Mapping;
6404 } BASE_MCB, *PBASE_MCB;
6405
6406 typedef struct _LARGE_MCB {
6407 PKGUARDED_MUTEX GuardedMutex;
6408 BASE_MCB BaseMcb;
6409 } LARGE_MCB, *PLARGE_MCB;
6410
6411 #define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
6412
6413 typedef struct _MCB {
6414 LARGE_MCB DummyFieldThatSizesThisStructureCorrectly;
6415 } MCB, *PMCB;
6416
6417 typedef enum _FAST_IO_POSSIBLE {
6418 FastIoIsNotPossible = 0,
6419 FastIoIsPossible,
6420 FastIoIsQuestionable
6421 } FAST_IO_POSSIBLE;
6422
6423 typedef struct _EOF_WAIT_BLOCK {
6424 LIST_ENTRY EofWaitLinks;
6425 KEVENT Event;
6426 } EOF_WAIT_BLOCK, *PEOF_WAIT_BLOCK;
6427
6428 typedef PVOID OPLOCK, *POPLOCK;
6429
6430 typedef VOID
6431 (NTAPI *POPLOCK_WAIT_COMPLETE_ROUTINE) (
6432 IN PVOID Context,
6433 IN PIRP Irp);
6434
6435 typedef VOID
6436 (NTAPI *POPLOCK_FS_PREPOST_IRP) (
6437 IN PVOID Context,
6438 IN PIRP Irp);
6439
6440 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
6441 #define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED 0x00000001
6442 #endif
6443
6444 #if (NTDDI_VERSION >= NTDDI_WIN7)
6445 #define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY 0x00000002
6446 #define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK 0x00000004
6447 #define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS 0x00000008
6448 #define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH 0x00000001
6449 #endif
6450
6451 #if (NTDDI_VERSION >= NTDDI_WIN7)
6452
6453 typedef struct _OPLOCK_KEY_ECP_CONTEXT {
6454 GUID OplockKey;
6455 ULONG Reserved;
6456 } OPLOCK_KEY_ECP_CONTEXT, *POPLOCK_KEY_ECP_CONTEXT;
6457
6458 DEFINE_GUID(GUID_ECP_OPLOCK_KEY, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f);
6459
6460 #endif
6461
6462 typedef PVOID PNOTIFY_SYNC;
6463
6464 typedef BOOLEAN
6465 (NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) (
6466 IN PVOID NotifyContext,
6467 IN PVOID TargetContext OPTIONAL,
6468 IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
6469
6470 typedef BOOLEAN
6471 (NTAPI *PFILTER_REPORT_CHANGE) (
6472 IN PVOID NotifyContext,
6473 IN PVOID FilterContext);
6474 /* FSRTL Functions */
6475
6476 #define FsRtlEnterFileSystem KeEnterCriticalRegion
6477 #define FsRtlExitFileSystem KeLeaveCriticalRegion
6478
6479 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6480
6481 NTKERNELAPI
6482 BOOLEAN
6483 NTAPI
6484 FsRtlCopyRead(
6485 IN PFILE_OBJECT FileObject,
6486 IN PLARGE_INTEGER FileOffset,
6487 IN ULONG Length,
6488 IN BOOLEAN Wait,
6489 IN ULONG LockKey,
6490 OUT PVOID Buffer,
6491 OUT PIO_STATUS_BLOCK IoStatus,
6492 IN PDEVICE_OBJECT DeviceObject);
6493
6494 NTKERNELAPI
6495 BOOLEAN
6496 NTAPI
6497 FsRtlCopyWrite(
6498 IN PFILE_OBJECT FileObject,
6499 IN PLARGE_INTEGER FileOffset,
6500 IN ULONG Length,
6501 IN BOOLEAN Wait,
6502 IN ULONG LockKey,
6503 IN PVOID Buffer,
6504 OUT PIO_STATUS_BLOCK IoStatus,
6505 IN PDEVICE_OBJECT DeviceObject);
6506
6507 NTKERNELAPI
6508 BOOLEAN
6509 NTAPI
6510 FsRtlMdlReadDev(
6511 IN PFILE_OBJECT FileObject,
6512 IN PLARGE_INTEGER FileOffset,
6513 IN ULONG Length,
6514 IN ULONG LockKey,
6515 OUT PMDL *MdlChain,
6516 OUT PIO_STATUS_BLOCK IoStatus,
6517 IN PDEVICE_OBJECT DeviceObject OPTIONAL);
6518
6519 NTKERNELAPI
6520 BOOLEAN
6521 NTAPI
6522 FsRtlMdlReadCompleteDev(
6523 IN PFILE_OBJECT FileObject,
6524 IN PMDL MdlChain,
6525 IN PDEVICE_OBJECT DeviceObject OPTIONAL);
6526
6527 NTKERNELAPI
6528 BOOLEAN
6529 NTAPI
6530 FsRtlPrepareMdlWriteDev(
6531 IN PFILE_OBJECT FileObject,
6532 IN PLARGE_INTEGER FileOffset,
6533 IN ULONG Length,
6534 IN ULONG LockKey,
6535 OUT PMDL *MdlChain,
6536 OUT PIO_STATUS_BLOCK IoStatus,
6537 IN PDEVICE_OBJECT DeviceObject);
6538
6539 NTKERNELAPI
6540 BOOLEAN
6541 NTAPI
6542 FsRtlMdlWriteCompleteDev(
6543 IN PFILE_OBJECT FileObject,
6544 IN PLARGE_INTEGER FileOffset,
6545 IN PMDL MdlChain,
6546 IN PDEVICE_OBJECT DeviceObject);
6547
6548 NTKERNELAPI
6549 VOID
6550 NTAPI
6551 FsRtlAcquireFileExclusive(
6552 IN PFILE_OBJECT FileObject);
6553
6554 NTKERNELAPI
6555 VOID
6556 NTAPI
6557 FsRtlReleaseFile(
6558 IN PFILE_OBJECT FileObject);
6559
6560 NTKERNELAPI
6561 NTSTATUS
6562 NTAPI
6563 FsRtlGetFileSize(
6564 IN PFILE_OBJECT FileObject,
6565 OUT PLARGE_INTEGER FileSize);
6566
6567 NTKERNELAPI
6568 BOOLEAN
6569 NTAPI
6570 FsRtlIsTotalDeviceFailure(
6571 IN NTSTATUS Status);
6572
6573 NTKERNELAPI
6574 PFILE_LOCK
6575 NTAPI
6576 FsRtlAllocateFileLock(
6577 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
6578 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL);
6579
6580 NTKERNELAPI
6581 VOID
6582 NTAPI
6583 FsRtlFreeFileLock(
6584 IN PFILE_LOCK FileLock);
6585
6586 NTKERNELAPI
6587 VOID
6588 NTAPI
6589 FsRtlInitializeFileLock(
6590 IN PFILE_LOCK FileLock,
6591 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
6592 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL);
6593
6594 NTKERNELAPI
6595 VOID
6596 NTAPI
6597 FsRtlUninitializeFileLock(
6598 IN PFILE_LOCK FileLock);
6599
6600 /*
6601 FsRtlProcessFileLock:
6602
6603 ret:
6604 -STATUS_INVALID_DEVICE_REQUEST
6605 -STATUS_RANGE_NOT_LOCKED from unlock routines.
6606 -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
6607 (redirected IoStatus->Status).
6608
6609 Internals:
6610 -switch ( Irp->CurrentStackLocation->MinorFunction )
6611 lock: return FsRtlPrivateLock;
6612 unlocksingle: return FsRtlFastUnlockSingle;
6613 unlockall: return FsRtlFastUnlockAll;
6614 unlockallbykey: return FsRtlFastUnlockAllByKey;
6615 default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
6616 return STATUS_INVALID_DEVICE_REQUEST;
6617
6618 -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
6619 -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
6620 */
6621 NTKERNELAPI
6622 NTSTATUS
6623 NTAPI
6624 FsRtlProcessFileLock(
6625 IN PFILE_LOCK FileLock,
6626 IN PIRP Irp,
6627 IN PVOID Context OPTIONAL);
6628
6629 /*
6630 FsRtlCheckLockForReadAccess:
6631
6632 All this really does is pick out the lock parameters from the irp (io stack
6633 location?), get IoGetRequestorProcess, and pass values on to
6634 FsRtlFastCheckLockForRead.
6635 */
6636 NTKERNELAPI
6637 BOOLEAN
6638 NTAPI
6639 FsRtlCheckLockForReadAccess(
6640 IN PFILE_LOCK FileLock,
6641 IN PIRP Irp);
6642
6643 /*
6644 FsRtlCheckLockForWriteAccess:
6645
6646 All this really does is pick out the lock parameters from the irp (io stack
6647 location?), get IoGetRequestorProcess, and pass values on to
6648 FsRtlFastCheckLockForWrite.
6649 */
6650 NTKERNELAPI
6651 BOOLEAN
6652 NTAPI
6653 FsRtlCheckLockForWriteAccess(
6654 IN PFILE_LOCK FileLock,
6655 IN PIRP Irp);
6656
6657 NTKERNELAPI
6658 BOOLEAN
6659 NTAPI
6660 FsRtlFastCheckLockForRead(
6661 IN PFILE_LOCK FileLock,
6662 IN PLARGE_INTEGER FileOffset,
6663 IN PLARGE_INTEGER Length,
6664 IN ULONG Key,
6665 IN PFILE_OBJECT FileObject,
6666 IN PVOID Process);
6667
6668 NTKERNELAPI
6669 BOOLEAN
6670 NTAPI
6671 FsRtlFastCheckLockForWrite(
6672 IN PFILE_LOCK FileLock,
6673 IN PLARGE_INTEGER FileOffset,
6674 IN PLARGE_INTEGER Length,
6675 IN ULONG Key,
6676 IN PFILE_OBJECT FileObject,
6677 IN PVOID Process);
6678
6679 /*
6680 FsRtlGetNextFileLock:
6681
6682 ret: NULL if no more locks
6683
6684 Internals:
6685 FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
6686 FileLock->LastReturnedLock as storage.
6687 LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
6688 list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
6689 calls with Restart = FALSE.
6690 */
6691 NTKERNELAPI
6692 PFILE_LOCK_INFO
6693 NTAPI
6694 FsRtlGetNextFileLock(
6695 IN PFILE_LOCK FileLock,
6696 IN BOOLEAN Restart);
6697
6698 NTKERNELAPI
6699 NTSTATUS
6700 NTAPI
6701 FsRtlFastUnlockSingle(
6702 IN PFILE_LOCK FileLock,
6703 IN PFILE_OBJECT FileObject,
6704 IN PLARGE_INTEGER FileOffset,
6705 IN PLARGE_INTEGER Length,
6706 IN PEPROCESS Process,
6707 IN ULONG Key,
6708 IN PVOID Context OPTIONAL,
6709 IN BOOLEAN AlreadySynchronized);
6710
6711 NTKERNELAPI
6712 NTSTATUS
6713 NTAPI
6714 FsRtlFastUnlockAll(
6715 IN PFILE_LOCK FileLock,
6716 IN PFILE_OBJECT FileObject,
6717 IN PEPROCESS Process,
6718 IN PVOID Context OPTIONAL);
6719
6720 NTKERNELAPI
6721 NTSTATUS
6722 NTAPI
6723 FsRtlFastUnlockAllByKey(
6724 IN PFILE_LOCK FileLock,
6725 IN PFILE_OBJECT FileObject,
6726 IN PEPROCESS Process,
6727 IN ULONG Key,
6728 IN PVOID Context OPTIONAL);
6729
6730 /*
6731 FsRtlPrivateLock:
6732
6733 ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
6734
6735 Internals:
6736 -Calls IoCompleteRequest if Irp
6737 -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
6738 */
6739 NTKERNELAPI
6740 BOOLEAN
6741 NTAPI
6742 FsRtlPrivateLock(
6743 IN PFILE_LOCK FileLock,
6744 IN PFILE_OBJECT FileObject,
6745 IN PLARGE_INTEGER FileOffset,
6746 IN PLARGE_INTEGER Length,
6747 IN PEPROCESS Process,
6748 IN ULONG Key,
6749 IN BOOLEAN FailImmediately,
6750 IN BOOLEAN ExclusiveLock,
6751 OUT PIO_STATUS_BLOCK IoStatus,
6752 IN PIRP Irp OPTIONAL,
6753 IN PVOID Context,
6754 IN BOOLEAN AlreadySynchronized);
6755
6756 NTKERNELAPI
6757 VOID
6758 NTAPI
6759 FsRtlInitializeTunnelCache(
6760 IN PTUNNEL Cache);
6761
6762 NTKERNELAPI
6763 VOID
6764 NTAPI
6765 FsRtlAddToTunnelCache(
6766 IN PTUNNEL Cache,
6767 IN ULONGLONG DirectoryKey,
6768 IN PUNICODE_STRING ShortName,
6769 IN PUNICODE_STRING LongName,
6770 IN BOOLEAN KeyByShortName,
6771 IN ULONG DataLength,
6772 IN PVOID Data);
6773
6774 NTKERNELAPI
6775 BOOLEAN
6776 NTAPI
6777 FsRtlFindInTunnelCache(
6778 IN PTUNNEL Cache,
6779 IN ULONGLONG DirectoryKey,
6780 IN PUNICODE_STRING Name,
6781 OUT PUNICODE_STRING ShortName,
6782 OUT PUNICODE_STRING LongName,
6783 IN OUT PULONG DataLength,
6784 OUT PVOID Data);
6785
6786 NTKERNELAPI
6787 VOID
6788 NTAPI
6789 FsRtlDeleteKeyFromTunnelCache(
6790 IN PTUNNEL Cache,
6791 IN ULONGLONG DirectoryKey);
6792
6793 NTKERNELAPI
6794 VOID
6795 NTAPI
6796 FsRtlDeleteTunnelCache(
6797 IN PTUNNEL Cache);
6798
6799 NTKERNELAPI
6800 VOID
6801 NTAPI
6802 FsRtlDissectDbcs(
6803 IN ANSI_STRING Name,
6804 OUT PANSI_STRING FirstPart,
6805 OUT PANSI_STRING RemainingPart);
6806
6807 NTKERNELAPI
6808 BOOLEAN
6809 NTAPI
6810 FsRtlDoesDbcsContainWildCards(
6811 IN PANSI_STRING Name);
6812
6813 NTKERNELAPI
6814 BOOLEAN
6815 NTAPI
6816 FsRtlIsDbcsInExpression(
6817 IN PANSI_STRING Expression,
6818 IN PANSI_STRING Name);
6819
6820 NTKERNELAPI
6821 BOOLEAN
6822 NTAPI
6823 FsRtlIsFatDbcsLegal(
6824 IN ANSI_STRING DbcsName,
6825 IN BOOLEAN WildCardsPermissible,
6826 IN BOOLEAN PathNamePermissible,
6827 IN BOOLEAN LeadingBackslashPermissible);
6828
6829 NTKERNELAPI
6830 BOOLEAN
6831 NTAPI
6832 FsRtlIsHpfsDbcsLegal(
6833 IN ANSI_STRING DbcsName,
6834 IN BOOLEAN WildCardsPermissible,
6835 IN BOOLEAN PathNamePermissible,
6836 IN BOOLEAN LeadingBackslashPermissible);
6837
6838 NTKERNELAPI
6839 NTSTATUS
6840 NTAPI
6841 FsRtlNormalizeNtstatus(
6842 IN NTSTATUS Exception,
6843 IN NTSTATUS GenericException);
6844
6845 NTKERNELAPI
6846 BOOLEAN
6847 NTAPI
6848 FsRtlIsNtstatusExpected(
6849 IN NTSTATUS Ntstatus);
6850
6851 NTKERNELAPI
6852 PERESOURCE
6853 NTAPI
6854 FsRtlAllocateResource(
6855 VOID);
6856
6857 NTKERNELAPI
6858 VOID
6859 NTAPI
6860 FsRtlInitializeLargeMcb(
6861 IN PLARGE_MCB Mcb,
6862 IN POOL_TYPE PoolType);
6863
6864 NTKERNELAPI
6865 VOID
6866 NTAPI
6867 FsRtlUninitializeLargeMcb(
6868 IN PLARGE_MCB Mcb);
6869
6870 NTKERNELAPI
6871 VOID
6872 NTAPI
6873 FsRtlResetLargeMcb(
6874 IN PLARGE_MCB Mcb,
6875 IN BOOLEAN SelfSynchronized);
6876
6877 NTKERNELAPI
6878 VOID
6879 NTAPI
6880 FsRtlTruncateLargeMcb(
6881 IN PLARGE_MCB Mcb,
6882 IN LONGLONG Vbn);
6883
6884 NTKERNELAPI
6885 BOOLEAN
6886 NTAPI
6887 FsRtlAddLargeMcbEntry(
6888 IN PLARGE_MCB Mcb,
6889 IN LONGLONG Vbn,
6890 IN LONGLONG Lbn,
6891 IN LONGLONG SectorCount);
6892
6893 NTKERNELAPI
6894 VOID
6895 NTAPI
6896 FsRtlRemoveLargeMcbEntry(
6897 IN PLARGE_MCB Mcb,
6898 IN LONGLONG Vbn,
6899 IN LONGLONG SectorCount);
6900
6901 NTKERNELAPI
6902 BOOLEAN
6903 NTAPI
6904 FsRtlLookupLargeMcbEntry(
6905 IN PLARGE_MCB Mcb,
6906 IN LONGLONG Vbn,
6907 OUT PLONGLONG Lbn OPTIONAL,
6908 OUT PLONGLONG SectorCountFromLbn OPTIONAL,
6909 OUT PLONGLONG StartingLbn OPTIONAL,
6910 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
6911 OUT PULONG Index OPTIONAL);
6912
6913 NTKERNELAPI
6914 BOOLEAN
6915 NTAPI
6916 FsRtlLookupLastLargeMcbEntry(
6917 IN PLARGE_MCB Mcb,
6918 OUT PLONGLONG Vbn,
6919 OUT PLONGLONG Lbn);
6920
6921 NTKERNELAPI
6922 BOOLEAN
6923 NTAPI
6924 FsRtlLookupLastLargeMcbEntryAndIndex(
6925 IN PLARGE_MCB OpaqueMcb,
6926 OUT PLONGLONG LargeVbn,
6927 OUT PLONGLONG LargeLbn,
6928 OUT PULONG Index);
6929
6930 NTKERNELAPI
6931 ULONG
6932 NTAPI
6933 FsRtlNumberOfRunsInLargeMcb(
6934 IN PLARGE_MCB Mcb);
6935
6936 NTKERNELAPI
6937 BOOLEAN
6938 NTAPI
6939 FsRtlGetNextLargeMcbEntry(
6940 IN PLARGE_MCB Mcb,
6941 IN ULONG RunIndex,
6942 OUT PLONGLONG Vbn,
6943 OUT PLONGLONG Lbn,
6944 OUT PLONGLONG SectorCount);
6945
6946 NTKERNELAPI
6947 BOOLEAN
6948 NTAPI
6949 FsRtlSplitLargeMcb(
6950 IN PLARGE_MCB Mcb,
6951 IN LONGLONG Vbn,
6952 IN LONGLONG Amount);
6953
6954 NTKERNELAPI
6955 VOID
6956 NTAPI
6957 FsRtlInitializeMcb(
6958 IN PMCB Mcb,
6959 IN POOL_TYPE PoolType);
6960
6961 NTKERNELAPI
6962 VOID
6963 NTAPI
6964 FsRtlUninitializeMcb(
6965 IN PMCB Mcb);
6966
6967 NTKERNELAPI
6968 VOID
6969 NTAPI
6970 FsRtlTruncateMcb(
6971 IN PMCB Mcb,
6972 IN VBN Vbn);
6973
6974 NTKERNELAPI
6975 BOOLEAN
6976 NTAPI
6977 FsRtlAddMcbEntry(
6978 IN PMCB Mcb,
6979 IN VBN Vbn,
6980 IN LBN Lbn,
6981 IN ULONG SectorCount);
6982
6983 NTKERNELAPI
6984 VOID
6985 NTAPI
6986 FsRtlRemoveMcbEntry(
6987 IN PMCB Mcb,
6988 IN VBN Vbn,
6989 IN ULONG SectorCount);
6990
6991 NTKERNELAPI
6992 BOOLEAN
6993 NTAPI
6994 FsRtlLookupMcbEntry(
6995 IN PMCB Mcb,
6996 IN VBN Vbn,
6997 OUT PLBN Lbn,
6998 OUT PULONG SectorCount OPTIONAL,
6999 OUT PULONG Index);
7000
7001 NTKERNELAPI
7002 BOOLEAN
7003 NTAPI
7004 FsRtlLookupLastMcbEntry(
7005 IN PMCB Mcb,
7006 OUT PVBN Vbn,
7007 OUT PLBN Lbn);
7008
7009 NTKERNELAPI
7010 ULONG
7011 NTAPI
7012 FsRtlNumberOfRunsInMcb(
7013 IN PMCB Mcb);
7014
7015 NTKERNELAPI
7016 BOOLEAN
7017 NTAPI
7018 FsRtlGetNextMcbEntry(
7019 IN PMCB Mcb,
7020 IN ULONG RunIndex,
7021 OUT PVBN Vbn,
7022 OUT PLBN Lbn,
7023 OUT PULONG SectorCount);
7024
7025 NTKERNELAPI
7026 NTSTATUS
7027 NTAPI
7028 FsRtlBalanceReads(
7029 IN PDEVICE_OBJECT TargetDevice);
7030
7031 NTKERNELAPI
7032 VOID
7033 NTAPI
7034 FsRtlInitializeOplock(
7035 IN OUT POPLOCK Oplock);
7036
7037 NTKERNELAPI
7038 VOID
7039 NTAPI
7040 FsRtlUninitializeOplock(
7041 IN OUT POPLOCK Oplock);
7042
7043 NTKERNELAPI
7044 NTSTATUS
7045 NTAPI
7046 FsRtlOplockFsctrl(
7047 IN POPLOCK Oplock,
7048 IN PIRP Irp,
7049 IN ULONG OpenCount);
7050
7051 NTKERNELAPI
7052 NTSTATUS
7053 NTAPI
7054 FsRtlCheckOplock(
7055 IN POPLOCK Oplock,
7056 IN PIRP Irp,
7057 IN PVOID Context,
7058 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
7059 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
7060
7061 NTKERNELAPI
7062 BOOLEAN
7063 NTAPI
7064 FsRtlOplockIsFastIoPossible(
7065 IN POPLOCK Oplock);
7066
7067 NTKERNELAPI
7068 BOOLEAN
7069 NTAPI
7070 FsRtlCurrentBatchOplock(
7071 IN POPLOCK Oplock);
7072
7073 NTKERNELAPI
7074 NTSTATUS
7075 NTAPI
7076 FsRtlNotifyVolumeEvent(
7077 IN PFILE_OBJECT FileObject,
7078 IN ULONG EventCode);
7079
7080 NTKERNELAPI
7081 VOID
7082 NTAPI
7083 FsRtlNotifyInitializeSync(
7084 IN PNOTIFY_SYNC *NotifySync);
7085
7086 NTKERNELAPI
7087 VOID
7088 NTAPI
7089 FsRtlNotifyUninitializeSync(
7090 IN PNOTIFY_SYNC *NotifySync);
7091
7092 NTKERNELAPI
7093 VOID
7094 NTAPI
7095 FsRtlNotifyFullChangeDirectory(
7096 IN PNOTIFY_SYNC NotifySync,
7097 IN PLIST_ENTRY NotifyList,
7098 IN PVOID FsContext,
7099 IN PSTRING FullDirectoryName,
7100 IN BOOLEAN WatchTree,
7101 IN BOOLEAN IgnoreBuffer,
7102 IN ULONG CompletionFilter,
7103 IN PIRP NotifyIrp OPTIONAL,
7104 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
7105 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL);
7106
7107 NTKERNELAPI
7108 VOID
7109 NTAPI
7110 FsRtlNotifyFilterReportChange(
7111 IN PNOTIFY_SYNC NotifySync,
7112 IN PLIST_ENTRY NotifyList,
7113 IN PSTRING FullTargetName,
7114 IN USHORT TargetNameOffset,
7115 IN PSTRING StreamName OPTIONAL,
7116 IN PSTRING NormalizedParentName OPTIONAL,
7117 IN ULONG FilterMatch,
7118 IN ULONG Action,
7119 IN PVOID TargetContext OPTIONAL,
7120 IN PVOID FilterContext OPTIONAL);
7121
7122 NTKERNELAPI
7123 VOID
7124 NTAPI
7125 FsRtlNotifyFullReportChange(
7126 IN PNOTIFY_SYNC NotifySync,
7127 IN PLIST_ENTRY NotifyList,
7128 IN PSTRING FullTargetName,
7129 IN USHORT TargetNameOffset,
7130 IN PSTRING StreamName OPTIONAL,
7131 IN PSTRING NormalizedParentName OPTIONAL,
7132 IN ULONG FilterMatch,
7133 IN ULONG Action,
7134 IN PVOID TargetContext OPTIONAL);
7135
7136 NTKERNELAPI
7137 VOID
7138 NTAPI
7139 FsRtlNotifyCleanup(
7140 IN PNOTIFY_SYNC NotifySync,
7141 IN PLIST_ENTRY NotifyList,
7142 IN PVOID FsContext);
7143
7144 NTKERNELAPI
7145 VOID
7146 NTAPI
7147 FsRtlDissectName(
7148 IN UNICODE_STRING Name,
7149 OUT PUNICODE_STRING FirstPart,
7150 OUT PUNICODE_STRING RemainingPart);
7151
7152 NTKERNELAPI
7153 BOOLEAN
7154 NTAPI
7155 FsRtlDoesNameContainWildCards(
7156 IN PUNICODE_STRING Name);
7157
7158 NTKERNELAPI
7159 BOOLEAN
7160 NTAPI
7161 FsRtlAreNamesEqual(
7162 IN PCUNICODE_STRING Name1,
7163 IN PCUNICODE_STRING Name2,
7164 IN BOOLEAN IgnoreCase,
7165 IN PCWCH UpcaseTable OPTIONAL);
7166
7167 NTKERNELAPI
7168 BOOLEAN
7169 NTAPI
7170 FsRtlIsNameInExpression(
7171 IN PUNICODE_STRING Expression,
7172 IN PUNICODE_STRING Name,
7173 IN BOOLEAN IgnoreCase,
7174 IN PWCHAR UpcaseTable OPTIONAL);
7175
7176 NTKERNELAPI
7177 VOID
7178 NTAPI
7179 FsRtlPostPagingFileStackOverflow(
7180 IN PVOID Context,
7181 IN PKEVENT Event,
7182 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
7183
7184 NTKERNELAPI
7185 VOID
7186 NTAPI
7187 FsRtlPostStackOverflow (
7188 IN PVOID Context,
7189 IN PKEVENT Event,
7190 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
7191
7192 NTKERNELAPI
7193 NTSTATUS
7194 NTAPI
7195 FsRtlRegisterUncProvider(
7196 OUT PHANDLE MupHandle,
7197 IN PUNICODE_STRING RedirectorDeviceName,
7198 IN BOOLEAN MailslotsSupported);
7199
7200 NTKERNELAPI
7201 VOID
7202 NTAPI
7203 FsRtlDeregisterUncProvider(
7204 IN HANDLE Handle);
7205
7206 NTKERNELAPI
7207 VOID
7208 NTAPI
7209 FsRtlTeardownPerStreamContexts(
7210 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
7211
7212 NTKERNELAPI
7213 NTSTATUS
7214 NTAPI
7215 FsRtlCreateSectionForDataScan(
7216 OUT PHANDLE SectionHandle,
7217 OUT PVOID *SectionObject,
7218 OUT PLARGE_INTEGER SectionFileSize OPTIONAL,
7219 IN PFILE_OBJECT FileObject,
7220 IN ACCESS_MASK DesiredAccess,
7221 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
7222 IN PLARGE_INTEGER MaximumSize OPTIONAL,
7223 IN ULONG SectionPageProtection,
7224 IN ULONG AllocationAttributes,
7225 IN ULONG Flags);
7226
7227 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
7228
7229 #if (NTDDI_VERSION >= NTDDI_WINXP)
7230
7231 NTKERNELAPI
7232 VOID
7233 NTAPI
7234 FsRtlNotifyFilterChangeDirectory(
7235 IN PNOTIFY_SYNC NotifySync,
7236 IN PLIST_ENTRY NotifyList,
7237 IN PVOID FsContext,
7238 IN PSTRING FullDirectoryName,
7239 IN BOOLEAN WatchTree,
7240 IN BOOLEAN IgnoreBuffer,
7241 IN ULONG CompletionFilter,
7242 IN PIRP NotifyIrp OPTIONAL,
7243 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
7244 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL,
7245 IN PFILTER_REPORT_CHANGE FilterCallback OPTIONAL);
7246
7247 NTKERNELAPI
7248 NTSTATUS
7249 NTAPI
7250 FsRtlInsertPerStreamContext(
7251 IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext,
7252 IN PFSRTL_PER_STREAM_CONTEXT Ptr);
7253
7254 NTKERNELAPI
7255 PFSRTL_PER_STREAM_CONTEXT
7256 NTAPI
7257 FsRtlLookupPerStreamContextInternal(
7258 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
7259 IN PVOID OwnerId OPTIONAL,
7260 IN PVOID InstanceId OPTIONAL);
7261
7262 NTKERNELAPI
7263 PFSRTL_PER_STREAM_CONTEXT
7264 NTAPI
7265 FsRtlRemovePerStreamContext(
7266 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
7267 IN PVOID OwnerId OPTIONAL,
7268 IN PVOID InstanceId OPTIONAL);
7269
7270 NTKERNELAPI
7271 VOID
7272 NTAPI
7273 FsRtlIncrementCcFastReadNotPossible(
7274 VOID);
7275
7276 NTKERNELAPI
7277 VOID
7278 NTAPI
7279 FsRtlIncrementCcFastReadWait(
7280 VOID);
7281
7282 NTKERNELAPI
7283 VOID
7284 NTAPI
7285 FsRtlIncrementCcFastReadNoWait(
7286 VOID);
7287
7288 NTKERNELAPI
7289 VOID
7290 NTAPI
7291 FsRtlIncrementCcFastReadResourceMiss(
7292 VOID);
7293
7294 NTKERNELAPI
7295 LOGICAL
7296 NTAPI
7297 FsRtlIsPagingFile(
7298 IN PFILE_OBJECT FileObject);
7299
7300 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
7301
7302 #if (NTDDI_VERSION >= NTDDI_WS03)
7303
7304 NTKERNELAPI
7305 VOID
7306 NTAPI
7307 FsRtlInitializeBaseMcb(
7308 IN PBASE_MCB Mcb,
7309 IN POOL_TYPE PoolType);
7310
7311 NTKERNELAPI
7312 VOID
7313 NTAPI
7314 FsRtlUninitializeBaseMcb(
7315 IN PBASE_MCB Mcb);
7316
7317 NTKERNELAPI
7318 VOID
7319 NTAPI
7320 FsRtlResetBaseMcb(
7321 IN PBASE_MCB Mcb);
7322
7323 NTKERNELAPI
7324 VOID
7325 NTAPI
7326 FsRtlTruncateBaseMcb(
7327 IN PBASE_MCB Mcb,
7328 IN LONGLONG Vbn);
7329
7330 NTKERNELAPI
7331 BOOLEAN
7332 NTAPI
7333 FsRtlAddBaseMcbEntry(
7334 IN PBASE_MCB Mcb,
7335 IN LONGLONG Vbn,
7336 IN LONGLONG Lbn,
7337 IN LONGLONG SectorCount);
7338
7339 NTKERNELAPI
7340 BOOLEAN
7341 NTAPI
7342 FsRtlRemoveBaseMcbEntry(
7343 IN PBASE_MCB Mcb,
7344 IN LONGLONG Vbn,
7345 IN LONGLONG SectorCount);
7346
7347 NTKERNELAPI
7348 BOOLEAN
7349 NTAPI
7350 FsRtlLookupBaseMcbEntry(
7351 IN PBASE_MCB Mcb,
7352 IN LONGLONG Vbn,
7353 OUT PLONGLONG Lbn OPTIONAL,
7354 OUT PLONGLONG SectorCountFromLbn OPTIONAL,
7355 OUT PLONGLONG StartingLbn OPTIONAL,
7356 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
7357 OUT PULONG Index OPTIONAL);
7358
7359 NTKERNELAPI
7360 BOOLEAN
7361 NTAPI
7362 FsRtlLookupLastBaseMcbEntry(
7363 IN PBASE_MCB Mcb,
7364 OUT PLONGLONG Vbn,
7365 OUT PLONGLONG Lbn);
7366
7367 NTKERNELAPI
7368 BOOLEAN
7369 NTAPI
7370 FsRtlLookupLastBaseMcbEntryAndIndex(
7371 IN PBASE_MCB OpaqueMcb,
7372 IN OUT PLONGLONG LargeVbn,
7373 IN OUT PLONGLONG LargeLbn,
7374 IN OUT PULONG Index);
7375
7376 NTKERNELAPI
7377 ULONG
7378 NTAPI
7379 FsRtlNumberOfRunsInBaseMcb(
7380 IN PBASE_MCB Mcb);
7381
7382 NTKERNELAPI
7383 BOOLEAN
7384 NTAPI
7385 FsRtlGetNextBaseMcbEntry(
7386 IN PBASE_MCB Mcb,
7387 IN ULONG RunIndex,
7388 OUT PLONGLONG Vbn,
7389 OUT PLONGLONG Lbn,
7390 OUT PLONGLONG SectorCount);
7391
7392 NTKERNELAPI
7393 BOOLEAN
7394 NTAPI
7395 FsRtlSplitBaseMcb(
7396 IN PBASE_MCB Mcb,
7397 IN LONGLONG Vbn,
7398 IN LONGLONG Amount);
7399
7400 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
7401
7402 #if (NTDDI_VERSION >= NTDDI_VISTA)
7403
7404 BOOLEAN
7405 NTAPI
7406 FsRtlInitializeBaseMcbEx(
7407 IN PBASE_MCB Mcb,
7408 IN POOL_TYPE PoolType,
7409 IN USHORT Flags);
7410
7411 NTSTATUS
7412 NTAPI
7413 FsRtlAddBaseMcbEntryEx(
7414 IN PBASE_MCB Mcb,
7415 IN LONGLONG Vbn,
7416 IN LONGLONG Lbn,
7417 IN LONGLONG SectorCount);
7418
7419 NTKERNELAPI
7420 BOOLEAN
7421 NTAPI
7422 FsRtlCurrentOplock(
7423 IN POPLOCK Oplock);
7424
7425 NTKERNELAPI
7426 NTSTATUS
7427 NTAPI
7428 FsRtlOplockBreakToNone(
7429 IN OUT POPLOCK Oplock,
7430 IN PIO_STACK_LOCATION IrpSp OPTIONAL,
7431 IN PIRP Irp,
7432 IN PVOID Context OPTIONAL,
7433 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
7434 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
7435
7436 NTKERNELAPI
7437 NTSTATUS
7438 NTAPI
7439 FsRtlNotifyVolumeEventEx(
7440 IN PFILE_OBJECT FileObject,
7441 IN ULONG EventCode,
7442 IN PTARGET_DEVICE_CUSTOM_NOTIFICATION Event);
7443
7444 NTKERNELAPI
7445 VOID
7446 NTAPI
7447 FsRtlNotifyCleanupAll(
7448 IN PNOTIFY_SYNC NotifySync,
7449 IN PLIST_ENTRY NotifyList);
7450
7451 NTSTATUS
7452 NTAPI
7453 FsRtlRegisterUncProviderEx(
7454 OUT PHANDLE MupHandle,
7455 IN PUNICODE_STRING RedirDevName,
7456 IN PDEVICE_OBJECT DeviceObject,
7457 IN ULONG Flags);
7458
7459 NTKERNELAPI
7460 NTSTATUS
7461 NTAPI
7462 FsRtlCancellableWaitForSingleObject(
7463 IN PVOID Object,
7464 IN PLARGE_INTEGER Timeout OPTIONAL,
7465 IN PIRP Irp OPTIONAL);
7466
7467 NTKERNELAPI
7468 NTSTATUS
7469 NTAPI
7470 FsRtlCancellableWaitForMultipleObjects(
7471 IN ULONG Count,
7472 IN PVOID ObjectArray[],
7473 IN WAIT_TYPE WaitType,
7474 IN PLARGE_INTEGER Timeout OPTIONAL,
7475 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL,
7476 IN PIRP Irp OPTIONAL);
7477
7478 NTKERNELAPI
7479 NTSTATUS
7480 NTAPI
7481 FsRtlMupGetProviderInfoFromFileObject(
7482 IN PFILE_OBJECT pFileObject,
7483 IN ULONG Level,
7484 OUT PVOID pBuffer,
7485 IN OUT PULONG pBufferSize);
7486
7487 NTKERNELAPI
7488 NTSTATUS
7489 NTAPI
7490 FsRtlMupGetProviderIdFromName(
7491 IN PUNICODE_STRING pProviderName,
7492 OUT PULONG32 pProviderId);
7493
7494 NTKERNELAPI
7495 VOID
7496 NTAPI
7497 FsRtlIncrementCcFastMdlReadWait(
7498 VOID);
7499
7500 NTKERNELAPI
7501 NTSTATUS
7502 NTAPI
7503 FsRtlValidateReparsePointBuffer(
7504 IN ULONG BufferLength,
7505 IN PREPARSE_DATA_BUFFER ReparseBuffer);
7506
7507 NTKERNELAPI
7508 NTSTATUS
7509 NTAPI
7510 FsRtlRemoveDotsFromPath(
7511 IN OUT PWSTR OriginalString,
7512 IN USHORT PathLength,
7513 OUT USHORT *NewLength);
7514
7515 NTKERNELAPI
7516 NTSTATUS
7517 NTAPI
7518 FsRtlAllocateExtraCreateParameterList(
7519 IN FSRTL_ALLOCATE_ECPLIST_FLAGS Flags,
7520 OUT PECP_LIST *EcpList);
7521
7522 NTKERNELAPI
7523 VOID
7524 NTAPI
7525 FsRtlFreeExtraCreateParameterList(
7526 IN PECP_LIST EcpList);
7527
7528 NTKERNELAPI
7529 NTSTATUS
7530 NTAPI
7531 FsRtlAllocateExtraCreateParameter(
7532 IN LPCGUID EcpType,
7533 IN ULONG SizeOfContext,
7534 IN FSRTL_ALLOCATE_ECP_FLAGS Flags,
7535 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
7536 IN ULONG PoolTag,
7537 OUT PVOID *EcpContext);
7538
7539 NTKERNELAPI
7540 VOID
7541 NTAPI
7542 FsRtlFreeExtraCreateParameter(
7543 IN PVOID EcpContext);
7544
7545 NTKERNELAPI
7546 VOID
7547 NTAPI
7548 FsRtlInitExtraCreateParameterLookasideList(
7549 IN OUT PVOID Lookaside,
7550 IN FSRTL_ECP_LOOKASIDE_FLAGS Flags,
7551 IN SIZE_T Size,
7552 IN ULONG Tag);
7553
7554 VOID
7555 NTAPI
7556 FsRtlDeleteExtraCreateParameterLookasideList(
7557 IN OUT PVOID Lookaside,
7558 IN FSRTL_ECP_LOOKASIDE_FLAGS Flags);
7559
7560 NTKERNELAPI
7561 NTSTATUS
7562 NTAPI
7563 FsRtlAllocateExtraCreateParameterFromLookasideList(
7564 IN LPCGUID EcpType,
7565 IN ULONG SizeOfContext,
7566 IN FSRTL_ALLOCATE_ECP_FLAGS Flags,
7567 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
7568 IN OUT PVOID LookasideList,
7569 OUT PVOID *EcpContext);
7570
7571 NTKERNELAPI
7572 NTSTATUS
7573 NTAPI
7574 FsRtlInsertExtraCreateParameter(
7575 IN OUT PECP_LIST EcpList,
7576 IN OUT PVOID EcpContext);
7577
7578 NTKERNELAPI
7579 NTSTATUS
7580 NTAPI
7581 FsRtlFindExtraCreateParameter(
7582 IN PECP_LIST EcpList,
7583 IN LPCGUID EcpType,
7584 OUT PVOID *EcpContext OPTIONAL,
7585 OUT ULONG *EcpContextSize OPTIONAL);
7586
7587 NTKERNELAPI
7588 NTSTATUS
7589 NTAPI
7590 FsRtlRemoveExtraCreateParameter(
7591 IN OUT PECP_LIST EcpList,
7592 IN LPCGUID EcpType,
7593 OUT PVOID *EcpContext,
7594 OUT ULONG *EcpContextSize OPTIONAL);
7595
7596 NTKERNELAPI
7597 NTSTATUS
7598 NTAPI
7599 FsRtlGetEcpListFromIrp(
7600 IN PIRP Irp,
7601 OUT PECP_LIST *EcpList OPTIONAL);
7602
7603 NTKERNELAPI
7604 NTSTATUS
7605 NTAPI
7606 FsRtlSetEcpListIntoIrp(
7607 IN OUT PIRP Irp,
7608 IN PECP_LIST EcpList);
7609
7610 NTKERNELAPI
7611 NTSTATUS
7612 NTAPI
7613 FsRtlGetNextExtraCreateParameter(
7614 IN PECP_LIST EcpList,
7615 IN PVOID CurrentEcpContext OPTIONAL,
7616 OUT LPGUID NextEcpType OPTIONAL,
7617 OUT PVOID *NextEcpContext OPTIONAL,
7618 OUT ULONG *NextEcpContextSize OPTIONAL);
7619
7620 NTKERNELAPI
7621 VOID
7622 NTAPI
7623 FsRtlAcknowledgeEcp(
7624 IN PVOID EcpContext);
7625
7626 NTKERNELAPI
7627 BOOLEAN
7628 NTAPI
7629 FsRtlIsEcpAcknowledged(
7630 IN PVOID EcpContext);
7631
7632 NTKERNELAPI
7633 BOOLEAN
7634 NTAPI
7635 FsRtlIsEcpFromUserMode(
7636 IN PVOID EcpContext);
7637
7638 NTKERNELAPI
7639 NTSTATUS
7640 NTAPI
7641 FsRtlChangeBackingFileObject(
7642 IN PFILE_OBJECT CurrentFileObject OPTIONAL,
7643 IN PFILE_OBJECT NewFileObject,
7644 IN FSRTL_CHANGE_BACKING_TYPE ChangeBackingType,
7645 IN ULONG Flags);
7646
7647 NTKERNELAPI
7648 NTSTATUS
7649 NTAPI
7650 FsRtlLogCcFlushError(
7651 IN PUNICODE_STRING FileName,
7652 IN PDEVICE_OBJECT DeviceObject,
7653 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
7654 IN NTSTATUS FlushError,
7655 IN ULONG Flags);
7656
7657 NTKERNELAPI
7658 BOOLEAN
7659 NTAPI
7660 FsRtlAreVolumeStartupApplicationsComplete(
7661 VOID);
7662
7663 NTKERNELAPI
7664 ULONG
7665 NTAPI
7666 FsRtlQueryMaximumVirtualDiskNestingLevel(
7667 VOID);
7668
7669 NTKERNELAPI
7670 NTSTATUS
7671 NTAPI
7672 FsRtlGetVirtualDiskNestingLevel(
7673 IN PDEVICE_OBJECT DeviceObject,
7674 OUT PULONG NestingLevel,
7675 OUT PULONG NestingFlags OPTIONAL);
7676
7677 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
7678
7679 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
7680 NTKERNELAPI
7681 NTSTATUS
7682 NTAPI
7683 FsRtlCheckOplockEx(
7684 IN POPLOCK Oplock,
7685 IN PIRP Irp,
7686 IN ULONG Flags,
7687 IN PVOID Context OPTIONAL,
7688 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
7689 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
7690
7691 #endif
7692
7693 #if (NTDDI_VERSION >= NTDDI_WIN7)
7694
7695 NTKERNELAPI
7696 BOOLEAN
7697 NTAPI
7698 FsRtlAreThereCurrentOrInProgressFileLocks(
7699 IN PFILE_LOCK FileLock);
7700
7701 NTKERNELAPI
7702 BOOLEAN
7703 NTAPI
7704 FsRtlOplockIsSharedRequest(
7705 IN PIRP Irp);
7706
7707 NTKERNELAPI
7708 NTSTATUS
7709 NTAPI
7710 FsRtlOplockBreakH(
7711 IN POPLOCK Oplock,
7712 IN PIRP Irp,
7713 IN ULONG Flags,
7714 IN PVOID Context OPTIONAL,
7715 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
7716 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
7717
7718 NTKERNELAPI
7719 BOOLEAN
7720 NTAPI
7721 FsRtlCurrentOplockH(
7722 IN POPLOCK Oplock);
7723
7724 NTKERNELAPI
7725 NTSTATUS
7726 NTAPI
7727 FsRtlOplockBreakToNoneEx(
7728 IN OUT POPLOCK Oplock,
7729 IN PIRP Irp,
7730 IN ULONG Flags,
7731 IN PVOID Context OPTIONAL,
7732 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
7733 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
7734
7735 NTKERNELAPI
7736 NTSTATUS
7737 NTAPI
7738 FsRtlOplockFsctrlEx(
7739 IN POPLOCK Oplock,
7740 IN PIRP Irp,
7741 IN ULONG OpenCount,
7742 IN ULONG Flags);
7743
7744 NTKERNELAPI
7745 BOOLEAN
7746 NTAPI
7747 FsRtlOplockKeysEqual(
7748 IN PFILE_OBJECT Fo1 OPTIONAL,
7749 IN PFILE_OBJECT Fo2 OPTIONAL);
7750
7751 NTKERNELAPI
7752 NTSTATUS
7753 NTAPI
7754 FsRtlInitializeExtraCreateParameterList(
7755 IN OUT PECP_LIST EcpList);
7756
7757 NTKERNELAPI
7758 VOID
7759 NTAPI
7760 FsRtlInitializeExtraCreateParameter(
7761 IN PECP_HEADER Ecp,
7762 IN ULONG EcpFlags,
7763 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
7764 IN ULONG TotalSize,
7765 IN LPCGUID EcpType,
7766 IN PVOID ListAllocatedFrom OPTIONAL);
7767
7768 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
7769
7770 NTKERNELAPI
7771 NTSTATUS
7772 NTAPI
7773 FsRtlInsertPerFileContext(
7774 IN PVOID* PerFileContextPointer,
7775 IN PFSRTL_PER_FILE_CONTEXT Ptr);
7776
7777 NTKERNELAPI
7778 PFSRTL_PER_FILE_CONTEXT
7779 NTAPI
7780 FsRtlLookupPerFileContext(
7781 IN PVOID* PerFileContextPointer,
7782 IN PVOID OwnerId OPTIONAL,
7783 IN PVOID InstanceId OPTIONAL);
7784
7785 NTKERNELAPI
7786 PFSRTL_PER_FILE_CONTEXT
7787 NTAPI
7788 FsRtlRemovePerFileContext(
7789 IN PVOID* PerFileContextPointer,
7790 IN PVOID OwnerId OPTIONAL,
7791 IN PVOID InstanceId OPTIONAL);
7792
7793 NTKERNELAPI
7794 VOID
7795 NTAPI
7796 FsRtlTeardownPerFileContexts(
7797 IN PVOID* PerFileContextPointer);
7798
7799 NTKERNELAPI
7800 NTSTATUS
7801 NTAPI
7802 FsRtlInsertPerFileObjectContext(
7803 IN PFILE_OBJECT FileObject,
7804 IN PFSRTL_PER_FILEOBJECT_CONTEXT Ptr);
7805
7806 NTKERNELAPI
7807 PFSRTL_PER_FILEOBJECT_CONTEXT
7808 NTAPI
7809 FsRtlLookupPerFileObjectContext(
7810 IN PFILE_OBJECT FileObject,
7811 IN PVOID OwnerId OPTIONAL,
7812 IN PVOID InstanceId OPTIONAL);
7813
7814 NTKERNELAPI
7815 PFSRTL_PER_FILEOBJECT_CONTEXT
7816 NTAPI
7817 FsRtlRemovePerFileObjectContext(
7818 IN PFILE_OBJECT FileObject,
7819 IN PVOID OwnerId OPTIONAL,
7820 IN PVOID InstanceId OPTIONAL);
7821
7822 #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
7823 FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
7824 )
7825
7826 #define FsRtlAreThereCurrentFileLocks(FL) ( \
7827 ((FL)->FastIoIsQuestionable) \
7828 )
7829
7830 #define FsRtlIncrementLockRequestsInProgress(FL) { \
7831 ASSERT( (FL)->LockRequestsInProgress >= 0 ); \
7832 (void) \
7833 (InterlockedIncrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
7834 }
7835
7836 #define FsRtlDecrementLockRequestsInProgress(FL) { \
7837 ASSERT( (FL)->LockRequestsInProgress > 0 ); \
7838 (void) \
7839 (InterlockedDecrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
7840 }
7841
7842 /* GCC compatible definition, MS one is retarded */
7843 extern NTKERNELAPI const UCHAR * const FsRtlLegalAnsiCharacterArray;
7844 #define LEGAL_ANSI_CHARACTER_ARRAY FsRtlLegalAnsiCharacterArray
7845
7846 #define FsRtlIsAnsiCharacterWild(C) ( \
7847 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \
7848 )
7849
7850 #define FsRtlIsAnsiCharacterLegalFat(C, WILD) ( \
7851 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_FAT_LEGAL) | \
7852 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7853 )
7854
7855 #define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) ( \
7856 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) | \
7857 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7858 )
7859
7860 #define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) ( \
7861 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) | \
7862 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7863 )
7864
7865 #define FsRtlIsAnsiCharacterLegalNtfsStream(C,WILD_OK) ( \
7866 FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_NTFS_STREAM_LEGAL) \
7867 )
7868
7869 #define FsRtlIsAnsiCharacterLegal(C,FLAGS) ( \
7870 FsRtlTestAnsiCharacter((C), TRUE, FALSE, (FLAGS)) \
7871 )
7872
7873 #define FsRtlTestAnsiCharacter(C, DEFAULT_RET, WILD_OK, FLAGS) ( \
7874 ((SCHAR)(C) < 0) ? DEFAULT_RET : \
7875 FlagOn( LEGAL_ANSI_CHARACTER_ARRAY[(C)], \
7876 (FLAGS) | \
7877 ((WILD_OK) ? FSRTL_WILD_CHARACTER : 0) ) \
7878 )
7879
7880 #define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \
7881 (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \
7882 (NLS_MB_CODE_PAGE_TAG && \
7883 (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \
7884 )
7885
7886 #define FsRtlIsUnicodeCharacterWild(C) ( \
7887 (((C) >= 0x40) ? \
7888 FALSE : \
7889 FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER )) \
7890 )
7891
7892 #define FsRtlInitPerFileContext( _fc, _owner, _inst, _cb) \
7893 ((_fc)->OwnerId = (_owner), \
7894 (_fc)->InstanceId = (_inst), \
7895 (_fc)->FreeCallback = (_cb))
7896
7897 #define FsRtlGetPerFileContextPointer(_fo) \
7898 (FsRtlSupportsPerFileContexts(_fo) ? \
7899 FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer : \
7900 NULL)
7901
7902 #define FsRtlSupportsPerFileContexts(_fo) \
7903 ((FsRtlGetPerStreamContextPointer(_fo) != NULL) && \
7904 (FsRtlGetPerStreamContextPointer(_fo)->Version >= FSRTL_FCB_HEADER_V1) && \
7905 (FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer != NULL))
7906
7907 #define FsRtlSetupAdvancedHeaderEx( _advhdr, _fmutx, _fctxptr ) \
7908 { \
7909 FsRtlSetupAdvancedHeader( _advhdr, _fmutx ); \
7910 if ((_fctxptr) != NULL) { \
7911 (_advhdr)->FileContextSupportPointer = (_fctxptr); \
7912 } \
7913 }
7914
7915 #define FsRtlGetPerStreamContextPointer(FO) ( \
7916 (PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext \
7917 )
7918
7919 #define FsRtlInitPerStreamContext(PSC, O, I, FC) ( \
7920 (PSC)->OwnerId = (O), \
7921 (PSC)->InstanceId = (I), \
7922 (PSC)->FreeCallback = (FC) \
7923 )
7924
7925 #define FsRtlSupportsPerStreamContexts(FO) ( \
7926 (BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) && \
7927 FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \
7928 FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS)) \
7929 )
7930
7931 #define FsRtlLookupPerStreamContext(_sc, _oid, _iid) \
7932 (((NULL != (_sc)) && \
7933 FlagOn((_sc)->Flags2,FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS) && \
7934 !IsListEmpty(&(_sc)->FilterContexts)) ? \
7935 FsRtlLookupPerStreamContextInternal((_sc), (_oid), (_iid)) : \
7936 NULL)
7937
7938 VOID
7939 FORCEINLINE
7940 NTAPI
7941 FsRtlSetupAdvancedHeader(
7942 IN PVOID AdvHdr,
7943 IN PFAST_MUTEX FMutex )
7944 {
7945 PFSRTL_ADVANCED_FCB_HEADER localAdvHdr = (PFSRTL_ADVANCED_FCB_HEADER)AdvHdr;
7946
7947 localAdvHdr->Flags |= FSRTL_FLAG_ADVANCED_HEADER;
7948 localAdvHdr->Flags2 |= FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS;
7949 #if (NTDDI_VERSION >= NTDDI_VISTA)
7950 localAdvHdr->Version = FSRTL_FCB_HEADER_V1;
7951 #else
7952 localAdvHdr->Version = FSRTL_FCB_HEADER_V0;
7953 #endif
7954 InitializeListHead( &localAdvHdr->FilterContexts );
7955 if (FMutex != NULL) {
7956 localAdvHdr->FastMutex = FMutex;
7957 }
7958 #if (NTDDI_VERSION >= NTDDI_VISTA)
7959 *((PULONG_PTR)(&localAdvHdr->PushLock)) = 0;
7960 localAdvHdr->FileContextSupportPointer = NULL;
7961 #endif
7962 }
7963
7964 #define FsRtlInitPerFileObjectContext(_fc, _owner, _inst) \
7965 ((_fc)->OwnerId = (_owner), (_fc)->InstanceId = (_inst))
7966
7967 #define FsRtlCompleteRequest(IRP,STATUS) { \
7968 (IRP)->IoStatus.Status = (STATUS); \
7969 IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
7970 }
7971 /* Common Cache Types */
7972
7973 #define VACB_MAPPING_GRANULARITY (0x40000)
7974 #define VACB_OFFSET_SHIFT (18)
7975
7976 typedef struct _PUBLIC_BCB {
7977 CSHORT NodeTypeCode;
7978 CSHORT NodeByteSize;
7979 ULONG MappedLength;
7980 LARGE_INTEGER MappedFileOffset;
7981 } PUBLIC_BCB, *PPUBLIC_BCB;
7982
7983 typedef struct _CC_FILE_SIZES {
7984 LARGE_INTEGER AllocationSize;
7985 LARGE_INTEGER FileSize;
7986 LARGE_INTEGER ValidDataLength;
7987 } CC_FILE_SIZES, *PCC_FILE_SIZES;
7988
7989 typedef BOOLEAN
7990 (NTAPI *PACQUIRE_FOR_LAZY_WRITE) (
7991 IN PVOID Context,
7992 IN BOOLEAN Wait);
7993
7994 typedef VOID
7995 (NTAPI *PRELEASE_FROM_LAZY_WRITE) (
7996 IN PVOID Context);
7997
7998 typedef BOOLEAN
7999 (NTAPI *PACQUIRE_FOR_READ_AHEAD) (
8000 IN PVOID Context,
8001 IN BOOLEAN Wait);
8002
8003 typedef VOID
8004 (NTAPI *PRELEASE_FROM_READ_AHEAD) (
8005 IN PVOID Context);
8006
8007 typedef struct _CACHE_MANAGER_CALLBACKS {
8008 PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite;
8009 PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite;
8010 PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead;
8011 PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead;
8012 } CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
8013
8014 typedef struct _CACHE_UNINITIALIZE_EVENT {
8015 struct _CACHE_UNINITIALIZE_EVENT *Next;
8016 KEVENT Event;
8017 } CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT;
8018
8019 typedef VOID
8020 (NTAPI *PDIRTY_PAGE_ROUTINE) (
8021 IN PFILE_OBJECT FileObject,
8022 IN PLARGE_INTEGER FileOffset,
8023 IN ULONG Length,
8024 IN PLARGE_INTEGER OldestLsn,
8025 IN PLARGE_INTEGER NewestLsn,
8026 IN PVOID Context1,
8027 IN PVOID Context2);
8028
8029 typedef VOID
8030 (NTAPI *PFLUSH_TO_LSN) (
8031 IN PVOID LogHandle,
8032 IN LARGE_INTEGER Lsn);
8033
8034 typedef VOID
8035 (NTAPI *PCC_POST_DEFERRED_WRITE) (
8036 IN PVOID Context1,
8037 IN PVOID Context2);
8038
8039 #define UNINITIALIZE_CACHE_MAPS (1)
8040 #define DO_NOT_RETRY_PURGE (2)
8041 #define DO_NOT_PURGE_DIRTY_PAGES (0x4)
8042
8043 #define CC_FLUSH_AND_PURGE_NO_PURGE (0x1)
8044 /* Common Cache Functions */
8045
8046 #define CcIsFileCached(FO) ( \
8047 ((FO)->SectionObjectPointer != NULL) && \
8048 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
8049 )
8050
8051 extern ULONG CcFastMdlReadWait;
8052
8053 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8054
8055 NTKERNELAPI
8056 VOID
8057 NTAPI
8058 CcInitializeCacheMap(
8059 IN PFILE_OBJECT FileObject,
8060 IN PCC_FILE_SIZES FileSizes,
8061 IN BOOLEAN PinAccess,
8062 IN PCACHE_MANAGER_CALLBACKS Callbacks,
8063 IN PVOID LazyWriteContext);
8064
8065 NTKERNELAPI
8066 BOOLEAN
8067 NTAPI
8068 CcUninitializeCacheMap(
8069 IN PFILE_OBJECT FileObject,
8070 IN PLARGE_INTEGER TruncateSize OPTIONAL,
8071 IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL);
8072
8073 NTKERNELAPI
8074 VOID
8075 NTAPI
8076 CcSetFileSizes(
8077 IN PFILE_OBJECT FileObject,
8078 IN PCC_FILE_SIZES FileSizes);
8079
8080 NTKERNELAPI
8081 VOID
8082 NTAPI
8083 CcSetDirtyPageThreshold(
8084 IN PFILE_OBJECT FileObject,
8085 IN ULONG DirtyPageThreshold);
8086
8087 NTKERNELAPI
8088 VOID
8089 NTAPI
8090 CcFlushCache(
8091 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
8092 IN PLARGE_INTEGER FileOffset OPTIONAL,
8093 IN ULONG Length,
8094 OUT PIO_STATUS_BLOCK IoStatus OPTIONAL);
8095
8096 NTKERNELAPI
8097 LARGE_INTEGER
8098 NTAPI
8099 CcGetFlushedValidData(
8100 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
8101 IN BOOLEAN BcbListHeld);
8102
8103 NTKERNELAPI
8104 BOOLEAN
8105 NTAPI
8106 CcZeroData(
8107 IN PFILE_OBJECT FileObject,
8108 IN PLARGE_INTEGER StartOffset,
8109 IN PLARGE_INTEGER EndOffset,
8110 IN BOOLEAN Wait);
8111
8112 NTKERNELAPI
8113 PVOID
8114 NTAPI
8115 CcRemapBcb(
8116 IN PVOID Bcb);
8117
8118 NTKERNELAPI
8119 VOID
8120 NTAPI
8121 CcRepinBcb(
8122 IN PVOID Bcb);
8123
8124 NTKERNELAPI
8125 VOID
8126 NTAPI
8127 CcUnpinRepinnedBcb(
8128 IN PVOID Bcb,
8129 IN BOOLEAN WriteThrough,
8130 OUT PIO_STATUS_BLOCK IoStatus);
8131
8132 NTKERNELAPI
8133 PFILE_OBJECT
8134 NTAPI
8135 CcGetFileObjectFromSectionPtrs(
8136 IN PSECTION_OBJECT_POINTERS SectionObjectPointer);
8137
8138 NTKERNELAPI
8139 PFILE_OBJECT
8140 NTAPI
8141 CcGetFileObjectFromBcb(
8142 IN PVOID Bcb);
8143
8144 NTKERNELAPI
8145 BOOLEAN
8146 NTAPI
8147 CcCanIWrite(
8148 IN PFILE_OBJECT FileObject,
8149 IN ULONG BytesToWrite,
8150 IN BOOLEAN Wait,
8151 IN BOOLEAN Retrying);
8152
8153 NTKERNELAPI
8154 VOID
8155 NTAPI
8156 CcDeferWrite(
8157 IN PFILE_OBJECT FileObject,
8158 IN PCC_POST_DEFERRED_WRITE PostRoutine,
8159 IN PVOID Context1,
8160 IN PVOID Context2,
8161 IN ULONG BytesToWrite,
8162 IN BOOLEAN Retrying);
8163
8164 NTKERNELAPI
8165 BOOLEAN
8166 NTAPI
8167 CcCopyRead(
8168 IN PFILE_OBJECT FileObject,
8169 IN PLARGE_INTEGER FileOffset,
8170 IN ULONG Length,
8171 IN BOOLEAN Wait,
8172 OUT PVOID Buffer,
8173 OUT PIO_STATUS_BLOCK IoStatus);
8174
8175 NTKERNELAPI
8176 VOID
8177 NTAPI
8178 CcFastCopyRead(
8179 IN PFILE_OBJECT FileObject,
8180 IN ULONG FileOffset,
8181 IN ULONG Length,
8182 IN ULONG PageCount,
8183 OUT PVOID Buffer,
8184 OUT PIO_STATUS_BLOCK IoStatus);
8185
8186 NTKERNELAPI
8187 BOOLEAN
8188 NTAPI
8189 CcCopyWrite(
8190 IN PFILE_OBJECT FileObject,
8191 IN PLARGE_INTEGER FileOffset,
8192 IN ULONG Length,
8193 IN BOOLEAN Wait,
8194 IN PVOID Buffer);
8195
8196 NTKERNELAPI
8197 VOID
8198 NTAPI
8199 CcFastCopyWrite(
8200 IN PFILE_OBJECT FileObject,
8201 IN ULONG FileOffset,
8202 IN ULONG Length,
8203 IN PVOID Buffer);
8204
8205 NTKERNELAPI
8206 VOID
8207 NTAPI
8208 CcMdlRead(
8209 IN PFILE_OBJECT FileObject,
8210 IN PLARGE_INTEGER FileOffset,
8211 IN ULONG Length,
8212 OUT PMDL *MdlChain,
8213 OUT PIO_STATUS_BLOCK IoStatus);
8214
8215 NTKERNELAPI
8216 VOID
8217 NTAPI
8218 CcMdlReadComplete(
8219 IN PFILE_OBJECT FileObject,
8220 IN PMDL MdlChain);
8221
8222 NTKERNELAPI
8223 VOID
8224 NTAPI
8225 CcPrepareMdlWrite(
8226 IN PFILE_OBJECT FileObject,
8227 IN PLARGE_INTEGER FileOffset,
8228 IN ULONG Length,
8229 OUT PMDL *MdlChain,
8230 OUT PIO_STATUS_BLOCK IoStatus);
8231
8232 NTKERNELAPI
8233 VOID
8234 NTAPI
8235 CcMdlWriteComplete(
8236 IN PFILE_OBJECT FileObject,
8237 IN PLARGE_INTEGER FileOffset,
8238 IN PMDL MdlChain);
8239
8240 NTKERNELAPI
8241 VOID
8242 NTAPI
8243 CcScheduleReadAhead(
8244 IN PFILE_OBJECT FileObject,
8245 IN PLARGE_INTEGER FileOffset,
8246 IN ULONG Length);
8247
8248 NTKERNELAPI
8249 NTSTATUS
8250 NTAPI
8251 CcWaitForCurrentLazyWriterActivity(
8252 VOID);
8253
8254 NTKERNELAPI
8255 VOID
8256 NTAPI
8257 CcSetReadAheadGranularity(
8258 IN PFILE_OBJECT FileObject,
8259 IN ULONG Granularity);
8260
8261 NTKERNELAPI
8262 BOOLEAN
8263 NTAPI
8264 CcPinRead(
8265 IN PFILE_OBJECT FileObject,
8266 IN PLARGE_INTEGER FileOffset,
8267 IN ULONG Length,
8268 IN ULONG Flags,
8269 OUT PVOID *Bcb,
8270 OUT PVOID *Buffer);
8271
8272 NTKERNELAPI
8273 BOOLEAN
8274 NTAPI
8275 CcPinMappedData(
8276 IN PFILE_OBJECT FileObject,
8277 IN PLARGE_INTEGER FileOffset,
8278 IN ULONG Length,
8279 IN ULONG Flags,
8280 IN OUT PVOID *Bcb);
8281
8282 NTKERNELAPI
8283 BOOLEAN
8284 NTAPI
8285 CcPreparePinWrite(
8286 IN PFILE_OBJECT FileObject,
8287 IN PLARGE_INTEGER FileOffset,
8288 IN ULONG Length,
8289 IN BOOLEAN Zero,
8290 IN ULONG Flags,
8291 OUT PVOID *Bcb,
8292 OUT PVOID *Buffer);
8293
8294 NTKERNELAPI
8295 VOID
8296 NTAPI
8297 CcSetDirtyPinnedData(
8298 IN PVOID BcbVoid,
8299 IN PLARGE_INTEGER Lsn OPTIONAL);
8300
8301 NTKERNELAPI
8302 VOID
8303 NTAPI
8304 CcUnpinData(
8305 IN PVOID Bcb);
8306
8307 NTKERNELAPI
8308 VOID
8309 NTAPI
8310 CcSetBcbOwnerPointer(
8311 IN PVOID Bcb,
8312 IN PVOID OwnerPointer);
8313
8314 NTKERNELAPI
8315 VOID
8316 NTAPI
8317 CcUnpinDataForThread(
8318 IN PVOID Bcb,
8319 IN ERESOURCE_THREAD ResourceThreadId);
8320
8321 NTKERNELAPI
8322 VOID
8323 NTAPI
8324 CcSetAdditionalCacheAttributes(
8325 IN PFILE_OBJECT FileObject,
8326 IN BOOLEAN DisableReadAhead,
8327 IN BOOLEAN DisableWriteBehind);
8328
8329 NTKERNELAPI
8330 BOOLEAN
8331 NTAPI
8332 CcIsThereDirtyData(
8333 IN PVPB Vpb);
8334
8335 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
8336
8337 #if (NTDDI_VERSION >= NTDDI_WINXP)
8338
8339 NTKERNELAPI
8340 VOID
8341 NTAPI
8342 CcMdlWriteAbort(
8343 IN PFILE_OBJECT FileObject,
8344 IN PMDL MdlChain);
8345
8346 NTKERNELAPI
8347 VOID
8348 NTAPI
8349 CcSetLogHandleForFile(
8350 IN PFILE_OBJECT FileObject,
8351 IN PVOID LogHandle,
8352 IN PFLUSH_TO_LSN FlushToLsnRoutine);
8353
8354 NTKERNELAPI
8355 LARGE_INTEGER
8356 NTAPI
8357 CcGetDirtyPages(
8358 IN PVOID LogHandle,
8359 IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
8360 IN PVOID Context1,
8361 IN PVOID Context2);
8362
8363 #endif
8364
8365 #if (NTDDI_VERSION >= NTDDI_WINXP)
8366 NTKERNELAPI
8367 BOOLEAN
8368 NTAPI
8369 CcMapData(
8370 IN PFILE_OBJECT FileObject,
8371 IN PLARGE_INTEGER FileOffset,
8372 IN ULONG Length,
8373 IN ULONG Flags,
8374 OUT PVOID *Bcb,
8375 OUT PVOID *Buffer);
8376 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
8377 NTKERNELAPI
8378 BOOLEAN
8379 NTAPI
8380 CcMapData(
8381 IN PFILE_OBJECT FileObject,
8382 IN PLARGE_INTEGER FileOffset,
8383 IN ULONG Length,
8384 IN BOOLEAN Wait,
8385 OUT PVOID *Bcb,
8386 OUT PVOID *Buffer);
8387 #endif
8388
8389 #if (NTDDI_VERSION >= NTDDI_VISTA)
8390
8391 NTKERNELAPI
8392 NTSTATUS
8393 NTAPI
8394 CcSetFileSizesEx(
8395 IN PFILE_OBJECT FileObject,
8396 IN PCC_FILE_SIZES FileSizes);
8397
8398 NTKERNELAPI
8399 PFILE_OBJECT
8400 NTAPI
8401 CcGetFileObjectFromSectionPtrsRef(
8402 IN PSECTION_OBJECT_POINTERS SectionObjectPointer);
8403
8404 NTKERNELAPI
8405 VOID
8406 NTAPI
8407 CcSetParallelFlushFile(
8408 IN PFILE_OBJECT FileObject,
8409 IN BOOLEAN EnableParallelFlush);
8410
8411 NTKERNELAPI
8412 BOOLEAN
8413 CcIsThereDirtyDataEx(
8414 IN PVPB Vpb,
8415 IN PULONG NumberOfDirtyPages OPTIONAL);
8416
8417 #endif
8418
8419 #if (NTDDI_VERSION >= NTDDI_WIN7)
8420 NTKERNELAPI
8421 VOID
8422 NTAPI
8423 CcCoherencyFlushAndPurgeCache(
8424 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
8425 IN PLARGE_INTEGER FileOffset OPTIONAL,
8426 IN ULONG Length,
8427 OUT PIO_STATUS_BLOCK IoStatus,
8428 IN ULONG Flags OPTIONAL);
8429 #endif
8430
8431 #define CcGetFileSizePointer(FO) ( \
8432 ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
8433 )
8434
8435 #if (NTDDI_VERSION >= NTDDI_VISTA)
8436 NTKERNELAPI
8437 BOOLEAN
8438 NTAPI
8439 CcPurgeCacheSection(
8440 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
8441 IN PLARGE_INTEGER FileOffset OPTIONAL,
8442 IN ULONG Length,
8443 IN ULONG Flags);
8444 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
8445 NTKERNELAPI
8446 BOOLEAN
8447 NTAPI
8448 CcPurgeCacheSection(
8449 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
8450 IN PLARGE_INTEGER FileOffset OPTIONAL,
8451 IN ULONG Length,
8452 IN BOOLEAN UninitializeCacheMaps);
8453 #endif
8454
8455 #if (NTDDI_VERSION >= NTDDI_WIN7)
8456 NTKERNELAPI
8457 BOOLEAN
8458 NTAPI
8459 CcCopyWriteWontFlush(
8460 IN PFILE_OBJECT FileObject,
8461 IN PLARGE_INTEGER FileOffset,
8462 IN ULONG Length);
8463 #else
8464 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
8465 #endif
8466
8467 #define CcReadAhead(FO, FOFF, LEN) ( \
8468 if ((LEN) >= 256) { \
8469 CcScheduleReadAhead((FO), (FOFF), (LEN)); \
8470 } \
8471 )
8472 /******************************************************************************
8473 * ZwXxx Functions *
8474 ******************************************************************************/
8475
8476
8477
8478 NTSYSAPI
8479 NTSTATUS
8480 NTAPI
8481 ZwQueryEaFile(
8482 IN HANDLE FileHandle,
8483 OUT PIO_STATUS_BLOCK IoStatusBlock,
8484 OUT PVOID Buffer,
8485 IN ULONG Length,
8486 IN BOOLEAN ReturnSingleEntry,
8487 IN PVOID EaList OPTIONAL,
8488 IN ULONG EaListLength,
8489 IN PULONG EaIndex OPTIONAL,
8490 IN BOOLEAN RestartScan);
8491
8492 NTSYSAPI
8493 NTSTATUS
8494 NTAPI
8495 ZwSetEaFile(
8496 IN HANDLE FileHandle,
8497 OUT PIO_STATUS_BLOCK IoStatusBlock,
8498 OUT PVOID Buffer,
8499 IN ULONG Length);
8500
8501 NTSYSAPI
8502 NTSTATUS
8503 NTAPI
8504 ZwDuplicateToken(
8505 IN HANDLE ExistingTokenHandle,
8506 IN ACCESS_MASK DesiredAccess,
8507 IN POBJECT_ATTRIBUTES ObjectAttributes,
8508 IN BOOLEAN EffectiveOnly,
8509 IN TOKEN_TYPE TokenType,
8510 OUT PHANDLE NewTokenHandle);
8511
8512 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8513
8514 NTSYSAPI
8515 NTSTATUS
8516 NTAPI
8517 ZwQueryObject(
8518 IN HANDLE Handle OPTIONAL,
8519 IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
8520 OUT PVOID ObjectInformation OPTIONAL,
8521 IN ULONG ObjectInformationLength,
8522 OUT PULONG ReturnLength OPTIONAL);
8523
8524 NTSYSAPI
8525 NTSTATUS
8526 NTAPI
8527 ZwNotifyChangeKey(
8528 IN HANDLE KeyHandle,
8529 IN HANDLE EventHandle OPTIONAL,
8530 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
8531 IN PVOID ApcContext OPTIONAL,
8532 OUT PIO_STATUS_BLOCK IoStatusBlock,
8533 IN ULONG NotifyFilter,
8534 IN BOOLEAN WatchSubtree,
8535 OUT PVOID Buffer,
8536 IN ULONG BufferLength,
8537 IN BOOLEAN Asynchronous);
8538
8539 NTSYSAPI
8540 NTSTATUS
8541 NTAPI
8542 ZwCreateEvent(
8543 OUT PHANDLE EventHandle,
8544 IN ACCESS_MASK DesiredAccess,
8545 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
8546 IN EVENT_TYPE EventType,
8547 IN BOOLEAN InitialState);
8548
8549 NTSYSAPI
8550 NTSTATUS
8551 NTAPI
8552 ZwDeleteFile(
8553 IN POBJECT_ATTRIBUTES ObjectAttributes);
8554
8555 NTSYSAPI
8556 NTSTATUS
8557 NTAPI
8558 ZwQueryDirectoryFile(
8559 IN HANDLE FileHandle,
8560 IN HANDLE Event OPTIONAL,
8561 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
8562 IN PVOID ApcContext OPTIONAL,
8563 OUT PIO_STATUS_BLOCK IoStatusBlock,
8564 OUT PVOID FileInformation,
8565 IN ULONG Length,
8566 IN FILE_INFORMATION_CLASS FileInformationClass,
8567 IN BOOLEAN ReturnSingleEntry,
8568 IN PUNICODE_STRING FileName OPTIONAL,
8569 IN BOOLEAN RestartScan);
8570
8571 NTSYSAPI
8572 NTSTATUS
8573 NTAPI
8574 ZwSetVolumeInformationFile(
8575 IN HANDLE FileHandle,
8576 OUT PIO_STATUS_BLOCK IoStatusBlock,
8577 IN PVOID FsInformation,
8578 IN ULONG Length,
8579 IN FS_INFORMATION_CLASS FsInformationClass);
8580
8581 NTSYSAPI
8582 NTSTATUS
8583 NTAPI
8584 ZwFsControlFile(
8585 IN HANDLE FileHandle,
8586 IN HANDLE Event OPTIONAL,
8587 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
8588 IN PVOID ApcContext OPTIONAL,
8589 OUT PIO_STATUS_BLOCK IoStatusBlock,
8590 IN ULONG FsControlCode,
8591 IN PVOID InputBuffer OPTIONAL,
8592 IN ULONG InputBufferLength,
8593 OUT PVOID OutputBuffer OPTIONAL,
8594 IN ULONG OutputBufferLength);
8595
8596 NTSYSAPI
8597 NTSTATUS
8598 NTAPI
8599 ZwDuplicateObject(
8600 IN HANDLE SourceProcessHandle,
8601 IN HANDLE SourceHandle,
8602 IN HANDLE TargetProcessHandle OPTIONAL,
8603 OUT PHANDLE TargetHandle OPTIONAL,
8604 IN ACCESS_MASK DesiredAccess,
8605 IN ULONG HandleAttributes,
8606 IN ULONG Options);
8607
8608 NTSYSAPI
8609 NTSTATUS
8610 NTAPI
8611 ZwOpenDirectoryObject(
8612 OUT PHANDLE DirectoryHandle,
8613 IN ACCESS_MASK DesiredAccess,
8614 IN POBJECT_ATTRIBUTES ObjectAttributes);
8615
8616 NTSYSAPI
8617 NTSTATUS
8618 NTAPI
8619 ZwAllocateVirtualMemory(
8620 IN HANDLE ProcessHandle,
8621 IN OUT PVOID *BaseAddress,
8622 IN ULONG_PTR ZeroBits,
8623 IN OUT PSIZE_T RegionSize,
8624 IN ULONG AllocationType,
8625 IN ULONG Protect);
8626
8627 NTSYSAPI
8628 NTSTATUS
8629 NTAPI
8630 ZwFreeVirtualMemory(
8631 IN HANDLE ProcessHandle,
8632 IN OUT PVOID *BaseAddress,
8633 IN OUT PSIZE_T RegionSize,
8634 IN ULONG FreeType);
8635
8636 NTSYSAPI
8637 NTSTATUS
8638 NTAPI
8639 ZwWaitForSingleObject(
8640 IN HANDLE Handle,
8641 IN BOOLEAN Alertable,
8642 IN PLARGE_INTEGER Timeout OPTIONAL);
8643
8644 NTSYSAPI
8645 NTSTATUS
8646 NTAPI
8647 ZwSetEvent(
8648 IN HANDLE EventHandle,
8649 OUT PLONG PreviousState OPTIONAL);
8650
8651 NTSYSAPI
8652 NTSTATUS
8653 NTAPI
8654 ZwFlushVirtualMemory(
8655 IN HANDLE ProcessHandle,
8656 IN OUT PVOID *BaseAddress,
8657 IN OUT PSIZE_T RegionSize,
8658 OUT PIO_STATUS_BLOCK IoStatusBlock);
8659
8660 NTSYSAPI
8661 NTSTATUS
8662 NTAPI
8663 ZwQueryInformationToken(
8664 IN HANDLE TokenHandle,
8665 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
8666 OUT PVOID TokenInformation,
8667 IN ULONG Length,
8668 OUT PULONG ResultLength);
8669
8670 NTSYSAPI
8671 NTSTATUS
8672 NTAPI
8673 ZwSetSecurityObject(
8674 IN HANDLE Handle,
8675 IN SECURITY_INFORMATION SecurityInformation,
8676 IN PSECURITY_DESCRIPTOR SecurityDescriptor);
8677
8678 NTSYSAPI
8679 NTSTATUS
8680 NTAPI
8681 ZwQuerySecurityObject(
8682 IN HANDLE FileHandle,
8683 IN SECURITY_INFORMATION SecurityInformation,
8684 OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
8685 IN ULONG Length,
8686 OUT PULONG ResultLength);
8687 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
8688
8689 #if (NTDDI_VERSION >= NTDDI_WINXP)
8690
8691 NTSYSAPI
8692 NTSTATUS
8693 NTAPI
8694 ZwOpenProcessTokenEx(
8695 IN HANDLE ProcessHandle,
8696 IN ACCESS_MASK DesiredAccess,
8697 IN ULONG HandleAttributes,
8698 OUT PHANDLE TokenHandle);
8699
8700 NTSYSAPI
8701 NTSTATUS
8702 NTAPI
8703 ZwOpenThreadTokenEx(
8704 IN HANDLE ThreadHandle,
8705 IN ACCESS_MASK DesiredAccess,
8706 IN BOOLEAN OpenAsSelf,
8707 IN ULONG HandleAttributes,
8708 OUT PHANDLE TokenHandle);
8709
8710 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
8711
8712 #if (NTDDI_VERSION >= NTDDI_VISTA)
8713
8714 NTSYSAPI
8715 NTSTATUS
8716 NTAPI
8717 ZwLockFile(
8718 IN HANDLE FileHandle,
8719 IN HANDLE Event OPTIONAL,
8720 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
8721 IN PVOID ApcContext OPTIONAL,
8722 OUT PIO_STATUS_BLOCK IoStatusBlock,
8723 IN PLARGE_INTEGER ByteOffset,
8724 IN PLARGE_INTEGER Length,
8725 IN ULONG Key,
8726 IN BOOLEAN FailImmediately,
8727 IN BOOLEAN ExclusiveLock);
8728
8729 NTSYSAPI
8730 NTSTATUS
8731 NTAPI
8732 ZwUnlockFile(
8733 IN HANDLE FileHandle,
8734 OUT PIO_STATUS_BLOCK IoStatusBlock,
8735 IN PLARGE_INTEGER ByteOffset,
8736 IN PLARGE_INTEGER Length,
8737 IN ULONG Key);
8738
8739 NTSYSAPI
8740 NTSTATUS
8741 NTAPI
8742 ZwQueryQuotaInformationFile(
8743 IN HANDLE FileHandle,
8744 OUT PIO_STATUS_BLOCK IoStatusBlock,
8745 OUT PVOID Buffer,
8746 IN ULONG Length,
8747 IN BOOLEAN ReturnSingleEntry,
8748 IN PVOID SidList,
8749 IN ULONG SidListLength,
8750 IN PSID StartSid OPTIONAL,
8751 IN BOOLEAN RestartScan);
8752
8753 NTSYSAPI
8754 NTSTATUS
8755 NTAPI
8756 ZwSetQuotaInformationFile(
8757 IN HANDLE FileHandle,
8758 OUT PIO_STATUS_BLOCK IoStatusBlock,
8759 IN PVOID Buffer,
8760 IN ULONG Length);
8761
8762 NTSYSAPI
8763 NTSTATUS
8764 NTAPI
8765 ZwFlushBuffersFile(
8766 IN HANDLE FileHandle,
8767 OUT PIO_STATUS_BLOCK IoStatusBlock);
8768 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8769 #if (NTDDI_VERSION >= NTDDI_WIN7)
8770
8771 NTSYSAPI
8772 NTSTATUS
8773 NTAPI
8774 ZwSetInformationToken(
8775 IN HANDLE TokenHandle,
8776 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
8777 IN PVOID TokenInformation,
8778 IN ULONG TokenInformationLength);
8779 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
8780
8781
8782 /* #if !defined(_X86AMD64_) FIXME : WHAT ?! */
8783 #if defined(_WIN64)
8784
8785 C_ASSERT(sizeof(ERESOURCE) == 0x68);
8786 C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x18);
8787 C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x1a);
8788
8789 #else
8790
8791 C_ASSERT(sizeof(ERESOURCE) == 0x38);
8792 C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x0c);
8793 C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x0e);
8794
8795 #endif
8796 /* #endif */
8797
8798 #if defined(_IA64_)
8799 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8800 //DECLSPEC_DEPRECATED_DDK
8801 NTHALAPI
8802 ULONG
8803 NTAPI
8804 HalGetDmaAlignmentRequirement(
8805 VOID);
8806 #endif
8807 #endif
8808
8809 #if defined(_M_IX86) || defined(_M_AMD64)
8810 #define HalGetDmaAlignmentRequirement() 1L
8811 #endif
8812
8813 extern NTKERNELAPI PUSHORT NlsOemLeadByteInfo;
8814 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
8815
8816 #ifdef NLS_MB_CODE_PAGE_TAG
8817 #undef NLS_MB_CODE_PAGE_TAG
8818 #endif
8819 #define NLS_MB_CODE_PAGE_TAG NlsMbOemCodePageTag
8820
8821 #if (NTDDI_VERSION >= NTDDI_WIN7)
8822 typedef struct _ECP_HEADER ECP_HEADER, *PECP_HEADER;
8823 #endif
8824
8825 #if (NTDDI_VERSION >= NTDDI_VISTA)
8826
8827 typedef enum _NETWORK_OPEN_LOCATION_QUALIFIER {
8828 NetworkOpenLocationAny,
8829 NetworkOpenLocationRemote,
8830 NetworkOpenLocationLoopback
8831 } NETWORK_OPEN_LOCATION_QUALIFIER;
8832
8833 typedef enum _NETWORK_OPEN_INTEGRITY_QUALIFIER {
8834 NetworkOpenIntegrityAny,
8835 NetworkOpenIntegrityNone,
8836 NetworkOpenIntegritySigned,
8837 NetworkOpenIntegrityEncrypted,
8838 NetworkOpenIntegrityMaximum
8839 } NETWORK_OPEN_INTEGRITY_QUALIFIER;
8840
8841 #if (NTDDI_VERSION >= NTDDI_WIN7)
8842
8843 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_COLLAPSING 0x1
8844 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_DURABILITY 0x2
8845 #define NETWORK_OPEN_ECP_IN_FLAG_FORCE_BUFFERED_SYNCHRONOUS_IO_HACK 0x80000000
8846
8847 typedef struct _NETWORK_OPEN_ECP_CONTEXT {
8848 USHORT Size;
8849 USHORT Reserved;
8850 _ANONYMOUS_STRUCT struct {
8851 struct {
8852 NETWORK_OPEN_LOCATION_QUALIFIER Location;
8853 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
8854 ULONG Flags;
8855 } in;
8856 struct {
8857 NETWORK_OPEN_LOCATION_QUALIFIER Location;
8858 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
8859 ULONG Flags;
8860 } out;
8861 } DUMMYSTRUCTNAME;
8862 } NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
8863
8864 typedef struct _NETWORK_OPEN_ECP_CONTEXT_V0 {
8865 USHORT Size;
8866 USHORT Reserved;
8867 _ANONYMOUS_STRUCT struct {
8868 struct {
8869 NETWORK_OPEN_LOCATION_QUALIFIER Location;
8870 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
8871 } in;
8872 struct {
8873 NETWORK_OPEN_LOCATION_QUALIFIER Location;
8874 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
8875 } out;
8876 } DUMMYSTRUCTNAME;
8877 } NETWORK_OPEN_ECP_CONTEXT_V0, *PNETWORK_OPEN_ECP_CONTEXT_V0;
8878
8879 #elif (NTDDI_VERSION >= NTDDI_VISTA)
8880 typedef struct _NETWORK_OPEN_ECP_CONTEXT {
8881 USHORT Size;
8882 USHORT Reserved;
8883 _ANONYMOUS_STRUCT struct {
8884 struct {
8885 NETWORK_OPEN_LOCATION_QUALIFIER Location;
8886 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
8887 } in;
8888 struct {
8889 NETWORK_OPEN_LOCATION_QUALIFIER Location;
8890 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
8891 } out;
8892 } DUMMYSTRUCTNAME;
8893 } NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
8894 #endif
8895
8896 DEFINE_GUID(GUID_ECP_NETWORK_OPEN_CONTEXT, 0xc584edbf, 0x00df, 0x4d28, 0xb8, 0x84, 0x35, 0xba, 0xca, 0x89, 0x11, 0xe8);
8897
8898 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8899
8900
8901 #if (NTDDI_VERSION >= NTDDI_VISTA)
8902
8903 typedef struct _PREFETCH_OPEN_ECP_CONTEXT {
8904 PVOID Context;
8905 } PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT;
8906
8907 DEFINE_GUID(GUID_ECP_PREFETCH_OPEN, 0xe1777b21, 0x847e, 0x4837, 0xaa, 0x45, 0x64, 0x16, 0x1d, 0x28, 0x6, 0x55);
8908
8909 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8910
8911 #if (NTDDI_VERSION >= NTDDI_WIN7)
8912
8913 DEFINE_GUID (GUID_ECP_NFS_OPEN, 0xf326d30c, 0xe5f8, 0x4fe7, 0xab, 0x74, 0xf5, 0xa3, 0x19, 0x6d, 0x92, 0xdb);
8914 DEFINE_GUID (GUID_ECP_SRV_OPEN, 0xbebfaebc, 0xaabf, 0x489d, 0x9d, 0x2c, 0xe9, 0xe3, 0x61, 0x10, 0x28, 0x53);
8915
8916 typedef struct sockaddr_storage *PSOCKADDR_STORAGE_NFS;
8917
8918 typedef struct _NFS_OPEN_ECP_CONTEXT {
8919 PUNICODE_STRING ExportAlias;
8920 PSOCKADDR_STORAGE_NFS ClientSocketAddress;
8921 } NFS_OPEN_ECP_CONTEXT, *PNFS_OPEN_ECP_CONTEXT, **PPNFS_OPEN_ECP_CONTEXT;
8922
8923 typedef struct _SRV_OPEN_ECP_CONTEXT {
8924 PUNICODE_STRING ShareName;
8925 PSOCKADDR_STORAGE_NFS SocketAddress;
8926 BOOLEAN OplockBlockState;
8927 BOOLEAN OplockAppState;
8928 BOOLEAN OplockFinalState;
8929 } SRV_OPEN_ECP_CONTEXT, *PSRV_OPEN_ECP_CONTEXT;
8930
8931 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
8932
8933 #define PIN_WAIT (1)
8934 #define PIN_EXCLUSIVE (2)
8935 #define PIN_NO_READ (4)
8936 #define PIN_IF_BCB (8)
8937 #define PIN_CALLER_TRACKS_DIRTY_DATA (32)
8938 #define PIN_HIGH_PRIORITY (64)
8939
8940 #define MAP_WAIT 1
8941 #define MAP_NO_READ (16)
8942 #define MAP_HIGH_PRIORITY (64)
8943
8944 #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
8945 #define IOCTL_REDIR_QUERY_PATH_EX CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 100, METHOD_NEITHER, FILE_ANY_ACCESS)
8946
8947 typedef struct _QUERY_PATH_REQUEST {
8948 ULONG PathNameLength;
8949 PIO_SECURITY_CONTEXT SecurityContext;
8950 WCHAR FilePathName[1];
8951 } QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST;
8952
8953 typedef struct _QUERY_PATH_REQUEST_EX {
8954 PIO_SECURITY_CONTEXT pSecurityContext;
8955 ULONG EaLength;
8956 PVOID pEaBuffer;
8957 UNICODE_STRING PathName;
8958 UNICODE_STRING DomainServiceName;
8959 ULONG_PTR Reserved[ 3 ];
8960 } QUERY_PATH_REQUEST_EX, *PQUERY_PATH_REQUEST_EX;
8961
8962 typedef struct _QUERY_PATH_RESPONSE {
8963 ULONG LengthAccepted;
8964 } QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE;
8965
8966 #define VOLSNAPCONTROLTYPE 0x00000053
8967 #define IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES CTL_CODE(VOLSNAPCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
8968
8969 /* FIXME : These definitions below don't belong here (or anywhere in ddk really) */
8970 #pragma pack(push,4)
8971
8972 #ifndef VER_PRODUCTBUILD
8973 #define VER_PRODUCTBUILD 10000
8974 #endif
8975
8976 #include "csq.h"
8977
8978 extern PACL SePublicDefaultDacl;
8979 extern PACL SeSystemDefaultDacl;
8980
8981 #define FS_LFN_APIS 0x00004000
8982
8983 #define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
8984 #define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
8985 #define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
8986 #define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
8987 #define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
8988 #define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
8989 #define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
8990 #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
8991 #define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
8992 #define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
8993 #define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
8994 #define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
8995 #define FILE_STORAGE_TYPE_MASK 0x000f0000
8996 #define FILE_STORAGE_TYPE_SHIFT 16
8997
8998 #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
8999
9000 #ifdef _X86_
9001 #define HARDWARE_PTE HARDWARE_PTE_X86
9002 #define PHARDWARE_PTE PHARDWARE_PTE_X86
9003 #endif
9004
9005 #define IO_ATTACH_DEVICE_API 0x80000000
9006
9007 #define IO_TYPE_APC 18
9008 #define IO_TYPE_DPC 19
9009 #define IO_TYPE_DEVICE_QUEUE 20
9010 #define IO_TYPE_EVENT_PAIR 21
9011 #define IO_TYPE_INTERRUPT 22
9012 #define IO_TYPE_PROFILE 23
9013
9014 #define IRP_BEING_VERIFIED 0x10
9015
9016 #define MAILSLOT_CLASS_FIRSTCLASS 1
9017 #define MAILSLOT_CLASS_SECONDCLASS 2
9018
9019 #define MAILSLOT_SIZE_AUTO 0
9020
9021 #define MEM_DOS_LIM 0x40000000
9022
9023 #define OB_TYPE_TYPE 1
9024 #define OB_TYPE_DIRECTORY 2
9025 #define OB_TYPE_SYMBOLIC_LINK 3
9026 #define OB_TYPE_TOKEN 4
9027 #define OB_TYPE_PROCESS 5
9028 #define OB_TYPE_THREAD 6
9029 #define OB_TYPE_EVENT 7
9030 #define OB_TYPE_EVENT_PAIR 8
9031 #define OB_TYPE_MUTANT 9
9032 #define OB_TYPE_SEMAPHORE 10
9033 #define OB_TYPE_TIMER 11
9034 #define OB_TYPE_PROFILE 12
9035 #define OB_TYPE_WINDOW_STATION 13
9036 #define OB_TYPE_DESKTOP 14
9037 #define OB_TYPE_SECTION 15
9038 #define OB_TYPE_KEY 16
9039 #define OB_TYPE_PORT 17
9040 #define OB_TYPE_ADAPTER 18
9041 #define OB_TYPE_CONTROLLER 19
9042 #define OB_TYPE_DEVICE 20
9043 #define OB_TYPE_DRIVER 21
9044 #define OB_TYPE_IO_COMPLETION 22
9045 #define OB_TYPE_FILE 23
9046
9047 #define SEC_BASED 0x00200000
9048
9049 /* end winnt.h */
9050
9051 #define TOKEN_HAS_ADMIN_GROUP 0x08
9052
9053 #if (VER_PRODUCTBUILD >= 1381)
9054 #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
9055 #endif /* (VER_PRODUCTBUILD >= 1381) */
9056
9057 #if (VER_PRODUCTBUILD >= 2195)
9058
9059 #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
9060 #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
9061
9062 #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
9063
9064 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
9065 #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
9066 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
9067 #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
9068 #endif /* (VER_PRODUCTBUILD >= 2195) */
9069
9070 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
9071 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
9072 #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
9073 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
9074 #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
9075 #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
9076 #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
9077 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
9078
9079 typedef enum _FILE_STORAGE_TYPE {
9080 StorageTypeDefault = 1,
9081 StorageTypeDirectory,
9082 StorageTypeFile,
9083 StorageTypeJunctionPoint,
9084 StorageTypeCatalog,
9085 StorageTypeStructuredStorage,
9086 StorageTypeEmbedding,
9087 StorageTypeStream
9088 } FILE_STORAGE_TYPE;
9089
9090 typedef struct _OBJECT_BASIC_INFORMATION
9091 {
9092 ULONG Attributes;
9093 ACCESS_MASK GrantedAccess;
9094 ULONG HandleCount;
9095 ULONG PointerCount;
9096 ULONG PagedPoolCharge;
9097 ULONG NonPagedPoolCharge;
9098 ULONG Reserved[ 3 ];
9099 ULONG NameInfoSize;
9100 ULONG TypeInfoSize;
9101 ULONG SecurityDescriptorSize;
9102 LARGE_INTEGER CreationTime;
9103 } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
9104
9105 typedef struct _BITMAP_RANGE {
9106 LIST_ENTRY Links;
9107 LONGLONG BasePage;
9108 ULONG FirstDirtyPage;
9109 ULONG LastDirtyPage;
9110 ULONG DirtyPages;
9111 PULONG Bitmap;
9112 } BITMAP_RANGE, *PBITMAP_RANGE;
9113
9114 typedef struct _FILE_COPY_ON_WRITE_INFORMATION {
9115 BOOLEAN ReplaceIfExists;
9116 HANDLE RootDirectory;
9117 ULONG FileNameLength;
9118 WCHAR FileName[1];
9119 } FILE_COPY_ON_WRITE_INFORMATION, *PFILE_COPY_ON_WRITE_INFORMATION;
9120
9121 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
9122 ULONG NextEntryOffset;
9123 ULONG FileIndex;
9124 LARGE_INTEGER CreationTime;
9125 LARGE_INTEGER LastAccessTime;
9126 LARGE_INTEGER LastWriteTime;
9127 LARGE_INTEGER ChangeTime;
9128 LARGE_INTEGER EndOfFile;
9129 LARGE_INTEGER AllocationSize;
9130 ULONG FileAttributes;
9131 ULONG FileNameLength;
9132 ULONG EaSize;
9133 WCHAR FileName[ANYSIZE_ARRAY];
9134 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION;
9135
9136 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
9137 typedef struct _FILE_SHARED_LOCK_ENTRY {
9138 PVOID Unknown1;
9139 PVOID Unknown2;
9140 FILE_LOCK_INFO FileLock;
9141 } FILE_SHARED_LOCK_ENTRY, *PFILE_SHARED_LOCK_ENTRY;
9142
9143 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
9144 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY {
9145 LIST_ENTRY ListEntry;
9146 PVOID Unknown1;
9147 PVOID Unknown2;
9148 FILE_LOCK_INFO FileLock;
9149 } FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
9150
9151 typedef struct _FILE_MAILSLOT_PEEK_BUFFER {
9152 ULONG ReadDataAvailable;
9153 ULONG NumberOfMessages;
9154 ULONG MessageLength;
9155 } FILE_MAILSLOT_PEEK_BUFFER, *PFILE_MAILSLOT_PEEK_BUFFER;
9156
9157 typedef struct _FILE_OLE_CLASSID_INFORMATION {
9158 GUID ClassId;
9159 } FILE_OLE_CLASSID_INFORMATION, *PFILE_OLE_CLASSID_INFORMATION;
9160
9161 typedef struct _FILE_OLE_ALL_INFORMATION {
9162 FILE_BASIC_INFORMATION BasicInformation;
9163 FILE_STANDARD_INFORMATION StandardInformation;
9164 FILE_INTERNAL_INFORMATION InternalInformation;
9165 FILE_EA_INFORMATION EaInformation;
9166 FILE_ACCESS_INFORMATION AccessInformation;
9167 FILE_POSITION_INFORMATION PositionInformation;
9168 FILE_MODE_INFORMATION ModeInformation;
9169 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
9170 USN LastChangeUsn;
9171 USN ReplicationUsn;
9172 LARGE_INTEGER SecurityChangeTime;
9173 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
9174 FILE_OBJECTID_INFORMATION ObjectIdInformation;
9175 FILE_STORAGE_TYPE StorageType;
9176 ULONG OleStateBits;
9177 ULONG OleId;
9178 ULONG NumberOfStreamReferences;
9179 ULONG StreamIndex;
9180 ULONG SecurityId;
9181 BOOLEAN ContentIndexDisable;
9182 BOOLEAN InheritContentIndexDisable;
9183 FILE_NAME_INFORMATION NameInformation;
9184 } FILE_OLE_ALL_INFORMATION, *PFILE_OLE_ALL_INFORMATION;
9185
9186 typedef struct _FILE_OLE_DIR_INFORMATION {
9187 ULONG NextEntryOffset;
9188 ULONG FileIndex;
9189 LARGE_INTEGER CreationTime;
9190 LARGE_INTEGER LastAccessTime;
9191 LARGE_INTEGER LastWriteTime;
9192 LARGE_INTEGER ChangeTime;
9193 LARGE_INTEGER EndOfFile;
9194 LARGE_INTEGER AllocationSize;
9195 ULONG FileAttributes;
9196 ULONG FileNameLength;
9197 FILE_STORAGE_TYPE StorageType;
9198 GUID OleClassId;
9199 ULONG OleStateBits;
9200 BOOLEAN ContentIndexDisable;
9201 BOOLEAN InheritContentIndexDisable;
9202 WCHAR FileName[1];
9203 } FILE_OLE_DIR_INFORMATION, *PFILE_OLE_DIR_INFORMATION;
9204
9205 typedef struct _FILE_OLE_INFORMATION {
9206 LARGE_INTEGER SecurityChangeTime;
9207 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
9208 FILE_OBJECTID_INFORMATION ObjectIdInformation;
9209 FILE_STORAGE_TYPE StorageType;
9210 ULONG OleStateBits;
9211 BOOLEAN ContentIndexDisable;
9212 BOOLEAN InheritContentIndexDisable;
9213 } FILE_OLE_INFORMATION, *PFILE_OLE_INFORMATION;
9214
9215 typedef struct _FILE_OLE_STATE_BITS_INFORMATION {
9216 ULONG StateBits;
9217 ULONG StateBitsMask;
9218 } FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION;
9219
9220 typedef struct _MAPPING_PAIR {
9221 ULONGLONG Vcn;
9222 ULONGLONG Lcn;
9223 } MAPPING_PAIR, *PMAPPING_PAIR;
9224
9225 typedef struct _GET_RETRIEVAL_DESCRIPTOR {
9226 ULONG NumberOfPairs;
9227 ULONGLONG StartVcn;
9228 MAPPING_PAIR Pair[1];
9229 } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
9230
9231 typedef struct _MBCB {
9232 CSHORT NodeTypeCode;
9233 CSHORT NodeIsInZone;
9234 ULONG PagesToWrite;
9235 ULONG DirtyPages;
9236 ULONG Reserved;
9237 LIST_ENTRY BitmapRanges;
9238 LONGLONG ResumeWritePage;
9239 BITMAP_RANGE BitmapRange1;
9240 BITMAP_RANGE BitmapRange2;
9241 BITMAP_RANGE BitmapRange3;
9242 } MBCB, *PMBCB;
9243
9244 typedef struct _MOVEFILE_DESCRIPTOR {
9245 HANDLE FileHandle;
9246 ULONG Reserved;
9247 LARGE_INTEGER StartVcn;
9248 LARGE_INTEGER TargetLcn;
9249 ULONG NumVcns;
9250 ULONG Reserved1;
9251 } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
9252
9253 typedef struct _OBJECT_BASIC_INFO {
9254 ULONG Attributes;
9255 ACCESS_MASK GrantedAccess;
9256 ULONG HandleCount;
9257 ULONG ReferenceCount;
9258 ULONG PagedPoolUsage;
9259 ULONG NonPagedPoolUsage;
9260 ULONG Reserved[3];
9261 ULONG NameInformationLength;
9262 ULONG TypeInformationLength;
9263 ULONG SecurityDescriptorLength;
9264 LARGE_INTEGER CreateTime;
9265 } OBJECT_BASIC_INFO, *POBJECT_BASIC_INFO;
9266
9267 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO {
9268 BOOLEAN Inherit;
9269 BOOLEAN ProtectFromClose;
9270 } OBJECT_HANDLE_ATTRIBUTE_INFO, *POBJECT_HANDLE_ATTRIBUTE_INFO;
9271
9272 typedef struct _OBJECT_NAME_INFO {
9273 UNICODE_STRING ObjectName;
9274 WCHAR ObjectNameBuffer[1];
9275 } OBJECT_NAME_INFO, *POBJECT_NAME_INFO;
9276
9277 typedef struct _OBJECT_PROTECTION_INFO {
9278 BOOLEAN Inherit;
9279 BOOLEAN ProtectHandle;
9280 } OBJECT_PROTECTION_INFO, *POBJECT_PROTECTION_INFO;
9281
9282 typedef struct _OBJECT_TYPE_INFO {
9283 UNICODE_STRING ObjectTypeName;
9284 UCHAR Unknown[0x58];
9285 WCHAR ObjectTypeNameBuffer[1];
9286 } OBJECT_TYPE_INFO, *POBJECT_TYPE_INFO;
9287
9288 typedef struct _OBJECT_ALL_TYPES_INFO {
9289 ULONG NumberOfObjectTypes;
9290 OBJECT_TYPE_INFO ObjectsTypeInfo[1];
9291 } OBJECT_ALL_TYPES_INFO, *POBJECT_ALL_TYPES_INFO;
9292
9293 #if defined(USE_LPC6432)
9294 #define LPC_CLIENT_ID CLIENT_ID64
9295 #define LPC_SIZE_T ULONGLONG
9296 #define LPC_PVOID ULONGLONG
9297 #define LPC_HANDLE ULONGLONG
9298 #else
9299 #define LPC_CLIENT_ID CLIENT_ID
9300 #define LPC_SIZE_T SIZE_T
9301 #define LPC_PVOID PVOID
9302 #define LPC_HANDLE HANDLE
9303 #endif
9304
9305 typedef struct _PORT_MESSAGE
9306 {
9307 union
9308 {
9309 struct
9310 {
9311 CSHORT DataLength;
9312 CSHORT TotalLength;
9313 } s1;
9314 ULONG Length;
9315 } u1;
9316 union
9317 {
9318 struct
9319 {
9320 CSHORT Type;
9321 CSHORT DataInfoOffset;
9322 } s2;
9323 ULONG ZeroInit;
9324 } u2;
9325 __GNU_EXTENSION union
9326 {
9327 LPC_CLIENT_ID ClientId;
9328 double DoNotUseThisField;
9329 };
9330 ULONG MessageId;
9331 __GNU_EXTENSION union
9332 {
9333 LPC_SIZE_T ClientViewSize;
9334 ULONG CallbackId;
9335 };
9336 } PORT_MESSAGE, *PPORT_MESSAGE;
9337
9338 #define LPC_KERNELMODE_MESSAGE (CSHORT)((USHORT)0x8000)
9339
9340 typedef struct _PORT_VIEW
9341 {
9342 ULONG Length;
9343 LPC_HANDLE SectionHandle;
9344 ULONG SectionOffset;
9345 LPC_SIZE_T ViewSize;
9346 LPC_PVOID ViewBase;
9347 LPC_PVOID ViewRemoteBase;
9348 } PORT_VIEW, *PPORT_VIEW;
9349
9350 typedef struct _REMOTE_PORT_VIEW
9351 {
9352 ULONG Length;
9353 LPC_SIZE_T ViewSize;
9354 LPC_PVOID ViewBase;
9355 } REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW;
9356
9357 typedef struct _VAD_HEADER {
9358 PVOID StartVPN;
9359 PVOID EndVPN;
9360 struct _VAD_HEADER* ParentLink;
9361 struct _VAD_HEADER* LeftLink;
9362 struct _VAD_HEADER* RightLink;
9363 ULONG Flags; /* LSB = CommitCharge */
9364 PVOID ControlArea;
9365 PVOID FirstProtoPte;
9366 PVOID LastPTE;
9367 ULONG Unknown;
9368 LIST_ENTRY Secured;
9369 } VAD_HEADER, *PVAD_HEADER;
9370
9371 NTKERNELAPI
9372 LARGE_INTEGER
9373 NTAPI
9374 CcGetLsnForFileObject (
9375 IN PFILE_OBJECT FileObject,
9376 OUT PLARGE_INTEGER OldestLsn OPTIONAL
9377 );
9378
9379 NTKERNELAPI
9380 PVOID
9381 NTAPI
9382 FsRtlAllocatePool (
9383 IN POOL_TYPE PoolType,
9384 IN ULONG NumberOfBytes
9385 );
9386
9387 NTKERNELAPI
9388 PVOID
9389 NTAPI
9390 FsRtlAllocatePoolWithQuota (
9391 IN POOL_TYPE PoolType,
9392 IN ULONG NumberOfBytes
9393 );
9394
9395 NTKERNELAPI
9396 PVOID
9397 NTAPI
9398 FsRtlAllocatePoolWithQuotaTag (
9399 IN POOL_TYPE PoolType,
9400 IN ULONG NumberOfBytes,
9401 IN ULONG Tag
9402 );
9403
9404 NTKERNELAPI
9405 PVOID
9406 NTAPI
9407 FsRtlAllocatePoolWithTag (
9408 IN POOL_TYPE PoolType,
9409 IN ULONG NumberOfBytes,
9410 IN ULONG Tag
9411 );
9412
9413 NTKERNELAPI
9414 BOOLEAN
9415 NTAPI
9416 FsRtlIsFatDbcsLegal (
9417 IN ANSI_STRING DbcsName,
9418 IN BOOLEAN WildCardsPermissible,
9419 IN BOOLEAN PathNamePermissible,
9420 IN BOOLEAN LeadingBackslashPermissible
9421 );
9422
9423 NTKERNELAPI
9424 BOOLEAN
9425 NTAPI
9426 FsRtlMdlReadComplete (
9427 IN PFILE_OBJECT FileObject,
9428 IN PMDL MdlChain
9429 );
9430
9431 NTKERNELAPI
9432 BOOLEAN
9433 NTAPI
9434 FsRtlMdlWriteComplete (
9435 IN PFILE_OBJECT FileObject,
9436 IN PLARGE_INTEGER FileOffset,
9437 IN PMDL MdlChain
9438 );
9439
9440 NTKERNELAPI
9441 VOID
9442 NTAPI
9443 FsRtlNotifyChangeDirectory (
9444 IN PNOTIFY_SYNC NotifySync,
9445 IN PVOID FsContext,
9446 IN PSTRING FullDirectoryName,
9447 IN PLIST_ENTRY NotifyList,
9448 IN BOOLEAN WatchTree,
9449 IN ULONG CompletionFilter,
9450 IN PIRP NotifyIrp
9451 );
9452
9453 NTKERNELAPI
9454 NTSTATUS
9455 NTAPI
9456 ObCreateObject (
9457 IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL,
9458 IN POBJECT_TYPE ObjectType,
9459 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
9460 IN KPROCESSOR_MODE AccessMode,
9461 IN OUT PVOID ParseContext OPTIONAL,
9462 IN ULONG ObjectSize,
9463 IN ULONG PagedPoolCharge OPTIONAL,
9464 IN ULONG NonPagedPoolCharge OPTIONAL,
9465 OUT PVOID *Object
9466 );
9467
9468 NTKERNELAPI
9469 ULONG
9470 NTAPI
9471 ObGetObjectPointerCount (
9472 IN PVOID Object
9473 );
9474
9475 NTKERNELAPI
9476 NTSTATUS
9477 NTAPI
9478 ObReferenceObjectByName (
9479 IN PUNICODE_STRING ObjectName,
9480 IN ULONG Attributes,
9481 IN PACCESS_STATE PassedAccessState OPTIONAL,
9482 IN ACCESS_MASK DesiredAccess OPTIONAL,
9483 IN POBJECT_TYPE ObjectType,
9484 IN KPROCESSOR_MODE AccessMode,
9485 IN OUT PVOID ParseContext OPTIONAL,
9486 OUT PVOID *Object
9487 );
9488
9489 #define PsDereferenceImpersonationToken(T) \
9490 {if (ARGUMENT_PRESENT(T)) { \
9491 (ObDereferenceObject((T))); \
9492 } else { \
9493 ; \
9494 } \
9495 }
9496
9497 NTKERNELAPI
9498 NTSTATUS
9499 NTAPI
9500 PsLookupProcessThreadByCid (
9501 IN PCLIENT_ID Cid,
9502 OUT PEPROCESS *Process OPTIONAL,
9503 OUT PETHREAD *Thread
9504 );
9505
9506 NTSYSAPI
9507 NTSTATUS
9508 NTAPI
9509 RtlSetSaclSecurityDescriptor (
9510 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
9511 IN BOOLEAN SaclPresent,
9512 IN PACL Sacl,
9513 IN BOOLEAN SaclDefaulted
9514 );
9515
9516 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
9517
9518 #if (VER_PRODUCTBUILD >= 2195)
9519
9520 NTSYSAPI
9521 NTSTATUS
9522 NTAPI
9523 ZwAdjustPrivilegesToken (
9524 IN HANDLE TokenHandle,
9525 IN BOOLEAN DisableAllPrivileges,
9526 IN PTOKEN_PRIVILEGES NewState,
9527 IN ULONG BufferLength,
9528 OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL,
9529 OUT PULONG ReturnLength
9530 );
9531
9532 #endif /* (VER_PRODUCTBUILD >= 2195) */
9533
9534 NTSYSAPI
9535 NTSTATUS
9536 NTAPI
9537 ZwAlertThread (
9538 IN HANDLE ThreadHandle
9539 );
9540
9541 NTSYSAPI
9542 NTSTATUS
9543 NTAPI
9544 ZwAccessCheckAndAuditAlarm (
9545 IN PUNICODE_STRING SubsystemName,
9546 IN PVOID HandleId,
9547 IN PUNICODE_STRING ObjectTypeName,
9548 IN PUNICODE_STRING ObjectName,
9549 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
9550 IN ACCESS_MASK DesiredAccess,
9551 IN PGENERIC_MAPPING GenericMapping,
9552 IN BOOLEAN ObjectCreation,
9553 OUT PACCESS_MASK GrantedAccess,
9554 OUT PBOOLEAN AccessStatus,
9555 OUT PBOOLEAN GenerateOnClose
9556 );
9557
9558 #if (VER_PRODUCTBUILD >= 2195)
9559
9560 NTSYSAPI
9561 NTSTATUS
9562 NTAPI
9563 ZwCancelIoFile (
9564 IN HANDLE FileHandle,
9565 OUT PIO_STATUS_BLOCK IoStatusBlock
9566 );
9567
9568 #endif /* (VER_PRODUCTBUILD >= 2195) */
9569
9570 NTSYSAPI
9571 NTSTATUS
9572 NTAPI
9573 ZwClearEvent (
9574 IN HANDLE EventHandle
9575 );
9576
9577 NTSYSAPI
9578 NTSTATUS
9579 NTAPI
9580 ZwCloseObjectAuditAlarm (
9581 IN PUNICODE_STRING SubsystemName,
9582 IN PVOID HandleId,
9583 IN BOOLEAN GenerateOnClose
9584 );
9585
9586 NTSYSAPI
9587 NTSTATUS
9588 NTAPI
9589 ZwCreateSymbolicLinkObject (
9590 OUT PHANDLE SymbolicLinkHandle,
9591 IN ACCESS_MASK DesiredAccess,
9592 IN POBJECT_ATTRIBUTES ObjectAttributes,
9593 IN PUNICODE_STRING TargetName
9594 );
9595
9596 NTSYSAPI
9597 NTSTATUS
9598 NTAPI
9599 ZwFlushInstructionCache (
9600 IN HANDLE ProcessHandle,
9601 IN PVOID BaseAddress OPTIONAL,
9602 IN ULONG FlushSize
9603 );
9604
9605 NTSYSAPI
9606 NTSTATUS
9607 NTAPI
9608 ZwFlushBuffersFile(
9609 IN HANDLE FileHandle,
9610 OUT PIO_STATUS_BLOCK IoStatusBlock
9611 );
9612
9613 #if (VER_PRODUCTBUILD >= 2195)
9614
9615 NTSYSAPI
9616 NTSTATUS
9617 NTAPI
9618 ZwInitiatePowerAction (
9619 IN POWER_ACTION SystemAction,
9620 IN SYSTEM_POWER_STATE MinSystemState,
9621 IN ULONG Flags,
9622 IN BOOLEAN Asynchronous
9623 );
9624
9625 #endif /* (VER_PRODUCTBUILD >= 2195) */
9626
9627 NTSYSAPI
9628 NTSTATUS
9629 NTAPI
9630 ZwLoadKey (
9631 IN POBJECT_ATTRIBUTES KeyObjectAttributes,
9632 IN POBJECT_ATTRIBUTES FileObjectAttributes
9633 );
9634
9635 NTSYSAPI
9636 NTSTATUS
9637 NTAPI
9638 ZwOpenProcessToken (
9639 IN HANDLE ProcessHandle,
9640 IN ACCESS_MASK DesiredAccess,
9641 OUT PHANDLE TokenHandle
9642 );
9643
9644 NTSYSAPI
9645 NTSTATUS
9646 NTAPI
9647 ZwOpenThread (
9648 OUT PHANDLE ThreadHandle,
9649 IN ACCESS_MASK DesiredAccess,
9650 IN POBJECT_ATTRIBUTES ObjectAttributes,
9651 IN PCLIENT_ID ClientId
9652 );
9653
9654 NTSYSAPI
9655 NTSTATUS
9656 NTAPI
9657 ZwOpenThreadToken (
9658 IN HANDLE ThreadHandle,
9659 IN ACCESS_MASK DesiredAccess,
9660 IN BOOLEAN OpenAsSelf,
9661 OUT PHANDLE TokenHandle
9662 );
9663
9664 NTSYSAPI
9665 NTSTATUS
9666 NTAPI
9667 ZwPulseEvent (
9668 IN HANDLE EventHandle,
9669 OUT PLONG PreviousState OPTIONAL
9670 );
9671
9672 NTSYSAPI
9673 NTSTATUS
9674 NTAPI
9675 ZwQueryDefaultLocale (
9676 IN BOOLEAN ThreadOrSystem,
9677 OUT PLCID Locale
9678 );
9679
9680 #if (VER_PRODUCTBUILD >= 2195)
9681
9682 NTSYSAPI
9683 NTSTATUS
9684 NTAPI
9685 ZwQueryDirectoryObject (
9686 IN HANDLE DirectoryHandle,
9687 OUT PVOID Buffer,
9688 IN ULONG Length,
9689 IN BOOLEAN ReturnSingleEntry,
9690 IN BOOLEAN RestartScan,
9691 IN OUT PULONG Context,
9692 OUT PULONG ReturnLength OPTIONAL
9693 );
9694
9695 #endif /* (VER_PRODUCTBUILD >= 2195) */
9696
9697 NTSYSAPI
9698 NTSTATUS
9699 NTAPI
9700 ZwQueryInformationProcess (
9701 IN HANDLE ProcessHandle,
9702 IN PROCESSINFOCLASS ProcessInformationClass,
9703 OUT PVOID ProcessInformation,
9704 IN ULONG ProcessInformationLength,
9705 OUT PULONG ReturnLength OPTIONAL
9706 );
9707
9708 NTSYSAPI
9709 NTSTATUS
9710 NTAPI
9711 ZwReplaceKey (
9712 IN POBJECT_ATTRIBUTES NewFileObjectAttributes,
9713 IN HANDLE KeyHandle,
9714 IN POBJECT_ATTRIBUTES OldFileObjectAttributes
9715 );
9716
9717 NTSYSAPI
9718 NTSTATUS
9719 NTAPI
9720 ZwResetEvent (
9721 IN HANDLE EventHandle,
9722 OUT PLONG PreviousState OPTIONAL
9723 );
9724
9725 #if (VER_PRODUCTBUILD >= 2195)
9726
9727 NTSYSAPI
9728 NTSTATUS
9729 NTAPI
9730 ZwRestoreKey (
9731 IN HANDLE KeyHandle,
9732 IN HANDLE FileHandle,
9733 IN ULONG Flags
9734 );
9735
9736 #endif /* (VER_PRODUCTBUILD >= 2195) */
9737
9738 NTSYSAPI
9739 NTSTATUS
9740 NTAPI
9741 ZwSaveKey (
9742 IN HANDLE KeyHandle,
9743 IN HANDLE FileHandle
9744 );
9745
9746 NTSYSAPI
9747 NTSTATUS
9748 NTAPI
9749 ZwSetDefaultLocale (
9750 IN BOOLEAN ThreadOrSystem,
9751 IN LCID Locale
9752 );
9753
9754 #if (VER_PRODUCTBUILD >= 2195)
9755
9756 NTSYSAPI
9757 NTSTATUS
9758 NTAPI
9759 ZwSetDefaultUILanguage (
9760 IN LANGID LanguageId
9761 );
9762
9763 #endif /* (VER_PRODUCTBUILD >= 2195) */
9764
9765 NTSYSAPI
9766 NTSTATUS
9767 NTAPI
9768 ZwSetInformationProcess (
9769 IN HANDLE ProcessHandle,
9770 IN PROCESSINFOCLASS ProcessInformationClass,
9771 IN PVOID ProcessInformation,
9772 IN ULONG ProcessInformationLength
9773 );
9774
9775 NTSYSAPI
9776 NTSTATUS
9777 NTAPI
9778 ZwSetSystemTime (
9779 IN PLARGE_INTEGER NewTime,
9780 OUT PLARGE_INTEGER OldTime OPTIONAL
9781 );
9782
9783 NTSYSAPI
9784 NTSTATUS
9785 NTAPI
9786 ZwUnloadKey (
9787 IN POBJECT_ATTRIBUTES KeyObjectAttributes
9788 );
9789
9790 NTSYSAPI
9791 NTSTATUS
9792 NTAPI
9793 ZwWaitForMultipleObjects (
9794 IN ULONG HandleCount,
9795 IN PHANDLE Handles,
9796 IN WAIT_TYPE WaitType,
9797 IN BOOLEAN Alertable,
9798 IN PLARGE_INTEGER Timeout OPTIONAL
9799 );
9800
9801 NTSYSAPI
9802 NTSTATUS
9803 NTAPI
9804 ZwYieldExecution (
9805 VOID
9806 );
9807
9808 #pragma pack(pop)
9809
9810 #ifdef __cplusplus
9811 }
9812 #endif