[XDK][DDK]
[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 const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine;
874 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine;
875
876 #if _WIN32_WINNT >= 0x0600
877 extern 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 #if (NTDDI_VERSION >= NTDDI_WINXP)
4921 NTKERNELAPI
4922 NTSTATUS
4923 NTAPI
4924 FsRtlRegisterFileSystemFilterCallbacks(
4925 _In_ struct _DRIVER_OBJECT *FilterDriverObject,
4926 _In_ PFS_FILTER_CALLBACKS Callbacks);
4927 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4928
4929 #if (NTDDI_VERSION >= NTDDI_VISTA)
4930 NTKERNELAPI
4931 NTSTATUS
4932 NTAPI
4933 FsRtlNotifyStreamFileObject(
4934 _In_ struct _FILE_OBJECT * StreamFileObject,
4935 _In_opt_ struct _DEVICE_OBJECT *DeviceObjectHint,
4936 _In_ FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType,
4937 _In_ BOOLEAN SafeToRecurse);
4938 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4939
4940 extern NTKERNELAPI KSPIN_LOCK IoStatisticsLock;
4941 extern NTKERNELAPI ULONG IoReadOperationCount;
4942 extern NTKERNELAPI ULONG IoWriteOperationCount;
4943 extern NTKERNELAPI ULONG IoOtherOperationCount;
4944 extern NTKERNELAPI LARGE_INTEGER IoReadTransferCount;
4945 extern NTKERNELAPI LARGE_INTEGER IoWriteTransferCount;
4946 extern NTKERNELAPI LARGE_INTEGER IoOtherTransferCount;
4947
4948 #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64
4949 #define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024
4950
4951 #if (NTDDI_VERSION >= NTDDI_VISTA)
4952 typedef struct _IO_PRIORITY_INFO {
4953 ULONG Size;
4954 ULONG ThreadPriority;
4955 ULONG PagePriority;
4956 IO_PRIORITY_HINT IoPriority;
4957 } IO_PRIORITY_INFO, *PIO_PRIORITY_INFO;
4958 #endif
4959
4960 typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION {
4961 ULONG Attributes;
4962 ACCESS_MASK GrantedAccess;
4963 ULONG HandleCount;
4964 ULONG PointerCount;
4965 ULONG Reserved[10];
4966 } PUBLIC_OBJECT_BASIC_INFORMATION, *PPUBLIC_OBJECT_BASIC_INFORMATION;
4967
4968 typedef struct _PUBLIC_OBJECT_TYPE_INFORMATION {
4969 UNICODE_STRING TypeName;
4970 ULONG Reserved [22];
4971 } PUBLIC_OBJECT_TYPE_INFORMATION, *PPUBLIC_OBJECT_TYPE_INFORMATION;
4972
4973 #define SYSTEM_PAGE_PRIORITY_BITS 3
4974 #define SYSTEM_PAGE_PRIORITY_LEVELS (1 << SYSTEM_PAGE_PRIORITY_BITS)
4975
4976 /******************************************************************************
4977 * Kernel Types *
4978 ******************************************************************************/
4979 typedef struct _KAPC_STATE {
4980 LIST_ENTRY ApcListHead[MaximumMode];
4981 PKPROCESS Process;
4982 BOOLEAN KernelApcInProgress;
4983 BOOLEAN KernelApcPending;
4984 BOOLEAN UserApcPending;
4985 } KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE;
4986
4987 #define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
4988
4989 #define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
4990
4991 typedef struct _KQUEUE {
4992 DISPATCHER_HEADER Header;
4993 LIST_ENTRY EntryListHead;
4994 volatile ULONG CurrentCount;
4995 ULONG MaximumCount;
4996 LIST_ENTRY ThreadListHead;
4997 } KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
4998
4999
5000 /******************************************************************************
5001 * Kernel Functions *
5002 ******************************************************************************/
5003
5004 NTSTATUS
5005 NTAPI
5006 KeGetProcessorNumberFromIndex(
5007 _In_ ULONG ProcIndex,
5008 _Out_ PPROCESSOR_NUMBER ProcNumber);
5009
5010 ULONG
5011 NTAPI
5012 KeGetProcessorIndexFromNumber(
5013 _In_ PPROCESSOR_NUMBER ProcNumber);
5014
5015 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5016
5017
5018
5019
5020 NTKERNELAPI
5021 VOID
5022 NTAPI
5023 KeInitializeMutant(
5024 _Out_ PRKMUTANT Mutant,
5025 _In_ BOOLEAN InitialOwner);
5026
5027 _IRQL_requires_max_(DISPATCH_LEVEL)
5028 NTKERNELAPI
5029 LONG
5030 NTAPI
5031 KeReadStateMutant(
5032 _In_ PRKMUTANT Mutant);
5033
5034 _When_(Wait==0, _IRQL_requires_max_(DISPATCH_LEVEL))
5035 _When_(Wait==1, _IRQL_requires_max_(APC_LEVEL))
5036 NTKERNELAPI
5037 LONG
5038 NTAPI
5039 KeReleaseMutant(
5040 _Inout_ PRKMUTANT Mutant,
5041 _In_ KPRIORITY Increment,
5042 _In_ BOOLEAN Abandoned,
5043 _In_ BOOLEAN Wait);
5044
5045 NTKERNELAPI
5046 VOID
5047 NTAPI
5048 KeInitializeQueue(
5049 _Out_ PRKQUEUE Queue,
5050 _In_ ULONG Count);
5051
5052 _IRQL_requires_max_(DISPATCH_LEVEL)
5053 NTKERNELAPI
5054 LONG
5055 NTAPI
5056 KeReadStateQueue(
5057 _In_ PRKQUEUE Queue);
5058
5059 _IRQL_requires_min_(PASSIVE_LEVEL)
5060 _IRQL_requires_max_(DISPATCH_LEVEL)
5061 NTKERNELAPI
5062 LONG
5063 NTAPI
5064 KeInsertQueue(
5065 _Inout_ PRKQUEUE Queue,
5066 _Inout_ PLIST_ENTRY Entry);
5067
5068 _IRQL_requires_min_(PASSIVE_LEVEL)
5069 _IRQL_requires_max_(DISPATCH_LEVEL)
5070 NTKERNELAPI
5071 LONG
5072 NTAPI
5073 KeInsertHeadQueue(
5074 _Inout_ PRKQUEUE Queue,
5075 _Inout_ PLIST_ENTRY Entry);
5076
5077 _IRQL_requires_min_(PASSIVE_LEVEL)
5078 _When_((Timeout==NULL || Timeout->QuadPart!=0), _IRQL_requires_max_(APC_LEVEL))
5079 _When_((Timeout!=NULL && Timeout->QuadPart==0), _IRQL_requires_max_(DISPATCH_LEVEL))
5080 NTKERNELAPI
5081 PLIST_ENTRY
5082 NTAPI
5083 KeRemoveQueue(
5084 _Inout_ PRKQUEUE Queue,
5085 _In_ KPROCESSOR_MODE WaitMode,
5086 _In_opt_ PLARGE_INTEGER Timeout);
5087
5088 _IRQL_requires_max_(APC_LEVEL)
5089 NTKERNELAPI
5090 VOID
5091 NTAPI
5092 KeAttachProcess(
5093 _Inout_ PKPROCESS Process);
5094
5095 _IRQL_requires_max_(APC_LEVEL)
5096 NTKERNELAPI
5097 VOID
5098 NTAPI
5099 KeDetachProcess(VOID);
5100
5101 _IRQL_requires_max_(DISPATCH_LEVEL)
5102 NTKERNELAPI
5103 PLIST_ENTRY
5104 NTAPI
5105 KeRundownQueue(
5106 _Inout_ PRKQUEUE Queue);
5107
5108 _IRQL_requires_max_(APC_LEVEL)
5109 NTKERNELAPI
5110 VOID
5111 NTAPI
5112 KeStackAttachProcess(
5113 _Inout_ PKPROCESS Process,
5114 _Out_ PKAPC_STATE ApcState);
5115
5116 _IRQL_requires_max_(APC_LEVEL)
5117 NTKERNELAPI
5118 VOID
5119 NTAPI
5120 KeUnstackDetachProcess(
5121 _In_ PKAPC_STATE ApcState);
5122
5123 _IRQL_requires_min_(PASSIVE_LEVEL)
5124 _IRQL_requires_max_(DISPATCH_LEVEL)
5125 NTKERNELAPI
5126 UCHAR
5127 NTAPI
5128 KeSetIdealProcessorThread(
5129 _Inout_ PKTHREAD Thread,
5130 _In_ UCHAR Processor);
5131
5132 _IRQL_requires_max_(APC_LEVEL)
5133 NTKERNELAPI
5134 BOOLEAN
5135 NTAPI
5136 KeSetKernelStackSwapEnable(
5137 _In_ BOOLEAN Enable);
5138
5139 #if defined(_X86_)
5140 _Requires_lock_not_held_(*SpinLock)
5141 _Acquires_lock_(*SpinLock)
5142 _IRQL_raises_(SYNCH_LEVEL)
5143 _IRQL_saves_
5144 NTHALAPI
5145 KIRQL
5146 FASTCALL
5147 KeAcquireSpinLockRaiseToSynch(
5148 _Inout_ PKSPIN_LOCK SpinLock);
5149 #else
5150 _Requires_lock_not_held_(*SpinLock)
5151 _Acquires_lock_(*SpinLock)
5152 _IRQL_raises_(SYNCH_LEVEL)
5153 _IRQL_saves_
5154 NTKERNELAPI
5155 KIRQL
5156 KeAcquireSpinLockRaiseToSynch(
5157 _Inout_ PKSPIN_LOCK SpinLock);
5158 #endif
5159
5160 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5161
5162 #if (NTDDI_VERSION >= NTDDI_WINXP)
5163
5164
5165 _Requires_lock_not_held_(Number)
5166 _Acquires_lock_(Number)
5167 _IRQL_raises_(DISPATCH_LEVEL)
5168 _DECL_HAL_KE_IMPORT
5169 KIRQL
5170 FASTCALL
5171 KeAcquireQueuedSpinLock(
5172 _In_ KSPIN_LOCK_QUEUE_NUMBER Number);
5173
5174 _Requires_lock_held_(Number)
5175 _Releases_lock_(Number)
5176 _DECL_HAL_KE_IMPORT
5177 VOID
5178 FASTCALL
5179 KeReleaseQueuedSpinLock(
5180 _In_ KSPIN_LOCK_QUEUE_NUMBER Number,
5181 _In_ KIRQL OldIrql);
5182
5183 _Must_inspect_result_
5184 _Post_satisfies_(return == 1 || return == 0)
5185 _DECL_HAL_KE_IMPORT
5186 LOGICAL
5187 FASTCALL
5188 KeTryToAcquireQueuedSpinLock(
5189 _In_ KSPIN_LOCK_QUEUE_NUMBER Number,
5190 _Out_ _At_(*OldIrql, _IRQL_saves_) PKIRQL OldIrql);
5191
5192 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5193
5194
5195
5196
5197
5198 #if (NTDDI_VERSION >= NTDDI_VISTA)
5199
5200 _IRQL_requires_max_(DISPATCH_LEVEL)
5201 NTKERNELAPI
5202 VOID
5203 KeQueryOwnerMutant(
5204 _In_ PKMUTANT Mutant,
5205 _Out_ PCLIENT_ID ClientId);
5206
5207 _IRQL_requires_min_(PASSIVE_LEVEL)
5208 _When_((Timeout==NULL || *Timeout!=0), _IRQL_requires_max_(APC_LEVEL))
5209 _When_((Timeout!=NULL && *Timeout==0), _IRQL_requires_max_(DISPATCH_LEVEL))
5210 NTKERNELAPI
5211 ULONG
5212 NTAPI
5213 KeRemoveQueueEx(
5214 _Inout_ PKQUEUE Queue,
5215 _In_ KPROCESSOR_MODE WaitMode,
5216 _In_ BOOLEAN Alertable,
5217 _In_opt_ PLARGE_INTEGER Timeout,
5218 _Out_writes_to_(Count, return) PLIST_ENTRY *EntryArray,
5219 _In_ ULONG Count);
5220
5221 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5222
5223
5224 #define INVALID_PROCESSOR_INDEX 0xffffffff
5225
5226 #define EX_PUSH_LOCK ULONG_PTR
5227 #define PEX_PUSH_LOCK PULONG_PTR
5228 /******************************************************************************
5229 * Executive Functions *
5230 ******************************************************************************/
5231
5232
5233 #define ExDisableResourceBoost ExDisableResourceBoostLite
5234
5235 VOID
5236 ExInitializePushLock(
5237 _Out_ PEX_PUSH_LOCK PushLock);
5238
5239 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5240
5241 _IRQL_requires_max_(DISPATCH_LEVEL)
5242 NTKERNELAPI
5243 SIZE_T
5244 NTAPI
5245 ExQueryPoolBlockSize(
5246 _In_ PVOID PoolBlock,
5247 _Out_ PBOOLEAN QuotaCharged);
5248
5249 _IRQL_requires_max_(DISPATCH_LEVEL)
5250 VOID
5251 ExAdjustLookasideDepth(VOID);
5252
5253 _IRQL_requires_max_(DISPATCH_LEVEL)
5254 NTKERNELAPI
5255 VOID
5256 NTAPI
5257 ExDisableResourceBoostLite(
5258 _In_ PERESOURCE Resource);
5259 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5260
5261 #if (NTDDI_VERSION >= NTDDI_WINXP)
5262
5263 PSLIST_ENTRY
5264 FASTCALL
5265 InterlockedPushListSList(
5266 _Inout_ PSLIST_HEADER ListHead,
5267 _Inout_ __drv_aliasesMem PSLIST_ENTRY List,
5268 _Inout_ PSLIST_ENTRY ListEnd,
5269 _In_ ULONG Count);
5270 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5271
5272 /******************************************************************************
5273 * Security Manager Functions *
5274 ******************************************************************************/
5275
5276 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5277
5278
5279 NTKERNELAPI
5280 VOID
5281 NTAPI
5282 SeReleaseSubjectContext(
5283 _Inout_ PSECURITY_SUBJECT_CONTEXT SubjectContext);
5284
5285 NTKERNELAPI
5286 BOOLEAN
5287 NTAPI
5288 SePrivilegeCheck(
5289 _Inout_ PPRIVILEGE_SET RequiredPrivileges,
5290 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext,
5291 _In_ KPROCESSOR_MODE AccessMode);
5292
5293 NTKERNELAPI
5294 VOID
5295 NTAPI
5296 SeOpenObjectAuditAlarm(
5297 _In_ PUNICODE_STRING ObjectTypeName,
5298 _In_opt_ PVOID Object,
5299 _In_opt_ PUNICODE_STRING AbsoluteObjectName,
5300 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
5301 _In_ PACCESS_STATE AccessState,
5302 _In_ BOOLEAN ObjectCreated,
5303 _In_ BOOLEAN AccessGranted,
5304 _In_ KPROCESSOR_MODE AccessMode,
5305 _Out_ PBOOLEAN GenerateOnClose);
5306
5307 NTKERNELAPI
5308 VOID
5309 NTAPI
5310 SeOpenObjectForDeleteAuditAlarm(
5311 _In_ PUNICODE_STRING ObjectTypeName,
5312 _In_opt_ PVOID Object,
5313 _In_opt_ PUNICODE_STRING AbsoluteObjectName,
5314 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
5315 _In_ PACCESS_STATE AccessState,
5316 _In_ BOOLEAN ObjectCreated,
5317 _In_ BOOLEAN AccessGranted,
5318 _In_ KPROCESSOR_MODE AccessMode,
5319 _Out_ PBOOLEAN GenerateOnClose);
5320
5321 NTKERNELAPI
5322 VOID
5323 NTAPI
5324 SeDeleteObjectAuditAlarm(
5325 _In_ PVOID Object,
5326 _In_ HANDLE Handle);
5327
5328 NTKERNELAPI
5329 TOKEN_TYPE
5330 NTAPI
5331 SeTokenType(
5332 _In_ PACCESS_TOKEN Token);
5333
5334 NTKERNELAPI
5335 BOOLEAN
5336 NTAPI
5337 SeTokenIsAdmin(
5338 _In_ PACCESS_TOKEN Token);
5339
5340 NTKERNELAPI
5341 BOOLEAN
5342 NTAPI
5343 SeTokenIsRestricted(
5344 _In_ PACCESS_TOKEN Token);
5345
5346 NTKERNELAPI
5347 NTSTATUS
5348 NTAPI
5349 SeQueryAuthenticationIdToken(
5350 _In_ PACCESS_TOKEN Token,
5351 _Out_ PLUID AuthenticationId);
5352
5353 NTKERNELAPI
5354 NTSTATUS
5355 NTAPI
5356 SeQuerySessionIdToken(
5357 _In_ PACCESS_TOKEN Token,
5358 _Out_ PULONG SessionId);
5359
5360 NTKERNELAPI
5361 NTSTATUS
5362 NTAPI
5363 SeCreateClientSecurity(
5364 _In_ PETHREAD ClientThread,
5365 _In_ PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos,
5366 _In_ BOOLEAN RemoteSession,
5367 _Out_ PSECURITY_CLIENT_CONTEXT ClientContext);
5368
5369 NTKERNELAPI
5370 VOID
5371 NTAPI
5372 SeImpersonateClient(
5373 _In_ PSECURITY_CLIENT_CONTEXT ClientContext,
5374 _In_opt_ PETHREAD ServerThread);
5375
5376 NTKERNELAPI
5377 NTSTATUS
5378 NTAPI
5379 SeImpersonateClientEx(
5380 _In_ PSECURITY_CLIENT_CONTEXT ClientContext,
5381 _In_opt_ PETHREAD ServerThread);
5382
5383 NTKERNELAPI
5384 NTSTATUS
5385 NTAPI
5386 SeCreateClientSecurityFromSubjectContext(
5387 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext,
5388 _In_ PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos,
5389 _In_ BOOLEAN ServerIsRemote,
5390 _Out_ PSECURITY_CLIENT_CONTEXT ClientContext);
5391
5392 NTKERNELAPI
5393 NTSTATUS
5394 NTAPI
5395 SeQuerySecurityDescriptorInfo(
5396 _In_ PSECURITY_INFORMATION SecurityInformation,
5397 _Out_writes_bytes_(*Length) PSECURITY_DESCRIPTOR SecurityDescriptor,
5398 _Inout_ PULONG Length,
5399 _Inout_ PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor);
5400
5401 NTKERNELAPI
5402 NTSTATUS
5403 NTAPI
5404 SeSetSecurityDescriptorInfo(
5405 _In_opt_ PVOID Object,
5406 _In_ PSECURITY_INFORMATION SecurityInformation,
5407 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
5408 _Inout_ PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
5409 _In_ POOL_TYPE PoolType,
5410 _In_ PGENERIC_MAPPING GenericMapping);
5411
5412 NTKERNELAPI
5413 NTSTATUS
5414 NTAPI
5415 SeSetSecurityDescriptorInfoEx(
5416 _In_opt_ PVOID Object,
5417 _In_ PSECURITY_INFORMATION SecurityInformation,
5418 _In_ PSECURITY_DESCRIPTOR ModificationDescriptor,
5419 _Inout_ PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
5420 _In_ ULONG AutoInheritFlags,
5421 _In_ POOL_TYPE PoolType,
5422 _In_ PGENERIC_MAPPING GenericMapping);
5423
5424 NTKERNELAPI
5425 NTSTATUS
5426 NTAPI
5427 SeAppendPrivileges(
5428 _Inout_ PACCESS_STATE AccessState,
5429 _In_ PPRIVILEGE_SET Privileges);
5430
5431 NTKERNELAPI
5432 BOOLEAN
5433 NTAPI
5434 SeAuditingFileEvents(
5435 _In_ BOOLEAN AccessGranted,
5436 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
5437
5438 NTKERNELAPI
5439 BOOLEAN
5440 NTAPI
5441 SeAuditingFileOrGlobalEvents(
5442 _In_ BOOLEAN AccessGranted,
5443 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
5444 _In_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext);
5445
5446 VOID
5447 NTAPI
5448 SeSetAccessStateGenericMapping(
5449 _Inout_ PACCESS_STATE AccessState,
5450 _In_ PGENERIC_MAPPING GenericMapping);
5451
5452 NTKERNELAPI
5453 NTSTATUS
5454 NTAPI
5455 SeRegisterLogonSessionTerminatedRoutine(
5456 _In_ PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine);
5457
5458 NTKERNELAPI
5459 NTSTATUS
5460 NTAPI
5461 SeUnregisterLogonSessionTerminatedRoutine(
5462 _In_ PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine);
5463
5464 NTKERNELAPI
5465 NTSTATUS
5466 NTAPI
5467 SeMarkLogonSessionForTerminationNotification(
5468 _In_ PLUID LogonId);
5469
5470 NTKERNELAPI
5471 NTSTATUS
5472 NTAPI
5473 SeQueryInformationToken(
5474 _In_ PACCESS_TOKEN Token,
5475 _In_ TOKEN_INFORMATION_CLASS TokenInformationClass,
5476 _Outptr_result_buffer_(_Inexpressible_(token-dependent)) PVOID *TokenInformation);
5477
5478 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5479 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
5480 NTKERNELAPI
5481 BOOLEAN
5482 NTAPI
5483 SeAuditingHardLinkEvents(
5484 _In_ BOOLEAN AccessGranted,
5485 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
5486 #endif
5487
5488 #if (NTDDI_VERSION >= NTDDI_WINXP)
5489
5490 NTKERNELAPI
5491 NTSTATUS
5492 NTAPI
5493 SeFilterToken(
5494 _In_ PACCESS_TOKEN ExistingToken,
5495 _In_ ULONG Flags,
5496 _In_opt_ PTOKEN_GROUPS SidsToDisable,
5497 _In_opt_ PTOKEN_PRIVILEGES PrivilegesToDelete,
5498 _In_opt_ PTOKEN_GROUPS RestrictedSids,
5499 _Outptr_ PACCESS_TOKEN *FilteredToken);
5500
5501 NTKERNELAPI
5502 VOID
5503 NTAPI
5504 SeAuditHardLinkCreation(
5505 _In_ PUNICODE_STRING FileName,
5506 _In_ PUNICODE_STRING LinkName,
5507 _In_ BOOLEAN bSuccess);
5508
5509 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5510
5511 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
5512
5513 NTKERNELAPI
5514 BOOLEAN
5515 NTAPI
5516 SeAuditingFileEventsWithContext(
5517 _In_ BOOLEAN AccessGranted,
5518 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
5519 _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext);
5520
5521 NTKERNELAPI
5522 BOOLEAN
5523 NTAPI
5524 SeAuditingHardLinkEventsWithContext(
5525 _In_ BOOLEAN AccessGranted,
5526 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
5527 _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext);
5528
5529 #endif
5530
5531
5532 #if (NTDDI_VERSION >= NTDDI_VISTA)
5533
5534 NTKERNELAPI
5535 VOID
5536 NTAPI
5537 SeOpenObjectAuditAlarmWithTransaction(
5538 _In_ PUNICODE_STRING ObjectTypeName,
5539 _In_opt_ PVOID Object,
5540 _In_opt_ PUNICODE_STRING AbsoluteObjectName,
5541 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
5542 _In_ PACCESS_STATE AccessState,
5543 _In_ BOOLEAN ObjectCreated,
5544 _In_ BOOLEAN AccessGranted,
5545 _In_ KPROCESSOR_MODE AccessMode,
5546 _In_opt_ GUID *TransactionId,
5547 _Out_ PBOOLEAN GenerateOnClose);
5548
5549 NTKERNELAPI
5550 VOID
5551 NTAPI
5552 SeOpenObjectForDeleteAuditAlarmWithTransaction(
5553 _In_ PUNICODE_STRING ObjectTypeName,
5554 _In_opt_ PVOID Object,
5555 _In_opt_ PUNICODE_STRING AbsoluteObjectName,
5556 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
5557 _In_ PACCESS_STATE AccessState,
5558 _In_ BOOLEAN ObjectCreated,
5559 _In_ BOOLEAN AccessGranted,
5560 _In_ KPROCESSOR_MODE AccessMode,
5561 _In_opt_ GUID *TransactionId,
5562 _Out_ PBOOLEAN GenerateOnClose);
5563
5564 NTKERNELAPI
5565 VOID
5566 NTAPI
5567 SeExamineSacl(
5568 _In_ PACL Sacl,
5569 _In_ PACCESS_TOKEN Token,
5570 _In_ ACCESS_MASK DesiredAccess,
5571 _In_ BOOLEAN AccessGranted,
5572 _Out_ PBOOLEAN GenerateAudit,
5573 _Out_ PBOOLEAN GenerateAlarm);
5574
5575 NTKERNELAPI
5576 VOID
5577 NTAPI
5578 SeDeleteObjectAuditAlarmWithTransaction(
5579 _In_ PVOID Object,
5580 _In_ HANDLE Handle,
5581 _In_opt_ GUID *TransactionId);
5582
5583 NTKERNELAPI
5584 VOID
5585 NTAPI
5586 SeQueryTokenIntegrity(
5587 _In_ PACCESS_TOKEN Token,
5588 _Inout_ PSID_AND_ATTRIBUTES IntegritySA);
5589
5590 NTKERNELAPI
5591 NTSTATUS
5592 NTAPI
5593 SeSetSessionIdToken(
5594 _In_ PACCESS_TOKEN Token,
5595 _In_ ULONG SessionId);
5596
5597 NTKERNELAPI
5598 VOID
5599 NTAPI
5600 SeAuditHardLinkCreationWithTransaction(
5601 _In_ PUNICODE_STRING FileName,
5602 _In_ PUNICODE_STRING LinkName,
5603 _In_ BOOLEAN bSuccess,
5604 _In_opt_ GUID *TransactionId);
5605
5606 NTKERNELAPI
5607 VOID
5608 NTAPI
5609 SeAuditTransactionStateChange(
5610 _In_ GUID *TransactionId,
5611 _In_ GUID *ResourceManagerId,
5612 _In_ ULONG NewTransactionState);
5613 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5614
5615 #if (NTDDI_VERSION >= NTDDI_VISTA || (NTDDI_VERSION >= NTDDI_WINXPSP2 && NTDDI_VERSION < NTDDI_WS03))
5616 NTKERNELAPI
5617 BOOLEAN
5618 NTAPI
5619 SeTokenIsWriteRestricted(
5620 _In_ PACCESS_TOKEN Token);
5621 #endif
5622
5623 #if (NTDDI_VERSION >= NTDDI_WIN7)
5624
5625 NTKERNELAPI
5626 BOOLEAN
5627 NTAPI
5628 SeAuditingAnyFileEventsWithContext(
5629 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
5630 _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext,
5631 _Out_opt_ PBOOLEAN StagingEnabled);
5632
5633 NTKERNELAPI
5634 VOID
5635 NTAPI
5636 SeExamineGlobalSacl(
5637 _In_ PUNICODE_STRING ObjectType,
5638 _In_ PACL ResourceSacl,
5639 _In_ PACCESS_TOKEN Token,
5640 _In_ ACCESS_MASK DesiredAccess,
5641 _In_ BOOLEAN AccessGranted,
5642 _Inout_ PBOOLEAN GenerateAudit,
5643 _Inout_opt_ PBOOLEAN GenerateAlarm);
5644
5645 NTKERNELAPI
5646 VOID
5647 NTAPI
5648 SeMaximumAuditMaskFromGlobalSacl(
5649 _In_opt_ PUNICODE_STRING ObjectTypeName,
5650 _In_ ACCESS_MASK GrantedAccess,
5651 _In_ PACCESS_TOKEN Token,
5652 _Inout_ PACCESS_MASK AuditMask);
5653
5654 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5655
5656 NTSTATUS
5657 NTAPI
5658 SeReportSecurityEventWithSubCategory(
5659 _In_ ULONG Flags,
5660 _In_ PUNICODE_STRING SourceName,
5661 _In_opt_ PSID UserSid,
5662 _In_ PSE_ADT_PARAMETER_ARRAY AuditParameters,
5663 _In_ ULONG AuditSubcategoryId);
5664
5665 BOOLEAN
5666 NTAPI
5667 SeAccessCheckFromState(
5668 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
5669 _In_ PTOKEN_ACCESS_INFORMATION PrimaryTokenInformation,
5670 _In_opt_ PTOKEN_ACCESS_INFORMATION ClientTokenInformation,
5671 _In_ ACCESS_MASK DesiredAccess,
5672 _In_ ACCESS_MASK PreviouslyGrantedAccess,
5673 _Outptr_opt_result_maybenull_ PPRIVILEGE_SET *Privileges,
5674 _In_ PGENERIC_MAPPING GenericMapping,
5675 _In_ KPROCESSOR_MODE AccessMode,
5676 _Out_ PACCESS_MASK GrantedAccess,
5677 _Out_ PNTSTATUS AccessStatus);
5678
5679 NTKERNELAPI
5680 VOID
5681 NTAPI
5682 SeFreePrivileges(
5683 _In_ PPRIVILEGE_SET Privileges);
5684
5685 NTSTATUS
5686 NTAPI
5687 SeLocateProcessImageName(
5688 _Inout_ PEPROCESS Process,
5689 _Outptr_ PUNICODE_STRING *pImageFileName);
5690
5691 #define SeLengthSid( Sid ) \
5692 (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
5693
5694 #define SeDeleteClientSecurity(C) { \
5695 if (SeTokenType((C)->ClientToken) == TokenPrimary) { \
5696 PsDereferencePrimaryToken( (C)->ClientToken ); \
5697 } else { \
5698 PsDereferenceImpersonationToken( (C)->ClientToken ); \
5699 } \
5700 }
5701
5702 #define SeStopImpersonatingClient() PsRevertToSelf()
5703
5704 #define SeQuerySubjectContextToken( SubjectContext ) \
5705 ( ARGUMENT_PRESENT( \
5706 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken \
5707 ) ? \
5708 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken : \
5709 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
5710
5711 extern NTKERNELAPI PSE_EXPORTS SeExports;
5712
5713 /******************************************************************************
5714 * Process Manager Functions *
5715 ******************************************************************************/
5716
5717 _Must_inspect_result_
5718 _IRQL_requires_max_(APC_LEVEL)
5719 NTKERNELAPI
5720 NTSTATUS
5721 NTAPI
5722 PsLookupProcessByProcessId(
5723 _In_ HANDLE ProcessId,
5724 _Outptr_ PEPROCESS *Process);
5725
5726 _Must_inspect_result_
5727 _IRQL_requires_max_(APC_LEVEL)
5728 NTKERNELAPI
5729 NTSTATUS
5730 NTAPI
5731 PsLookupThreadByThreadId(
5732 _In_ HANDLE UniqueThreadId,
5733 _Outptr_ PETHREAD *Thread);
5734
5735 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5736
5737
5738 _IRQL_requires_max_(APC_LEVEL)
5739 NTKERNELAPI
5740 PACCESS_TOKEN
5741 NTAPI
5742 PsReferenceImpersonationToken(
5743 _Inout_ PETHREAD Thread,
5744 _Out_ PBOOLEAN CopyOnOpen,
5745 _Out_ PBOOLEAN EffectiveOnly,
5746 _Out_ PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
5747
5748 _IRQL_requires_max_(APC_LEVEL)
5749 NTKERNELAPI
5750 LARGE_INTEGER
5751 NTAPI
5752 PsGetProcessExitTime(VOID);
5753
5754 _IRQL_requires_max_(DISPATCH_LEVEL)
5755 NTKERNELAPI
5756 BOOLEAN
5757 NTAPI
5758 PsIsThreadTerminating(
5759 _In_ PETHREAD Thread);
5760
5761 _Must_inspect_result_
5762 _IRQL_requires_max_(PASSIVE_LEVEL)
5763 NTKERNELAPI
5764 NTSTATUS
5765 NTAPI
5766 PsImpersonateClient(
5767 _Inout_ PETHREAD Thread,
5768 _In_opt_ PACCESS_TOKEN Token,
5769 _In_ BOOLEAN CopyOnOpen,
5770 _In_ BOOLEAN EffectiveOnly,
5771 _In_ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
5772
5773 _IRQL_requires_max_(PASSIVE_LEVEL)
5774 NTKERNELAPI
5775 BOOLEAN
5776 NTAPI
5777 PsDisableImpersonation(
5778 _Inout_ PETHREAD Thread,
5779 _Inout_ PSE_IMPERSONATION_STATE ImpersonationState);
5780
5781 _IRQL_requires_max_(PASSIVE_LEVEL)
5782 NTKERNELAPI
5783 VOID
5784 NTAPI
5785 PsRestoreImpersonation(
5786 _Inout_ PETHREAD Thread,
5787 _In_ PSE_IMPERSONATION_STATE ImpersonationState);
5788
5789 _IRQL_requires_max_(PASSIVE_LEVEL)
5790 NTKERNELAPI
5791 VOID
5792 NTAPI
5793 PsRevertToSelf(VOID);
5794
5795 _IRQL_requires_max_(APC_LEVEL)
5796 NTKERNELAPI
5797 VOID
5798 NTAPI
5799 PsChargePoolQuota(
5800 _In_ PEPROCESS Process,
5801 _In_ POOL_TYPE PoolType,
5802 _In_ ULONG_PTR Amount);
5803
5804 _IRQL_requires_max_(APC_LEVEL)
5805 NTKERNELAPI
5806 VOID
5807 NTAPI
5808 PsReturnPoolQuota(
5809 _In_ PEPROCESS Process,
5810 _In_ POOL_TYPE PoolType,
5811 _In_ ULONG_PTR Amount);
5812
5813 _IRQL_requires_max_(PASSIVE_LEVEL)
5814 NTKERNELAPI
5815 NTSTATUS
5816 NTAPI
5817 PsAssignImpersonationToken(
5818 _In_ PETHREAD Thread,
5819 _In_opt_ HANDLE Token);
5820
5821 _IRQL_requires_max_(PASSIVE_LEVEL)
5822 NTKERNELAPI
5823 HANDLE
5824 NTAPI
5825 PsReferencePrimaryToken(
5826 _Inout_ PEPROCESS Process);
5827 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5828 #if (NTDDI_VERSION >= NTDDI_WINXP)
5829
5830
5831 _IRQL_requires_max_(PASSIVE_LEVEL)
5832 NTKERNELAPI
5833 VOID
5834 NTAPI
5835 PsDereferencePrimaryToken(
5836 _In_ PACCESS_TOKEN PrimaryToken);
5837
5838 _IRQL_requires_max_(PASSIVE_LEVEL)
5839 NTKERNELAPI
5840 VOID
5841 NTAPI
5842 PsDereferenceImpersonationToken(
5843 _In_ PACCESS_TOKEN ImpersonationToken);
5844
5845 _Must_inspect_result_
5846 _IRQL_requires_max_(APC_LEVEL)
5847 NTKERNELAPI
5848 NTSTATUS
5849 NTAPI
5850 PsChargeProcessPoolQuota(
5851 _In_ PEPROCESS Process,
5852 _In_ POOL_TYPE PoolType,
5853 _In_ ULONG_PTR Amount);
5854
5855 NTKERNELAPI
5856 BOOLEAN
5857 NTAPI
5858 PsIsSystemThread(
5859 _In_ PETHREAD Thread);
5860 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5861
5862 /******************************************************************************
5863 * I/O Manager Functions *
5864 ******************************************************************************/
5865
5866 #define IoIsFileOpenedExclusively(FileObject) ( \
5867 (BOOLEAN) !( \
5868 (FileObject)->SharedRead || \
5869 (FileObject)->SharedWrite || \
5870 (FileObject)->SharedDelete \
5871 ) \
5872 )
5873
5874 #if (NTDDI_VERSION == NTDDI_WIN2K)
5875 NTKERNELAPI
5876 NTSTATUS
5877 NTAPI
5878 IoRegisterFsRegistrationChangeEx(
5879 _In_ PDRIVER_OBJECT DriverObject,
5880 _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
5881 #endif
5882 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5883
5884
5885 NTKERNELAPI
5886 VOID
5887 NTAPI
5888 IoAcquireVpbSpinLock(
5889 _Out_ PKIRQL Irql);
5890
5891 NTKERNELAPI
5892 NTSTATUS
5893 NTAPI
5894 IoCheckDesiredAccess(
5895 _Inout_ PACCESS_MASK DesiredAccess,
5896 _In_ ACCESS_MASK GrantedAccess);
5897
5898 NTKERNELAPI
5899 NTSTATUS
5900 NTAPI
5901 IoCheckEaBufferValidity(
5902 _In_ PFILE_FULL_EA_INFORMATION EaBuffer,
5903 _In_ ULONG EaLength,
5904 _Out_ PULONG ErrorOffset);
5905
5906 NTKERNELAPI
5907 NTSTATUS
5908 NTAPI
5909 IoCheckFunctionAccess(
5910 _In_ ACCESS_MASK GrantedAccess,
5911 _In_ UCHAR MajorFunction,
5912 _In_ UCHAR MinorFunction,
5913 _In_ ULONG IoControlCode,
5914 _In_opt_ PVOID Argument1,
5915 _In_opt_ PVOID Argument2);
5916
5917 NTKERNELAPI
5918 NTSTATUS
5919 NTAPI
5920 IoCheckQuerySetFileInformation(
5921 _In_ FILE_INFORMATION_CLASS FileInformationClass,
5922 _In_ ULONG Length,
5923 _In_ BOOLEAN SetOperation);
5924
5925 NTKERNELAPI
5926 NTSTATUS
5927 NTAPI
5928 IoCheckQuerySetVolumeInformation(
5929 _In_ FS_INFORMATION_CLASS FsInformationClass,
5930 _In_ ULONG Length,
5931 _In_ BOOLEAN SetOperation);
5932
5933 NTKERNELAPI
5934 NTSTATUS
5935 NTAPI
5936 IoCheckQuotaBufferValidity(
5937 _In_ PFILE_QUOTA_INFORMATION QuotaBuffer,
5938 _In_ ULONG QuotaLength,
5939 _Out_ PULONG ErrorOffset);
5940
5941 NTKERNELAPI
5942 PFILE_OBJECT
5943 NTAPI
5944 IoCreateStreamFileObject(
5945 _In_opt_ PFILE_OBJECT FileObject,
5946 _In_opt_ PDEVICE_OBJECT DeviceObject);
5947
5948 NTKERNELAPI
5949 PFILE_OBJECT
5950 NTAPI
5951 IoCreateStreamFileObjectLite(
5952 _In_opt_ PFILE_OBJECT FileObject,
5953 _In_opt_ PDEVICE_OBJECT DeviceObject);
5954
5955 NTKERNELAPI
5956 BOOLEAN
5957 NTAPI
5958 IoFastQueryNetworkAttributes(
5959 _In_ POBJECT_ATTRIBUTES ObjectAttributes,
5960 _In_ ACCESS_MASK DesiredAccess,
5961 _In_ ULONG OpenOptions,
5962 _Out_ PIO_STATUS_BLOCK IoStatus,
5963 _Out_ PFILE_NETWORK_OPEN_INFORMATION Buffer);
5964
5965 NTKERNELAPI
5966 NTSTATUS
5967 NTAPI
5968 IoPageRead(
5969 _In_ PFILE_OBJECT FileObject,
5970 _In_ PMDL Mdl,
5971 _In_ PLARGE_INTEGER Offset,
5972 _In_ PKEVENT Event,
5973 _Out_ PIO_STATUS_BLOCK IoStatusBlock);
5974
5975 NTKERNELAPI
5976 PDEVICE_OBJECT
5977 NTAPI
5978 IoGetBaseFileSystemDeviceObject(
5979 _In_ PFILE_OBJECT FileObject);
5980
5981 _IRQL_requires_max_(PASSIVE_LEVEL)
5982 NTKERNELAPI
5983 PCONFIGURATION_INFORMATION
5984 NTAPI
5985 IoGetConfigurationInformation(VOID);
5986
5987 NTKERNELAPI
5988 ULONG
5989 NTAPI
5990 IoGetRequestorProcessId(
5991 _In_ PIRP Irp);
5992
5993 NTKERNELAPI
5994 PEPROCESS
5995 NTAPI
5996 IoGetRequestorProcess(
5997 _In_ PIRP Irp);
5998
5999 NTKERNELAPI
6000 PIRP
6001 NTAPI
6002 IoGetTopLevelIrp(VOID);
6003
6004 NTKERNELAPI
6005 BOOLEAN
6006 NTAPI
6007 IoIsOperationSynchronous(
6008 _In_ PIRP Irp);
6009
6010 NTKERNELAPI
6011 BOOLEAN
6012 NTAPI
6013 IoIsSystemThread(
6014 _In_ PETHREAD Thread);
6015
6016 NTKERNELAPI
6017 BOOLEAN
6018 NTAPI
6019 IoIsValidNameGraftingBuffer(
6020 _In_ PIRP Irp,
6021 _In_ PREPARSE_DATA_BUFFER ReparseBuffer);
6022
6023 NTKERNELAPI
6024 NTSTATUS
6025 NTAPI
6026 IoQueryFileInformation(
6027 _In_ PFILE_OBJECT FileObject,
6028 _In_ FILE_INFORMATION_CLASS FileInformationClass,
6029 _In_ ULONG Length,
6030 _Out_ PVOID FileInformation,
6031 _Out_ PULONG ReturnedLength);
6032
6033 NTKERNELAPI
6034 NTSTATUS
6035 NTAPI
6036 IoQueryVolumeInformation(
6037 _In_ PFILE_OBJECT FileObject,
6038 _In_ FS_INFORMATION_CLASS FsInformationClass,
6039 _In_ ULONG Length,
6040 _Out_ PVOID FsInformation,
6041 _Out_ PULONG ReturnedLength);
6042
6043 NTKERNELAPI
6044 VOID
6045 NTAPI
6046 IoQueueThreadIrp(
6047 _In_ PIRP Irp);
6048
6049 NTKERNELAPI
6050 VOID
6051 NTAPI
6052 IoRegisterFileSystem(
6053 _In_ __drv_aliasesMem PDEVICE_OBJECT DeviceObject);
6054
6055 NTKERNELAPI
6056 NTSTATUS
6057 NTAPI
6058 IoRegisterFsRegistrationChange(
6059 _In_ PDRIVER_OBJECT DriverObject,
6060 _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
6061
6062 NTKERNELAPI
6063 VOID
6064 NTAPI
6065 IoReleaseVpbSpinLock(
6066 _In_ KIRQL Irql);
6067
6068 NTKERNELAPI
6069 VOID
6070 NTAPI
6071 IoSetDeviceToVerify(
6072 _In_ PETHREAD Thread,
6073 _In_opt_ PDEVICE_OBJECT DeviceObject);
6074
6075 NTKERNELAPI
6076 NTSTATUS
6077 NTAPI
6078 IoSetInformation(
6079 _In_ PFILE_OBJECT FileObject,
6080 _In_ FILE_INFORMATION_CLASS FileInformationClass,
6081 _In_ ULONG Length,
6082 _In_ PVOID FileInformation);
6083
6084 NTKERNELAPI
6085 VOID
6086 NTAPI
6087 IoSetTopLevelIrp(
6088 _In_opt_ PIRP Irp);
6089
6090 NTKERNELAPI
6091 NTSTATUS
6092 NTAPI
6093 IoSynchronousPageWrite(
6094 _In_ PFILE_OBJECT FileObject,
6095 _In_ PMDL Mdl,
6096 _In_ PLARGE_INTEGER FileOffset,
6097 _In_ PKEVENT Event,
6098 _Out_ PIO_STATUS_BLOCK IoStatusBlock);
6099
6100 NTKERNELAPI
6101 PEPROCESS
6102 NTAPI
6103 IoThreadToProcess(
6104 _In_ PETHREAD Thread);
6105
6106 NTKERNELAPI
6107 VOID
6108 NTAPI
6109 IoUnregisterFileSystem(
6110 _In_ PDEVICE_OBJECT DeviceObject);
6111
6112 NTKERNELAPI
6113 VOID
6114 NTAPI
6115 IoUnregisterFsRegistrationChange(
6116 _In_ PDRIVER_OBJECT DriverObject,
6117 _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
6118
6119 NTKERNELAPI
6120 NTSTATUS
6121 NTAPI
6122 IoVerifyVolume(
6123 _In_ PDEVICE_OBJECT DeviceObject,
6124 _In_ BOOLEAN AllowRawMount);
6125
6126 NTKERNELAPI
6127 NTSTATUS
6128 NTAPI
6129 IoGetRequestorSessionId(
6130 _In_ PIRP Irp,
6131 _Out_ PULONG pSessionId);
6132
6133 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
6134
6135
6136 #if (NTDDI_VERSION >= NTDDI_WINXP)
6137
6138
6139 NTKERNELAPI
6140 PFILE_OBJECT
6141 NTAPI
6142 IoCreateStreamFileObjectEx(
6143 _In_opt_ PFILE_OBJECT FileObject,
6144 _In_opt_ PDEVICE_OBJECT DeviceObject,
6145 _Out_opt_ PHANDLE FileObjectHandle);
6146
6147 NTKERNELAPI
6148 NTSTATUS
6149 NTAPI
6150 IoQueryFileDosDeviceName(
6151 _In_ PFILE_OBJECT FileObject,
6152 _Out_ POBJECT_NAME_INFORMATION *ObjectNameInformation);
6153
6154 NTKERNELAPI
6155 NTSTATUS
6156 NTAPI
6157 IoEnumerateDeviceObjectList(
6158 _In_ PDRIVER_OBJECT DriverObject,
6159 _Out_writes_bytes_to_opt_(DeviceObjectListSize,(*ActualNumberDeviceObjects)*sizeof(PDEVICE_OBJECT))
6160 PDEVICE_OBJECT *DeviceObjectList,
6161 _In_ ULONG DeviceObjectListSize,
6162 _Out_ PULONG ActualNumberDeviceObjects);
6163
6164 NTKERNELAPI
6165 PDEVICE_OBJECT
6166 NTAPI
6167 IoGetLowerDeviceObject(
6168 _In_ PDEVICE_OBJECT DeviceObject);
6169
6170 NTKERNELAPI
6171 PDEVICE_OBJECT
6172 NTAPI
6173 IoGetDeviceAttachmentBaseRef(
6174 _In_ PDEVICE_OBJECT DeviceObject);
6175
6176 NTKERNELAPI
6177 NTSTATUS
6178 NTAPI
6179 IoGetDiskDeviceObject(
6180 _In_ PDEVICE_OBJECT FileSystemDeviceObject,
6181 _Out_ PDEVICE_OBJECT *DiskDeviceObject);
6182
6183 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
6184
6185 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
6186
6187
6188 NTKERNELAPI
6189 NTSTATUS
6190 NTAPI
6191 IoEnumerateRegisteredFiltersList(
6192 _Out_writes_bytes_to_opt_(DriverObjectListSize,(*ActualNumberDriverObjects)*sizeof(PDRIVER_OBJECT))
6193 PDRIVER_OBJECT *DriverObjectList,
6194 _In_ ULONG DriverObjectListSize,
6195 _Out_ PULONG ActualNumberDriverObjects);
6196 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
6197
6198 #if (NTDDI_VERSION >= NTDDI_VISTA)
6199
6200 FORCEINLINE
6201 VOID
6202 NTAPI
6203 IoInitializePriorityInfo(
6204 _In_ PIO_PRIORITY_INFO PriorityInfo)
6205 {
6206 PriorityInfo->Size = sizeof(IO_PRIORITY_INFO);
6207 PriorityInfo->ThreadPriority = 0xffff;
6208 PriorityInfo->IoPriority = IoPriorityNormal;
6209 PriorityInfo->PagePriority = 0;
6210 }
6211 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
6212
6213 #if (NTDDI_VERSION >= NTDDI_WIN7)
6214
6215
6216 NTKERNELAPI
6217 NTSTATUS
6218 NTAPI
6219 IoRegisterFsRegistrationChangeMountAware(
6220 _In_ PDRIVER_OBJECT DriverObject,
6221 _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine,
6222 _In_ BOOLEAN SynchronizeWithMounts);
6223
6224 NTKERNELAPI
6225 NTSTATUS
6226 NTAPI
6227 IoReplaceFileObjectName(
6228 _In_ PFILE_OBJECT FileObject,
6229 _In_reads_bytes_(FileNameLength) PWSTR NewFileName,
6230 _In_ USHORT FileNameLength);
6231 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
6232
6233
6234 #define PO_CB_SYSTEM_POWER_POLICY 0
6235 #define PO_CB_AC_STATUS 1
6236 #define PO_CB_BUTTON_COLLISION 2
6237 #define PO_CB_SYSTEM_STATE_LOCK 3
6238 #define PO_CB_LID_SWITCH_STATE 4
6239 #define PO_CB_PROCESSOR_POWER_POLICY 5
6240
6241
6242 #if (NTDDI_VERSION >= NTDDI_WINXP)
6243 _IRQL_requires_max_(APC_LEVEL)
6244 NTKERNELAPI
6245 NTSTATUS
6246 NTAPI
6247 PoQueueShutdownWorkItem(
6248 _Inout_ __drv_aliasesMem PWORK_QUEUE_ITEM WorkItem);
6249 #endif
6250 /******************************************************************************
6251 * Memory manager Types *
6252 ******************************************************************************/
6253 typedef enum _MMFLUSH_TYPE {
6254 MmFlushForDelete,
6255 MmFlushForWrite
6256 } MMFLUSH_TYPE;
6257
6258 typedef struct _READ_LIST {
6259 PFILE_OBJECT FileObject;
6260 ULONG NumberOfEntries;
6261 LOGICAL IsImage;
6262 FILE_SEGMENT_ELEMENT List[ANYSIZE_ARRAY];
6263 } READ_LIST, *PREAD_LIST;
6264
6265 #if (NTDDI_VERSION >= NTDDI_WINXP)
6266
6267 typedef union _MM_PREFETCH_FLAGS {
6268 struct {
6269 ULONG Priority : SYSTEM_PAGE_PRIORITY_BITS;
6270 ULONG RepurposePriority : SYSTEM_PAGE_PRIORITY_BITS;
6271 } Flags;
6272 ULONG AllFlags;
6273 } MM_PREFETCH_FLAGS, *PMM_PREFETCH_FLAGS;
6274
6275 #define MM_PREFETCH_FLAGS_MASK ((1 << (2*SYSTEM_PAGE_PRIORITY_BITS)) - 1)
6276
6277 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
6278
6279 #define HEAP_NO_SERIALIZE 0x00000001
6280 #define HEAP_GROWABLE 0x00000002
6281 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
6282 #define HEAP_ZERO_MEMORY 0x00000008
6283 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
6284 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
6285 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
6286 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
6287
6288 #define HEAP_CREATE_ALIGN_16 0x00010000
6289 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
6290 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
6291
6292 #define HEAP_SETTABLE_USER_VALUE 0x00000100
6293 #define HEAP_SETTABLE_USER_FLAG1 0x00000200
6294 #define HEAP_SETTABLE_USER_FLAG2 0x00000400
6295 #define HEAP_SETTABLE_USER_FLAG3 0x00000800
6296 #define HEAP_SETTABLE_USER_FLAGS 0x00000E00
6297
6298 #define HEAP_CLASS_0 0x00000000
6299 #define HEAP_CLASS_1 0x00001000
6300 #define HEAP_CLASS_2 0x00002000
6301 #define HEAP_CLASS_3 0x00003000
6302 #define HEAP_CLASS_4 0x00004000
6303 #define HEAP_CLASS_5 0x00005000
6304 #define HEAP_CLASS_6 0x00006000
6305 #define HEAP_CLASS_7 0x00007000
6306 #define HEAP_CLASS_8 0x00008000
6307 #define HEAP_CLASS_MASK 0x0000F000
6308
6309 #define HEAP_MAXIMUM_TAG 0x0FFF
6310 #define HEAP_GLOBAL_TAG 0x0800
6311 #define HEAP_PSEUDO_TAG_FLAG 0x8000
6312 #define HEAP_TAG_SHIFT 18
6313 #define HEAP_TAG_MASK (HEAP_MAXIMUM_TAG << HEAP_TAG_SHIFT)
6314
6315 #define HEAP_CREATE_VALID_MASK (HEAP_NO_SERIALIZE | \
6316 HEAP_GROWABLE | \
6317 HEAP_GENERATE_EXCEPTIONS | \
6318 HEAP_ZERO_MEMORY | \
6319 HEAP_REALLOC_IN_PLACE_ONLY | \
6320 HEAP_TAIL_CHECKING_ENABLED | \
6321 HEAP_FREE_CHECKING_ENABLED | \
6322 HEAP_DISABLE_COALESCE_ON_FREE | \
6323 HEAP_CLASS_MASK | \
6324 HEAP_CREATE_ALIGN_16 | \
6325 HEAP_CREATE_ENABLE_TRACING | \
6326 HEAP_CREATE_ENABLE_EXECUTE)
6327
6328 /******************************************************************************
6329 * Memory manager Functions *
6330 ******************************************************************************/
6331
6332 FORCEINLINE
6333 ULONG
6334 HEAP_MAKE_TAG_FLAGS(
6335 _In_ ULONG TagBase,
6336 _In_ ULONG Tag)
6337 {
6338 //__assume_bound(TagBase); // FIXME
6339 return ((ULONG)((TagBase) + ((Tag) << HEAP_TAG_SHIFT)));
6340 }
6341
6342 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6343
6344 NTKERNELAPI
6345 BOOLEAN
6346 NTAPI
6347 MmIsRecursiveIoFault(VOID);
6348
6349 _IRQL_requires_max_ (APC_LEVEL)
6350 NTKERNELAPI
6351 BOOLEAN
6352 NTAPI
6353 MmForceSectionClosed(
6354 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
6355 _In_ BOOLEAN DelayClose);
6356
6357 _IRQL_requires_max_ (APC_LEVEL)
6358 NTKERNELAPI
6359 BOOLEAN
6360 NTAPI
6361 MmFlushImageSection(
6362 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
6363 _In_ MMFLUSH_TYPE FlushType);
6364
6365 _IRQL_requires_max_ (APC_LEVEL)
6366 NTKERNELAPI
6367 BOOLEAN
6368 NTAPI
6369 MmCanFileBeTruncated(
6370 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
6371 _In_opt_ PLARGE_INTEGER NewFileSize);
6372
6373 _IRQL_requires_max_ (APC_LEVEL)
6374 NTKERNELAPI
6375 BOOLEAN
6376 NTAPI
6377 MmSetAddressRangeModified(
6378 _In_reads_bytes_ (Length) PVOID Address,
6379 _In_ SIZE_T Length);
6380
6381 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
6382
6383 #if (NTDDI_VERSION >= NTDDI_WINXP)
6384
6385
6386 _IRQL_requires_max_ (PASSIVE_LEVEL)
6387 NTKERNELAPI
6388 NTSTATUS
6389 NTAPI
6390 MmPrefetchPages(
6391 _In_ ULONG NumberOfLists,
6392 _In_reads_ (NumberOfLists) PREAD_LIST *ReadLists);
6393
6394 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
6395
6396
6397 #if (NTDDI_VERSION >= NTDDI_VISTA)
6398
6399 _IRQL_requires_max_ (APC_LEVEL)
6400 NTKERNELAPI
6401 ULONG
6402 NTAPI
6403 MmDoesFileHaveUserWritableReferences(
6404 _In_ PSECTION_OBJECT_POINTERS SectionPointer);
6405
6406 _Must_inspect_result_
6407 _At_(*BaseAddress, __drv_allocatesMem(Mem))
6408 __kernel_entry
6409 NTSYSCALLAPI
6410 NTSTATUS
6411 NTAPI
6412 NtAllocateVirtualMemory(
6413 _In_ HANDLE ProcessHandle,
6414 _Inout_ _Outptr_result_buffer_(*RegionSize) PVOID *BaseAddress,
6415 _In_ ULONG_PTR ZeroBits,
6416 _Inout_ PSIZE_T RegionSize,
6417 _In_ ULONG AllocationType,
6418 _In_ ULONG Protect);
6419
6420 __kernel_entry
6421 _IRQL_requires_max_(PASSIVE_LEVEL)
6422 NTSYSCALLAPI
6423 NTSTATUS
6424 NTAPI
6425 NtFreeVirtualMemory(
6426 _In_ HANDLE ProcessHandle,
6427 _Inout_ __drv_freesMem(Mem) PVOID *BaseAddress,
6428 _Inout_ PSIZE_T RegionSize,
6429 _In_ ULONG FreeType);
6430
6431 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
6432
6433
6434 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6435
6436 NTKERNELAPI
6437 NTSTATUS
6438 NTAPI
6439 ObInsertObject(
6440 _In_ PVOID Object,
6441 _Inout_opt_ PACCESS_STATE PassedAccessState,
6442 _In_opt_ ACCESS_MASK DesiredAccess,
6443 _In_ ULONG ObjectPointerBias,
6444 _Out_opt_ PVOID *NewObject,
6445 _Out_opt_ PHANDLE Handle);
6446
6447 NTKERNELAPI
6448 NTSTATUS
6449 NTAPI
6450 ObOpenObjectByPointer(
6451 _In_ PVOID Object,
6452 _In_ ULONG HandleAttributes,
6453 _In_opt_ PACCESS_STATE PassedAccessState,
6454 _In_ ACCESS_MASK DesiredAccess,
6455 _In_opt_ POBJECT_TYPE ObjectType,
6456 _In_ KPROCESSOR_MODE AccessMode,
6457 _Out_ PHANDLE Handle);
6458
6459 NTKERNELAPI
6460 VOID
6461 NTAPI
6462 ObMakeTemporaryObject(
6463 _In_ PVOID Object);
6464
6465 NTKERNELAPI
6466 NTSTATUS
6467 NTAPI
6468 ObQueryNameString(
6469 _In_ PVOID Object,
6470 _Out_writes_bytes_opt_(Length) POBJECT_NAME_INFORMATION ObjectNameInfo,
6471 _In_ ULONG Length,
6472 _Out_ PULONG ReturnLength);
6473
6474 NTKERNELAPI
6475 NTSTATUS
6476 NTAPI
6477 ObQueryObjectAuditingByHandle(
6478 _In_ HANDLE Handle,
6479 _Out_ PBOOLEAN GenerateOnClose);
6480 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
6481
6482 #if (NTDDI_VERSION >= NTDDI_VISTA)
6483
6484 NTKERNELAPI
6485 BOOLEAN
6486 NTAPI
6487 ObIsKernelHandle(
6488 _In_ HANDLE Handle);
6489 #endif
6490
6491
6492 #if (NTDDI_VERSION >= NTDDI_WIN7)
6493
6494 NTKERNELAPI
6495 NTSTATUS
6496 NTAPI
6497 ObOpenObjectByPointerWithTag(
6498 _In_ PVOID Object,
6499 _In_ ULONG HandleAttributes,
6500 _In_opt_ PACCESS_STATE PassedAccessState,
6501 _In_ ACCESS_MASK DesiredAccess,
6502 _In_opt_ POBJECT_TYPE ObjectType,
6503 _In_ KPROCESSOR_MODE AccessMode,
6504 _In_ ULONG Tag,
6505 _Out_ PHANDLE Handle);
6506
6507 NTKERNELAPI
6508 ULONG
6509 NTAPI
6510 ObGetObjectPointerCount(
6511 _In_ PVOID Object
6512 );
6513
6514 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
6515
6516 /* FSRTL Types */
6517
6518 typedef ULONG LBN;
6519 typedef LBN *PLBN;
6520
6521 typedef ULONG VBN;
6522 typedef VBN *PVBN;
6523
6524 #define FSRTL_COMMON_FCB_HEADER_LAYOUT \
6525 CSHORT NodeTypeCode; \
6526 CSHORT NodeByteSize; \
6527 UCHAR Flags; \
6528 UCHAR IsFastIoPossible; \
6529 UCHAR Flags2; \
6530 UCHAR Reserved:4; \
6531 UCHAR Version:4; \
6532 PERESOURCE Resource; \
6533 PERESOURCE PagingIoResource; \
6534 LARGE_INTEGER AllocationSize; \
6535 LARGE_INTEGER FileSize; \
6536 LARGE_INTEGER ValidDataLength;
6537
6538 typedef struct _FSRTL_COMMON_FCB_HEADER {
6539 FSRTL_COMMON_FCB_HEADER_LAYOUT
6540 } FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER;
6541
6542 #ifdef __cplusplus
6543 typedef struct _FSRTL_ADVANCED_FCB_HEADER:FSRTL_COMMON_FCB_HEADER {
6544 #else /* __cplusplus */
6545 typedef struct _FSRTL_ADVANCED_FCB_HEADER {
6546 FSRTL_COMMON_FCB_HEADER_LAYOUT
6547 #endif /* __cplusplus */
6548 PFAST_MUTEX FastMutex;
6549 LIST_ENTRY FilterContexts;
6550 #if (NTDDI_VERSION >= NTDDI_VISTA)
6551 EX_PUSH_LOCK PushLock;
6552 PVOID *FileContextSupportPointer;
6553 #endif
6554 } FSRTL_ADVANCED_FCB_HEADER, *PFSRTL_ADVANCED_FCB_HEADER;
6555
6556 #define FSRTL_FCB_HEADER_V0 (0x00)
6557 #define FSRTL_FCB_HEADER_V1 (0x01)
6558
6559 #define FSRTL_FLAG_FILE_MODIFIED (0x01)
6560 #define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
6561 #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
6562 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
6563 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
6564 #define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
6565 #define FSRTL_FLAG_ADVANCED_HEADER (0x40)
6566 #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
6567
6568 #define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
6569 #define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02)
6570 #define FSRTL_FLAG2_PURGE_WHEN_MAPPED (0x04)
6571 #define FSRTL_FLAG2_IS_PAGING_FILE (0x08)
6572
6573 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
6574 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
6575 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
6576 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
6577 #define FSRTL_NETWORK1_TOP_LEVEL_IRP ((LONG_PTR)0x05)
6578 #define FSRTL_NETWORK2_TOP_LEVEL_IRP ((LONG_PTR)0x06)
6579 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG ((LONG_PTR)0xFFFF)
6580
6581 typedef struct _FSRTL_AUXILIARY_BUFFER {
6582 PVOID Buffer;
6583 ULONG Length;
6584 ULONG Flags;
6585 PMDL Mdl;
6586 } FSRTL_AUXILIARY_BUFFER, *PFSRTL_AUXILIARY_BUFFER;
6587
6588 #define FSRTL_AUXILIARY_FLAG_DEALLOCATE 0x00000001
6589
6590 typedef enum _FSRTL_COMPARISON_RESULT {
6591 LessThan = -1,
6592 EqualTo = 0,
6593 GreaterThan = 1
6594 } FSRTL_COMPARISON_RESULT;
6595
6596 #define FSRTL_FAT_LEGAL 0x01
6597 #define FSRTL_HPFS_LEGAL 0x02
6598 #define FSRTL_NTFS_LEGAL 0x04
6599 #define FSRTL_WILD_CHARACTER 0x08
6600 #define FSRTL_OLE_LEGAL 0x10
6601 #define FSRTL_NTFS_STREAM_LEGAL (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL)
6602
6603 #define FSRTL_VOLUME_DISMOUNT 1
6604 #define FSRTL_VOLUME_DISMOUNT_FAILED 2
6605 #define FSRTL_VOLUME_LOCK 3
6606 #define FSRTL_VOLUME_LOCK_FAILED 4
6607 #define FSRTL_VOLUME_UNLOCK 5
6608 #define FSRTL_VOLUME_MOUNT 6
6609 #define FSRTL_VOLUME_NEEDS_CHKDSK 7
6610 #define FSRTL_VOLUME_WORM_NEAR_FULL 8
6611 #define FSRTL_VOLUME_WEARING_OUT 9
6612 #define FSRTL_VOLUME_FORCED_CLOSED 10
6613 #define FSRTL_VOLUME_INFO_MAKE_COMPAT 11
6614 #define FSRTL_VOLUME_PREPARING_EJECT 12
6615 #define FSRTL_VOLUME_CHANGE_SIZE 13
6616 #define FSRTL_VOLUME_BACKGROUND_FORMAT 14
6617
6618 typedef VOID
6619 (NTAPI *PFSRTL_STACK_OVERFLOW_ROUTINE)(
6620 _In_ PVOID Context,
6621 _In_ PKEVENT Event);
6622
6623 #if (NTDDI_VERSION >= NTDDI_VISTA)
6624
6625 #define FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED 0x00000001
6626 #define FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED 0x00000002
6627 #define FSRTL_UNC_PROVIDER_FLAGS_DOMAIN_SVC_AWARE 0x00000004
6628
6629 #define FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA 0x00000001
6630
6631 #define FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA 0x00000001
6632 #define FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL 0x00000002
6633
6634 #define FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL 0x00000002
6635
6636 #define FSRTL_VIRTDISK_FULLY_ALLOCATED 0x00000001
6637 #define FSRTL_VIRTDISK_NO_DRIVE_LETTER 0x00000002
6638
6639 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_1 {
6640 ULONG32 ProviderId;
6641 } FSRTL_MUP_PROVIDER_INFO_LEVEL_1, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_1;
6642
6643 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_2 {
6644 ULONG32 ProviderId;
6645 UNICODE_STRING ProviderName;
6646 } FSRTL_MUP_PROVIDER_INFO_LEVEL_2, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_2;
6647
6648 typedef VOID
6649 (*PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK) (
6650 _Inout_ PVOID EcpContext,
6651 _In_ LPCGUID EcpType);
6652
6653 typedef struct _ECP_LIST ECP_LIST, *PECP_LIST;
6654
6655 typedef ULONG FSRTL_ALLOCATE_ECPLIST_FLAGS;
6656 typedef ULONG FSRTL_ALLOCATE_ECP_FLAGS;
6657 typedef ULONG FSRTL_ECP_LOOKASIDE_FLAGS;
6658
6659 typedef enum _FSRTL_CHANGE_BACKING_TYPE {
6660 ChangeDataControlArea,
6661 ChangeImageControlArea,
6662 ChangeSharedCacheMap
6663 } FSRTL_CHANGE_BACKING_TYPE, *PFSRTL_CHANGE_BACKING_TYPE;
6664
6665 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
6666
6667 typedef struct _FSRTL_PER_FILE_CONTEXT {
6668 LIST_ENTRY Links;
6669 PVOID OwnerId;
6670 PVOID InstanceId;
6671 PFREE_FUNCTION FreeCallback;
6672 } FSRTL_PER_FILE_CONTEXT, *PFSRTL_PER_FILE_CONTEXT;
6673
6674 typedef struct _FSRTL_PER_STREAM_CONTEXT {
6675 LIST_ENTRY Links;
6676 PVOID OwnerId;
6677 PVOID InstanceId;
6678 PFREE_FUNCTION FreeCallback;
6679 } FSRTL_PER_STREAM_CONTEXT, *PFSRTL_PER_STREAM_CONTEXT;
6680
6681 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6682 typedef VOID
6683 (*PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS) (
6684 _In_ PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
6685 #endif
6686
6687 typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT {
6688 LIST_ENTRY Links;
6689 PVOID OwnerId;
6690 PVOID InstanceId;
6691 } FSRTL_PER_FILEOBJECT_CONTEXT, *PFSRTL_PER_FILEOBJECT_CONTEXT;
6692
6693 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_HARD_ERROR 0x1
6694 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_LOG_ENTRY 0x2
6695
6696 typedef NTSTATUS
6697 (NTAPI *PCOMPLETE_LOCK_IRP_ROUTINE) (
6698 _In_ PVOID Context,
6699 _In_ PIRP Irp);
6700
6701 typedef struct _FILE_LOCK_INFO {
6702 LARGE_INTEGER StartingByte;
6703 LARGE_INTEGER Length;
6704 BOOLEAN ExclusiveLock;
6705 ULONG Key;
6706 PFILE_OBJECT FileObject;
6707 PVOID ProcessId;
6708 LARGE_INTEGER EndingByte;
6709 } FILE_LOCK_INFO, *PFILE_LOCK_INFO;
6710
6711 typedef VOID
6712 (NTAPI *PUNLOCK_ROUTINE) (
6713 _In_ PVOID Context,
6714 _In_ PFILE_LOCK_INFO FileLockInfo);
6715
6716 typedef struct _FILE_LOCK {
6717 PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
6718 PUNLOCK_ROUTINE UnlockRoutine;
6719 BOOLEAN FastIoIsQuestionable;
6720 BOOLEAN SpareC[3];
6721 PVOID LockInformation;
6722 FILE_LOCK_INFO LastReturnedLockInfo;
6723 PVOID LastReturnedLock;
6724 LONG volatile LockRequestsInProgress;
6725 } FILE_LOCK, *PFILE_LOCK;
6726
6727 typedef struct _TUNNEL {
6728 FAST_MUTEX Mutex;
6729 PRTL_SPLAY_LINKS Cache;
6730 LIST_ENTRY TimerQueue;
6731 USHORT NumEntries;
6732 } TUNNEL, *PTUNNEL;
6733
6734 typedef struct _BASE_MCB {
6735 ULONG MaximumPairCount;
6736 ULONG PairCount;
6737 USHORT PoolType;
6738 USHORT Flags;
6739 PVOID Mapping;
6740 } BASE_MCB, *PBASE_MCB;
6741
6742 typedef struct _LARGE_MCB {
6743 PKGUARDED_MUTEX GuardedMutex;
6744 BASE_MCB BaseMcb;
6745 } LARGE_MCB, *PLARGE_MCB;
6746
6747 #define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
6748
6749 typedef struct _MCB {
6750 LARGE_MCB DummyFieldThatSizesThisStructureCorrectly;
6751 } MCB, *PMCB;
6752
6753 typedef enum _FAST_IO_POSSIBLE {
6754 FastIoIsNotPossible = 0,
6755 FastIoIsPossible,
6756 FastIoIsQuestionable
6757 } FAST_IO_POSSIBLE;
6758
6759 typedef struct _EOF_WAIT_BLOCK {
6760 LIST_ENTRY EofWaitLinks;
6761 KEVENT Event;
6762 } EOF_WAIT_BLOCK, *PEOF_WAIT_BLOCK;
6763
6764 typedef PVOID OPLOCK, *POPLOCK;
6765
6766 typedef VOID
6767 (NTAPI *POPLOCK_WAIT_COMPLETE_ROUTINE) (
6768 _In_ PVOID Context,
6769 _In_ PIRP Irp);
6770
6771 typedef VOID
6772 (NTAPI *POPLOCK_FS_PREPOST_IRP) (
6773 _In_ PVOID Context,
6774 _In_ PIRP Irp);
6775
6776 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
6777 #define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED 0x00000001
6778 #endif
6779
6780 #if (NTDDI_VERSION >= NTDDI_WIN7)
6781 #define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY 0x00000002
6782 #define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK 0x00000004
6783 #define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS 0x00000008
6784 #define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH 0x00000001
6785 #endif
6786
6787 #if (NTDDI_VERSION >= NTDDI_WIN7)
6788
6789 typedef struct _OPLOCK_KEY_ECP_CONTEXT {
6790 GUID OplockKey;
6791 ULONG Reserved;
6792 } OPLOCK_KEY_ECP_CONTEXT, *POPLOCK_KEY_ECP_CONTEXT;
6793
6794 DEFINE_GUID(GUID_ECP_OPLOCK_KEY, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f);
6795
6796 #endif
6797
6798 typedef PVOID PNOTIFY_SYNC;
6799
6800 #if (NTDDI_VERSION >= NTDDI_WIN7)
6801 typedef struct _ECP_HEADER ECP_HEADER, *PECP_HEADER;
6802 #endif
6803
6804 typedef BOOLEAN
6805 (NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) (
6806 _In_ PVOID NotifyContext,
6807 _In_opt_ PVOID TargetContext,
6808 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext);
6809
6810 typedef BOOLEAN
6811 (NTAPI *PFILTER_REPORT_CHANGE) (
6812 _In_ PVOID NotifyContext,
6813 _In_ PVOID FilterContext);
6814 /* FSRTL Functions */
6815
6816 #define FsRtlEnterFileSystem KeEnterCriticalRegion
6817 #define FsRtlExitFileSystem KeLeaveCriticalRegion
6818
6819 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6820
6821 _Must_inspect_result_
6822 _IRQL_requires_max_(PASSIVE_LEVEL)
6823 NTKERNELAPI
6824 BOOLEAN
6825 NTAPI
6826 FsRtlCopyRead(
6827 _In_ PFILE_OBJECT FileObject,
6828 _In_ PLARGE_INTEGER FileOffset,
6829 _In_ ULONG Length,
6830 _In_ BOOLEAN Wait,
6831 _In_ ULONG LockKey,
6832 _Out_writes_bytes_(Length) PVOID Buffer,
6833 _Out_ PIO_STATUS_BLOCK IoStatus,
6834 _In_ PDEVICE_OBJECT DeviceObject);
6835
6836 _Must_inspect_result_
6837 _IRQL_requires_max_(PASSIVE_LEVEL)
6838 NTKERNELAPI
6839 BOOLEAN
6840 NTAPI
6841 FsRtlCopyWrite(
6842 _In_ PFILE_OBJECT FileObject,
6843 _In_ PLARGE_INTEGER FileOffset,
6844 _In_ ULONG Length,
6845 _In_ BOOLEAN Wait,
6846 _In_ ULONG LockKey,
6847 _In_reads_bytes_(Length) PVOID Buffer,
6848 _Out_ PIO_STATUS_BLOCK IoStatus,
6849 _In_ PDEVICE_OBJECT DeviceObject);
6850
6851 _Must_inspect_result_
6852 _IRQL_requires_max_(APC_LEVEL)
6853 NTKERNELAPI
6854 BOOLEAN
6855 NTAPI
6856 FsRtlMdlReadDev(
6857 _In_ PFILE_OBJECT FileObject,
6858 _In_ PLARGE_INTEGER FileOffset,
6859 _In_ ULONG Length,
6860 _In_ ULONG LockKey,
6861 _Outptr_ PMDL *MdlChain,
6862 _Out_ PIO_STATUS_BLOCK IoStatus,
6863 _In_opt_ PDEVICE_OBJECT DeviceObject);
6864
6865 _IRQL_requires_max_(PASSIVE_LEVEL)
6866 NTKERNELAPI
6867 BOOLEAN
6868 NTAPI
6869 FsRtlMdlReadCompleteDev(
6870 _In_ PFILE_OBJECT FileObject,
6871 _In_ PMDL MdlChain,
6872 _In_opt_ PDEVICE_OBJECT DeviceObject);
6873
6874 _Must_inspect_result_
6875 _IRQL_requires_max_(APC_LEVEL)
6876 NTKERNELAPI
6877 BOOLEAN
6878 NTAPI
6879 FsRtlPrepareMdlWriteDev(
6880 _In_ PFILE_OBJECT FileObject,
6881 _In_ PLARGE_INTEGER FileOffset,
6882 _In_ ULONG Length,
6883 _In_ ULONG LockKey,
6884 _Outptr_ PMDL *MdlChain,
6885 _Out_ PIO_STATUS_BLOCK IoStatus,
6886 _In_ PDEVICE_OBJECT DeviceObject);
6887
6888 _Must_inspect_result_
6889 _IRQL_requires_max_(PASSIVE_LEVEL)
6890 NTKERNELAPI
6891 BOOLEAN
6892 NTAPI
6893 FsRtlMdlWriteCompleteDev(
6894 _In_ PFILE_OBJECT FileObject,
6895 _In_ PLARGE_INTEGER FileOffset,
6896 _In_ PMDL MdlChain,
6897 _In_opt_ PDEVICE_OBJECT DeviceObject);
6898
6899 _IRQL_requires_max_(PASSIVE_LEVEL)
6900 NTKERNELAPI
6901 VOID
6902 NTAPI
6903 FsRtlAcquireFileExclusive(
6904 _In_ PFILE_OBJECT FileObject);
6905
6906 _IRQL_requires_max_(APC_LEVEL)
6907 NTKERNELAPI
6908 VOID
6909 NTAPI
6910 FsRtlReleaseFile(
6911 _In_ PFILE_OBJECT FileObject);
6912
6913 _Must_inspect_result_
6914 _IRQL_requires_max_(PASSIVE_LEVEL)
6915 NTKERNELAPI
6916 NTSTATUS
6917 NTAPI
6918 FsRtlGetFileSize(
6919 _In_ PFILE_OBJECT FileObject,
6920 _Out_ PLARGE_INTEGER FileSize);
6921
6922 _Must_inspect_result_
6923 NTKERNELAPI
6924 BOOLEAN
6925 NTAPI
6926 FsRtlIsTotalDeviceFailure(
6927 _In_ NTSTATUS Status);
6928
6929 _Must_inspect_result_
6930 _IRQL_requires_max_(APC_LEVEL)
6931 NTKERNELAPI
6932 PFILE_LOCK
6933 NTAPI
6934 FsRtlAllocateFileLock(
6935 _In_opt_ PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine,
6936 _In_opt_ PUNLOCK_ROUTINE UnlockRoutine);
6937
6938 _IRQL_requires_max_(APC_LEVEL)
6939 NTKERNELAPI
6940 VOID
6941 NTAPI
6942 FsRtlFreeFileLock(
6943 _In_ PFILE_LOCK FileLock);
6944
6945 _IRQL_requires_max_(APC_LEVEL)
6946 NTKERNELAPI
6947 VOID
6948 NTAPI
6949 FsRtlInitializeFileLock(
6950 _Out_ PFILE_LOCK FileLock,
6951 _In_opt_ PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine,
6952 _In_opt_ PUNLOCK_ROUTINE UnlockRoutine);
6953
6954 _IRQL_requires_max_(APC_LEVEL)
6955 NTKERNELAPI
6956 VOID
6957 NTAPI
6958 FsRtlUninitializeFileLock(
6959 _Inout_ PFILE_LOCK FileLock);
6960
6961 /*
6962 FsRtlProcessFileLock:
6963
6964 ret:
6965 -STATUS_INVALID_DEVICE_REQUEST
6966 -STATUS_RANGE_NOT_LOCKED from unlock routines.
6967 -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
6968 (redirected IoStatus->Status).
6969
6970 Internals:
6971 -switch ( Irp->CurrentStackLocation->MinorFunction )
6972 lock: return FsRtlPrivateLock;
6973 unlocksingle: return FsRtlFastUnlockSingle;
6974 unlockall: return FsRtlFastUnlockAll;
6975 unlockallbykey: return FsRtlFastUnlockAllByKey;
6976 default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
6977 return STATUS_INVALID_DEVICE_REQUEST;
6978
6979 -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
6980 -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
6981 */
6982 _Must_inspect_result_
6983 _IRQL_requires_max_(APC_LEVEL)
6984 NTKERNELAPI
6985 NTSTATUS
6986 NTAPI
6987 FsRtlProcessFileLock(
6988 _In_ PFILE_LOCK FileLock,
6989 _In_ PIRP Irp,
6990 _In_opt_ PVOID Context);
6991
6992 /*
6993 FsRtlCheckLockForReadAccess:
6994
6995 All this really does is pick out the lock parameters from the irp (io stack
6996 location?), get IoGetRequestorProcess, and pass values on to
6997 FsRtlFastCheckLockForRead.
6998 */
6999 _Must_inspect_result_
7000 _IRQL_requires_max_(APC_LEVEL)
7001 NTKERNELAPI
7002 BOOLEAN
7003 NTAPI
7004 FsRtlCheckLockForReadAccess(
7005 _In_ PFILE_LOCK FileLock,
7006 _In_ PIRP Irp);
7007
7008 /*
7009 FsRtlCheckLockForWriteAccess:
7010
7011 All this really does is pick out the lock parameters from the irp (io stack
7012 location?), get IoGetRequestorProcess, and pass values on to
7013 FsRtlFastCheckLockForWrite.
7014 */
7015 _Must_inspect_result_
7016 _IRQL_requires_max_(APC_LEVEL)
7017 NTKERNELAPI
7018 BOOLEAN
7019 NTAPI
7020 FsRtlCheckLockForWriteAccess(
7021 _In_ PFILE_LOCK FileLock,
7022 _In_ PIRP Irp);
7023
7024 _Must_inspect_result_
7025 _IRQL_requires_max_(APC_LEVEL)
7026 NTKERNELAPI
7027 BOOLEAN
7028 NTAPI
7029 FsRtlFastCheckLockForRead(
7030 _In_ PFILE_LOCK FileLock,
7031 _In_ PLARGE_INTEGER FileOffset,
7032 _In_ PLARGE_INTEGER Length,
7033 _In_ ULONG Key,
7034 _In_ PFILE_OBJECT FileObject,
7035 _In_ PVOID Process);
7036
7037 _Must_inspect_result_
7038 _IRQL_requires_max_(APC_LEVEL)
7039 NTKERNELAPI
7040 BOOLEAN
7041 NTAPI
7042 FsRtlFastCheckLockForWrite(
7043 _In_ PFILE_LOCK FileLock,
7044 _In_ PLARGE_INTEGER FileOffset,
7045 _In_ PLARGE_INTEGER Length,
7046 _In_ ULONG Key,
7047 _In_ PFILE_OBJECT FileObject,
7048 _In_ PVOID Process);
7049
7050 /*
7051 FsRtlGetNextFileLock:
7052
7053 ret: NULL if no more locks
7054
7055 Internals:
7056 FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
7057 FileLock->LastReturnedLock as storage.
7058 LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
7059 list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
7060 calls with Restart = FALSE.
7061 */
7062 _Must_inspect_result_
7063 _IRQL_requires_max_(APC_LEVEL)
7064 NTKERNELAPI
7065 PFILE_LOCK_INFO
7066 NTAPI
7067 FsRtlGetNextFileLock(
7068 _In_ PFILE_LOCK FileLock,
7069 _In_ BOOLEAN Restart);
7070
7071 _IRQL_requires_max_(APC_LEVEL)
7072 NTKERNELAPI
7073 NTSTATUS
7074 NTAPI
7075 FsRtlFastUnlockSingle(
7076 _In_ PFILE_LOCK FileLock,
7077 _In_ PFILE_OBJECT FileObject,
7078 _In_ PLARGE_INTEGER FileOffset,
7079 _In_ PLARGE_INTEGER Length,
7080 _In_ PEPROCESS Process,
7081 _In_ ULONG Key,
7082 _In_opt_ PVOID Context,
7083 _In_ BOOLEAN AlreadySynchronized);
7084
7085 _IRQL_requires_max_(APC_LEVEL)
7086 NTKERNELAPI
7087 NTSTATUS
7088 NTAPI
7089 FsRtlFastUnlockAll(
7090 _In_ PFILE_LOCK FileLock,
7091 _In_ PFILE_OBJECT FileObject,
7092 _In_ PEPROCESS Process,
7093 _In_opt_ PVOID Context);
7094
7095 _IRQL_requires_max_(APC_LEVEL)
7096 NTKERNELAPI
7097 NTSTATUS
7098 NTAPI
7099 FsRtlFastUnlockAllByKey(
7100 _In_ PFILE_LOCK FileLock,
7101 _In_ PFILE_OBJECT FileObject,
7102 _In_ PEPROCESS Process,
7103 _In_ ULONG Key,
7104 _In_opt_ PVOID Context);
7105
7106 /*
7107 FsRtlPrivateLock:
7108
7109 ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
7110
7111 Internals:
7112 -Calls IoCompleteRequest if Irp
7113 -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
7114 */
7115 _Must_inspect_result_
7116 _IRQL_requires_max_(APC_LEVEL)
7117 __drv_preferredFunction(FsRtlFastLock, "Obsolete")
7118 NTKERNELAPI
7119 BOOLEAN
7120 NTAPI
7121 FsRtlPrivateLock(
7122 _In_ PFILE_LOCK FileLock,
7123 _In_ PFILE_OBJECT FileObject,
7124 _In_ PLARGE_INTEGER FileOffset,
7125 _In_ PLARGE_INTEGER Length,
7126 _In_ PEPROCESS Process,
7127 _In_ ULONG Key,
7128 _In_ BOOLEAN FailImmediately,
7129 _In_ BOOLEAN ExclusiveLock,
7130 _Out_ PIO_STATUS_BLOCK IoStatus,
7131 _In_opt_ PIRP Irp,
7132 _In_opt_ __drv_aliasesMem PVOID Context,
7133 _In_ BOOLEAN AlreadySynchronized);
7134
7135 _IRQL_requires_max_(APC_LEVEL)
7136 NTKERNELAPI
7137 VOID
7138 NTAPI
7139 FsRtlInitializeTunnelCache(
7140 _In_ PTUNNEL Cache);
7141
7142 _IRQL_requires_max_(APC_LEVEL)
7143 NTKERNELAPI
7144 VOID
7145 NTAPI
7146 FsRtlAddToTunnelCache(
7147 _In_ PTUNNEL Cache,
7148 _In_ ULONGLONG DirectoryKey,
7149 _In_ PUNICODE_STRING ShortName,
7150 _In_ PUNICODE_STRING LongName,
7151 _In_ BOOLEAN KeyByShortName,
7152 _In_ ULONG DataLength,
7153 _In_reads_bytes_(DataLength) PVOID Data);
7154
7155 _Must_inspect_result_
7156 _IRQL_requires_max_(APC_LEVEL)
7157 NTKERNELAPI
7158 BOOLEAN
7159 NTAPI
7160 FsRtlFindInTunnelCache(
7161 _In_ PTUNNEL Cache,
7162 _In_ ULONGLONG DirectoryKey,
7163 _In_ PUNICODE_STRING Name,
7164 _Out_ PUNICODE_STRING ShortName,
7165 _Out_ PUNICODE_STRING LongName,
7166 _Inout_ PULONG DataLength,
7167 _Out_writes_bytes_to_(*DataLength, *DataLength) PVOID Data);
7168
7169 _IRQL_requires_max_(APC_LEVEL)
7170 NTKERNELAPI
7171 VOID
7172 NTAPI
7173 FsRtlDeleteKeyFromTunnelCache(
7174 _In_ PTUNNEL Cache,
7175 _In_ ULONGLONG DirectoryKey);
7176
7177 _IRQL_requires_max_(APC_LEVEL)
7178 NTKERNELAPI
7179 VOID
7180 NTAPI
7181 FsRtlDeleteTunnelCache(
7182 _In_ PTUNNEL Cache);
7183
7184 _IRQL_requires_max_(APC_LEVEL)
7185 NTKERNELAPI
7186 VOID
7187 NTAPI
7188 FsRtlDissectDbcs(
7189 _In_ ANSI_STRING Name,
7190 _Out_ PANSI_STRING FirstPart,
7191 _Out_ PANSI_STRING RemainingPart);
7192
7193 _Must_inspect_result_
7194 _IRQL_requires_max_(APC_LEVEL)
7195 NTKERNELAPI
7196 BOOLEAN
7197 NTAPI
7198 FsRtlDoesDbcsContainWildCards(
7199 _In_ PANSI_STRING Name);
7200
7201 _Must_inspect_result_
7202 _IRQL_requires_max_(APC_LEVEL)
7203 NTKERNELAPI
7204 BOOLEAN
7205 NTAPI
7206 FsRtlIsDbcsInExpression(
7207 _In_ PANSI_STRING Expression,
7208 _In_ PANSI_STRING Name);
7209
7210 _Must_inspect_result_
7211 _IRQL_requires_max_(APC_LEVEL)
7212 NTKERNELAPI
7213 BOOLEAN
7214 NTAPI
7215 FsRtlIsFatDbcsLegal(
7216 _In_ ANSI_STRING DbcsName,
7217 _In_ BOOLEAN WildCardsPermissible,
7218 _In_ BOOLEAN PathNamePermissible,
7219 _In_ BOOLEAN LeadingBackslashPermissible);
7220
7221 _Must_inspect_result_
7222 _IRQL_requires_max_(APC_LEVEL)
7223 NTKERNELAPI
7224 BOOLEAN
7225 NTAPI
7226 FsRtlIsHpfsDbcsLegal(
7227 _In_ ANSI_STRING DbcsName,
7228 _In_ BOOLEAN WildCardsPermissible,
7229 _In_ BOOLEAN PathNamePermissible,
7230 _In_ BOOLEAN LeadingBackslashPermissible);
7231
7232 NTKERNELAPI
7233 NTSTATUS
7234 NTAPI
7235 FsRtlNormalizeNtstatus(
7236 _In_ NTSTATUS Exception,
7237 _In_ NTSTATUS GenericException);
7238
7239 _Must_inspect_result_
7240 NTKERNELAPI
7241 BOOLEAN
7242 NTAPI
7243 FsRtlIsNtstatusExpected(
7244 _In_ NTSTATUS Ntstatus);
7245
7246 _IRQL_requires_max_(APC_LEVEL)
7247 __drv_preferredFunction(ExAllocateFromNPagedLookasideList, "The FsRtlAllocateResource routine is obsolete, but is exported to support existing driver binaries. Use ExAllocateFromNPagedLookasideList and ExInitializeResourceLite instead.")
7248 NTKERNELAPI
7249 PERESOURCE
7250 NTAPI
7251 FsRtlAllocateResource(VOID);
7252
7253 _IRQL_requires_max_(APC_LEVEL)
7254 NTKERNELAPI
7255 VOID
7256 NTAPI
7257 FsRtlInitializeLargeMcb(
7258 _Out_ PLARGE_MCB Mcb,
7259 _In_ POOL_TYPE PoolType);
7260
7261 _IRQL_requires_max_(APC_LEVEL)
7262 NTKERNELAPI
7263 VOID
7264 NTAPI
7265 FsRtlUninitializeLargeMcb(
7266 _Inout_ PLARGE_MCB Mcb);
7267
7268 _IRQL_requires_max_(APC_LEVEL)
7269 NTKERNELAPI
7270 VOID
7271 NTAPI
7272 FsRtlResetLargeMcb(
7273 _Inout_ PLARGE_MCB Mcb,
7274 _In_ BOOLEAN SelfSynchronized);
7275
7276 _IRQL_requires_max_(APC_LEVEL)
7277 NTKERNELAPI
7278 VOID
7279 NTAPI
7280 FsRtlTruncateLargeMcb(
7281 _Inout_ PLARGE_MCB Mcb,
7282 _In_ LONGLONG Vbn);
7283
7284 _Must_inspect_result_
7285 _IRQL_requires_max_(APC_LEVEL)
7286 NTKERNELAPI
7287 BOOLEAN
7288 NTAPI
7289 FsRtlAddLargeMcbEntry(
7290 _Inout_ PLARGE_MCB Mcb,
7291 _In_ LONGLONG Vbn,
7292 _In_ LONGLONG Lbn,
7293 _In_ LONGLONG SectorCount);
7294
7295 _IRQL_requires_max_(APC_LEVEL)
7296 NTKERNELAPI
7297 VOID
7298 NTAPI
7299 FsRtlRemoveLargeMcbEntry(
7300 _Inout_ PLARGE_MCB Mcb,
7301 _In_ LONGLONG Vbn,
7302 _In_ LONGLONG SectorCount);
7303
7304 _IRQL_requires_max_(APC_LEVEL)
7305 NTKERNELAPI
7306 BOOLEAN
7307 NTAPI
7308 FsRtlLookupLargeMcbEntry(
7309 _In_ PLARGE_MCB Mcb,
7310 _In_ LONGLONG Vbn,
7311 _Out_opt_ PLONGLONG Lbn,
7312 _Out_opt_ PLONGLONG SectorCountFromLbn,
7313 _Out_opt_ PLONGLONG StartingLbn,
7314 _Out_opt_ PLONGLONG SectorCountFromStartingLbn,
7315 _Out_opt_ PULONG Index);
7316
7317 _IRQL_requires_max_(APC_LEVEL)
7318 NTKERNELAPI
7319 BOOLEAN
7320 NTAPI
7321 FsRtlLookupLastLargeMcbEntry(
7322 _In_ PLARGE_MCB Mcb,
7323 _Out_ PLONGLONG Vbn,
7324 _Out_ PLONGLONG Lbn);
7325
7326 _IRQL_requires_max_(APC_LEVEL)
7327 NTKERNELAPI
7328 BOOLEAN
7329 NTAPI
7330 FsRtlLookupLastLargeMcbEntryAndIndex(
7331 _In_ PLARGE_MCB OpaqueMcb,
7332 _Out_ PLONGLONG LargeVbn,
7333 _Out_ PLONGLONG LargeLbn,
7334 _Out_ PULONG Index);
7335
7336 _IRQL_requires_max_(APC_LEVEL)
7337 NTKERNELAPI
7338 ULONG
7339 NTAPI
7340 FsRtlNumberOfRunsInLargeMcb(
7341 _In_ PLARGE_MCB Mcb);
7342
7343 _Must_inspect_result_
7344 _IRQL_requires_max_(APC_LEVEL)
7345 NTKERNELAPI
7346 BOOLEAN
7347 NTAPI
7348 FsRtlGetNextLargeMcbEntry(
7349 _In_ PLARGE_MCB Mcb,
7350 _In_ ULONG RunIndex,
7351 _Out_ PLONGLONG Vbn,
7352 _Out_ PLONGLONG Lbn,
7353 _Out_ PLONGLONG SectorCount);
7354
7355 _Must_inspect_result_
7356 _IRQL_requires_max_(APC_LEVEL)
7357 NTKERNELAPI
7358 BOOLEAN
7359 NTAPI
7360 FsRtlSplitLargeMcb(
7361 _Inout_ PLARGE_MCB Mcb,
7362 _In_ LONGLONG Vbn,
7363 _In_ LONGLONG Amount);
7364
7365 _IRQL_requires_max_(APC_LEVEL)
7366 __drv_preferredFunction(FsRtlInitializeLargeMcb, "Obsolete")
7367 NTKERNELAPI
7368 VOID
7369 NTAPI
7370 FsRtlInitializeMcb(
7371 _Out_ PMCB Mcb,
7372 _In_ POOL_TYPE PoolType);
7373
7374 _IRQL_requires_max_(APC_LEVEL)
7375 NTKERNELAPI
7376 VOID
7377 NTAPI
7378 FsRtlUninitializeMcb(
7379 _Inout_ PMCB Mcb);
7380
7381 _IRQL_requires_max_(APC_LEVEL)
7382 NTKERNELAPI
7383 VOID
7384 NTAPI
7385 FsRtlTruncateMcb(
7386 _Inout_ PMCB Mcb,
7387 _In_ VBN Vbn);
7388
7389 _IRQL_requires_max_(APC_LEVEL)
7390 NTKERNELAPI
7391 BOOLEAN
7392 NTAPI
7393 FsRtlAddMcbEntry(
7394 _Inout_ PMCB Mcb,
7395 _In_ VBN Vbn,
7396 _In_ LBN Lbn,
7397 _In_ ULONG SectorCount);
7398
7399 _IRQL_requires_max_(APC_LEVEL)
7400 NTKERNELAPI
7401 VOID
7402 NTAPI
7403 FsRtlRemoveMcbEntry(
7404 _Inout_ PMCB Mcb,
7405 _In_ VBN Vbn,
7406 _In_ ULONG SectorCount);
7407
7408 _IRQL_requires_max_(APC_LEVEL)
7409 NTKERNELAPI
7410 BOOLEAN
7411 NTAPI
7412 FsRtlLookupMcbEntry(
7413 _In_ PMCB Mcb,
7414 _In_ VBN Vbn,
7415 _Out_ PLBN Lbn,
7416 _Out_opt_ PULONG SectorCount,
7417 _Out_ PULONG Index);
7418
7419 _IRQL_requires_max_(APC_LEVEL)
7420 NTKERNELAPI
7421 BOOLEAN
7422 NTAPI
7423 FsRtlLookupLastMcbEntry(
7424 _In_ PMCB Mcb,
7425 _Out_ PVBN Vbn,
7426 _Out_ PLBN Lbn);
7427
7428 _IRQL_requires_max_(APC_LEVEL)
7429 NTKERNELAPI
7430 ULONG
7431 NTAPI
7432 FsRtlNumberOfRunsInMcb(
7433 _In_ PMCB Mcb);
7434
7435 _Must_inspect_result_
7436 _IRQL_requires_max_(APC_LEVEL)
7437 NTKERNELAPI
7438 BOOLEAN
7439 NTAPI
7440 FsRtlGetNextMcbEntry(
7441 _In_ PMCB Mcb,
7442 _In_ ULONG RunIndex,
7443 _Out_ PVBN Vbn,
7444 _Out_ PLBN Lbn,
7445 _Out_ PULONG SectorCount);
7446
7447 _IRQL_requires_max_(PASSIVE_LEVEL)
7448 NTKERNELAPI
7449 NTSTATUS
7450 NTAPI
7451 FsRtlBalanceReads(
7452 _In_ PDEVICE_OBJECT TargetDevice);
7453
7454 _IRQL_requires_max_(APC_LEVEL)
7455 NTKERNELAPI
7456 VOID
7457 NTAPI
7458 FsRtlInitializeOplock(
7459 _Inout_ POPLOCK Oplock);
7460
7461 _IRQL_requires_max_(APC_LEVEL)
7462 NTKERNELAPI
7463 VOID
7464 NTAPI
7465 FsRtlUninitializeOplock(
7466 _Inout_ POPLOCK Oplock);
7467
7468 _Must_inspect_result_
7469 _IRQL_requires_max_(APC_LEVEL)
7470 NTKERNELAPI
7471 NTSTATUS
7472 NTAPI
7473 FsRtlOplockFsctrl(
7474 _In_ POPLOCK Oplock,
7475 _In_ PIRP Irp,
7476 _In_ ULONG OpenCount);
7477
7478 _When_(CompletionRoutine != NULL, _Must_inspect_result_)
7479 _IRQL_requires_max_(APC_LEVEL)
7480 NTKERNELAPI
7481 NTSTATUS
7482 NTAPI
7483 FsRtlCheckOplock(
7484 _In_ POPLOCK Oplock,
7485 _In_ PIRP Irp,
7486 _In_opt_ PVOID Context,
7487 _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
7488 _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine);
7489
7490 _Must_inspect_result_
7491 _IRQL_requires_max_(APC_LEVEL)
7492 NTKERNELAPI
7493 BOOLEAN
7494 NTAPI
7495 FsRtlOplockIsFastIoPossible(
7496 _In_ POPLOCK Oplock);
7497
7498 _Must_inspect_result_
7499 _IRQL_requires_max_(APC_LEVEL)
7500 NTKERNELAPI
7501 BOOLEAN
7502 NTAPI
7503 FsRtlCurrentBatchOplock(
7504 _In_ POPLOCK Oplock);
7505
7506 _IRQL_requires_max_(APC_LEVEL)
7507 NTKERNELAPI
7508 NTSTATUS
7509 NTAPI
7510 FsRtlNotifyVolumeEvent(
7511 _In_ PFILE_OBJECT FileObject,
7512 _In_ ULONG EventCode);
7513
7514 _IRQL_requires_max_(APC_LEVEL)
7515 NTKERNELAPI
7516 VOID
7517 NTAPI
7518 FsRtlNotifyInitializeSync(
7519 _In_ PNOTIFY_SYNC *NotifySync);
7520
7521 _IRQL_requires_max_(APC_LEVEL)
7522 NTKERNELAPI
7523 VOID
7524 NTAPI
7525 FsRtlNotifyUninitializeSync(
7526 _In_ PNOTIFY_SYNC *NotifySync);
7527
7528 _IRQL_requires_max_(PASSIVE_LEVEL)
7529 NTKERNELAPI
7530 VOID
7531 NTAPI
7532 FsRtlNotifyFullChangeDirectory(
7533 _In_ PNOTIFY_SYNC NotifySync,
7534 _In_ PLIST_ENTRY NotifyList,
7535 _In_ PVOID FsContext,
7536 _In_ PSTRING FullDirectoryName,
7537 _In_ BOOLEAN WatchTree,
7538 _In_ BOOLEAN IgnoreBuffer,
7539 _In_ ULONG CompletionFilter,
7540 _In_opt_ PIRP NotifyIrp,
7541 _In_opt_ PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
7542 _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectContext);
7543
7544 _IRQL_requires_max_(PASSIVE_LEVEL)
7545 NTKERNELAPI
7546 VOID
7547 NTAPI
7548 FsRtlNotifyFilterReportChange(
7549 _In_ PNOTIFY_SYNC NotifySync,
7550 _In_ PLIST_ENTRY NotifyList,
7551 _In_ PSTRING FullTargetName,
7552 _In_ USHORT TargetNameOffset,
7553 _In_opt_ PSTRING StreamName,
7554 _In_opt_ PSTRING NormalizedParentName,
7555 _In_ ULONG FilterMatch,
7556 _In_ ULONG Action,
7557 _In_opt_ PVOID TargetContext,
7558 _In_opt_ PVOID FilterContext);
7559
7560 _IRQL_requires_max_(PASSIVE_LEVEL)
7561 NTKERNELAPI
7562 VOID
7563 NTAPI
7564 FsRtlNotifyFullReportChange(
7565 _In_ PNOTIFY_SYNC NotifySync,
7566 _In_ PLIST_ENTRY NotifyList,
7567 _In_ PSTRING FullTargetName,
7568 _In_ USHORT TargetNameOffset,
7569 _In_opt_ PSTRING StreamName,
7570 _In_opt_ PSTRING NormalizedParentName,
7571 _In_ ULONG FilterMatch,
7572 _In_ ULONG Action,
7573 _In_opt_ PVOID TargetContext);
7574
7575 _IRQL_requires_max_(APC_LEVEL)
7576 NTKERNELAPI
7577 VOID
7578 NTAPI
7579 FsRtlNotifyCleanup(
7580 _In_ PNOTIFY_SYNC NotifySync,
7581 _In_ PLIST_ENTRY NotifyList,
7582 _In_ PVOID FsContext);
7583
7584 _IRQL_requires_max_(PASSIVE_LEVEL)
7585 NTKERNELAPI
7586 VOID
7587 NTAPI
7588 FsRtlDissectName(
7589 _In_ UNICODE_STRING Name,
7590 _Out_ PUNICODE_STRING FirstPart,
7591 _Out_ PUNICODE_STRING RemainingPart);
7592
7593 _Must_inspect_result_
7594 _IRQL_requires_max_(PASSIVE_LEVEL)
7595 NTKERNELAPI
7596 BOOLEAN
7597 NTAPI
7598 FsRtlDoesNameContainWildCards(
7599 _In_ PUNICODE_STRING Name);
7600
7601 _Must_inspect_result_
7602 _IRQL_requires_max_(PASSIVE_LEVEL)
7603 NTKERNELAPI
7604 BOOLEAN
7605 NTAPI
7606 FsRtlAreNamesEqual(
7607 _In_ PCUNICODE_STRING Name1,
7608 _In_ PCUNICODE_STRING Name2,
7609 _In_ BOOLEAN IgnoreCase,
7610 _In_reads_opt_(0x10000) PCWCH UpcaseTable);
7611
7612 _Must_inspect_result_
7613 _IRQL_requires_max_(PASSIVE_LEVEL)
7614 NTKERNELAPI
7615 BOOLEAN
7616 NTAPI
7617 FsRtlIsNameInExpression(
7618 _In_ PUNICODE_STRING Expression,
7619 _In_ PUNICODE_STRING Name,
7620 _In_ BOOLEAN IgnoreCase,
7621 _In_opt_ PWCHAR UpcaseTable);
7622
7623 _IRQL_requires_max_(DISPATCH_LEVEL)
7624 NTKERNELAPI
7625 VOID
7626 NTAPI
7627 FsRtlPostPagingFileStackOverflow(
7628 _In_ PVOID Context,
7629 _In_ PKEVENT Event,
7630 _In_ PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
7631
7632 _IRQL_requires_max_(DISPATCH_LEVEL)
7633 NTKERNELAPI
7634 VOID
7635 NTAPI
7636 FsRtlPostStackOverflow (
7637 _In_ PVOID Context,
7638 _In_ PKEVENT Event,
7639 _In_ PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
7640
7641 _Must_inspect_result_
7642 _IRQL_requires_max_(PASSIVE_LEVEL)
7643 NTKERNELAPI
7644 NTSTATUS
7645 NTAPI
7646 FsRtlRegisterUncProvider(
7647 _Out_ PHANDLE MupHandle,
7648 _In_ PUNICODE_STRING RedirectorDeviceName,
7649 _In_ BOOLEAN MailslotsSupported);
7650
7651 _IRQL_requires_max_(PASSIVE_LEVEL)
7652 NTKERNELAPI
7653 VOID
7654 NTAPI
7655 FsRtlDeregisterUncProvider(
7656 _In_ HANDLE Handle);
7657
7658 _IRQL_requires_max_(APC_LEVEL)
7659 NTKERNELAPI
7660 VOID
7661 NTAPI
7662 FsRtlTeardownPerStreamContexts(
7663 _In_ PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
7664
7665 _Must_inspect_result_
7666 _IRQL_requires_max_(APC_LEVEL)
7667 NTKERNELAPI
7668 NTSTATUS
7669 NTAPI
7670 FsRtlCreateSectionForDataScan(
7671 _Out_ PHANDLE SectionHandle,
7672 _Outptr_ PVOID *SectionObject,
7673 _Out_opt_ PLARGE_INTEGER SectionFileSize,
7674 _In_ PFILE_OBJECT FileObject,
7675 _In_ ACCESS_MASK DesiredAccess,
7676 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes,
7677 _In_opt_ PLARGE_INTEGER MaximumSize,
7678 _In_ ULONG SectionPageProtection,
7679 _In_ ULONG AllocationAttributes,
7680 _In_ ULONG Flags);
7681
7682 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
7683
7684 #if (NTDDI_VERSION >= NTDDI_WINXP)
7685
7686 _IRQL_requires_max_(PASSIVE_LEVEL)
7687 NTKERNELAPI
7688 VOID
7689 NTAPI
7690 FsRtlNotifyFilterChangeDirectory(
7691 _In_ PNOTIFY_SYNC NotifySync,
7692 _In_ PLIST_ENTRY NotifyList,
7693 _In_ PVOID FsContext,
7694 _In_ PSTRING FullDirectoryName,
7695 _In_ BOOLEAN WatchTree,
7696 _In_ BOOLEAN IgnoreBuffer,
7697 _In_ ULONG CompletionFilter,
7698 _In_opt_ PIRP NotifyIrp,
7699 _In_opt_ PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
7700 _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectContext,
7701 _In_opt_ PFILTER_REPORT_CHANGE FilterCallback);
7702
7703 _Must_inspect_result_
7704 _IRQL_requires_max_(APC_LEVEL)
7705 NTKERNELAPI
7706 NTSTATUS
7707 NTAPI
7708 FsRtlInsertPerStreamContext(
7709 _In_ PFSRTL_ADVANCED_FCB_HEADER PerStreamContext,
7710 _In_ PFSRTL_PER_STREAM_CONTEXT Ptr);
7711
7712 _Must_inspect_result_
7713 _IRQL_requires_max_(APC_LEVEL)
7714 NTKERNELAPI
7715 PFSRTL_PER_STREAM_CONTEXT
7716 NTAPI
7717 FsRtlLookupPerStreamContextInternal(
7718 _In_ PFSRTL_ADVANCED_FCB_HEADER StreamContext,
7719 _In_opt_ PVOID OwnerId,
7720 _In_opt_ PVOID InstanceId);
7721
7722 _Must_inspect_result_
7723 _IRQL_requires_max_(APC_LEVEL)
7724 NTKERNELAPI
7725 PFSRTL_PER_STREAM_CONTEXT
7726 NTAPI
7727 FsRtlRemovePerStreamContext(
7728 _In_ PFSRTL_ADVANCED_FCB_HEADER StreamContext,
7729 _In_opt_ PVOID OwnerId,
7730 _In_opt_ PVOID InstanceId);
7731
7732 NTKERNELAPI
7733 VOID
7734 NTAPI
7735 FsRtlIncrementCcFastReadNotPossible(
7736 VOID);
7737
7738 NTKERNELAPI
7739 VOID
7740 NTAPI
7741 FsRtlIncrementCcFastReadWait(VOID);
7742
7743 NTKERNELAPI
7744 VOID
7745 NTAPI
7746 FsRtlIncrementCcFastReadNoWait(VOID);
7747
7748 NTKERNELAPI
7749 VOID
7750 NTAPI
7751 FsRtlIncrementCcFastReadResourceMiss(VOID);
7752
7753 _IRQL_requires_max_(APC_LEVEL)
7754 NTKERNELAPI
7755 LOGICAL
7756 NTAPI
7757 FsRtlIsPagingFile(
7758 _In_ PFILE_OBJECT FileObject);
7759
7760 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
7761
7762 #if (NTDDI_VERSION >= NTDDI_WS03)
7763
7764 _IRQL_requires_max_(APC_LEVEL)
7765 NTKERNELAPI
7766 VOID
7767 NTAPI
7768 FsRtlInitializeBaseMcb(
7769 _Out_ PBASE_MCB Mcb,
7770 _In_ POOL_TYPE PoolType);
7771
7772 _IRQL_requires_max_(APC_LEVEL)
7773 NTKERNELAPI
7774 VOID
7775 NTAPI
7776 FsRtlUninitializeBaseMcb(
7777 _In_ PBASE_MCB Mcb);
7778
7779 _IRQL_requires_max_(APC_LEVEL)
7780 NTKERNELAPI
7781 VOID
7782 NTAPI
7783 FsRtlResetBaseMcb(
7784 _Out_ PBASE_MCB Mcb);
7785
7786 _IRQL_requires_max_(APC_LEVEL)
7787 NTKERNELAPI
7788 VOID
7789 NTAPI
7790 FsRtlTruncateBaseMcb(
7791 _Inout_ PBASE_MCB Mcb,
7792 _In_ LONGLONG Vbn);
7793
7794 _IRQL_requires_max_(APC_LEVEL)
7795 NTKERNELAPI
7796 BOOLEAN
7797 NTAPI
7798 FsRtlAddBaseMcbEntry(
7799 _Inout_ PBASE_MCB Mcb,
7800 _In_ LONGLONG Vbn,
7801 _In_ LONGLONG Lbn,
7802 _In_ LONGLONG SectorCount);
7803
7804 _IRQL_requires_max_(APC_LEVEL)
7805 NTKERNELAPI
7806 BOOLEAN
7807 NTAPI
7808 FsRtlRemoveBaseMcbEntry(
7809 _Inout_ PBASE_MCB Mcb,
7810 _In_ LONGLONG Vbn,
7811 _In_ LONGLONG SectorCount);
7812
7813 _IRQL_requires_max_(APC_LEVEL)
7814 NTKERNELAPI
7815 BOOLEAN
7816 NTAPI
7817 FsRtlLookupBaseMcbEntry(
7818 _In_ PBASE_MCB Mcb,
7819 _In_ LONGLONG Vbn,
7820 _Out_opt_ PLONGLONG Lbn,
7821 _Out_opt_ PLONGLONG SectorCountFromLbn,
7822 _Out_opt_ PLONGLONG StartingLbn,
7823 _Out_opt_ PLONGLONG SectorCountFromStartingLbn,
7824 _Out_opt_ PULONG Index);
7825
7826 _IRQL_requires_max_(APC_LEVEL)
7827 NTKERNELAPI
7828 BOOLEAN
7829 NTAPI
7830 FsRtlLookupLastBaseMcbEntry(
7831 _In_ PBASE_MCB Mcb,
7832 _Out_ PLONGLONG Vbn,
7833 _Out_ PLONGLONG Lbn);
7834
7835 _IRQL_requires_max_(APC_LEVEL)
7836 NTKERNELAPI
7837 BOOLEAN
7838 NTAPI
7839 FsRtlLookupLastBaseMcbEntryAndIndex(
7840 _In_ PBASE_MCB OpaqueMcb,
7841 _Inout_ PLONGLONG LargeVbn,
7842 _Inout_ PLONGLONG LargeLbn,
7843 _Inout_ PULONG Index);
7844
7845 _IRQL_requires_max_(APC_LEVEL)
7846 NTKERNELAPI
7847 ULONG
7848 NTAPI
7849 FsRtlNumberOfRunsInBaseMcb(
7850 _In_ PBASE_MCB Mcb);
7851
7852 _IRQL_requires_max_(APC_LEVEL)
7853 NTKERNELAPI
7854 BOOLEAN
7855 NTAPI
7856 FsRtlGetNextBaseMcbEntry(
7857 _In_ PBASE_MCB Mcb,
7858 _In_ ULONG RunIndex,
7859 _Out_ PLONGLONG Vbn,
7860 _Out_ PLONGLONG Lbn,
7861 _Out_ PLONGLONG SectorCount);
7862
7863 _IRQL_requires_max_(APC_LEVEL)
7864 NTKERNELAPI
7865 BOOLEAN
7866 NTAPI
7867 FsRtlSplitBaseMcb(
7868 _Inout_ PBASE_MCB Mcb,
7869 _In_ LONGLONG Vbn,
7870 _In_ LONGLONG Amount);
7871
7872 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
7873
7874 #if (NTDDI_VERSION >= NTDDI_VISTA)
7875
7876 _When_(!Flags & MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE, _Must_inspect_result_)
7877 _IRQL_requires_max_(APC_LEVEL)
7878 BOOLEAN
7879 NTAPI
7880 FsRtlInitializeBaseMcbEx(
7881 _Out_ PBASE_MCB Mcb,
7882 _In_ POOL_TYPE PoolType,
7883 _In_ USHORT Flags);
7884
7885 _Must_inspect_result_
7886 _IRQL_requires_max_(APC_LEVEL)
7887 NTSTATUS
7888 NTAPI
7889 FsRtlAddBaseMcbEntryEx(
7890 _Inout_ PBASE_MCB Mcb,
7891 _In_ LONGLONG Vbn,
7892 _In_ LONGLONG Lbn,
7893 _In_ LONGLONG SectorCount);
7894
7895 _Must_inspect_result_
7896 _IRQL_requires_max_(APC_LEVEL)
7897 NTKERNELAPI
7898 BOOLEAN
7899 NTAPI
7900 FsRtlCurrentOplock(
7901 _In_ POPLOCK Oplock);
7902
7903 _Must_inspect_result_
7904 _IRQL_requires_max_(APC_LEVEL)
7905 NTKERNELAPI
7906 NTSTATUS
7907 NTAPI
7908 FsRtlOplockBreakToNone(
7909 _Inout_ POPLOCK Oplock,
7910 _In_opt_ PIO_STACK_LOCATION IrpSp,
7911 _In_ PIRP Irp,
7912 _In_opt_ PVOID Context,
7913 _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
7914 _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine);
7915
7916 _IRQL_requires_max_(DISPATCH_LEVEL)
7917 NTKERNELAPI
7918 NTSTATUS
7919 NTAPI
7920 FsRtlNotifyVolumeEventEx(
7921 _In_ PFILE_OBJECT FileObject,
7922 _In_ ULONG EventCode,
7923 _In_ PTARGET_DEVICE_CUSTOM_NOTIFICATION Event);
7924
7925 _IRQL_requires_max_(APC_LEVEL)
7926 NTKERNELAPI
7927 VOID
7928 NTAPI
7929 FsRtlNotifyCleanupAll(
7930 _In_ PNOTIFY_SYNC NotifySync,
7931 _In_ PLIST_ENTRY NotifyList);
7932
7933 _Must_inspect_result_
7934 _IRQL_requires_max_(PASSIVE_LEVEL)
7935 NTSTATUS
7936 NTAPI
7937 FsRtlRegisterUncProviderEx(
7938 _Out_ PHANDLE MupHandle,
7939 _In_ PUNICODE_STRING RedirDevName,
7940 _In_ PDEVICE_OBJECT DeviceObject,
7941 _In_ ULONG Flags);
7942
7943 _Must_inspect_result_
7944 _When_(Irp!=NULL, _IRQL_requires_max_(PASSIVE_LEVEL))
7945 _When_(Irp==NULL, _IRQL_requires_max_(APC_LEVEL))
7946 NTKERNELAPI
7947 NTSTATUS
7948 NTAPI
7949 FsRtlCancellableWaitForSingleObject(
7950 _In_ PVOID Object,
7951 _In_opt_ PLARGE_INTEGER Timeout,
7952 _In_opt_ PIRP Irp);
7953
7954 _Must_inspect_result_
7955 _When_(Irp != NULL, _IRQL_requires_max_(PASSIVE_LEVEL))
7956 _When_(Irp == NULL, _IRQL_requires_max_(APC_LEVEL))
7957 NTKERNELAPI
7958 NTSTATUS
7959 NTAPI
7960 FsRtlCancellableWaitForMultipleObjects(
7961 _In_ ULONG Count,
7962 _In_reads_(Count) PVOID ObjectArray[],
7963 _In_ WAIT_TYPE WaitType,
7964 _In_opt_ PLARGE_INTEGER Timeout,
7965 _In_opt_ PKWAIT_BLOCK WaitBlockArray,
7966 _In_opt_ PIRP Irp);
7967
7968 _Must_inspect_result_
7969 _IRQL_requires_max_(APC_LEVEL)
7970 NTKERNELAPI
7971 NTSTATUS
7972 NTAPI
7973 FsRtlMupGetProviderInfoFromFileObject(
7974 _In_ PFILE_OBJECT pFileObject,
7975 _In_ ULONG Level,
7976 _Out_writes_bytes_(*pBufferSize) PVOID pBuffer,
7977 _Inout_ PULONG pBufferSize);
7978
7979 _Must_inspect_result_
7980 _IRQL_requires_max_(APC_LEVEL)
7981 NTKERNELAPI
7982 NTSTATUS
7983 NTAPI
7984 FsRtlMupGetProviderIdFromName(
7985 _In_ PUNICODE_STRING pProviderName,
7986 _Out_ PULONG32 pProviderId);
7987
7988 NTKERNELAPI
7989 VOID
7990 NTAPI
7991 FsRtlIncrementCcFastMdlReadWait(VOID);
7992
7993 _Must_inspect_result_
7994 _IRQL_requires_max_(PASSIVE_LEVEL)
7995 NTKERNELAPI
7996 NTSTATUS
7997 NTAPI
7998 FsRtlValidateReparsePointBuffer(
7999 _In_ ULONG BufferLength,
8000 _In_reads_bytes_(BufferLength) PREPARSE_DATA_BUFFER ReparseBuffer);
8001
8002 _Must_inspect_result_
8003 _IRQL_requires_max_(PASSIVE_LEVEL)
8004 NTKERNELAPI
8005 NTSTATUS
8006 NTAPI
8007 FsRtlRemoveDotsFromPath(
8008 _Inout_updates_bytes_(PathLength) PWSTR OriginalString,
8009 _In_ USHORT PathLength,
8010 _Out_ USHORT *NewLength);
8011
8012 _Must_inspect_result_
8013 _IRQL_requires_max_(APC_LEVEL)
8014 NTKERNELAPI
8015 NTSTATUS
8016 NTAPI
8017 FsRtlAllocateExtraCreateParameterList(
8018 _In_ FSRTL_ALLOCATE_ECPLIST_FLAGS Flags,
8019 _Outptr_ PECP_LIST *EcpList);
8020
8021 _IRQL_requires_max_(APC_LEVEL)
8022 NTKERNELAPI
8023 VOID
8024 NTAPI
8025 FsRtlFreeExtraCreateParameterList(
8026 _In_ PECP_LIST EcpList);
8027
8028 _Must_inspect_result_
8029 _IRQL_requires_max_(APC_LEVEL)
8030 NTKERNELAPI
8031 NTSTATUS
8032 NTAPI
8033 FsRtlAllocateExtraCreateParameter(
8034 _In_ LPCGUID EcpType,
8035 _In_ ULONG SizeOfContext,
8036 _In_ FSRTL_ALLOCATE_ECP_FLAGS Flags,
8037 _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
8038 _In_ ULONG PoolTag,
8039 _Outptr_result_bytebuffer_(SizeOfContext) PVOID *EcpContext);
8040
8041 _IRQL_requires_max_(APC_LEVEL)
8042 NTKERNELAPI
8043 VOID
8044 NTAPI
8045 FsRtlFreeExtraCreateParameter(
8046 _In_ PVOID EcpContext);
8047
8048 _When_(Flags|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL, _IRQL_requires_max_(DISPATCH_LEVEL))
8049 _When_(!(Flags|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL), _IRQL_requires_max_(APC_LEVEL))
8050 NTKERNELAPI
8051 VOID
8052 NTAPI
8053 FsRtlInitExtraCreateParameterLookasideList(
8054 _Inout_ PVOID Lookaside,
8055 _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags,
8056 _In_ SIZE_T Size,
8057 _In_ ULONG Tag);
8058
8059 _When_(Flags|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL, _IRQL_requires_max_(DISPATCH_LEVEL))
8060 _When_(!(Flags|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL), _IRQL_requires_max_(APC_LEVEL))
8061 VOID
8062 NTAPI
8063 FsRtlDeleteExtraCreateParameterLookasideList(
8064 _Inout_ PVOID Lookaside,
8065 _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags);
8066
8067 _Must_inspect_result_
8068 _IRQL_requires_max_(APC_LEVEL)
8069 NTKERNELAPI
8070 NTSTATUS
8071 NTAPI
8072 FsRtlAllocateExtraCreateParameterFromLookasideList(
8073 _In_ LPCGUID EcpType,
8074 ULONG SizeOfContext,
8075 _In_ FSRTL_ALLOCATE_ECP_FLAGS Flags,
8076 _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
8077 _Inout_ PVOID LookasideList,
8078 _Outptr_ PVOID *EcpContext);
8079
8080 _Must_inspect_result_
8081 _IRQL_requires_max_(APC_LEVEL)
8082 NTKERNELAPI
8083 NTSTATUS
8084 NTAPI
8085 FsRtlInsertExtraCreateParameter(
8086 _Inout_ PECP_LIST EcpList,
8087 _Inout_ PVOID EcpContext);
8088
8089 _Must_inspect_result_
8090 _IRQL_requires_max_(APC_LEVEL)
8091 NTKERNELAPI
8092 NTSTATUS
8093 NTAPI
8094 FsRtlFindExtraCreateParameter(
8095 _In_ PECP_LIST EcpList,
8096 _In_ LPCGUID EcpType,
8097 _Outptr_opt_ PVOID *EcpContext,
8098 _Out_opt_ ULONG *EcpContextSize);
8099
8100 _Must_inspect_result_
8101 _IRQL_requires_max_(APC_LEVEL)
8102 NTKERNELAPI
8103 NTSTATUS
8104 NTAPI
8105 FsRtlRemoveExtraCreateParameter(
8106 _Inout_ PECP_LIST EcpList,
8107 _In_ LPCGUID EcpType,
8108 _Outptr_ PVOID *EcpContext,
8109 _Out_opt_ ULONG *EcpContextSize);
8110
8111 _Must_inspect_result_
8112 _IRQL_requires_max_(APC_LEVEL)
8113 NTKERNELAPI
8114 NTSTATUS
8115 NTAPI
8116 FsRtlGetEcpListFromIrp(
8117 _In_ PIRP Irp,
8118 _Outptr_result_maybenull_ PECP_LIST *EcpList);
8119
8120 _Must_inspect_result_
8121 _IRQL_requires_max_(APC_LEVEL)
8122 NTKERNELAPI
8123 NTSTATUS
8124 NTAPI
8125 FsRtlSetEcpListIntoIrp(
8126 _Inout_ PIRP Irp,
8127 _In_ PECP_LIST EcpList);
8128
8129 _Must_inspect_result_
8130 _IRQL_requires_max_(APC_LEVEL)
8131 NTKERNELAPI
8132 NTSTATUS
8133 NTAPI
8134 FsRtlGetNextExtraCreateParameter(
8135 _In_ PECP_LIST EcpList,
8136 _In_opt_ PVOID CurrentEcpContext,
8137 _Out_opt_ LPGUID NextEcpType,
8138 _Outptr_opt_ PVOID *NextEcpContext,
8139 _Out_opt_ ULONG *NextEcpContextSize);
8140
8141 _IRQL_requires_max_(APC_LEVEL)
8142 NTKERNELAPI
8143 VOID
8144 NTAPI
8145 FsRtlAcknowledgeEcp(
8146 _In_ PVOID EcpContext);
8147
8148 _IRQL_requires_max_(APC_LEVEL)
8149 NTKERNELAPI
8150 BOOLEAN
8151 NTAPI
8152 FsRtlIsEcpAcknowledged(
8153 _In_ PVOID EcpContext);
8154
8155 _IRQL_requires_max_(APC_LEVEL)
8156 NTKERNELAPI
8157 BOOLEAN
8158 NTAPI
8159 FsRtlIsEcpFromUserMode(
8160 _In_ PVOID EcpContext);
8161
8162 _Must_inspect_result_
8163 _IRQL_requires_max_(PASSIVE_LEVEL)
8164 NTKERNELAPI
8165 NTSTATUS
8166 NTAPI
8167 FsRtlChangeBackingFileObject(
8168 _In_opt_ PFILE_OBJECT CurrentFileObject,
8169 _In_ PFILE_OBJECT NewFileObject,
8170 _In_ FSRTL_CHANGE_BACKING_TYPE ChangeBackingType,
8171 _In_ ULONG Flags);
8172
8173 _Must_inspect_result_
8174 _IRQL_requires_max_(APC_LEVEL)
8175 NTKERNELAPI
8176 NTSTATUS
8177 NTAPI
8178 FsRtlLogCcFlushError(
8179 _In_ PUNICODE_STRING FileName,
8180 _In_ PDEVICE_OBJECT DeviceObject,
8181 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
8182 _In_ NTSTATUS FlushError,
8183 _In_ ULONG Flags);
8184
8185 _IRQL_requires_max_(APC_LEVEL)
8186 NTKERNELAPI
8187 BOOLEAN
8188 NTAPI
8189 FsRtlAreVolumeStartupApplicationsComplete(VOID);
8190
8191 NTKERNELAPI
8192 ULONG
8193 NTAPI
8194 FsRtlQueryMaximumVirtualDiskNestingLevel(VOID);
8195
8196 NTKERNELAPI
8197 NTSTATUS
8198 NTAPI
8199 FsRtlGetVirtualDiskNestingLevel(
8200 _In_ PDEVICE_OBJECT DeviceObject,
8201 _Out_ PULONG NestingLevel,
8202 _Out_opt_ PULONG NestingFlags);
8203
8204 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8205
8206 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
8207 _When_(Flags | OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK, _Must_inspect_result_)
8208 _IRQL_requires_max_(APC_LEVEL)
8209 NTKERNELAPI
8210 NTSTATUS
8211 NTAPI
8212 FsRtlCheckOplockEx(
8213 _In_ POPLOCK Oplock,
8214 _In_ PIRP Irp,
8215 _In_ ULONG Flags,
8216 _In_opt_ PVOID Context,
8217 _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
8218 _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine);
8219
8220 #endif
8221
8222 #if (NTDDI_VERSION >= NTDDI_WIN7)
8223
8224 _IRQL_requires_max_(APC_LEVEL)
8225 NTKERNELAPI
8226 BOOLEAN
8227 NTAPI
8228 FsRtlAreThereCurrentOrInProgressFileLocks(
8229 _In_ PFILE_LOCK FileLock);
8230
8231 _Must_inspect_result_
8232 _IRQL_requires_max_(APC_LEVEL)
8233 NTKERNELAPI
8234 BOOLEAN
8235 NTAPI
8236 FsRtlOplockIsSharedRequest(
8237 _In_ PIRP Irp);
8238
8239 _Must_inspect_result_
8240 _IRQL_requires_max_(APC_LEVEL)
8241 NTKERNELAPI
8242 NTSTATUS
8243 NTAPI
8244 FsRtlOplockBreakH(
8245 _In_ POPLOCK Oplock,
8246 _In_ PIRP Irp,
8247 _In_ ULONG Flags,
8248 _In_opt_ PVOID Context,
8249 _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
8250 _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine);
8251
8252 _IRQL_requires_max_(APC_LEVEL)
8253 NTKERNELAPI
8254 BOOLEAN
8255 NTAPI
8256 FsRtlCurrentOplockH(
8257 _In_ POPLOCK Oplock);
8258
8259 _Must_inspect_result_
8260 _IRQL_requires_max_(APC_LEVEL)
8261 NTKERNELAPI
8262 NTSTATUS
8263 NTAPI
8264 FsRtlOplockBreakToNoneEx(
8265 _Inout_ POPLOCK Oplock,
8266 _In_ PIRP Irp,
8267 _In_ ULONG Flags,
8268 _In_opt_ PVOID Context,
8269 _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
8270 _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine);
8271
8272 _Must_inspect_result_
8273 _IRQL_requires_max_(APC_LEVEL)
8274 NTKERNELAPI
8275 NTSTATUS
8276 NTAPI
8277 FsRtlOplockFsctrlEx(
8278 _In_ POPLOCK Oplock,
8279 _In_ PIRP Irp,
8280 _In_ ULONG OpenCount,
8281 _In_ ULONG Flags);
8282
8283 _IRQL_requires_max_(APC_LEVEL)
8284 NTKERNELAPI
8285 BOOLEAN
8286 NTAPI
8287 FsRtlOplockKeysEqual(
8288 _In_opt_ PFILE_OBJECT Fo1,
8289 _In_opt_ PFILE_OBJECT Fo2);
8290
8291 NTKERNELAPI
8292 NTSTATUS
8293 NTAPI
8294 FsRtlInitializeExtraCreateParameterList(
8295 _Inout_ PECP_LIST EcpList);
8296
8297 NTKERNELAPI
8298 VOID
8299 NTAPI
8300 FsRtlInitializeExtraCreateParameter(
8301 _Out_ PECP_HEADER Ecp,
8302 _In_ ULONG EcpFlags,
8303 _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
8304 _In_ ULONG TotalSize,
8305 _In_ LPCGUID EcpType,
8306 _In_opt_ PVOID ListAllocatedFrom);
8307
8308 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
8309
8310 _Must_inspect_result_
8311 _IRQL_requires_max_(APC_LEVEL)
8312 NTKERNELAPI
8313 NTSTATUS
8314 NTAPI
8315 FsRtlInsertPerFileContext(
8316 _In_ PVOID* PerFileContextPointer,
8317 _In_ PFSRTL_PER_FILE_CONTEXT Ptr);
8318
8319 _Must_inspect_result_
8320 _IRQL_requires_max_(APC_LEVEL)
8321 NTKERNELAPI
8322 PFSRTL_PER_FILE_CONTEXT
8323 NTAPI
8324 FsRtlLookupPerFileContext(
8325 _In_ PVOID* PerFileContextPointer,
8326 _In_opt_ PVOID OwnerId,
8327 _In_opt_ PVOID InstanceId);
8328
8329 _Must_inspect_result_
8330 _IRQL_requires_max_(APC_LEVEL)
8331 NTKERNELAPI
8332 PFSRTL_PER_FILE_CONTEXT
8333 NTAPI
8334 FsRtlRemovePerFileContext(
8335 _In_ PVOID* PerFileContextPointer,
8336 _In_opt_ PVOID OwnerId,
8337 _In_opt_ PVOID InstanceId);
8338
8339 _IRQL_requires_max_(APC_LEVEL)
8340 NTKERNELAPI
8341 VOID
8342 NTAPI
8343 FsRtlTeardownPerFileContexts(
8344 _In_ PVOID* PerFileContextPointer);
8345
8346 _Must_inspect_result_
8347 _IRQL_requires_max_(APC_LEVEL)
8348 NTKERNELAPI
8349 NTSTATUS
8350 NTAPI
8351 FsRtlInsertPerFileObjectContext(
8352 _In_ PFILE_OBJECT FileObject,
8353 _In_ PFSRTL_PER_FILEOBJECT_CONTEXT Ptr);
8354
8355 _Must_inspect_result_
8356 _IRQL_requires_max_(APC_LEVEL)
8357 NTKERNELAPI
8358 PFSRTL_PER_FILEOBJECT_CONTEXT
8359 NTAPI
8360 FsRtlLookupPerFileObjectContext(
8361 _In_ PFILE_OBJECT FileObject,
8362 _In_opt_ PVOID OwnerId,
8363 _In_opt_ PVOID InstanceId);
8364
8365 _Must_inspect_result_
8366 _IRQL_requires_max_(APC_LEVEL)
8367 NTKERNELAPI
8368 PFSRTL_PER_FILEOBJECT_CONTEXT
8369 NTAPI
8370 FsRtlRemovePerFileObjectContext(
8371 _In_ PFILE_OBJECT FileObject,
8372 _In_opt_ PVOID OwnerId,
8373 _In_opt_ PVOID InstanceId);
8374
8375 #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
8376 FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
8377 )
8378
8379 #define FsRtlAreThereCurrentFileLocks(FL) ( \
8380 ((FL)->FastIoIsQuestionable) \
8381 )
8382
8383 #define FsRtlIncrementLockRequestsInProgress(FL) { \
8384 ASSERT( (FL)->LockRequestsInProgress >= 0 ); \
8385 (void) \
8386 (InterlockedIncrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
8387 }
8388
8389 #define FsRtlDecrementLockRequestsInProgress(FL) { \
8390 ASSERT( (FL)->LockRequestsInProgress > 0 ); \
8391 (void) \
8392 (InterlockedDecrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
8393 }
8394
8395 #ifdef _NTSYSTEM_
8396 extern const UCHAR * const FsRtlLegalAnsiCharacterArray;
8397 #define LEGAL_ANSI_CHARACTER_ARRAY FsRtlLegalAnsiCharacterArray
8398 #else
8399 __CREATE_NTOS_DATA_IMPORT_ALIAS(FsRtlLegalAnsiCharacterArray)
8400 extern const UCHAR * const *FsRtlLegalAnsiCharacterArray;
8401 #define LEGAL_ANSI_CHARACTER_ARRAY (*FsRtlLegalAnsiCharacterArray)
8402 #endif
8403
8404 #define FsRtlIsAnsiCharacterWild(C) ( \
8405 FlagOn(LEGAL_ANSI_CHARACTER_ARRAY[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \
8406 )
8407
8408 #define FsRtlIsAnsiCharacterLegalFat(C, WILD) ( \
8409 FlagOn(LEGAL_ANSI_CHARACTER_ARRAY[(UCHAR)(C)], (FSRTL_FAT_LEGAL) | \
8410 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
8411 )
8412
8413 #define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) ( \
8414 FlagOn(LEGAL_ANSI_CHARACTER_ARRAY[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) | \
8415 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
8416 )
8417
8418 #define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) ( \
8419 FlagOn(LEGAL_ANSI_CHARACTER_ARRAY[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) | \
8420 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
8421 )
8422
8423 #define FsRtlIsAnsiCharacterLegalNtfsStream(C,WILD_OK) ( \
8424 FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_NTFS_STREAM_LEGAL) \
8425 )
8426
8427 #define FsRtlIsAnsiCharacterLegal(C,FLAGS) ( \
8428 FsRtlTestAnsiCharacter((C), TRUE, FALSE, (FLAGS)) \
8429 )
8430
8431 #define FsRtlTestAnsiCharacter(C, DEFAULT_RET, WILD_OK, FLAGS) ( \
8432 ((SCHAR)(C) < 0) ? DEFAULT_RET : \
8433 FlagOn( LEGAL_ANSI_CHARACTER_ARRAY[(C)], \
8434 (FLAGS) | \
8435 ((WILD_OK) ? FSRTL_WILD_CHARACTER : 0) ) \
8436 )
8437
8438 #define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \
8439 (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \
8440 (NLS_MB_CODE_PAGE_TAG && \
8441 (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \
8442 )
8443
8444 #define FsRtlIsUnicodeCharacterWild(C) ( \
8445 (((C) >= 0x40) ? \
8446 FALSE : \
8447 FlagOn(LEGAL_ANSI_CHARACTER_ARRAY[(C)], FSRTL_WILD_CHARACTER )) \
8448 )
8449
8450 #define FsRtlInitPerFileContext( _fc, _owner, _inst, _cb) \
8451 ((_fc)->OwnerId = (_owner), \
8452 (_fc)->InstanceId = (_inst), \
8453 (_fc)->FreeCallback = (_cb))
8454
8455 #define FsRtlGetPerFileContextPointer(_fo) \
8456 (FsRtlSupportsPerFileContexts(_fo) ? \
8457 FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer : \
8458 NULL)
8459
8460 #define FsRtlSupportsPerFileContexts(_fo) \
8461 ((FsRtlGetPerStreamContextPointer(_fo) != NULL) && \
8462 (FsRtlGetPerStreamContextPointer(_fo)->Version >= FSRTL_FCB_HEADER_V1) && \
8463 (FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer != NULL))
8464
8465 #define FsRtlSetupAdvancedHeaderEx( _advhdr, _fmutx, _fctxptr ) \
8466 { \
8467 FsRtlSetupAdvancedHeader( _advhdr, _fmutx ); \
8468 if ((_fctxptr) != NULL) { \
8469 (_advhdr)->FileContextSupportPointer = (_fctxptr); \
8470 } \
8471 }
8472
8473 #define FsRtlGetPerStreamContextPointer(FO) ( \
8474 (PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext \
8475 )
8476
8477 #define FsRtlInitPerStreamContext(PSC, O, I, FC) ( \
8478 (PSC)->OwnerId = (O), \
8479 (PSC)->InstanceId = (I), \
8480 (PSC)->FreeCallback = (FC) \
8481 )
8482
8483 #define FsRtlSupportsPerStreamContexts(FO) ( \
8484 (BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) && \
8485 FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \
8486 FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS)) \
8487 )
8488
8489 #define FsRtlLookupPerStreamContext(_sc, _oid, _iid) \
8490 (((NULL != (_sc)) && \
8491 FlagOn((_sc)->Flags2,FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS) && \
8492 !IsListEmpty(&(_sc)->FilterContexts)) ? \
8493 FsRtlLookupPerStreamContextInternal((_sc), (_oid), (_iid)) : \
8494 NULL)
8495
8496 _IRQL_requires_max_(APC_LEVEL)
8497 FORCEINLINE
8498 VOID
8499 NTAPI
8500 FsRtlSetupAdvancedHeader(
8501 _In_ PVOID AdvHdr,
8502 _In_ PFAST_MUTEX FMutex )
8503 {
8504 PFSRTL_ADVANCED_FCB_HEADER localAdvHdr = (PFSRTL_ADVANCED_FCB_HEADER)AdvHdr;
8505
8506 localAdvHdr->Flags |= FSRTL_FLAG_ADVANCED_HEADER;
8507 localAdvHdr->Flags2 |= FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS;
8508 #if (NTDDI_VERSION >= NTDDI_VISTA)
8509 localAdvHdr->Version = FSRTL_FCB_HEADER_V1;
8510 #else
8511 localAdvHdr->Version = FSRTL_FCB_HEADER_V0;
8512 #endif
8513 InitializeListHead( &localAdvHdr->FilterContexts );
8514 if (FMutex != NULL) {
8515 localAdvHdr->FastMutex = FMutex;
8516 }
8517 #if (NTDDI_VERSION >= NTDDI_VISTA)
8518 *((PULONG_PTR)(&localAdvHdr->PushLock)) = 0;
8519 localAdvHdr->FileContextSupportPointer = NULL;
8520 #endif
8521 }
8522
8523 #define FsRtlInitPerFileObjectContext(_fc, _owner, _inst) \
8524 ((_fc)->OwnerId = (_owner), (_fc)->InstanceId = (_inst))
8525
8526 #define FsRtlCompleteRequest(IRP,STATUS) { \
8527 (IRP)->IoStatus.Status = (STATUS); \
8528 IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
8529 }
8530 /* Common Cache Types */
8531
8532 #define VACB_MAPPING_GRANULARITY (0x40000)
8533 #define VACB_OFFSET_SHIFT (18)
8534
8535 typedef struct _PUBLIC_BCB {
8536 CSHORT NodeTypeCode;
8537 CSHORT NodeByteSize;
8538 ULONG MappedLength;
8539 LARGE_INTEGER MappedFileOffset;
8540 } PUBLIC_BCB, *PPUBLIC_BCB;
8541
8542 typedef struct _CC_FILE_SIZES {
8543 LARGE_INTEGER AllocationSize;
8544 LARGE_INTEGER FileSize;
8545 LARGE_INTEGER ValidDataLength;
8546 } CC_FILE_SIZES, *PCC_FILE_SIZES;
8547
8548 typedef BOOLEAN
8549 (NTAPI *PACQUIRE_FOR_LAZY_WRITE) (
8550 _In_ PVOID Context,
8551 _In_ BOOLEAN Wait);
8552
8553 typedef VOID
8554 (NTAPI *PRELEASE_FROM_LAZY_WRITE) (
8555 _In_ PVOID Context);
8556
8557 typedef BOOLEAN
8558 (NTAPI *PACQUIRE_FOR_READ_AHEAD) (
8559 _In_ PVOID Context,
8560 _In_ BOOLEAN Wait);
8561
8562 typedef VOID
8563 (NTAPI *PRELEASE_FROM_READ_AHEAD) (
8564 _In_ PVOID Context);
8565
8566 typedef struct _CACHE_MANAGER_CALLBACKS {
8567 PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite;
8568 PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite;
8569 PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead;
8570 PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead;
8571 } CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
8572
8573 typedef struct _CACHE_UNINITIALIZE_EVENT {
8574 struct _CACHE_UNINITIALIZE_EVENT *Next;
8575 KEVENT Event;
8576 } CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT;
8577
8578 typedef VOID
8579 (NTAPI *PDIRTY_PAGE_ROUTINE) (
8580 _In_ PFILE_OBJECT FileObject,
8581 _In_ PLARGE_INTEGER FileOffset,
8582 _In_ ULONG Length,
8583 _In_ PLARGE_INTEGER OldestLsn,
8584 _In_ PLARGE_INTEGER NewestLsn,
8585 _In_ PVOID Context1,
8586 _In_ PVOID Context2);
8587
8588 typedef VOID
8589 (NTAPI *PFLUSH_TO_LSN) (
8590 _In_ PVOID LogHandle,
8591 _In_ LARGE_INTEGER Lsn);
8592
8593 typedef VOID
8594 (NTAPI *PCC_POST_DEFERRED_WRITE) (
8595 _In_ PVOID Context1,
8596 _In_ PVOID Context2);
8597
8598 #define UNINITIALIZE_CACHE_MAPS (1)
8599 #define DO_NOT_RETRY_PURGE (2)
8600 #define DO_NOT_PURGE_DIRTY_PAGES (0x4)
8601
8602 #define CC_FLUSH_AND_PURGE_NO_PURGE (0x1)
8603 /* Common Cache Functions */
8604
8605 #define CcIsFileCached(FO) ( \
8606 ((FO)->SectionObjectPointer != NULL) && \
8607 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
8608 )
8609
8610 extern NTKERNELAPI ULONG CcFastMdlReadWait;
8611
8612 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8613
8614 NTKERNELAPI
8615 VOID
8616 NTAPI
8617 CcInitializeCacheMap(
8618 _In_ PFILE_OBJECT FileObject,
8619 _In_ PCC_FILE_SIZES FileSizes,
8620 _In_ BOOLEAN PinAccess,
8621 _In_ PCACHE_MANAGER_CALLBACKS Callbacks,
8622 _In_ PVOID LazyWriteContext);
8623
8624 NTKERNELAPI
8625 BOOLEAN
8626 NTAPI
8627 CcUninitializeCacheMap(
8628 _In_ PFILE_OBJECT FileObject,
8629 _In_opt_ PLARGE_INTEGER TruncateSize,
8630 _In_opt_ PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent);
8631
8632 NTKERNELAPI
8633 VOID
8634 NTAPI
8635 CcSetFileSizes(
8636 IN PFILE_OBJECT FileObject,
8637 IN PCC_FILE_SIZES FileSizes);
8638
8639 NTKERNELAPI
8640 VOID
8641 NTAPI
8642 CcSetDirtyPageThreshold(
8643 _In_ PFILE_OBJECT FileObject,
8644 _In_ ULONG DirtyPageThreshold);
8645
8646 NTKERNELAPI
8647 VOID
8648 NTAPI
8649 CcFlushCache(
8650 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
8651 _In_opt_ PLARGE_INTEGER FileOffset,
8652 _In_ ULONG Length,
8653 _Out_opt_ PIO_STATUS_BLOCK IoStatus);
8654
8655 NTKERNELAPI
8656 LARGE_INTEGER
8657 NTAPI
8658 CcGetFlushedValidData(
8659 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
8660 _In_ BOOLEAN BcbListHeld);
8661
8662 NTKERNELAPI
8663 BOOLEAN
8664 NTAPI
8665 CcZeroData(
8666 _In_ PFILE_OBJECT FileObject,
8667 _In_ PLARGE_INTEGER StartOffset,
8668 _In_ PLARGE_INTEGER EndOffset,
8669 _In_ BOOLEAN Wait);
8670
8671 NTKERNELAPI
8672 PVOID
8673 NTAPI
8674 CcRemapBcb(
8675 _In_ PVOID Bcb);
8676
8677 NTKERNELAPI
8678 VOID
8679 NTAPI
8680 CcRepinBcb(
8681 _In_ PVOID Bcb);
8682
8683 NTKERNELAPI
8684 VOID
8685 NTAPI
8686 CcUnpinRepinnedBcb(
8687 _In_ PVOID Bcb,
8688 _In_ BOOLEAN WriteThrough,
8689 _Out_ PIO_STATUS_BLOCK IoStatus);
8690
8691 NTKERNELAPI
8692 PFILE_OBJECT
8693 NTAPI
8694 CcGetFileObjectFromSectionPtrs(
8695 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer);
8696
8697 NTKERNELAPI
8698 PFILE_OBJECT
8699 NTAPI
8700 CcGetFileObjectFromBcb(
8701 _In_ PVOID Bcb);
8702
8703 NTKERNELAPI
8704 BOOLEAN
8705 NTAPI
8706 CcCanIWrite(
8707 _In_opt_ PFILE_OBJECT FileObject,
8708 _In_ ULONG BytesToWrite,
8709 _In_ BOOLEAN Wait,
8710 _In_ BOOLEAN Retrying);
8711
8712 NTKERNELAPI
8713 VOID
8714 NTAPI
8715 CcDeferWrite(
8716 _In_ PFILE_OBJECT FileObject,
8717 _In_ PCC_POST_DEFERRED_WRITE PostRoutine,
8718 _In_ PVOID Context1,
8719 _In_ PVOID Context2,
8720 _In_ ULONG BytesToWrite,
8721 _In_ BOOLEAN Retrying);
8722
8723 NTKERNELAPI
8724 BOOLEAN
8725 NTAPI
8726 CcCopyRead(
8727 _In_ PFILE_OBJECT FileObject,
8728 _In_ PLARGE_INTEGER FileOffset,
8729 _In_ ULONG Length,
8730 _In_ BOOLEAN Wait,
8731 _Out_writes_bytes_(Length) PVOID Buffer,
8732 _Out_ PIO_STATUS_BLOCK IoStatus);
8733
8734 NTKERNELAPI
8735 VOID
8736 NTAPI
8737 CcFastCopyRead(
8738 _In_ PFILE_OBJECT FileObject,
8739 _In_ ULONG FileOffset,
8740 _In_ ULONG Length,
8741 _In_ ULONG PageCount,
8742 _Out_writes_bytes_(Length) PVOID Buffer,
8743 _Out_ PIO_STATUS_BLOCK IoStatus);
8744
8745 NTKERNELAPI
8746 BOOLEAN
8747 NTAPI
8748 CcCopyWrite(
8749 _In_ PFILE_OBJECT FileObject,
8750 _In_ PLARGE_INTEGER FileOffset,
8751 _In_ ULONG Length,
8752 _In_ BOOLEAN Wait,
8753 _In_reads_bytes_(Length) PVOID Buffer);
8754
8755 NTKERNELAPI
8756 VOID
8757 NTAPI
8758 CcFastCopyWrite(
8759 _In_ PFILE_OBJECT FileObject,
8760 _In_ ULONG FileOffset,
8761 _In_ ULONG Length,
8762 _In_reads_bytes_(Length) PVOID Buffer);
8763
8764 NTKERNELAPI
8765 VOID
8766 NTAPI
8767 CcMdlRead(
8768 _In_ PFILE_OBJECT FileObject,
8769 _In_ PLARGE_INTEGER FileOffset,
8770 _In_ ULONG Length,
8771 _Out_ PMDL *MdlChain,
8772 _Out_ PIO_STATUS_BLOCK IoStatus);
8773
8774 NTKERNELAPI
8775 VOID
8776 NTAPI
8777 CcMdlReadComplete(
8778 _In_ PFILE_OBJECT FileObject,
8779 _In_ PMDL MdlChain);
8780
8781 NTKERNELAPI
8782 VOID
8783 NTAPI
8784 CcPrepareMdlWrite(
8785 _In_ PFILE_OBJECT FileObject,
8786 _In_ PLARGE_INTEGER FileOffset,
8787 _In_ ULONG Length,
8788 _Out_ PMDL *MdlChain,
8789 _Out_ PIO_STATUS_BLOCK IoStatus);
8790
8791 NTKERNELAPI
8792 VOID
8793 NTAPI
8794 CcMdlWriteComplete(
8795 _In_ PFILE_OBJECT FileObject,
8796 _In_ PLARGE_INTEGER FileOffset,
8797 _In_ PMDL MdlChain);
8798
8799 NTKERNELAPI
8800 VOID
8801 NTAPI
8802 CcScheduleReadAhead(
8803 _In_ PFILE_OBJECT FileObject,
8804 _In_ PLARGE_INTEGER FileOffset,
8805 _In_ ULONG Length);
8806
8807 NTKERNELAPI
8808 NTSTATUS
8809 NTAPI
8810 CcWaitForCurrentLazyWriterActivity(VOID);
8811
8812 NTKERNELAPI
8813 VOID
8814 NTAPI
8815 CcSetReadAheadGranularity(
8816 _In_ PFILE_OBJECT FileObject,
8817 _In_ ULONG Granularity);
8818
8819 NTKERNELAPI
8820 BOOLEAN
8821 NTAPI
8822 CcPinRead(
8823 _In_ PFILE_OBJECT FileObject,
8824 _In_ PLARGE_INTEGER FileOffset,
8825 _In_ ULONG Length,
8826 _In_ ULONG Flags,
8827 _Outptr_ PVOID *Bcb,
8828 _Outptr_result_bytebuffer_(Length) PVOID *Buffer);
8829
8830 NTKERNELAPI
8831 BOOLEAN
8832 NTAPI
8833 CcPinMappedData(
8834 _In_ PFILE_OBJECT FileObject,
8835 _In_ PLARGE_INTEGER FileOffset,
8836 _In_ ULONG Length,
8837 _In_ ULONG Flags,
8838 _Inout_ PVOID *Bcb);
8839
8840 NTKERNELAPI
8841 BOOLEAN
8842 NTAPI
8843 CcPreparePinWrite(
8844 _In_ PFILE_OBJECT FileObject,
8845 _In_ PLARGE_INTEGER FileOffset,
8846 _In_ ULONG Length,
8847 _In_ BOOLEAN Zero,
8848 _In_ ULONG Flags,
8849 _Outptr_ PVOID *Bcb,
8850 _Outptr_result_bytebuffer_(Length) PVOID *Buffer);
8851
8852 NTKERNELAPI
8853 VOID
8854 NTAPI
8855 CcSetDirtyPinnedData(
8856 _In_ PVOID BcbVoid,
8857 _In_opt_ PLARGE_INTEGER Lsn);
8858
8859 NTKERNELAPI
8860 VOID
8861 NTAPI
8862 CcUnpinData(
8863 _In_ PVOID Bcb);
8864
8865 NTKERNELAPI
8866 VOID
8867 NTAPI
8868 CcSetBcbOwnerPointer(
8869 _In_ PVOID Bcb,
8870 _In_ PVOID OwnerPointer);
8871
8872 NTKERNELAPI
8873 VOID
8874 NTAPI
8875 CcUnpinDataForThread(
8876 _In_ PVOID Bcb,
8877 _In_ ERESOURCE_THREAD ResourceThreadId);
8878
8879 NTKERNELAPI
8880 VOID
8881 NTAPI
8882 CcSetAdditionalCacheAttributes(
8883 _In_ PFILE_OBJECT FileObject,
8884 _In_ BOOLEAN DisableReadAhead,
8885 _In_ BOOLEAN DisableWriteBehind);
8886
8887 NTKERNELAPI
8888 BOOLEAN
8889 NTAPI
8890 CcIsThereDirtyData(
8891 _In_ PVPB Vpb);
8892
8893 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
8894
8895 #if (NTDDI_VERSION >= NTDDI_WINXP)
8896
8897 NTKERNELAPI
8898 VOID
8899 NTAPI
8900 CcMdlWriteAbort(
8901 _In_ PFILE_OBJECT FileObject,
8902 _In_ PMDL MdlChain);
8903
8904 NTKERNELAPI
8905 VOID
8906 NTAPI
8907 CcSetLogHandleForFile(
8908 _In_ PFILE_OBJECT FileObject,
8909 _In_ PVOID LogHandle,
8910 _In_ PFLUSH_TO_LSN FlushToLsnRoutine);
8911
8912 NTKERNELAPI
8913 LARGE_INTEGER
8914 NTAPI
8915 CcGetDirtyPages(
8916 _In_ PVOID LogHandle,
8917 _In_ PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
8918 _In_ PVOID Context1,
8919 _In_ PVOID Context2);
8920
8921 #endif
8922
8923 #if (NTDDI_VERSION >= NTDDI_WINXP)
8924 _Success_(return!=FALSE)
8925 NTKERNELAPI
8926 BOOLEAN
8927 NTAPI
8928 CcMapData(
8929 _In_ PFILE_OBJECT FileObject,
8930 _In_ PLARGE_INTEGER FileOffset,
8931 _In_ ULONG Length,
8932 _In_ ULONG Flags,
8933 _Outptr_ PVOID *Bcb,
8934 _Outptr_result_bytebuffer_(Length) PVOID *Buffer);
8935 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
8936 NTKERNELAPI
8937 BOOLEAN
8938 NTAPI
8939 CcMapData(
8940 _In_ PFILE_OBJECT FileObject,
8941 _In_ PLARGE_INTEGER FileOffset,
8942 _In_ ULONG Length,
8943 _In_ BOOLEAN Wait,
8944 _Outptr_ PVOID *Bcb,
8945 _Outptr_result_bytebuffer_(Length) PVOID *Buffer);
8946 #endif
8947
8948 #if (NTDDI_VERSION >= NTDDI_VISTA)
8949
8950 NTKERNELAPI
8951 NTSTATUS
8952 NTAPI
8953 CcSetFileSizesEx(
8954 _In_ PFILE_OBJECT FileObject,
8955 _In_ PCC_FILE_SIZES FileSizes);
8956
8957 NTKERNELAPI
8958 PFILE_OBJECT
8959 NTAPI
8960 CcGetFileObjectFromSectionPtrsRef(
8961 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer);
8962
8963 NTKERNELAPI
8964 VOID
8965 NTAPI
8966 CcSetParallelFlushFile(
8967 _In_ PFILE_OBJECT FileObject,
8968 _In_ BOOLEAN EnableParallelFlush);
8969
8970 NTKERNELAPI
8971 BOOLEAN
8972 CcIsThereDirtyDataEx(
8973 _In_ PVPB Vpb,
8974 _In_opt_ PULONG NumberOfDirtyPages);
8975
8976 #endif
8977
8978 #if (NTDDI_VERSION >= NTDDI_WIN7)
8979 NTKERNELAPI
8980 VOID
8981 NTAPI
8982 CcCoherencyFlushAndPurgeCache(
8983 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
8984 _In_opt_ PLARGE_INTEGER FileOffset,
8985 _In_ ULONG Length,
8986 _Out_ PIO_STATUS_BLOCK IoStatus,
8987 _In_opt_ ULONG Flags);
8988 #endif
8989
8990 #define CcGetFileSizePointer(FO) ( \
8991 ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
8992 )
8993
8994 #if (NTDDI_VERSION >= NTDDI_VISTA)
8995 NTKERNELAPI
8996 BOOLEAN
8997 NTAPI
8998 CcPurgeCacheSection(
8999 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
9000 _In_opt_ PLARGE_INTEGER FileOffset,
9001 _In_ ULONG Length,
9002 _In_ ULONG Flags);
9003 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
9004 NTKERNELAPI
9005 BOOLEAN
9006 NTAPI
9007 CcPurgeCacheSection(
9008 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
9009 _In_opt_ PLARGE_INTEGER FileOffset,
9010 _In_ ULONG Length,
9011 _In_ BOOLEAN UninitializeCacheMaps);
9012 #endif
9013
9014 #if (NTDDI_VERSION >= NTDDI_WIN7)
9015 NTKERNELAPI
9016 BOOLEAN
9017 NTAPI
9018 CcCopyWriteWontFlush(
9019 _In_ PFILE_OBJECT FileObject,
9020 _In_ PLARGE_INTEGER FileOffset,
9021 _In_ ULONG Length);
9022 #else
9023 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
9024 #endif
9025
9026 #define CcReadAhead(FO, FOFF, LEN) ( \
9027 if ((LEN) >= 256) { \
9028 CcScheduleReadAhead((FO), (FOFF), (LEN)); \
9029 } \
9030 )
9031 /******************************************************************************
9032 * ZwXxx Functions *
9033 ******************************************************************************/
9034
9035
9036
9037 _IRQL_requires_max_(PASSIVE_LEVEL)
9038 NTSYSAPI
9039 NTSTATUS
9040 NTAPI
9041 ZwQueryEaFile(
9042 _In_ HANDLE FileHandle,
9043 _Out_ PIO_STATUS_BLOCK IoStatusBlock,
9044 _Out_writes_bytes_(Length) PVOID Buffer,
9045 _In_ ULONG Length,
9046 _In_ BOOLEAN ReturnSingleEntry,
9047 _In_reads_bytes_opt_(EaListLength) PVOID EaList,
9048 _In_ ULONG EaListLength,
9049 _In_opt_ PULONG EaIndex,
9050 _In_ BOOLEAN RestartScan);
9051
9052 _IRQL_requires_max_(PASSIVE_LEVEL)
9053 NTSYSAPI
9054 NTSTATUS
9055 NTAPI
9056 ZwSetEaFile(
9057 _In_ HANDLE FileHandle,
9058 _Out_ PIO_STATUS_BLOCK IoStatusBlock,
9059 _In_reads_bytes_(Length) PVOID Buffer,
9060 _In_ ULONG Length);
9061
9062 _IRQL_requires_max_(PASSIVE_LEVEL)
9063 NTSYSAPI
9064 NTSTATUS
9065 NTAPI
9066 ZwDuplicateToken(
9067 _In_ HANDLE ExistingTokenHandle,
9068 _In_ ACCESS_MASK DesiredAccess,
9069 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes,
9070 _In_ BOOLEAN EffectiveOnly,
9071 _In_ TOKEN_TYPE TokenType,
9072 _Out_ PHANDLE NewTokenHandle);
9073
9074 #if (NTDDI_VERSION >= NTDDI_WIN2K)
9075
9076 _IRQL_requires_max_(PASSIVE_LEVEL)
9077 NTSYSAPI
9078 NTSTATUS
9079 NTAPI
9080 ZwQueryObject(
9081 _In_opt_ HANDLE Handle,
9082 _In_ OBJECT_INFORMATION_CLASS ObjectInformationClass,
9083 _Out_writes_bytes_opt_(ObjectInformationLength) PVOID ObjectInformation,
9084 _In_ ULONG ObjectInformationLength,
9085 _Out_opt_ PULONG ReturnLength);
9086
9087 _IRQL_requires_max_(PASSIVE_LEVEL)
9088 NTSYSAPI
9089 NTSTATUS
9090 NTAPI
9091 ZwNotifyChangeKey(
9092 _In_ HANDLE KeyHandle,
9093 _In_opt_ HANDLE EventHandle,
9094 _In_opt_ PIO_APC_ROUTINE ApcRoutine,
9095 _In_opt_ PVOID ApcContext,
9096 _Out_ PIO_STATUS_BLOCK IoStatusBlock,
9097 _In_ ULONG NotifyFilter,
9098 _In_ BOOLEAN WatchSubtree,
9099 _Out_writes_bytes_opt_(BufferLength) PVOID Buffer,
9100 _In_ ULONG BufferLength,
9101 _In_ BOOLEAN Asynchronous);
9102
9103 _IRQL_requires_max_(PASSIVE_LEVEL)
9104 NTSYSAPI
9105 NTSTATUS
9106 NTAPI
9107 ZwCreateEvent(
9108 _Out_ PHANDLE EventHandle,
9109 _In_ ACCESS_MASK DesiredAccess,
9110 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes,
9111 _In_ EVENT_TYPE EventType,
9112 _In_ BOOLEAN InitialState);
9113
9114 _IRQL_requires_max_(PASSIVE_LEVEL)
9115 NTSYSAPI
9116 NTSTATUS
9117 NTAPI
9118 ZwDeleteFile(
9119 _In_ POBJECT_ATTRIBUTES ObjectAttributes);
9120
9121 _IRQL_requires_max_(PASSIVE_LEVEL)
9122 NTSYSAPI
9123 NTSTATUS
9124 NTAPI
9125 ZwQueryDirectoryFile(
9126 _In_ HANDLE FileHandle,
9127 _In_opt_ HANDLE Event,
9128 _In_opt_ PIO_APC_ROUTINE ApcRoutine,
9129 _In_opt_ PVOID ApcContext,
9130 _Out_ PIO_STATUS_BLOCK IoStatusBlock,
9131 _Out_writes_bytes_(Length) PVOID FileInformation,
9132 _In_ ULONG Length,
9133 _In_ FILE_INFORMATION_CLASS FileInformationClass,
9134 _In_ BOOLEAN ReturnSingleEntry,
9135 _In_opt_ PUNICODE_STRING FileName,
9136 _In_ BOOLEAN RestartScan);
9137
9138 _IRQL_requires_max_(PASSIVE_LEVEL)
9139 NTSYSAPI
9140 NTSTATUS
9141 NTAPI
9142 ZwSetVolumeInformationFile(
9143 _In_ HANDLE FileHandle,
9144 _Out_ PIO_STATUS_BLOCK IoStatusBlock,
9145 _In_reads_bytes_(Length) PVOID FsInformation,
9146 _In_ ULONG Length,
9147 _In_ FS_INFORMATION_CLASS FsInformationClass);
9148
9149 _IRQL_requires_max_(PASSIVE_LEVEL)
9150 NTSYSAPI
9151 NTSTATUS
9152 NTAPI
9153 ZwFsControlFile(
9154 _In_ HANDLE FileHandle,
9155 _In_opt_ HANDLE Event,
9156 _In_opt_ PIO_APC_ROUTINE ApcRoutine,
9157 _In_opt_ PVOID ApcContext,
9158 _Out_ PIO_STATUS_BLOCK IoStatusBlock,
9159 _In_ ULONG FsControlCode,
9160 _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
9161 _In_ ULONG InputBufferLength,
9162 _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer,
9163 _In_ ULONG OutputBufferLength);
9164
9165 _IRQL_requires_max_(PASSIVE_LEVEL)
9166 NTSYSAPI
9167 NTSTATUS
9168 NTAPI
9169 ZwDuplicateObject(
9170 _In_ HANDLE SourceProcessHandle,
9171 _In_ HANDLE SourceHandle,
9172 _In_opt_ HANDLE TargetProcessHandle,
9173 _Out_opt_ PHANDLE TargetHandle,
9174 _In_ ACCESS_MASK DesiredAccess,
9175 _In_ ULONG HandleAttributes,
9176 _In_ ULONG Options);
9177
9178 _IRQL_requires_max_(PASSIVE_LEVEL)
9179 NTSYSAPI
9180 NTSTATUS
9181 NTAPI
9182 ZwOpenDirectoryObject(
9183 _Out_ PHANDLE DirectoryHandle,
9184 _In_ ACCESS_MASK DesiredAccess,
9185 _In_ POBJECT_ATTRIBUTES ObjectAttributes);
9186
9187 _Must_inspect_result_
9188 _At_(*BaseAddress, __drv_allocatesMem(Mem))
9189 __kernel_entry
9190 NTSYSAPI
9191 NTSTATUS
9192 NTAPI
9193 ZwAllocateVirtualMemory(
9194 _In_ HANDLE ProcessHandle,
9195 _Inout_ _Outptr_result_buffer_(*RegionSize) PVOID *BaseAddress,
9196 _In_ ULONG_PTR ZeroBits,
9197 _Inout_ PSIZE_T RegionSize,
9198 _In_ ULONG AllocationType,
9199 _In_ ULONG Protect);
9200
9201 _IRQL_requires_max_(PASSIVE_LEVEL)
9202 NTSYSAPI
9203 NTSTATUS
9204 NTAPI
9205 ZwFreeVirtualMemory(
9206 _In_ HANDLE ProcessHandle,
9207 _Inout_ __drv_freesMem(Mem) PVOID *BaseAddress,
9208 _Inout_ PSIZE_T RegionSize,
9209 _In_ ULONG FreeType);
9210
9211 _When_(Timeout == NULL, _IRQL_requires_max_(APC_LEVEL))
9212 _When_(Timeout->QuadPart != 0, _IRQL_requires_max_(APC_LEVEL))
9213 _When_(Timeout->QuadPart == 0, _IRQL_requires_max_(DISPATCH_LEVEL))
9214 NTSYSAPI
9215 NTSTATUS
9216 NTAPI
9217 ZwWaitForSingleObject(
9218 _In_ HANDLE Handle,
9219 _In_ BOOLEAN Alertable,
9220 _In_opt_ PLARGE_INTEGER Timeout);
9221
9222 _IRQL_requires_max_(DISPATCH_LEVEL)
9223 NTSYSAPI
9224 NTSTATUS
9225 NTAPI
9226 ZwSetEvent(
9227 _In_ HANDLE EventHandle,
9228 _Out_opt_ PLONG PreviousState);
9229
9230 _IRQL_requires_max_(APC_LEVEL)
9231 NTSYSAPI
9232 NTSTATUS
9233 NTAPI
9234 ZwFlushVirtualMemory(
9235 _In_ HANDLE ProcessHandle,
9236 _Inout_ PVOID *BaseAddress,
9237 _Inout_ PSIZE_T RegionSize,
9238 _Out_ PIO_STATUS_BLOCK IoStatusBlock);
9239
9240 _IRQL_requires_max_(PASSIVE_LEVEL)
9241 NTSYSAPI
9242 NTSTATUS
9243 NTAPI
9244 ZwQueryInformationToken(
9245 _In_ HANDLE TokenHandle,
9246 _In_ TOKEN_INFORMATION_CLASS TokenInformationClass,
9247 _Out_writes_bytes_to_opt_(Length,*ResultLength) PVOID TokenInformation,
9248 _In_ ULONG Length,
9249 _Out_ PULONG ResultLength);
9250
9251 _IRQL_requires_max_(PASSIVE_LEVEL)
9252 NTSYSAPI
9253 NTSTATUS
9254 NTAPI
9255 ZwSetSecurityObject(
9256 _In_ HANDLE Handle,
9257 _In_ SECURITY_INFORMATION SecurityInformation,
9258 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
9259
9260 _IRQL_requires_max_(PASSIVE_LEVEL)
9261 NTSYSAPI
9262 NTSTATUS
9263 NTAPI
9264 ZwQuerySecurityObject(
9265 _In_ HANDLE FileHandle,
9266 _In_ SECURITY_INFORMATION SecurityInformation,
9267 _Out_writes_bytes_to_(Length,*ResultLength) PSECURITY_DESCRIPTOR SecurityDescriptor,
9268 _In_ ULONG Length,
9269 _Out_ PULONG ResultLength);
9270 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
9271
9272 #if (NTDDI_VERSION >= NTDDI_WINXP)
9273
9274 _IRQL_requires_max_(PASSIVE_LEVEL)
9275 NTSYSAPI
9276 NTSTATUS
9277 NTAPI
9278 ZwOpenProcessTokenEx(
9279 _In_ HANDLE ProcessHandle,
9280 _In_ ACCESS_MASK DesiredAccess,
9281 _In_ ULONG HandleAttributes,
9282 _Out_ PHANDLE TokenHandle);
9283
9284 _IRQL_requires_max_(PASSIVE_LEVEL)
9285 NTSYSAPI
9286 NTSTATUS
9287 NTAPI
9288 ZwOpenThreadTokenEx(
9289 _In_ HANDLE ThreadHandle,
9290 _In_ ACCESS_MASK DesiredAccess,
9291 _In_ BOOLEAN OpenAsSelf,
9292 _In_ ULONG HandleAttributes,
9293 _Out_ PHANDLE TokenHandle);
9294
9295 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
9296
9297 #if (NTDDI_VERSION >= NTDDI_VISTA)
9298
9299 _IRQL_requires_max_(PASSIVE_LEVEL)
9300 NTSYSAPI
9301 NTSTATUS
9302 NTAPI
9303 ZwLockFile(
9304 _In_ HANDLE FileHandle,
9305 _In_opt_ HANDLE Event,
9306 _In_opt_ PIO_APC_ROUTINE ApcRoutine,
9307 _In_opt_ PVOID ApcContext,
9308 _Out_ PIO_STATUS_BLOCK IoStatusBlock,
9309 _In_ PLARGE_INTEGER ByteOffset,
9310 _In_ PLARGE_INTEGER Length,
9311 _In_ ULONG Key,
9312 _In_ BOOLEAN FailImmediately,
9313 _In_ BOOLEAN ExclusiveLock);
9314
9315 _IRQL_requires_max_(PASSIVE_LEVEL)
9316 NTSYSAPI
9317 NTSTATUS
9318 NTAPI
9319 ZwUnlockFile(
9320 _In_ HANDLE FileHandle,
9321 _Out_ PIO_STATUS_BLOCK IoStatusBlock,
9322 _In_ PLARGE_INTEGER ByteOffset,
9323 _In_ PLARGE_INTEGER Length,
9324 _In_ ULONG Key);
9325
9326 _IRQL_requires_max_(PASSIVE_LEVEL)
9327 NTSYSAPI
9328 NTSTATUS
9329 NTAPI
9330 ZwQueryQuotaInformationFile(
9331 _In_ HANDLE FileHandle,
9332 _Out_ PIO_STATUS_BLOCK IoStatusBlock,
9333 _Out_writes_bytes_(Length) PVOID Buffer,
9334 _In_ ULONG Length,
9335 _In_ BOOLEAN ReturnSingleEntry,
9336 _In_reads_bytes_opt_(SidListLength) PVOID SidList,
9337 _In_ ULONG SidListLength,
9338 _In_opt_ PSID StartSid,
9339 _In_ BOOLEAN RestartScan);
9340
9341 _IRQL_requires_max_(PASSIVE_LEVEL)
9342 NTSYSAPI
9343 NTSTATUS
9344 NTAPI
9345 ZwSetQuotaInformationFile(
9346 _In_ HANDLE FileHandle,
9347 _Out_ PIO_STATUS_BLOCK IoStatusBlock,
9348 _In_reads_bytes_(Length) PVOID Buffer,
9349 _In_ ULONG Length);
9350
9351 _IRQL_requires_max_(PASSIVE_LEVEL)
9352 NTSYSAPI
9353 NTSTATUS
9354 NTAPI
9355 ZwFlushBuffersFile(
9356 _In_ HANDLE FileHandle,
9357 _Out_ PIO_STATUS_BLOCK IoStatusBlock);
9358 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
9359 #if (NTDDI_VERSION >= NTDDI_WIN7)
9360
9361 _IRQL_requires_max_(PASSIVE_LEVEL)
9362 NTSYSAPI
9363 NTSTATUS
9364 NTAPI
9365 ZwSetInformationToken(
9366 _In_ HANDLE TokenHandle,
9367 _In_ TOKEN_INFORMATION_CLASS TokenInformationClass,
9368 _In_reads_bytes_(TokenInformationLength) PVOID TokenInformation,
9369 _In_ ULONG TokenInformationLength);
9370
9371 #if (VER_PRODUCTBUILD >= 2195)
9372 NTSYSAPI
9373 NTSTATUS
9374 NTAPI
9375 ZwAdjustPrivilegesToken (
9376 _In_ HANDLE TokenHandle,
9377 _In_ BOOLEAN DisableAllPrivileges,
9378 _In_ PTOKEN_PRIVILEGES NewState,
9379 _In_ ULONG BufferLength,
9380 _Out_opt_ PTOKEN_PRIVILEGES PreviousState,
9381 _Out_ PULONG ReturnLength
9382 );
9383 #endif /* (VER_PRODUCTBUILD >= 2195) */
9384
9385 NTSYSAPI
9386 NTSTATUS
9387 NTAPI
9388 ZwAlertThread (
9389 _In_ HANDLE ThreadHandle
9390 );
9391
9392 NTSYSAPI
9393 NTSTATUS
9394 NTAPI
9395 ZwAccessCheckAndAuditAlarm (
9396 _In_ PUNICODE_STRING SubsystemName,
9397 _In_ PVOID HandleId,
9398 _In_ PUNICODE_STRING ObjectTypeName,
9399 _In_ PUNICODE_STRING ObjectName,
9400 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
9401 _In_ ACCESS_MASK DesiredAccess,
9402 _In_ PGENERIC_MAPPING GenericMapping,
9403 _In_ BOOLEAN ObjectCreation,
9404 _Out_ PACCESS_MASK GrantedAccess,
9405 _Out_ PBOOLEAN AccessStatus,
9406 _Out_ PBOOLEAN GenerateOnClose
9407 );
9408
9409 #if (VER_PRODUCTBUILD >= 2195)
9410 NTSYSAPI
9411 NTSTATUS
9412 NTAPI
9413 ZwCancelIoFile (
9414 _In_ HANDLE FileHandle,
9415 _Out_ PIO_STATUS_BLOCK IoStatusBlock
9416 );
9417 #endif /* (VER_PRODUCTBUILD >= 2195) */
9418
9419 NTSYSAPI
9420 NTSTATUS
9421 NTAPI
9422 ZwClearEvent (
9423 _In_ HANDLE EventHandle
9424 );
9425
9426 NTSYSAPI
9427 NTSTATUS
9428 NTAPI
9429 ZwCloseObjectAuditAlarm (
9430 _In_ PUNICODE_STRING SubsystemName,
9431 _In_ PVOID HandleId,
9432 _In_ BOOLEAN GenerateOnClose
9433 );
9434
9435 NTSYSAPI
9436 NTSTATUS
9437 NTAPI
9438 ZwCreateSymbolicLinkObject (
9439 _Out_ PHANDLE SymbolicLinkHandle,
9440 _In_ ACCESS_MASK DesiredAccess,
9441 _In_ POBJECT_ATTRIBUTES ObjectAttributes,
9442 _In_ PUNICODE_STRING TargetName
9443 );
9444
9445 NTSYSAPI
9446 NTSTATUS
9447 NTAPI
9448 ZwFlushInstructionCache (
9449 _In_ HANDLE ProcessHandle,
9450 _In_opt_ PVOID BaseAddress,
9451 _In_ ULONG FlushSize
9452 );
9453
9454 NTSYSAPI
9455 NTSTATUS
9456 NTAPI
9457 ZwFlushBuffersFile(
9458 _In_ HANDLE FileHandle,
9459 _Out_ PIO_STATUS_BLOCK IoStatusBlock
9460 );
9461
9462 #if (VER_PRODUCTBUILD >= 2195)
9463 NTSYSAPI
9464 NTSTATUS
9465 NTAPI
9466 ZwInitiatePowerAction (
9467 _In_ POWER_ACTION SystemAction,
9468 _In_ SYSTEM_POWER_STATE MinSystemState,
9469 _In_ ULONG Flags,
9470 _In_ BOOLEAN Asynchronous
9471 );
9472 #endif /* (VER_PRODUCTBUILD >= 2195) */
9473
9474 NTSYSAPI
9475 NTSTATUS
9476 NTAPI
9477 ZwLoadKey (
9478 _In_ POBJECT_ATTRIBUTES KeyObjectAttributes,
9479 _In_ POBJECT_ATTRIBUTES FileObjectAttributes
9480 );
9481
9482 NTSYSAPI
9483 NTSTATUS
9484 NTAPI
9485 ZwOpenProcessToken (
9486 _In_ HANDLE ProcessHandle,
9487 _In_ ACCESS_MASK DesiredAccess,
9488 _Out_ PHANDLE TokenHandle
9489 );
9490
9491 NTSYSAPI
9492 NTSTATUS
9493 NTAPI
9494 ZwOpenThread (
9495 _Out_ PHANDLE ThreadHandle,
9496 _In_ ACCESS_MASK DesiredAccess,
9497 _In_ POBJECT_ATTRIBUTES ObjectAttributes,
9498 _In_ PCLIENT_ID ClientId
9499 );
9500
9501 NTSYSAPI
9502 NTSTATUS
9503 NTAPI
9504 ZwOpenThreadToken (
9505 _In_ HANDLE ThreadHandle,
9506 _In_ ACCESS_MASK DesiredAccess,
9507 _In_ BOOLEAN OpenAsSelf,
9508 _Out_ PHANDLE TokenHandle
9509 );
9510
9511 NTSYSAPI
9512 NTSTATUS
9513 NTAPI
9514 ZwPulseEvent (
9515 _In_ HANDLE EventHandle,
9516 _In_opt_ PLONG PulseCount
9517 );
9518
9519 NTSYSAPI
9520 NTSTATUS
9521 NTAPI
9522 ZwQueryDefaultLocale (
9523 _In_ BOOLEAN UserProfile,
9524 _Out_ PLCID DefaultLocaleId
9525 );
9526
9527 #if (VER_PRODUCTBUILD >= 2195)
9528 _IRQL_requires_max_(PASSIVE_LEVEL)
9529 NTSYSAPI
9530 NTSTATUS
9531 NTAPI
9532 ZwQueryDirectoryObject(
9533 _In_ HANDLE DirectoryHandle,
9534 _Out_ PVOID Buffer,
9535 _In_ ULONG BufferLength,
9536 _In_ BOOLEAN ReturnSingleEntry,
9537 _In_ BOOLEAN RestartScan,
9538 _Inout_ PULONG Context,
9539 _Out_opt_ PULONG ReturnLength
9540 );
9541 #endif /* (VER_PRODUCTBUILD >= 2195) */
9542
9543 NTSYSAPI
9544 NTSTATUS
9545 NTAPI
9546 ZwQueryInformationProcess (
9547 _In_ HANDLE ProcessHandle,
9548 _In_ PROCESSINFOCLASS ProcessInformationClass,
9549 _Out_ PVOID ProcessInformation,
9550 _In_ ULONG ProcessInformationLength,
9551 _Out_opt_ PULONG ReturnLength
9552 );
9553
9554 NTSYSAPI
9555 NTSTATUS
9556 NTAPI
9557 ZwReplaceKey (
9558 _In_ POBJECT_ATTRIBUTES NewFileObjectAttributes,
9559 _In_ HANDLE KeyHandle,
9560 _In_ POBJECT_ATTRIBUTES OldFileObjectAttributes
9561 );
9562
9563 NTSYSAPI
9564 NTSTATUS
9565 NTAPI
9566 ZwResetEvent (
9567 _In_ HANDLE EventHandle,
9568 _Out_opt_ PLONG NumberOfWaitingThreads
9569 );
9570
9571 #if (VER_PRODUCTBUILD >= 2195)
9572 NTSYSAPI
9573 NTSTATUS
9574 NTAPI
9575 ZwRestoreKey (
9576 _In_ HANDLE KeyHandle,
9577 _In_ HANDLE FileHandle,
9578 _In_ ULONG Flags
9579 );
9580 #endif /* (VER_PRODUCTBUILD >= 2195) */
9581
9582 NTSYSAPI
9583 NTSTATUS
9584 NTAPI
9585 ZwSaveKey (
9586 _In_ HANDLE KeyHandle,
9587 _In_ HANDLE FileHandle
9588 );
9589
9590 NTSYSAPI
9591 NTSTATUS
9592 NTAPI
9593 ZwSetDefaultLocale (
9594 _In_ BOOLEAN UserProfile,
9595 _In_ LCID DefaultLocaleId
9596 );
9597
9598 #if (VER_PRODUCTBUILD >= 2195)
9599 NTSYSAPI
9600 NTSTATUS
9601 NTAPI
9602 ZwSetDefaultUILanguage (
9603 _In_ LANGID LanguageId
9604 );
9605 #endif /* (VER_PRODUCTBUILD >= 2195) */
9606
9607 NTSYSAPI
9608 NTSTATUS
9609 NTAPI
9610 ZwSetInformationProcess (
9611 _In_ HANDLE ProcessHandle,
9612 _In_ PROCESSINFOCLASS ProcessInformationClass,
9613 _In_ PVOID ProcessInformation,
9614 _In_ ULONG ProcessInformationLength
9615 );
9616
9617 NTSYSAPI
9618 NTSTATUS
9619 NTAPI
9620 ZwSetSystemTime (
9621 _In_ PLARGE_INTEGER NewTime,
9622 _Out_opt_ PLARGE_INTEGER OldTime
9623 );
9624
9625 NTSYSAPI
9626 NTSTATUS
9627 NTAPI
9628 ZwUnloadKey (
9629 _In_ POBJECT_ATTRIBUTES KeyObjectAttributes
9630 );
9631
9632 NTSYSAPI
9633 NTSTATUS
9634 NTAPI
9635 ZwWaitForMultipleObjects (
9636 _In_ ULONG HandleCount,
9637 _In_ PHANDLE Handles,
9638 _In_ WAIT_TYPE WaitType,
9639 _In_ BOOLEAN Alertable,
9640 _In_opt_ PLARGE_INTEGER Timeout
9641 );
9642
9643 NTSYSAPI
9644 NTSTATUS
9645 NTAPI
9646 ZwYieldExecution (
9647 VOID
9648 );
9649
9650 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
9651
9652 #ifndef __SSPI_H__
9653 #define __SSPI_H__
9654
9655 // for ntifs.h:
9656 #define ISSP_LEVEL 32
9657 #define ISSP_MODE 0
9658
9659 #ifdef MIDL_PASS
9660 #define MIDL_PROP(x) x
9661 #else
9662 #define MIDL_PROP(x)
9663 #endif
9664
9665 #define SEC_TEXT TEXT
9666 #define SEC_FAR
9667 #define SEC_ENTRY __stdcall
9668
9669 #if defined(_NO_KSECDD_IMPORT_)
9670 #define KSECDDDECLSPEC
9671 #else
9672 #define KSECDDDECLSPEC __declspec(dllimport)
9673 #endif
9674
9675 #define SECQOP_WRAP_NO_ENCRYPT 0x80000001
9676 #define SECQOP_WRAP_OOB_DATA 0x40000000
9677
9678 #define SECURITY_ENTRYPOINTW SEC_TEXT("InitSecurityInterfaceW")
9679 #define SECURITY_ENTRYPOINT SECURITY_ENTRYPOINTW
9680
9681 #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION 1
9682 #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 2
9683 #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_3 3
9684 #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_4 4
9685
9686 #define SECURITY_NATIVE_DREP 0x00000010
9687 #define SECURITY_NETWORK_DREP 0x00000000
9688
9689 #define SECPKG_ID_NONE 0xFFFF
9690
9691 #define SECPKG_CRED_ATTR_NAMES 1
9692 #define SECPKG_CRED_ATTR_SSI_PROVIDER 2
9693
9694 #define SECPKG_ATTR_SIZES 0
9695 #define SECPKG_ATTR_NAMES 1
9696 #define SECPKG_ATTR_LIFESPAN 2
9697 #define SECPKG_ATTR_DCE_INFO 3
9698 #define SECPKG_ATTR_STREAM_SIZES 4
9699 #define SECPKG_ATTR_KEY_INFO 5
9700 #define SECPKG_ATTR_AUTHORITY 6
9701 #define SECPKG_ATTR_PROTO_INFO 7
9702 #define SECPKG_ATTR_PASSWORD_EXPIRY 8
9703 #define SECPKG_ATTR_SESSION_KEY 9
9704 #define SECPKG_ATTR_PACKAGE_INFO 10
9705 #define SECPKG_ATTR_USER_FLAGS 11
9706 #define SECPKG_ATTR_NEGOTIATION_INFO 12
9707 #define SECPKG_ATTR_NATIVE_NAMES 13
9708 #define SECPKG_ATTR_FLAGS 14
9709 #define SECPKG_ATTR_USE_VALIDATED 15
9710 #define SECPKG_ATTR_CREDENTIAL_NAME 16
9711 #define SECPKG_ATTR_TARGET_INFORMATION 17
9712 #define SECPKG_ATTR_ACCESS_TOKEN 18
9713 #define SECPKG_ATTR_TARGET 19
9714 #define SECPKG_ATTR_AUTHENTICATION_ID 20
9715 #define SECPKG_ATTR_LOGOFF_TIME 21
9716 #define SECPKG_ATTR_NEGO_KEYS 22
9717 #define SECPKG_ATTR_PROMPTING_NEEDED 24
9718 #define SECPKG_ATTR_UNIQUE_BINDINGS 25
9719 #define SECPKG_ATTR_ENDPOINT_BINDINGS 26
9720 #define SECPKG_ATTR_CLIENT_SPECIFIED_TARGET 27
9721 #define SECPKG_ATTR_LAST_CLIENT_TOKEN_STATUS 30
9722 #define SECPKG_ATTR_NEGO_PKG_INFO 31
9723 #define SECPKG_ATTR_NEGO_STATUS 32
9724 #define SECPKG_ATTR_CONTEXT_DELETED 33
9725
9726 #define SECPKG_FLAG_INTEGRITY 0x00000001
9727 #define SECPKG_FLAG_PRIVACY 0x00000002
9728 #define SECPKG_FLAG_TOKEN_ONLY 0x00000004
9729 #define SECPKG_FLAG_DATAGRAM 0x00000008
9730 #define SECPKG_FLAG_CONNECTION 0x00000010
9731 #define SECPKG_FLAG_MULTI_REQUIRED 0x00000020
9732 #define SECPKG_FLAG_CLIENT_ONLY 0x00000040
9733 #define SECPKG_FLAG_EXTENDED_ERROR 0x00000080
9734 #define SECPKG_FLAG_IMPERSONATION 0x00000100
9735 #define SECPKG_FLAG_ACCEPT_WIN32_NAME 0x00000200
9736 #define SECPKG_FLAG_STREAM 0x00000400
9737 #define SECPKG_FLAG_NEGOTIABLE 0x00000800
9738 #define SECPKG_FLAG_GSS_COMPATIBLE 0x00001000
9739 #define SECPKG_FLAG_LOGON 0x00002000
9740 #define SECPKG_FLAG_ASCII_BUFFERS 0x00004000
9741 #define SECPKG_FLAG_FRAGMENT 0x00008000
9742 #define SECPKG_FLAG_MUTUAL_AUTH 0x00010000
9743 #define SECPKG_FLAG_DELEGATION 0x00020000
9744 #define SECPKG_FLAG_READONLY_WITH_CHECKSUM 0x00040000
9745 #define SECPKG_FLAG_RESTRICTED_TOKENS 0x00080000
9746 #define SECPKG_FLAG_NEGO_EXTENDER 0x00100000
9747 #define SECPKG_FLAG_NEGOTIABLE2 0x00200000
9748
9749 #define SECPKG_CRED_INBOUND 0x00000001
9750 #define SECPKG_CRED_OUTBOUND 0x00000002
9751 #define SECPKG_CRED_BOTH 0x00000003
9752 #define SECPKG_CRED_DEFAULT 0x00000004
9753 #define SECPKG_CRED_RESERVED 0xF0000000
9754 #define SECPKG_CRED_AUTOLOGON_RESTRICTED 0x00000010
9755 #define SECPKG_CRED_PROCESS_POLICY_ONLY 0x00000020
9756
9757 #define SECPKG_CONTEXT_EXPORT_RESET_NEW 0x00000001
9758 #define SECPKG_CONTEXT_EXPORT_DELETE_OLD 0x00000002
9759 #define SECPKG_CONTEXT_EXPORT_TO_KERNEL 0x00000004
9760
9761 #define SECPKG_ATTR_SUBJECT_SECURITY_ATTRIBUTES 128
9762 #define SECPKG_ATTR_NEGO_INFO_FLAG_NO_KERBEROS 0x1
9763 #define SECPKG_ATTR_NEGO_INFO_FLAG_NO_NTLM 0x2
9764
9765 #define SecPkgContext_NativeNames SecPkgContext_NativeNamesW
9766 #define PSecPkgContext_NativeNames PSecPkgContext_NativeNamesW
9767
9768 #define SECBUFFER_VERSION 0
9769
9770 #define SECBUFFER_EMPTY 0
9771 #define SECBUFFER_DATA 1
9772 #define SECBUFFER_TOKEN 2
9773 #define SECBUFFER_PKG_PARAMS 3
9774 #define SECBUFFER_MISSING 4
9775 #define SECBUFFER_EXTRA 5
9776 #define SECBUFFER_STREAM_TRAILER 6
9777 #define SECBUFFER_STREAM_HEADER 7
9778 #define SECBUFFER_NEGOTIATION_INFO 8
9779 #define SECBUFFER_PADDING 9
9780 #define SECBUFFER_STREAM 10
9781 #define SECBUFFER_MECHLIST 11
9782 #define SECBUFFER_MECHLIST_SIGNATURE 12
9783 #define SECBUFFER_TARGET 13
9784 #define SECBUFFER_CHANNEL_BINDINGS 14
9785 #define SECBUFFER_CHANGE_PASS_RESPONSE 15
9786 #define SECBUFFER_TARGET_HOST 16
9787 #define SECBUFFER_ALERT 17
9788
9789 #define SECBUFFER_ATTRMASK 0xF0000000
9790 #define SECBUFFER_READONLY 0x80000000
9791 #define SECBUFFER_READONLY_WITH_CHECKSUM 0x10000000
9792 #define SECBUFFER_RESERVED 0x60000000
9793
9794 #define ISC_REQ_DELEGATE 0x00000001
9795 #define ISC_REQ_MUTUAL_AUTH 0x00000002
9796 #define ISC_REQ_REPLAY_DETECT 0x00000004
9797 #define ISC_REQ_SEQUENCE_DETECT 0x00000008
9798 #define ISC_REQ_CONFIDENTIALITY 0x00000010
9799 #define ISC_REQ_USE_SESSION_KEY 0x00000020
9800 #define ISC_REQ_PROMPT_FOR_CREDS 0x00000040
9801 #define ISC_REQ_USE_SUPPLIED_CREDS 0x00000080
9802 #define ISC_REQ_ALLOCATE_MEMORY 0x00000100
9803 #define ISC_REQ_USE_DCE_STYLE 0x00000200
9804 #define ISC_REQ_DATAGRAM 0x00000400
9805 #define ISC_REQ_CONNECTION 0x00000800
9806 #define ISC_REQ_CALL_LEVEL 0x00001000
9807 #define ISC_REQ_FRAGMENT_SUPPLIED 0x00002000
9808 #define ISC_REQ_EXTENDED_ERROR 0x00004000
9809 #define ISC_REQ_STREAM 0x00008000
9810 #define ISC_REQ_INTEGRITY 0x00010000
9811 #define ISC_REQ_IDENTIFY 0x00020000
9812 #define ISC_REQ_NULL_SESSION 0x00040000
9813 #define ISC_REQ_MANUAL_CRED_VALIDATION 0x00080000
9814 #define ISC_REQ_RESERVED1 0x00100000
9815 #define ISC_REQ_FRAGMENT_TO_FIT 0x00200000
9816 #define ISC_REQ_FORWARD_CREDENTIALS 0x00400000
9817 #define ISC_REQ_NO_INTEGRITY 0x00800000
9818 #define ISC_REQ_USE_HTTP_STYLE 0x01000000
9819
9820 #define ISC_RET_DELEGATE 0x00000001
9821 #define ISC_RET_MUTUAL_AUTH 0x00000002
9822 #define ISC_RET_REPLAY_DETECT 0x00000004
9823 #define ISC_RET_SEQUENCE_DETECT 0x00000008
9824 #define ISC_RET_CONFIDENTIALITY 0x00000010
9825 #define ISC_RET_USE_SESSION_KEY 0x00000020
9826 #define ISC_RET_USED_COLLECTED_CREDS 0x00000040
9827 #define ISC_RET_USED_SUPPLIED_CREDS 0x00000080
9828 #define ISC_RET_ALLOCATED_MEMORY 0x00000100
9829 #define ISC_RET_USED_DCE_STYLE 0x00000200
9830 #define ISC_RET_DATAGRAM 0x00000400
9831 #define ISC_RET_CONNECTION 0x00000800
9832 #define ISC_RET_INTERMEDIATE_RETURN 0x00001000
9833 #define ISC_RET_CALL_LEVEL 0x00002000
9834 #define ISC_RET_EXTENDED_ERROR 0x00004000
9835 #define ISC_RET_STREAM 0x00008000
9836 #define ISC_RET_INTEGRITY 0x00010000
9837 #define ISC_RET_IDENTIFY 0x00020000
9838 #define ISC_RET_NULL_SESSION 0x00040000
9839 #define ISC_RET_MANUAL_CRED_VALIDATION 0x00080000
9840 #define ISC_RET_RESERVED1 0x00100000
9841 #define ISC_RET_FRAGMENT_ONLY 0x00200000
9842 #define ISC_RET_FORWARD_CREDENTIALS 0x00400000
9843 #define ISC_RET_USED_HTTP_STYLE 0x01000000
9844 #define ISC_RET_NO_ADDITIONAL_TOKEN 0x02000000
9845 #define ISC_RET_REAUTHENTICATION 0x08000000
9846
9847 #define ASC_REQ_DELEGATE 0x00000001
9848 #define ASC_REQ_MUTUAL_AUTH 0x00000002
9849 #define ASC_REQ_REPLAY_DETECT 0x00000004
9850 #define ASC_REQ_SEQUENCE_DETECT 0x00000008
9851 #define ASC_REQ_CONFIDENTIALITY 0x00000010
9852 #define ASC_REQ_USE_SESSION_KEY 0x00000020
9853 #define ASC_REQ_ALLOCATE_MEMORY 0x00000100
9854 #define ASC_REQ_USE_DCE_STYLE 0x00000200
9855 #define ASC_REQ_DATAGRAM 0x00000400
9856 #define ASC_REQ_CONNECTION 0x00000800
9857 #define ASC_REQ_CALL_LEVEL 0x00001000
9858 #define ASC_REQ_EXTENDED_ERROR 0x00008000
9859 #define ASC_REQ_STREAM 0x00010000
9860 #define ASC_REQ_INTEGRITY 0x00020000
9861 #define ASC_REQ_LICENSING 0x00040000
9862 #define ASC_REQ_IDENTIFY 0x00080000
9863 #define ASC_REQ_ALLOW_NULL_SESSION 0x00100000
9864 #define ASC_REQ_ALLOW_NON_USER_LOGONS 0x00200000
9865 #define ASC_REQ_ALLOW_CONTEXT_REPLAY 0x00400000
9866 #define ASC_REQ_FRAGMENT_TO_FIT 0x00800000
9867 #define ASC_REQ_FRAGMENT_SUPPLIED 0x00002000
9868 #define ASC_REQ_NO_TOKEN 0x01000000
9869 #define ASC_REQ_PROXY_BINDINGS 0x04000000
9870 //#define SSP_RET_REAUTHENTICATION 0x08000000 // internal
9871
9872 #define ASC_REQ_ALLOW_MISSING_BINDINGS 0x10000000
9873 #define ASC_RET_DELEGATE 0x00000001
9874 #define ASC_RET_MUTUAL_AUTH 0x00000002
9875 #define ASC_RET_REPLAY_DETECT 0x00000004
9876 #define ASC_RET_SEQUENCE_DETECT 0x00000008
9877 #define ASC_RET_CONFIDENTIALITY 0x00000010
9878 #define ASC_RET_USE_SESSION_KEY 0x00000020
9879 #define ASC_RET_ALLOCATED_MEMORY 0x00000100
9880 #define ASC_RET_USED_DCE_STYLE 0x00000200
9881 #define ASC_RET_DATAGRAM 0x00000400
9882 #define ASC_RET_CONNECTION 0x00000800
9883 #define ASC_RET_CALL_LEVEL 0x00002000
9884 #define ASC_RET_THIRD_LEG_FAILED 0x00004000
9885 #define ASC_RET_EXTENDED_ERROR 0x00008000
9886 #define ASC_RET_STREAM 0x00010000
9887 #define ASC_RET_INTEGRITY 0x00020000
9888 #define ASC_RET_LICENSING 0x00040000
9889 #define ASC_RET_IDENTIFY 0x00080000
9890 #define ASC_RET_NULL_SESSION 0x00100000
9891 #define ASC_RET_ALLOW_NON_USER_LOGONS 0x00200000
9892 #define ASC_RET_ALLOW_CONTEXT_REPLAY 0x00400000
9893 #define ASC_RET_FRAGMENT_ONLY 0x00800000
9894 #define ASC_RET_NO_TOKEN 0x01000000
9895 #define ASC_RET_NO_ADDITIONAL_TOKEN 0x02000000
9896 #define ASC_RET_NO_PROXY_BINDINGS 0x04000000
9897 //#define SSP_RET_REAUTHENTICATION 0x08000000 // internal
9898 #define ASC_RET_MISSING_BINDINGS 0x10000000
9899
9900 #define SEC_DELETED_HANDLE ((ULONG_PTR)(-2))
9901
9902 #define SecInvalidateHandle(x) \
9903 ((PSecHandle)(x))->dwLower = ((PSecHandle)(x))->dwUpper = ((ULONG_PTR)((INT_PTR)-1));
9904
9905 #define SecIsValidHandle(x) \
9906 ( ( ((PSecHandle)(x))->dwLower != (ULONG_PTR)(INT_PTR)-1 ) && \
9907 ( ((PSecHandle)(x))->dwUpper != (ULONG_PTR)(INT_PTR)-1 ) )
9908
9909 typedef WCHAR SEC_WCHAR;
9910 typedef CHAR SEC_CHAR;
9911 typedef LARGE_INTEGER _SECURITY_INTEGER, SECURITY_INTEGER, *PSECURITY_INTEGER;
9912 typedef SECURITY_INTEGER TimeStamp, *PTimeStamp;
9913 typedef UNICODE_STRING SECURITY_STRING, *PSECURITY_STRING;
9914 #if ISSP_MODE == 0
9915 #define PSSPI_SEC_STRING PSECURITY_STRING
9916 #else
9917 #define PSSPI_SEC_STRING SEC_WCHAR*
9918 #endif
9919
9920 typedef PVOID PSEC_WINNT_AUTH_IDENTITY_OPAQUE;
9921
9922 #ifndef __SECSTATUS_DEFINED__
9923 typedef LONG SECURITY_STATUS;
9924 #define __SECSTATUS_DEFINED__
9925 #endif
9926
9927 typedef enum _SECPKG_CRED_CLASS
9928 {
9929 SecPkgCredClass_None = 0,
9930 SecPkgCredClass_Ephemeral = 10,
9931 SecPkgCredClass_PersistedGeneric = 20,
9932 SecPkgCredClass_PersistedSpecific = 30,
9933 SecPkgCredClass_Explicit = 40,
9934 } SECPKG_CRED_CLASS, *PSECPKG_CRED_CLASS;
9935
9936 typedef struct _SEC_NEGOTIATION_INFO
9937 {
9938 ULONG Size;
9939 ULONG NameLength;
9940 SEC_WCHAR *Name;
9941 PVOID Reserved;
9942 } SEC_NEGOTIATION_INFO, *PSEC_NEGOTIATION_INFO;
9943
9944 typedef struct _SEC_CHANNEL_BINDINGS
9945 {
9946 ULONG dwInitiatorAddrType;
9947 ULONG cbInitiatorLength;
9948 ULONG dwInitiatorOffset;
9949 ULONG dwAcceptorAddrType;
9950 ULONG cbAcceptorLength;
9951 ULONG dwAcceptorOffset;
9952 ULONG cbApplicationDataLength;
9953 ULONG dwApplicationDataOffset;
9954 } SEC_CHANNEL_BINDINGS, *PSEC_CHANNEL_BINDINGS;
9955
9956 #ifndef _AUTH_IDENTITY_EX2_DEFINED
9957 #define _AUTH_IDENTITY_EX2_DEFINED
9958 typedef struct _SEC_WINNT_AUTH_IDENTITY_EX2
9959 {
9960 ULONG Version;
9961 USHORT cbHeaderLength;
9962 ULONG cbStructureLength;
9963 ULONG UserOffset;
9964 USHORT UserLength;
9965 ULONG DomainOffset;
9966 USHORT DomainLength;
9967 ULONG PackedCredentialsOffset;
9968 USHORT PackedCredentialsLength;
9969 ULONG Flags;
9970 ULONG PackageListOffset;
9971 USHORT PackageListLength;
9972 } SEC_WINNT_AUTH_IDENTITY_EX2, *PSEC_WINNT_AUTH_IDENTITY_EX2;
9973 #define SEC_WINNT_AUTH_IDENTITY_VERSION_2 0x201
9974 #endif
9975
9976 #ifndef _AUTH_IDENTITY_DEFINED
9977 #define _AUTH_IDENTITY_DEFINED
9978 typedef struct _SEC_WINNT_AUTH_IDENTITY_W
9979 {
9980 PUSHORT User;
9981 ULONG UserLength;
9982 PUSHORT Domain;
9983 ULONG DomainLength;
9984 PUSHORT Password;
9985 ULONG PasswordLength;
9986 ULONG Flags;
9987 } SEC_WINNT_AUTH_IDENTITY_W, *PSEC_WINNT_AUTH_IDENTITY_W;
9988 #define SEC_WINNT_AUTH_IDENTITY_ANSI 0x1
9989 #define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x2
9990 #define SEC_WINNT_AUTH_IDENTITY SEC_WINNT_AUTH_IDENTITY_W
9991 #define PSEC_WINNT_AUTH_IDENTITY PSEC_WINNT_AUTH_IDENTITY_W
9992 #define _SEC_WINNT_AUTH_IDENTITY _SEC_WINNT_AUTH_IDENTITY_W
9993 #endif
9994
9995 #ifndef SEC_WINNT_AUTH_IDENTITY_VERSION
9996 #define SEC_WINNT_AUTH_IDENTITY_VERSION 0x200
9997 typedef struct _SEC_WINNT_AUTH_IDENTITY_EXW
9998 {
9999 ULONG Version;
10000 ULONG Length;
10001 PUSHORT User;
10002 ULONG UserLength;
10003 PUSHORT Domain;
10004 ULONG DomainLength;
10005 PUSHORT Password;
10006 ULONG PasswordLength;
10007 ULONG Flags;
10008 PUSHORT PackageList;
10009 ULONG PackageListLength;
10010 } SEC_WINNT_AUTH_IDENTITY_EXW, *PSEC_WINNT_AUTH_IDENTITY_EXW;
10011 #define SEC_WINNT_AUTH_IDENTITY_EX SEC_WINNT_AUTH_IDENTITY_EXW
10012 #define PSEC_WINNT_AUTH_IDENTITY_EX PSEC_WINNT_AUTH_IDENTITY_EXW
10013 #endif
10014
10015 #ifndef __SECHANDLE_DEFINED__
10016 typedef struct _SecHandle
10017 {
10018 ULONG_PTR dwLower;
10019 ULONG_PTR dwUpper;
10020 } SecHandle, *PSecHandle;
10021 #define __SECHANDLE_DEFINED__
10022 #endif
10023
10024 typedef SecHandle CredHandle, *PCredHandle, CtxtHandle, *PCtxtHandle;
10025
10026 typedef struct _SecBuffer
10027 {
10028 ULONG cbBuffer;
10029 ULONG BufferType;
10030 #ifdef MIDL_PASS
10031 MIDL_PROP([size_is(cbBuffer)]) PCHAR pvBuffer;
10032 #else
10033 _Field_size_bytes_(cbBuffer) void SEC_FAR *pvBuffer;
10034 #endif
10035 } SecBuffer, *PSecBuffer;
10036
10037 typedef struct _SecBufferDesc
10038 {
10039 ULONG ulVersion;
10040 ULONG cBuffers;
10041 MIDL_PROP([size_is(cBuffers)]) _Field_size_(cBuffers) PSecBuffer pBuffers;
10042 } SecBufferDesc, SEC_FAR *PSecBufferDesc;
10043
10044 typedef struct _SecPkgInfoW
10045 {
10046 ULONG fCapabilities;
10047 USHORT wVersion;
10048 USHORT wRPCID;
10049 ULONG cbMaxToken;
10050 MIDL_PROP([string]) SEC_WCHAR *Name;
10051 MIDL_PROP([string]) SEC_WCHAR *Comment;
10052 } SecPkgInfoW, *PSecPkgInfoW;
10053 #define SecPkgInfo SecPkgInfoW
10054 #define PSecPkgInfo PSecPkgInfoW
10055
10056 typedef struct _SecPkgCredentials_NamesW
10057 {
10058 MIDL_PROP([string]) SEC_WCHAR *sUserName;
10059 } SecPkgCredentials_NamesW, *PSecPkgCredentials_NamesW;
10060 #define SecPkgCredentials_Names SecPkgCredentials_NamesW
10061 #define PSecPkgCredentials_Names PSecPkgCredentials_NamesW
10062
10063 typedef struct _SecPkgContext_NamesW
10064 {
10065 SEC_WCHAR *sUserName;
10066 } SecPkgContext_NamesW, *PSecPkgContext_NamesW;
10067 #define SecPkgContext_Names SecPkgContext_NamesW
10068 #define PSecPkgContext_Names PSecPkgContext_NamesW
10069
10070 #if OSVER(NTDDI_VERSION) > NTDDI_WIN2K
10071 typedef struct _SecPkgContext_CredentialNameW
10072 {
10073 ULONG CredentialType;
10074 SEC_WCHAR *sCredentialName;
10075 } SecPkgContext_CredentialNameW, *PSecPkgContext_CredentialNameW;
10076 #endif
10077 #define SecPkgContext_CredentialName SecPkgContext_CredentialNameW
10078 #define PSecPkgContext_CredentialName PSecPkgContext_CredentialNameW
10079
10080 typedef struct _SecPkgContext_SubjectAttributes
10081 {
10082 PVOID AttributeInfo;
10083 } SecPkgContext_SubjectAttributes, *PSecPkgContext_SubjectAttributes;
10084
10085 typedef struct _SecPkgContext_CredInfo
10086 {
10087 SECPKG_CRED_CLASS CredClass;
10088 ULONG IsPromptingNeeded;
10089 } SecPkgContext_CredInfo, *PSecPkgContext_CredInfo;
10090
10091 typedef struct _SecPkgContext_NegoPackageInfo
10092 {
10093 ULONG PackageMask;
10094 } SecPkgContext_NegoPackageInfo, *PSecPkgContext_NegoPackageInfo;
10095
10096 typedef struct _SecPkgContext_NegoStatus
10097 {
10098 ULONG LastStatus;
10099 } SecPkgContext_NegoStatus, *PSecPkgContext_NegoStatus;
10100
10101 typedef struct _SecPkgContext_Sizes
10102 {
10103 ULONG cbMaxToken;
10104 ULONG cbMaxSignature;
10105 ULONG cbBlockSize;
10106 ULONG cbSecurityTrailer;
10107 } SecPkgContext_Sizes, *PSecPkgContext_Sizes;
10108
10109 typedef struct _SecPkgContext_StreamSizes
10110 {
10111 ULONG cbHeader;
10112 ULONG cbTrailer;
10113 ULONG cbMaximumMessage;
10114 ULONG cBuffers;
10115 ULONG cbBlockSize;
10116 } SecPkgContext_StreamSizes, *PSecPkgContext_StreamSizes;
10117
10118 typedef struct _SecPkgContext_Lifespan
10119 {
10120 TimeStamp tsStart;
10121 TimeStamp tsExpiry;
10122 } SecPkgContext_Lifespan, *PSecPkgContext_Lifespan;
10123
10124 typedef struct _SecPkgContext_PasswordExpiry
10125 {
10126 TimeStamp tsPasswordExpires;
10127 } SecPkgContext_PasswordExpiry, *PSecPkgContext_PasswordExpiry;
10128
10129 typedef struct _SecPkgContext_ProtoInfoW
10130 {
10131 SEC_WCHAR *sProtocolName;
10132 ULONG majorVersion;
10133 ULONG minorVersion;
10134 } SecPkgContext_ProtoInfoW, *PSecPkgContext_ProtoInfoW;
10135 #define SecPkgContext_ProtoInfo SecPkgContext_ProtoInfoW
10136 #define PSecPkgContext_ProtoInfo PSecPkgContext_ProtoInfoW
10137
10138 typedef struct _SecPkgContext_KeyInfoW
10139 {
10140 SEC_WCHAR *sSignatureAlgorithmName;
10141 SEC_WCHAR *sEncryptAlgorithmName;
10142 ULONG KeySize;
10143 ULONG SignatureAlgorithm;
10144 ULONG EncryptAlgorithm;
10145 } SecPkgContext_KeyInfoW, *PSecPkgContext_KeyInfoW;
10146 #define SecPkgContext_KeyInfo SecPkgContext_KeyInfoW
10147 #define PSecPkgContext_KeyInfo PSecPkgContext_KeyInfoW
10148
10149 typedef struct _SecPkgContext_SessionKey
10150 {
10151 ULONG SessionKeyLength;
10152 _Field_size_bytes_(SessionKeyLength) PUCHAR SessionKey;
10153 } SecPkgContext_SessionKey, *PSecPkgContext_SessionKey;
10154
10155 typedef struct _SecPkgContext_NegoKeys
10156 {
10157 ULONG KeyType;
10158 USHORT KeyLength;
10159 _Field_size_bytes_(KeyLength) PUCHAR KeyValue;
10160 ULONG VerifyKeyType;
10161 USHORT VerifyKeyLength;
10162 _Field_size_bytes_(VerifyKeyLength) PUCHAR VerifyKeyValue;
10163 } SecPkgContext_NegoKeys, *PSecPkgContext_NegoKeys;
10164
10165 typedef struct _SecPkgContext_DceInfo
10166 {
10167 ULONG AuthzSvc;
10168 PVOID pPac;
10169 } SecPkgContext_DceInfo, *PSecPkgContext_DceInfo;
10170
10171 typedef struct _SecPkgContext_PackageInfoW
10172 {
10173 PSecPkgInfoW PackageInfo;
10174 } SecPkgContext_PackageInfoW, *PSecPkgContext_PackageInfoW;
10175 #define SecPkgContext_PackageInfo SecPkgContext_PackageInfoW
10176 #define PSecPkgContext_PackageInfo PSecPkgContext_PackageInfoW
10177
10178 typedef struct _SecPkgContext_UserFlags
10179 {
10180 ULONG UserFlags;
10181 } SecPkgContext_UserFlags, *PSecPkgContext_UserFlags;
10182
10183 typedef struct _SecPkgContext_Flags
10184 {
10185 ULONG Flags;
10186 } SecPkgContext_Flags, *PSecPkgContext_Flags;
10187
10188 typedef struct _SecPkgContext_NegotiationInfoW
10189 {
10190 PSecPkgInfoW PackageInfo ;
10191 ULONG NegotiationState ;
10192 } SecPkgContext_NegotiationInfoW, *PSecPkgContext_NegotiationInfoW;
10193
10194 typedef struct _SecPkgContext_AuthorityW
10195 {
10196 SEC_WCHAR *sAuthorityName;
10197 } SecPkgContext_AuthorityW, *PSecPkgContext_AuthorityW;
10198 #define SecPkgContext_Authority SecPkgContext_AuthorityW
10199 #define PSecPkgContext_Authority PSecPkgContext_AuthorityW
10200
10201
10202 #if NTDDI_VERSION > NTDDI_WS03
10203 typedef struct _SecPkgCredentials_SSIProviderW
10204 {
10205 SEC_WCHAR *sProviderName;
10206 ULONG ProviderInfoLength;
10207 PCHAR ProviderInfo;
10208 } SecPkgCredentials_SSIProviderW, *PSecPkgCredentials_SSIProviderW;
10209 #define SecPkgCredentials_SSIProvider SecPkgCredentials_SSIProviderW
10210 #define PSecPkgCredentials_SSIProvider PSecPkgCredentials_SSIProviderW
10211
10212 typedef struct _SecPkgContext_LogoffTime
10213 {
10214 TimeStamp tsLogoffTime;
10215 } SecPkgContext_LogoffTime, *PSecPkgContext_LogoffTime;
10216 #endif
10217
10218 /* forward declaration */
10219 typedef struct _SECURITY_FUNCTION_TABLE_W SecurityFunctionTableW, *PSecurityFunctionTableW;
10220 #define SecurityFunctionTable SecurityFunctionTableW
10221 #define PSecurityFunctionTable PSecurityFunctionTableW
10222
10223 typedef
10224 VOID
10225 (SEC_ENTRY * SEC_GET_KEY_FN)(
10226 PVOID Arg,
10227 PVOID Principal,
10228 ULONG KeyVer,
10229 PVOID *Key,
10230 SECURITY_STATUS *Status);
10231
10232 KSECDDDECLSPEC
10233 SECURITY_STATUS
10234 SEC_ENTRY
10235 AcceptSecurityContext(
10236 _In_opt_ PCredHandle phCredential,
10237 _In_opt_ PCtxtHandle phContext,
10238 _In_opt_ PSecBufferDesc pInput,
10239 _In_ ULONG fContextReq,
10240 _In_ ULONG TargetDataRep,
10241 _In_opt_ PCtxtHandle phNewContext,
10242 _In_opt_ PSecBufferDesc pOutput,
10243 _Out_ PULONG pfContextAttr,
10244 _Out_opt_ PTimeStamp ptsExpiry);
10245
10246 typedef
10247 SECURITY_STATUS
10248 (SEC_ENTRY * ACCEPT_SECURITY_CONTEXT_FN)(
10249 PCredHandle,
10250 PCtxtHandle,
10251 PSecBufferDesc,
10252 ULONG,
10253 ULONG,
10254 PCtxtHandle,
10255 PSecBufferDesc,
10256 PULONG,
10257 PTimeStamp);
10258
10259 KSECDDDECLSPEC
10260 SECURITY_STATUS
10261 SEC_ENTRY
10262 AcquireCredentialsHandleW(
10263 _In_opt_ PSSPI_SEC_STRING pPrincipal,
10264 _In_ PSSPI_SEC_STRING pPackage,
10265 _In_ ULONG fCredentialUse,
10266 _In_opt_ PVOID pvLogonId,
10267 _In_opt_ PVOID pAuthData,
10268 _In_opt_ SEC_GET_KEY_FN pGetKeyFn,
10269 _In_opt_ PVOID pvGetKeyArgument,
10270 _Out_ PCredHandle phCredential,
10271 _Out_opt_ PTimeStamp ptsExpiry);
10272 #define AcquireCredentialsHandle AcquireCredentialsHandleW
10273
10274 typedef
10275 SECURITY_STATUS
10276 (SEC_ENTRY * ACQUIRE_CREDENTIALS_HANDLE_FN_W)(
10277 PSSPI_SEC_STRING,
10278 PSSPI_SEC_STRING,
10279 ULONG,
10280 PVOID,
10281 PVOID,
10282 SEC_GET_KEY_FN,
10283 PVOID,
10284 PCredHandle,
10285 PTimeStamp);
10286 #define ACQUIRE_CREDENTIALS_HANDLE_FN ACQUIRE_CREDENTIALS_HANDLE_FN_W
10287
10288 SECURITY_STATUS
10289 SEC_ENTRY
10290 AddCredentialsA(
10291 _In_ PCredHandle hCredentials,
10292 _In_opt_ LPSTR pszPrincipal,
10293 _In_ LPSTR pszPackage,
10294 _In_ ULONG fCredentialUse,
10295 _In_opt_ PVOID pAuthData,
10296 _In_opt_ SEC_GET_KEY_FN pGetKeyFn,
10297 _In_opt_ PVOID pvGetKeyArgument,
10298 _Out_opt_ PTimeStamp ptsExpiry);
10299
10300 typedef
10301 SECURITY_STATUS
10302 (SEC_ENTRY * ADD_CREDENTIALS_FN_A)(
10303 PCredHandle,
10304 SEC_CHAR *,
10305 SEC_CHAR *,
10306 ULONG,
10307 PVOID,
10308 SEC_GET_KEY_FN,
10309 PVOID,
10310 PTimeStamp);
10311
10312 KSECDDDECLSPEC
10313 SECURITY_STATUS
10314 SEC_ENTRY
10315 AddCredentialsW(
10316 _In_ PCredHandle hCredentials,
10317 _In_opt_ PSSPI_SEC_STRING pPrincipal,
10318 _In_ PSSPI_SEC_STRING pPackage,
10319 _In_ ULONG fCredentialUse,
10320 _In_opt_ PVOID pAuthData,
10321 _In_opt_ SEC_GET_KEY_FN pGetKeyFn,
10322 _In_opt_ PVOID pvGetKeyArgument,
10323 _Out_opt_ PTimeStamp ptsExpiry);
10324
10325 typedef
10326 SECURITY_STATUS
10327 (SEC_ENTRY * ADD_CREDENTIALS_FN_W)(
10328 PCredHandle,
10329 PSSPI_SEC_STRING,
10330 PSSPI_SEC_STRING,
10331 ULONG,
10332 PVOID,
10333 SEC_GET_KEY_FN,
10334 PVOID,
10335 PTimeStamp);
10336
10337 #ifdef UNICODE
10338 #define AddCredentials AddCredentialsW
10339 #define ADD_CREDENTIALS_FN ADD_CREDENTIALS_FN_W
10340 #else
10341 #define AddCredentials AddCredentialsA
10342 #define ADD_CREDENTIALS_FN ADD_CREDENTIALS_FN_A
10343 #endif
10344
10345 KSECDDDECLSPEC
10346 SECURITY_STATUS
10347 SEC_ENTRY
10348 ApplyControlToken(
10349 _In_ PCtxtHandle phContext,
10350 _In_ PSecBufferDesc pInput);
10351
10352 typedef
10353 SECURITY_STATUS
10354 (SEC_ENTRY * APPLY_CONTROL_TOKEN_FN)(
10355 PCtxtHandle, PSecBufferDesc);
10356
10357 #if (ISSP_MODE != 0)
10358
10359 SECURITY_STATUS
10360 SEC_ENTRY
10361 ChangeAccountPasswordA(
10362 _In_ SEC_CHAR* pszPackageName,
10363 _In_ SEC_CHAR* pszDomainName,
10364 _In_ SEC_CHAR* pszAccountName,
10365 _In_ SEC_CHAR* pszOldPassword,
10366 _In_ SEC_CHAR* pszNewPassword,
10367 _In_ BOOLEAN bImpersonating,
10368 _In_ ULONG dwReserved,
10369 _Inout_ PSecBufferDesc pOutput);
10370
10371 typedef
10372 SECURITY_STATUS
10373 (SEC_ENTRY * CHANGE_PASSWORD_FN_A)(
10374 SEC_CHAR *,
10375 SEC_CHAR *,
10376 SEC_CHAR *,
10377 SEC_CHAR *,
10378 SEC_CHAR *,
10379 BOOLEAN,
10380 ULONG,
10381 PSecBufferDesc);
10382
10383 SECURITY_STATUS
10384 SEC_ENTRY
10385 ChangeAccountPasswordW(
10386 _In_ SEC_WCHAR* pszPackageName,
10387 _In_ SEC_WCHAR* pszDomainName,
10388 _In_ SEC_WCHAR* pszAccountName,
10389 _In_ SEC_WCHAR* pszOldPassword,
10390 _In_ SEC_WCHAR* pszNewPassword,
10391 _In_ BOOLEAN bImpersonating,
10392 _In_ ULONG dwReserved,
10393 _Inout_ PSecBufferDesc pOutput);
10394
10395 typedef
10396 SECURITY_STATUS
10397 (SEC_ENTRY * CHANGE_PASSWORD_FN_W)(
10398 SEC_WCHAR *,
10399 SEC_WCHAR *,
10400 SEC_WCHAR *,
10401 SEC_WCHAR *,
10402 SEC_WCHAR *,
10403 BOOLEAN,
10404 ULONG,
10405 PSecBufferDesc);
10406
10407 #ifdef UNICODE
10408 #define ChangeAccountPassword ChangeAccountPasswordW
10409 #define CHANGE_PASSWORD_FN CHANGE_PASSWORD_FN_W
10410 #else
10411 #define ChangeAccountPassword ChangeAccountPasswordA
10412 #define CHANGE_PASSWORD_FN CHANGE_PASSWORD_FN_A
10413 #endif
10414
10415 #endif /* ISSP_MODE != 0 */
10416
10417 SECURITY_STATUS
10418 SEC_ENTRY
10419 CompleteAuthToken(
10420 _In_ PCtxtHandle phContext,
10421 _In_ PSecBufferDesc pToken);
10422
10423 typedef
10424 SECURITY_STATUS
10425 (SEC_ENTRY * COMPLETE_AUTH_TOKEN_FN)(
10426 PCtxtHandle,
10427 PSecBufferDesc);
10428
10429 SECURITY_STATUS
10430 SEC_ENTRY
10431 DecryptMessage(
10432 _In_ PCtxtHandle phContext,
10433 _Inout_ PSecBufferDesc pMessage,
10434 _In_ ULONG MessageSeqNo,
10435 _Out_opt_ PULONG pfQOP);
10436
10437 typedef
10438 SECURITY_STATUS
10439 (SEC_ENTRY * DECRYPT_MESSAGE_FN)(
10440 PCtxtHandle,
10441 PSecBufferDesc,
10442 ULONG,
10443 PULONG);
10444
10445 KSECDDDECLSPEC
10446 SECURITY_STATUS
10447 SEC_ENTRY
10448 DeleteSecurityContext(
10449 _In_ PCtxtHandle phContext);
10450
10451 typedef
10452 SECURITY_STATUS
10453 (SEC_ENTRY * DELETE_SECURITY_CONTEXT_FN)(
10454 PCtxtHandle);
10455
10456 SECURITY_STATUS
10457 SEC_ENTRY
10458 EncryptMessage(
10459 _In_ PCtxtHandle phContext,
10460 _In_ ULONG fQOP,
10461 _Inout_ PSecBufferDesc pMessage,
10462 _In_ ULONG MessageSeqNo);
10463
10464 typedef
10465 SECURITY_STATUS
10466 (SEC_ENTRY * ENCRYPT_MESSAGE_FN)(
10467 PCtxtHandle,
10468 ULONG,
10469 PSecBufferDesc,
10470 ULONG);
10471
10472 KSECDDDECLSPEC
10473 SECURITY_STATUS
10474 SEC_ENTRY
10475 EnumerateSecurityPackagesW(
10476 _Out_ PULONG pcPackages,
10477 _Deref_out_ PSecPkgInfoW* ppPackageInfo);
10478 #define EnumerateSecurityPackages EnumerateSecurityPackagesW
10479
10480 typedef
10481 SECURITY_STATUS
10482 (SEC_ENTRY * ENUMERATE_SECURITY_PACKAGES_FN_W)(
10483 PULONG,
10484 PSecPkgInfoW*);
10485 #define ENUMERATE_SECURITY_PACKAGES_FN ENUMERATE_SECURITY_PACKAGES_FN_W
10486
10487 KSECDDDECLSPEC
10488 SECURITY_STATUS
10489 SEC_ENTRY
10490 ExportSecurityContext(
10491 _In_ PCtxtHandle phContext,
10492 _In_ ULONG fFlags,
10493 _Out_ PSecBuffer pPackedContext,
10494 _Out_ PVOID* pToken);
10495
10496 typedef
10497 SECURITY_STATUS
10498 (SEC_ENTRY * EXPORT_SECURITY_CONTEXT_FN)(
10499 PCtxtHandle,
10500 ULONG,
10501 PSecBuffer,
10502 PVOID*);
10503
10504 SECURITY_STATUS
10505 SEC_ENTRY
10506 FreeContextBuffer(
10507 _Inout_ PVOID pvContextBuffer);
10508
10509 typedef
10510 SECURITY_STATUS
10511 (SEC_ENTRY * FREE_CONTEXT_BUFFER_FN)(
10512 _Inout_ PVOID);
10513
10514 KSECDDDECLSPEC
10515 SECURITY_STATUS
10516 SEC_ENTRY
10517 FreeCredentialsHandle(
10518 _In_ PCredHandle phCredential);
10519
10520 typedef
10521 SECURITY_STATUS
10522 (SEC_ENTRY * FREE_CREDENTIALS_HANDLE_FN)(
10523 PCredHandle);
10524
10525 KSECDDDECLSPEC
10526 SECURITY_STATUS
10527 SEC_ENTRY
10528 ImpersonateSecurityContext(
10529 _In_ PCtxtHandle phContext);
10530
10531 typedef
10532 SECURITY_STATUS
10533 (SEC_ENTRY * IMPERSONATE_SECURITY_CONTEXT_FN)(
10534 PCtxtHandle);
10535
10536 KSECDDDECLSPEC
10537 SECURITY_STATUS
10538 SEC_ENTRY
10539 ImportSecurityContextW(
10540 _In_ PSSPI_SEC_STRING pszPackage,
10541 _In_ PSecBuffer pPackedContext,
10542 _In_ PVOID Token,
10543 _Out_ PCtxtHandle phContext);
10544 #define ImportSecurityContext ImportSecurityContextW
10545
10546 typedef
10547 SECURITY_STATUS
10548 (SEC_ENTRY * IMPORT_SECURITY_CONTEXT_FN_W)(
10549 PSSPI_SEC_STRING,
10550 PSecBuffer,
10551 PVOID,
10552 PCtxtHandle);
10553 #define IMPORT_SECURITY_CONTEXT_FN IMPORT_SECURITY_CONTEXT_FN_W
10554
10555 KSECDDDECLSPEC
10556 SECURITY_STATUS
10557 SEC_ENTRY
10558 InitializeSecurityContextW(
10559 _In_opt_ PCredHandle phCredential,
10560 _In_opt_ PCtxtHandle phContext,
10561 _In_opt_ PSSPI_SEC_STRING pTargetName,
10562 _In_ ULONG fContextReq,
10563 _In_ ULONG Reserved1,
10564 _In_ ULONG TargetDataRep,
10565 _In_opt_ PSecBufferDesc pInput,
10566 _In_ ULONG Reserved2,
10567 _Inout_opt_ PCtxtHandle phNewContext,
10568 _Inout_opt_ PSecBufferDesc pOutput,
10569 _Out_ PULONG pfContextAttr,
10570 _Out_opt_ PTimeStamp ptsExpiry);
10571 #define InitializeSecurityContext InitializeSecurityContextW
10572
10573 typedef
10574 SECURITY_STATUS
10575 (SEC_ENTRY * INITIALIZE_SECURITY_CONTEXT_FN_W)(
10576 PCredHandle,
10577 PCtxtHandle,
10578 PSSPI_SEC_STRING,
10579 ULONG,
10580 ULONG,
10581 ULONG,
10582 PSecBufferDesc,
10583 ULONG,
10584 PCtxtHandle,
10585 PSecBufferDesc,
10586 PULONG,
10587 PTimeStamp);
10588 #define INITIALIZE_SECURITY_CONTEXT_FN INITIALIZE_SECURITY_CONTEXT_FN_W
10589
10590 KSECDDDECLSPEC
10591 PSecurityFunctionTableW
10592 SEC_ENTRY
10593 InitSecurityInterfaceW(VOID);
10594 #define InitSecurityInterface InitSecurityInterfaceW
10595
10596 typedef
10597 PSecurityFunctionTableW
10598 (SEC_ENTRY * INIT_SECURITY_INTERFACE_W)(VOID);
10599 #define INIT_SECURITY_INTERFACE INIT_SECURITY_INTERFACE_W
10600
10601 KSECDDDECLSPEC
10602 SECURITY_STATUS
10603 SEC_ENTRY
10604 MakeSignature(
10605 _In_ PCtxtHandle phContext,
10606 _In_ ULONG fQOP,
10607 _In_ PSecBufferDesc pMessage,
10608 _In_ ULONG MessageSeqNo);
10609
10610 typedef
10611 SECURITY_STATUS
10612 (SEC_ENTRY * MAKE_SIGNATURE_FN)(
10613 PCtxtHandle,
10614 ULONG,
10615 PSecBufferDesc,
10616 ULONG);
10617
10618 KSECDDDECLSPEC
10619 SECURITY_STATUS
10620 SEC_ENTRY
10621 QueryContextAttributesW(
10622 _In_ PCtxtHandle phContext,
10623 _In_ ULONG ulAttribute,
10624 _Out_ PVOID pBuffer);
10625 #define QueryContextAttributes QueryContextAttributesW
10626
10627 typedef
10628 SECURITY_STATUS
10629 (SEC_ENTRY * QUERY_CONTEXT_ATTRIBUTES_FN_W)(
10630 PCtxtHandle,
10631 ULONG,
10632 PVOID);
10633 #define QUERY_CONTEXT_ATTRIBUTES_FN QUERY_CONTEXT_ATTRIBUTES_FN_W
10634
10635 KSECDDDECLSPEC
10636 SECURITY_STATUS
10637 SEC_ENTRY
10638 QueryCredentialsAttributesW(
10639 _In_ PCredHandle phCredential,
10640 _In_ ULONG ulAttribute,
10641 _Inout_ PVOID pBuffer);
10642 #define QueryCredentialsAttributes QueryCredentialsAttributesW
10643
10644 typedef
10645 SECURITY_STATUS
10646 (SEC_ENTRY * QUERY_CREDENTIALS_ATTRIBUTES_FN_W)(
10647 PCredHandle,
10648 ULONG,
10649 PVOID);
10650 #define QUERY_CREDENTIALS_ATTRIBUTES_FN QUERY_CREDENTIALS_ATTRIBUTES_FN_W
10651
10652 KSECDDDECLSPEC
10653 SECURITY_STATUS
10654 SEC_ENTRY
10655 QuerySecurityContextToken(
10656 _In_ PCtxtHandle phContext,
10657 _Out_ PVOID* Token);
10658
10659 typedef
10660 SECURITY_STATUS
10661 (SEC_ENTRY * QUERY_SECURITY_CONTEXT_TOKEN_FN)(
10662 PCtxtHandle, PVOID *);
10663
10664 KSECDDDECLSPEC
10665 SECURITY_STATUS
10666 SEC_ENTRY
10667 QuerySecurityPackageInfoW(
10668 _In_ PSSPI_SEC_STRING pPackageName,
10669 _Deref_out_ PSecPkgInfoW *ppPackageInfo);
10670 #define QuerySecurityPackageInfo QuerySecurityPackageInfoW
10671
10672 typedef
10673 SECURITY_STATUS
10674 (SEC_ENTRY * QUERY_SECURITY_PACKAGE_INFO_FN_W)(
10675 PSSPI_SEC_STRING,
10676 PSecPkgInfoW *);
10677 #define QUERY_SECURITY_PACKAGE_INFO_FN QUERY_SECURITY_PACKAGE_INFO_FN_W
10678
10679 KSECDDDECLSPEC
10680 SECURITY_STATUS
10681 SEC_ENTRY
10682 RevertSecurityContext(
10683 _In_ PCtxtHandle phContext);
10684
10685 typedef
10686 SECURITY_STATUS
10687 (SEC_ENTRY * REVERT_SECURITY_CONTEXT_FN)(
10688 PCtxtHandle);
10689
10690 #if (OSVER(NTDDI_VERSION) > NTDDI_WIN2K)
10691 SECURITY_STATUS
10692 SEC_ENTRY
10693 SetContextAttributesW(
10694 _In_ PCtxtHandle phContext,
10695 _In_ ULONG ulAttribute,
10696 _In_bytecount_(cbBuffer) PVOID pBuffer,
10697 _In_ ULONG cbBuffer);
10698 #define SetContextAttributes SetContextAttributesW
10699
10700 typedef
10701 SECURITY_STATUS
10702 (SEC_ENTRY * SET_CONTEXT_ATTRIBUTES_FN_W)(
10703 PCtxtHandle,
10704 ULONG,
10705 PVOID,
10706 ULONG);
10707 #define SET_CONTEXT_ATTRIBUTES_FN SET_CONTEXT_ATTRIBUTES_FN_W
10708 #endif
10709
10710 #if (NTDDI_VERSION > NTDDI_WS03)
10711 KSECDDDECLSPEC
10712 SECURITY_STATUS
10713 SEC_ENTRY
10714 SetCredentialsAttributesW(
10715 _In_ PCredHandle phCredential,
10716 _In_ ULONG ulAttribute,
10717 _In_bytecount_(cbBuffer) PVOID pBuffer,
10718 _In_ ULONG cbBuffer);
10719 #define SetCredentialsAttributes SetCredentialsAttributesW
10720
10721 typedef
10722 SECURITY_STATUS
10723 (SEC_ENTRY * SET_CREDENTIALS_ATTRIBUTES_FN_W)(
10724 PCredHandle,
10725 ULONG,
10726 PVOID,
10727 ULONG);
10728 #define SET_CREDENTIALS_ATTRIBUTES_FN SET_CREDENTIALS_ATTRIBUTES_FN_W
10729 #endif /* NTDDI_VERSION > NTDDI_WS03 */
10730
10731 KSECDDDECLSPEC
10732 SECURITY_STATUS
10733 SEC_ENTRY
10734 VerifySignature(
10735 _In_ PCtxtHandle phContext,
10736 _In_ PSecBufferDesc pMessage,
10737 _In_ ULONG MessageSeqNo,
10738 _Out_ PULONG pfQOP);
10739
10740 typedef
10741 SECURITY_STATUS
10742 (SEC_ENTRY * VERIFY_SIGNATURE_FN)(
10743 PCtxtHandle,
10744 PSecBufferDesc,
10745 ULONG,
10746 PULONG);
10747
10748 #if (ISSP_MODE == 0)
10749
10750 KSECDDDECLSPEC
10751 NTSTATUS
10752 NTAPI
10753 SecMakeSPN(
10754 _In_ PUNICODE_STRING ServiceClass,
10755 _In_ PUNICODE_STRING ServiceName,
10756 _In_opt_ PUNICODE_STRING InstanceName,
10757 _In_opt_ USHORT InstancePort,
10758 _In_opt_ PUNICODE_STRING Referrer,
10759 _Inout_ PUNICODE_STRING Spn,
10760 _Out_opt_ PULONG Length,
10761 _In_ BOOLEAN Allocate);
10762
10763 #if (NTDDI_VERSION >= NTDDI_WINXP)
10764 KSECDDDECLSPEC
10765 NTSTATUS
10766 NTAPI
10767 SecMakeSPNEx(
10768 _In_ PUNICODE_STRING ServiceClass,
10769 _In_ PUNICODE_STRING ServiceName,
10770 _In_opt_ PUNICODE_STRING InstanceName,
10771 _In_opt_ USHORT InstancePort,
10772 _In_opt_ PUNICODE_STRING Referrer,
10773 _In_opt_ PUNICODE_STRING TargetInfo,
10774 _Inout_ PUNICODE_STRING Spn,
10775 _Out_ PULONG Length OPTIONAL,
10776 _In_ BOOLEAN Allocate);
10777
10778 KSECDDDECLSPEC
10779 NTSTATUS
10780 SEC_ENTRY
10781 SecLookupAccountSid(
10782 _In_ PSID Sid,
10783 _Out_ PULONG NameSize,
10784 _Inout_ PUNICODE_STRING NameBuffer,
10785 _Out_ PULONG DomainSize OPTIONAL,
10786 _Out_opt_ PUNICODE_STRING DomainBuffer,
10787 _Out_ PSID_NAME_USE NameUse);
10788
10789 KSECDDDECLSPEC
10790 NTSTATUS
10791 SEC_ENTRY
10792 SecLookupAccountName(
10793 _In_ PUNICODE_STRING Name,
10794 _Inout_ PULONG SidSize,
10795 _Out_ PSID Sid,
10796 _Out_ PSID_NAME_USE NameUse,
10797 _Out_opt_ PULONG DomainSize, // WDK says _Out_ only + ... OPTIONAL
10798 _Inout_opt_ PUNICODE_STRING ReferencedDomain);
10799 #endif
10800
10801 #if (NTDDI_VERSION >= NTDDI_WS03)
10802 KSECDDDECLSPEC
10803 NTSTATUS
10804 SEC_ENTRY
10805 SecLookupWellKnownSid(
10806 _In_ WELL_KNOWN_SID_TYPE SidType,
10807 _Out_ PSID Sid,
10808 _In_ ULONG SidBufferSize,
10809 _Inout_opt_ PULONG SidSize);
10810 #endif
10811
10812 #if (NTDDI_VERSION >= NTDDI_VISTA)
10813 KSECDDDECLSPEC
10814 NTSTATUS
10815 NTAPI
10816 SecMakeSPNEx2(
10817 _In_ PUNICODE_STRING ServiceClass,
10818 _In_ PUNICODE_STRING ServiceName,
10819 _In_opt_ PUNICODE_STRING InstanceName,
10820 _In_opt_ USHORT InstancePort,
10821 _In_opt_ PUNICODE_STRING Referrer,
10822 _In_opt_ PUNICODE_STRING InTargetInfo,
10823 _Inout_ PUNICODE_STRING Spn,
10824 _Out_opt_ PULONG TotalSize,
10825 _In_ BOOLEAN Allocate,
10826 _In_ BOOLEAN IsTargetInfoMarshaled);
10827 #endif
10828
10829 #endif /* ISSP_MODE == 0 */
10830
10831 #if (NTDDI_VERSION >= NTDDI_WIN7)
10832
10833 SECURITY_STATUS
10834 SEC_ENTRY
10835 SspiEncodeAuthIdentityAsStrings(
10836 _In_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE pAuthIdentity,
10837 _Deref_out_opt_ PCWSTR* ppszUserName,
10838 _Deref_out_opt_ PCWSTR* ppszDomainName,
10839 _Deref_opt_out_opt_ PCWSTR* ppszPackedCredentialsString);
10840
10841 SECURITY_STATUS
10842 SEC_ENTRY
10843 SspiValidateAuthIdentity(
10844 _In_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
10845
10846 SECURITY_STATUS
10847 SEC_ENTRY
10848 SspiCopyAuthIdentity(
10849 _In_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData,
10850 _Deref_out_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE* AuthDataCopy);
10851
10852 VOID
10853 SEC_ENTRY
10854 SspiFreeAuthIdentity(
10855 _In_opt_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
10856
10857 VOID
10858 SEC_ENTRY
10859 SspiZeroAuthIdentity(
10860 _In_opt_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
10861
10862 VOID
10863 SEC_ENTRY
10864 SspiLocalFree(
10865 _In_opt_ PVOID DataBuffer);
10866
10867 SECURITY_STATUS
10868 SEC_ENTRY
10869 SspiEncodeStringsAsAuthIdentity(
10870 _In_opt_ PCWSTR pszUserName,
10871 _In_opt_ PCWSTR pszDomainName,
10872 _In_opt_ PCWSTR pszPackedCredentialsString,
10873 _Deref_out_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppAuthIdentity);
10874
10875 SECURITY_STATUS
10876 SEC_ENTRY
10877 SspiCompareAuthIdentities(
10878 _In_opt_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity1,
10879 _In_opt_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity2,
10880 _Out_opt_ PBOOLEAN SameSuppliedUser,
10881 _Out_opt_ PBOOLEAN SameSuppliedIdentity);
10882
10883 SECURITY_STATUS
10884 SEC_ENTRY
10885 SspiMarshalAuthIdentity(
10886 _In_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity,
10887 _Out_ PULONG AuthIdentityLength,
10888 _Outptr_result_bytebuffer_(*AuthIdentityLength) PCHAR* AuthIdentityByteArray);
10889
10890 SECURITY_STATUS
10891 SEC_ENTRY
10892 SspiUnmarshalAuthIdentity(
10893 _In_ PULONG AuthIdentityLength,
10894 _In_reads_bytes_(AuthIdentityLength) PCHAR AuthIdentityByteArray,
10895 _Outptr_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppAuthIdentity);
10896
10897 BOOLEAN
10898 SEC_ENTRY
10899 SspiIsPromptingNeeded(
10900 _In_ PULONG ErrorOrNtStatus);
10901
10902 SECURITY_STATUS
10903 SEC_ENTRY
10904 SspiGetTargetHostName(
10905 _In_ PCWSTR pszTargetName,
10906 _Outptr_ PWSTR* pszHostName);
10907
10908 SECURITY_STATUS
10909 SEC_ENTRY
10910 SspiExcludePackage(
10911 _In_opt_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity,
10912 _In_ PCWSTR pszPackageName,
10913 _Outptr_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppNewAuthIdentity);
10914
10915 #define SEC_WINNT_AUTH_IDENTITY_MARSHALLED 0x04
10916 #define SEC_WINNT_AUTH_IDENTITY_ONLY 0x08
10917
10918 #endif /* NTDDI_VERSION >= NTDDI_WIN7 */
10919
10920 #define FreeCredentialHandle FreeCredentialsHandle
10921 struct _SECURITY_FUNCTION_TABLE_W
10922 {
10923 ULONG dwVersion;
10924 ENUMERATE_SECURITY_PACKAGES_FN_W EnumerateSecurityPackagesW;
10925 QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW;
10926 ACQUIRE_CREDENTIALS_HANDLE_FN_W AcquireCredentialsHandleW;
10927 FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
10928 PVOID Reserved2;
10929 INITIALIZE_SECURITY_CONTEXT_FN_W InitializeSecurityContextW;
10930 ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
10931 COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
10932 DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
10933 APPLY_CONTROL_TOKEN_FN ApplyControlToken;
10934 QUERY_CONTEXT_ATTRIBUTES_FN_W QueryContextAttributesW;
10935 IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
10936 REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
10937 MAKE_SIGNATURE_FN MakeSignature;
10938 VERIFY_SIGNATURE_FN VerifySignature;
10939 FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
10940 QUERY_SECURITY_PACKAGE_INFO_FN_W QuerySecurityPackageInfoW;
10941 PVOID Reserved3;
10942 PVOID Reserved4;
10943 EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext;
10944 IMPORT_SECURITY_CONTEXT_FN_W ImportSecurityContextW;
10945 ADD_CREDENTIALS_FN_W AddCredentialsW ;
10946 PVOID Reserved8;
10947 QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
10948 ENCRYPT_MESSAGE_FN EncryptMessage;
10949 DECRYPT_MESSAGE_FN DecryptMessage;
10950 #if OSVER(NTDDI_VERSION) > NTDDI_WIN2K
10951 SET_CONTEXT_ATTRIBUTES_FN_W SetContextAttributesW;
10952 #endif
10953 #if NTDDI_VERSION > NTDDI_WS03SP1
10954 SET_CREDENTIALS_ATTRIBUTES_FN_W SetCredentialsAttributesW;
10955 #endif
10956 #if ISSP_MODE != 0
10957 CHANGE_PASSWORD_FN_W ChangeAccountPasswordW;
10958 #else
10959 PVOID Reserved9;
10960 #endif
10961 };
10962
10963 #endif /* !__SSPI_H__ */
10964
10965 /* #if !defined(_X86AMD64_) FIXME : WHAT ?! */
10966 #if defined(_WIN64)
10967 C_ASSERT(sizeof(ERESOURCE) == 0x68);
10968 C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x18);
10969 C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x1a);
10970 #else
10971 C_ASSERT(sizeof(ERESOURCE) == 0x38);
10972 C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x0c);
10973 C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x0e);
10974 #endif
10975 /* #endif */
10976
10977 #if defined(_IA64_)
10978 #if (NTDDI_VERSION >= NTDDI_WIN2K)
10979 //DECLSPEC_DEPRECATED_DDK
10980 NTHALAPI
10981 ULONG
10982 NTAPI
10983 HalGetDmaAlignmentRequirement(
10984 VOID);
10985 #endif
10986 #endif
10987
10988 #if defined(_M_IX86) || defined(_M_AMD64)
10989 #define HalGetDmaAlignmentRequirement() 1L
10990 #endif
10991
10992 #ifdef _NTSYSTEM_
10993 extern PUSHORT NlsOemLeadByteInfo;
10994 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
10995 #else
10996 __CREATE_NTOS_DATA_IMPORT_ALIAS(NlsOemLeadByteInfo)
10997 extern PUSHORT *NlsOemLeadByteInfo;
10998 #define NLS_OEM_LEAD_BYTE_INFO (*NlsOemLeadByteInfo)
10999 #endif
11000
11001 #if (NTDDI_VERSION >= NTDDI_VISTA)
11002
11003 typedef enum _NETWORK_OPEN_LOCATION_QUALIFIER {
11004 NetworkOpenLocationAny,
11005 NetworkOpenLocationRemote,
11006 NetworkOpenLocationLoopback
11007 } NETWORK_OPEN_LOCATION_QUALIFIER;
11008
11009 typedef enum _NETWORK_OPEN_INTEGRITY_QUALIFIER {
11010 NetworkOpenIntegrityAny,
11011 NetworkOpenIntegrityNone,
11012 NetworkOpenIntegritySigned,
11013 NetworkOpenIntegrityEncrypted,
11014 NetworkOpenIntegrityMaximum
11015 } NETWORK_OPEN_INTEGRITY_QUALIFIER;
11016
11017 #if (NTDDI_VERSION >= NTDDI_WIN7)
11018
11019 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_COLLAPSING 0x1
11020 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_DURABILITY 0x2
11021 #define NETWORK_OPEN_ECP_IN_FLAG_FORCE_BUFFERED_SYNCHRONOUS_IO_HACK 0x80000000
11022
11023 typedef struct _NETWORK_OPEN_ECP_CONTEXT {
11024 USHORT Size;
11025 USHORT Reserved;
11026 _ANONYMOUS_STRUCT struct {
11027 struct {
11028 NETWORK_OPEN_LOCATION_QUALIFIER Location;
11029 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
11030 ULONG Flags;
11031 } in;
11032 struct {
11033 NETWORK_OPEN_LOCATION_QUALIFIER Location;
11034 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
11035 ULONG Flags;
11036 } out;
11037 } DUMMYSTRUCTNAME;
11038 } NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
11039
11040 typedef struct _NETWORK_OPEN_ECP_CONTEXT_V0 {
11041 USHORT Size;
11042 USHORT Reserved;
11043 _ANONYMOUS_STRUCT struct {
11044 struct {
11045 NETWORK_OPEN_LOCATION_QUALIFIER Location;
11046 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
11047 } in;
11048 struct {
11049 NETWORK_OPEN_LOCATION_QUALIFIER Location;
11050 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
11051 } out;
11052 } DUMMYSTRUCTNAME;
11053 } NETWORK_OPEN_ECP_CONTEXT_V0, *PNETWORK_OPEN_ECP_CONTEXT_V0;
11054
11055 #elif (NTDDI_VERSION >= NTDDI_VISTA)
11056 typedef struct _NETWORK_OPEN_ECP_CONTEXT {
11057 USHORT Size;
11058 USHORT Reserved;
11059 _ANONYMOUS_STRUCT struct {
11060 struct {
11061 NETWORK_OPEN_LOCATION_QUALIFIER Location;
11062 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
11063 } in;
11064 struct {
11065 NETWORK_OPEN_LOCATION_QUALIFIER Location;
11066 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
11067 } out;
11068 } DUMMYSTRUCTNAME;
11069 } NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
11070 #endif
11071
11072 DEFINE_GUID(GUID_ECP_NETWORK_OPEN_CONTEXT, 0xc584edbf, 0x00df, 0x4d28, 0xb8, 0x84, 0x35, 0xba, 0xca, 0x89, 0x11, 0xe8);
11073
11074 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
11075
11076
11077 #if (NTDDI_VERSION >= NTDDI_VISTA)
11078
11079 typedef struct _PREFETCH_OPEN_ECP_CONTEXT {
11080 PVOID Context;
11081 } PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT;
11082
11083 DEFINE_GUID(GUID_ECP_PREFETCH_OPEN, 0xe1777b21, 0x847e, 0x4837, 0xaa, 0x45, 0x64, 0x16, 0x1d, 0x28, 0x6, 0x55);
11084
11085 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
11086
11087 #if (NTDDI_VERSION >= NTDDI_WIN7)
11088
11089 DEFINE_GUID (GUID_ECP_NFS_OPEN, 0xf326d30c, 0xe5f8, 0x4fe7, 0xab, 0x74, 0xf5, 0xa3, 0x19, 0x6d, 0x92, 0xdb);
11090 DEFINE_GUID (GUID_ECP_SRV_OPEN, 0xbebfaebc, 0xaabf, 0x489d, 0x9d, 0x2c, 0xe9, 0xe3, 0x61, 0x10, 0x28, 0x53);
11091
11092 typedef struct sockaddr_storage *PSOCKADDR_STORAGE_NFS;
11093
11094 typedef struct _NFS_OPEN_ECP_CONTEXT {
11095 PUNICODE_STRING ExportAlias;
11096 PSOCKADDR_STORAGE_NFS ClientSocketAddress;
11097 } NFS_OPEN_ECP_CONTEXT, *PNFS_OPEN_ECP_CONTEXT, **PPNFS_OPEN_ECP_CONTEXT;
11098
11099 typedef struct _SRV_OPEN_ECP_CONTEXT {
11100 PUNICODE_STRING ShareName;
11101 PSOCKADDR_STORAGE_NFS SocketAddress;
11102 BOOLEAN OplockBlockState;
11103 BOOLEAN OplockAppState;
11104 BOOLEAN OplockFinalState;
11105 } SRV_OPEN_ECP_CONTEXT, *PSRV_OPEN_ECP_CONTEXT;
11106
11107 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
11108
11109 #define PIN_WAIT (1)
11110 #define PIN_EXCLUSIVE (2)
11111 #define PIN_NO_READ (4)
11112 #define PIN_IF_BCB (8)
11113 #define PIN_CALLER_TRACKS_DIRTY_DATA (32)
11114 #define PIN_HIGH_PRIORITY (64)
11115
11116 #define MAP_WAIT 1
11117 #define MAP_NO_READ (16)
11118 #define MAP_HIGH_PRIORITY (64)
11119
11120 #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
11121 #define IOCTL_REDIR_QUERY_PATH_EX CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 100, METHOD_NEITHER, FILE_ANY_ACCESS)
11122
11123 typedef struct _QUERY_PATH_REQUEST {
11124 ULONG PathNameLength;
11125 PIO_SECURITY_CONTEXT SecurityContext;
11126 WCHAR FilePathName[1];
11127 } QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST;
11128
11129 typedef struct _QUERY_PATH_REQUEST_EX {
11130 PIO_SECURITY_CONTEXT pSecurityContext;
11131 ULONG EaLength;
11132 PVOID pEaBuffer;
11133 UNICODE_STRING PathName;
11134 UNICODE_STRING DomainServiceName;
11135 ULONG_PTR Reserved[ 3 ];
11136 } QUERY_PATH_REQUEST_EX, *PQUERY_PATH_REQUEST_EX;
11137
11138 typedef struct _QUERY_PATH_RESPONSE {
11139 ULONG LengthAccepted;
11140 } QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE;
11141
11142 #define VOLSNAPCONTROLTYPE 0x00000053
11143 #define IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES CTL_CODE(VOLSNAPCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
11144
11145 /* FIXME : These definitions below don't belong here (or anywhere in ddk really) */
11146 #pragma pack(push,4)
11147
11148 #ifndef VER_PRODUCTBUILD
11149 #define VER_PRODUCTBUILD 10000
11150 #endif
11151
11152 #include "csq.h"
11153
11154 #define FS_LFN_APIS 0x00004000
11155
11156 #define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
11157 #define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
11158 #define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
11159 #define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
11160 #define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
11161 #define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
11162 #define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
11163 #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
11164 #define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
11165 #define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
11166 #define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
11167 #define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
11168 #define FILE_STORAGE_TYPE_MASK 0x000f0000
11169 #define FILE_STORAGE_TYPE_SHIFT 16
11170
11171 #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
11172
11173 #ifdef _X86_
11174 #define HARDWARE_PTE HARDWARE_PTE_X86
11175 #define PHARDWARE_PTE PHARDWARE_PTE_X86
11176 #endif
11177
11178 #define IO_ATTACH_DEVICE_API 0x80000000
11179
11180 #define IO_TYPE_APC 18
11181 #define IO_TYPE_DPC 19
11182 #define IO_TYPE_DEVICE_QUEUE 20
11183 #define IO_TYPE_EVENT_PAIR 21
11184 #define IO_TYPE_INTERRUPT 22
11185 #define IO_TYPE_PROFILE 23
11186
11187 #define IRP_BEING_VERIFIED 0x10
11188
11189 #define MAILSLOT_CLASS_FIRSTCLASS 1
11190 #define MAILSLOT_CLASS_SECONDCLASS 2
11191
11192 #define MAILSLOT_SIZE_AUTO 0
11193
11194 #define MEM_DOS_LIM 0x40000000
11195
11196 #define OB_TYPE_TYPE 1
11197 #define OB_TYPE_DIRECTORY 2
11198 #define OB_TYPE_SYMBOLIC_LINK 3
11199 #define OB_TYPE_TOKEN 4
11200 #define OB_TYPE_PROCESS 5
11201 #define OB_TYPE_THREAD 6
11202 #define OB_TYPE_EVENT 7
11203 #define OB_TYPE_EVENT_PAIR 8
11204 #define OB_TYPE_MUTANT 9
11205 #define OB_TYPE_SEMAPHORE 10
11206 #define OB_TYPE_TIMER 11
11207 #define OB_TYPE_PROFILE 12
11208 #define OB_TYPE_WINDOW_STATION 13
11209 #define OB_TYPE_DESKTOP 14
11210 #define OB_TYPE_SECTION 15
11211 #define OB_TYPE_KEY 16
11212 #define OB_TYPE_PORT 17
11213 #define OB_TYPE_ADAPTER 18
11214 #define OB_TYPE_CONTROLLER 19
11215 #define OB_TYPE_DEVICE 20
11216 #define OB_TYPE_DRIVER 21
11217 #define OB_TYPE_IO_COMPLETION 22
11218 #define OB_TYPE_FILE 23
11219
11220 #define SEC_BASED 0x00200000
11221
11222 /* end winnt.h */
11223
11224 #define TOKEN_HAS_ADMIN_GROUP 0x08
11225
11226 #if (VER_PRODUCTBUILD >= 1381)
11227 #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
11228 #endif /* (VER_PRODUCTBUILD >= 1381) */
11229
11230 #if (VER_PRODUCTBUILD >= 2195)
11231
11232 #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
11233 #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
11234
11235 #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
11236
11237 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
11238 #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
11239 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
11240 #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
11241 #endif /* (VER_PRODUCTBUILD >= 2195) */
11242
11243 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
11244 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
11245 #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
11246 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
11247 #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
11248 #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
11249 #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
11250 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
11251
11252 typedef enum _FILE_STORAGE_TYPE {
11253 StorageTypeDefault = 1,
11254 StorageTypeDirectory,
11255 StorageTypeFile,
11256 StorageTypeJunctionPoint,
11257 StorageTypeCatalog,
11258 StorageTypeStructuredStorage,
11259 StorageTypeEmbedding,
11260 StorageTypeStream
11261 } FILE_STORAGE_TYPE;
11262
11263 typedef struct _OBJECT_BASIC_INFORMATION
11264 {
11265 ULONG Attributes;
11266 ACCESS_MASK GrantedAccess;
11267 ULONG HandleCount;
11268 ULONG PointerCount;
11269 ULONG PagedPoolCharge;
11270 ULONG NonPagedPoolCharge;
11271 ULONG Reserved[ 3 ];
11272 ULONG NameInfoSize;
11273 ULONG TypeInfoSize;
11274 ULONG SecurityDescriptorSize;
11275 LARGE_INTEGER CreationTime;
11276 } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
11277
11278 typedef struct _FILE_COPY_ON_WRITE_INFORMATION {
11279 BOOLEAN ReplaceIfExists;
11280 HANDLE RootDirectory;
11281 ULONG FileNameLength;
11282 WCHAR FileName[1];
11283 } FILE_COPY_ON_WRITE_INFORMATION, *PFILE_COPY_ON_WRITE_INFORMATION;
11284
11285 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
11286 ULONG NextEntryOffset;
11287 ULONG FileIndex;
11288 LARGE_INTEGER CreationTime;
11289 LARGE_INTEGER LastAccessTime;
11290 LARGE_INTEGER LastWriteTime;
11291 LARGE_INTEGER ChangeTime;
11292 LARGE_INTEGER EndOfFile;
11293 LARGE_INTEGER AllocationSize;
11294 ULONG FileAttributes;
11295 ULONG FileNameLength;
11296 ULONG EaSize;
11297 WCHAR FileName[ANYSIZE_ARRAY];
11298 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION;
11299
11300 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
11301 typedef struct _FILE_SHARED_LOCK_ENTRY {
11302 PVOID Unknown1;
11303 PVOID Unknown2;
11304 FILE_LOCK_INFO FileLock;
11305 } FILE_SHARED_LOCK_ENTRY, *PFILE_SHARED_LOCK_ENTRY;
11306
11307 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
11308 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY {
11309 LIST_ENTRY ListEntry;
11310 PVOID Unknown1;
11311 PVOID Unknown2;
11312 FILE_LOCK_INFO FileLock;
11313 } FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
11314
11315 typedef struct _FILE_MAILSLOT_PEEK_BUFFER {
11316 ULONG ReadDataAvailable;
11317 ULONG NumberOfMessages;
11318 ULONG MessageLength;
11319 } FILE_MAILSLOT_PEEK_BUFFER, *PFILE_MAILSLOT_PEEK_BUFFER;
11320
11321 typedef struct _FILE_OLE_CLASSID_INFORMATION {
11322 GUID ClassId;
11323 } FILE_OLE_CLASSID_INFORMATION, *PFILE_OLE_CLASSID_INFORMATION;
11324
11325 typedef struct _FILE_OLE_ALL_INFORMATION {
11326 FILE_BASIC_INFORMATION BasicInformation;
11327 FILE_STANDARD_INFORMATION StandardInformation;
11328 FILE_INTERNAL_INFORMATION InternalInformation;
11329 FILE_EA_INFORMATION EaInformation;
11330 FILE_ACCESS_INFORMATION AccessInformation;
11331 FILE_POSITION_INFORMATION PositionInformation;
11332 FILE_MODE_INFORMATION ModeInformation;
11333 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
11334 USN LastChangeUsn;
11335 USN ReplicationUsn;
11336 LARGE_INTEGER SecurityChangeTime;
11337 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
11338 FILE_OBJECTID_INFORMATION ObjectIdInformation;
11339 FILE_STORAGE_TYPE StorageType;
11340 ULONG OleStateBits;
11341 ULONG OleId;
11342 ULONG NumberOfStreamReferences;
11343 ULONG StreamIndex;
11344 ULONG SecurityId;
11345 BOOLEAN ContentIndexDisable;
11346 BOOLEAN InheritContentIndexDisable;
11347 FILE_NAME_INFORMATION NameInformation;
11348 } FILE_OLE_ALL_INFORMATION, *PFILE_OLE_ALL_INFORMATION;
11349
11350 typedef struct _FILE_OLE_DIR_INFORMATION {
11351 ULONG NextEntryOffset;
11352 ULONG FileIndex;
11353 LARGE_INTEGER CreationTime;
11354 LARGE_INTEGER LastAccessTime;
11355 LARGE_INTEGER LastWriteTime;
11356 LARGE_INTEGER ChangeTime;
11357 LARGE_INTEGER EndOfFile;
11358 LARGE_INTEGER AllocationSize;
11359 ULONG FileAttributes;
11360 ULONG FileNameLength;
11361 FILE_STORAGE_TYPE StorageType;
11362 GUID OleClassId;
11363 ULONG OleStateBits;
11364 BOOLEAN ContentIndexDisable;
11365 BOOLEAN InheritContentIndexDisable;
11366 WCHAR FileName[1];
11367 } FILE_OLE_DIR_INFORMATION, *PFILE_OLE_DIR_INFORMATION;
11368
11369 typedef struct _FILE_OLE_INFORMATION {
11370 LARGE_INTEGER SecurityChangeTime;
11371 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
11372 FILE_OBJECTID_INFORMATION ObjectIdInformation;
11373 FILE_STORAGE_TYPE StorageType;
11374 ULONG OleStateBits;
11375 BOOLEAN ContentIndexDisable;
11376 BOOLEAN InheritContentIndexDisable;
11377 } FILE_OLE_INFORMATION, *PFILE_OLE_INFORMATION;
11378
11379 typedef struct _FILE_OLE_STATE_BITS_INFORMATION {
11380 ULONG StateBits;
11381 ULONG StateBitsMask;
11382 } FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION;
11383
11384 typedef struct _MAPPING_PAIR {
11385 ULONGLONG Vcn;
11386 ULONGLONG Lcn;
11387 } MAPPING_PAIR, *PMAPPING_PAIR;
11388
11389 typedef struct _GET_RETRIEVAL_DESCRIPTOR {
11390 ULONG NumberOfPairs;
11391 ULONGLONG StartVcn;
11392 MAPPING_PAIR Pair[1];
11393 } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
11394
11395 typedef struct _MOVEFILE_DESCRIPTOR {
11396 HANDLE FileHandle;
11397 ULONG Reserved;
11398 LARGE_INTEGER StartVcn;
11399 LARGE_INTEGER TargetLcn;
11400 ULONG NumVcns;
11401 ULONG Reserved1;
11402 } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
11403
11404 typedef struct _OBJECT_BASIC_INFO {
11405 ULONG Attributes;
11406 ACCESS_MASK GrantedAccess;
11407 ULONG HandleCount;
11408 ULONG ReferenceCount;
11409 ULONG PagedPoolUsage;
11410 ULONG NonPagedPoolUsage;
11411 ULONG Reserved[3];
11412 ULONG NameInformationLength;
11413 ULONG TypeInformationLength;
11414 ULONG SecurityDescriptorLength;
11415 LARGE_INTEGER CreateTime;
11416 } OBJECT_BASIC_INFO, *POBJECT_BASIC_INFO;
11417
11418 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO {
11419 BOOLEAN Inherit;
11420 BOOLEAN ProtectFromClose;
11421 } OBJECT_HANDLE_ATTRIBUTE_INFO, *POBJECT_HANDLE_ATTRIBUTE_INFO;
11422
11423 typedef struct _OBJECT_NAME_INFO {
11424 UNICODE_STRING ObjectName;
11425 WCHAR ObjectNameBuffer[1];
11426 } OBJECT_NAME_INFO, *POBJECT_NAME_INFO;
11427
11428 typedef struct _OBJECT_PROTECTION_INFO {
11429 BOOLEAN Inherit;
11430 BOOLEAN ProtectHandle;
11431 } OBJECT_PROTECTION_INFO, *POBJECT_PROTECTION_INFO;
11432
11433 typedef struct _OBJECT_TYPE_INFO {
11434 UNICODE_STRING ObjectTypeName;
11435 UCHAR Unknown[0x58];
11436 WCHAR ObjectTypeNameBuffer[1];
11437 } OBJECT_TYPE_INFO, *POBJECT_TYPE_INFO;
11438
11439 typedef struct _OBJECT_ALL_TYPES_INFO {
11440 ULONG NumberOfObjectTypes;
11441 OBJECT_TYPE_INFO ObjectsTypeInfo[1];
11442 } OBJECT_ALL_TYPES_INFO, *POBJECT_ALL_TYPES_INFO;
11443
11444 #if defined(USE_LPC6432)
11445 #define LPC_CLIENT_ID CLIENT_ID64
11446 #define LPC_SIZE_T ULONGLONG
11447 #define LPC_PVOID ULONGLONG
11448 #define LPC_HANDLE ULONGLONG
11449 #else
11450 #define LPC_CLIENT_ID CLIENT_ID
11451 #define LPC_SIZE_T SIZE_T
11452 #define LPC_PVOID PVOID
11453 #define LPC_HANDLE HANDLE
11454 #endif
11455
11456 typedef struct _PORT_MESSAGE
11457 {
11458 union
11459 {
11460 struct
11461 {
11462 CSHORT DataLength;
11463 CSHORT TotalLength;
11464 } s1;
11465 ULONG Length;
11466 } u1;
11467 union
11468 {
11469 struct
11470 {
11471 CSHORT Type;
11472 CSHORT DataInfoOffset;
11473 } s2;
11474 ULONG ZeroInit;
11475 } u2;
11476 __GNU_EXTENSION union
11477 {
11478 LPC_CLIENT_ID ClientId;
11479 double DoNotUseThisField;
11480 };
11481 ULONG MessageId;
11482 __GNU_EXTENSION union
11483 {
11484 LPC_SIZE_T ClientViewSize;
11485 ULONG CallbackId;
11486 };
11487 } PORT_MESSAGE, *PPORT_MESSAGE;
11488
11489 #define LPC_KERNELMODE_MESSAGE (CSHORT)((USHORT)0x8000)
11490
11491 typedef struct _PORT_VIEW
11492 {
11493 ULONG Length;
11494 LPC_HANDLE SectionHandle;
11495 ULONG SectionOffset;
11496 LPC_SIZE_T ViewSize;
11497 LPC_PVOID ViewBase;
11498 LPC_PVOID ViewRemoteBase;
11499 } PORT_VIEW, *PPORT_VIEW;
11500
11501 typedef struct _REMOTE_PORT_VIEW
11502 {
11503 ULONG Length;
11504 LPC_SIZE_T ViewSize;
11505 LPC_PVOID ViewBase;
11506 } REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW;
11507
11508 typedef struct _VAD_HEADER {
11509 PVOID StartVPN;
11510 PVOID EndVPN;
11511 struct _VAD_HEADER* ParentLink;
11512 struct _VAD_HEADER* LeftLink;
11513 struct _VAD_HEADER* RightLink;
11514 ULONG Flags; /* LSB = CommitCharge */
11515 PVOID ControlArea;
11516 PVOID FirstProtoPte;
11517 PVOID LastPTE;
11518 ULONG Unknown;
11519 LIST_ENTRY Secured;
11520 } VAD_HEADER, *PVAD_HEADER;
11521
11522 NTKERNELAPI
11523 LARGE_INTEGER
11524 NTAPI
11525 CcGetLsnForFileObject (
11526 _In_ PFILE_OBJECT FileObject,
11527 _Out_opt_ PLARGE_INTEGER OldestLsn
11528 );
11529
11530 NTKERNELAPI
11531 PVOID
11532 NTAPI
11533 FsRtlAllocatePool (
11534 _In_ POOL_TYPE PoolType,
11535 _In_ ULONG NumberOfBytes
11536 );
11537
11538 NTKERNELAPI
11539 PVOID
11540 NTAPI
11541 FsRtlAllocatePoolWithQuota (
11542 _In_ POOL_TYPE PoolType,
11543 _In_ ULONG NumberOfBytes
11544 );
11545
11546 NTKERNELAPI
11547 PVOID
11548 NTAPI
11549 FsRtlAllocatePoolWithQuotaTag (
11550 _In_ POOL_TYPE PoolType,
11551 _In_ ULONG NumberOfBytes,
11552 _In_ ULONG Tag
11553 );
11554
11555 NTKERNELAPI
11556 PVOID
11557 NTAPI
11558 FsRtlAllocatePoolWithTag (
11559 _In_ POOL_TYPE PoolType,
11560 _In_ ULONG NumberOfBytes,
11561 _In_ ULONG Tag
11562 );
11563
11564 NTKERNELAPI
11565 BOOLEAN
11566 NTAPI
11567 FsRtlMdlReadComplete (
11568 _In_ PFILE_OBJECT FileObject,
11569 _In_ PMDL MdlChain
11570 );
11571
11572 NTKERNELAPI
11573 BOOLEAN
11574 NTAPI
11575 FsRtlMdlWriteComplete (
11576 _In_ PFILE_OBJECT FileObject,
11577 _In_ PLARGE_INTEGER FileOffset,
11578 _In_ PMDL MdlChain
11579 );
11580
11581 NTKERNELAPI
11582 VOID
11583 NTAPI
11584 FsRtlNotifyChangeDirectory (
11585 _In_ PNOTIFY_SYNC NotifySync,
11586 _In_ PVOID FsContext,
11587 _In_ PSTRING FullDirectoryName,
11588 _In_ PLIST_ENTRY NotifyList,
11589 _In_ BOOLEAN WatchTree,
11590 _In_ ULONG CompletionFilter,
11591 _In_ PIRP NotifyIrp
11592 );
11593
11594 #if 1
11595 NTKERNELAPI
11596 NTSTATUS
11597 NTAPI
11598 ObCreateObject(
11599 _In_opt_ KPROCESSOR_MODE ObjectAttributesAccessMode,
11600 _In_ POBJECT_TYPE ObjectType,
11601 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes,
11602 _In_ KPROCESSOR_MODE AccessMode,
11603 _Inout_opt_ PVOID ParseContext,
11604 _In_ ULONG ObjectSize,
11605 _In_opt_ ULONG PagedPoolCharge,
11606 _In_opt_ ULONG NonPagedPoolCharge,
11607 _Out_ PVOID *Object
11608 );
11609
11610 NTKERNELAPI
11611 NTSTATUS
11612 NTAPI
11613 ObReferenceObjectByName (
11614 _In_ PUNICODE_STRING ObjectName,
11615 _In_ ULONG Attributes,
11616 _In_opt_ PACCESS_STATE PassedAccessState,
11617 _In_opt_ ACCESS_MASK DesiredAccess,
11618 _In_ POBJECT_TYPE ObjectType,
11619 _In_ KPROCESSOR_MODE AccessMode,
11620 _Inout_opt_ PVOID ParseContext,
11621 _Out_ PVOID *Object
11622 );
11623
11624 #define PsDereferenceImpersonationToken(T) \
11625 {if (ARGUMENT_PRESENT(T)) { \
11626 (ObDereferenceObject((T))); \
11627 } else { \
11628 ; \
11629 } \
11630 }
11631
11632 NTKERNELAPI
11633 NTSTATUS
11634 NTAPI
11635 PsLookupProcessThreadByCid (
11636 _In_ PCLIENT_ID Cid,
11637 _Out_opt_ PEPROCESS *Process,
11638 _Out_ PETHREAD *Thread
11639 );
11640
11641 NTSYSAPI
11642 NTSTATUS
11643 NTAPI
11644 RtlSetSaclSecurityDescriptor (
11645 _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor,
11646 _In_ BOOLEAN SaclPresent,
11647 _In_ PACL Sacl,
11648 _In_ BOOLEAN SaclDefaulted
11649 );
11650
11651 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
11652
11653 #endif
11654
11655 #pragma pack(pop)
11656
11657 #ifdef __cplusplus
11658 }
11659 #endif