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