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