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