4 * Windows NT Filesystem Driver Developer Kit
6 * This file is part of the ReactOS DDK package.
10 * Timo Kreuzer (timo.kreuzer@reactos.org)
12 * THIS SOFTWARE IS NOT COPYRIGHTED
14 * This source code is offered for use in the public domain. You may
15 * use, modify or distribute it freely.
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.
26 #define _NTIFS_INCLUDED_
45 #define FlagOn(_F,_SF) ((_F) & (_SF))
49 #define BooleanFlagOn(F,SF) ((BOOLEAN)(((F) & (SF)) != 0))
53 #define SetFlag(_F,_SF) ((_F) |= (_SF))
57 #define ClearFlag(_F,_SF) ((_F) &= ~(_SF))
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
;
64 /******************************************************************************
65 * Security Manager Types *
66 ******************************************************************************/
68 #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
69 #define SID_IDENTIFIER_AUTHORITY_DEFINED
70 typedef struct _SID_IDENTIFIER_AUTHORITY
{
72 } SID_IDENTIFIER_AUTHORITY
,*PSID_IDENTIFIER_AUTHORITY
,*LPSID_IDENTIFIER_AUTHORITY
;
79 UCHAR SubAuthorityCount
;
80 SID_IDENTIFIER_AUTHORITY IdentifierAuthority
;
82 [size_is(SubAuthorityCount
)] ULONG SubAuthority
[*];
84 ULONG SubAuthority
[ANYSIZE_ARRAY
];
89 #define SID_REVISION 1
90 #define SID_MAX_SUB_AUTHORITIES 15
91 #define SID_RECOMMENDED_SUB_AUTHORITIES 1
94 #define SECURITY_MAX_SID_SIZE (sizeof(SID) - sizeof(ULONG) + (SID_MAX_SUB_AUTHORITIES * sizeof(ULONG)))
97 typedef enum _SID_NAME_USE
{
102 SidTypeWellKnownGroup
,
103 SidTypeDeletedAccount
,
108 } SID_NAME_USE
, *PSID_NAME_USE
;
110 typedef struct _SID_AND_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
;
121 #define SID_HASH_SIZE 32
122 typedef ULONG_PTR SID_HASH_ENTRY
, *PSID_HASH_ENTRY
;
124 typedef struct _SID_AND_ATTRIBUTES_HASH
{
126 PSID_AND_ATTRIBUTES SidAttr
;
127 SID_HASH_ENTRY Hash
[SID_HASH_SIZE
];
128 } SID_AND_ATTRIBUTES_HASH
, *PSID_AND_ATTRIBUTES_HASH
;
130 /* Universal well-known SIDs */
132 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
135 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
138 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
141 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
144 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
146 #define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
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)
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)
159 /* NT well-known SIDs */
162 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
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)
189 #define SECURITY_BUILTIN_DOMAIN_RID (0x00000020L)
190 #define SECURITY_WRITE_RESTRICTED_CODE_RID (0x00000021L)
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)
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)
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)
222 #define SECURITY_MAX_BASE_RID (0x0000006FL)
224 #define SECURITY_MAX_ALWAYS_FILTERED (0x000003E7L)
225 #define SECURITY_MIN_NEVER_FILTERED (0x000003E8L)
227 #define SECURITY_OTHER_ORGANIZATION_RID (0x000003E8L)
229 #define SECURITY_WINDOWSMOBILE_ID_BASE_RID (0x00000070L)
231 /* Well-known domain relative sub-authority values (RIDs) */
233 #define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS (0x000001F2L)
235 #define FOREST_USER_RID_MAX (0x000001F3L)
237 /* Well-known users */
239 #define DOMAIN_USER_RID_ADMIN (0x000001F4L)
240 #define DOMAIN_USER_RID_GUEST (0x000001F5L)
241 #define DOMAIN_USER_RID_KRBTGT (0x000001F6L)
243 #define DOMAIN_USER_RID_MAX (0x000003E7L)
245 /* Well-known groups */
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)
258 /* Well-known aliases */
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)
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)
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)
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)
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)
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)
298 /* SECURITY_MANDATORY_MAXIMUM_USER_RID is the highest RID that
299 can be set by a usermode caller.*/
301 #define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
303 #define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
305 /* Allocate the System Luid. The first 1000 LUIDs are reserved.
306 Use #999 here (0x3e7 = 999) */
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}
314 typedef struct _ACE_HEADER
{
318 } ACE_HEADER
, *PACE_HEADER
;
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)
347 /* The following are the inherit flags that go into the AceFlags field
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)
357 #define SUCCESSFUL_ACCESS_ACE_FLAG (0x40)
358 #define FAILED_ACCESS_ACE_FLAG (0x80)
360 typedef struct _ACCESS_ALLOWED_ACE
{
364 } ACCESS_ALLOWED_ACE
, *PACCESS_ALLOWED_ACE
;
366 typedef struct _ACCESS_DENIED_ACE
{
370 } ACCESS_DENIED_ACE
, *PACCESS_DENIED_ACE
;
372 typedef struct _SYSTEM_AUDIT_ACE
{
376 } SYSTEM_AUDIT_ACE
, *PSYSTEM_AUDIT_ACE
;
378 typedef struct _SYSTEM_ALARM_ACE
{
382 } SYSTEM_ALARM_ACE
, *PSYSTEM_ALARM_ACE
;
384 typedef struct _SYSTEM_MANDATORY_LABEL_ACE
{
388 } SYSTEM_MANDATORY_LABEL_ACE
, *PSYSTEM_MANDATORY_LABEL_ACE
;
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)
397 #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
399 typedef USHORT SECURITY_DESCRIPTOR_CONTROL
, *PSECURITY_DESCRIPTOR_CONTROL
;
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
418 typedef struct _SECURITY_DESCRIPTOR_RELATIVE
{
421 SECURITY_DESCRIPTOR_CONTROL Control
;
426 } SECURITY_DESCRIPTOR_RELATIVE
, *PISECURITY_DESCRIPTOR_RELATIVE
;
428 typedef struct _SECURITY_DESCRIPTOR
{
431 SECURITY_DESCRIPTOR_CONTROL Control
;
436 } SECURITY_DESCRIPTOR
, *PISECURITY_DESCRIPTOR
;
438 typedef struct _OBJECT_TYPE_LIST
{
442 } OBJECT_TYPE_LIST
, *POBJECT_TYPE_LIST
;
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
449 typedef enum _AUDIT_EVENT_TYPE
{
450 AuditEventObjectAccess
,
451 AuditEventDirectoryServiceAccess
452 } AUDIT_EVENT_TYPE
, *PAUDIT_EVENT_TYPE
;
454 #define AUDIT_ALLOW_NO_PRIVILEGE 0x1
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"
461 #define ACCESS_REASON_TYPE_MASK 0xffff0000
462 #define ACCESS_REASON_DATA_MASK 0x0000ffff
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
;
480 typedef ULONG ACCESS_REASON
;
482 typedef struct _ACCESS_REASONS
{
483 ACCESS_REASON Data
[32];
484 } ACCESS_REASONS
, *PACCESS_REASONS
;
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
490 typedef struct _SE_SECURITY_DESCRIPTOR
{
493 PSECURITY_DESCRIPTOR SecurityDescriptor
;
494 } SE_SECURITY_DESCRIPTOR
, *PSE_SECURITY_DESCRIPTOR
;
496 typedef struct _SE_ACCESS_REQUEST
{
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
;
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)
517 #define TOKEN_ALL_ACCESS_P (STANDARD_RIGHTS_REQUIRED |\
518 TOKEN_ASSIGN_PRIMARY |\
522 TOKEN_QUERY_SOURCE |\
523 TOKEN_ADJUST_PRIVILEGES |\
524 TOKEN_ADJUST_GROUPS |\
525 TOKEN_ADJUST_DEFAULT)
527 #if ((defined(_WIN32_WINNT) && (_WIN32_WINNT > 0x0400)) || (!defined(_WIN32_WINNT)))
528 #define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P | TOKEN_ADJUST_SESSIONID)
530 #define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P)
533 #define TOKEN_READ (STANDARD_RIGHTS_READ | TOKEN_QUERY)
535 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\
536 TOKEN_ADJUST_PRIVILEGES |\
537 TOKEN_ADJUST_GROUPS |\
538 TOKEN_ADJUST_DEFAULT)
540 #define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
542 typedef enum _TOKEN_TYPE
{
545 } TOKEN_TYPE
, *PTOKEN_TYPE
;
547 typedef enum _TOKEN_INFORMATION_CLASS
{
556 TokenImpersonationLevel
,
560 TokenGroupsAndPrivileges
,
561 TokenSessionReference
,
568 TokenHasRestrictions
,
569 TokenAccessInformation
,
570 TokenVirtualizationAllowed
,
571 TokenVirtualizationEnabled
,
574 TokenMandatoryPolicy
,
577 } TOKEN_INFORMATION_CLASS
, *PTOKEN_INFORMATION_CLASS
;
579 typedef struct _TOKEN_USER
{
580 SID_AND_ATTRIBUTES User
;
581 } TOKEN_USER
, *PTOKEN_USER
;
583 typedef struct _TOKEN_GROUPS
{
586 [size_is(GroupCount
)] SID_AND_ATTRIBUTES Groups
[*];
588 SID_AND_ATTRIBUTES Groups
[ANYSIZE_ARRAY
];
590 } TOKEN_GROUPS
, *PTOKEN_GROUPS
, *LPTOKEN_GROUPS
;
592 typedef struct _TOKEN_PRIVILEGES
{
593 ULONG PrivilegeCount
;
594 LUID_AND_ATTRIBUTES Privileges
[ANYSIZE_ARRAY
];
595 } TOKEN_PRIVILEGES
, *PTOKEN_PRIVILEGES
, *LPTOKEN_PRIVILEGES
;
597 typedef struct _TOKEN_OWNER
{
599 } TOKEN_OWNER
, *PTOKEN_OWNER
;
601 typedef struct _TOKEN_PRIMARY_GROUP
{
603 } TOKEN_PRIMARY_GROUP
, *PTOKEN_PRIMARY_GROUP
;
605 typedef struct _TOKEN_DEFAULT_DACL
{
607 } TOKEN_DEFAULT_DACL
, *PTOKEN_DEFAULT_DACL
;
609 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES
{
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
;
622 typedef struct _TOKEN_LINKED_TOKEN
{
624 } TOKEN_LINKED_TOKEN
, *PTOKEN_LINKED_TOKEN
;
626 typedef struct _TOKEN_ELEVATION
{
627 ULONG TokenIsElevated
;
628 } TOKEN_ELEVATION
, *PTOKEN_ELEVATION
;
630 typedef struct _TOKEN_MANDATORY_LABEL
{
631 SID_AND_ATTRIBUTES Label
;
632 } TOKEN_MANDATORY_LABEL
, *PTOKEN_MANDATORY_LABEL
;
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
638 #define TOKEN_MANDATORY_POLICY_VALID_MASK (TOKEN_MANDATORY_POLICY_NO_WRITE_UP | \
639 TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN)
641 #define POLICY_AUDIT_SUBCATEGORY_COUNT (56)
643 typedef struct _TOKEN_AUDIT_POLICY
{
644 UCHAR PerUserPolicy
[((POLICY_AUDIT_SUBCATEGORY_COUNT
) >> 1) + 1];
645 } TOKEN_AUDIT_POLICY
, *PTOKEN_AUDIT_POLICY
;
647 #define TOKEN_SOURCE_LENGTH 8
649 typedef struct _TOKEN_SOURCE
{
650 CHAR SourceName
[TOKEN_SOURCE_LENGTH
];
651 LUID SourceIdentifier
;
652 } TOKEN_SOURCE
, *PTOKEN_SOURCE
;
654 typedef struct _TOKEN_STATISTICS
{
656 LUID AuthenticationId
;
657 LARGE_INTEGER ExpirationTime
;
658 TOKEN_TYPE TokenType
;
659 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
660 ULONG DynamicCharged
;
661 ULONG DynamicAvailable
;
663 ULONG PrivilegeCount
;
665 } TOKEN_STATISTICS
, *PTOKEN_STATISTICS
;
667 typedef struct _TOKEN_CONTROL
{
669 LUID AuthenticationId
;
671 TOKEN_SOURCE TokenSource
;
672 } TOKEN_CONTROL
, *PTOKEN_CONTROL
;
674 typedef struct _TOKEN_ORIGIN
{
675 LUID OriginatingLogonSession
;
676 } TOKEN_ORIGIN
, *PTOKEN_ORIGIN
;
678 typedef enum _MANDATORY_LEVEL
{
679 MandatoryLevelUntrusted
= 0,
681 MandatoryLevelMedium
,
683 MandatoryLevelSystem
,
684 MandatoryLevelSecureProcess
,
686 } MANDATORY_LEVEL
, *PMANDATORY_LEVEL
;
689 typedef struct _SE_ACCESS_REPLY
{
691 ULONG ResultListCount
;
692 PACCESS_MASK GrantedAccess
;
693 PNTSTATUS AccessStatus
;
694 PACCESS_REASONS AccessReason
;
695 PPRIVILEGE_SET
* Privileges
;
696 } SE_ACCESS_REPLY
, *PSE_ACCESS_REPLY
;
698 typedef enum _SE_AUDIT_OPERATION
{
699 AuditPrivilegeObject
,
700 AuditPrivilegeService
,
703 AuditOpenObjectWithTransaction
,
706 AuditOpenObjectForDelete
,
707 AuditOpenObjectForDeleteWithTransaction
,
710 AuditObjectReference
,
712 } SE_AUDIT_OPERATION
, *PSE_AUDIT_OPERATION
;
714 typedef struct _SE_AUDIT_INFO
{
716 AUDIT_EVENT_TYPE AuditType
;
717 SE_AUDIT_OPERATION AuditOperation
;
719 UNICODE_STRING SubsystemName
;
720 UNICODE_STRING ObjectTypeName
;
721 UNICODE_STRING ObjectName
;
725 BOOLEAN ObjectCreation
;
726 BOOLEAN GenerateOnClose
;
727 } SE_AUDIT_INFO
, *PSE_AUDIT_INFO
;
729 typedef struct _TOKEN_MANDATORY_POLICY
{
731 } TOKEN_MANDATORY_POLICY
, *PTOKEN_MANDATORY_POLICY
;
733 typedef struct _TOKEN_ACCESS_INFORMATION
{
734 PSID_AND_ATTRIBUTES_HASH SidHash
;
735 PSID_AND_ATTRIBUTES_HASH RestrictedSidHash
;
736 PTOKEN_PRIVILEGES Privileges
;
737 LUID AuthenticationId
;
738 TOKEN_TYPE TokenType
;
739 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
740 TOKEN_MANDATORY_POLICY MandatoryPolicy
;
742 } TOKEN_ACCESS_INFORMATION
, *PTOKEN_ACCESS_INFORMATION
;
744 #define TOKEN_HAS_TRAVERSE_PRIVILEGE 0x0001
745 #define TOKEN_HAS_BACKUP_PRIVILEGE 0x0002
746 #define TOKEN_HAS_RESTORE_PRIVILEGE 0x0004
747 #define TOKEN_WRITE_RESTRICTED 0x0008
748 #define TOKEN_IS_RESTRICTED 0x0010
749 #define TOKEN_SESSION_NOT_REFERENCED 0x0020
750 #define TOKEN_SANDBOX_INERT 0x0040
751 #define TOKEN_HAS_IMPERSONATE_PRIVILEGE 0x0080
752 #define SE_BACKUP_PRIVILEGES_CHECKED 0x0100
753 #define TOKEN_VIRTUALIZE_ALLOWED 0x0200
754 #define TOKEN_VIRTUALIZE_ENABLED 0x0400
755 #define TOKEN_IS_FILTERED 0x0800
756 #define TOKEN_UIACCESS 0x1000
757 #define TOKEN_NOT_LOW 0x2000
759 typedef struct _SE_EXPORTS
{
760 LUID SeCreateTokenPrivilege
;
761 LUID SeAssignPrimaryTokenPrivilege
;
762 LUID SeLockMemoryPrivilege
;
763 LUID SeIncreaseQuotaPrivilege
;
764 LUID SeUnsolicitedInputPrivilege
;
766 LUID SeSecurityPrivilege
;
767 LUID SeTakeOwnershipPrivilege
;
768 LUID SeLoadDriverPrivilege
;
769 LUID SeCreatePagefilePrivilege
;
770 LUID SeIncreaseBasePriorityPrivilege
;
771 LUID SeSystemProfilePrivilege
;
772 LUID SeSystemtimePrivilege
;
773 LUID SeProfileSingleProcessPrivilege
;
774 LUID SeCreatePermanentPrivilege
;
775 LUID SeBackupPrivilege
;
776 LUID SeRestorePrivilege
;
777 LUID SeShutdownPrivilege
;
778 LUID SeDebugPrivilege
;
779 LUID SeAuditPrivilege
;
780 LUID SeSystemEnvironmentPrivilege
;
781 LUID SeChangeNotifyPrivilege
;
782 LUID SeRemoteShutdownPrivilege
;
786 PSID SeCreatorOwnerSid
;
787 PSID SeCreatorGroupSid
;
788 PSID SeNtAuthoritySid
;
792 PSID SeInteractiveSid
;
793 PSID SeLocalSystemSid
;
794 PSID SeAliasAdminsSid
;
795 PSID SeAliasUsersSid
;
796 PSID SeAliasGuestsSid
;
797 PSID SeAliasPowerUsersSid
;
798 PSID SeAliasAccountOpsSid
;
799 PSID SeAliasSystemOpsSid
;
800 PSID SeAliasPrintOpsSid
;
801 PSID SeAliasBackupOpsSid
;
802 PSID SeAuthenticatedUsersSid
;
803 PSID SeRestrictedSid
;
804 PSID SeAnonymousLogonSid
;
805 LUID SeUndockPrivilege
;
806 LUID SeSyncAgentPrivilege
;
807 LUID SeEnableDelegationPrivilege
;
808 PSID SeLocalServiceSid
;
809 PSID SeNetworkServiceSid
;
810 LUID SeManageVolumePrivilege
;
811 LUID SeImpersonatePrivilege
;
812 LUID SeCreateGlobalPrivilege
;
813 LUID SeTrustedCredManAccessPrivilege
;
814 LUID SeRelabelPrivilege
;
815 LUID SeIncreaseWorkingSetPrivilege
;
816 LUID SeTimeZonePrivilege
;
817 LUID SeCreateSymbolicLinkPrivilege
;
819 PSID SeUntrustedMandatorySid
;
820 PSID SeLowMandatorySid
;
821 PSID SeMediumMandatorySid
;
822 PSID SeHighMandatorySid
;
823 PSID SeSystemMandatorySid
;
824 PSID SeOwnerRightsSid
;
825 } SE_EXPORTS
, *PSE_EXPORTS
;
828 (NTAPI
*PSE_LOGON_SESSION_TERMINATED_ROUTINE
)(
831 typedef struct _SECURITY_CLIENT_CONTEXT
{
832 SECURITY_QUALITY_OF_SERVICE SecurityQos
;
833 PACCESS_TOKEN ClientToken
;
834 BOOLEAN DirectlyAccessClientToken
;
835 BOOLEAN DirectAccessEffectiveOnly
;
836 BOOLEAN ServerIsRemote
;
837 TOKEN_CONTROL ClientTokenControl
;
838 } SECURITY_CLIENT_CONTEXT
, *PSECURITY_CLIENT_CONTEXT
;
840 /******************************************************************************
841 * Object Manager Types *
842 ******************************************************************************/
844 typedef enum _OBJECT_INFORMATION_CLASS
{
845 ObjectBasicInformation
= 0,
846 ObjectTypeInformation
= 2,
847 /* Not for public use */
848 ObjectNameInformation
= 1,
849 ObjectTypesInformation
= 3,
850 ObjectHandleFlagInformation
= 4,
851 ObjectSessionInformation
= 5,
853 } OBJECT_INFORMATION_CLASS
;
856 /******************************************************************************
857 * Runtime Library Types *
858 ******************************************************************************/
861 #define RTL_SYSTEM_VOLUME_INFORMATION_FOLDER L"System Volume Information"
863 _Function_class_(RTL_ALLOCATE_STRING_ROUTINE
)
864 _IRQL_requires_max_(PASSIVE_LEVEL
)
865 __drv_allocatesMem(Mem
)
867 (NTAPI
*PRTL_ALLOCATE_STRING_ROUTINE
)(
868 _In_ SIZE_T NumberOfBytes
);
870 #if _WIN32_WINNT >= 0x0600
871 _Function_class_(RTL_REALLOCATE_STRING_ROUTINE
)
872 _IRQL_requires_max_(PASSIVE_LEVEL
)
873 __drv_allocatesMem(Mem
)
875 (NTAPI
*PRTL_REALLOCATE_STRING_ROUTINE
)(
876 _In_ SIZE_T NumberOfBytes
,
881 (NTAPI
*PRTL_FREE_STRING_ROUTINE
)(
882 _In_
__drv_freesMem(Mem
) _Post_invalid_ PVOID Buffer
);
884 extern NTKERNELAPI
const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine
;
885 extern NTKERNELAPI
const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine
;
887 #if _WIN32_WINNT >= 0x0600
888 extern NTKERNELAPI
const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine
;
891 _Function_class_(RTL_HEAP_COMMIT_ROUTINE
)
894 (NTAPI
*PRTL_HEAP_COMMIT_ROUTINE
) (
896 _Inout_ PVOID
*CommitAddress
,
897 _Inout_ PSIZE_T CommitSize
);
899 typedef struct _RTL_HEAP_PARAMETERS
{
901 SIZE_T SegmentReserve
;
902 SIZE_T SegmentCommit
;
903 SIZE_T DeCommitFreeBlockThreshold
;
904 SIZE_T DeCommitTotalFreeThreshold
;
905 SIZE_T MaximumAllocationSize
;
906 SIZE_T VirtualMemoryThreshold
;
907 SIZE_T InitialCommit
;
908 SIZE_T InitialReserve
;
909 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine
;
911 } RTL_HEAP_PARAMETERS
, *PRTL_HEAP_PARAMETERS
;
913 #if (NTDDI_VERSION >= NTDDI_WIN2K)
915 typedef struct _GENERATE_NAME_CONTEXT
{
917 BOOLEAN CheckSumInserted
;
918 _Field_range_(<=, 8) UCHAR NameLength
;
920 _Field_range_(<=, 4) ULONG ExtensionLength
;
921 WCHAR ExtensionBuffer
[4];
922 ULONG LastIndexValue
;
923 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
925 typedef struct _PREFIX_TABLE_ENTRY
{
928 struct _PREFIX_TABLE_ENTRY
*NextPrefixTree
;
929 RTL_SPLAY_LINKS Links
;
931 } PREFIX_TABLE_ENTRY
, *PPREFIX_TABLE_ENTRY
;
933 typedef struct _PREFIX_TABLE
{
936 PPREFIX_TABLE_ENTRY NextPrefixTree
;
937 } PREFIX_TABLE
, *PPREFIX_TABLE
;
939 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
{
942 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
943 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
944 RTL_SPLAY_LINKS Links
;
945 PUNICODE_STRING Prefix
;
946 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
948 typedef struct _UNICODE_PREFIX_TABLE
{
951 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
952 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
953 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
955 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
957 #if (NTDDI_VERSION >= NTDDI_WINXP)
958 typedef struct _COMPRESSED_DATA_INFO
{
959 USHORT CompressionFormatAndEngine
;
960 UCHAR CompressionUnitShift
;
964 USHORT NumberOfChunks
;
965 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
966 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
968 /******************************************************************************
969 * Runtime Library Functions *
970 ******************************************************************************/
973 #if (NTDDI_VERSION >= NTDDI_WIN2K)
976 _Must_inspect_result_
978 _Post_writable_byte_size_(Size
)
983 _In_ HANDLE HeapHandle
,
984 _In_opt_ ULONG Flags
,
987 _Success_(return != 0)
992 _In_ PVOID HeapHandle
,
993 _In_opt_ ULONG Flags
,
994 _In_ _Post_invalid_ PVOID BaseAddress
);
1000 _Out_ PCONTEXT ContextRecord
);
1002 _Ret_range_(<, MAXLONG
)
1007 _Inout_ PULONG Seed
);
1009 _IRQL_requires_max_(APC_LEVEL
)
1010 _Success_(return != 0)
1011 _Must_inspect_result_
1015 RtlCreateUnicodeString(
1016 _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
))
1017 PUNICODE_STRING DestinationString
,
1018 _In_z_ PCWSTR SourceString
);
1020 _IRQL_requires_max_(PASSIVE_LEVEL
)
1021 _Must_inspect_result_
1026 _In_
const STRING
*String1
,
1027 _In_
const STRING
*String2
,
1028 _In_ BOOLEAN CaseInsensitive
);
1030 _IRQL_requires_max_(APC_LEVEL
)
1034 RtlAppendStringToString(
1035 _Inout_ PSTRING Destination
,
1036 _In_
const STRING
*Source
);
1038 _IRQL_requires_max_(PASSIVE_LEVEL
)
1039 _Must_inspect_result_
1043 RtlOemStringToUnicodeString(
1044 _When_(AllocateDestinationString
, _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
)))
1045 _When_(!AllocateDestinationString
, _Inout_
)
1046 PUNICODE_STRING DestinationString
,
1047 _In_ PCOEM_STRING SourceString
,
1048 _In_ BOOLEAN AllocateDestinationString
);
1050 _IRQL_requires_max_(PASSIVE_LEVEL
)
1051 _Must_inspect_result_
1055 RtlUnicodeStringToOemString(
1056 _When_(AllocateDestinationString
, _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
)))
1057 _When_(!AllocateDestinationString
, _Inout_
)
1058 POEM_STRING DestinationString
,
1059 _In_ PCUNICODE_STRING SourceString
,
1060 _In_ BOOLEAN AllocateDestinationString
);
1062 _IRQL_requires_max_(PASSIVE_LEVEL
)
1063 _Must_inspect_result_
1067 RtlUpcaseUnicodeStringToOemString(
1068 _When_(AllocateDestinationString
, _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
)))
1069 _When_(!AllocateDestinationString
, _Inout_
)
1070 POEM_STRING DestinationString
,
1071 _In_ PCUNICODE_STRING SourceString
,
1072 _In_ BOOLEAN AllocateDestinationString
);
1074 _IRQL_requires_max_(PASSIVE_LEVEL
)
1075 _Must_inspect_result_
1079 RtlOemStringToCountedUnicodeString(
1080 _When_(AllocateDestinationString
, _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
)))
1081 _When_(!AllocateDestinationString
, _Inout_
)
1082 PUNICODE_STRING DestinationString
,
1083 _In_ PCOEM_STRING SourceString
,
1084 _In_ BOOLEAN AllocateDestinationString
);
1086 _IRQL_requires_max_(PASSIVE_LEVEL
)
1087 _Must_inspect_result_
1091 RtlUnicodeStringToCountedOemString(
1092 _When_(AllocateDestinationString
, _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
)))
1093 _When_(!AllocateDestinationString
, _Inout_
)
1094 POEM_STRING DestinationString
,
1095 _In_ PCUNICODE_STRING SourceString
,
1096 _In_ BOOLEAN AllocateDestinationString
);
1098 _IRQL_requires_max_(PASSIVE_LEVEL
)
1099 _Must_inspect_result_
1103 RtlUpcaseUnicodeStringToCountedOemString(
1104 _When_(AllocateDestinationString
, _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
)))
1105 _When_(!AllocateDestinationString
, _Inout_
)
1106 POEM_STRING DestinationString
,
1107 _In_ PCUNICODE_STRING SourceString
,
1108 _In_ BOOLEAN AllocateDestinationString
);
1110 _IRQL_requires_max_(PASSIVE_LEVEL
)
1111 _When_(AllocateDestinationString
, _Must_inspect_result_
)
1115 RtlDowncaseUnicodeString(
1116 _When_(AllocateDestinationString
, _Out_
_At_(UniDest
->Buffer
, __drv_allocatesMem(Mem
)))
1117 _When_(!AllocateDestinationString
, _Inout_
)
1118 PUNICODE_STRING UniDest
,
1119 _In_ PCUNICODE_STRING UniSource
,
1120 _In_ BOOLEAN AllocateDestinationString
);
1122 _IRQL_requires_max_(PASSIVE_LEVEL
)
1127 _Inout_
_At_(OemString
->Buffer
, __drv_freesMem(Mem
)) POEM_STRING OemString
);
1129 _IRQL_requires_max_(PASSIVE_LEVEL
)
1133 RtlxUnicodeStringToOemSize(
1134 _In_ PCUNICODE_STRING UnicodeString
);
1136 _IRQL_requires_max_(PASSIVE_LEVEL
)
1140 RtlxOemStringToUnicodeSize(
1141 _In_ PCOEM_STRING OemString
);
1143 _IRQL_requires_max_(PASSIVE_LEVEL
)
1147 RtlMultiByteToUnicodeN(
1148 _Out_writes_bytes_to_(MaxBytesInUnicodeString
, *BytesInUnicodeString
) PWCH UnicodeString
,
1149 _In_ ULONG MaxBytesInUnicodeString
,
1150 _Out_opt_ PULONG BytesInUnicodeString
,
1151 _In_reads_bytes_(BytesInMultiByteString
) const CHAR
*MultiByteString
,
1152 _In_ ULONG BytesInMultiByteString
);
1154 _IRQL_requires_max_(PASSIVE_LEVEL
)
1158 RtlMultiByteToUnicodeSize(
1159 _Out_ PULONG BytesInUnicodeString
,
1160 _In_reads_bytes_(BytesInMultiByteString
) const CHAR
*MultiByteString
,
1161 _In_ ULONG BytesInMultiByteString
);
1163 _IRQL_requires_max_(PASSIVE_LEVEL
)
1167 RtlUnicodeToMultiByteSize(
1168 _Out_ PULONG BytesInMultiByteString
,
1169 _In_reads_bytes_(BytesInUnicodeString
) PCWCH UnicodeString
,
1170 _In_ ULONG BytesInUnicodeString
);
1172 _IRQL_requires_max_(PASSIVE_LEVEL
)
1176 RtlUnicodeToMultiByteN(
1177 _Out_writes_bytes_to_(MaxBytesInMultiByteString
, *BytesInMultiByteString
) PCHAR MultiByteString
,
1178 _In_ ULONG MaxBytesInMultiByteString
,
1179 _Out_opt_ PULONG BytesInMultiByteString
,
1180 _In_reads_bytes_(BytesInUnicodeString
) PCWCH UnicodeString
,
1181 _In_ ULONG BytesInUnicodeString
);
1183 _IRQL_requires_max_(PASSIVE_LEVEL
)
1187 RtlUpcaseUnicodeToMultiByteN(
1188 _Out_writes_bytes_to_(MaxBytesInMultiByteString
, *BytesInMultiByteString
) PCHAR MultiByteString
,
1189 _In_ ULONG MaxBytesInMultiByteString
,
1190 _Out_opt_ PULONG BytesInMultiByteString
,
1191 _In_reads_bytes_(BytesInUnicodeString
) PCWCH UnicodeString
,
1192 _In_ ULONG BytesInUnicodeString
);
1194 _IRQL_requires_max_(PASSIVE_LEVEL
)
1199 _Out_writes_bytes_to_(MaxBytesInUnicodeString
, *BytesInUnicodeString
) PWSTR UnicodeString
,
1200 _In_ ULONG MaxBytesInUnicodeString
,
1201 _Out_opt_ PULONG BytesInUnicodeString
,
1202 _In_reads_bytes_(BytesInOemString
) PCCH OemString
,
1203 _In_ ULONG BytesInOemString
);
1205 _IRQL_requires_max_(PASSIVE_LEVEL
)
1210 _Out_writes_bytes_to_(MaxBytesInOemString
, *BytesInOemString
) PCHAR OemString
,
1211 _In_ ULONG MaxBytesInOemString
,
1212 _Out_opt_ PULONG BytesInOemString
,
1213 _In_reads_bytes_(BytesInUnicodeString
) PCWCH UnicodeString
,
1214 _In_ ULONG BytesInUnicodeString
);
1216 _IRQL_requires_max_(PASSIVE_LEVEL
)
1220 RtlUpcaseUnicodeToOemN(
1221 _Out_writes_bytes_to_(MaxBytesInOemString
, *BytesInOemString
) PCHAR OemString
,
1222 _In_ ULONG MaxBytesInOemString
,
1223 _Out_opt_ PULONG BytesInOemString
,
1224 _In_reads_bytes_(BytesInUnicodeString
) PCWCH UnicodeString
,
1225 _In_ ULONG BytesInUnicodeString
);
1227 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1228 _IRQL_requires_max_(PASSIVE_LEVEL
)
1232 RtlGenerate8dot3Name(
1233 _In_ PCUNICODE_STRING Name
,
1234 _In_ BOOLEAN AllowExtendedCharacters
,
1235 _Inout_ PGENERATE_NAME_CONTEXT Context
,
1236 _Inout_ PUNICODE_STRING Name8dot3
);
1238 _IRQL_requires_max_(PASSIVE_LEVEL
)
1242 RtlGenerate8dot3Name(
1243 _In_ PCUNICODE_STRING Name
,
1244 _In_ BOOLEAN AllowExtendedCharacters
,
1245 _Inout_ PGENERATE_NAME_CONTEXT Context
,
1246 _Inout_ PUNICODE_STRING Name8dot3
);
1249 _IRQL_requires_max_(PASSIVE_LEVEL
)
1250 _Must_inspect_result_
1254 RtlIsNameLegalDOS8Dot3(
1255 _In_ PCUNICODE_STRING Name
,
1256 _Inout_opt_ POEM_STRING OemName
,
1257 _Out_opt_ PBOOLEAN NameContainsSpaces
);
1259 _IRQL_requires_max_(PASSIVE_LEVEL
)
1260 _Must_inspect_result_
1264 RtlIsValidOemCharacter(
1265 _Inout_ PWCHAR Char
);
1267 _IRQL_requires_max_(PASSIVE_LEVEL
)
1272 _Out_ PPREFIX_TABLE PrefixTable
);
1274 _IRQL_requires_max_(PASSIVE_LEVEL
)
1279 _In_ PPREFIX_TABLE PrefixTable
,
1280 _In_ __drv_aliasesMem PSTRING Prefix
,
1281 _Out_ PPREFIX_TABLE_ENTRY PrefixTableEntry
);
1283 _IRQL_requires_max_(PASSIVE_LEVEL
)
1288 _In_ PPREFIX_TABLE PrefixTable
,
1289 _In_ PPREFIX_TABLE_ENTRY PrefixTableEntry
);
1291 _IRQL_requires_max_(PASSIVE_LEVEL
)
1292 _Must_inspect_result_
1297 _In_ PPREFIX_TABLE PrefixTable
,
1298 _In_ PSTRING FullName
);
1300 _IRQL_requires_max_(PASSIVE_LEVEL
)
1304 RtlInitializeUnicodePrefix(
1305 _Out_ PUNICODE_PREFIX_TABLE PrefixTable
);
1307 _IRQL_requires_max_(PASSIVE_LEVEL
)
1311 RtlInsertUnicodePrefix(
1312 _In_ PUNICODE_PREFIX_TABLE PrefixTable
,
1313 _In_ __drv_aliasesMem PUNICODE_STRING Prefix
,
1314 _Out_ PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
);
1316 _IRQL_requires_max_(PASSIVE_LEVEL
)
1320 RtlRemoveUnicodePrefix(
1321 _In_ PUNICODE_PREFIX_TABLE PrefixTable
,
1322 _In_ PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
);
1324 _IRQL_requires_max_(PASSIVE_LEVEL
)
1325 _Must_inspect_result_
1327 PUNICODE_PREFIX_TABLE_ENTRY
1329 RtlFindUnicodePrefix(
1330 _In_ PUNICODE_PREFIX_TABLE PrefixTable
,
1331 _In_ PUNICODE_STRING FullName
,
1332 _In_ ULONG CaseInsensitiveIndex
);
1334 _IRQL_requires_max_(PASSIVE_LEVEL
)
1335 _Must_inspect_result_
1337 PUNICODE_PREFIX_TABLE_ENTRY
1339 RtlNextUnicodePrefix(
1340 _In_ PUNICODE_PREFIX_TABLE PrefixTable
,
1341 _In_ BOOLEAN Restart
);
1343 _Must_inspect_result_
1347 RtlCompareMemoryUlong(
1348 _In_reads_bytes_(Length
) PVOID Source
,
1350 _In_ ULONG Pattern
);
1352 _Success_(return != 0)
1356 RtlTimeToSecondsSince1980(
1357 _In_ PLARGE_INTEGER Time
,
1358 _Out_ PULONG ElapsedSeconds
);
1363 RtlSecondsSince1980ToTime(
1364 _In_ ULONG ElapsedSeconds
,
1365 _Out_ PLARGE_INTEGER Time
);
1367 _Success_(return != 0)
1368 _Must_inspect_result_
1372 RtlTimeToSecondsSince1970(
1373 _In_ PLARGE_INTEGER Time
,
1374 _Out_ PULONG ElapsedSeconds
);
1379 RtlSecondsSince1970ToTime(
1380 _In_ ULONG ElapsedSeconds
,
1381 _Out_ PLARGE_INTEGER Time
);
1383 _IRQL_requires_max_(APC_LEVEL
)
1384 _Must_inspect_result_
1391 _Must_inspect_result_
1399 _IRQL_requires_max_(APC_LEVEL
)
1400 _Must_inspect_result_
1408 _IRQL_requires_max_(APC_LEVEL
)
1412 RtlLengthRequiredSid(
1413 _In_ ULONG SubAuthorityCount
);
1419 _In_ _Post_invalid_ PSID Sid
);
1421 _Must_inspect_result_
1425 RtlAllocateAndInitializeSid(
1426 _In_ PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1427 _In_ UCHAR SubAuthorityCount
,
1428 _In_ ULONG SubAuthority0
,
1429 _In_ ULONG SubAuthority1
,
1430 _In_ ULONG SubAuthority2
,
1431 _In_ ULONG SubAuthority3
,
1432 _In_ ULONG SubAuthority4
,
1433 _In_ ULONG SubAuthority5
,
1434 _In_ ULONG SubAuthority6
,
1435 _In_ ULONG SubAuthority7
,
1436 _Outptr_ PSID
*Sid
);
1438 _IRQL_requires_max_(APC_LEVEL
)
1444 _In_ PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1445 _In_ UCHAR SubAuthorityCount
);
1452 _In_ ULONG SubAuthority
);
1454 _Post_satisfies_(return >= 8 && return <= SECURITY_MAX_SID_SIZE
)
1461 _IRQL_requires_max_(APC_LEVEL
)
1466 _In_ ULONG DestinationSidLength
,
1467 _Out_writes_bytes_(DestinationSidLength
) PSID DestinationSid
,
1468 _In_ PSID SourceSid
);
1470 _IRQL_requires_max_(APC_LEVEL
)
1474 RtlConvertSidToUnicodeString(
1475 _Inout_ PUNICODE_STRING UnicodeString
,
1477 _In_ BOOLEAN AllocateDestinationString
);
1479 _IRQL_requires_max_(APC_LEVEL
)
1484 _Out_ PLUID DestinationLuid
,
1485 _In_ PLUID SourceLuid
);
1487 _IRQL_requires_max_(APC_LEVEL
)
1492 _Out_writes_bytes_(AclLength
) PACL Acl
,
1493 _In_ ULONG AclLength
,
1494 _In_ ULONG AclRevision
);
1496 _IRQL_requires_max_(APC_LEVEL
)
1502 _In_ ULONG AceRevision
,
1503 _In_ ULONG StartingAceIndex
,
1504 _In_reads_bytes_(AceListLength
) PVOID AceList
,
1505 _In_ ULONG AceListLength
);
1507 _IRQL_requires_max_(APC_LEVEL
)
1513 _In_ ULONG AceIndex
);
1520 _In_ ULONG AceIndex
,
1521 _Outptr_ PVOID
*Ace
);
1523 _IRQL_requires_max_(APC_LEVEL
)
1527 RtlAddAccessAllowedAce(
1529 _In_ ULONG AceRevision
,
1530 _In_ ACCESS_MASK AccessMask
,
1533 _IRQL_requires_max_(APC_LEVEL
)
1537 RtlAddAccessAllowedAceEx(
1539 _In_ ULONG AceRevision
,
1540 _In_ ULONG AceFlags
,
1541 _In_ ACCESS_MASK AccessMask
,
1544 _IRQL_requires_max_(APC_LEVEL
)
1548 RtlCreateSecurityDescriptorRelative(
1549 _Out_ PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor
,
1550 _In_ ULONG Revision
);
1555 RtlGetDaclSecurityDescriptor(
1556 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
1557 _Out_ PBOOLEAN DaclPresent
,
1559 _Out_ PBOOLEAN DaclDefaulted
);
1561 _IRQL_requires_max_(APC_LEVEL
)
1565 RtlSetOwnerSecurityDescriptor(
1566 _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
1567 _In_opt_ PSID Owner
,
1568 _In_opt_ BOOLEAN OwnerDefaulted
);
1570 _IRQL_requires_max_(APC_LEVEL
)
1574 RtlGetOwnerSecurityDescriptor(
1575 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
1577 _Out_ PBOOLEAN OwnerDefaulted
);
1579 _IRQL_requires_max_(APC_LEVEL
)
1580 _When_(Status
< 0, _Out_range_(>, 0))
1581 _When_(Status
>= 0, _Out_range_(==, 0))
1585 RtlNtStatusToDosError(
1586 _In_ NTSTATUS Status
);
1588 _IRQL_requires_max_(PASSIVE_LEVEL
)
1592 RtlCustomCPToUnicodeN(
1593 _In_ PCPTABLEINFO CustomCP
,
1594 _Out_writes_bytes_to_(MaxBytesInUnicodeString
, *BytesInUnicodeString
) PWCH UnicodeString
,
1595 _In_ ULONG MaxBytesInUnicodeString
,
1596 _Out_opt_ PULONG BytesInUnicodeString
,
1597 _In_reads_bytes_(BytesInCustomCPString
) PCH CustomCPString
,
1598 _In_ ULONG BytesInCustomCPString
);
1600 _IRQL_requires_max_(PASSIVE_LEVEL
)
1604 RtlUnicodeToCustomCPN(
1605 _In_ PCPTABLEINFO CustomCP
,
1606 _Out_writes_bytes_to_(MaxBytesInCustomCPString
, *BytesInCustomCPString
) PCH CustomCPString
,
1607 _In_ ULONG MaxBytesInCustomCPString
,
1608 _Out_opt_ PULONG BytesInCustomCPString
,
1609 _In_reads_bytes_(BytesInUnicodeString
) PWCH UnicodeString
,
1610 _In_ ULONG BytesInUnicodeString
);
1612 _IRQL_requires_max_(PASSIVE_LEVEL
)
1616 RtlUpcaseUnicodeToCustomCPN(
1617 _In_ PCPTABLEINFO CustomCP
,
1618 _Out_writes_bytes_to_(MaxBytesInCustomCPString
, *BytesInCustomCPString
) PCH CustomCPString
,
1619 _In_ ULONG MaxBytesInCustomCPString
,
1620 _Out_opt_ PULONG BytesInCustomCPString
,
1621 _In_reads_bytes_(BytesInUnicodeString
) PWCH UnicodeString
,
1622 _In_ ULONG BytesInUnicodeString
);
1624 _IRQL_requires_max_(PASSIVE_LEVEL
)
1628 RtlInitCodePageTable(
1629 _In_ PUSHORT TableBase
,
1630 _Out_ PCPTABLEINFO CodePageTable
);
1633 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
1636 #if (NTDDI_VERSION >= NTDDI_WINXP)
1640 _Must_inspect_result_
1646 _In_opt_ PVOID HeapBase
,
1647 _In_opt_ SIZE_T ReserveSize
,
1648 _In_opt_ SIZE_T CommitSize
,
1649 _In_opt_ PVOID Lock
,
1650 _In_opt_ PRTL_HEAP_PARAMETERS Parameters
);
1656 _In_ _Post_invalid_ PVOID HeapHandle
);
1661 RtlCaptureStackBackTrace(
1662 _In_ ULONG FramesToSkip
,
1663 _In_ ULONG FramesToCapture
,
1664 _Out_writes_to_(FramesToCapture
, return) PVOID
*BackTrace
,
1665 _Out_opt_ PULONG BackTraceHash
);
1667 _Ret_range_(<, MAXLONG
)
1672 _Inout_ PULONG Seed
);
1674 _IRQL_requires_max_(DISPATCH_LEVEL
)
1678 RtlInitUnicodeStringEx(
1679 _Out_ PUNICODE_STRING DestinationString
,
1680 _In_opt_z_ __drv_aliasesMem PCWSTR SourceString
);
1682 _Must_inspect_result_
1686 RtlValidateUnicodeString(
1688 _In_ PCUNICODE_STRING String
);
1690 _IRQL_requires_max_(PASSIVE_LEVEL
)
1691 _Must_inspect_result_
1695 RtlDuplicateUnicodeString(
1697 _In_ PCUNICODE_STRING SourceString
,
1698 _Out_
_At_(DestinationString
->Buffer
, __drv_allocatesMem(Mem
)) PUNICODE_STRING DestinationString
);
1703 RtlGetCompressionWorkSpaceSize(
1704 _In_ USHORT CompressionFormatAndEngine
,
1705 _Out_ PULONG CompressBufferWorkSpaceSize
,
1706 _Out_ PULONG CompressFragmentWorkSpaceSize
);
1712 _In_ USHORT CompressionFormatAndEngine
,
1713 _In_reads_bytes_(UncompressedBufferSize
) PUCHAR UncompressedBuffer
,
1714 _In_ ULONG UncompressedBufferSize
,
1715 _Out_writes_bytes_to_(CompressedBufferSize
, *FinalCompressedSize
) PUCHAR CompressedBuffer
,
1716 _In_ ULONG CompressedBufferSize
,
1717 _In_ ULONG UncompressedChunkSize
,
1718 _Out_ PULONG FinalCompressedSize
,
1719 _In_ PVOID WorkSpace
);
1721 _IRQL_requires_max_(APC_LEVEL
)
1725 RtlDecompressBuffer(
1726 _In_ USHORT CompressionFormat
,
1727 _Out_writes_bytes_to_(UncompressedBufferSize
, *FinalUncompressedSize
) PUCHAR UncompressedBuffer
,
1728 _In_ ULONG UncompressedBufferSize
,
1729 _In_reads_bytes_(CompressedBufferSize
) PUCHAR CompressedBuffer
,
1730 _In_ ULONG CompressedBufferSize
,
1731 _Out_ PULONG FinalUncompressedSize
);
1733 _IRQL_requires_max_(APC_LEVEL
)
1737 RtlDecompressFragment(
1738 _In_ USHORT CompressionFormat
,
1739 _Out_writes_bytes_to_(UncompressedFragmentSize
, *FinalUncompressedSize
) PUCHAR UncompressedFragment
,
1740 _In_ ULONG UncompressedFragmentSize
,
1741 _In_reads_bytes_(CompressedBufferSize
) PUCHAR CompressedBuffer
,
1742 _In_ ULONG CompressedBufferSize
,
1743 _In_range_(<, CompressedBufferSize
) ULONG FragmentOffset
,
1744 _Out_ PULONG FinalUncompressedSize
,
1745 _In_ PVOID WorkSpace
);
1747 _IRQL_requires_max_(APC_LEVEL
)
1752 _In_ USHORT CompressionFormat
,
1753 _Inout_ PUCHAR
*CompressedBuffer
,
1754 _In_ PUCHAR EndOfCompressedBufferPlus1
,
1755 _Out_ PUCHAR
*ChunkBuffer
,
1756 _Out_ PULONG ChunkSize
);
1758 _IRQL_requires_max_(APC_LEVEL
)
1763 _In_ USHORT CompressionFormat
,
1764 _Inout_ PUCHAR
*CompressedBuffer
,
1765 _In_ PUCHAR EndOfCompressedBufferPlus1
,
1766 _Out_ PUCHAR
*ChunkBuffer
,
1767 _In_ ULONG ChunkSize
);
1769 _IRQL_requires_max_(APC_LEVEL
)
1773 RtlDecompressChunks(
1774 _Out_writes_bytes_(UncompressedBufferSize
) PUCHAR UncompressedBuffer
,
1775 _In_ ULONG UncompressedBufferSize
,
1776 _In_reads_bytes_(CompressedBufferSize
) PUCHAR CompressedBuffer
,
1777 _In_ ULONG CompressedBufferSize
,
1778 _In_reads_bytes_(CompressedTailSize
) PUCHAR CompressedTail
,
1779 _In_ ULONG CompressedTailSize
,
1780 _In_ PCOMPRESSED_DATA_INFO CompressedDataInfo
);
1782 _IRQL_requires_max_(APC_LEVEL
)
1787 _In_reads_bytes_(UncompressedBufferSize
) PUCHAR UncompressedBuffer
,
1788 _In_ ULONG UncompressedBufferSize
,
1789 _Out_writes_bytes_(CompressedBufferSize
) PUCHAR CompressedBuffer
,
1790 _In_range_(>=, (UncompressedBufferSize
- (UncompressedBufferSize
/ 16))) ULONG CompressedBufferSize
,
1791 _Inout_updates_bytes_(CompressedDataInfoLength
) PCOMPRESSED_DATA_INFO CompressedDataInfo
,
1792 _In_range_(>, sizeof(COMPRESSED_DATA_INFO
)) ULONG CompressedDataInfoLength
,
1793 _In_ PVOID WorkSpace
);
1795 _IRQL_requires_max_(APC_LEVEL
)
1797 PSID_IDENTIFIER_AUTHORITY
1799 RtlIdentifierAuthoritySid(
1805 RtlSubAuthorityCountSid(
1808 _When_(Status
< 0, _Out_range_(>, 0))
1809 _When_(Status
>= 0, _Out_range_(==, 0))
1813 RtlNtStatusToDosErrorNoTeb(
1814 _In_ NTSTATUS Status
);
1816 _IRQL_requires_max_(PASSIVE_LEVEL
)
1820 RtlCreateSystemVolumeInformationFolder(
1821 _In_ PCUNICODE_STRING VolumeRootPath
);
1823 #if defined(_M_AMD64)
1828 _Out_writes_bytes_all_(Length
) PVOID Destination
,
1832 PULONG Address
= (PULONG
)Destination
;
1833 if ((Length
/= 4) != 0) {
1834 if (((ULONG64
)Address
& 4) != 0) {
1836 if ((Length
-= 1) == 0) {
1841 __stosq((PULONG64
)(Address
), Pattern
| ((ULONG64
)Pattern
<< 32), Length
/ 2);
1842 if ((Length
& 1) != 0) Address
[Length
- 1] = Pattern
;
1847 #define RtlFillMemoryUlonglong(Destination, Length, Pattern) \
1848 __stosq((PULONG64)(Destination), Pattern, (Length) / 8)
1856 OUT PVOID Destination
,
1863 RtlFillMemoryUlonglong(
1864 _Out_writes_bytes_all_(Length
) PVOID Destination
,
1866 _In_ ULONGLONG Pattern
);
1868 #endif /* defined(_M_AMD64) */
1870 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
1872 #if (NTDDI_VERSION >= NTDDI_WS03)
1873 _IRQL_requires_max_(DISPATCH_LEVEL
)
1877 RtlInitAnsiStringEx(
1878 _Out_ PANSI_STRING DestinationString
,
1879 _In_opt_z_ __drv_aliasesMem PCSZ SourceString
);
1882 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
1884 _IRQL_requires_max_(APC_LEVEL
)
1888 RtlGetSaclSecurityDescriptor(
1889 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
1890 _Out_ PBOOLEAN SaclPresent
,
1892 _Out_ PBOOLEAN SaclDefaulted
);
1894 _IRQL_requires_max_(APC_LEVEL
)
1898 RtlSetGroupSecurityDescriptor(
1899 _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
1900 _In_opt_ PSID Group
,
1901 _In_opt_ BOOLEAN GroupDefaulted
);
1903 _IRQL_requires_max_(APC_LEVEL
)
1907 RtlGetGroupSecurityDescriptor(
1908 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
1910 _Out_ PBOOLEAN GroupDefaulted
);
1912 _IRQL_requires_max_(APC_LEVEL
)
1916 RtlAbsoluteToSelfRelativeSD(
1917 _In_ PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor
,
1918 _Out_writes_bytes_to_opt_(*BufferLength
, *BufferLength
) PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor
,
1919 _Inout_ PULONG BufferLength
);
1921 _IRQL_requires_max_(APC_LEVEL
)
1925 RtlSelfRelativeToAbsoluteSD(
1926 _In_ PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor
,
1927 _Out_writes_bytes_to_opt_(*AbsoluteSecurityDescriptorSize
, *AbsoluteSecurityDescriptorSize
) PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor
,
1928 _Inout_ PULONG AbsoluteSecurityDescriptorSize
,
1929 _Out_writes_bytes_to_opt_(*DaclSize
, *DaclSize
) PACL Dacl
,
1930 _Inout_ PULONG DaclSize
,
1931 _Out_writes_bytes_to_opt_(*SaclSize
, *SaclSize
) PACL Sacl
,
1932 _Inout_ PULONG SaclSize
,
1933 _Out_writes_bytes_to_opt_(*OwnerSize
, *OwnerSize
) PSID Owner
,
1934 _Inout_ PULONG OwnerSize
,
1935 _Out_writes_bytes_to_opt_(*PrimaryGroupSize
, *PrimaryGroupSize
) PSID PrimaryGroup
,
1936 _Inout_ PULONG PrimaryGroupSize
);
1938 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
1940 #if (NTDDI_VERSION >= NTDDI_VISTA)
1946 _In_ ULONG NormForm
,
1947 _In_ PCWSTR SourceString
,
1948 _In_ LONG SourceStringLength
,
1949 _Out_writes_to_(*DestinationStringLength
, *DestinationStringLength
) PWSTR DestinationString
,
1950 _Inout_ PLONG DestinationStringLength
);
1955 RtlIsNormalizedString(
1956 _In_ ULONG NormForm
,
1957 _In_ PCWSTR SourceString
,
1958 _In_ LONG SourceStringLength
,
1959 _Out_ PBOOLEAN Normalized
);
1966 _In_ PCWSTR SourceString
,
1967 _In_ LONG SourceStringLength
,
1968 _Out_writes_to_(*DestinationStringLength
, *DestinationStringLength
) PWSTR DestinationString
,
1969 _Inout_ PLONG DestinationStringLength
);
1976 IN PCWSTR SourceString
,
1977 IN LONG SourceStringLength
,
1978 OUT PWSTR DestinationString
,
1979 IN OUT PLONG DestinationStringLength
);
1984 RtlIdnToNameprepUnicode(
1986 _In_ PCWSTR SourceString
,
1987 _In_ LONG SourceStringLength
,
1988 _Out_writes_to_(*DestinationStringLength
, *DestinationStringLength
) PWSTR DestinationString
,
1989 _Inout_ PLONG DestinationStringLength
);
1994 RtlCreateServiceSid(
1995 _In_ PUNICODE_STRING ServiceName
,
1996 _Out_writes_bytes_opt_(*ServiceSidLength
) PSID ServiceSid
,
1997 _Inout_ PULONG ServiceSidLength
);
2002 RtlCompareAltitudes(
2003 _In_ PCUNICODE_STRING Altitude1
,
2004 _In_ PCUNICODE_STRING Altitude2
);
2007 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
2009 #if (NTDDI_VERSION >= NTDDI_WIN7)
2011 _IRQL_requires_max_(PASSIVE_LEVEL
)
2012 _Must_inspect_result_
2017 _Out_writes_bytes_to_(UTF8StringMaxByteCount
, *UTF8StringActualByteCount
) PCHAR UTF8StringDestination
,
2018 _In_ ULONG UTF8StringMaxByteCount
,
2019 _Out_ PULONG UTF8StringActualByteCount
,
2020 _In_reads_bytes_(UnicodeStringByteCount
) PCWCH UnicodeStringSource
,
2021 _In_ ULONG UnicodeStringByteCount
);
2023 _IRQL_requires_max_(PASSIVE_LEVEL
)
2024 _Must_inspect_result_
2029 _Out_writes_bytes_to_(UnicodeStringMaxByteCount
, *UnicodeStringActualByteCount
) PWSTR UnicodeStringDestination
,
2030 _In_ ULONG UnicodeStringMaxByteCount
,
2031 _Out_ PULONG UnicodeStringActualByteCount
,
2032 _In_reads_bytes_(UTF8StringByteCount
) PCCH UTF8StringSource
,
2033 _In_ ULONG UTF8StringByteCount
);
2035 _IRQL_requires_max_(APC_LEVEL
)
2040 _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
2043 _Out_ ULONG
*NumChanges
);
2048 RtlCreateVirtualAccountSid(
2049 _In_ PCUNICODE_STRING Name
,
2050 _In_ ULONG BaseSubAuthority
,
2051 _Out_writes_bytes_(*SidLength
) PSID Sid
,
2052 _Inout_ PULONG SidLength
);
2054 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
2057 #if defined(_AMD64_) || defined(_IA64_)
2061 #endif /* defined(_AMD64_) || defined(_IA64_) */
2065 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
2066 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
2068 #define RtlUnicodeStringToOemSize(STRING) (NLS_MB_OEM_CODE_PAGE_TAG ? \
2069 RtlxUnicodeStringToOemSize(STRING) : \
2070 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
2073 #define RtlOemStringToUnicodeSize(STRING) ( \
2074 NLS_MB_OEM_CODE_PAGE_TAG ? \
2075 RtlxOemStringToUnicodeSize(STRING) : \
2076 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
2079 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
2080 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
2083 #define RtlOffsetToPointer(B,O) ((PCHAR)(((PCHAR)(B)) + ((ULONG_PTR)(O))))
2084 #define RtlPointerToOffset(B,P) ((ULONG)(((PCHAR)(P)) - ((PCHAR)(B))))
2086 _IRQL_requires_max_(PASSIVE_LEVEL
)
2092 _In_opt_ HANDLE Handle
,
2093 _In_ OBJECT_INFORMATION_CLASS ObjectInformationClass
,
2094 _Out_writes_bytes_opt_(ObjectInformationLength
) PVOID ObjectInformation
,
2095 _In_ ULONG ObjectInformationLength
,
2096 _Out_opt_ PULONG ReturnLength
);
2098 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2100 _Must_inspect_result_
2106 _In_ HANDLE ThreadHandle
,
2107 _In_ ACCESS_MASK DesiredAccess
,
2108 _In_ BOOLEAN OpenAsSelf
,
2109 _Out_ PHANDLE TokenHandle
);
2111 _Must_inspect_result_
2117 _In_ HANDLE ProcessHandle
,
2118 _In_ ACCESS_MASK DesiredAccess
,
2119 _Out_ PHANDLE TokenHandle
);
2121 _When_(TokenInformationClass
== TokenAccessInformation
,
2122 _At_(TokenInformationLength
,
2123 _In_range_(>=, sizeof(TOKEN_ACCESS_INFORMATION
))))
2124 _Must_inspect_result_
2129 NtQueryInformationToken(
2130 _In_ HANDLE TokenHandle
,
2131 _In_ TOKEN_INFORMATION_CLASS TokenInformationClass
,
2132 _Out_writes_bytes_to_opt_(TokenInformationLength
, *ReturnLength
) PVOID TokenInformation
,
2133 _In_ ULONG TokenInformationLength
,
2134 _Out_ PULONG ReturnLength
);
2136 _Must_inspect_result_
2141 NtAdjustPrivilegesToken(
2142 _In_ HANDLE TokenHandle
,
2143 _In_ BOOLEAN DisableAllPrivileges
,
2144 _In_opt_ PTOKEN_PRIVILEGES NewState
,
2145 _In_ ULONG BufferLength
,
2146 _Out_writes_bytes_to_opt_(BufferLength
, *ReturnLength
) PTOKEN_PRIVILEGES PreviousState
,
2147 _When_(PreviousState
!= NULL
, _Out_
) PULONG ReturnLength
);
2154 _Out_ PHANDLE FileHandle
,
2155 _In_ ACCESS_MASK DesiredAccess
,
2156 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
2157 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
2158 _In_opt_ PLARGE_INTEGER AllocationSize
,
2159 _In_ ULONG FileAttributes
,
2160 _In_ ULONG ShareAccess
,
2161 _In_ ULONG CreateDisposition
,
2162 _In_ ULONG CreateOptions
,
2163 _In_reads_bytes_opt_(EaLength
) PVOID EaBuffer
,
2164 _In_ ULONG EaLength
);
2170 NtDeviceIoControlFile(
2171 _In_ HANDLE FileHandle
,
2172 _In_opt_ HANDLE Event
,
2173 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
2174 _In_opt_ PVOID ApcContext
,
2175 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
2176 _In_ ULONG IoControlCode
,
2177 _In_reads_bytes_opt_(InputBufferLength
) PVOID InputBuffer
,
2178 _In_ ULONG InputBufferLength
,
2179 _Out_writes_bytes_opt_(OutputBufferLength
) PVOID OutputBuffer
,
2180 _In_ ULONG OutputBufferLength
);
2187 _In_ HANDLE FileHandle
,
2188 _In_opt_ HANDLE Event
,
2189 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
2190 _In_opt_ PVOID ApcContext
,
2191 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
2192 _In_ ULONG FsControlCode
,
2193 _In_reads_bytes_opt_(InputBufferLength
) PVOID InputBuffer
,
2194 _In_ ULONG InputBufferLength
,
2195 _Out_writes_bytes_opt_(OutputBufferLength
) PVOID OutputBuffer
,
2196 _In_ ULONG OutputBufferLength
);
2203 _In_ HANDLE FileHandle
,
2204 _In_opt_ HANDLE Event
,
2205 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
2206 _In_opt_ PVOID ApcContext
,
2207 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
2208 _In_ PLARGE_INTEGER ByteOffset
,
2209 _In_ PLARGE_INTEGER Length
,
2211 _In_ BOOLEAN FailImmediately
,
2212 _In_ BOOLEAN ExclusiveLock
);
2219 _Out_ PHANDLE FileHandle
,
2220 _In_ ACCESS_MASK DesiredAccess
,
2221 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
2222 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
2223 _In_ ULONG ShareAccess
,
2224 _In_ ULONG OpenOptions
);
2230 NtQueryDirectoryFile(
2231 _In_ HANDLE FileHandle
,
2232 _In_opt_ HANDLE Event
,
2233 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
2234 _In_opt_ PVOID ApcContext
,
2235 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
2236 _Out_writes_bytes_(Length
) PVOID FileInformation
,
2238 _In_ FILE_INFORMATION_CLASS FileInformationClass
,
2239 _In_ BOOLEAN ReturnSingleEntry
,
2240 _In_opt_ PUNICODE_STRING FileName
,
2241 _In_ BOOLEAN RestartScan
);
2247 NtQueryInformationFile(
2248 _In_ HANDLE FileHandle
,
2249 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
2250 _Out_writes_bytes_(Length
) PVOID FileInformation
,
2252 _In_ FILE_INFORMATION_CLASS FileInformationClass
);
2258 NtQueryQuotaInformationFile(
2259 _In_ HANDLE FileHandle
,
2260 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
2261 _Out_writes_bytes_(Length
) PVOID Buffer
,
2263 _In_ BOOLEAN ReturnSingleEntry
,
2264 _In_reads_bytes_opt_(SidListLength
) PVOID SidList
,
2265 _In_ ULONG SidListLength
,
2266 _In_reads_bytes_opt_((8 + (4 * ((SID
*)StartSid
)->SubAuthorityCount
))) PSID StartSid
,
2267 _In_ BOOLEAN RestartScan
);
2273 NtQueryVolumeInformationFile(
2274 _In_ HANDLE FileHandle
,
2275 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
2276 _Out_writes_bytes_(Length
) PVOID FsInformation
,
2278 _In_ FS_INFORMATION_CLASS FsInformationClass
);
2285 _In_ HANDLE FileHandle
,
2286 _In_opt_ HANDLE Event
,
2287 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
2288 _In_opt_ PVOID ApcContext
,
2289 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
2290 _Out_writes_bytes_(Length
) PVOID Buffer
,
2292 _In_opt_ PLARGE_INTEGER ByteOffset
,
2293 _In_opt_ PULONG Key
);
2299 NtSetInformationFile(
2300 _In_ HANDLE FileHandle
,
2301 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
2302 _In_reads_bytes_(Length
) PVOID FileInformation
,
2304 _In_ FILE_INFORMATION_CLASS FileInformationClass
);
2310 NtSetQuotaInformationFile(
2311 _In_ HANDLE FileHandle
,
2312 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
2313 _In_reads_bytes_(Length
) PVOID Buffer
,
2320 NtSetVolumeInformationFile(
2321 _In_ HANDLE FileHandle
,
2322 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
2323 _In_reads_bytes_(Length
) PVOID FsInformation
,
2325 _In_ FS_INFORMATION_CLASS FsInformationClass
);
2332 _In_ HANDLE FileHandle
,
2333 _In_opt_ HANDLE Event
,
2334 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
2335 _In_opt_ PVOID ApcContext
,
2336 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
2337 _In_reads_bytes_(Length
) PVOID Buffer
,
2339 _In_opt_ PLARGE_INTEGER ByteOffset
,
2340 _In_opt_ PULONG Key
);
2347 _In_ HANDLE FileHandle
,
2348 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
2349 _In_ PLARGE_INTEGER ByteOffset
,
2350 _In_ PLARGE_INTEGER Length
,
2353 _IRQL_requires_max_(PASSIVE_LEVEL
)
2358 NtSetSecurityObject(
2360 _In_ SECURITY_INFORMATION SecurityInformation
,
2361 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
2363 _IRQL_requires_max_(PASSIVE_LEVEL
)
2368 NtQuerySecurityObject(
2370 _In_ SECURITY_INFORMATION SecurityInformation
,
2371 _Out_writes_bytes_opt_(Length
) PSECURITY_DESCRIPTOR SecurityDescriptor
,
2373 _Out_ PULONG LengthNeeded
);
2375 _IRQL_requires_max_(PASSIVE_LEVEL
)
2381 _In_ HANDLE Handle
);
2385 #if (NTDDI_VERSION >= NTDDI_WINXP)
2387 _Must_inspect_result_
2392 NtOpenThreadTokenEx(
2393 _In_ HANDLE ThreadHandle
,
2394 _In_ ACCESS_MASK DesiredAccess
,
2395 _In_ BOOLEAN OpenAsSelf
,
2396 _In_ ULONG HandleAttributes
,
2397 _Out_ PHANDLE TokenHandle
);
2399 _Must_inspect_result_
2404 NtOpenProcessTokenEx(
2405 _In_ HANDLE ProcessHandle
,
2406 _In_ ACCESS_MASK DesiredAccess
,
2407 _In_ ULONG HandleAttributes
,
2408 _Out_ PHANDLE TokenHandle
);
2410 _Must_inspect_result_
2414 NtOpenJobObjectToken(
2415 _In_ HANDLE JobHandle
,
2416 _In_ ACCESS_MASK DesiredAccess
,
2417 _Out_ PHANDLE TokenHandle
);
2419 _Must_inspect_result_
2425 _In_ HANDLE ExistingTokenHandle
,
2426 _In_ ACCESS_MASK DesiredAccess
,
2427 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
2428 _In_ BOOLEAN EffectiveOnly
,
2429 _In_ TOKEN_TYPE TokenType
,
2430 _Out_ PHANDLE NewTokenHandle
);
2432 _Must_inspect_result_
2438 _In_ HANDLE ExistingTokenHandle
,
2440 _In_opt_ PTOKEN_GROUPS SidsToDisable
,
2441 _In_opt_ PTOKEN_PRIVILEGES PrivilegesToDelete
,
2442 _In_opt_ PTOKEN_GROUPS RestrictedSids
,
2443 _Out_ PHANDLE NewTokenHandle
);
2445 _Must_inspect_result_
2450 NtImpersonateAnonymousToken(
2451 _In_ HANDLE ThreadHandle
);
2453 _Must_inspect_result_
2458 NtSetInformationToken(
2459 _In_ HANDLE TokenHandle
,
2460 _In_ TOKEN_INFORMATION_CLASS TokenInformationClass
,
2461 _In_reads_bytes_(TokenInformationLength
) PVOID TokenInformation
,
2462 _In_ ULONG TokenInformationLength
);
2464 _Must_inspect_result_
2469 NtAdjustGroupsToken(
2470 _In_ HANDLE TokenHandle
,
2471 _In_ BOOLEAN ResetToDefault
,
2472 _In_opt_ PTOKEN_GROUPS NewState
,
2473 _In_opt_ ULONG BufferLength
,
2474 _Out_writes_bytes_to_opt_(BufferLength
, *ReturnLength
) PTOKEN_GROUPS PreviousState
,
2475 _Out_ PULONG ReturnLength
);
2477 _Must_inspect_result_
2483 _In_ HANDLE ClientToken
,
2484 _Inout_ PPRIVILEGE_SET RequiredPrivileges
,
2485 _Out_ PBOOLEAN Result
);
2487 _Must_inspect_result_
2492 NtAccessCheckAndAuditAlarm(
2493 _In_ PUNICODE_STRING SubsystemName
,
2494 _In_opt_ PVOID HandleId
,
2495 _In_ PUNICODE_STRING ObjectTypeName
,
2496 _In_ PUNICODE_STRING ObjectName
,
2497 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
2498 _In_ ACCESS_MASK DesiredAccess
,
2499 _In_ PGENERIC_MAPPING GenericMapping
,
2500 _In_ BOOLEAN ObjectCreation
,
2501 _Out_ PACCESS_MASK GrantedAccess
,
2502 _Out_ PNTSTATUS AccessStatus
,
2503 _Out_ PBOOLEAN GenerateOnClose
);
2505 _Must_inspect_result_
2510 NtAccessCheckByTypeAndAuditAlarm(
2511 _In_ PUNICODE_STRING SubsystemName
,
2512 _In_opt_ PVOID HandleId
,
2513 _In_ PUNICODE_STRING ObjectTypeName
,
2514 _In_ PUNICODE_STRING ObjectName
,
2515 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
2516 _In_opt_ PSID PrincipalSelfSid
,
2517 _In_ ACCESS_MASK DesiredAccess
,
2518 _In_ AUDIT_EVENT_TYPE AuditType
,
2520 _In_reads_opt_(ObjectTypeLength
) POBJECT_TYPE_LIST ObjectTypeList
,
2521 _In_ ULONG ObjectTypeLength
,
2522 _In_ PGENERIC_MAPPING GenericMapping
,
2523 _In_ BOOLEAN ObjectCreation
,
2524 _Out_ PACCESS_MASK GrantedAccess
,
2525 _Out_ PNTSTATUS AccessStatus
,
2526 _Out_ PBOOLEAN GenerateOnClose
);
2528 _Must_inspect_result_
2533 NtAccessCheckByTypeResultListAndAuditAlarm(
2534 _In_ PUNICODE_STRING SubsystemName
,
2535 _In_opt_ PVOID HandleId
,
2536 _In_ PUNICODE_STRING ObjectTypeName
,
2537 _In_ PUNICODE_STRING ObjectName
,
2538 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
2539 _In_opt_ PSID PrincipalSelfSid
,
2540 _In_ ACCESS_MASK DesiredAccess
,
2541 _In_ AUDIT_EVENT_TYPE AuditType
,
2543 _In_reads_opt_(ObjectTypeListLength
) POBJECT_TYPE_LIST ObjectTypeList
,
2544 _In_ ULONG ObjectTypeListLength
,
2545 _In_ PGENERIC_MAPPING GenericMapping
,
2546 _In_ BOOLEAN ObjectCreation
,
2547 _Out_writes_(ObjectTypeListLength
) PACCESS_MASK GrantedAccess
,
2548 _Out_writes_(ObjectTypeListLength
) PNTSTATUS AccessStatus
,
2549 _Out_ PBOOLEAN GenerateOnClose
);
2551 _Must_inspect_result_
2556 NtAccessCheckByTypeResultListAndAuditAlarmByHandle(
2557 _In_ PUNICODE_STRING SubsystemName
,
2558 _In_opt_ PVOID HandleId
,
2559 _In_ HANDLE ClientToken
,
2560 _In_ PUNICODE_STRING ObjectTypeName
,
2561 _In_ PUNICODE_STRING ObjectName
,
2562 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
2563 _In_opt_ PSID PrincipalSelfSid
,
2564 _In_ ACCESS_MASK DesiredAccess
,
2565 _In_ AUDIT_EVENT_TYPE AuditType
,
2567 _In_reads_opt_(ObjectTypeListLength
) POBJECT_TYPE_LIST ObjectTypeList
,
2568 _In_ ULONG ObjectTypeListLength
,
2569 _In_ PGENERIC_MAPPING GenericMapping
,
2570 _In_ BOOLEAN ObjectCreation
,
2571 _Out_writes_(ObjectTypeListLength
) PACCESS_MASK GrantedAccess
,
2572 _Out_writes_(ObjectTypeListLength
) PNTSTATUS AccessStatus
,
2573 _Out_ PBOOLEAN GenerateOnClose
);
2579 NtOpenObjectAuditAlarm(
2580 _In_ PUNICODE_STRING SubsystemName
,
2581 _In_opt_ PVOID HandleId
,
2582 _In_ PUNICODE_STRING ObjectTypeName
,
2583 _In_ PUNICODE_STRING ObjectName
,
2584 _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
2585 _In_ HANDLE ClientToken
,
2586 _In_ ACCESS_MASK DesiredAccess
,
2587 _In_ ACCESS_MASK GrantedAccess
,
2588 _In_opt_ PPRIVILEGE_SET Privileges
,
2589 _In_ BOOLEAN ObjectCreation
,
2590 _In_ BOOLEAN AccessGranted
,
2591 _Out_ PBOOLEAN GenerateOnClose
);
2597 NtPrivilegeObjectAuditAlarm(
2598 _In_ PUNICODE_STRING SubsystemName
,
2599 _In_opt_ PVOID HandleId
,
2600 _In_ HANDLE ClientToken
,
2601 _In_ ACCESS_MASK DesiredAccess
,
2602 _In_ PPRIVILEGE_SET Privileges
,
2603 _In_ BOOLEAN AccessGranted
);
2609 NtCloseObjectAuditAlarm(
2610 _In_ PUNICODE_STRING SubsystemName
,
2611 _In_opt_ PVOID HandleId
,
2612 _In_ BOOLEAN GenerateOnClose
);
2618 NtDeleteObjectAuditAlarm(
2619 _In_ PUNICODE_STRING SubsystemName
,
2620 _In_opt_ PVOID HandleId
,
2621 _In_ BOOLEAN GenerateOnClose
);
2627 NtPrivilegedServiceAuditAlarm(
2628 _In_ PUNICODE_STRING SubsystemName
,
2629 _In_ PUNICODE_STRING ServiceName
,
2630 _In_ HANDLE ClientToken
,
2631 _In_ PPRIVILEGE_SET Privileges
,
2632 _In_ BOOLEAN AccessGranted
);
2638 NtSetInformationThread(
2639 _In_ HANDLE ThreadHandle
,
2640 _In_ THREADINFOCLASS ThreadInformationClass
,
2641 _In_reads_bytes_(ThreadInformationLength
) PVOID ThreadInformation
,
2642 _In_ ULONG ThreadInformationLength
);
2644 _Must_inspect_result_
2650 _Out_ PHANDLE SectionHandle
,
2651 _In_ ACCESS_MASK DesiredAccess
,
2652 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
2653 _In_opt_ PLARGE_INTEGER MaximumSize
,
2654 _In_ ULONG SectionPageProtection
,
2655 _In_ ULONG AllocationAttributes
,
2656 _In_opt_ HANDLE FileHandle
);
2660 #define COMPRESSION_FORMAT_NONE (0x0000)
2661 #define COMPRESSION_FORMAT_DEFAULT (0x0001)
2662 #define COMPRESSION_FORMAT_LZNT1 (0x0002)
2663 #define COMPRESSION_ENGINE_STANDARD (0x0000)
2664 #define COMPRESSION_ENGINE_MAXIMUM (0x0100)
2665 #define COMPRESSION_ENGINE_HIBER (0x0200)
2667 #define MAX_UNICODE_STACK_BUFFER_LENGTH 256
2669 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
2671 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
2672 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
2674 typedef ULONG LSA_OPERATIONAL_MODE
, *PLSA_OPERATIONAL_MODE
;
2676 typedef enum _SECURITY_LOGON_TYPE
{
2677 UndefinedLogonType
= 0,
2686 #if (_WIN32_WINNT >= 0x0501)
2690 #if (_WIN32_WINNT >= 0x0502)
2691 CachedRemoteInteractive
,
2694 } SECURITY_LOGON_TYPE
, *PSECURITY_LOGON_TYPE
;
2696 #ifndef _NTLSA_AUDIT_
2697 #define _NTLSA_AUDIT_
2699 #ifndef GUID_DEFINED
2700 #include <guiddef.h>
2703 #endif /* _NTLSA_AUDIT_ */
2705 _IRQL_requires_same_
2706 _IRQL_requires_max_(PASSIVE_LEVEL
)
2709 LsaRegisterLogonProcess(
2710 _In_ PLSA_STRING LogonProcessName
,
2711 _Out_ PHANDLE LsaHandle
,
2712 _Out_ PLSA_OPERATIONAL_MODE SecurityMode
);
2714 _IRQL_requires_same_
2715 _IRQL_requires_max_(PASSIVE_LEVEL
)
2719 _In_ HANDLE LsaHandle
,
2720 _In_ PLSA_STRING OriginName
,
2721 _In_ SECURITY_LOGON_TYPE LogonType
,
2722 _In_ ULONG AuthenticationPackage
,
2723 _In_reads_bytes_(AuthenticationInformationLength
) PVOID AuthenticationInformation
,
2724 _In_ ULONG AuthenticationInformationLength
,
2725 _In_opt_ PTOKEN_GROUPS LocalGroups
,
2726 _In_ PTOKEN_SOURCE SourceContext
,
2727 _Out_ PVOID
*ProfileBuffer
,
2728 _Out_ PULONG ProfileBufferLength
,
2729 _Inout_ PLUID LogonId
,
2730 _Out_ PHANDLE Token
,
2731 _Out_ PQUOTA_LIMITS Quotas
,
2732 _Out_ PNTSTATUS SubStatus
);
2734 _IRQL_requires_same_
2737 LsaFreeReturnBuffer(
2744 #define MSV1_0_PACKAGE_NAME "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
2745 #define MSV1_0_PACKAGE_NAMEW L"MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
2746 #define MSV1_0_PACKAGE_NAMEW_LENGTH sizeof(MSV1_0_PACKAGE_NAMEW) - sizeof(WCHAR)
2748 #define MSV1_0_SUBAUTHENTICATION_KEY "SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1_0"
2749 #define MSV1_0_SUBAUTHENTICATION_VALUE "Auth"
2751 #define MSV1_0_CHALLENGE_LENGTH 8
2752 #define MSV1_0_USER_SESSION_KEY_LENGTH 16
2753 #define MSV1_0_LANMAN_SESSION_KEY_LENGTH 8
2755 #define MSV1_0_CLEARTEXT_PASSWORD_ALLOWED 0x02
2756 #define MSV1_0_UPDATE_LOGON_STATISTICS 0x04
2757 #define MSV1_0_RETURN_USER_PARAMETERS 0x08
2758 #define MSV1_0_DONT_TRY_GUEST_ACCOUNT 0x10
2759 #define MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT 0x20
2760 #define MSV1_0_RETURN_PASSWORD_EXPIRY 0x40
2761 #define MSV1_0_USE_CLIENT_CHALLENGE 0x80
2762 #define MSV1_0_TRY_GUEST_ACCOUNT_ONLY 0x100
2763 #define MSV1_0_RETURN_PROFILE_PATH 0x200
2764 #define MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY 0x400
2765 #define MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT 0x800
2767 #define MSV1_0_DISABLE_PERSONAL_FALLBACK 0x00001000
2768 #define MSV1_0_ALLOW_FORCE_GUEST 0x00002000
2770 #if (_WIN32_WINNT >= 0x0502)
2771 #define MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED 0x00004000
2772 #define MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY 0x00008000
2775 #define MSV1_0_SUBAUTHENTICATION_DLL_EX 0x00100000
2776 #define MSV1_0_ALLOW_MSVCHAPV2 0x00010000
2778 #if (_WIN32_WINNT >= 0x0600)
2779 #define MSV1_0_S4U2SELF 0x00020000
2780 #define MSV1_0_CHECK_LOGONHOURS_FOR_S4U 0x00040000
2783 #define MSV1_0_SUBAUTHENTICATION_DLL 0xFF000000
2784 #define MSV1_0_SUBAUTHENTICATION_DLL_SHIFT 24
2785 #define MSV1_0_MNS_LOGON 0x01000000
2787 #define MSV1_0_SUBAUTHENTICATION_DLL_RAS 2
2788 #define MSV1_0_SUBAUTHENTICATION_DLL_IIS 132
2790 #define LOGON_GUEST 0x01
2791 #define LOGON_NOENCRYPTION 0x02
2792 #define LOGON_CACHED_ACCOUNT 0x04
2793 #define LOGON_USED_LM_PASSWORD 0x08
2794 #define LOGON_EXTRA_SIDS 0x20
2795 #define LOGON_SUBAUTH_SESSION_KEY 0x40
2796 #define LOGON_SERVER_TRUST_ACCOUNT 0x80
2797 #define LOGON_NTLMV2_ENABLED 0x100
2798 #define LOGON_RESOURCE_GROUPS 0x200
2799 #define LOGON_PROFILE_PATH_RETURNED 0x400
2800 #define LOGON_NT_V2 0x800
2801 #define LOGON_LM_V2 0x1000
2802 #define LOGON_NTLM_V2 0x2000
2804 #if (_WIN32_WINNT >= 0x0600)
2806 #define LOGON_OPTIMIZED 0x4000
2807 #define LOGON_WINLOGON 0x8000
2808 #define LOGON_PKINIT 0x10000
2809 #define LOGON_NO_OPTIMIZED 0x20000
2813 #define MSV1_0_SUBAUTHENTICATION_FLAGS 0xFF000000
2815 #define LOGON_GRACE_LOGON 0x01000000
2817 #define MSV1_0_OWF_PASSWORD_LENGTH 16
2818 #define MSV1_0_CRED_LM_PRESENT 0x1
2819 #define MSV1_0_CRED_NT_PRESENT 0x2
2820 #define MSV1_0_CRED_VERSION 0
2822 #define MSV1_0_NTLM3_RESPONSE_LENGTH 16
2823 #define MSV1_0_NTLM3_OWF_LENGTH 16
2825 #if (_WIN32_WINNT == 0x0500)
2826 #define MSV1_0_MAX_NTLM3_LIFE 1800
2828 #define MSV1_0_MAX_NTLM3_LIFE 129600
2830 #define MSV1_0_MAX_AVL_SIZE 64000
2832 #if (_WIN32_WINNT >= 0x0501)
2834 #define MSV1_0_AV_FLAG_FORCE_GUEST 0x00000001
2836 #if (_WIN32_WINNT >= 0x0600)
2837 #define MSV1_0_AV_FLAG_MIC_HANDSHAKE_MESSAGES 0x00000002
2842 #define MSV1_0_NTLM3_INPUT_LENGTH (sizeof(MSV1_0_NTLM3_RESPONSE) - MSV1_0_NTLM3_RESPONSE_LENGTH)
2844 #if(_WIN32_WINNT >= 0x0502)
2845 #define MSV1_0_NTLM3_MIN_NT_RESPONSE_LENGTH RTL_SIZEOF_THROUGH_FIELD(MSV1_0_NTLM3_RESPONSE, AvPairsOff)
2848 #define USE_PRIMARY_PASSWORD 0x01
2849 #define RETURN_PRIMARY_USERNAME 0x02
2850 #define RETURN_PRIMARY_LOGON_DOMAINNAME 0x04
2851 #define RETURN_NON_NT_USER_SESSION_KEY 0x08
2852 #define GENERATE_CLIENT_CHALLENGE 0x10
2853 #define GCR_NTLM3_PARMS 0x20
2854 #define GCR_TARGET_INFO 0x40
2855 #define RETURN_RESERVED_PARAMETER 0x80
2856 #define GCR_ALLOW_NTLM 0x100
2857 #define GCR_USE_OEM_SET 0x200
2858 #define GCR_MACHINE_CREDENTIAL 0x400
2859 #define GCR_USE_OWF_PASSWORD 0x800
2860 #define GCR_ALLOW_LM 0x1000
2861 #define GCR_ALLOW_NO_TARGET 0x2000
2863 typedef enum _MSV1_0_LOGON_SUBMIT_TYPE
{
2864 MsV1_0InteractiveLogon
= 2,
2868 MsV1_0WorkstationUnlockLogon
= 7,
2869 MsV1_0S4ULogon
= 12,
2870 MsV1_0VirtualLogon
= 82
2871 } MSV1_0_LOGON_SUBMIT_TYPE
, *PMSV1_0_LOGON_SUBMIT_TYPE
;
2873 typedef enum _MSV1_0_PROFILE_BUFFER_TYPE
{
2874 MsV1_0InteractiveProfile
= 2,
2875 MsV1_0Lm20LogonProfile
,
2876 MsV1_0SmartCardProfile
2877 } MSV1_0_PROFILE_BUFFER_TYPE
, *PMSV1_0_PROFILE_BUFFER_TYPE
;
2879 typedef struct _MSV1_0_INTERACTIVE_LOGON
{
2880 MSV1_0_LOGON_SUBMIT_TYPE MessageType
;
2881 UNICODE_STRING LogonDomainName
;
2882 UNICODE_STRING UserName
;
2883 UNICODE_STRING Password
;
2884 } MSV1_0_INTERACTIVE_LOGON
, *PMSV1_0_INTERACTIVE_LOGON
;
2886 typedef struct _MSV1_0_INTERACTIVE_PROFILE
{
2887 MSV1_0_PROFILE_BUFFER_TYPE MessageType
;
2889 USHORT BadPasswordCount
;
2890 LARGE_INTEGER LogonTime
;
2891 LARGE_INTEGER LogoffTime
;
2892 LARGE_INTEGER KickOffTime
;
2893 LARGE_INTEGER PasswordLastSet
;
2894 LARGE_INTEGER PasswordCanChange
;
2895 LARGE_INTEGER PasswordMustChange
;
2896 UNICODE_STRING LogonScript
;
2897 UNICODE_STRING HomeDirectory
;
2898 UNICODE_STRING FullName
;
2899 UNICODE_STRING ProfilePath
;
2900 UNICODE_STRING HomeDirectoryDrive
;
2901 UNICODE_STRING LogonServer
;
2903 } MSV1_0_INTERACTIVE_PROFILE
, *PMSV1_0_INTERACTIVE_PROFILE
;
2905 typedef struct _MSV1_0_LM20_LOGON
{
2906 MSV1_0_LOGON_SUBMIT_TYPE MessageType
;
2907 UNICODE_STRING LogonDomainName
;
2908 UNICODE_STRING UserName
;
2909 UNICODE_STRING Workstation
;
2910 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
2911 STRING CaseSensitiveChallengeResponse
;
2912 STRING CaseInsensitiveChallengeResponse
;
2913 ULONG ParameterControl
;
2914 } MSV1_0_LM20_LOGON
, * PMSV1_0_LM20_LOGON
;
2916 typedef struct _MSV1_0_SUBAUTH_LOGON
{
2917 MSV1_0_LOGON_SUBMIT_TYPE MessageType
;
2918 UNICODE_STRING LogonDomainName
;
2919 UNICODE_STRING UserName
;
2920 UNICODE_STRING Workstation
;
2921 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
2922 STRING AuthenticationInfo1
;
2923 STRING AuthenticationInfo2
;
2924 ULONG ParameterControl
;
2925 ULONG SubAuthPackageId
;
2926 } MSV1_0_SUBAUTH_LOGON
, * PMSV1_0_SUBAUTH_LOGON
;
2928 #if (_WIN32_WINNT >= 0x0600)
2930 #define MSV1_0_S4U_LOGON_FLAG_CHECK_LOGONHOURS 0x2
2932 typedef struct _MSV1_0_S4U_LOGON
{
2933 MSV1_0_LOGON_SUBMIT_TYPE MessageType
;
2935 UNICODE_STRING UserPrincipalName
;
2936 UNICODE_STRING DomainName
;
2937 } MSV1_0_S4U_LOGON
, *PMSV1_0_S4U_LOGON
;
2941 typedef struct _MSV1_0_LM20_LOGON_PROFILE
{
2942 MSV1_0_PROFILE_BUFFER_TYPE MessageType
;
2943 LARGE_INTEGER KickOffTime
;
2944 LARGE_INTEGER LogoffTime
;
2946 UCHAR UserSessionKey
[MSV1_0_USER_SESSION_KEY_LENGTH
];
2947 UNICODE_STRING LogonDomainName
;
2948 UCHAR LanmanSessionKey
[MSV1_0_LANMAN_SESSION_KEY_LENGTH
];
2949 UNICODE_STRING LogonServer
;
2950 UNICODE_STRING UserParameters
;
2951 } MSV1_0_LM20_LOGON_PROFILE
, * PMSV1_0_LM20_LOGON_PROFILE
;
2953 typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL
{
2956 UCHAR LmPassword
[MSV1_0_OWF_PASSWORD_LENGTH
];
2957 UCHAR NtPassword
[MSV1_0_OWF_PASSWORD_LENGTH
];
2958 } MSV1_0_SUPPLEMENTAL_CREDENTIAL
, *PMSV1_0_SUPPLEMENTAL_CREDENTIAL
;
2960 typedef struct _MSV1_0_NTLM3_RESPONSE
{
2961 UCHAR Response
[MSV1_0_NTLM3_RESPONSE_LENGTH
];
2966 ULONGLONG TimeStamp
;
2967 UCHAR ChallengeFromClient
[MSV1_0_CHALLENGE_LENGTH
];
2970 } MSV1_0_NTLM3_RESPONSE
, *PMSV1_0_NTLM3_RESPONSE
;
2972 typedef enum _MSV1_0_AVID
{
2974 MsvAvNbComputerName
,
2976 MsvAvDnsComputerName
,
2978 #if (_WIN32_WINNT >= 0x0501)
2981 #if (_WIN32_WINNT >= 0x0600)
2985 MsvAvChannelBindings
,
2990 typedef struct _MSV1_0_AV_PAIR
{
2993 } MSV1_0_AV_PAIR
, *PMSV1_0_AV_PAIR
;
2995 typedef enum _MSV1_0_PROTOCOL_MESSAGE_TYPE
{
2996 MsV1_0Lm20ChallengeRequest
= 0,
2997 MsV1_0Lm20GetChallengeResponse
,
2998 MsV1_0EnumerateUsers
,
3001 MsV1_0ChangePassword
,
3002 MsV1_0ChangeCachedPassword
,
3003 MsV1_0GenericPassthrough
,
3006 MsV1_0DeriveCredential
,
3008 #if (_WIN32_WINNT >= 0x0501)
3009 MsV1_0SetProcessOption
,
3011 #if (_WIN32_WINNT >= 0x0600)
3012 MsV1_0ConfigLocalAliases
,
3013 MsV1_0ClearCachedCredentials
,
3015 } MSV1_0_PROTOCOL_MESSAGE_TYPE
, *PMSV1_0_PROTOCOL_MESSAGE_TYPE
;
3017 typedef struct _MSV1_0_LM20_CHALLENGE_REQUEST
{
3018 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
3019 } MSV1_0_LM20_CHALLENGE_REQUEST
, *PMSV1_0_LM20_CHALLENGE_REQUEST
;
3021 typedef struct _MSV1_0_LM20_CHALLENGE_RESPONSE
{
3022 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
3023 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
3024 } MSV1_0_LM20_CHALLENGE_RESPONSE
, *PMSV1_0_LM20_CHALLENGE_RESPONSE
;
3026 typedef struct _MSV1_0_GETCHALLENRESP_REQUEST_V1
{
3027 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
3028 ULONG ParameterControl
;
3030 UNICODE_STRING Password
;
3031 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
3032 } MSV1_0_GETCHALLENRESP_REQUEST_V1
, *PMSV1_0_GETCHALLENRESP_REQUEST_V1
;
3034 typedef struct _MSV1_0_GETCHALLENRESP_REQUEST
{
3035 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
3036 ULONG ParameterControl
;
3038 UNICODE_STRING Password
;
3039 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
3040 UNICODE_STRING UserName
;
3041 UNICODE_STRING LogonDomainName
;
3042 UNICODE_STRING ServerName
;
3043 } MSV1_0_GETCHALLENRESP_REQUEST
, *PMSV1_0_GETCHALLENRESP_REQUEST
;
3045 typedef struct _MSV1_0_GETCHALLENRESP_RESPONSE
{
3046 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
3047 STRING CaseSensitiveChallengeResponse
;
3048 STRING CaseInsensitiveChallengeResponse
;
3049 UNICODE_STRING UserName
;
3050 UNICODE_STRING LogonDomainName
;
3051 UCHAR UserSessionKey
[MSV1_0_USER_SESSION_KEY_LENGTH
];
3052 UCHAR LanmanSessionKey
[MSV1_0_LANMAN_SESSION_KEY_LENGTH
];
3053 } MSV1_0_GETCHALLENRESP_RESPONSE
, *PMSV1_0_GETCHALLENRESP_RESPONSE
;
3055 typedef struct _MSV1_0_ENUMUSERS_REQUEST
{
3056 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
3057 } MSV1_0_ENUMUSERS_REQUEST
, *PMSV1_0_ENUMUSERS_REQUEST
;
3059 typedef struct _MSV1_0_ENUMUSERS_RESPONSE
{
3060 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
3061 ULONG NumberOfLoggedOnUsers
;
3064 } MSV1_0_ENUMUSERS_RESPONSE
, *PMSV1_0_ENUMUSERS_RESPONSE
;
3066 typedef struct _MSV1_0_GETUSERINFO_REQUEST
{
3067 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
3069 } MSV1_0_GETUSERINFO_REQUEST
, *PMSV1_0_GETUSERINFO_REQUEST
;
3071 typedef struct _MSV1_0_GETUSERINFO_RESPONSE
{
3072 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
3074 UNICODE_STRING UserName
;
3075 UNICODE_STRING LogonDomainName
;
3076 UNICODE_STRING LogonServer
;
3077 SECURITY_LOGON_TYPE LogonType
;
3078 } MSV1_0_GETUSERINFO_RESPONSE
, *PMSV1_0_GETUSERINFO_RESPONSE
;
3082 #define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007
3083 #define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008
3084 #define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009
3086 /* also in winnt.h */
3087 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
3088 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
3089 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
3090 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
3091 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
3092 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
3093 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
3094 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
3095 #define FILE_NOTIFY_CHANGE_EA 0x00000080
3096 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
3097 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
3098 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
3099 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
3100 #define FILE_NOTIFY_VALID_MASK 0x00000fff
3102 #define FILE_ACTION_ADDED 0x00000001
3103 #define FILE_ACTION_REMOVED 0x00000002
3104 #define FILE_ACTION_MODIFIED 0x00000003
3105 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
3106 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
3107 #define FILE_ACTION_ADDED_STREAM 0x00000006
3108 #define FILE_ACTION_REMOVED_STREAM 0x00000007
3109 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
3110 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
3111 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
3112 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
3115 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
3116 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
3118 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000
3119 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002
3121 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000
3122 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002
3123 #define FILE_PIPE_TYPE_VALID_MASK 0x00000003
3125 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
3126 #define FILE_PIPE_MESSAGE_MODE 0x00000001
3128 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
3129 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
3131 #define FILE_PIPE_INBOUND 0x00000000
3132 #define FILE_PIPE_OUTBOUND 0x00000001
3133 #define FILE_PIPE_FULL_DUPLEX 0x00000002
3135 #define FILE_PIPE_DISCONNECTED_STATE 0x00000001
3136 #define FILE_PIPE_LISTENING_STATE 0x00000002
3137 #define FILE_PIPE_CONNECTED_STATE 0x00000003
3138 #define FILE_PIPE_CLOSING_STATE 0x00000004
3140 #define FILE_PIPE_CLIENT_END 0x00000000
3141 #define FILE_PIPE_SERVER_END 0x00000001
3143 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
3144 #define FILE_CASE_PRESERVED_NAMES 0x00000002
3145 #define FILE_UNICODE_ON_DISK 0x00000004
3146 #define FILE_PERSISTENT_ACLS 0x00000008
3147 #define FILE_FILE_COMPRESSION 0x00000010
3148 #define FILE_VOLUME_QUOTAS 0x00000020
3149 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
3150 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
3151 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
3152 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
3153 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
3154 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
3155 #define FILE_NAMED_STREAMS 0x00040000
3156 #define FILE_READ_ONLY_VOLUME 0x00080000
3157 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
3158 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
3159 #define FILE_SUPPORTS_HARD_LINKS 0x00400000
3160 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
3161 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
3162 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000
3164 #define FILE_NEED_EA 0x00000080
3166 #define FILE_EA_TYPE_BINARY 0xfffe
3167 #define FILE_EA_TYPE_ASCII 0xfffd
3168 #define FILE_EA_TYPE_BITMAP 0xfffb
3169 #define FILE_EA_TYPE_METAFILE 0xfffa
3170 #define FILE_EA_TYPE_ICON 0xfff9
3171 #define FILE_EA_TYPE_EA 0xffee
3172 #define FILE_EA_TYPE_MVMT 0xffdf
3173 #define FILE_EA_TYPE_MVST 0xffde
3174 #define FILE_EA_TYPE_ASN1 0xffdd
3175 #define FILE_EA_TYPE_FAMILY_IDS 0xff01
3177 typedef struct _FILE_NOTIFY_INFORMATION
{
3178 ULONG NextEntryOffset
;
3180 ULONG FileNameLength
;
3182 } FILE_NOTIFY_INFORMATION
, *PFILE_NOTIFY_INFORMATION
;
3184 typedef struct _FILE_DIRECTORY_INFORMATION
{
3185 ULONG NextEntryOffset
;
3187 LARGE_INTEGER CreationTime
;
3188 LARGE_INTEGER LastAccessTime
;
3189 LARGE_INTEGER LastWriteTime
;
3190 LARGE_INTEGER ChangeTime
;
3191 LARGE_INTEGER EndOfFile
;
3192 LARGE_INTEGER AllocationSize
;
3193 ULONG FileAttributes
;
3194 ULONG FileNameLength
;
3196 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
3198 typedef struct _FILE_FULL_DIR_INFORMATION
{
3199 ULONG NextEntryOffset
;
3201 LARGE_INTEGER CreationTime
;
3202 LARGE_INTEGER LastAccessTime
;
3203 LARGE_INTEGER LastWriteTime
;
3204 LARGE_INTEGER ChangeTime
;
3205 LARGE_INTEGER EndOfFile
;
3206 LARGE_INTEGER AllocationSize
;
3207 ULONG FileAttributes
;
3208 ULONG FileNameLength
;
3211 } FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
3213 typedef struct _FILE_ID_FULL_DIR_INFORMATION
{
3214 ULONG NextEntryOffset
;
3216 LARGE_INTEGER CreationTime
;
3217 LARGE_INTEGER LastAccessTime
;
3218 LARGE_INTEGER LastWriteTime
;
3219 LARGE_INTEGER ChangeTime
;
3220 LARGE_INTEGER EndOfFile
;
3221 LARGE_INTEGER AllocationSize
;
3222 ULONG FileAttributes
;
3223 ULONG FileNameLength
;
3225 LARGE_INTEGER FileId
;
3227 } FILE_ID_FULL_DIR_INFORMATION
, *PFILE_ID_FULL_DIR_INFORMATION
;
3229 typedef struct _FILE_BOTH_DIR_INFORMATION
{
3230 ULONG NextEntryOffset
;
3232 LARGE_INTEGER CreationTime
;
3233 LARGE_INTEGER LastAccessTime
;
3234 LARGE_INTEGER LastWriteTime
;
3235 LARGE_INTEGER ChangeTime
;
3236 LARGE_INTEGER EndOfFile
;
3237 LARGE_INTEGER AllocationSize
;
3238 ULONG FileAttributes
;
3239 ULONG FileNameLength
;
3241 CCHAR ShortNameLength
;
3242 WCHAR ShortName
[12];
3244 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
3246 typedef struct _FILE_ID_BOTH_DIR_INFORMATION
{
3247 ULONG NextEntryOffset
;
3249 LARGE_INTEGER CreationTime
;
3250 LARGE_INTEGER LastAccessTime
;
3251 LARGE_INTEGER LastWriteTime
;
3252 LARGE_INTEGER ChangeTime
;
3253 LARGE_INTEGER EndOfFile
;
3254 LARGE_INTEGER AllocationSize
;
3255 ULONG FileAttributes
;
3256 ULONG FileNameLength
;
3258 CCHAR ShortNameLength
;
3259 WCHAR ShortName
[12];
3260 LARGE_INTEGER FileId
;
3262 } FILE_ID_BOTH_DIR_INFORMATION
, *PFILE_ID_BOTH_DIR_INFORMATION
;
3264 typedef struct _FILE_NAMES_INFORMATION
{
3265 ULONG NextEntryOffset
;
3267 ULONG FileNameLength
;
3269 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
3271 typedef struct _FILE_ID_GLOBAL_TX_DIR_INFORMATION
{
3272 ULONG NextEntryOffset
;
3274 LARGE_INTEGER CreationTime
;
3275 LARGE_INTEGER LastAccessTime
;
3276 LARGE_INTEGER LastWriteTime
;
3277 LARGE_INTEGER ChangeTime
;
3278 LARGE_INTEGER EndOfFile
;
3279 LARGE_INTEGER AllocationSize
;
3280 ULONG FileAttributes
;
3281 ULONG FileNameLength
;
3282 LARGE_INTEGER FileId
;
3283 GUID LockingTransactionId
;
3286 } FILE_ID_GLOBAL_TX_DIR_INFORMATION
, *PFILE_ID_GLOBAL_TX_DIR_INFORMATION
;
3288 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_WRITELOCKED 0x00000001
3289 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_TO_TX 0x00000002
3290 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_OUTSIDE_TX 0x00000004
3292 typedef struct _FILE_OBJECTID_INFORMATION
{
3293 LONGLONG FileReference
;
3295 _ANONYMOUS_UNION
union {
3296 _ANONYMOUS_STRUCT
struct {
3297 UCHAR BirthVolumeId
[16];
3298 UCHAR BirthObjectId
[16];
3301 UCHAR ExtendedInfo
[48];
3303 } FILE_OBJECTID_INFORMATION
, *PFILE_OBJECTID_INFORMATION
;
3305 #define ANSI_DOS_STAR ('<')
3306 #define ANSI_DOS_QM ('>')
3307 #define ANSI_DOS_DOT ('"')
3309 #define DOS_STAR (L'<')
3310 #define DOS_QM (L'>')
3311 #define DOS_DOT (L'"')
3313 typedef struct _FILE_INTERNAL_INFORMATION
{
3314 LARGE_INTEGER IndexNumber
;
3315 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
3317 typedef struct _FILE_EA_INFORMATION
{
3319 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
3321 typedef struct _FILE_ACCESS_INFORMATION
{
3322 ACCESS_MASK AccessFlags
;
3323 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
3325 typedef struct _FILE_MODE_INFORMATION
{
3327 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
3329 typedef struct _FILE_ALL_INFORMATION
{
3330 FILE_BASIC_INFORMATION BasicInformation
;
3331 FILE_STANDARD_INFORMATION StandardInformation
;
3332 FILE_INTERNAL_INFORMATION InternalInformation
;
3333 FILE_EA_INFORMATION EaInformation
;
3334 FILE_ACCESS_INFORMATION AccessInformation
;
3335 FILE_POSITION_INFORMATION PositionInformation
;
3336 FILE_MODE_INFORMATION ModeInformation
;
3337 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
3338 FILE_NAME_INFORMATION NameInformation
;
3339 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
3341 typedef struct _FILE_ALLOCATION_INFORMATION
{
3342 LARGE_INTEGER AllocationSize
;
3343 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
3345 typedef struct _FILE_COMPRESSION_INFORMATION
{
3346 LARGE_INTEGER CompressedFileSize
;
3347 USHORT CompressionFormat
;
3348 UCHAR CompressionUnitShift
;
3352 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
3354 typedef struct _FILE_LINK_INFORMATION
{
3355 BOOLEAN ReplaceIfExists
;
3356 HANDLE RootDirectory
;
3357 ULONG FileNameLength
;
3359 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
3361 typedef struct _FILE_MOVE_CLUSTER_INFORMATION
{
3363 HANDLE RootDirectory
;
3364 ULONG FileNameLength
;
3366 } FILE_MOVE_CLUSTER_INFORMATION
, *PFILE_MOVE_CLUSTER_INFORMATION
;
3368 typedef struct _FILE_RENAME_INFORMATION
{
3369 BOOLEAN ReplaceIfExists
;
3370 HANDLE RootDirectory
;
3371 ULONG FileNameLength
;
3373 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
3375 typedef struct _FILE_STREAM_INFORMATION
{
3376 ULONG NextEntryOffset
;
3377 ULONG StreamNameLength
;
3378 LARGE_INTEGER StreamSize
;
3379 LARGE_INTEGER StreamAllocationSize
;
3380 WCHAR StreamName
[1];
3381 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
3383 typedef struct _FILE_TRACKING_INFORMATION
{
3384 HANDLE DestinationFile
;
3385 ULONG ObjectInformationLength
;
3386 CHAR ObjectInformation
[1];
3387 } FILE_TRACKING_INFORMATION
, *PFILE_TRACKING_INFORMATION
;
3389 typedef struct _FILE_COMPLETION_INFORMATION
{
3392 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
3394 typedef struct _FILE_PIPE_INFORMATION
{
3396 ULONG CompletionMode
;
3397 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
3399 typedef struct _FILE_PIPE_LOCAL_INFORMATION
{
3400 ULONG NamedPipeType
;
3401 ULONG NamedPipeConfiguration
;
3402 ULONG MaximumInstances
;
3403 ULONG CurrentInstances
;
3405 ULONG ReadDataAvailable
;
3406 ULONG OutboundQuota
;
3407 ULONG WriteQuotaAvailable
;
3408 ULONG NamedPipeState
;
3410 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
3412 typedef struct _FILE_PIPE_REMOTE_INFORMATION
{
3413 LARGE_INTEGER CollectDataTime
;
3414 ULONG MaximumCollectionCount
;
3415 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
3417 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
{
3418 ULONG MaximumMessageSize
;
3419 ULONG MailslotQuota
;
3420 ULONG NextMessageSize
;
3421 ULONG MessagesAvailable
;
3422 LARGE_INTEGER ReadTimeout
;
3423 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
3425 typedef struct _FILE_MAILSLOT_SET_INFORMATION
{
3426 PLARGE_INTEGER ReadTimeout
;
3427 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
3429 typedef struct _FILE_REPARSE_POINT_INFORMATION
{
3430 LONGLONG FileReference
;
3432 } FILE_REPARSE_POINT_INFORMATION
, *PFILE_REPARSE_POINT_INFORMATION
;
3434 typedef struct _FILE_LINK_ENTRY_INFORMATION
{
3435 ULONG NextEntryOffset
;
3436 LONGLONG ParentFileId
;
3437 ULONG FileNameLength
;
3439 } FILE_LINK_ENTRY_INFORMATION
, *PFILE_LINK_ENTRY_INFORMATION
;
3441 typedef struct _FILE_LINKS_INFORMATION
{
3443 ULONG EntriesReturned
;
3444 FILE_LINK_ENTRY_INFORMATION Entry
;
3445 } FILE_LINKS_INFORMATION
, *PFILE_LINKS_INFORMATION
;
3447 typedef struct _FILE_NETWORK_PHYSICAL_NAME_INFORMATION
{
3448 ULONG FileNameLength
;
3450 } FILE_NETWORK_PHYSICAL_NAME_INFORMATION
, *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION
;
3452 typedef struct _FILE_STANDARD_LINK_INFORMATION
{
3453 ULONG NumberOfAccessibleLinks
;
3454 ULONG TotalNumberOfLinks
;
3455 BOOLEAN DeletePending
;
3457 } FILE_STANDARD_LINK_INFORMATION
, *PFILE_STANDARD_LINK_INFORMATION
;
3459 typedef struct _FILE_GET_EA_INFORMATION
{
3460 ULONG NextEntryOffset
;
3463 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
3465 #define REMOTE_PROTOCOL_FLAG_LOOPBACK 0x00000001
3466 #define REMOTE_PROTOCOL_FLAG_OFFLINE 0x00000002
3468 typedef struct _FILE_REMOTE_PROTOCOL_INFORMATION
{
3469 USHORT StructureVersion
;
3470 USHORT StructureSize
;
3472 USHORT ProtocolMajorVersion
;
3473 USHORT ProtocolMinorVersion
;
3474 USHORT ProtocolRevision
;
3482 } ProtocolSpecificReserved
;
3483 } FILE_REMOTE_PROTOCOL_INFORMATION
, *PFILE_REMOTE_PROTOCOL_INFORMATION
;
3485 typedef struct _FILE_GET_QUOTA_INFORMATION
{
3486 ULONG NextEntryOffset
;
3489 } FILE_GET_QUOTA_INFORMATION
, *PFILE_GET_QUOTA_INFORMATION
;
3491 typedef struct _FILE_QUOTA_INFORMATION
{
3492 ULONG NextEntryOffset
;
3494 LARGE_INTEGER ChangeTime
;
3495 LARGE_INTEGER QuotaUsed
;
3496 LARGE_INTEGER QuotaThreshold
;
3497 LARGE_INTEGER QuotaLimit
;
3499 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
3501 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
3502 ULONG FileSystemAttributes
;
3503 ULONG MaximumComponentNameLength
;
3504 ULONG FileSystemNameLength
;
3505 WCHAR FileSystemName
[1];
3506 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
3508 typedef struct _FILE_FS_DRIVER_PATH_INFORMATION
{
3509 BOOLEAN DriverInPath
;
3510 ULONG DriverNameLength
;
3511 WCHAR DriverName
[1];
3512 } FILE_FS_DRIVER_PATH_INFORMATION
, *PFILE_FS_DRIVER_PATH_INFORMATION
;
3514 typedef struct _FILE_FS_VOLUME_FLAGS_INFORMATION
{
3516 } FILE_FS_VOLUME_FLAGS_INFORMATION
, *PFILE_FS_VOLUME_FLAGS_INFORMATION
;
3518 #define FILE_VC_QUOTA_NONE 0x00000000
3519 #define FILE_VC_QUOTA_TRACK 0x00000001
3520 #define FILE_VC_QUOTA_ENFORCE 0x00000002
3521 #define FILE_VC_QUOTA_MASK 0x00000003
3522 #define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008
3523 #define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010
3524 #define FILE_VC_LOG_QUOTA_LIMIT 0x00000020
3525 #define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040
3526 #define FILE_VC_LOG_VOLUME_LIMIT 0x00000080
3527 #define FILE_VC_QUOTAS_INCOMPLETE 0x00000100
3528 #define FILE_VC_QUOTAS_REBUILDING 0x00000200
3529 #define FILE_VC_VALID_MASK 0x000003ff
3531 typedef struct _FILE_FS_CONTROL_INFORMATION
{
3532 LARGE_INTEGER FreeSpaceStartFiltering
;
3533 LARGE_INTEGER FreeSpaceThreshold
;
3534 LARGE_INTEGER FreeSpaceStopFiltering
;
3535 LARGE_INTEGER DefaultQuotaThreshold
;
3536 LARGE_INTEGER DefaultQuotaLimit
;
3537 ULONG FileSystemControlFlags
;
3538 } FILE_FS_CONTROL_INFORMATION
, *PFILE_FS_CONTROL_INFORMATION
;
3540 #ifndef _FILESYSTEMFSCTL_
3541 #define _FILESYSTEMFSCTL_
3543 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
3544 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
3545 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
3546 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
3547 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
3548 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
3549 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
3550 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
3551 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
3552 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
3553 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
3554 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
3555 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
3556 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
3557 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
3558 #define FSCTL_SET_BOOTLOADER_ACCESSED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
3560 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
3561 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
3562 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
3563 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
3564 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
3566 #if (_WIN32_WINNT >= 0x0400)
3568 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
3569 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
3570 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS)
3571 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
3572 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3573 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
3574 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
3578 #if (_WIN32_WINNT >= 0x0500)
3580 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
3581 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3582 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
3583 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3584 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3585 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
3586 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3587 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_ANY_ACCESS)
3588 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA)
3589 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_ANY_ACCESS)
3590 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3591 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
3592 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3593 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
3594 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
3595 #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
3596 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_NEITHER, FILE_ANY_ACCESS)
3597 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
3598 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_SPECIAL_ACCESS)
3599 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_SPECIAL_ACCESS)
3600 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_ANY_ACCESS)
3601 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_ANY_ACCESS)
3602 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_ANY_ACCESS)
3603 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
3604 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
3605 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
3606 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
3607 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
3608 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
3609 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
3610 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
3611 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3615 #if (_WIN32_WINNT >= 0x0600)
3617 #define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA)
3618 #define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA)
3619 #define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS)
3620 #define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS)
3621 #define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3622 #define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA)
3623 #define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA)
3624 #define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA)
3625 #define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA)
3626 #define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA)
3627 #define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA)
3628 #define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA)
3629 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA)
3630 #define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA)
3631 #define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA)
3632 #define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA)
3633 #define FSCTL_TXFS_SAVEPOINT_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 94, METHOD_BUFFERED, FILE_WRITE_DATA)
3634 #define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA)
3635 #define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA)
3636 #define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3637 #define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS)
3638 #define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS)
3639 #define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS)
3640 #define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS)
3641 #define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS)
3642 #define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3643 #define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS)
3644 #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS)
3645 #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES \
3646 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA)
3647 #define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA)
3648 #define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS)
3649 #define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS)
3650 #define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS)
3654 #if (_WIN32_WINNT >= 0x0601)
3656 #define FSCTL_QUERY_DEPENDENT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 124, METHOD_BUFFERED, FILE_ANY_ACCESS)
3657 #define FSCTL_SD_GLOBAL_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 125, METHOD_BUFFERED, FILE_ANY_ACCESS)
3658 #define FSCTL_LOOKUP_STREAM_FROM_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 127, METHOD_BUFFERED, FILE_ANY_ACCESS)
3659 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS)
3660 #define FSCTL_FILE_TYPE_NOTIFICATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS)
3661 #define FSCTL_GET_BOOT_AREA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 140, METHOD_BUFFERED, FILE_ANY_ACCESS)
3662 #define FSCTL_GET_RETRIEVAL_POINTER_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 141, METHOD_BUFFERED, FILE_ANY_ACCESS)
3663 #define FSCTL_SET_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS)
3664 #define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS)
3665 #define FSCTL_REQUEST_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS)
3666 #define FSCTL_CSV_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS)
3667 #define FSCTL_IS_CSV_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS)
3668 #define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 147, METHOD_BUFFERED, FILE_ANY_ACCESS)
3669 #define FSCTL_CSV_GET_VOLUME_PATH_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 148, METHOD_BUFFERED, FILE_ANY_ACCESS)
3670 #define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS)
3671 #define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS)
3672 #define FSCTL_IS_FILE_ON_CSV_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS)
3673 #define FSCTL_CSV_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 155, METHOD_BUFFERED, FILE_ANY_ACCESS)
3675 typedef struct _CSV_NAMESPACE_INFO
{
3678 LARGE_INTEGER StartingOffset
;
3680 } CSV_NAMESPACE_INFO
, *PCSV_NAMESPACE_INFO
;
3682 #define CSV_NAMESPACE_INFO_V1 (sizeof(CSV_NAMESPACE_INFO))
3683 #define CSV_INVALID_DEVICE_NUMBER 0xFFFFFFFF
3687 #if (_WIN32_WINNT >= 0x0602)
3689 #define FSCTL_FILE_LEVEL_TRIM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 130, METHOD_BUFFERED, FILE_WRITE_DATA)
3690 #define FSCTL_CORRUPTION_HANDLING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 152, METHOD_BUFFERED, FILE_ANY_ACCESS)
3691 #define FSCTL_OFFLOAD_READ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 153, METHOD_BUFFERED, FILE_READ_ACCESS)
3692 #define FSCTL_OFFLOAD_WRITE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 154, METHOD_BUFFERED, FILE_WRITE_ACCESS)
3693 #define FSCTL_SET_PURGE_FAILURE_MODE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 156, METHOD_BUFFERED, FILE_ANY_ACCESS)
3694 #define FSCTL_QUERY_FILE_LAYOUT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 157, METHOD_NEITHER, FILE_ANY_ACCESS)
3695 #define FSCTL_IS_VOLUME_OWNED_BYCSVFS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 158, METHOD_BUFFERED, FILE_ANY_ACCESS)
3696 #define FSCTL_GET_INTEGRITY_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 159, METHOD_BUFFERED, FILE_ANY_ACCESS)
3697 #define FSCTL_SET_INTEGRITY_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 160, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
3698 #define FSCTL_QUERY_FILE_REGIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 161, METHOD_BUFFERED, FILE_ANY_ACCESS)
3699 #define FSCTL_DEDUP_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 165, METHOD_BUFFERED, FILE_ANY_ACCESS)
3700 #define FSCTL_DEDUP_QUERY_FILE_HASHES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 166, METHOD_NEITHER, FILE_READ_DATA)
3701 #define FSCTL_RKF_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 171, METHOD_NEITHER, FILE_ANY_ACCESS)
3702 #define FSCTL_SCRUB_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 172, METHOD_BUFFERED, FILE_ANY_ACCESS)
3703 #define FSCTL_REPAIR_COPIES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 173, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
3704 #define FSCTL_DISABLE_LOCAL_BUFFERING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 174, METHOD_BUFFERED, FILE_ANY_ACCESS)
3705 #define FSCTL_CSV_MGMT_LOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 175, METHOD_BUFFERED, FILE_ANY_ACCESS)
3706 #define FSCTL_CSV_QUERY_DOWN_LEVEL_FILE_SYSTEM_CHARACTERISTICS \
3707 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 176, METHOD_BUFFERED, FILE_ANY_ACCESS)
3708 #define FSCTL_ADVANCE_FILE_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 177, METHOD_BUFFERED, FILE_ANY_ACCESS)
3709 #define FSCTL_CSV_SYNC_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 178, METHOD_BUFFERED, FILE_ANY_ACCESS)
3710 #define FSCTL_CSV_QUERY_VETO_FILE_DIRECT_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 179, METHOD_BUFFERED, FILE_ANY_ACCESS)
3711 #define FSCTL_WRITE_USN_REASON CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 180, METHOD_BUFFERED, FILE_ANY_ACCESS)
3712 #define FSCTL_CSV_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 181, METHOD_BUFFERED, FILE_ANY_ACCESS)
3713 #define FSCTL_GET_REFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 182, METHOD_BUFFERED, FILE_ANY_ACCESS)
3717 #define FSCTL_MARK_AS_SYSTEM_HIVE FSCTL_SET_BOOTLOADER_ACCESSED
3719 typedef struct _PATHNAME_BUFFER
{
3720 ULONG PathNameLength
;
3722 } PATHNAME_BUFFER
, *PPATHNAME_BUFFER
;
3724 typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER
{
3725 UCHAR First0x24BytesOfBootSector
[0x24];
3726 } FSCTL_QUERY_FAT_BPB_BUFFER
, *PFSCTL_QUERY_FAT_BPB_BUFFER
;
3728 #if (_WIN32_WINNT >= 0x0400)
3730 typedef struct _NTFS_VOLUME_DATA_BUFFER
{
3731 LARGE_INTEGER VolumeSerialNumber
;
3732 LARGE_INTEGER NumberSectors
;
3733 LARGE_INTEGER TotalClusters
;
3734 LARGE_INTEGER FreeClusters
;
3735 LARGE_INTEGER TotalReserved
;
3736 ULONG BytesPerSector
;
3737 ULONG BytesPerCluster
;
3738 ULONG BytesPerFileRecordSegment
;
3739 ULONG ClustersPerFileRecordSegment
;
3740 LARGE_INTEGER MftValidDataLength
;
3741 LARGE_INTEGER MftStartLcn
;
3742 LARGE_INTEGER Mft2StartLcn
;
3743 LARGE_INTEGER MftZoneStart
;
3744 LARGE_INTEGER MftZoneEnd
;
3745 } NTFS_VOLUME_DATA_BUFFER
, *PNTFS_VOLUME_DATA_BUFFER
;
3747 typedef struct _NTFS_EXTENDED_VOLUME_DATA
{
3749 USHORT MajorVersion
;
3750 USHORT MinorVersion
;
3751 } NTFS_EXTENDED_VOLUME_DATA
, *PNTFS_EXTENDED_VOLUME_DATA
;
3753 typedef struct _STARTING_LCN_INPUT_BUFFER
{
3754 LARGE_INTEGER StartingLcn
;
3755 } STARTING_LCN_INPUT_BUFFER
, *PSTARTING_LCN_INPUT_BUFFER
;
3757 typedef struct _VOLUME_BITMAP_BUFFER
{
3758 LARGE_INTEGER StartingLcn
;
3759 LARGE_INTEGER BitmapSize
;
3761 } VOLUME_BITMAP_BUFFER
, *PVOLUME_BITMAP_BUFFER
;
3763 typedef struct _STARTING_VCN_INPUT_BUFFER
{
3764 LARGE_INTEGER StartingVcn
;
3765 } STARTING_VCN_INPUT_BUFFER
, *PSTARTING_VCN_INPUT_BUFFER
;
3767 typedef struct _RETRIEVAL_POINTERS_BUFFER
{
3769 LARGE_INTEGER StartingVcn
;
3771 LARGE_INTEGER NextVcn
;
3774 } RETRIEVAL_POINTERS_BUFFER
, *PRETRIEVAL_POINTERS_BUFFER
;
3776 typedef struct _NTFS_FILE_RECORD_INPUT_BUFFER
{
3777 LARGE_INTEGER FileReferenceNumber
;
3778 } NTFS_FILE_RECORD_INPUT_BUFFER
, *PNTFS_FILE_RECORD_INPUT_BUFFER
;
3780 typedef struct _NTFS_FILE_RECORD_OUTPUT_BUFFER
{
3781 LARGE_INTEGER FileReferenceNumber
;
3782 ULONG FileRecordLength
;
3783 UCHAR FileRecordBuffer
[1];
3784 } NTFS_FILE_RECORD_OUTPUT_BUFFER
, *PNTFS_FILE_RECORD_OUTPUT_BUFFER
;
3786 typedef struct _MOVE_FILE_DATA
{
3788 LARGE_INTEGER StartingVcn
;
3789 LARGE_INTEGER StartingLcn
;
3791 } MOVE_FILE_DATA
, *PMOVE_FILE_DATA
;
3793 typedef struct _MOVE_FILE_RECORD_DATA
{
3795 LARGE_INTEGER SourceFileRecord
;
3796 LARGE_INTEGER TargetFileRecord
;
3797 } MOVE_FILE_RECORD_DATA
, *PMOVE_FILE_RECORD_DATA
;
3800 typedef struct _MOVE_FILE_DATA32
{
3802 LARGE_INTEGER StartingVcn
;
3803 LARGE_INTEGER StartingLcn
;
3805 } MOVE_FILE_DATA32
, *PMOVE_FILE_DATA32
;
3808 #endif /* (_WIN32_WINNT >= 0x0400) */
3810 #if (_WIN32_WINNT >= 0x0500)
3812 typedef struct _FIND_BY_SID_DATA
{
3815 } FIND_BY_SID_DATA
, *PFIND_BY_SID_DATA
;
3817 typedef struct _FIND_BY_SID_OUTPUT
{
3818 ULONG NextEntryOffset
;
3820 ULONG FileNameLength
;
3822 } FIND_BY_SID_OUTPUT
, *PFIND_BY_SID_OUTPUT
;
3824 typedef struct _MFT_ENUM_DATA
{
3825 ULONGLONG StartFileReferenceNumber
;
3828 } MFT_ENUM_DATA
, *PMFT_ENUM_DATA
;
3830 typedef struct _CREATE_USN_JOURNAL_DATA
{
3831 ULONGLONG MaximumSize
;
3832 ULONGLONG AllocationDelta
;
3833 } CREATE_USN_JOURNAL_DATA
, *PCREATE_USN_JOURNAL_DATA
;
3835 typedef struct _READ_USN_JOURNAL_DATA
{
3838 ULONG ReturnOnlyOnClose
;
3840 ULONGLONG BytesToWaitFor
;
3841 ULONGLONG UsnJournalID
;
3842 } READ_USN_JOURNAL_DATA
, *PREAD_USN_JOURNAL_DATA
;
3844 typedef struct _USN_RECORD
{
3846 USHORT MajorVersion
;
3847 USHORT MinorVersion
;
3848 ULONGLONG FileReferenceNumber
;
3849 ULONGLONG ParentFileReferenceNumber
;
3851 LARGE_INTEGER TimeStamp
;
3855 ULONG FileAttributes
;
3856 USHORT FileNameLength
;
3857 USHORT FileNameOffset
;
3859 } USN_RECORD
, *PUSN_RECORD
;
3861 #define USN_PAGE_SIZE (0x1000)
3863 #define USN_REASON_DATA_OVERWRITE (0x00000001)
3864 #define USN_REASON_DATA_EXTEND (0x00000002)
3865 #define USN_REASON_DATA_TRUNCATION (0x00000004)
3866 #define USN_REASON_NAMED_DATA_OVERWRITE (0x00000010)
3867 #define USN_REASON_NAMED_DATA_EXTEND (0x00000020)
3868 #define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040)
3869 #define USN_REASON_FILE_CREATE (0x00000100)
3870 #define USN_REASON_FILE_DELETE (0x00000200)
3871 #define USN_REASON_EA_CHANGE (0x00000400)
3872 #define USN_REASON_SECURITY_CHANGE (0x00000800)
3873 #define USN_REASON_RENAME_OLD_NAME (0x00001000)
3874 #define USN_REASON_RENAME_NEW_NAME (0x00002000)
3875 #define USN_REASON_INDEXABLE_CHANGE (0x00004000)
3876 #define USN_REASON_BASIC_INFO_CHANGE (0x00008000)
3877 #define USN_REASON_HARD_LINK_CHANGE (0x00010000)
3878 #define USN_REASON_COMPRESSION_CHANGE (0x00020000)
3879 #define USN_REASON_ENCRYPTION_CHANGE (0x00040000)
3880 #define USN_REASON_OBJECT_ID_CHANGE (0x00080000)
3881 #define USN_REASON_REPARSE_POINT_CHANGE (0x00100000)
3882 #define USN_REASON_STREAM_CHANGE (0x00200000)
3883 #define USN_REASON_TRANSACTED_CHANGE (0x00400000)
3884 #define USN_REASON_CLOSE (0x80000000)
3886 typedef struct _USN_JOURNAL_DATA
{
3887 ULONGLONG UsnJournalID
;
3892 ULONGLONG MaximumSize
;
3893 ULONGLONG AllocationDelta
;
3894 } USN_JOURNAL_DATA
, *PUSN_JOURNAL_DATA
;
3896 typedef struct _DELETE_USN_JOURNAL_DATA
{
3897 ULONGLONG UsnJournalID
;
3899 } DELETE_USN_JOURNAL_DATA
, *PDELETE_USN_JOURNAL_DATA
;
3901 #define USN_DELETE_FLAG_DELETE (0x00000001)
3902 #define USN_DELETE_FLAG_NOTIFY (0x00000002)
3903 #define USN_DELETE_VALID_FLAGS (0x00000003)
3905 typedef struct _MARK_HANDLE_INFO
{
3906 ULONG UsnSourceInfo
;
3907 HANDLE VolumeHandle
;
3909 } MARK_HANDLE_INFO
, *PMARK_HANDLE_INFO
;
3912 typedef struct _MARK_HANDLE_INFO32
{
3913 ULONG UsnSourceInfo
;
3914 UINT32 VolumeHandle
;
3916 } MARK_HANDLE_INFO32
, *PMARK_HANDLE_INFO32
;
3919 #define USN_SOURCE_DATA_MANAGEMENT (0x00000001)
3920 #define USN_SOURCE_AUXILIARY_DATA (0x00000002)
3921 #define USN_SOURCE_REPLICATION_MANAGEMENT (0x00000004)
3923 #define MARK_HANDLE_PROTECT_CLUSTERS (0x00000001)
3924 #define MARK_HANDLE_TXF_SYSTEM_LOG (0x00000004)
3925 #define MARK_HANDLE_NOT_TXF_SYSTEM_LOG (0x00000008)
3927 typedef struct _BULK_SECURITY_TEST_DATA
{
3928 ACCESS_MASK DesiredAccess
;
3929 ULONG SecurityIds
[1];
3930 } BULK_SECURITY_TEST_DATA
, *PBULK_SECURITY_TEST_DATA
;
3932 #define VOLUME_IS_DIRTY (0x00000001)
3933 #define VOLUME_UPGRADE_SCHEDULED (0x00000002)
3934 #define VOLUME_SESSION_OPEN (0x00000004)
3936 typedef struct _FILE_PREFETCH
{
3939 ULONGLONG Prefetch
[1];
3940 } FILE_PREFETCH
, *PFILE_PREFETCH
;
3942 typedef struct _FILE_PREFETCH_EX
{
3946 ULONGLONG Prefetch
[1];
3947 } FILE_PREFETCH_EX
, *PFILE_PREFETCH_EX
;
3949 #define FILE_PREFETCH_TYPE_FOR_CREATE 0x1
3950 #define FILE_PREFETCH_TYPE_FOR_DIRENUM 0x2
3951 #define FILE_PREFETCH_TYPE_FOR_CREATE_EX 0x3
3952 #define FILE_PREFETCH_TYPE_FOR_DIRENUM_EX 0x4
3954 #define FILE_PREFETCH_TYPE_MAX 0x4
3956 typedef struct _FILE_OBJECTID_BUFFER
{
3958 _ANONYMOUS_UNION
union {
3959 _ANONYMOUS_STRUCT
struct {
3960 UCHAR BirthVolumeId
[16];
3961 UCHAR BirthObjectId
[16];
3964 UCHAR ExtendedInfo
[48];
3966 } FILE_OBJECTID_BUFFER
, *PFILE_OBJECTID_BUFFER
;
3968 typedef struct _FILE_SET_SPARSE_BUFFER
{
3970 } FILE_SET_SPARSE_BUFFER
, *PFILE_SET_SPARSE_BUFFER
;
3972 typedef struct _FILE_ZERO_DATA_INFORMATION
{
3973 LARGE_INTEGER FileOffset
;
3974 LARGE_INTEGER BeyondFinalZero
;
3975 } FILE_ZERO_DATA_INFORMATION
, *PFILE_ZERO_DATA_INFORMATION
;
3977 typedef struct _FILE_ALLOCATED_RANGE_BUFFER
{
3978 LARGE_INTEGER FileOffset
;
3979 LARGE_INTEGER Length
;
3980 } FILE_ALLOCATED_RANGE_BUFFER
, *PFILE_ALLOCATED_RANGE_BUFFER
;
3982 typedef struct _ENCRYPTION_BUFFER
{
3983 ULONG EncryptionOperation
;
3985 } ENCRYPTION_BUFFER
, *PENCRYPTION_BUFFER
;
3987 #define FILE_SET_ENCRYPTION 0x00000001
3988 #define FILE_CLEAR_ENCRYPTION 0x00000002
3989 #define STREAM_SET_ENCRYPTION 0x00000003
3990 #define STREAM_CLEAR_ENCRYPTION 0x00000004
3992 #define MAXIMUM_ENCRYPTION_VALUE 0x00000004
3994 typedef struct _DECRYPTION_STATUS_BUFFER
{
3995 BOOLEAN NoEncryptedStreams
;
3996 } DECRYPTION_STATUS_BUFFER
, *PDECRYPTION_STATUS_BUFFER
;
3998 #define ENCRYPTION_FORMAT_DEFAULT (0x01)
4000 #define COMPRESSION_FORMAT_SPARSE (0x4000)
4002 typedef struct _REQUEST_RAW_ENCRYPTED_DATA
{
4003 LONGLONG FileOffset
;
4005 } REQUEST_RAW_ENCRYPTED_DATA
, *PREQUEST_RAW_ENCRYPTED_DATA
;
4007 typedef struct _ENCRYPTED_DATA_INFO
{
4008 ULONGLONG StartingFileOffset
;
4009 ULONG OutputBufferOffset
;
4010 ULONG BytesWithinFileSize
;
4011 ULONG BytesWithinValidDataLength
;
4012 USHORT CompressionFormat
;
4013 UCHAR DataUnitShift
;
4016 UCHAR EncryptionFormat
;
4017 USHORT NumberOfDataBlocks
;
4018 ULONG DataBlockSize
[ANYSIZE_ARRAY
];
4019 } ENCRYPTED_DATA_INFO
, *PENCRYPTED_DATA_INFO
;
4021 typedef struct _PLEX_READ_DATA_REQUEST
{
4022 LARGE_INTEGER ByteOffset
;
4025 } PLEX_READ_DATA_REQUEST
, *PPLEX_READ_DATA_REQUEST
;
4027 typedef struct _SI_COPYFILE
{
4028 ULONG SourceFileNameLength
;
4029 ULONG DestinationFileNameLength
;
4031 WCHAR FileNameBuffer
[1];
4032 } SI_COPYFILE
, *PSI_COPYFILE
;
4034 #define COPYFILE_SIS_LINK 0x0001
4035 #define COPYFILE_SIS_REPLACE 0x0002
4036 #define COPYFILE_SIS_FLAGS 0x0003
4038 #endif /* (_WIN32_WINNT >= 0x0500) */
4040 #if (_WIN32_WINNT >= 0x0600)
4042 typedef struct _FILE_MAKE_COMPATIBLE_BUFFER
{
4044 } FILE_MAKE_COMPATIBLE_BUFFER
, *PFILE_MAKE_COMPATIBLE_BUFFER
;
4046 typedef struct _FILE_SET_DEFECT_MGMT_BUFFER
{
4048 } FILE_SET_DEFECT_MGMT_BUFFER
, *PFILE_SET_DEFECT_MGMT_BUFFER
;
4050 typedef struct _FILE_QUERY_SPARING_BUFFER
{
4051 ULONG SparingUnitBytes
;
4052 BOOLEAN SoftwareSparing
;
4053 ULONG TotalSpareBlocks
;
4054 ULONG FreeSpareBlocks
;
4055 } FILE_QUERY_SPARING_BUFFER
, *PFILE_QUERY_SPARING_BUFFER
;
4057 typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER
{
4058 LARGE_INTEGER DirectoryCount
;
4059 LARGE_INTEGER FileCount
;
4060 USHORT FsFormatMajVersion
;
4061 USHORT FsFormatMinVersion
;
4062 WCHAR FsFormatName
[12];
4063 LARGE_INTEGER FormatTime
;
4064 LARGE_INTEGER LastUpdateTime
;
4065 WCHAR CopyrightInfo
[34];
4066 WCHAR AbstractInfo
[34];
4067 WCHAR FormattingImplementationInfo
[34];
4068 WCHAR LastModifyingImplementationInfo
[34];
4069 } FILE_QUERY_ON_DISK_VOL_INFO_BUFFER
, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER
;
4071 #define SET_REPAIR_ENABLED (0x00000001)
4072 #define SET_REPAIR_VOLUME_BITMAP_SCAN (0x00000002)
4073 #define SET_REPAIR_DELETE_CROSSLINK (0x00000004)
4074 #define SET_REPAIR_WARN_ABOUT_DATA_LOSS (0x00000008)
4075 #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT (0x00000010)
4076 #define SET_REPAIR_VALID_MASK (0x0000001F)
4078 typedef enum _SHRINK_VOLUME_REQUEST_TYPES
{
4082 } SHRINK_VOLUME_REQUEST_TYPES
, *PSHRINK_VOLUME_REQUEST_TYPES
;
4084 typedef struct _SHRINK_VOLUME_INFORMATION
{
4085 SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType
;
4087 LONGLONG NewNumberOfSectors
;
4088 } SHRINK_VOLUME_INFORMATION
, *PSHRINK_VOLUME_INFORMATION
;
4090 #define TXFS_RM_FLAG_LOGGING_MODE 0x00000001
4091 #define TXFS_RM_FLAG_RENAME_RM 0x00000002
4092 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004
4093 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008
4094 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010
4095 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020
4096 #define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040
4097 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080
4098 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100
4099 #define TXFS_RM_FLAG_GROW_LOG 0x00000400
4100 #define TXFS_RM_FLAG_SHRINK_LOG 0x00000800
4101 #define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000
4102 #define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000
4103 #define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000
4104 #define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000
4105 #define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000
4106 #define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000
4108 #define TXFS_LOGGING_MODE_SIMPLE (0x0001)
4109 #define TXFS_LOGGING_MODE_FULL (0x0002)
4111 #define TXFS_TRANSACTION_STATE_NONE 0x00
4112 #define TXFS_TRANSACTION_STATE_ACTIVE 0x01
4113 #define TXFS_TRANSACTION_STATE_PREPARED 0x02
4114 #define TXFS_TRANSACTION_STATE_NOTACTIVE 0x03
4116 #define TXFS_MODIFY_RM_VALID_FLAGS (TXFS_RM_FLAG_LOGGING_MODE | \
4117 TXFS_RM_FLAG_RENAME_RM | \
4118 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
4119 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
4120 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
4121 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
4122 TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
4123 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
4124 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
4125 TXFS_RM_FLAG_SHRINK_LOG | \
4126 TXFS_RM_FLAG_GROW_LOG | \
4127 TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE | \
4128 TXFS_RM_FLAG_PRESERVE_CHANGES | \
4129 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
4130 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
4131 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
4132 TXFS_RM_FLAG_PREFER_AVAILABILITY)
4134 typedef struct _TXFS_MODIFY_RM
{
4136 ULONG LogContainerCountMax
;
4137 ULONG LogContainerCountMin
;
4138 ULONG LogContainerCount
;
4139 ULONG LogGrowthIncrement
;
4140 ULONG LogAutoShrinkPercentage
;
4143 } TXFS_MODIFY_RM
, *PTXFS_MODIFY_RM
;
4145 #define TXFS_RM_STATE_NOT_STARTED 0
4146 #define TXFS_RM_STATE_STARTING 1
4147 #define TXFS_RM_STATE_ACTIVE 2
4148 #define TXFS_RM_STATE_SHUTTING_DOWN 3
4150 #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS \
4151 (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
4152 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
4153 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
4154 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
4155 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
4156 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
4157 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
4158 TXFS_RM_FLAG_PREFER_AVAILABILITY)
4160 typedef struct _TXFS_QUERY_RM_INFORMATION
{
4161 ULONG BytesRequired
;
4163 ULONGLONG CurrentLsn
;
4164 ULONGLONG ArchiveTailLsn
;
4165 ULONGLONG LogContainerSize
;
4166 LARGE_INTEGER HighestVirtualClock
;
4167 ULONG LogContainerCount
;
4168 ULONG LogContainerCountMax
;
4169 ULONG LogContainerCountMin
;
4170 ULONG LogGrowthIncrement
;
4171 ULONG LogAutoShrinkPercentage
;
4176 ULONGLONG LogCapacity
;
4180 ULONGLONG TransactionCount
;
4181 ULONGLONG OnePCCount
;
4182 ULONGLONG TwoPCCount
;
4183 ULONGLONG NumberLogFileFull
;
4184 ULONGLONG OldestTransactionAge
;
4186 ULONG TmLogPathOffset
;
4187 } TXFS_QUERY_RM_INFORMATION
, *PTXFS_QUERY_RM_INFORMATION
;
4189 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x01
4190 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x02
4192 #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS \
4193 (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN | \
4194 TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK)
4196 typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION
{
4197 LARGE_INTEGER LastVirtualClock
;
4198 ULONGLONG LastRedoLsn
;
4199 ULONGLONG HighestRecoveryLsn
;
4201 } TXFS_ROLLFORWARD_REDO_INFORMATION
, *PTXFS_ROLLFORWARD_REDO_INFORMATION
;
4203 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001
4204 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002
4205 #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004
4206 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008
4207 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010
4208 #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020
4209 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040
4210 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080
4212 #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200
4213 #define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400
4214 #define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800
4216 #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000
4217 #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000
4219 #define TXFS_START_RM_VALID_FLAGS \
4220 (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
4221 TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
4222 TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE | \
4223 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
4224 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
4225 TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
4226 TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT | \
4227 TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
4228 TXFS_START_RM_FLAG_LOGGING_MODE | \
4229 TXFS_START_RM_FLAG_PRESERVE_CHANGES | \
4230 TXFS_START_RM_FLAG_PREFER_CONSISTENCY | \
4231 TXFS_START_RM_FLAG_PREFER_AVAILABILITY)
4233 typedef struct _TXFS_START_RM_INFORMATION
{
4235 ULONGLONG LogContainerSize
;
4236 ULONG LogContainerCountMin
;
4237 ULONG LogContainerCountMax
;
4238 ULONG LogGrowthIncrement
;
4239 ULONG LogAutoShrinkPercentage
;
4240 ULONG TmLogPathOffset
;
4241 USHORT TmLogPathLength
;
4243 USHORT LogPathLength
;
4246 } TXFS_START_RM_INFORMATION
, *PTXFS_START_RM_INFORMATION
;
4248 typedef struct _TXFS_GET_METADATA_INFO_OUT
{
4253 GUID LockingTransaction
;
4255 ULONG TransactionState
;
4256 } TXFS_GET_METADATA_INFO_OUT
, *PTXFS_GET_METADATA_INFO_OUT
;
4258 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001
4259 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x00000002
4261 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
{
4269 } TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
;
4271 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES
{
4272 GUID KtmTransaction
;
4273 ULONGLONG NumberOfFiles
;
4274 ULONGLONG BufferSizeRequired
;
4276 } TXFS_LIST_TRANSACTION_LOCKED_FILES
, *PTXFS_LIST_TRANSACTION_LOCKED_FILES
;
4278 typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY
{
4280 ULONG TransactionState
;
4284 } TXFS_LIST_TRANSACTIONS_ENTRY
, *PTXFS_LIST_TRANSACTIONS_ENTRY
;
4286 typedef struct _TXFS_LIST_TRANSACTIONS
{
4287 ULONGLONG NumberOfTransactions
;
4288 ULONGLONG BufferSizeRequired
;
4289 } TXFS_LIST_TRANSACTIONS
, *PTXFS_LIST_TRANSACTIONS
;
4291 typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT
{
4292 _ANONYMOUS_UNION
union {
4296 } TXFS_READ_BACKUP_INFORMATION_OUT
, *PTXFS_READ_BACKUP_INFORMATION_OUT
;
4298 typedef struct _TXFS_WRITE_BACKUP_INFORMATION
{
4300 } TXFS_WRITE_BACKUP_INFORMATION
, *PTXFS_WRITE_BACKUP_INFORMATION
;
4302 #define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFE
4303 #define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFF
4305 typedef struct _TXFS_GET_TRANSACTED_VERSION
{
4306 ULONG ThisBaseVersion
;
4307 ULONG LatestVersion
;
4308 USHORT ThisMiniVersion
;
4309 USHORT FirstMiniVersion
;
4310 USHORT LatestMiniVersion
;
4311 } TXFS_GET_TRANSACTED_VERSION
, *PTXFS_GET_TRANSACTED_VERSION
;
4313 #define TXFS_SAVEPOINT_SET 0x00000001
4314 #define TXFS_SAVEPOINT_ROLLBACK 0x00000002
4315 #define TXFS_SAVEPOINT_CLEAR 0x00000004
4316 #define TXFS_SAVEPOINT_CLEAR_ALL 0x00000010
4318 typedef struct _TXFS_SAVEPOINT_INFORMATION
{
4319 HANDLE KtmTransaction
;
4322 } TXFS_SAVEPOINT_INFORMATION
, *PTXFS_SAVEPOINT_INFORMATION
;
4324 typedef struct _TXFS_CREATE_MINIVERSION_INFO
{
4325 USHORT StructureVersion
;
4326 USHORT StructureLength
;
4329 } TXFS_CREATE_MINIVERSION_INFO
, *PTXFS_CREATE_MINIVERSION_INFO
;
4331 typedef struct _TXFS_TRANSACTION_ACTIVE_INFO
{
4332 BOOLEAN TransactionsActiveAtSnapshot
;
4333 } TXFS_TRANSACTION_ACTIVE_INFO
, *PTXFS_TRANSACTION_ACTIVE_INFO
;
4335 #endif /* (_WIN32_WINNT >= 0x0600) */
4337 #if (_WIN32_WINNT >= 0x0601)
4339 #define MARK_HANDLE_REALTIME (0x00000020)
4340 #define MARK_HANDLE_NOT_REALTIME (0x00000040)
4342 #define NO_8DOT3_NAME_PRESENT (0x00000001)
4343 #define REMOVED_8DOT3_NAME (0x00000002)
4345 #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED (0x00000001)
4347 typedef struct _BOOT_AREA_INFO
{
4348 ULONG BootSectorCount
;
4350 LARGE_INTEGER Offset
;
4352 } BOOT_AREA_INFO
, *PBOOT_AREA_INFO
;
4354 typedef struct _RETRIEVAL_POINTER_BASE
{
4355 LARGE_INTEGER FileAreaOffset
;
4356 } RETRIEVAL_POINTER_BASE
, *PRETRIEVAL_POINTER_BASE
;
4358 typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION
{
4363 } FILE_FS_PERSISTENT_VOLUME_INFORMATION
, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION
;
4365 typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION
{
4367 } FILE_SYSTEM_RECOGNITION_INFORMATION
, *PFILE_SYSTEM_RECOGNITION_INFORMATION
;
4369 #define OPLOCK_LEVEL_CACHE_READ (0x00000001)
4370 #define OPLOCK_LEVEL_CACHE_HANDLE (0x00000002)
4371 #define OPLOCK_LEVEL_CACHE_WRITE (0x00000004)
4373 #define REQUEST_OPLOCK_INPUT_FLAG_REQUEST (0x00000001)
4374 #define REQUEST_OPLOCK_INPUT_FLAG_ACK (0x00000002)
4375 #define REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE (0x00000004)
4377 #define REQUEST_OPLOCK_CURRENT_VERSION 1
4379 typedef struct _REQUEST_OPLOCK_INPUT_BUFFER
{
4380 USHORT StructureVersion
;
4381 USHORT StructureLength
;
4382 ULONG RequestedOplockLevel
;
4384 } REQUEST_OPLOCK_INPUT_BUFFER
, *PREQUEST_OPLOCK_INPUT_BUFFER
;
4386 #define REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED (0x00000001)
4387 #define REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED (0x00000002)
4389 typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER
{
4390 USHORT StructureVersion
;
4391 USHORT StructureLength
;
4392 ULONG OriginalOplockLevel
;
4393 ULONG NewOplockLevel
;
4395 ACCESS_MASK AccessMode
;
4397 } REQUEST_OPLOCK_OUTPUT_BUFFER
, *PREQUEST_OPLOCK_OUTPUT_BUFFER
;
4399 #define SD_GLOBAL_CHANGE_TYPE_MACHINE_SID 1
4401 typedef struct _SD_CHANGE_MACHINE_SID_INPUT
{
4402 USHORT CurrentMachineSIDOffset
;
4403 USHORT CurrentMachineSIDLength
;
4404 USHORT NewMachineSIDOffset
;
4405 USHORT NewMachineSIDLength
;
4406 } SD_CHANGE_MACHINE_SID_INPUT
, *PSD_CHANGE_MACHINE_SID_INPUT
;
4408 typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT
{
4409 ULONGLONG NumSDChangedSuccess
;
4410 ULONGLONG NumSDChangedFail
;
4411 ULONGLONG NumSDUnused
;
4412 ULONGLONG NumSDTotal
;
4413 ULONGLONG NumMftSDChangedSuccess
;
4414 ULONGLONG NumMftSDChangedFail
;
4415 ULONGLONG NumMftSDTotal
;
4416 } SD_CHANGE_MACHINE_SID_OUTPUT
, *PSD_CHANGE_MACHINE_SID_OUTPUT
;
4418 typedef struct _SD_GLOBAL_CHANGE_INPUT
{
4421 _ANONYMOUS_UNION
union {
4422 SD_CHANGE_MACHINE_SID_INPUT SdChange
;
4424 } SD_GLOBAL_CHANGE_INPUT
, *PSD_GLOBAL_CHANGE_INPUT
;
4426 typedef struct _SD_GLOBAL_CHANGE_OUTPUT
{
4429 _ANONYMOUS_UNION
union {
4430 SD_CHANGE_MACHINE_SID_OUTPUT SdChange
;
4432 } SD_GLOBAL_CHANGE_OUTPUT
, *PSD_GLOBAL_CHANGE_OUTPUT
;
4434 #define ENCRYPTED_DATA_INFO_SPARSE_FILE 1
4436 typedef struct _EXTENDED_ENCRYPTED_DATA_INFO
{
4441 } EXTENDED_ENCRYPTED_DATA_INFO
, *PEXTENDED_ENCRYPTED_DATA_INFO
;
4443 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT
{
4445 ULONG NumberOfClusters
;
4446 LARGE_INTEGER Cluster
[1];
4447 } LOOKUP_STREAM_FROM_CLUSTER_INPUT
, *PLOOKUP_STREAM_FROM_CLUSTER_INPUT
;
4449 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT
{
4451 ULONG NumberOfMatches
;
4452 ULONG BufferSizeRequired
;
4453 } LOOKUP_STREAM_FROM_CLUSTER_OUTPUT
, *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT
;
4455 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE 0x00000001
4456 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET 0x00000002
4457 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE 0x00000004
4458 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE 0x00000008
4460 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK 0xff000000
4461 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA 0x01000000
4462 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX 0x02000000
4463 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM 0x03000000
4465 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY
{
4468 LARGE_INTEGER Reserved
;
4469 LARGE_INTEGER Cluster
;
4471 } LOOKUP_STREAM_FROM_CLUSTER_ENTRY
, *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY
;
4473 typedef struct _FILE_TYPE_NOTIFICATION_INPUT
{
4475 ULONG NumFileTypeIDs
;
4477 } FILE_TYPE_NOTIFICATION_INPUT
, *PFILE_TYPE_NOTIFICATION_INPUT
;
4479 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_BEGIN 0x00000001
4480 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_END 0x00000002
4482 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_PAGE_FILE
, 0x0d0a64a1, 0x38fc, 0x4db8, 0x9f, 0xe7, 0x3f, 0x43, 0x52, 0xcd, 0x7c, 0x5c);
4483 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_HIBERNATION_FILE
, 0xb7624d64, 0xb9a3, 0x4cf8, 0x80, 0x11, 0x5b, 0x86, 0xc9, 0x40, 0xe7, 0xb7);
4484 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_CRASHDUMP_FILE
, 0x9d453eb7, 0xd2a6, 0x4dbd, 0xa2, 0xe3, 0xfb, 0xd0, 0xed, 0x91, 0x09, 0xa9);
4486 #ifndef _VIRTUAL_STORAGE_TYPE_DEFINED
4487 #define _VIRTUAL_STORAGE_TYPE_DEFINED
4488 typedef struct _VIRTUAL_STORAGE_TYPE
{
4491 } VIRTUAL_STORAGE_TYPE
, *PVIRTUAL_STORAGE_TYPE
;
4494 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
{
4497 } STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
;
4499 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_HOST_VOLUMES 0x1
4500 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_GUEST_VOLUMES 0x2
4502 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
{
4504 ULONG DependencyTypeFlags
;
4505 ULONG ProviderSpecificFlags
;
4506 VIRTUAL_STORAGE_TYPE VirtualStorageType
;
4507 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
;
4509 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
{
4511 ULONG DependencyTypeFlags
;
4512 ULONG ProviderSpecificFlags
;
4513 VIRTUAL_STORAGE_TYPE VirtualStorageType
;
4514 ULONG AncestorLevel
;
4515 ULONG HostVolumeNameOffset
;
4516 ULONG HostVolumeNameSize
;
4517 ULONG DependentVolumeNameOffset
;
4518 ULONG DependentVolumeNameSize
;
4519 ULONG RelativePathOffset
;
4520 ULONG RelativePathSize
;
4521 ULONG DependentDeviceNameOffset
;
4522 ULONG DependentDeviceNameSize
;
4523 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
;
4525 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
{
4526 ULONG ResponseLevel
;
4527 ULONG NumberEntries
;
4528 _ANONYMOUS_UNION
union {
4529 STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY Lev1Depends
[0];
4530 STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY Lev2Depends
[0];
4532 } STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
;
4534 #endif /* (_WIN32_WINNT >= 0x0601) */
4536 typedef struct _FILESYSTEM_STATISTICS
{
4537 USHORT FileSystemType
;
4539 ULONG SizeOfCompleteStructure
;
4540 ULONG UserFileReads
;
4541 ULONG UserFileReadBytes
;
4542 ULONG UserDiskReads
;
4543 ULONG UserFileWrites
;
4544 ULONG UserFileWriteBytes
;
4545 ULONG UserDiskWrites
;
4546 ULONG MetaDataReads
;
4547 ULONG MetaDataReadBytes
;
4548 ULONG MetaDataDiskReads
;
4549 ULONG MetaDataWrites
;
4550 ULONG MetaDataWriteBytes
;
4551 ULONG MetaDataDiskWrites
;
4552 } FILESYSTEM_STATISTICS
, *PFILESYSTEM_STATISTICS
;
4554 #define FILESYSTEM_STATISTICS_TYPE_NTFS 1
4555 #define FILESYSTEM_STATISTICS_TYPE_FAT 2
4556 #define FILESYSTEM_STATISTICS_TYPE_EXFAT 3
4558 typedef struct _FAT_STATISTICS
{
4560 ULONG SuccessfulCreates
;
4561 ULONG FailedCreates
;
4562 ULONG NonCachedReads
;
4563 ULONG NonCachedReadBytes
;
4564 ULONG NonCachedWrites
;
4565 ULONG NonCachedWriteBytes
;
4566 ULONG NonCachedDiskReads
;
4567 ULONG NonCachedDiskWrites
;
4568 } FAT_STATISTICS
, *PFAT_STATISTICS
;
4570 typedef struct _EXFAT_STATISTICS
{
4572 ULONG SuccessfulCreates
;
4573 ULONG FailedCreates
;
4574 ULONG NonCachedReads
;
4575 ULONG NonCachedReadBytes
;
4576 ULONG NonCachedWrites
;
4577 ULONG NonCachedWriteBytes
;
4578 ULONG NonCachedDiskReads
;
4579 ULONG NonCachedDiskWrites
;
4580 } EXFAT_STATISTICS
, *PEXFAT_STATISTICS
;
4582 typedef struct _NTFS_STATISTICS
{
4583 ULONG LogFileFullExceptions
;
4584 ULONG OtherExceptions
;
4588 ULONG MftWriteBytes
;
4594 } MftWritesUserLevel
;
4595 USHORT MftWritesFlushForLogFileFull
;
4596 USHORT MftWritesLazyWriter
;
4597 USHORT MftWritesUserRequest
;
4599 ULONG Mft2WriteBytes
;
4605 } Mft2WritesUserLevel
;
4606 USHORT Mft2WritesFlushForLogFileFull
;
4607 USHORT Mft2WritesLazyWriter
;
4608 USHORT Mft2WritesUserRequest
;
4609 ULONG RootIndexReads
;
4610 ULONG RootIndexReadBytes
;
4611 ULONG RootIndexWrites
;
4612 ULONG RootIndexWriteBytes
;
4614 ULONG BitmapReadBytes
;
4616 ULONG BitmapWriteBytes
;
4617 USHORT BitmapWritesFlushForLogFileFull
;
4618 USHORT BitmapWritesLazyWriter
;
4619 USHORT BitmapWritesUserRequest
;
4624 } BitmapWritesUserLevel
;
4625 ULONG MftBitmapReads
;
4626 ULONG MftBitmapReadBytes
;
4627 ULONG MftBitmapWrites
;
4628 ULONG MftBitmapWriteBytes
;
4629 USHORT MftBitmapWritesFlushForLogFileFull
;
4630 USHORT MftBitmapWritesLazyWriter
;
4631 USHORT MftBitmapWritesUserRequest
;
4637 } MftBitmapWritesUserLevel
;
4638 ULONG UserIndexReads
;
4639 ULONG UserIndexReadBytes
;
4640 ULONG UserIndexWrites
;
4641 ULONG UserIndexWriteBytes
;
4643 ULONG LogFileReadBytes
;
4644 ULONG LogFileWrites
;
4645 ULONG LogFileWriteBytes
;
4652 ULONG HintsClusters
;
4654 ULONG CacheClusters
;
4656 ULONG CacheMissClusters
;
4658 } NTFS_STATISTICS
, *PNTFS_STATISTICS
;
4660 #endif /* _FILESYSTEMFSCTL_ */
4662 #define SYMLINK_FLAG_RELATIVE 1
4664 typedef struct _REPARSE_DATA_BUFFER
{
4666 USHORT ReparseDataLength
;
4668 _ANONYMOUS_UNION
union {
4670 USHORT SubstituteNameOffset
;
4671 USHORT SubstituteNameLength
;
4672 USHORT PrintNameOffset
;
4673 USHORT PrintNameLength
;
4675 WCHAR PathBuffer
[1];
4676 } SymbolicLinkReparseBuffer
;
4678 USHORT SubstituteNameOffset
;
4679 USHORT SubstituteNameLength
;
4680 USHORT PrintNameOffset
;
4681 USHORT PrintNameLength
;
4682 WCHAR PathBuffer
[1];
4683 } MountPointReparseBuffer
;
4685 UCHAR DataBuffer
[1];
4686 } GenericReparseBuffer
;
4688 } REPARSE_DATA_BUFFER
, *PREPARSE_DATA_BUFFER
;
4690 #define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
4692 typedef struct _REPARSE_GUID_DATA_BUFFER
{
4694 USHORT ReparseDataLength
;
4698 UCHAR DataBuffer
[1];
4699 } GenericReparseBuffer
;
4700 } REPARSE_GUID_DATA_BUFFER
, *PREPARSE_GUID_DATA_BUFFER
;
4702 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
4704 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 )
4706 /* Reserved reparse tags */
4707 #define IO_REPARSE_TAG_RESERVED_ZERO (0)
4708 #define IO_REPARSE_TAG_RESERVED_ONE (1)
4709 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
4711 #define IsReparseTagMicrosoft(_tag) (((_tag) & 0x80000000))
4712 #define IsReparseTagNameSurrogate(_tag) (((_tag) & 0x20000000))
4714 #define IO_REPARSE_TAG_VALID_VALUES (0xF000FFFF)
4716 #define IsReparseTagValid(tag) ( \
4717 !((tag) & ~IO_REPARSE_TAG_VALID_VALUES) && \
4718 ((tag) > IO_REPARSE_TAG_RESERVED_RANGE) \
4721 /* MicroSoft reparse point tags */
4722 #define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
4723 #define IO_REPARSE_TAG_HSM (0xC0000004L)
4724 #define IO_REPARSE_TAG_DRIVE_EXTENDER (0x80000005L)
4725 #define IO_REPARSE_TAG_HSM2 (0x80000006L)
4726 #define IO_REPARSE_TAG_SIS (0x80000007L)
4727 #define IO_REPARSE_TAG_WIM (0x80000008L)
4728 #define IO_REPARSE_TAG_CSV (0x80000009L)
4729 #define IO_REPARSE_TAG_DFS (0x8000000AL)
4730 #define IO_REPARSE_TAG_FILTER_MANAGER (0x8000000BL)
4731 #define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
4732 #define IO_REPARSE_TAG_IIS_CACHE (0xA0000010L)
4733 #define IO_REPARSE_TAG_DFSR (0x80000012L)
4736 typedef struct _REPARSE_INDEX_KEY
{
4737 ULONG FileReparseTag
;
4738 LARGE_INTEGER FileId
;
4739 } REPARSE_INDEX_KEY
, *PREPARSE_INDEX_KEY
;
4742 #define FSCTL_LMR_GET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,58,METHOD_BUFFERED,FILE_ANY_ACCESS)
4743 #define FSCTL_LMR_SET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,59,METHOD_BUFFERED,FILE_ANY_ACCESS)
4744 #define IOCTL_LMR_ARE_FILE_OBJECTS_ON_SAME_SERVER CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS)
4746 #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
4747 #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
4748 #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
4749 #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
4750 #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
4751 #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
4752 #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
4753 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
4754 #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
4755 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
4756 #define FSCTL_PIPE_GET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
4757 #define FSCTL_PIPE_SET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
4758 #define FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
4759 #define FSCTL_PIPE_SET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
4760 #define FSCTL_PIPE_GET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
4761 #define FSCTL_PIPE_SET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
4762 #define FSCTL_PIPE_FLUSH CTL_CODE(FILE_DEVICE_NAMED_PIPE, 16, METHOD_BUFFERED, FILE_WRITE_DATA)
4764 #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
4765 #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
4766 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
4767 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
4769 #define FILE_PIPE_READ_DATA 0x00000000
4770 #define FILE_PIPE_WRITE_SPACE 0x00000001
4772 typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER
{
4775 } FILE_PIPE_ASSIGN_EVENT_BUFFER
, *PFILE_PIPE_ASSIGN_EVENT_BUFFER
;
4777 typedef struct _FILE_PIPE_EVENT_BUFFER
{
4778 ULONG NamedPipeState
;
4782 ULONG NumberRequests
;
4783 } FILE_PIPE_EVENT_BUFFER
, *PFILE_PIPE_EVENT_BUFFER
;
4785 typedef struct _FILE_PIPE_PEEK_BUFFER
{
4786 ULONG NamedPipeState
;
4787 ULONG ReadDataAvailable
;
4788 ULONG NumberOfMessages
;
4789 ULONG MessageLength
;
4791 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
4793 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
{
4794 LARGE_INTEGER Timeout
;
4796 BOOLEAN TimeoutSpecified
;
4798 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
4800 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER
{
4801 #if !defined(BUILD_WOW6432)
4802 PVOID ClientSession
;
4803 PVOID ClientProcess
;
4805 ULONGLONG ClientSession
;
4806 ULONGLONG ClientProcess
;
4808 } FILE_PIPE_CLIENT_PROCESS_BUFFER
, *PFILE_PIPE_CLIENT_PROCESS_BUFFER
;
4810 #define FILE_PIPE_COMPUTER_NAME_LENGTH 15
4812 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER_EX
{
4813 #if !defined(BUILD_WOW6432)
4814 PVOID ClientSession
;
4815 PVOID ClientProcess
;
4817 ULONGLONG ClientSession
;
4818 ULONGLONG ClientProcess
;
4820 USHORT ClientComputerNameLength
;
4821 WCHAR ClientComputerBuffer
[FILE_PIPE_COMPUTER_NAME_LENGTH
+1];
4822 } FILE_PIPE_CLIENT_PROCESS_BUFFER_EX
, *PFILE_PIPE_CLIENT_PROCESS_BUFFER_EX
;
4824 #define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
4826 typedef enum _LINK_TRACKING_INFORMATION_TYPE
{
4827 NtfsLinkTrackingInformation
,
4828 DfsLinkTrackingInformation
4829 } LINK_TRACKING_INFORMATION_TYPE
, *PLINK_TRACKING_INFORMATION_TYPE
;
4831 typedef struct _LINK_TRACKING_INFORMATION
{
4832 LINK_TRACKING_INFORMATION_TYPE Type
;
4834 } LINK_TRACKING_INFORMATION
, *PLINK_TRACKING_INFORMATION
;
4836 typedef struct _REMOTE_LINK_TRACKING_INFORMATION
{
4837 PVOID TargetFileObject
;
4838 ULONG TargetLinkTrackingInformationLength
;
4839 UCHAR TargetLinkTrackingInformationBuffer
[1];
4840 } REMOTE_LINK_TRACKING_INFORMATION
, *PREMOTE_LINK_TRACKING_INFORMATION
;
4842 #define IO_OPEN_PAGING_FILE 0x0002
4843 #define IO_OPEN_TARGET_DIRECTORY 0x0004
4844 #define IO_STOP_ON_SYMLINK 0x0008
4845 #define IO_MM_PAGING_FILE 0x0010
4848 (NTAPI
*PDRIVER_FS_NOTIFICATION
) (
4849 _In_ PDEVICE_OBJECT DeviceObject
,
4850 _In_ BOOLEAN FsActive
);
4852 typedef enum _FS_FILTER_SECTION_SYNC_TYPE
{
4854 SyncTypeCreateSection
4855 } FS_FILTER_SECTION_SYNC_TYPE
, *PFS_FILTER_SECTION_SYNC_TYPE
;
4857 typedef enum _FS_FILTER_STREAM_FO_NOTIFICATION_TYPE
{
4858 NotifyTypeCreate
= 0,
4860 } FS_FILTER_STREAM_FO_NOTIFICATION_TYPE
, *PFS_FILTER_STREAM_FO_NOTIFICATION_TYPE
;
4862 typedef union _FS_FILTER_PARAMETERS
{
4864 PLARGE_INTEGER EndingOffset
;
4865 PERESOURCE
*ResourceToRelease
;
4866 } AcquireForModifiedPageWriter
;
4868 PERESOURCE ResourceToRelease
;
4869 } ReleaseForModifiedPageWriter
;
4871 FS_FILTER_SECTION_SYNC_TYPE SyncType
;
4872 ULONG PageProtection
;
4873 } AcquireForSectionSynchronization
;
4875 FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType
;
4876 BOOLEAN POINTER_ALIGNMENT SafeToRecurse
;
4877 } NotifyStreamFileObject
;
4885 } FS_FILTER_PARAMETERS
, *PFS_FILTER_PARAMETERS
;
4887 #define FS_FILTER_ACQUIRE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-1
4888 #define FS_FILTER_RELEASE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-2
4889 #define FS_FILTER_ACQUIRE_FOR_MOD_WRITE (UCHAR)-3
4890 #define FS_FILTER_RELEASE_FOR_MOD_WRITE (UCHAR)-4
4891 #define FS_FILTER_ACQUIRE_FOR_CC_FLUSH (UCHAR)-5
4892 #define FS_FILTER_RELEASE_FOR_CC_FLUSH (UCHAR)-6
4894 typedef struct _FS_FILTER_CALLBACK_DATA
{
4895 ULONG SizeOfFsFilterCallbackData
;
4898 struct _DEVICE_OBJECT
*DeviceObject
;
4899 struct _FILE_OBJECT
*FileObject
;
4900 FS_FILTER_PARAMETERS Parameters
;
4901 } FS_FILTER_CALLBACK_DATA
, *PFS_FILTER_CALLBACK_DATA
;
4904 (NTAPI
*PFS_FILTER_CALLBACK
) (
4905 _In_ PFS_FILTER_CALLBACK_DATA Data
,
4906 _Out_ PVOID
*CompletionContext
);
4909 (NTAPI
*PFS_FILTER_COMPLETION_CALLBACK
) (
4910 _In_ PFS_FILTER_CALLBACK_DATA Data
,
4911 _In_ NTSTATUS OperationStatus
,
4912 _In_ PVOID CompletionContext
);
4914 typedef struct _FS_FILTER_CALLBACKS
{
4915 ULONG SizeOfFsFilterCallbacks
;
4917 PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization
;
4918 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization
;
4919 PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization
;
4920 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization
;
4921 PFS_FILTER_CALLBACK PreAcquireForCcFlush
;
4922 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush
;
4923 PFS_FILTER_CALLBACK PreReleaseForCcFlush
;
4924 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush
;
4925 PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter
;
4926 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter
;
4927 PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter
;
4928 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter
;
4929 } FS_FILTER_CALLBACKS
, *PFS_FILTER_CALLBACKS
;
4931 extern NTKERNELAPI KSPIN_LOCK IoStatisticsLock
;
4932 extern NTKERNELAPI ULONG IoReadOperationCount
;
4933 extern NTKERNELAPI ULONG IoWriteOperationCount
;
4934 extern NTKERNELAPI ULONG IoOtherOperationCount
;
4935 extern NTKERNELAPI LARGE_INTEGER IoReadTransferCount
;
4936 extern NTKERNELAPI LARGE_INTEGER IoWriteTransferCount
;
4937 extern NTKERNELAPI LARGE_INTEGER IoOtherTransferCount
;
4939 #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64
4940 #define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024
4942 #if (NTDDI_VERSION >= NTDDI_VISTA)
4943 typedef struct _IO_PRIORITY_INFO
{
4945 ULONG ThreadPriority
;
4947 IO_PRIORITY_HINT IoPriority
;
4948 } IO_PRIORITY_INFO
, *PIO_PRIORITY_INFO
;
4951 typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION
{
4953 ACCESS_MASK GrantedAccess
;
4957 } PUBLIC_OBJECT_BASIC_INFORMATION
, *PPUBLIC_OBJECT_BASIC_INFORMATION
;
4959 typedef struct _PUBLIC_OBJECT_TYPE_INFORMATION
{
4960 UNICODE_STRING TypeName
;
4961 ULONG Reserved
[22];
4962 } PUBLIC_OBJECT_TYPE_INFORMATION
, *PPUBLIC_OBJECT_TYPE_INFORMATION
;
4964 #define SYSTEM_PAGE_PRIORITY_BITS 3
4965 #define SYSTEM_PAGE_PRIORITY_LEVELS (1 << SYSTEM_PAGE_PRIORITY_BITS)
4967 /******************************************************************************
4969 ******************************************************************************/
4970 typedef struct _KAPC_STATE
{
4971 LIST_ENTRY ApcListHead
[MaximumMode
];
4973 BOOLEAN KernelApcInProgress
;
4974 BOOLEAN KernelApcPending
;
4975 BOOLEAN UserApcPending
;
4976 } KAPC_STATE
, *PKAPC_STATE
, *RESTRICTED_POINTER PRKAPC_STATE
;
4978 #define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
4980 #define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
4982 typedef struct _KQUEUE
{
4983 DISPATCHER_HEADER Header
;
4984 LIST_ENTRY EntryListHead
;
4985 volatile ULONG CurrentCount
;
4987 LIST_ENTRY ThreadListHead
;
4988 } KQUEUE
, *PKQUEUE
, *RESTRICTED_POINTER PRKQUEUE
;
4991 /******************************************************************************
4992 * Kernel Functions *
4993 ******************************************************************************/
4997 KeGetProcessorNumberFromIndex(
4998 _In_ ULONG ProcIndex
,
4999 _Out_ PPROCESSOR_NUMBER ProcNumber
);
5003 KeGetProcessorIndexFromNumber(
5004 _In_ PPROCESSOR_NUMBER ProcNumber
);
5006 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5015 _Out_ PRKMUTANT Mutant
,
5016 _In_ BOOLEAN InitialOwner
);
5018 _IRQL_requires_max_(DISPATCH_LEVEL
)
5023 _In_ PRKMUTANT Mutant
);
5025 _When_(Wait
==0, _IRQL_requires_max_(DISPATCH_LEVEL
))
5026 _When_(Wait
==1, _IRQL_requires_max_(APC_LEVEL
))
5031 _Inout_ PRKMUTANT Mutant
,
5032 _In_ KPRIORITY Increment
,
5033 _In_ BOOLEAN Abandoned
,
5040 _Out_ PRKQUEUE Queue
,
5043 _IRQL_requires_max_(DISPATCH_LEVEL
)
5048 _In_ PRKQUEUE Queue
);
5050 _IRQL_requires_min_(PASSIVE_LEVEL
)
5051 _IRQL_requires_max_(DISPATCH_LEVEL
)
5056 _Inout_ PRKQUEUE Queue
,
5057 _Inout_ PLIST_ENTRY Entry
);
5059 _IRQL_requires_min_(PASSIVE_LEVEL
)
5060 _IRQL_requires_max_(DISPATCH_LEVEL
)
5065 _Inout_ PRKQUEUE Queue
,
5066 _Inout_ PLIST_ENTRY Entry
);
5068 _IRQL_requires_min_(PASSIVE_LEVEL
)
5069 _When_((Timeout
==NULL
|| Timeout
->QuadPart
!=0), _IRQL_requires_max_(APC_LEVEL
))
5070 _When_((Timeout
!=NULL
&& Timeout
->QuadPart
==0), _IRQL_requires_max_(DISPATCH_LEVEL
))
5075 _Inout_ PRKQUEUE Queue
,
5076 _In_ KPROCESSOR_MODE WaitMode
,
5077 _In_opt_ PLARGE_INTEGER Timeout
);
5079 _IRQL_requires_max_(APC_LEVEL
)
5084 _Inout_ PKPROCESS Process
);
5086 _IRQL_requires_max_(APC_LEVEL
)
5090 KeDetachProcess(VOID
);
5092 _IRQL_requires_max_(DISPATCH_LEVEL
)
5097 _Inout_ PRKQUEUE Queue
);
5099 _IRQL_requires_max_(APC_LEVEL
)
5103 KeStackAttachProcess(
5104 _Inout_ PKPROCESS Process
,
5105 _Out_ PKAPC_STATE ApcState
);
5107 _IRQL_requires_max_(APC_LEVEL
)
5111 KeUnstackDetachProcess(
5112 _In_ PKAPC_STATE ApcState
);
5114 _IRQL_requires_min_(PASSIVE_LEVEL
)
5115 _IRQL_requires_max_(DISPATCH_LEVEL
)
5119 KeSetIdealProcessorThread(
5120 _Inout_ PKTHREAD Thread
,
5121 _In_ UCHAR Processor
);
5123 _IRQL_requires_max_(APC_LEVEL
)
5127 KeSetKernelStackSwapEnable(
5128 _In_ BOOLEAN Enable
);
5131 _Requires_lock_not_held_(*SpinLock
)
5132 _Acquires_lock_(*SpinLock
)
5133 _IRQL_raises_(SYNCH_LEVEL
)
5138 KeAcquireSpinLockRaiseToSynch(
5139 _Inout_ PKSPIN_LOCK SpinLock
);
5141 _Requires_lock_not_held_(*SpinLock
)
5142 _Acquires_lock_(*SpinLock
)
5143 _IRQL_raises_(SYNCH_LEVEL
)
5147 KeAcquireSpinLockRaiseToSynch(
5148 _Inout_ PKSPIN_LOCK SpinLock
);
5151 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5153 #if (NTDDI_VERSION >= NTDDI_WINXP)
5156 _Requires_lock_not_held_(Number
)
5157 _Acquires_lock_(Number
)
5158 _IRQL_raises_(DISPATCH_LEVEL
)
5162 KeAcquireQueuedSpinLock(
5163 _In_ KSPIN_LOCK_QUEUE_NUMBER Number
);
5165 _Requires_lock_held_(Number
)
5166 _Releases_lock_(Number
)
5170 KeReleaseQueuedSpinLock(
5171 _In_ KSPIN_LOCK_QUEUE_NUMBER Number
,
5172 _In_ KIRQL OldIrql
);
5174 _Must_inspect_result_
5175 _Post_satisfies_(return == 1 || return == 0)
5179 KeTryToAcquireQueuedSpinLock(
5180 _In_ KSPIN_LOCK_QUEUE_NUMBER Number
,
5181 _Out_
_At_(*OldIrql
, _IRQL_saves_
) PKIRQL OldIrql
);
5183 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5189 #if (NTDDI_VERSION >= NTDDI_VISTA)
5191 _IRQL_requires_max_(DISPATCH_LEVEL
)
5195 _In_ PKMUTANT Mutant
,
5196 _Out_ PCLIENT_ID ClientId
);
5198 _IRQL_requires_min_(PASSIVE_LEVEL
)
5199 _When_((Timeout
==NULL
|| *Timeout
!=0), _IRQL_requires_max_(APC_LEVEL
))
5200 _When_((Timeout
!=NULL
&& *Timeout
==0), _IRQL_requires_max_(DISPATCH_LEVEL
))
5205 _Inout_ PKQUEUE Queue
,
5206 _In_ KPROCESSOR_MODE WaitMode
,
5207 _In_ BOOLEAN Alertable
,
5208 _In_opt_ PLARGE_INTEGER Timeout
,
5209 _Out_writes_to_(Count
, return) PLIST_ENTRY
*EntryArray
,
5212 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5215 #define INVALID_PROCESSOR_INDEX 0xffffffff
5217 #define EX_PUSH_LOCK ULONG_PTR
5218 #define PEX_PUSH_LOCK PULONG_PTR
5219 /******************************************************************************
5220 * Executive Functions *
5221 ******************************************************************************/
5224 #define ExDisableResourceBoost ExDisableResourceBoostLite
5228 ExInitializePushLock(
5229 _Out_ PEX_PUSH_LOCK PushLock
);
5231 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5233 _IRQL_requires_max_(DISPATCH_LEVEL
)
5237 ExQueryPoolBlockSize(
5238 _In_ PVOID PoolBlock
,
5239 _Out_ PBOOLEAN QuotaCharged
);
5241 _IRQL_requires_max_(DISPATCH_LEVEL
)
5243 ExAdjustLookasideDepth(VOID
);
5245 _IRQL_requires_max_(DISPATCH_LEVEL
)
5249 ExDisableResourceBoostLite(
5250 _In_ PERESOURCE Resource
);
5251 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5253 #if (NTDDI_VERSION >= NTDDI_WINXP)
5257 InterlockedPushListSList(
5258 _Inout_ PSLIST_HEADER ListHead
,
5259 _Inout_ __drv_aliasesMem PSLIST_ENTRY List
,
5260 _Inout_ PSLIST_ENTRY ListEnd
,
5262 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5264 /******************************************************************************
5265 * Security Manager Functions *
5266 ******************************************************************************/
5268 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5274 SeReleaseSubjectContext(
5275 _Inout_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
5281 _Inout_ PPRIVILEGE_SET RequiredPrivileges
,
5282 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
,
5283 _In_ KPROCESSOR_MODE AccessMode
);
5288 SeOpenObjectAuditAlarm(
5289 _In_ PUNICODE_STRING ObjectTypeName
,
5290 _In_opt_ PVOID Object
,
5291 _In_opt_ PUNICODE_STRING AbsoluteObjectName
,
5292 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
5293 _In_ PACCESS_STATE AccessState
,
5294 _In_ BOOLEAN ObjectCreated
,
5295 _In_ BOOLEAN AccessGranted
,
5296 _In_ KPROCESSOR_MODE AccessMode
,
5297 _Out_ PBOOLEAN GenerateOnClose
);
5302 SeOpenObjectForDeleteAuditAlarm(
5303 _In_ PUNICODE_STRING ObjectTypeName
,
5304 _In_opt_ PVOID Object
,
5305 _In_opt_ PUNICODE_STRING AbsoluteObjectName
,
5306 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
5307 _In_ PACCESS_STATE AccessState
,
5308 _In_ BOOLEAN ObjectCreated
,
5309 _In_ BOOLEAN AccessGranted
,
5310 _In_ KPROCESSOR_MODE AccessMode
,
5311 _Out_ PBOOLEAN GenerateOnClose
);
5316 SeDeleteObjectAuditAlarm(
5318 _In_ HANDLE Handle
);
5324 _In_ PACCESS_TOKEN Token
);
5330 _In_ PACCESS_TOKEN Token
);
5335 SeTokenIsRestricted(
5336 _In_ PACCESS_TOKEN Token
);
5341 SeQueryAuthenticationIdToken(
5342 _In_ PACCESS_TOKEN Token
,
5343 _Out_ PLUID AuthenticationId
);
5348 SeQuerySessionIdToken(
5349 _In_ PACCESS_TOKEN Token
,
5350 _Out_ PULONG SessionId
);
5355 SeCreateClientSecurity(
5356 _In_ PETHREAD ClientThread
,
5357 _In_ PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos
,
5358 _In_ BOOLEAN RemoteSession
,
5359 _Out_ PSECURITY_CLIENT_CONTEXT ClientContext
);
5364 SeImpersonateClient(
5365 _In_ PSECURITY_CLIENT_CONTEXT ClientContext
,
5366 _In_opt_ PETHREAD ServerThread
);
5371 SeImpersonateClientEx(
5372 _In_ PSECURITY_CLIENT_CONTEXT ClientContext
,
5373 _In_opt_ PETHREAD ServerThread
);
5378 SeCreateClientSecurityFromSubjectContext(
5379 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
,
5380 _In_ PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos
,
5381 _In_ BOOLEAN ServerIsRemote
,
5382 _Out_ PSECURITY_CLIENT_CONTEXT ClientContext
);
5387 SeQuerySecurityDescriptorInfo(
5388 _In_ PSECURITY_INFORMATION SecurityInformation
,
5389 _Out_writes_bytes_(*Length
) PSECURITY_DESCRIPTOR SecurityDescriptor
,
5390 _Inout_ PULONG Length
,
5391 _Inout_ PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
);
5396 SeSetSecurityDescriptorInfo(
5397 _In_opt_ PVOID Object
,
5398 _In_ PSECURITY_INFORMATION SecurityInformation
,
5399 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
5400 _Inout_ PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
5401 _In_ POOL_TYPE PoolType
,
5402 _In_ PGENERIC_MAPPING GenericMapping
);
5407 SeSetSecurityDescriptorInfoEx(
5408 _In_opt_ PVOID Object
,
5409 _In_ PSECURITY_INFORMATION SecurityInformation
,
5410 _In_ PSECURITY_DESCRIPTOR ModificationDescriptor
,
5411 _Inout_ PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
5412 _In_ ULONG AutoInheritFlags
,
5413 _In_ POOL_TYPE PoolType
,
5414 _In_ PGENERIC_MAPPING GenericMapping
);
5420 _Inout_ PACCESS_STATE AccessState
,
5421 _In_ PPRIVILEGE_SET Privileges
);
5426 SeAuditingFileEvents(
5427 _In_ BOOLEAN AccessGranted
,
5428 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
5433 SeAuditingFileOrGlobalEvents(
5434 _In_ BOOLEAN AccessGranted
,
5435 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
5436 _In_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
);
5440 SeSetAccessStateGenericMapping(
5441 _Inout_ PACCESS_STATE AccessState
,
5442 _In_ PGENERIC_MAPPING GenericMapping
);
5447 SeRegisterLogonSessionTerminatedRoutine(
5448 _In_ PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
);
5453 SeUnregisterLogonSessionTerminatedRoutine(
5454 _In_ PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
);
5459 SeMarkLogonSessionForTerminationNotification(
5460 _In_ PLUID LogonId
);
5465 SeQueryInformationToken(
5466 _In_ PACCESS_TOKEN Token
,
5467 _In_ TOKEN_INFORMATION_CLASS TokenInformationClass
,
5468 _Outptr_result_buffer_(_Inexpressible_(token
-dependent
)) PVOID
*TokenInformation
);
5470 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5471 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
5475 SeAuditingHardLinkEvents(
5476 _In_ BOOLEAN AccessGranted
,
5477 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
5480 #if (NTDDI_VERSION >= NTDDI_WINXP)
5486 _In_ PACCESS_TOKEN ExistingToken
,
5488 _In_opt_ PTOKEN_GROUPS SidsToDisable
,
5489 _In_opt_ PTOKEN_PRIVILEGES PrivilegesToDelete
,
5490 _In_opt_ PTOKEN_GROUPS RestrictedSids
,
5491 _Outptr_ PACCESS_TOKEN
*FilteredToken
);
5496 SeAuditHardLinkCreation(
5497 _In_ PUNICODE_STRING FileName
,
5498 _In_ PUNICODE_STRING LinkName
,
5499 _In_ BOOLEAN bSuccess
);
5501 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5503 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
5508 SeAuditingFileEventsWithContext(
5509 _In_ BOOLEAN AccessGranted
,
5510 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
5511 _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
);
5516 SeAuditingHardLinkEventsWithContext(
5517 _In_ BOOLEAN AccessGranted
,
5518 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
5519 _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
);
5524 #if (NTDDI_VERSION >= NTDDI_VISTA)
5529 SeOpenObjectAuditAlarmWithTransaction(
5530 _In_ PUNICODE_STRING ObjectTypeName
,
5531 _In_opt_ PVOID Object
,
5532 _In_opt_ PUNICODE_STRING AbsoluteObjectName
,
5533 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
5534 _In_ PACCESS_STATE AccessState
,
5535 _In_ BOOLEAN ObjectCreated
,
5536 _In_ BOOLEAN AccessGranted
,
5537 _In_ KPROCESSOR_MODE AccessMode
,
5538 _In_opt_ GUID
*TransactionId
,
5539 _Out_ PBOOLEAN GenerateOnClose
);
5544 SeOpenObjectForDeleteAuditAlarmWithTransaction(
5545 _In_ PUNICODE_STRING ObjectTypeName
,
5546 _In_opt_ PVOID Object
,
5547 _In_opt_ PUNICODE_STRING AbsoluteObjectName
,
5548 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
5549 _In_ PACCESS_STATE AccessState
,
5550 _In_ BOOLEAN ObjectCreated
,
5551 _In_ BOOLEAN AccessGranted
,
5552 _In_ KPROCESSOR_MODE AccessMode
,
5553 _In_opt_ GUID
*TransactionId
,
5554 _Out_ PBOOLEAN GenerateOnClose
);
5561 _In_ PACCESS_TOKEN Token
,
5562 _In_ ACCESS_MASK DesiredAccess
,
5563 _In_ BOOLEAN AccessGranted
,
5564 _Out_ PBOOLEAN GenerateAudit
,
5565 _Out_ PBOOLEAN GenerateAlarm
);
5570 SeDeleteObjectAuditAlarmWithTransaction(
5573 _In_opt_ GUID
*TransactionId
);
5578 SeQueryTokenIntegrity(
5579 _In_ PACCESS_TOKEN Token
,
5580 _Inout_ PSID_AND_ATTRIBUTES IntegritySA
);
5585 SeSetSessionIdToken(
5586 _In_ PACCESS_TOKEN Token
,
5587 _In_ ULONG SessionId
);
5592 SeAuditHardLinkCreationWithTransaction(
5593 _In_ PUNICODE_STRING FileName
,
5594 _In_ PUNICODE_STRING LinkName
,
5595 _In_ BOOLEAN bSuccess
,
5596 _In_opt_ GUID
*TransactionId
);
5601 SeAuditTransactionStateChange(
5602 _In_ GUID
*TransactionId
,
5603 _In_ GUID
*ResourceManagerId
,
5604 _In_ ULONG NewTransactionState
);
5605 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5607 #if (NTDDI_VERSION >= NTDDI_VISTA || (NTDDI_VERSION >= NTDDI_WINXPSP2 && NTDDI_VERSION < NTDDI_WS03))
5611 SeTokenIsWriteRestricted(
5612 _In_ PACCESS_TOKEN Token
);
5615 #if (NTDDI_VERSION >= NTDDI_WIN7)
5620 SeAuditingAnyFileEventsWithContext(
5621 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
5622 _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
,
5623 _Out_opt_ PBOOLEAN StagingEnabled
);
5628 SeExamineGlobalSacl(
5629 _In_ PUNICODE_STRING ObjectType
,
5630 _In_ PACL ResourceSacl
,
5631 _In_ PACCESS_TOKEN Token
,
5632 _In_ ACCESS_MASK DesiredAccess
,
5633 _In_ BOOLEAN AccessGranted
,
5634 _Inout_ PBOOLEAN GenerateAudit
,
5635 _Inout_opt_ PBOOLEAN GenerateAlarm
);
5640 SeMaximumAuditMaskFromGlobalSacl(
5641 _In_opt_ PUNICODE_STRING ObjectTypeName
,
5642 _In_ ACCESS_MASK GrantedAccess
,
5643 _In_ PACCESS_TOKEN Token
,
5644 _Inout_ PACCESS_MASK AuditMask
);
5646 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5650 SeReportSecurityEventWithSubCategory(
5652 _In_ PUNICODE_STRING SourceName
,
5653 _In_opt_ PSID UserSid
,
5654 _In_ PSE_ADT_PARAMETER_ARRAY AuditParameters
,
5655 _In_ ULONG AuditSubcategoryId
);
5659 SeAccessCheckFromState(
5660 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
5661 _In_ PTOKEN_ACCESS_INFORMATION PrimaryTokenInformation
,
5662 _In_opt_ PTOKEN_ACCESS_INFORMATION ClientTokenInformation
,
5663 _In_ ACCESS_MASK DesiredAccess
,
5664 _In_ ACCESS_MASK PreviouslyGrantedAccess
,
5665 _Outptr_opt_result_maybenull_ PPRIVILEGE_SET
*Privileges
,
5666 _In_ PGENERIC_MAPPING GenericMapping
,
5667 _In_ KPROCESSOR_MODE AccessMode
,
5668 _Out_ PACCESS_MASK GrantedAccess
,
5669 _Out_ PNTSTATUS AccessStatus
);
5675 _In_ PPRIVILEGE_SET Privileges
);
5679 SeLocateProcessImageName(
5680 _Inout_ PEPROCESS Process
,
5681 _Outptr_ PUNICODE_STRING
*pImageFileName
);
5683 #define SeLengthSid( Sid ) \
5684 (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
5686 #define SeDeleteClientSecurity(C) { \
5687 if (SeTokenType((C)->ClientToken) == TokenPrimary) { \
5688 PsDereferencePrimaryToken( (C)->ClientToken ); \
5690 PsDereferenceImpersonationToken( (C)->ClientToken ); \
5694 #define SeStopImpersonatingClient() PsRevertToSelf()
5696 #define SeQuerySubjectContextToken( SubjectContext ) \
5697 ( ARGUMENT_PRESENT( \
5698 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken \
5700 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken : \
5701 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
5703 extern NTKERNELAPI PSE_EXPORTS SeExports
;
5705 /******************************************************************************
5706 * Process Manager Functions *
5707 ******************************************************************************/
5709 _Must_inspect_result_
5710 _IRQL_requires_max_(APC_LEVEL
)
5714 PsLookupProcessByProcessId(
5715 _In_ HANDLE ProcessId
,
5716 _Outptr_ PEPROCESS
*Process
);
5718 _Must_inspect_result_
5719 _IRQL_requires_max_(APC_LEVEL
)
5723 PsLookupThreadByThreadId(
5724 _In_ HANDLE UniqueThreadId
,
5725 _Outptr_ PETHREAD
*Thread
);
5727 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5730 _IRQL_requires_max_(APC_LEVEL
)
5734 PsReferenceImpersonationToken(
5735 _Inout_ PETHREAD Thread
,
5736 _Out_ PBOOLEAN CopyOnOpen
,
5737 _Out_ PBOOLEAN EffectiveOnly
,
5738 _Out_ PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel
);
5740 _IRQL_requires_max_(APC_LEVEL
)
5744 PsGetProcessExitTime(VOID
);
5746 _IRQL_requires_max_(DISPATCH_LEVEL
)
5750 PsIsThreadTerminating(
5751 _In_ PETHREAD Thread
);
5753 _Must_inspect_result_
5754 _IRQL_requires_max_(PASSIVE_LEVEL
)
5758 PsImpersonateClient(
5759 _Inout_ PETHREAD Thread
,
5760 _In_opt_ PACCESS_TOKEN Token
,
5761 _In_ BOOLEAN CopyOnOpen
,
5762 _In_ BOOLEAN EffectiveOnly
,
5763 _In_ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
);
5765 _IRQL_requires_max_(PASSIVE_LEVEL
)
5769 PsDisableImpersonation(
5770 _Inout_ PETHREAD Thread
,
5771 _Inout_ PSE_IMPERSONATION_STATE ImpersonationState
);
5773 _IRQL_requires_max_(PASSIVE_LEVEL
)
5777 PsRestoreImpersonation(
5778 _Inout_ PETHREAD Thread
,
5779 _In_ PSE_IMPERSONATION_STATE ImpersonationState
);
5781 _IRQL_requires_max_(PASSIVE_LEVEL
)
5785 PsRevertToSelf(VOID
);
5787 _IRQL_requires_max_(APC_LEVEL
)
5792 _In_ PEPROCESS Process
,
5793 _In_ POOL_TYPE PoolType
,
5794 _In_ ULONG_PTR Amount
);
5796 _IRQL_requires_max_(APC_LEVEL
)
5801 _In_ PEPROCESS Process
,
5802 _In_ POOL_TYPE PoolType
,
5803 _In_ ULONG_PTR Amount
);
5805 _IRQL_requires_max_(PASSIVE_LEVEL
)
5809 PsAssignImpersonationToken(
5810 _In_ PETHREAD Thread
,
5811 _In_opt_ HANDLE Token
);
5813 _IRQL_requires_max_(PASSIVE_LEVEL
)
5817 PsReferencePrimaryToken(
5818 _Inout_ PEPROCESS Process
);
5819 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5820 #if (NTDDI_VERSION >= NTDDI_WINXP)
5823 _IRQL_requires_max_(PASSIVE_LEVEL
)
5827 PsDereferencePrimaryToken(
5828 _In_ PACCESS_TOKEN PrimaryToken
);
5830 _IRQL_requires_max_(PASSIVE_LEVEL
)
5834 PsDereferenceImpersonationToken(
5835 _In_ PACCESS_TOKEN ImpersonationToken
);
5837 _Must_inspect_result_
5838 _IRQL_requires_max_(APC_LEVEL
)
5842 PsChargeProcessPoolQuota(
5843 _In_ PEPROCESS Process
,
5844 _In_ POOL_TYPE PoolType
,
5845 _In_ ULONG_PTR Amount
);
5851 _In_ PETHREAD Thread
);
5852 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5854 /******************************************************************************
5855 * I/O Manager Functions *
5856 ******************************************************************************/
5858 #define IoIsFileOpenedExclusively(FileObject) ( \
5860 (FileObject)->SharedRead || \
5861 (FileObject)->SharedWrite || \
5862 (FileObject)->SharedDelete \
5866 #if (NTDDI_VERSION == NTDDI_WIN2K)
5870 IoRegisterFsRegistrationChangeEx(
5871 _In_ PDRIVER_OBJECT DriverObject
,
5872 _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
);
5874 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5880 IoAcquireVpbSpinLock(
5886 IoCheckDesiredAccess(
5887 _Inout_ PACCESS_MASK DesiredAccess
,
5888 _In_ ACCESS_MASK GrantedAccess
);
5893 IoCheckEaBufferValidity(
5894 _In_ PFILE_FULL_EA_INFORMATION EaBuffer
,
5895 _In_ ULONG EaLength
,
5896 _Out_ PULONG ErrorOffset
);
5901 IoCheckFunctionAccess(
5902 _In_ ACCESS_MASK GrantedAccess
,
5903 _In_ UCHAR MajorFunction
,
5904 _In_ UCHAR MinorFunction
,
5905 _In_ ULONG IoControlCode
,
5906 _In_opt_ PVOID Argument1
,
5907 _In_opt_ PVOID Argument2
);
5912 IoCheckQuerySetFileInformation(
5913 _In_ FILE_INFORMATION_CLASS FileInformationClass
,
5915 _In_ BOOLEAN SetOperation
);
5920 IoCheckQuerySetVolumeInformation(
5921 _In_ FS_INFORMATION_CLASS FsInformationClass
,
5923 _In_ BOOLEAN SetOperation
);
5928 IoCheckQuotaBufferValidity(
5929 _In_ PFILE_QUOTA_INFORMATION QuotaBuffer
,
5930 _In_ ULONG QuotaLength
,
5931 _Out_ PULONG ErrorOffset
);
5936 IoCreateStreamFileObject(
5937 _In_opt_ PFILE_OBJECT FileObject
,
5938 _In_opt_ PDEVICE_OBJECT DeviceObject
);
5943 IoCreateStreamFileObjectLite(
5944 _In_opt_ PFILE_OBJECT FileObject
,
5945 _In_opt_ PDEVICE_OBJECT DeviceObject
);
5950 IoFastQueryNetworkAttributes(
5951 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
5952 _In_ ACCESS_MASK DesiredAccess
,
5953 _In_ ULONG OpenOptions
,
5954 _Out_ PIO_STATUS_BLOCK IoStatus
,
5955 _Out_ PFILE_NETWORK_OPEN_INFORMATION Buffer
);
5961 _In_ PFILE_OBJECT FileObject
,
5963 _In_ PLARGE_INTEGER Offset
,
5965 _Out_ PIO_STATUS_BLOCK IoStatusBlock
);
5970 IoGetBaseFileSystemDeviceObject(
5971 _In_ PFILE_OBJECT FileObject
);
5973 _IRQL_requires_max_(PASSIVE_LEVEL
)
5975 PCONFIGURATION_INFORMATION
5977 IoGetConfigurationInformation(VOID
);
5982 IoGetRequestorProcessId(
5988 IoGetRequestorProcess(
5994 IoGetTopLevelIrp(VOID
);
5999 IoIsOperationSynchronous(
6006 _In_ PETHREAD Thread
);
6011 IoIsValidNameGraftingBuffer(
6013 _In_ PREPARSE_DATA_BUFFER ReparseBuffer
);
6018 IoQueryFileInformation(
6019 _In_ PFILE_OBJECT FileObject
,
6020 _In_ FILE_INFORMATION_CLASS FileInformationClass
,
6022 _Out_ PVOID FileInformation
,
6023 _Out_ PULONG ReturnedLength
);
6028 IoQueryVolumeInformation(
6029 _In_ PFILE_OBJECT FileObject
,
6030 _In_ FS_INFORMATION_CLASS FsInformationClass
,
6032 _Out_ PVOID FsInformation
,
6033 _Out_ PULONG ReturnedLength
);
6044 IoRegisterFileSystem(
6045 _In_ __drv_aliasesMem PDEVICE_OBJECT DeviceObject
);
6050 IoRegisterFsRegistrationChange(
6051 _In_ PDRIVER_OBJECT DriverObject
,
6052 _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
);
6057 IoReleaseVpbSpinLock(
6063 IoSetDeviceToVerify(
6064 _In_ PETHREAD Thread
,
6065 _In_opt_ PDEVICE_OBJECT DeviceObject
);
6071 _In_ PFILE_OBJECT FileObject
,
6072 _In_ FILE_INFORMATION_CLASS FileInformationClass
,
6074 _In_ PVOID FileInformation
);
6085 IoSynchronousPageWrite(
6086 _In_ PFILE_OBJECT FileObject
,
6088 _In_ PLARGE_INTEGER FileOffset
,
6090 _Out_ PIO_STATUS_BLOCK IoStatusBlock
);
6096 _In_ PETHREAD Thread
);
6101 IoUnregisterFileSystem(
6102 _In_ PDEVICE_OBJECT DeviceObject
);
6107 IoUnregisterFsRegistrationChange(
6108 _In_ PDRIVER_OBJECT DriverObject
,
6109 _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
);
6115 _In_ PDEVICE_OBJECT DeviceObject
,
6116 _In_ BOOLEAN AllowRawMount
);
6121 IoGetRequestorSessionId(
6123 _Out_ PULONG pSessionId
);
6125 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
6128 #if (NTDDI_VERSION >= NTDDI_WINXP)
6134 IoCreateStreamFileObjectEx(
6135 _In_opt_ PFILE_OBJECT FileObject
,
6136 _In_opt_ PDEVICE_OBJECT DeviceObject
,
6137 _Out_opt_ PHANDLE FileObjectHandle
);
6142 IoQueryFileDosDeviceName(
6143 _In_ PFILE_OBJECT FileObject
,
6144 _Out_ POBJECT_NAME_INFORMATION
*ObjectNameInformation
);
6149 IoEnumerateDeviceObjectList(
6150 _In_ PDRIVER_OBJECT DriverObject
,
6151 _Out_writes_bytes_to_opt_(DeviceObjectListSize
,(*ActualNumberDeviceObjects
)*sizeof(PDEVICE_OBJECT
))
6152 PDEVICE_OBJECT
*DeviceObjectList
,
6153 _In_ ULONG DeviceObjectListSize
,
6154 _Out_ PULONG ActualNumberDeviceObjects
);
6159 IoGetLowerDeviceObject(
6160 _In_ PDEVICE_OBJECT DeviceObject
);
6165 IoGetDeviceAttachmentBaseRef(
6166 _In_ PDEVICE_OBJECT DeviceObject
);
6171 IoGetDiskDeviceObject(
6172 _In_ PDEVICE_OBJECT FileSystemDeviceObject
,
6173 _Out_ PDEVICE_OBJECT
*DiskDeviceObject
);
6175 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
6177 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
6183 IoEnumerateRegisteredFiltersList(
6184 _Out_writes_bytes_to_opt_(DriverObjectListSize
,(*ActualNumberDriverObjects
)*sizeof(PDRIVER_OBJECT
))
6185 PDRIVER_OBJECT
*DriverObjectList
,
6186 _In_ ULONG DriverObjectListSize
,
6187 _Out_ PULONG ActualNumberDriverObjects
);
6188 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
6190 #if (NTDDI_VERSION >= NTDDI_VISTA)
6195 IoInitializePriorityInfo(
6196 _In_ PIO_PRIORITY_INFO PriorityInfo
)
6198 PriorityInfo
->Size
= sizeof(IO_PRIORITY_INFO
);
6199 PriorityInfo
->ThreadPriority
= 0xffff;
6200 PriorityInfo
->IoPriority
= IoPriorityNormal
;
6201 PriorityInfo
->PagePriority
= 0;
6203 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
6205 #if (NTDDI_VERSION >= NTDDI_WIN7)
6211 IoRegisterFsRegistrationChangeMountAware(
6212 _In_ PDRIVER_OBJECT DriverObject
,
6213 _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
,
6214 _In_ BOOLEAN SynchronizeWithMounts
);
6219 IoReplaceFileObjectName(
6220 _In_ PFILE_OBJECT FileObject
,
6221 _In_reads_bytes_(FileNameLength
) PWSTR NewFileName
,
6222 _In_ USHORT FileNameLength
);
6223 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
6226 #define PO_CB_SYSTEM_POWER_POLICY 0
6227 #define PO_CB_AC_STATUS 1
6228 #define PO_CB_BUTTON_COLLISION 2
6229 #define PO_CB_SYSTEM_STATE_LOCK 3
6230 #define PO_CB_LID_SWITCH_STATE 4
6231 #define PO_CB_PROCESSOR_POWER_POLICY 5
6234 #if (NTDDI_VERSION >= NTDDI_WINXP)
6235 _IRQL_requires_max_(APC_LEVEL
)
6239 PoQueueShutdownWorkItem(
6240 _Inout_ __drv_aliasesMem PWORK_QUEUE_ITEM WorkItem
);
6242 /******************************************************************************
6243 * Memory manager Types *
6244 ******************************************************************************/
6245 typedef enum _MMFLUSH_TYPE
{
6250 typedef struct _READ_LIST
{
6251 PFILE_OBJECT FileObject
;
6252 ULONG NumberOfEntries
;
6254 FILE_SEGMENT_ELEMENT List
[ANYSIZE_ARRAY
];
6255 } READ_LIST
, *PREAD_LIST
;
6257 #if (NTDDI_VERSION >= NTDDI_WINXP)
6259 typedef union _MM_PREFETCH_FLAGS
{
6261 ULONG Priority
: SYSTEM_PAGE_PRIORITY_BITS
;
6262 ULONG RepurposePriority
: SYSTEM_PAGE_PRIORITY_BITS
;
6265 } MM_PREFETCH_FLAGS
, *PMM_PREFETCH_FLAGS
;
6267 #define MM_PREFETCH_FLAGS_MASK ((1 << (2*SYSTEM_PAGE_PRIORITY_BITS)) - 1)
6269 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
6271 #define HEAP_NO_SERIALIZE 0x00000001
6272 #define HEAP_GROWABLE 0x00000002
6273 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
6274 #define HEAP_ZERO_MEMORY 0x00000008
6275 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
6276 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
6277 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
6278 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
6280 #define HEAP_CREATE_ALIGN_16 0x00010000
6281 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
6282 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
6284 #define HEAP_SETTABLE_USER_VALUE 0x00000100
6285 #define HEAP_SETTABLE_USER_FLAG1 0x00000200
6286 #define HEAP_SETTABLE_USER_FLAG2 0x00000400
6287 #define HEAP_SETTABLE_USER_FLAG3 0x00000800
6288 #define HEAP_SETTABLE_USER_FLAGS 0x00000E00
6290 #define HEAP_CLASS_0 0x00000000
6291 #define HEAP_CLASS_1 0x00001000
6292 #define HEAP_CLASS_2 0x00002000
6293 #define HEAP_CLASS_3 0x00003000
6294 #define HEAP_CLASS_4 0x00004000
6295 #define HEAP_CLASS_5 0x00005000
6296 #define HEAP_CLASS_6 0x00006000
6297 #define HEAP_CLASS_7 0x00007000
6298 #define HEAP_CLASS_8 0x00008000
6299 #define HEAP_CLASS_MASK 0x0000F000
6301 #define HEAP_MAXIMUM_TAG 0x0FFF
6302 #define HEAP_GLOBAL_TAG 0x0800
6303 #define HEAP_PSEUDO_TAG_FLAG 0x8000
6304 #define HEAP_TAG_SHIFT 18
6305 #define HEAP_TAG_MASK (HEAP_MAXIMUM_TAG << HEAP_TAG_SHIFT)
6307 #define HEAP_CREATE_VALID_MASK (HEAP_NO_SERIALIZE | \
6309 HEAP_GENERATE_EXCEPTIONS | \
6310 HEAP_ZERO_MEMORY | \
6311 HEAP_REALLOC_IN_PLACE_ONLY | \
6312 HEAP_TAIL_CHECKING_ENABLED | \
6313 HEAP_FREE_CHECKING_ENABLED | \
6314 HEAP_DISABLE_COALESCE_ON_FREE | \
6316 HEAP_CREATE_ALIGN_16 | \
6317 HEAP_CREATE_ENABLE_TRACING | \
6318 HEAP_CREATE_ENABLE_EXECUTE)
6320 /******************************************************************************
6321 * Memory manager Functions *
6322 ******************************************************************************/
6326 HEAP_MAKE_TAG_FLAGS(
6330 //__assume_bound(TagBase); // FIXME
6331 return ((ULONG
)((TagBase
) + ((Tag
) << HEAP_TAG_SHIFT
)));
6334 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6339 MmIsRecursiveIoFault(VOID
);
6341 _IRQL_requires_max_ (APC_LEVEL
)
6345 MmForceSectionClosed(
6346 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer
,
6347 _In_ BOOLEAN DelayClose
);
6349 _IRQL_requires_max_ (APC_LEVEL
)
6353 MmFlushImageSection(
6354 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer
,
6355 _In_ MMFLUSH_TYPE FlushType
);
6357 _IRQL_requires_max_ (APC_LEVEL
)
6361 MmCanFileBeTruncated(
6362 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer
,
6363 _In_opt_ PLARGE_INTEGER NewFileSize
);
6365 _IRQL_requires_max_ (APC_LEVEL
)
6369 MmSetAddressRangeModified(
6370 _In_reads_bytes_ (Length
) PVOID Address
,
6371 _In_ SIZE_T Length
);
6373 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
6375 #if (NTDDI_VERSION >= NTDDI_WINXP)
6378 _IRQL_requires_max_ (PASSIVE_LEVEL
)
6383 _In_ ULONG NumberOfLists
,
6384 _In_reads_ (NumberOfLists
) PREAD_LIST
*ReadLists
);
6386 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
6389 #if (NTDDI_VERSION >= NTDDI_VISTA)
6391 _IRQL_requires_max_ (APC_LEVEL
)
6395 MmDoesFileHaveUserWritableReferences(
6396 _In_ PSECTION_OBJECT_POINTERS SectionPointer
);
6398 _Must_inspect_result_
6399 _At_(*BaseAddress
, __drv_allocatesMem(Mem
))
6404 NtAllocateVirtualMemory(
6405 _In_ HANDLE ProcessHandle
,
6406 _Inout_
_Outptr_result_buffer_(*RegionSize
) PVOID
*BaseAddress
,
6407 _In_ ULONG_PTR ZeroBits
,
6408 _Inout_ PSIZE_T RegionSize
,
6409 _In_ ULONG AllocationType
,
6410 _In_ ULONG Protect
);
6413 _IRQL_requires_max_(PASSIVE_LEVEL
)
6417 NtFreeVirtualMemory(
6418 _In_ HANDLE ProcessHandle
,
6419 _Inout_
__drv_freesMem(Mem
) PVOID
*BaseAddress
,
6420 _Inout_ PSIZE_T RegionSize
,
6421 _In_ ULONG FreeType
);
6423 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
6426 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6433 _Inout_opt_ PACCESS_STATE PassedAccessState
,
6434 _In_opt_ ACCESS_MASK DesiredAccess
,
6435 _In_ ULONG ObjectPointerBias
,
6436 _Out_opt_ PVOID
*NewObject
,
6437 _Out_opt_ PHANDLE Handle
);
6442 ObOpenObjectByPointer(
6444 _In_ ULONG HandleAttributes
,
6445 _In_opt_ PACCESS_STATE PassedAccessState
,
6446 _In_ ACCESS_MASK DesiredAccess
,
6447 _In_opt_ POBJECT_TYPE ObjectType
,
6448 _In_ KPROCESSOR_MODE AccessMode
,
6449 _Out_ PHANDLE Handle
);
6454 ObMakeTemporaryObject(
6462 _Out_writes_bytes_opt_(Length
) POBJECT_NAME_INFORMATION ObjectNameInfo
,
6464 _Out_ PULONG ReturnLength
);
6469 ObQueryObjectAuditingByHandle(
6471 _Out_ PBOOLEAN GenerateOnClose
);
6472 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
6474 #if (NTDDI_VERSION >= NTDDI_VISTA)
6480 _In_ HANDLE Handle
);
6484 #if (NTDDI_VERSION >= NTDDI_WIN7)
6489 ObOpenObjectByPointerWithTag(
6491 _In_ ULONG HandleAttributes
,
6492 _In_opt_ PACCESS_STATE PassedAccessState
,
6493 _In_ ACCESS_MASK DesiredAccess
,
6494 _In_opt_ POBJECT_TYPE ObjectType
,
6495 _In_ KPROCESSOR_MODE AccessMode
,
6497 _Out_ PHANDLE Handle
);
6502 ObGetObjectPointerCount(
6506 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
6516 #define FSRTL_COMMON_FCB_HEADER_LAYOUT \
6517 CSHORT NodeTypeCode; \
6518 CSHORT NodeByteSize; \
6520 UCHAR IsFastIoPossible; \
6524 PERESOURCE Resource; \
6525 PERESOURCE PagingIoResource; \
6526 LARGE_INTEGER AllocationSize; \
6527 LARGE_INTEGER FileSize; \
6528 LARGE_INTEGER ValidDataLength;
6530 typedef struct _FSRTL_COMMON_FCB_HEADER
{
6531 FSRTL_COMMON_FCB_HEADER_LAYOUT
6532 } FSRTL_COMMON_FCB_HEADER
, *PFSRTL_COMMON_FCB_HEADER
;
6535 typedef struct _FSRTL_ADVANCED_FCB_HEADER
:FSRTL_COMMON_FCB_HEADER
{
6536 #else /* __cplusplus */
6537 typedef struct _FSRTL_ADVANCED_FCB_HEADER
{
6538 FSRTL_COMMON_FCB_HEADER_LAYOUT
6539 #endif /* __cplusplus */
6540 PFAST_MUTEX FastMutex
;
6541 LIST_ENTRY FilterContexts
;
6542 #if (NTDDI_VERSION >= NTDDI_VISTA)
6543 EX_PUSH_LOCK PushLock
;
6544 PVOID
*FileContextSupportPointer
;
6546 } FSRTL_ADVANCED_FCB_HEADER
, *PFSRTL_ADVANCED_FCB_HEADER
;
6548 #define FSRTL_FCB_HEADER_V0 (0x00)
6549 #define FSRTL_FCB_HEADER_V1 (0x01)
6551 #define FSRTL_FLAG_FILE_MODIFIED (0x01)
6552 #define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
6553 #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
6554 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
6555 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
6556 #define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
6557 #define FSRTL_FLAG_ADVANCED_HEADER (0x40)
6558 #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
6560 #define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
6561 #define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02)
6562 #define FSRTL_FLAG2_PURGE_WHEN_MAPPED (0x04)
6563 #define FSRTL_FLAG2_IS_PAGING_FILE (0x08)
6565 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
6566 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
6567 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
6568 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
6569 #define FSRTL_NETWORK1_TOP_LEVEL_IRP ((LONG_PTR)0x05)
6570 #define FSRTL_NETWORK2_TOP_LEVEL_IRP ((LONG_PTR)0x06)
6571 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG ((LONG_PTR)0xFFFF)
6573 typedef struct _FSRTL_AUXILIARY_BUFFER
{
6578 } FSRTL_AUXILIARY_BUFFER
, *PFSRTL_AUXILIARY_BUFFER
;
6580 #define FSRTL_AUXILIARY_FLAG_DEALLOCATE 0x00000001
6582 typedef enum _FSRTL_COMPARISON_RESULT
{
6586 } FSRTL_COMPARISON_RESULT
;
6588 #define FSRTL_FAT_LEGAL 0x01
6589 #define FSRTL_HPFS_LEGAL 0x02
6590 #define FSRTL_NTFS_LEGAL 0x04
6591 #define FSRTL_WILD_CHARACTER 0x08
6592 #define FSRTL_OLE_LEGAL 0x10
6593 #define FSRTL_NTFS_STREAM_LEGAL (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL)
6595 #define FSRTL_VOLUME_DISMOUNT 1
6596 #define FSRTL_VOLUME_DISMOUNT_FAILED 2
6597 #define FSRTL_VOLUME_LOCK 3
6598 #define FSRTL_VOLUME_LOCK_FAILED 4
6599 #define FSRTL_VOLUME_UNLOCK 5
6600 #define FSRTL_VOLUME_MOUNT 6
6601 #define FSRTL_VOLUME_NEEDS_CHKDSK 7
6602 #define FSRTL_VOLUME_WORM_NEAR_FULL 8
6603 #define FSRTL_VOLUME_WEARING_OUT 9
6604 #define FSRTL_VOLUME_FORCED_CLOSED 10
6605 #define FSRTL_VOLUME_INFO_MAKE_COMPAT 11
6606 #define FSRTL_VOLUME_PREPARING_EJECT 12
6607 #define FSRTL_VOLUME_CHANGE_SIZE 13
6608 #define FSRTL_VOLUME_BACKGROUND_FORMAT 14
6611 (NTAPI
*PFSRTL_STACK_OVERFLOW_ROUTINE
)(
6613 _In_ PKEVENT Event
);
6615 #if (NTDDI_VERSION >= NTDDI_VISTA)
6617 #define FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED 0x00000001
6618 #define FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED 0x00000002
6619 #define FSRTL_UNC_PROVIDER_FLAGS_DOMAIN_SVC_AWARE 0x00000004
6621 #define FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA 0x00000001
6623 #define FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA 0x00000001
6624 #define FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL 0x00000002
6626 #define FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL 0x00000002
6628 #define FSRTL_VIRTDISK_FULLY_ALLOCATED 0x00000001
6629 #define FSRTL_VIRTDISK_NO_DRIVE_LETTER 0x00000002
6631 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_1
{
6633 } FSRTL_MUP_PROVIDER_INFO_LEVEL_1
, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_1
;
6635 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_2
{
6637 UNICODE_STRING ProviderName
;
6638 } FSRTL_MUP_PROVIDER_INFO_LEVEL_2
, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_2
;
6641 (*PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK
) (
6642 _Inout_ PVOID EcpContext
,
6643 _In_ LPCGUID EcpType
);
6645 typedef struct _ECP_LIST ECP_LIST
, *PECP_LIST
;
6647 typedef ULONG FSRTL_ALLOCATE_ECPLIST_FLAGS
;
6648 typedef ULONG FSRTL_ALLOCATE_ECP_FLAGS
;
6649 typedef ULONG FSRTL_ECP_LOOKASIDE_FLAGS
;
6651 typedef enum _FSRTL_CHANGE_BACKING_TYPE
{
6652 ChangeDataControlArea
,
6653 ChangeImageControlArea
,
6654 ChangeSharedCacheMap
6655 } FSRTL_CHANGE_BACKING_TYPE
, *PFSRTL_CHANGE_BACKING_TYPE
;
6657 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
6659 typedef struct _FSRTL_PER_FILE_CONTEXT
{
6663 PFREE_FUNCTION FreeCallback
;
6664 } FSRTL_PER_FILE_CONTEXT
, *PFSRTL_PER_FILE_CONTEXT
;
6666 typedef struct _FSRTL_PER_STREAM_CONTEXT
{
6670 PFREE_FUNCTION FreeCallback
;
6671 } FSRTL_PER_STREAM_CONTEXT
, *PFSRTL_PER_STREAM_CONTEXT
;
6673 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6675 (*PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS
) (
6676 _In_ PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader
);
6679 typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT
{
6683 } FSRTL_PER_FILEOBJECT_CONTEXT
, *PFSRTL_PER_FILEOBJECT_CONTEXT
;
6685 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_HARD_ERROR 0x1
6686 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_LOG_ENTRY 0x2
6689 (NTAPI
*PCOMPLETE_LOCK_IRP_ROUTINE
) (
6693 typedef struct _FILE_LOCK_INFO
{
6694 LARGE_INTEGER StartingByte
;
6695 LARGE_INTEGER Length
;
6696 BOOLEAN ExclusiveLock
;
6698 PFILE_OBJECT FileObject
;
6700 LARGE_INTEGER EndingByte
;
6701 } FILE_LOCK_INFO
, *PFILE_LOCK_INFO
;
6704 (NTAPI
*PUNLOCK_ROUTINE
) (
6706 _In_ PFILE_LOCK_INFO FileLockInfo
);
6708 typedef struct _FILE_LOCK
{
6709 PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine
;
6710 PUNLOCK_ROUTINE UnlockRoutine
;
6711 BOOLEAN FastIoIsQuestionable
;
6713 PVOID LockInformation
;
6714 FILE_LOCK_INFO LastReturnedLockInfo
;
6715 PVOID LastReturnedLock
;
6716 LONG
volatile LockRequestsInProgress
;
6717 } FILE_LOCK
, *PFILE_LOCK
;
6719 typedef struct _TUNNEL
{
6721 PRTL_SPLAY_LINKS Cache
;
6722 LIST_ENTRY TimerQueue
;
6726 typedef struct _BASE_MCB
{
6727 ULONG MaximumPairCount
;
6732 } BASE_MCB
, *PBASE_MCB
;
6734 typedef struct _LARGE_MCB
{
6735 PKGUARDED_MUTEX GuardedMutex
;
6737 } LARGE_MCB
, *PLARGE_MCB
;
6739 #define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
6741 typedef struct _MCB
{
6742 LARGE_MCB DummyFieldThatSizesThisStructureCorrectly
;
6745 typedef enum _FAST_IO_POSSIBLE
{
6746 FastIoIsNotPossible
= 0,
6748 FastIoIsQuestionable
6751 typedef struct _EOF_WAIT_BLOCK
{
6752 LIST_ENTRY EofWaitLinks
;
6754 } EOF_WAIT_BLOCK
, *PEOF_WAIT_BLOCK
;
6756 typedef PVOID OPLOCK
, *POPLOCK
;
6759 (NTAPI
*POPLOCK_WAIT_COMPLETE_ROUTINE
) (
6764 (NTAPI
*POPLOCK_FS_PREPOST_IRP
) (
6768 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
6769 #define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED 0x00000001
6772 #if (NTDDI_VERSION >= NTDDI_WIN7)
6773 #define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY 0x00000002
6774 #define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK 0x00000004
6775 #define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS 0x00000008
6776 #define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH 0x00000001
6779 #if (NTDDI_VERSION >= NTDDI_WIN7)
6781 typedef struct _OPLOCK_KEY_ECP_CONTEXT
{
6784 } OPLOCK_KEY_ECP_CONTEXT
, *POPLOCK_KEY_ECP_CONTEXT
;
6786 DEFINE_GUID(GUID_ECP_OPLOCK_KEY
, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f);
6790 typedef PVOID PNOTIFY_SYNC
;
6792 #if (NTDDI_VERSION >= NTDDI_WIN7)
6793 typedef struct _ECP_HEADER ECP_HEADER
, *PECP_HEADER
;
6797 (NTAPI
*PCHECK_FOR_TRAVERSE_ACCESS
) (
6798 _In_ PVOID NotifyContext
,
6799 _In_opt_ PVOID TargetContext
,
6800 _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
6803 (NTAPI
*PFILTER_REPORT_CHANGE
) (
6804 _In_ PVOID NotifyContext
,
6805 _In_ PVOID FilterContext
);
6806 /* FSRTL Functions */
6808 #define FsRtlEnterFileSystem KeEnterCriticalRegion
6809 #define FsRtlExitFileSystem KeLeaveCriticalRegion
6811 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6813 _Must_inspect_result_
6814 _IRQL_requires_max_(PASSIVE_LEVEL
)
6819 _In_ PFILE_OBJECT FileObject
,
6820 _In_ PLARGE_INTEGER FileOffset
,
6824 _Out_writes_bytes_(Length
) PVOID Buffer
,
6825 _Out_ PIO_STATUS_BLOCK IoStatus
,
6826 _In_ PDEVICE_OBJECT DeviceObject
);
6828 _Must_inspect_result_
6829 _IRQL_requires_max_(PASSIVE_LEVEL
)
6834 _In_ PFILE_OBJECT FileObject
,
6835 _In_ PLARGE_INTEGER FileOffset
,
6839 _In_reads_bytes_(Length
) PVOID Buffer
,
6840 _Out_ PIO_STATUS_BLOCK IoStatus
,
6841 _In_ PDEVICE_OBJECT DeviceObject
);
6843 _Must_inspect_result_
6844 _IRQL_requires_max_(APC_LEVEL
)
6849 _In_ PFILE_OBJECT FileObject
,
6850 _In_ PLARGE_INTEGER FileOffset
,
6853 _Outptr_ PMDL
*MdlChain
,
6854 _Out_ PIO_STATUS_BLOCK IoStatus
,
6855 _In_opt_ PDEVICE_OBJECT DeviceObject
);
6857 _IRQL_requires_max_(PASSIVE_LEVEL
)
6861 FsRtlMdlReadCompleteDev(
6862 _In_ PFILE_OBJECT FileObject
,
6864 _In_opt_ PDEVICE_OBJECT DeviceObject
);
6866 _Must_inspect_result_
6867 _IRQL_requires_max_(APC_LEVEL
)
6871 FsRtlPrepareMdlWriteDev(
6872 _In_ PFILE_OBJECT FileObject
,
6873 _In_ PLARGE_INTEGER FileOffset
,
6876 _Outptr_ PMDL
*MdlChain
,
6877 _Out_ PIO_STATUS_BLOCK IoStatus
,
6878 _In_ PDEVICE_OBJECT DeviceObject
);
6880 _Must_inspect_result_
6881 _IRQL_requires_max_(PASSIVE_LEVEL
)
6885 FsRtlMdlWriteCompleteDev(
6886 _In_ PFILE_OBJECT FileObject
,
6887 _In_ PLARGE_INTEGER FileOffset
,
6889 _In_opt_ PDEVICE_OBJECT DeviceObject
);
6891 _IRQL_requires_max_(PASSIVE_LEVEL
)
6895 FsRtlAcquireFileExclusive(
6896 _In_ PFILE_OBJECT FileObject
);
6898 _IRQL_requires_max_(APC_LEVEL
)
6903 _In_ PFILE_OBJECT FileObject
);
6905 _Must_inspect_result_
6906 _IRQL_requires_max_(PASSIVE_LEVEL
)
6911 _In_ PFILE_OBJECT FileObject
,
6912 _Out_ PLARGE_INTEGER FileSize
);
6914 _Must_inspect_result_
6918 FsRtlIsTotalDeviceFailure(
6919 _In_ NTSTATUS Status
);
6921 _Must_inspect_result_
6922 _IRQL_requires_max_(APC_LEVEL
)
6926 FsRtlAllocateFileLock(
6927 _In_opt_ PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine
,
6928 _In_opt_ PUNLOCK_ROUTINE UnlockRoutine
);
6930 _IRQL_requires_max_(APC_LEVEL
)
6935 _In_ PFILE_LOCK FileLock
);
6937 _IRQL_requires_max_(APC_LEVEL
)
6941 FsRtlInitializeFileLock(
6942 _Out_ PFILE_LOCK FileLock
,
6943 _In_opt_ PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine
,
6944 _In_opt_ PUNLOCK_ROUTINE UnlockRoutine
);
6946 _IRQL_requires_max_(APC_LEVEL
)
6950 FsRtlUninitializeFileLock(
6951 _Inout_ PFILE_LOCK FileLock
);
6954 FsRtlProcessFileLock:
6957 -STATUS_INVALID_DEVICE_REQUEST
6958 -STATUS_RANGE_NOT_LOCKED from unlock routines.
6959 -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
6960 (redirected IoStatus->Status).
6963 -switch ( Irp->CurrentStackLocation->MinorFunction )
6964 lock: return FsRtlPrivateLock;
6965 unlocksingle: return FsRtlFastUnlockSingle;
6966 unlockall: return FsRtlFastUnlockAll;
6967 unlockallbykey: return FsRtlFastUnlockAllByKey;
6968 default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
6969 return STATUS_INVALID_DEVICE_REQUEST;
6971 -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
6972 -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
6974 _Must_inspect_result_
6975 _IRQL_requires_max_(APC_LEVEL
)
6979 FsRtlProcessFileLock(
6980 _In_ PFILE_LOCK FileLock
,
6982 _In_opt_ PVOID Context
);
6985 FsRtlCheckLockForReadAccess:
6987 All this really does is pick out the lock parameters from the irp (io stack
6988 location?), get IoGetRequestorProcess, and pass values on to
6989 FsRtlFastCheckLockForRead.
6991 _Must_inspect_result_
6992 _IRQL_requires_max_(APC_LEVEL
)
6996 FsRtlCheckLockForReadAccess(
6997 _In_ PFILE_LOCK FileLock
,
7001 FsRtlCheckLockForWriteAccess:
7003 All this really does is pick out the lock parameters from the irp (io stack
7004 location?), get IoGetRequestorProcess, and pass values on to
7005 FsRtlFastCheckLockForWrite.
7007 _Must_inspect_result_
7008 _IRQL_requires_max_(APC_LEVEL
)
7012 FsRtlCheckLockForWriteAccess(
7013 _In_ PFILE_LOCK FileLock
,
7016 _Must_inspect_result_
7017 _IRQL_requires_max_(APC_LEVEL
)
7021 FsRtlFastCheckLockForRead(
7022 _In_ PFILE_LOCK FileLock
,
7023 _In_ PLARGE_INTEGER FileOffset
,
7024 _In_ PLARGE_INTEGER Length
,
7026 _In_ PFILE_OBJECT FileObject
,
7027 _In_ PVOID Process
);
7029 _Must_inspect_result_
7030 _IRQL_requires_max_(APC_LEVEL
)
7034 FsRtlFastCheckLockForWrite(
7035 _In_ PFILE_LOCK FileLock
,
7036 _In_ PLARGE_INTEGER FileOffset
,
7037 _In_ PLARGE_INTEGER Length
,
7039 _In_ PFILE_OBJECT FileObject
,
7040 _In_ PVOID Process
);
7043 FsRtlGetNextFileLock:
7045 ret: NULL if no more locks
7048 FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
7049 FileLock->LastReturnedLock as storage.
7050 LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
7051 list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
7052 calls with Restart = FALSE.
7054 _Must_inspect_result_
7055 _IRQL_requires_max_(APC_LEVEL
)
7059 FsRtlGetNextFileLock(
7060 _In_ PFILE_LOCK FileLock
,
7061 _In_ BOOLEAN Restart
);
7063 _IRQL_requires_max_(APC_LEVEL
)
7067 FsRtlFastUnlockSingle(
7068 _In_ PFILE_LOCK FileLock
,
7069 _In_ PFILE_OBJECT FileObject
,
7070 _In_ PLARGE_INTEGER FileOffset
,
7071 _In_ PLARGE_INTEGER Length
,
7072 _In_ PEPROCESS Process
,
7074 _In_opt_ PVOID Context
,
7075 _In_ BOOLEAN AlreadySynchronized
);
7077 _IRQL_requires_max_(APC_LEVEL
)
7082 _In_ PFILE_LOCK FileLock
,
7083 _In_ PFILE_OBJECT FileObject
,
7084 _In_ PEPROCESS Process
,
7085 _In_opt_ PVOID Context
);
7087 _IRQL_requires_max_(APC_LEVEL
)
7091 FsRtlFastUnlockAllByKey(
7092 _In_ PFILE_LOCK FileLock
,
7093 _In_ PFILE_OBJECT FileObject
,
7094 _In_ PEPROCESS Process
,
7096 _In_opt_ PVOID Context
);
7101 ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
7104 -Calls IoCompleteRequest if Irp
7105 -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
7107 _Must_inspect_result_
7108 _IRQL_requires_max_(APC_LEVEL
)
7109 __drv_preferredFunction(FsRtlFastLock
, "Obsolete")
7114 _In_ PFILE_LOCK FileLock
,
7115 _In_ PFILE_OBJECT FileObject
,
7116 _In_ PLARGE_INTEGER FileOffset
,
7117 _In_ PLARGE_INTEGER Length
,
7118 _In_ PEPROCESS Process
,
7120 _In_ BOOLEAN FailImmediately
,
7121 _In_ BOOLEAN ExclusiveLock
,
7122 _Out_ PIO_STATUS_BLOCK IoStatus
,
7124 _In_opt_ __drv_aliasesMem PVOID Context
,
7125 _In_ BOOLEAN AlreadySynchronized
);
7127 _IRQL_requires_max_(APC_LEVEL
)
7131 FsRtlInitializeTunnelCache(
7132 _In_ PTUNNEL Cache
);
7134 _IRQL_requires_max_(APC_LEVEL
)
7138 FsRtlAddToTunnelCache(
7140 _In_ ULONGLONG DirectoryKey
,
7141 _In_ PUNICODE_STRING ShortName
,
7142 _In_ PUNICODE_STRING LongName
,
7143 _In_ BOOLEAN KeyByShortName
,
7144 _In_ ULONG DataLength
,
7145 _In_reads_bytes_(DataLength
) PVOID Data
);
7147 _Must_inspect_result_
7148 _IRQL_requires_max_(APC_LEVEL
)
7152 FsRtlFindInTunnelCache(
7154 _In_ ULONGLONG DirectoryKey
,
7155 _In_ PUNICODE_STRING Name
,
7156 _Out_ PUNICODE_STRING ShortName
,
7157 _Out_ PUNICODE_STRING LongName
,
7158 _Inout_ PULONG DataLength
,
7159 _Out_writes_bytes_to_(*DataLength
, *DataLength
) PVOID Data
);
7161 _IRQL_requires_max_(APC_LEVEL
)
7165 FsRtlDeleteKeyFromTunnelCache(
7167 _In_ ULONGLONG DirectoryKey
);
7169 _IRQL_requires_max_(APC_LEVEL
)
7173 FsRtlDeleteTunnelCache(
7174 _In_ PTUNNEL Cache
);
7176 _IRQL_requires_max_(APC_LEVEL
)
7181 _In_ ANSI_STRING Name
,
7182 _Out_ PANSI_STRING FirstPart
,
7183 _Out_ PANSI_STRING RemainingPart
);
7185 _Must_inspect_result_
7186 _IRQL_requires_max_(APC_LEVEL
)
7190 FsRtlDoesDbcsContainWildCards(
7191 _In_ PANSI_STRING Name
);
7193 _Must_inspect_result_
7194 _IRQL_requires_max_(APC_LEVEL
)
7198 FsRtlIsDbcsInExpression(
7199 _In_ PANSI_STRING Expression
,
7200 _In_ PANSI_STRING Name
);
7202 _Must_inspect_result_
7203 _IRQL_requires_max_(APC_LEVEL
)
7207 FsRtlIsFatDbcsLegal(
7208 _In_ ANSI_STRING DbcsName
,
7209 _In_ BOOLEAN WildCardsPermissible
,
7210 _In_ BOOLEAN PathNamePermissible
,
7211 _In_ BOOLEAN LeadingBackslashPermissible
);
7213 _Must_inspect_result_
7214 _IRQL_requires_max_(APC_LEVEL
)
7218 FsRtlIsHpfsDbcsLegal(
7219 _In_ ANSI_STRING DbcsName
,
7220 _In_ BOOLEAN WildCardsPermissible
,
7221 _In_ BOOLEAN PathNamePermissible
,
7222 _In_ BOOLEAN LeadingBackslashPermissible
);
7227 FsRtlNormalizeNtstatus(
7228 _In_ NTSTATUS Exception
,
7229 _In_ NTSTATUS GenericException
);
7231 _Must_inspect_result_
7235 FsRtlIsNtstatusExpected(
7236 _In_ NTSTATUS Ntstatus
);
7238 _IRQL_requires_max_(APC_LEVEL
)
7239 __drv_preferredFunction(ExAllocateFromNPagedLookasideList
, "The FsRtlAllocateResource routine is obsolete, but is exported to support existing driver binaries. Use ExAllocateFromNPagedLookasideList and ExInitializeResourceLite instead.")
7243 FsRtlAllocateResource(VOID
);
7245 _IRQL_requires_max_(APC_LEVEL
)
7249 FsRtlInitializeLargeMcb(
7250 _Out_ PLARGE_MCB Mcb
,
7251 _In_ POOL_TYPE PoolType
);
7253 _IRQL_requires_max_(APC_LEVEL
)
7257 FsRtlUninitializeLargeMcb(
7258 _Inout_ PLARGE_MCB Mcb
);
7260 _IRQL_requires_max_(APC_LEVEL
)
7265 _Inout_ PLARGE_MCB Mcb
,
7266 _In_ BOOLEAN SelfSynchronized
);
7268 _IRQL_requires_max_(APC_LEVEL
)
7272 FsRtlTruncateLargeMcb(
7273 _Inout_ PLARGE_MCB Mcb
,
7276 _Must_inspect_result_
7277 _IRQL_requires_max_(APC_LEVEL
)
7281 FsRtlAddLargeMcbEntry(
7282 _Inout_ PLARGE_MCB Mcb
,
7285 _In_ LONGLONG SectorCount
);
7287 _IRQL_requires_max_(APC_LEVEL
)
7291 FsRtlRemoveLargeMcbEntry(
7292 _Inout_ PLARGE_MCB Mcb
,
7294 _In_ LONGLONG SectorCount
);
7296 _IRQL_requires_max_(APC_LEVEL
)
7300 FsRtlLookupLargeMcbEntry(
7301 _In_ PLARGE_MCB Mcb
,
7303 _Out_opt_ PLONGLONG Lbn
,
7304 _Out_opt_ PLONGLONG SectorCountFromLbn
,
7305 _Out_opt_ PLONGLONG StartingLbn
,
7306 _Out_opt_ PLONGLONG SectorCountFromStartingLbn
,
7307 _Out_opt_ PULONG Index
);
7309 _IRQL_requires_max_(APC_LEVEL
)
7313 FsRtlLookupLastLargeMcbEntry(
7314 _In_ PLARGE_MCB Mcb
,
7315 _Out_ PLONGLONG Vbn
,
7316 _Out_ PLONGLONG Lbn
);
7318 _IRQL_requires_max_(APC_LEVEL
)
7322 FsRtlLookupLastLargeMcbEntryAndIndex(
7323 _In_ PLARGE_MCB OpaqueMcb
,
7324 _Out_ PLONGLONG LargeVbn
,
7325 _Out_ PLONGLONG LargeLbn
,
7326 _Out_ PULONG Index
);
7328 _IRQL_requires_max_(APC_LEVEL
)
7332 FsRtlNumberOfRunsInLargeMcb(
7333 _In_ PLARGE_MCB Mcb
);
7335 _Must_inspect_result_
7336 _IRQL_requires_max_(APC_LEVEL
)
7340 FsRtlGetNextLargeMcbEntry(
7341 _In_ PLARGE_MCB Mcb
,
7342 _In_ ULONG RunIndex
,
7343 _Out_ PLONGLONG Vbn
,
7344 _Out_ PLONGLONG Lbn
,
7345 _Out_ PLONGLONG SectorCount
);
7347 _Must_inspect_result_
7348 _IRQL_requires_max_(APC_LEVEL
)
7353 _Inout_ PLARGE_MCB Mcb
,
7355 _In_ LONGLONG Amount
);
7357 _IRQL_requires_max_(APC_LEVEL
)
7358 __drv_preferredFunction(FsRtlInitializeLargeMcb
, "Obsolete")
7364 _In_ POOL_TYPE PoolType
);
7366 _IRQL_requires_max_(APC_LEVEL
)
7370 FsRtlUninitializeMcb(
7373 _IRQL_requires_max_(APC_LEVEL
)
7381 _IRQL_requires_max_(APC_LEVEL
)
7389 _In_ ULONG SectorCount
);
7391 _IRQL_requires_max_(APC_LEVEL
)
7395 FsRtlRemoveMcbEntry(
7398 _In_ ULONG SectorCount
);
7400 _IRQL_requires_max_(APC_LEVEL
)
7404 FsRtlLookupMcbEntry(
7408 _Out_opt_ PULONG SectorCount
,
7409 _Out_ PULONG Index
);
7411 _IRQL_requires_max_(APC_LEVEL
)
7415 FsRtlLookupLastMcbEntry(
7420 _IRQL_requires_max_(APC_LEVEL
)
7424 FsRtlNumberOfRunsInMcb(
7427 _Must_inspect_result_
7428 _IRQL_requires_max_(APC_LEVEL
)
7432 FsRtlGetNextMcbEntry(
7434 _In_ ULONG RunIndex
,
7437 _Out_ PULONG SectorCount
);
7439 _IRQL_requires_max_(PASSIVE_LEVEL
)
7444 _In_ PDEVICE_OBJECT TargetDevice
);
7446 _IRQL_requires_max_(APC_LEVEL
)
7450 FsRtlInitializeOplock(
7451 _Inout_ POPLOCK Oplock
);
7453 _IRQL_requires_max_(APC_LEVEL
)
7457 FsRtlUninitializeOplock(
7458 _Inout_ POPLOCK Oplock
);
7460 _Must_inspect_result_
7461 _IRQL_requires_max_(APC_LEVEL
)
7466 _In_ POPLOCK Oplock
,
7468 _In_ ULONG OpenCount
);
7470 _When_(CompletionRoutine
!= NULL
, _Must_inspect_result_
)
7471 _IRQL_requires_max_(APC_LEVEL
)
7476 _In_ POPLOCK Oplock
,
7478 _In_opt_ PVOID Context
,
7479 _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine
,
7480 _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine
);
7482 _Must_inspect_result_
7483 _IRQL_requires_max_(APC_LEVEL
)
7487 FsRtlOplockIsFastIoPossible(
7488 _In_ POPLOCK Oplock
);
7490 _Must_inspect_result_
7491 _IRQL_requires_max_(APC_LEVEL
)
7495 FsRtlCurrentBatchOplock(
7496 _In_ POPLOCK Oplock
);
7498 _IRQL_requires_max_(APC_LEVEL
)
7502 FsRtlNotifyVolumeEvent(
7503 _In_ PFILE_OBJECT FileObject
,
7504 _In_ ULONG EventCode
);
7506 _IRQL_requires_max_(APC_LEVEL
)
7510 FsRtlNotifyInitializeSync(
7511 _In_ PNOTIFY_SYNC
*NotifySync
);
7513 _IRQL_requires_max_(APC_LEVEL
)
7517 FsRtlNotifyUninitializeSync(
7518 _In_ PNOTIFY_SYNC
*NotifySync
);
7520 _IRQL_requires_max_(PASSIVE_LEVEL
)
7524 FsRtlNotifyFullChangeDirectory(
7525 _In_ PNOTIFY_SYNC NotifySync
,
7526 _In_ PLIST_ENTRY NotifyList
,
7527 _In_ PVOID FsContext
,
7528 _In_ PSTRING FullDirectoryName
,
7529 _In_ BOOLEAN WatchTree
,
7530 _In_ BOOLEAN IgnoreBuffer
,
7531 _In_ ULONG CompletionFilter
,
7532 _In_opt_ PIRP NotifyIrp
,
7533 _In_opt_ PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback
,
7534 _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectContext
);
7536 _IRQL_requires_max_(PASSIVE_LEVEL
)
7540 FsRtlNotifyFilterReportChange(
7541 _In_ PNOTIFY_SYNC NotifySync
,
7542 _In_ PLIST_ENTRY NotifyList
,
7543 _In_ PSTRING FullTargetName
,
7544 _In_ USHORT TargetNameOffset
,
7545 _In_opt_ PSTRING StreamName
,
7546 _In_opt_ PSTRING NormalizedParentName
,
7547 _In_ ULONG FilterMatch
,
7549 _In_opt_ PVOID TargetContext
,
7550 _In_opt_ PVOID FilterContext
);
7552 _IRQL_requires_max_(PASSIVE_LEVEL
)
7556 FsRtlNotifyFullReportChange(
7557 _In_ PNOTIFY_SYNC NotifySync
,
7558 _In_ PLIST_ENTRY NotifyList
,
7559 _In_ PSTRING FullTargetName
,
7560 _In_ USHORT TargetNameOffset
,
7561 _In_opt_ PSTRING StreamName
,
7562 _In_opt_ PSTRING NormalizedParentName
,
7563 _In_ ULONG FilterMatch
,
7565 _In_opt_ PVOID TargetContext
);
7567 _IRQL_requires_max_(APC_LEVEL
)
7572 _In_ PNOTIFY_SYNC NotifySync
,
7573 _In_ PLIST_ENTRY NotifyList
,
7574 _In_ PVOID FsContext
);
7576 _IRQL_requires_max_(PASSIVE_LEVEL
)
7581 _In_ UNICODE_STRING Name
,
7582 _Out_ PUNICODE_STRING FirstPart
,
7583 _Out_ PUNICODE_STRING RemainingPart
);
7585 _Must_inspect_result_
7586 _IRQL_requires_max_(PASSIVE_LEVEL
)
7590 FsRtlDoesNameContainWildCards(
7591 _In_ PUNICODE_STRING Name
);
7593 _Must_inspect_result_
7594 _IRQL_requires_max_(PASSIVE_LEVEL
)
7599 _In_ PCUNICODE_STRING Name1
,
7600 _In_ PCUNICODE_STRING Name2
,
7601 _In_ BOOLEAN IgnoreCase
,
7602 _In_reads_opt_(0x10000) PCWCH UpcaseTable
);
7604 _Must_inspect_result_
7605 _IRQL_requires_max_(PASSIVE_LEVEL
)
7609 FsRtlIsNameInExpression(
7610 _In_ PUNICODE_STRING Expression
,
7611 _In_ PUNICODE_STRING Name
,
7612 _In_ BOOLEAN IgnoreCase
,
7613 _In_opt_ PWCHAR UpcaseTable
);
7615 _IRQL_requires_max_(DISPATCH_LEVEL
)
7619 FsRtlPostPagingFileStackOverflow(
7622 _In_ PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
);
7624 _IRQL_requires_max_(DISPATCH_LEVEL
)
7628 FsRtlPostStackOverflow (
7631 _In_ PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
);
7633 _Must_inspect_result_
7634 _IRQL_requires_max_(PASSIVE_LEVEL
)
7638 FsRtlRegisterUncProvider(
7639 _Out_ PHANDLE MupHandle
,
7640 _In_ PUNICODE_STRING RedirectorDeviceName
,
7641 _In_ BOOLEAN MailslotsSupported
);
7643 _IRQL_requires_max_(PASSIVE_LEVEL
)
7647 FsRtlDeregisterUncProvider(
7648 _In_ HANDLE Handle
);
7650 _IRQL_requires_max_(APC_LEVEL
)
7654 FsRtlTeardownPerStreamContexts(
7655 _In_ PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader
);
7657 _Must_inspect_result_
7658 _IRQL_requires_max_(APC_LEVEL
)
7662 FsRtlCreateSectionForDataScan(
7663 _Out_ PHANDLE SectionHandle
,
7664 _Outptr_ PVOID
*SectionObject
,
7665 _Out_opt_ PLARGE_INTEGER SectionFileSize
,
7666 _In_ PFILE_OBJECT FileObject
,
7667 _In_ ACCESS_MASK DesiredAccess
,
7668 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
7669 _In_opt_ PLARGE_INTEGER MaximumSize
,
7670 _In_ ULONG SectionPageProtection
,
7671 _In_ ULONG AllocationAttributes
,
7674 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
7676 #if (NTDDI_VERSION >= NTDDI_WINXP)
7678 _IRQL_requires_max_(PASSIVE_LEVEL
)
7682 FsRtlNotifyFilterChangeDirectory(
7683 _In_ PNOTIFY_SYNC NotifySync
,
7684 _In_ PLIST_ENTRY NotifyList
,
7685 _In_ PVOID FsContext
,
7686 _In_ PSTRING FullDirectoryName
,
7687 _In_ BOOLEAN WatchTree
,
7688 _In_ BOOLEAN IgnoreBuffer
,
7689 _In_ ULONG CompletionFilter
,
7690 _In_opt_ PIRP NotifyIrp
,
7691 _In_opt_ PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback
,
7692 _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectContext
,
7693 _In_opt_ PFILTER_REPORT_CHANGE FilterCallback
);
7695 _Must_inspect_result_
7696 _IRQL_requires_max_(APC_LEVEL
)
7700 FsRtlInsertPerStreamContext(
7701 _In_ PFSRTL_ADVANCED_FCB_HEADER PerStreamContext
,
7702 _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
);
7704 _Must_inspect_result_
7705 _IRQL_requires_max_(APC_LEVEL
)
7707 PFSRTL_PER_STREAM_CONTEXT
7709 FsRtlLookupPerStreamContextInternal(
7710 _In_ PFSRTL_ADVANCED_FCB_HEADER StreamContext
,
7711 _In_opt_ PVOID OwnerId
,
7712 _In_opt_ PVOID InstanceId
);
7714 _Must_inspect_result_
7715 _IRQL_requires_max_(APC_LEVEL
)
7717 PFSRTL_PER_STREAM_CONTEXT
7719 FsRtlRemovePerStreamContext(
7720 _In_ PFSRTL_ADVANCED_FCB_HEADER StreamContext
,
7721 _In_opt_ PVOID OwnerId
,
7722 _In_opt_ PVOID InstanceId
);
7727 FsRtlIncrementCcFastReadNotPossible(
7733 FsRtlIncrementCcFastReadWait(VOID
);
7738 FsRtlIncrementCcFastReadNoWait(VOID
);
7743 FsRtlIncrementCcFastReadResourceMiss(VOID
);
7745 _IRQL_requires_max_(APC_LEVEL
)
7750 _In_ PFILE_OBJECT FileObject
);
7752 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
7754 #if (NTDDI_VERSION >= NTDDI_WS03)
7756 _IRQL_requires_max_(APC_LEVEL
)
7760 FsRtlInitializeBaseMcb(
7761 _Out_ PBASE_MCB Mcb
,
7762 _In_ POOL_TYPE PoolType
);
7764 _IRQL_requires_max_(APC_LEVEL
)
7768 FsRtlUninitializeBaseMcb(
7769 _In_ PBASE_MCB Mcb
);
7771 _IRQL_requires_max_(APC_LEVEL
)
7776 _Out_ PBASE_MCB Mcb
);
7778 _IRQL_requires_max_(APC_LEVEL
)
7782 FsRtlTruncateBaseMcb(
7783 _Inout_ PBASE_MCB Mcb
,
7786 _IRQL_requires_max_(APC_LEVEL
)
7790 FsRtlAddBaseMcbEntry(
7791 _Inout_ PBASE_MCB Mcb
,
7794 _In_ LONGLONG SectorCount
);
7796 _IRQL_requires_max_(APC_LEVEL
)
7800 FsRtlRemoveBaseMcbEntry(
7801 _Inout_ PBASE_MCB Mcb
,
7803 _In_ LONGLONG SectorCount
);
7805 _IRQL_requires_max_(APC_LEVEL
)
7809 FsRtlLookupBaseMcbEntry(
7812 _Out_opt_ PLONGLONG Lbn
,
7813 _Out_opt_ PLONGLONG SectorCountFromLbn
,
7814 _Out_opt_ PLONGLONG StartingLbn
,
7815 _Out_opt_ PLONGLONG SectorCountFromStartingLbn
,
7816 _Out_opt_ PULONG Index
);
7818 _IRQL_requires_max_(APC_LEVEL
)
7822 FsRtlLookupLastBaseMcbEntry(
7824 _Out_ PLONGLONG Vbn
,
7825 _Out_ PLONGLONG Lbn
);
7827 _IRQL_requires_max_(APC_LEVEL
)
7831 FsRtlLookupLastBaseMcbEntryAndIndex(
7832 _In_ PBASE_MCB OpaqueMcb
,
7833 _Inout_ PLONGLONG LargeVbn
,
7834 _Inout_ PLONGLONG LargeLbn
,
7835 _Inout_ PULONG Index
);
7837 _IRQL_requires_max_(APC_LEVEL
)
7841 FsRtlNumberOfRunsInBaseMcb(
7842 _In_ PBASE_MCB Mcb
);
7844 _IRQL_requires_max_(APC_LEVEL
)
7848 FsRtlGetNextBaseMcbEntry(
7850 _In_ ULONG RunIndex
,
7851 _Out_ PLONGLONG Vbn
,
7852 _Out_ PLONGLONG Lbn
,
7853 _Out_ PLONGLONG SectorCount
);
7855 _IRQL_requires_max_(APC_LEVEL
)
7860 _Inout_ PBASE_MCB Mcb
,
7862 _In_ LONGLONG Amount
);
7864 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
7866 #if (NTDDI_VERSION >= NTDDI_VISTA)
7868 _When_(!Flags
& MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE
, _Must_inspect_result_
)
7869 _IRQL_requires_max_(APC_LEVEL
)
7872 FsRtlInitializeBaseMcbEx(
7873 _Out_ PBASE_MCB Mcb
,
7874 _In_ POOL_TYPE PoolType
,
7877 _Must_inspect_result_
7878 _IRQL_requires_max_(APC_LEVEL
)
7881 FsRtlAddBaseMcbEntryEx(
7882 _Inout_ PBASE_MCB Mcb
,
7885 _In_ LONGLONG SectorCount
);
7887 _Must_inspect_result_
7888 _IRQL_requires_max_(APC_LEVEL
)
7893 _In_ POPLOCK Oplock
);
7895 _Must_inspect_result_
7896 _IRQL_requires_max_(APC_LEVEL
)
7900 FsRtlOplockBreakToNone(
7901 _Inout_ POPLOCK Oplock
,
7902 _In_opt_ PIO_STACK_LOCATION IrpSp
,
7904 _In_opt_ PVOID Context
,
7905 _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine
,
7906 _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine
);
7908 _IRQL_requires_max_(DISPATCH_LEVEL
)
7912 FsRtlNotifyVolumeEventEx(
7913 _In_ PFILE_OBJECT FileObject
,
7914 _In_ ULONG EventCode
,
7915 _In_ PTARGET_DEVICE_CUSTOM_NOTIFICATION Event
);
7917 _IRQL_requires_max_(APC_LEVEL
)
7921 FsRtlNotifyCleanupAll(
7922 _In_ PNOTIFY_SYNC NotifySync
,
7923 _In_ PLIST_ENTRY NotifyList
);
7925 _Must_inspect_result_
7926 _IRQL_requires_max_(PASSIVE_LEVEL
)
7929 FsRtlRegisterUncProviderEx(
7930 _Out_ PHANDLE MupHandle
,
7931 _In_ PUNICODE_STRING RedirDevName
,
7932 _In_ PDEVICE_OBJECT DeviceObject
,
7935 _Must_inspect_result_
7936 _When_(Irp
!=NULL
, _IRQL_requires_max_(PASSIVE_LEVEL
))
7937 _When_(Irp
==NULL
, _IRQL_requires_max_(APC_LEVEL
))
7941 FsRtlCancellableWaitForSingleObject(
7943 _In_opt_ PLARGE_INTEGER Timeout
,
7946 _Must_inspect_result_
7947 _When_(Irp
!= NULL
, _IRQL_requires_max_(PASSIVE_LEVEL
))
7948 _When_(Irp
== NULL
, _IRQL_requires_max_(APC_LEVEL
))
7952 FsRtlCancellableWaitForMultipleObjects(
7954 _In_reads_(Count
) PVOID ObjectArray
[],
7955 _In_ WAIT_TYPE WaitType
,
7956 _In_opt_ PLARGE_INTEGER Timeout
,
7957 _In_opt_ PKWAIT_BLOCK WaitBlockArray
,
7960 _Must_inspect_result_
7961 _IRQL_requires_max_(APC_LEVEL
)
7965 FsRtlMupGetProviderInfoFromFileObject(
7966 _In_ PFILE_OBJECT pFileObject
,
7968 _Out_writes_bytes_(*pBufferSize
) PVOID pBuffer
,
7969 _Inout_ PULONG pBufferSize
);
7971 _Must_inspect_result_
7972 _IRQL_requires_max_(APC_LEVEL
)
7976 FsRtlMupGetProviderIdFromName(
7977 _In_ PUNICODE_STRING pProviderName
,
7978 _Out_ PULONG32 pProviderId
);
7983 FsRtlIncrementCcFastMdlReadWait(VOID
);
7985 _Must_inspect_result_
7986 _IRQL_requires_max_(PASSIVE_LEVEL
)
7990 FsRtlValidateReparsePointBuffer(
7991 _In_ ULONG BufferLength
,
7992 _In_reads_bytes_(BufferLength
) PREPARSE_DATA_BUFFER ReparseBuffer
);
7994 _Must_inspect_result_
7995 _IRQL_requires_max_(PASSIVE_LEVEL
)
7999 FsRtlRemoveDotsFromPath(
8000 _Inout_updates_bytes_(PathLength
) PWSTR OriginalString
,
8001 _In_ USHORT PathLength
,
8002 _Out_ USHORT
*NewLength
);
8004 _Must_inspect_result_
8005 _IRQL_requires_max_(APC_LEVEL
)
8009 FsRtlAllocateExtraCreateParameterList(
8010 _In_ FSRTL_ALLOCATE_ECPLIST_FLAGS Flags
,
8011 _Outptr_ PECP_LIST
*EcpList
);
8013 _IRQL_requires_max_(APC_LEVEL
)
8017 FsRtlFreeExtraCreateParameterList(
8018 _In_ PECP_LIST EcpList
);
8020 _Must_inspect_result_
8021 _IRQL_requires_max_(APC_LEVEL
)
8025 FsRtlAllocateExtraCreateParameter(
8026 _In_ LPCGUID EcpType
,
8027 _In_ ULONG SizeOfContext
,
8028 _In_ FSRTL_ALLOCATE_ECP_FLAGS Flags
,
8029 _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback
,
8031 _Outptr_result_bytebuffer_(SizeOfContext
) PVOID
*EcpContext
);
8033 _IRQL_requires_max_(APC_LEVEL
)
8037 FsRtlFreeExtraCreateParameter(
8038 _In_ PVOID EcpContext
);
8040 _When_(Flags
|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL
, _IRQL_requires_max_(DISPATCH_LEVEL
))
8041 _When_(!(Flags
|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL
), _IRQL_requires_max_(APC_LEVEL
))
8045 FsRtlInitExtraCreateParameterLookasideList(
8046 _Inout_ PVOID Lookaside
,
8047 _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags
,
8051 _When_(Flags
|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL
, _IRQL_requires_max_(DISPATCH_LEVEL
))
8052 _When_(!(Flags
|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL
), _IRQL_requires_max_(APC_LEVEL
))
8055 FsRtlDeleteExtraCreateParameterLookasideList(
8056 _Inout_ PVOID Lookaside
,
8057 _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags
);
8059 _Must_inspect_result_
8060 _IRQL_requires_max_(APC_LEVEL
)
8064 FsRtlAllocateExtraCreateParameterFromLookasideList(
8065 _In_ LPCGUID EcpType
,
8066 ULONG SizeOfContext
,
8067 _In_ FSRTL_ALLOCATE_ECP_FLAGS Flags
,
8068 _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback
,
8069 _Inout_ PVOID LookasideList
,
8070 _Outptr_ PVOID
*EcpContext
);
8072 _Must_inspect_result_
8073 _IRQL_requires_max_(APC_LEVEL
)
8077 FsRtlInsertExtraCreateParameter(
8078 _Inout_ PECP_LIST EcpList
,
8079 _Inout_ PVOID EcpContext
);
8081 _Must_inspect_result_
8082 _IRQL_requires_max_(APC_LEVEL
)
8086 FsRtlFindExtraCreateParameter(
8087 _In_ PECP_LIST EcpList
,
8088 _In_ LPCGUID EcpType
,
8089 _Outptr_opt_ PVOID
*EcpContext
,
8090 _Out_opt_ ULONG
*EcpContextSize
);
8092 _Must_inspect_result_
8093 _IRQL_requires_max_(APC_LEVEL
)
8097 FsRtlRemoveExtraCreateParameter(
8098 _Inout_ PECP_LIST EcpList
,
8099 _In_ LPCGUID EcpType
,
8100 _Outptr_ PVOID
*EcpContext
,
8101 _Out_opt_ ULONG
*EcpContextSize
);
8103 _Must_inspect_result_
8104 _IRQL_requires_max_(APC_LEVEL
)
8108 FsRtlGetEcpListFromIrp(
8110 _Outptr_result_maybenull_ PECP_LIST
*EcpList
);
8112 _Must_inspect_result_
8113 _IRQL_requires_max_(APC_LEVEL
)
8117 FsRtlSetEcpListIntoIrp(
8119 _In_ PECP_LIST EcpList
);
8121 _Must_inspect_result_
8122 _IRQL_requires_max_(APC_LEVEL
)
8126 FsRtlGetNextExtraCreateParameter(
8127 _In_ PECP_LIST EcpList
,
8128 _In_opt_ PVOID CurrentEcpContext
,
8129 _Out_opt_ LPGUID NextEcpType
,
8130 _Outptr_opt_ PVOID
*NextEcpContext
,
8131 _Out_opt_ ULONG
*NextEcpContextSize
);
8133 _IRQL_requires_max_(APC_LEVEL
)
8137 FsRtlAcknowledgeEcp(
8138 _In_ PVOID EcpContext
);
8140 _IRQL_requires_max_(APC_LEVEL
)
8144 FsRtlIsEcpAcknowledged(
8145 _In_ PVOID EcpContext
);
8147 _IRQL_requires_max_(APC_LEVEL
)
8151 FsRtlIsEcpFromUserMode(
8152 _In_ PVOID EcpContext
);
8154 _Must_inspect_result_
8155 _IRQL_requires_max_(PASSIVE_LEVEL
)
8159 FsRtlChangeBackingFileObject(
8160 _In_opt_ PFILE_OBJECT CurrentFileObject
,
8161 _In_ PFILE_OBJECT NewFileObject
,
8162 _In_ FSRTL_CHANGE_BACKING_TYPE ChangeBackingType
,
8165 _Must_inspect_result_
8166 _IRQL_requires_max_(APC_LEVEL
)
8170 FsRtlLogCcFlushError(
8171 _In_ PUNICODE_STRING FileName
,
8172 _In_ PDEVICE_OBJECT DeviceObject
,
8173 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8174 _In_ NTSTATUS FlushError
,
8177 _IRQL_requires_max_(APC_LEVEL
)
8181 FsRtlAreVolumeStartupApplicationsComplete(VOID
);
8186 FsRtlQueryMaximumVirtualDiskNestingLevel(VOID
);
8191 FsRtlGetVirtualDiskNestingLevel(
8192 _In_ PDEVICE_OBJECT DeviceObject
,
8193 _Out_ PULONG NestingLevel
,
8194 _Out_opt_ PULONG NestingFlags
);
8196 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8198 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
8199 _When_(Flags
| OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK
, _Must_inspect_result_
)
8200 _IRQL_requires_max_(APC_LEVEL
)
8205 _In_ POPLOCK Oplock
,
8208 _In_opt_ PVOID Context
,
8209 _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine
,
8210 _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine
);
8214 #if (NTDDI_VERSION >= NTDDI_WIN7)
8216 _IRQL_requires_max_(APC_LEVEL
)
8220 FsRtlAreThereCurrentOrInProgressFileLocks(
8221 _In_ PFILE_LOCK FileLock
);
8223 _Must_inspect_result_
8224 _IRQL_requires_max_(APC_LEVEL
)
8228 FsRtlOplockIsSharedRequest(
8231 _Must_inspect_result_
8232 _IRQL_requires_max_(APC_LEVEL
)
8237 _In_ POPLOCK Oplock
,
8240 _In_opt_ PVOID Context
,
8241 _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine
,
8242 _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine
);
8244 _IRQL_requires_max_(APC_LEVEL
)
8248 FsRtlCurrentOplockH(
8249 _In_ POPLOCK Oplock
);
8251 _Must_inspect_result_
8252 _IRQL_requires_max_(APC_LEVEL
)
8256 FsRtlOplockBreakToNoneEx(
8257 _Inout_ POPLOCK Oplock
,
8260 _In_opt_ PVOID Context
,
8261 _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine
,
8262 _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine
);
8264 _Must_inspect_result_
8265 _IRQL_requires_max_(APC_LEVEL
)
8269 FsRtlOplockFsctrlEx(
8270 _In_ POPLOCK Oplock
,
8272 _In_ ULONG OpenCount
,
8275 _IRQL_requires_max_(APC_LEVEL
)
8279 FsRtlOplockKeysEqual(
8280 _In_opt_ PFILE_OBJECT Fo1
,
8281 _In_opt_ PFILE_OBJECT Fo2
);
8286 FsRtlInitializeExtraCreateParameterList(
8287 _Inout_ PECP_LIST EcpList
);
8292 FsRtlInitializeExtraCreateParameter(
8293 _Out_ PECP_HEADER Ecp
,
8294 _In_ ULONG EcpFlags
,
8295 _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback
,
8296 _In_ ULONG TotalSize
,
8297 _In_ LPCGUID EcpType
,
8298 _In_opt_ PVOID ListAllocatedFrom
);
8300 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
8302 _Must_inspect_result_
8303 _IRQL_requires_max_(APC_LEVEL
)
8307 FsRtlInsertPerFileContext(
8308 _In_ PVOID
* PerFileContextPointer
,
8309 _In_ PFSRTL_PER_FILE_CONTEXT Ptr
);
8311 _Must_inspect_result_
8312 _IRQL_requires_max_(APC_LEVEL
)
8314 PFSRTL_PER_FILE_CONTEXT
8316 FsRtlLookupPerFileContext(
8317 _In_ PVOID
* PerFileContextPointer
,
8318 _In_opt_ PVOID OwnerId
,
8319 _In_opt_ PVOID InstanceId
);
8321 _Must_inspect_result_
8322 _IRQL_requires_max_(APC_LEVEL
)
8324 PFSRTL_PER_FILE_CONTEXT
8326 FsRtlRemovePerFileContext(
8327 _In_ PVOID
* PerFileContextPointer
,
8328 _In_opt_ PVOID OwnerId
,
8329 _In_opt_ PVOID InstanceId
);
8331 _IRQL_requires_max_(APC_LEVEL
)
8335 FsRtlTeardownPerFileContexts(
8336 _In_ PVOID
* PerFileContextPointer
);
8338 _Must_inspect_result_
8339 _IRQL_requires_max_(APC_LEVEL
)
8343 FsRtlInsertPerFileObjectContext(
8344 _In_ PFILE_OBJECT FileObject
,
8345 _In_ PFSRTL_PER_FILEOBJECT_CONTEXT Ptr
);
8347 _Must_inspect_result_
8348 _IRQL_requires_max_(APC_LEVEL
)
8350 PFSRTL_PER_FILEOBJECT_CONTEXT
8352 FsRtlLookupPerFileObjectContext(
8353 _In_ PFILE_OBJECT FileObject
,
8354 _In_opt_ PVOID OwnerId
,
8355 _In_opt_ PVOID InstanceId
);
8357 _Must_inspect_result_
8358 _IRQL_requires_max_(APC_LEVEL
)
8360 PFSRTL_PER_FILEOBJECT_CONTEXT
8362 FsRtlRemovePerFileObjectContext(
8363 _In_ PFILE_OBJECT FileObject
,
8364 _In_opt_ PVOID OwnerId
,
8365 _In_opt_ PVOID InstanceId
);
8370 FsRtlRegisterFileSystemFilterCallbacks(
8371 _In_
struct _DRIVER_OBJECT
*FilterDriverObject
,
8372 _In_ PFS_FILTER_CALLBACKS Callbacks
);
8374 #if (NTDDI_VERSION >= NTDDI_VISTA)
8378 FsRtlNotifyStreamFileObject(
8379 _In_
struct _FILE_OBJECT
* StreamFileObject
,
8380 _In_opt_
struct _DEVICE_OBJECT
*DeviceObjectHint
,
8381 _In_ FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType
,
8382 _In_ BOOLEAN SafeToRecurse
);
8383 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8385 #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) \
8386 FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11)
8388 #define FsRtlAreThereCurrentFileLocks(FL) \
8389 ((FL)->FastIoIsQuestionable)
8391 #define FsRtlIncrementLockRequestsInProgress(FL) { \
8392 ASSERT((FL)->LockRequestsInProgress >= 0); \
8394 (InterlockedIncrement((LONG volatile *)&((FL)->LockRequestsInProgress))); \
8397 #define FsRtlDecrementLockRequestsInProgress(FL) { \
8398 ASSERT((FL)->LockRequestsInProgress > 0); \
8400 (InterlockedDecrement((LONG volatile *)&((FL)->LockRequestsInProgress))); \
8404 extern const UCHAR
* const FsRtlLegalAnsiCharacterArray
;
8405 #define LEGAL_ANSI_CHARACTER_ARRAY FsRtlLegalAnsiCharacterArray
8407 __CREATE_NTOS_DATA_IMPORT_ALIAS(FsRtlLegalAnsiCharacterArray
)
8408 extern const UCHAR
* const *FsRtlLegalAnsiCharacterArray
;
8409 #define LEGAL_ANSI_CHARACTER_ARRAY (*FsRtlLegalAnsiCharacterArray)
8412 #define FsRtlIsAnsiCharacterWild(C) \
8413 FlagOn(LEGAL_ANSI_CHARACTER_ARRAY[(UCHAR)(C)], FSRTL_WILD_CHARACTER)
8415 #define FsRtlIsAnsiCharacterLegalFat(C, WILD) \
8416 FlagOn(LEGAL_ANSI_CHARACTER_ARRAY[(UCHAR)(C)], (FSRTL_FAT_LEGAL) | \
8417 ((WILD) ? FSRTL_WILD_CHARACTER : 0 ))
8419 #define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) \
8420 FlagOn(LEGAL_ANSI_CHARACTER_ARRAY[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) | \
8421 ((WILD) ? FSRTL_WILD_CHARACTER : 0 ))
8423 #define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) \
8424 FlagOn(LEGAL_ANSI_CHARACTER_ARRAY[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) | \
8425 ((WILD) ? FSRTL_WILD_CHARACTER : 0 ))
8427 #define FsRtlIsAnsiCharacterLegalNtfsStream(C,WILD_OK) \
8428 FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_NTFS_STREAM_LEGAL)
8430 #define FsRtlIsAnsiCharacterLegal(C,FLAGS) \
8431 FsRtlTestAnsiCharacter((C), TRUE, FALSE, (FLAGS))
8433 #define FsRtlTestAnsiCharacter(C, DEFAULT_RET, WILD_OK, FLAGS) \
8434 (((SCHAR)(C) < 0) ? DEFAULT_RET : \
8435 FlagOn(LEGAL_ANSI_CHARACTER_ARRAY[(C)], \
8436 (FLAGS) | ((WILD_OK) ? FSRTL_WILD_CHARACTER : 0)))
8438 #define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) \
8439 ((BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \
8440 (NLS_MB_CODE_PAGE_TAG && \
8441 (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))))
8443 #define FsRtlIsUnicodeCharacterWild(C) \
8444 ((((C) >= 0x40) ? FALSE : \
8445 FlagOn(LEGAL_ANSI_CHARACTER_ARRAY[(C)], FSRTL_WILD_CHARACTER )))
8447 #define FsRtlInitPerFileContext(_fc, _owner, _inst, _cb) \
8448 ((_fc)->OwnerId = (_owner), \
8449 (_fc)->InstanceId = (_inst), \
8450 (_fc)->FreeCallback = (_cb))
8452 #define FsRtlGetPerFileContextPointer(_fo) \
8453 (FsRtlSupportsPerFileContexts(_fo) ? \
8454 FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer : NULL)
8456 #define FsRtlSupportsPerFileContexts(_fo) \
8457 ((FsRtlGetPerStreamContextPointer(_fo) != NULL) && \
8458 (FsRtlGetPerStreamContextPointer(_fo)->Version >= FSRTL_FCB_HEADER_V1) && \
8459 (FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer != NULL))
8461 #define FsRtlSetupAdvancedHeaderEx(_advhdr, _fmutx, _fctxptr) \
8463 FsRtlSetupAdvancedHeader( _advhdr, _fmutx ); \
8464 if ((_fctxptr) != NULL) { \
8465 (_advhdr)->FileContextSupportPointer = (_fctxptr); \
8469 #define FsRtlGetPerStreamContextPointer(FO) \
8470 ((PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext)
8472 #define FsRtlInitPerStreamContext(PSC, O, I, FC) \
8473 ((PSC)->OwnerId = (O), \
8474 (PSC)->InstanceId = (I), \
8475 (PSC)->FreeCallback = (FC))
8477 #define FsRtlSupportsPerStreamContexts(FO) \
8478 ((BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) && \
8479 FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \
8480 FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS)))
8482 #define FsRtlLookupPerStreamContext(_sc, _oid, _iid) \
8483 (((NULL != (_sc)) && \
8484 FlagOn((_sc)->Flags2,FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS) && \
8485 !IsListEmpty(&(_sc)->FilterContexts)) ? \
8486 FsRtlLookupPerStreamContextInternal((_sc), (_oid), (_iid)) : NULL)
8488 _IRQL_requires_max_(APC_LEVEL
)
8492 FsRtlSetupAdvancedHeader(
8494 _In_ PFAST_MUTEX FMutex
)
8496 PFSRTL_ADVANCED_FCB_HEADER localAdvHdr
= (PFSRTL_ADVANCED_FCB_HEADER
)AdvHdr
;
8498 localAdvHdr
->Flags
|= FSRTL_FLAG_ADVANCED_HEADER
;
8499 localAdvHdr
->Flags2
|= FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS
;
8500 #if (NTDDI_VERSION >= NTDDI_VISTA)
8501 localAdvHdr
->Version
= FSRTL_FCB_HEADER_V1
;
8503 localAdvHdr
->Version
= FSRTL_FCB_HEADER_V0
;
8505 InitializeListHead( &localAdvHdr
->FilterContexts
);
8506 if (FMutex
!= NULL
) {
8507 localAdvHdr
->FastMutex
= FMutex
;
8509 #if (NTDDI_VERSION >= NTDDI_VISTA)
8510 *((PULONG_PTR
)(&localAdvHdr
->PushLock
)) = 0;
8511 localAdvHdr
->FileContextSupportPointer
= NULL
;
8515 #define FsRtlInitPerFileObjectContext(_fc, _owner, _inst) \
8516 ((_fc)->OwnerId = (_owner), (_fc)->InstanceId = (_inst))
8518 #define FsRtlCompleteRequest(IRP, STATUS) { \
8519 (IRP)->IoStatus.Status = (STATUS); \
8520 IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
8522 /* Common Cache Types */
8524 #define VACB_MAPPING_GRANULARITY (0x40000)
8525 #define VACB_OFFSET_SHIFT (18)
8527 typedef struct _PUBLIC_BCB
{
8528 CSHORT NodeTypeCode
;
8529 CSHORT NodeByteSize
;
8531 LARGE_INTEGER MappedFileOffset
;
8532 } PUBLIC_BCB
, *PPUBLIC_BCB
;
8534 typedef struct _CC_FILE_SIZES
{
8535 LARGE_INTEGER AllocationSize
;
8536 LARGE_INTEGER FileSize
;
8537 LARGE_INTEGER ValidDataLength
;
8538 } CC_FILE_SIZES
, *PCC_FILE_SIZES
;
8541 (NTAPI
*PACQUIRE_FOR_LAZY_WRITE
) (
8546 (NTAPI
*PRELEASE_FROM_LAZY_WRITE
) (
8547 _In_ PVOID Context
);
8550 (NTAPI
*PACQUIRE_FOR_READ_AHEAD
) (
8555 (NTAPI
*PRELEASE_FROM_READ_AHEAD
) (
8556 _In_ PVOID Context
);
8558 typedef struct _CACHE_MANAGER_CALLBACKS
{
8559 PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite
;
8560 PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite
;
8561 PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead
;
8562 PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead
;
8563 } CACHE_MANAGER_CALLBACKS
, *PCACHE_MANAGER_CALLBACKS
;
8565 typedef struct _CACHE_UNINITIALIZE_EVENT
{
8566 struct _CACHE_UNINITIALIZE_EVENT
*Next
;
8568 } CACHE_UNINITIALIZE_EVENT
, *PCACHE_UNINITIALIZE_EVENT
;
8571 (NTAPI
*PDIRTY_PAGE_ROUTINE
) (
8572 _In_ PFILE_OBJECT FileObject
,
8573 _In_ PLARGE_INTEGER FileOffset
,
8575 _In_ PLARGE_INTEGER OldestLsn
,
8576 _In_ PLARGE_INTEGER NewestLsn
,
8577 _In_ PVOID Context1
,
8578 _In_ PVOID Context2
);
8581 (NTAPI
*PFLUSH_TO_LSN
) (
8582 _In_ PVOID LogHandle
,
8583 _In_ LARGE_INTEGER Lsn
);
8586 (NTAPI
*PCC_POST_DEFERRED_WRITE
) (
8587 _In_ PVOID Context1
,
8588 _In_ PVOID Context2
);
8590 #define UNINITIALIZE_CACHE_MAPS (1)
8591 #define DO_NOT_RETRY_PURGE (2)
8592 #define DO_NOT_PURGE_DIRTY_PAGES (0x4)
8594 #define CC_FLUSH_AND_PURGE_NO_PURGE (0x1)
8595 /* Common Cache Functions */
8597 #define CcIsFileCached(FO) ( \
8598 ((FO)->SectionObjectPointer != NULL) && \
8599 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
8602 extern NTKERNELAPI ULONG CcFastMdlReadWait
;
8604 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8609 CcInitializeCacheMap(
8610 _In_ PFILE_OBJECT FileObject
,
8611 _In_ PCC_FILE_SIZES FileSizes
,
8612 _In_ BOOLEAN PinAccess
,
8613 _In_ PCACHE_MANAGER_CALLBACKS Callbacks
,
8614 _In_ PVOID LazyWriteContext
);
8619 CcUninitializeCacheMap(
8620 _In_ PFILE_OBJECT FileObject
,
8621 _In_opt_ PLARGE_INTEGER TruncateSize
,
8622 _In_opt_ PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent
);
8628 IN PFILE_OBJECT FileObject
,
8629 IN PCC_FILE_SIZES FileSizes
);
8634 CcSetDirtyPageThreshold(
8635 _In_ PFILE_OBJECT FileObject
,
8636 _In_ ULONG DirtyPageThreshold
);
8642 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8643 _In_opt_ PLARGE_INTEGER FileOffset
,
8645 _Out_opt_ PIO_STATUS_BLOCK IoStatus
);
8650 CcGetFlushedValidData(
8651 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8652 _In_ BOOLEAN BcbListHeld
);
8658 _In_ PFILE_OBJECT FileObject
,
8659 _In_ PLARGE_INTEGER StartOffset
,
8660 _In_ PLARGE_INTEGER EndOffset
,
8680 _In_ BOOLEAN WriteThrough
,
8681 _Out_ PIO_STATUS_BLOCK IoStatus
);
8686 CcGetFileObjectFromSectionPtrs(
8687 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer
);
8692 CcGetFileObjectFromBcb(
8699 _In_opt_ PFILE_OBJECT FileObject
,
8700 _In_ ULONG BytesToWrite
,
8702 _In_ BOOLEAN Retrying
);
8708 _In_ PFILE_OBJECT FileObject
,
8709 _In_ PCC_POST_DEFERRED_WRITE PostRoutine
,
8710 _In_ PVOID Context1
,
8711 _In_ PVOID Context2
,
8712 _In_ ULONG BytesToWrite
,
8713 _In_ BOOLEAN Retrying
);
8719 _In_ PFILE_OBJECT FileObject
,
8720 _In_ PLARGE_INTEGER FileOffset
,
8723 _Out_writes_bytes_(Length
) PVOID Buffer
,
8724 _Out_ PIO_STATUS_BLOCK IoStatus
);
8730 _In_ PFILE_OBJECT FileObject
,
8731 _In_ ULONG FileOffset
,
8733 _In_ ULONG PageCount
,
8734 _Out_writes_bytes_(Length
) PVOID Buffer
,
8735 _Out_ PIO_STATUS_BLOCK IoStatus
);
8741 _In_ PFILE_OBJECT FileObject
,
8742 _In_ PLARGE_INTEGER FileOffset
,
8745 _In_reads_bytes_(Length
) PVOID Buffer
);
8751 _In_ PFILE_OBJECT FileObject
,
8752 _In_ ULONG FileOffset
,
8754 _In_reads_bytes_(Length
) PVOID Buffer
);
8760 _In_ PFILE_OBJECT FileObject
,
8761 _In_ PLARGE_INTEGER FileOffset
,
8763 _Out_ PMDL
*MdlChain
,
8764 _Out_ PIO_STATUS_BLOCK IoStatus
);
8770 _In_ PFILE_OBJECT FileObject
,
8771 _In_ PMDL MdlChain
);
8777 _In_ PFILE_OBJECT FileObject
,
8778 _In_ PLARGE_INTEGER FileOffset
,
8780 _Out_ PMDL
*MdlChain
,
8781 _Out_ PIO_STATUS_BLOCK IoStatus
);
8787 _In_ PFILE_OBJECT FileObject
,
8788 _In_ PLARGE_INTEGER FileOffset
,
8789 _In_ PMDL MdlChain
);
8794 CcScheduleReadAhead(
8795 _In_ PFILE_OBJECT FileObject
,
8796 _In_ PLARGE_INTEGER FileOffset
,
8802 CcWaitForCurrentLazyWriterActivity(VOID
);
8807 CcSetReadAheadGranularity(
8808 _In_ PFILE_OBJECT FileObject
,
8809 _In_ ULONG Granularity
);
8815 _In_ PFILE_OBJECT FileObject
,
8816 _In_ PLARGE_INTEGER FileOffset
,
8819 _Outptr_ PVOID
*Bcb
,
8820 _Outptr_result_bytebuffer_(Length
) PVOID
*Buffer
);
8826 _In_ PFILE_OBJECT FileObject
,
8827 _In_ PLARGE_INTEGER FileOffset
,
8830 _Inout_ PVOID
*Bcb
);
8836 _In_ PFILE_OBJECT FileObject
,
8837 _In_ PLARGE_INTEGER FileOffset
,
8841 _Outptr_ PVOID
*Bcb
,
8842 _Outptr_result_bytebuffer_(Length
) PVOID
*Buffer
);
8847 CcSetDirtyPinnedData(
8849 _In_opt_ PLARGE_INTEGER Lsn
);
8860 CcSetBcbOwnerPointer(
8862 _In_ PVOID OwnerPointer
);
8867 CcUnpinDataForThread(
8869 _In_ ERESOURCE_THREAD ResourceThreadId
);
8874 CcSetAdditionalCacheAttributes(
8875 _In_ PFILE_OBJECT FileObject
,
8876 _In_ BOOLEAN DisableReadAhead
,
8877 _In_ BOOLEAN DisableWriteBehind
);
8885 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
8887 #if (NTDDI_VERSION >= NTDDI_WINXP)
8893 _In_ PFILE_OBJECT FileObject
,
8894 _In_ PMDL MdlChain
);
8899 CcSetLogHandleForFile(
8900 _In_ PFILE_OBJECT FileObject
,
8901 _In_ PVOID LogHandle
,
8902 _In_ PFLUSH_TO_LSN FlushToLsnRoutine
);
8908 _In_ PVOID LogHandle
,
8909 _In_ PDIRTY_PAGE_ROUTINE DirtyPageRoutine
,
8910 _In_ PVOID Context1
,
8911 _In_ PVOID Context2
);
8915 #if (NTDDI_VERSION >= NTDDI_WINXP)
8916 _Success_(return!=FALSE
)
8921 _In_ PFILE_OBJECT FileObject
,
8922 _In_ PLARGE_INTEGER FileOffset
,
8925 _Outptr_ PVOID
*Bcb
,
8926 _Outptr_result_bytebuffer_(Length
) PVOID
*Buffer
);
8927 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
8932 _In_ PFILE_OBJECT FileObject
,
8933 _In_ PLARGE_INTEGER FileOffset
,
8936 _Outptr_ PVOID
*Bcb
,
8937 _Outptr_result_bytebuffer_(Length
) PVOID
*Buffer
);
8940 #if (NTDDI_VERSION >= NTDDI_VISTA)
8946 _In_ PFILE_OBJECT FileObject
,
8947 _In_ PCC_FILE_SIZES FileSizes
);
8952 CcGetFileObjectFromSectionPtrsRef(
8953 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer
);
8958 CcSetParallelFlushFile(
8959 _In_ PFILE_OBJECT FileObject
,
8960 _In_ BOOLEAN EnableParallelFlush
);
8964 CcIsThereDirtyDataEx(
8966 _In_opt_ PULONG NumberOfDirtyPages
);
8970 #if (NTDDI_VERSION >= NTDDI_WIN7)
8974 CcCoherencyFlushAndPurgeCache(
8975 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8976 _In_opt_ PLARGE_INTEGER FileOffset
,
8978 _Out_ PIO_STATUS_BLOCK IoStatus
,
8979 _In_opt_ ULONG Flags
);
8982 #define CcGetFileSizePointer(FO) ( \
8983 ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
8986 #if (NTDDI_VERSION >= NTDDI_VISTA)
8990 CcPurgeCacheSection(
8991 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8992 _In_opt_ PLARGE_INTEGER FileOffset
,
8995 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
8999 CcPurgeCacheSection(
9000 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer
,
9001 _In_opt_ PLARGE_INTEGER FileOffset
,
9003 _In_ BOOLEAN UninitializeCacheMaps
);
9006 #if (NTDDI_VERSION >= NTDDI_WIN7)
9010 CcCopyWriteWontFlush(
9011 _In_ PFILE_OBJECT FileObject
,
9012 _In_ PLARGE_INTEGER FileOffset
,
9015 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
9018 #define CcReadAhead(FO, FOFF, LEN) ( \
9019 if ((LEN) >= 256) { \
9020 CcScheduleReadAhead((FO), (FOFF), (LEN)); \
9023 /******************************************************************************
9025 ******************************************************************************/
9029 _IRQL_requires_max_(PASSIVE_LEVEL
)
9034 _In_ HANDLE FileHandle
,
9035 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
9036 _Out_writes_bytes_(Length
) PVOID Buffer
,
9038 _In_ BOOLEAN ReturnSingleEntry
,
9039 _In_reads_bytes_opt_(EaListLength
) PVOID EaList
,
9040 _In_ ULONG EaListLength
,
9041 _In_opt_ PULONG EaIndex
,
9042 _In_ BOOLEAN RestartScan
);
9044 _IRQL_requires_max_(PASSIVE_LEVEL
)
9049 _In_ HANDLE FileHandle
,
9050 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
9051 _In_reads_bytes_(Length
) PVOID Buffer
,
9054 _IRQL_requires_max_(PASSIVE_LEVEL
)
9059 _In_ HANDLE ExistingTokenHandle
,
9060 _In_ ACCESS_MASK DesiredAccess
,
9061 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
9062 _In_ BOOLEAN EffectiveOnly
,
9063 _In_ TOKEN_TYPE TokenType
,
9064 _Out_ PHANDLE NewTokenHandle
);
9066 #if (NTDDI_VERSION >= NTDDI_WIN2K)
9068 _IRQL_requires_max_(PASSIVE_LEVEL
)
9073 _In_opt_ HANDLE Handle
,
9074 _In_ OBJECT_INFORMATION_CLASS ObjectInformationClass
,
9075 _Out_writes_bytes_opt_(ObjectInformationLength
) PVOID ObjectInformation
,
9076 _In_ ULONG ObjectInformationLength
,
9077 _Out_opt_ PULONG ReturnLength
);
9079 _IRQL_requires_max_(PASSIVE_LEVEL
)
9084 _In_ HANDLE KeyHandle
,
9085 _In_opt_ HANDLE EventHandle
,
9086 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
9087 _In_opt_ PVOID ApcContext
,
9088 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
9089 _In_ ULONG NotifyFilter
,
9090 _In_ BOOLEAN WatchSubtree
,
9091 _Out_writes_bytes_opt_(BufferLength
) PVOID Buffer
,
9092 _In_ ULONG BufferLength
,
9093 _In_ BOOLEAN Asynchronous
);
9095 _IRQL_requires_max_(PASSIVE_LEVEL
)
9100 _Out_ PHANDLE EventHandle
,
9101 _In_ ACCESS_MASK DesiredAccess
,
9102 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
9103 _In_ EVENT_TYPE EventType
,
9104 _In_ BOOLEAN InitialState
);
9106 _IRQL_requires_max_(PASSIVE_LEVEL
)
9111 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
9113 _IRQL_requires_max_(PASSIVE_LEVEL
)
9117 ZwQueryDirectoryFile(
9118 _In_ HANDLE FileHandle
,
9119 _In_opt_ HANDLE Event
,
9120 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
9121 _In_opt_ PVOID ApcContext
,
9122 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
9123 _Out_writes_bytes_(Length
) PVOID FileInformation
,
9125 _In_ FILE_INFORMATION_CLASS FileInformationClass
,
9126 _In_ BOOLEAN ReturnSingleEntry
,
9127 _In_opt_ PUNICODE_STRING FileName
,
9128 _In_ BOOLEAN RestartScan
);
9130 _IRQL_requires_max_(PASSIVE_LEVEL
)
9134 ZwSetVolumeInformationFile(
9135 _In_ HANDLE FileHandle
,
9136 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
9137 _In_reads_bytes_(Length
) PVOID FsInformation
,
9139 _In_ FS_INFORMATION_CLASS FsInformationClass
);
9141 _IRQL_requires_max_(PASSIVE_LEVEL
)
9146 _In_ HANDLE FileHandle
,
9147 _In_opt_ HANDLE Event
,
9148 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
9149 _In_opt_ PVOID ApcContext
,
9150 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
9151 _In_ ULONG FsControlCode
,
9152 _In_reads_bytes_opt_(InputBufferLength
) PVOID InputBuffer
,
9153 _In_ ULONG InputBufferLength
,
9154 _Out_writes_bytes_opt_(OutputBufferLength
) PVOID OutputBuffer
,
9155 _In_ ULONG OutputBufferLength
);
9157 _IRQL_requires_max_(PASSIVE_LEVEL
)
9162 _In_ HANDLE SourceProcessHandle
,
9163 _In_ HANDLE SourceHandle
,
9164 _In_opt_ HANDLE TargetProcessHandle
,
9165 _Out_opt_ PHANDLE TargetHandle
,
9166 _In_ ACCESS_MASK DesiredAccess
,
9167 _In_ ULONG HandleAttributes
,
9168 _In_ ULONG Options
);
9170 _IRQL_requires_max_(PASSIVE_LEVEL
)
9174 ZwOpenDirectoryObject(
9175 _Out_ PHANDLE DirectoryHandle
,
9176 _In_ ACCESS_MASK DesiredAccess
,
9177 _In_ POBJECT_ATTRIBUTES ObjectAttributes
);
9179 _Must_inspect_result_
9180 _At_(*BaseAddress
, __drv_allocatesMem(Mem
))
9185 ZwAllocateVirtualMemory(
9186 _In_ HANDLE ProcessHandle
,
9187 _Inout_
_Outptr_result_buffer_(*RegionSize
) PVOID
*BaseAddress
,
9188 _In_ ULONG_PTR ZeroBits
,
9189 _Inout_ PSIZE_T RegionSize
,
9190 _In_ ULONG AllocationType
,
9191 _In_ ULONG Protect
);
9193 _IRQL_requires_max_(PASSIVE_LEVEL
)
9197 ZwFreeVirtualMemory(
9198 _In_ HANDLE ProcessHandle
,
9199 _Inout_
__drv_freesMem(Mem
) PVOID
*BaseAddress
,
9200 _Inout_ PSIZE_T RegionSize
,
9201 _In_ ULONG FreeType
);
9203 _When_(Timeout
== NULL
, _IRQL_requires_max_(APC_LEVEL
))
9204 _When_(Timeout
->QuadPart
!= 0, _IRQL_requires_max_(APC_LEVEL
))
9205 _When_(Timeout
->QuadPart
== 0, _IRQL_requires_max_(DISPATCH_LEVEL
))
9209 ZwWaitForSingleObject(
9211 _In_ BOOLEAN Alertable
,
9212 _In_opt_ PLARGE_INTEGER Timeout
);
9214 _IRQL_requires_max_(DISPATCH_LEVEL
)
9219 _In_ HANDLE EventHandle
,
9220 _Out_opt_ PLONG PreviousState
);
9222 _IRQL_requires_max_(APC_LEVEL
)
9226 ZwFlushVirtualMemory(
9227 _In_ HANDLE ProcessHandle
,
9228 _Inout_ PVOID
*BaseAddress
,
9229 _Inout_ PSIZE_T RegionSize
,
9230 _Out_ PIO_STATUS_BLOCK IoStatusBlock
);
9232 _IRQL_requires_max_(PASSIVE_LEVEL
)
9236 ZwQueryInformationToken(
9237 _In_ HANDLE TokenHandle
,
9238 _In_ TOKEN_INFORMATION_CLASS TokenInformationClass
,
9239 _Out_writes_bytes_to_opt_(Length
,*ResultLength
) PVOID TokenInformation
,
9241 _Out_ PULONG ResultLength
);
9243 _IRQL_requires_max_(PASSIVE_LEVEL
)
9247 ZwSetSecurityObject(
9249 _In_ SECURITY_INFORMATION SecurityInformation
,
9250 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
);
9252 _IRQL_requires_max_(PASSIVE_LEVEL
)
9256 ZwQuerySecurityObject(
9257 _In_ HANDLE FileHandle
,
9258 _In_ SECURITY_INFORMATION SecurityInformation
,
9259 _Out_writes_bytes_to_(Length
,*ResultLength
) PSECURITY_DESCRIPTOR SecurityDescriptor
,
9261 _Out_ PULONG ResultLength
);
9262 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
9264 #if (NTDDI_VERSION >= NTDDI_WINXP)
9266 _IRQL_requires_max_(PASSIVE_LEVEL
)
9270 ZwOpenProcessTokenEx(
9271 _In_ HANDLE ProcessHandle
,
9272 _In_ ACCESS_MASK DesiredAccess
,
9273 _In_ ULONG HandleAttributes
,
9274 _Out_ PHANDLE TokenHandle
);
9276 _IRQL_requires_max_(PASSIVE_LEVEL
)
9280 ZwOpenThreadTokenEx(
9281 _In_ HANDLE ThreadHandle
,
9282 _In_ ACCESS_MASK DesiredAccess
,
9283 _In_ BOOLEAN OpenAsSelf
,
9284 _In_ ULONG HandleAttributes
,
9285 _Out_ PHANDLE TokenHandle
);
9287 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
9289 #if (NTDDI_VERSION >= NTDDI_VISTA)
9291 _IRQL_requires_max_(PASSIVE_LEVEL
)
9296 _In_ HANDLE FileHandle
,
9297 _In_opt_ HANDLE Event
,
9298 _In_opt_ PIO_APC_ROUTINE ApcRoutine
,
9299 _In_opt_ PVOID ApcContext
,
9300 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
9301 _In_ PLARGE_INTEGER ByteOffset
,
9302 _In_ PLARGE_INTEGER Length
,
9304 _In_ BOOLEAN FailImmediately
,
9305 _In_ BOOLEAN ExclusiveLock
);
9307 _IRQL_requires_max_(PASSIVE_LEVEL
)
9312 _In_ HANDLE FileHandle
,
9313 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
9314 _In_ PLARGE_INTEGER ByteOffset
,
9315 _In_ PLARGE_INTEGER Length
,
9318 _IRQL_requires_max_(PASSIVE_LEVEL
)
9322 ZwQueryQuotaInformationFile(
9323 _In_ HANDLE FileHandle
,
9324 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
9325 _Out_writes_bytes_(Length
) PVOID Buffer
,
9327 _In_ BOOLEAN ReturnSingleEntry
,
9328 _In_reads_bytes_opt_(SidListLength
) PVOID SidList
,
9329 _In_ ULONG SidListLength
,
9330 _In_opt_ PSID StartSid
,
9331 _In_ BOOLEAN RestartScan
);
9333 _IRQL_requires_max_(PASSIVE_LEVEL
)
9337 ZwSetQuotaInformationFile(
9338 _In_ HANDLE FileHandle
,
9339 _Out_ PIO_STATUS_BLOCK IoStatusBlock
,
9340 _In_reads_bytes_(Length
) PVOID Buffer
,
9343 _IRQL_requires_max_(PASSIVE_LEVEL
)
9348 _In_ HANDLE FileHandle
,
9349 _Out_ PIO_STATUS_BLOCK IoStatusBlock
);
9350 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
9351 #if (NTDDI_VERSION >= NTDDI_WIN7)
9353 _IRQL_requires_max_(PASSIVE_LEVEL
)
9357 ZwSetInformationToken(
9358 _In_ HANDLE TokenHandle
,
9359 _In_ TOKEN_INFORMATION_CLASS TokenInformationClass
,
9360 _In_reads_bytes_(TokenInformationLength
) PVOID TokenInformation
,
9361 _In_ ULONG TokenInformationLength
);
9363 #if (VER_PRODUCTBUILD >= 2195)
9367 ZwAdjustPrivilegesToken (
9368 _In_ HANDLE TokenHandle
,
9369 _In_ BOOLEAN DisableAllPrivileges
,
9370 _In_ PTOKEN_PRIVILEGES NewState
,
9371 _In_ ULONG BufferLength
,
9372 _Out_opt_ PTOKEN_PRIVILEGES PreviousState
,
9373 _Out_ PULONG ReturnLength
9375 #endif /* (VER_PRODUCTBUILD >= 2195) */
9381 _In_ HANDLE ThreadHandle
9387 ZwAccessCheckAndAuditAlarm (
9388 _In_ PUNICODE_STRING SubsystemName
,
9389 _In_ PVOID HandleId
,
9390 _In_ PUNICODE_STRING ObjectTypeName
,
9391 _In_ PUNICODE_STRING ObjectName
,
9392 _In_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
9393 _In_ ACCESS_MASK DesiredAccess
,
9394 _In_ PGENERIC_MAPPING GenericMapping
,
9395 _In_ BOOLEAN ObjectCreation
,
9396 _Out_ PACCESS_MASK GrantedAccess
,
9397 _Out_ PBOOLEAN AccessStatus
,
9398 _Out_ PBOOLEAN GenerateOnClose
9401 #if (VER_PRODUCTBUILD >= 2195)
9406 _In_ HANDLE FileHandle
,
9407 _Out_ PIO_STATUS_BLOCK IoStatusBlock
9409 #endif /* (VER_PRODUCTBUILD >= 2195) */
9415 _In_ HANDLE EventHandle
9421 ZwCloseObjectAuditAlarm (
9422 _In_ PUNICODE_STRING SubsystemName
,
9423 _In_ PVOID HandleId
,
9424 _In_ BOOLEAN GenerateOnClose
9430 ZwCreateSymbolicLinkObject (
9431 _Out_ PHANDLE SymbolicLinkHandle
,
9432 _In_ ACCESS_MASK DesiredAccess
,
9433 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
9434 _In_ PUNICODE_STRING TargetName
9440 ZwFlushInstructionCache (
9441 _In_ HANDLE ProcessHandle
,
9442 _In_opt_ PVOID BaseAddress
,
9443 _In_ ULONG FlushSize
9450 _In_ HANDLE FileHandle
,
9451 _Out_ PIO_STATUS_BLOCK IoStatusBlock
9454 #if (VER_PRODUCTBUILD >= 2195)
9458 ZwInitiatePowerAction (
9459 _In_ POWER_ACTION SystemAction
,
9460 _In_ SYSTEM_POWER_STATE MinSystemState
,
9462 _In_ BOOLEAN Asynchronous
9464 #endif /* (VER_PRODUCTBUILD >= 2195) */
9470 _In_ POBJECT_ATTRIBUTES KeyObjectAttributes
,
9471 _In_ POBJECT_ATTRIBUTES FileObjectAttributes
9477 ZwOpenProcessToken (
9478 _In_ HANDLE ProcessHandle
,
9479 _In_ ACCESS_MASK DesiredAccess
,
9480 _Out_ PHANDLE TokenHandle
9487 _Out_ PHANDLE ThreadHandle
,
9488 _In_ ACCESS_MASK DesiredAccess
,
9489 _In_ POBJECT_ATTRIBUTES ObjectAttributes
,
9490 _In_ PCLIENT_ID ClientId
9497 _In_ HANDLE ThreadHandle
,
9498 _In_ ACCESS_MASK DesiredAccess
,
9499 _In_ BOOLEAN OpenAsSelf
,
9500 _Out_ PHANDLE TokenHandle
9507 _In_ HANDLE EventHandle
,
9508 _In_opt_ PLONG PulseCount
9514 ZwQueryDefaultLocale (
9515 _In_ BOOLEAN UserProfile
,
9516 _Out_ PLCID DefaultLocaleId
9519 #if (VER_PRODUCTBUILD >= 2195)
9520 _IRQL_requires_max_(PASSIVE_LEVEL
)
9524 ZwQueryDirectoryObject(
9525 _In_ HANDLE DirectoryHandle
,
9527 _In_ ULONG BufferLength
,
9528 _In_ BOOLEAN ReturnSingleEntry
,
9529 _In_ BOOLEAN RestartScan
,
9530 _Inout_ PULONG Context
,
9531 _Out_opt_ PULONG ReturnLength
9533 #endif /* (VER_PRODUCTBUILD >= 2195) */
9538 ZwQueryInformationProcess (
9539 _In_ HANDLE ProcessHandle
,
9540 _In_ PROCESSINFOCLASS ProcessInformationClass
,
9541 _Out_ PVOID ProcessInformation
,
9542 _In_ ULONG ProcessInformationLength
,
9543 _Out_opt_ PULONG ReturnLength
9550 _In_ POBJECT_ATTRIBUTES NewFileObjectAttributes
,
9551 _In_ HANDLE KeyHandle
,
9552 _In_ POBJECT_ATTRIBUTES OldFileObjectAttributes
9559 _In_ HANDLE EventHandle
,
9560 _Out_opt_ PLONG NumberOfWaitingThreads
9563 #if (VER_PRODUCTBUILD >= 2195)
9568 _In_ HANDLE KeyHandle
,
9569 _In_ HANDLE FileHandle
,
9572 #endif /* (VER_PRODUCTBUILD >= 2195) */
9578 _In_ HANDLE KeyHandle
,
9579 _In_ HANDLE FileHandle
9585 ZwSetDefaultLocale (
9586 _In_ BOOLEAN UserProfile
,
9587 _In_ LCID DefaultLocaleId
9590 #if (VER_PRODUCTBUILD >= 2195)
9594 ZwSetDefaultUILanguage (
9595 _In_ LANGID LanguageId
9597 #endif /* (VER_PRODUCTBUILD >= 2195) */
9602 ZwSetInformationProcess (
9603 _In_ HANDLE ProcessHandle
,
9604 _In_ PROCESSINFOCLASS ProcessInformationClass
,
9605 _In_ PVOID ProcessInformation
,
9606 _In_ ULONG ProcessInformationLength
9613 _In_ PLARGE_INTEGER NewTime
,
9614 _Out_opt_ PLARGE_INTEGER OldTime
9621 _In_ POBJECT_ATTRIBUTES KeyObjectAttributes
9627 ZwWaitForMultipleObjects (
9628 _In_ ULONG HandleCount
,
9629 _In_ PHANDLE Handles
,
9630 _In_ WAIT_TYPE WaitType
,
9631 _In_ BOOLEAN Alertable
,
9632 _In_opt_ PLARGE_INTEGER Timeout
9642 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
9648 #define ISSP_LEVEL 32
9652 #define MIDL_PROP(x) x
9654 #define MIDL_PROP(x)
9657 #define SEC_TEXT TEXT
9659 #define SEC_ENTRY __stdcall
9661 #if defined(_NO_KSECDD_IMPORT_)
9662 #define KSECDDDECLSPEC
9664 #define KSECDDDECLSPEC __declspec(dllimport)
9667 #define SECQOP_WRAP_NO_ENCRYPT 0x80000001
9668 #define SECQOP_WRAP_OOB_DATA 0x40000000
9670 #define SECURITY_ENTRYPOINTW SEC_TEXT("InitSecurityInterfaceW")
9671 #define SECURITY_ENTRYPOINT SECURITY_ENTRYPOINTW
9673 #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION 1
9674 #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 2
9675 #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_3 3
9676 #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_4 4
9678 #define SECURITY_NATIVE_DREP 0x00000010
9679 #define SECURITY_NETWORK_DREP 0x00000000
9681 #define SECPKG_ID_NONE 0xFFFF
9683 #define SECPKG_CRED_ATTR_NAMES 1
9684 #define SECPKG_CRED_ATTR_SSI_PROVIDER 2
9686 #define SECPKG_ATTR_SIZES 0
9687 #define SECPKG_ATTR_NAMES 1
9688 #define SECPKG_ATTR_LIFESPAN 2
9689 #define SECPKG_ATTR_DCE_INFO 3
9690 #define SECPKG_ATTR_STREAM_SIZES 4
9691 #define SECPKG_ATTR_KEY_INFO 5
9692 #define SECPKG_ATTR_AUTHORITY 6
9693 #define SECPKG_ATTR_PROTO_INFO 7
9694 #define SECPKG_ATTR_PASSWORD_EXPIRY 8
9695 #define SECPKG_ATTR_SESSION_KEY 9
9696 #define SECPKG_ATTR_PACKAGE_INFO 10
9697 #define SECPKG_ATTR_USER_FLAGS 11
9698 #define SECPKG_ATTR_NEGOTIATION_INFO 12
9699 #define SECPKG_ATTR_NATIVE_NAMES 13
9700 #define SECPKG_ATTR_FLAGS 14
9701 #define SECPKG_ATTR_USE_VALIDATED 15
9702 #define SECPKG_ATTR_CREDENTIAL_NAME 16
9703 #define SECPKG_ATTR_TARGET_INFORMATION 17
9704 #define SECPKG_ATTR_ACCESS_TOKEN 18
9705 #define SECPKG_ATTR_TARGET 19
9706 #define SECPKG_ATTR_AUTHENTICATION_ID 20
9707 #define SECPKG_ATTR_LOGOFF_TIME 21
9708 #define SECPKG_ATTR_NEGO_KEYS 22
9709 #define SECPKG_ATTR_PROMPTING_NEEDED 24
9710 #define SECPKG_ATTR_UNIQUE_BINDINGS 25
9711 #define SECPKG_ATTR_ENDPOINT_BINDINGS 26
9712 #define SECPKG_ATTR_CLIENT_SPECIFIED_TARGET 27
9713 #define SECPKG_ATTR_LAST_CLIENT_TOKEN_STATUS 30
9714 #define SECPKG_ATTR_NEGO_PKG_INFO 31
9715 #define SECPKG_ATTR_NEGO_STATUS 32
9716 #define SECPKG_ATTR_CONTEXT_DELETED 33
9718 #define SECPKG_FLAG_INTEGRITY 0x00000001
9719 #define SECPKG_FLAG_PRIVACY 0x00000002
9720 #define SECPKG_FLAG_TOKEN_ONLY 0x00000004
9721 #define SECPKG_FLAG_DATAGRAM 0x00000008
9722 #define SECPKG_FLAG_CONNECTION 0x00000010
9723 #define SECPKG_FLAG_MULTI_REQUIRED 0x00000020
9724 #define SECPKG_FLAG_CLIENT_ONLY 0x00000040
9725 #define SECPKG_FLAG_EXTENDED_ERROR 0x00000080
9726 #define SECPKG_FLAG_IMPERSONATION 0x00000100
9727 #define SECPKG_FLAG_ACCEPT_WIN32_NAME 0x00000200
9728 #define SECPKG_FLAG_STREAM 0x00000400
9729 #define SECPKG_FLAG_NEGOTIABLE 0x00000800
9730 #define SECPKG_FLAG_GSS_COMPATIBLE 0x00001000
9731 #define SECPKG_FLAG_LOGON 0x00002000
9732 #define SECPKG_FLAG_ASCII_BUFFERS 0x00004000
9733 #define SECPKG_FLAG_FRAGMENT 0x00008000
9734 #define SECPKG_FLAG_MUTUAL_AUTH 0x00010000
9735 #define SECPKG_FLAG_DELEGATION 0x00020000
9736 #define SECPKG_FLAG_READONLY_WITH_CHECKSUM 0x00040000
9737 #define SECPKG_FLAG_RESTRICTED_TOKENS 0x00080000
9738 #define SECPKG_FLAG_NEGO_EXTENDER 0x00100000
9739 #define SECPKG_FLAG_NEGOTIABLE2 0x00200000
9741 #define SECPKG_CRED_INBOUND 0x00000001
9742 #define SECPKG_CRED_OUTBOUND 0x00000002
9743 #define SECPKG_CRED_BOTH 0x00000003
9744 #define SECPKG_CRED_DEFAULT 0x00000004
9745 #define SECPKG_CRED_RESERVED 0xF0000000
9746 #define SECPKG_CRED_AUTOLOGON_RESTRICTED 0x00000010
9747 #define SECPKG_CRED_PROCESS_POLICY_ONLY 0x00000020
9749 #define SECPKG_CONTEXT_EXPORT_RESET_NEW 0x00000001
9750 #define SECPKG_CONTEXT_EXPORT_DELETE_OLD 0x00000002
9751 #define SECPKG_CONTEXT_EXPORT_TO_KERNEL 0x00000004
9753 #define SECPKG_ATTR_SUBJECT_SECURITY_ATTRIBUTES 128
9754 #define SECPKG_ATTR_NEGO_INFO_FLAG_NO_KERBEROS 0x1
9755 #define SECPKG_ATTR_NEGO_INFO_FLAG_NO_NTLM 0x2
9757 #define SecPkgContext_NativeNames SecPkgContext_NativeNamesW
9758 #define PSecPkgContext_NativeNames PSecPkgContext_NativeNamesW
9760 #define SECBUFFER_VERSION 0
9762 #define SECBUFFER_EMPTY 0
9763 #define SECBUFFER_DATA 1
9764 #define SECBUFFER_TOKEN 2
9765 #define SECBUFFER_PKG_PARAMS 3
9766 #define SECBUFFER_MISSING 4
9767 #define SECBUFFER_EXTRA 5
9768 #define SECBUFFER_STREAM_TRAILER 6
9769 #define SECBUFFER_STREAM_HEADER 7
9770 #define SECBUFFER_NEGOTIATION_INFO 8
9771 #define SECBUFFER_PADDING 9
9772 #define SECBUFFER_STREAM 10
9773 #define SECBUFFER_MECHLIST 11
9774 #define SECBUFFER_MECHLIST_SIGNATURE 12
9775 #define SECBUFFER_TARGET 13
9776 #define SECBUFFER_CHANNEL_BINDINGS 14
9777 #define SECBUFFER_CHANGE_PASS_RESPONSE 15
9778 #define SECBUFFER_TARGET_HOST 16
9779 #define SECBUFFER_ALERT 17
9781 #define SECBUFFER_ATTRMASK 0xF0000000
9782 #define SECBUFFER_READONLY 0x80000000
9783 #define SECBUFFER_READONLY_WITH_CHECKSUM 0x10000000
9784 #define SECBUFFER_RESERVED 0x60000000
9786 #define ISC_REQ_DELEGATE 0x00000001
9787 #define ISC_REQ_MUTUAL_AUTH 0x00000002
9788 #define ISC_REQ_REPLAY_DETECT 0x00000004
9789 #define ISC_REQ_SEQUENCE_DETECT 0x00000008
9790 #define ISC_REQ_CONFIDENTIALITY 0x00000010
9791 #define ISC_REQ_USE_SESSION_KEY 0x00000020
9792 #define ISC_REQ_PROMPT_FOR_CREDS 0x00000040
9793 #define ISC_REQ_USE_SUPPLIED_CREDS 0x00000080
9794 #define ISC_REQ_ALLOCATE_MEMORY 0x00000100
9795 #define ISC_REQ_USE_DCE_STYLE 0x00000200
9796 #define ISC_REQ_DATAGRAM 0x00000400
9797 #define ISC_REQ_CONNECTION 0x00000800
9798 #define ISC_REQ_CALL_LEVEL 0x00001000
9799 #define ISC_REQ_FRAGMENT_SUPPLIED 0x00002000
9800 #define ISC_REQ_EXTENDED_ERROR 0x00004000
9801 #define ISC_REQ_STREAM 0x00008000
9802 #define ISC_REQ_INTEGRITY 0x00010000
9803 #define ISC_REQ_IDENTIFY 0x00020000
9804 #define ISC_REQ_NULL_SESSION 0x00040000
9805 #define ISC_REQ_MANUAL_CRED_VALIDATION 0x00080000
9806 #define ISC_REQ_RESERVED1 0x00100000
9807 #define ISC_REQ_FRAGMENT_TO_FIT 0x00200000
9808 #define ISC_REQ_FORWARD_CREDENTIALS 0x00400000
9809 #define ISC_REQ_NO_INTEGRITY 0x00800000
9810 #define ISC_REQ_USE_HTTP_STYLE 0x01000000
9812 #define ISC_RET_DELEGATE 0x00000001
9813 #define ISC_RET_MUTUAL_AUTH 0x00000002
9814 #define ISC_RET_REPLAY_DETECT 0x00000004
9815 #define ISC_RET_SEQUENCE_DETECT 0x00000008
9816 #define ISC_RET_CONFIDENTIALITY 0x00000010
9817 #define ISC_RET_USE_SESSION_KEY 0x00000020
9818 #define ISC_RET_USED_COLLECTED_CREDS 0x00000040
9819 #define ISC_RET_USED_SUPPLIED_CREDS 0x00000080
9820 #define ISC_RET_ALLOCATED_MEMORY 0x00000100
9821 #define ISC_RET_USED_DCE_STYLE 0x00000200
9822 #define ISC_RET_DATAGRAM 0x00000400
9823 #define ISC_RET_CONNECTION 0x00000800
9824 #define ISC_RET_INTERMEDIATE_RETURN 0x00001000
9825 #define ISC_RET_CALL_LEVEL 0x00002000
9826 #define ISC_RET_EXTENDED_ERROR 0x00004000
9827 #define ISC_RET_STREAM 0x00008000
9828 #define ISC_RET_INTEGRITY 0x00010000
9829 #define ISC_RET_IDENTIFY 0x00020000
9830 #define ISC_RET_NULL_SESSION 0x00040000
9831 #define ISC_RET_MANUAL_CRED_VALIDATION 0x00080000
9832 #define ISC_RET_RESERVED1 0x00100000
9833 #define ISC_RET_FRAGMENT_ONLY 0x00200000
9834 #define ISC_RET_FORWARD_CREDENTIALS 0x00400000
9835 #define ISC_RET_USED_HTTP_STYLE 0x01000000
9836 #define ISC_RET_NO_ADDITIONAL_TOKEN 0x02000000
9837 #define ISC_RET_REAUTHENTICATION 0x08000000
9839 #define ASC_REQ_DELEGATE 0x00000001
9840 #define ASC_REQ_MUTUAL_AUTH 0x00000002
9841 #define ASC_REQ_REPLAY_DETECT 0x00000004
9842 #define ASC_REQ_SEQUENCE_DETECT 0x00000008
9843 #define ASC_REQ_CONFIDENTIALITY 0x00000010
9844 #define ASC_REQ_USE_SESSION_KEY 0x00000020
9845 #define ASC_REQ_ALLOCATE_MEMORY 0x00000100
9846 #define ASC_REQ_USE_DCE_STYLE 0x00000200
9847 #define ASC_REQ_DATAGRAM 0x00000400
9848 #define ASC_REQ_CONNECTION 0x00000800
9849 #define ASC_REQ_CALL_LEVEL 0x00001000
9850 #define ASC_REQ_EXTENDED_ERROR 0x00008000
9851 #define ASC_REQ_STREAM 0x00010000
9852 #define ASC_REQ_INTEGRITY 0x00020000
9853 #define ASC_REQ_LICENSING 0x00040000
9854 #define ASC_REQ_IDENTIFY 0x00080000
9855 #define ASC_REQ_ALLOW_NULL_SESSION 0x00100000
9856 #define ASC_REQ_ALLOW_NON_USER_LOGONS 0x00200000
9857 #define ASC_REQ_ALLOW_CONTEXT_REPLAY 0x00400000
9858 #define ASC_REQ_FRAGMENT_TO_FIT 0x00800000
9859 #define ASC_REQ_FRAGMENT_SUPPLIED 0x00002000
9860 #define ASC_REQ_NO_TOKEN 0x01000000
9861 #define ASC_REQ_PROXY_BINDINGS 0x04000000
9862 //#define SSP_RET_REAUTHENTICATION 0x08000000 // internal
9864 #define ASC_REQ_ALLOW_MISSING_BINDINGS 0x10000000
9865 #define ASC_RET_DELEGATE 0x00000001
9866 #define ASC_RET_MUTUAL_AUTH 0x00000002
9867 #define ASC_RET_REPLAY_DETECT 0x00000004
9868 #define ASC_RET_SEQUENCE_DETECT 0x00000008
9869 #define ASC_RET_CONFIDENTIALITY 0x00000010
9870 #define ASC_RET_USE_SESSION_KEY 0x00000020
9871 #define ASC_RET_ALLOCATED_MEMORY 0x00000100
9872 #define ASC_RET_USED_DCE_STYLE 0x00000200
9873 #define ASC_RET_DATAGRAM 0x00000400
9874 #define ASC_RET_CONNECTION 0x00000800
9875 #define ASC_RET_CALL_LEVEL 0x00002000
9876 #define ASC_RET_THIRD_LEG_FAILED 0x00004000
9877 #define ASC_RET_EXTENDED_ERROR 0x00008000
9878 #define ASC_RET_STREAM 0x00010000
9879 #define ASC_RET_INTEGRITY 0x00020000
9880 #define ASC_RET_LICENSING 0x00040000
9881 #define ASC_RET_IDENTIFY 0x00080000
9882 #define ASC_RET_NULL_SESSION 0x00100000
9883 #define ASC_RET_ALLOW_NON_USER_LOGONS 0x00200000
9884 #define ASC_RET_ALLOW_CONTEXT_REPLAY 0x00400000
9885 #define ASC_RET_FRAGMENT_ONLY 0x00800000
9886 #define ASC_RET_NO_TOKEN 0x01000000
9887 #define ASC_RET_NO_ADDITIONAL_TOKEN 0x02000000
9888 #define ASC_RET_NO_PROXY_BINDINGS 0x04000000
9889 //#define SSP_RET_REAUTHENTICATION 0x08000000 // internal
9890 #define ASC_RET_MISSING_BINDINGS 0x10000000
9892 #define SEC_DELETED_HANDLE ((ULONG_PTR)(-2))
9894 #define SecInvalidateHandle(x) \
9895 ((PSecHandle)(x))->dwLower = ((PSecHandle)(x))->dwUpper = ((ULONG_PTR)((INT_PTR)-1));
9897 #define SecIsValidHandle(x) \
9898 ( ( ((PSecHandle)(x))->dwLower != (ULONG_PTR)(INT_PTR)-1 ) && \
9899 ( ((PSecHandle)(x))->dwUpper != (ULONG_PTR)(INT_PTR)-1 ) )
9901 typedef WCHAR SEC_WCHAR
;
9902 typedef CHAR SEC_CHAR
;
9903 typedef LARGE_INTEGER _SECURITY_INTEGER
, SECURITY_INTEGER
, *PSECURITY_INTEGER
;
9904 typedef SECURITY_INTEGER TimeStamp
, *PTimeStamp
;
9905 typedef UNICODE_STRING SECURITY_STRING
, *PSECURITY_STRING
;
9907 #define PSSPI_SEC_STRING PSECURITY_STRING
9909 #define PSSPI_SEC_STRING SEC_WCHAR*
9912 typedef PVOID PSEC_WINNT_AUTH_IDENTITY_OPAQUE
;
9914 #ifndef __SECSTATUS_DEFINED__
9915 typedef LONG SECURITY_STATUS
;
9916 #define __SECSTATUS_DEFINED__
9919 typedef enum _SECPKG_CRED_CLASS
9921 SecPkgCredClass_None
= 0,
9922 SecPkgCredClass_Ephemeral
= 10,
9923 SecPkgCredClass_PersistedGeneric
= 20,
9924 SecPkgCredClass_PersistedSpecific
= 30,
9925 SecPkgCredClass_Explicit
= 40,
9926 } SECPKG_CRED_CLASS
, *PSECPKG_CRED_CLASS
;
9928 typedef struct _SEC_NEGOTIATION_INFO
9934 } SEC_NEGOTIATION_INFO
, *PSEC_NEGOTIATION_INFO
;
9936 typedef struct _SEC_CHANNEL_BINDINGS
9938 ULONG dwInitiatorAddrType
;
9939 ULONG cbInitiatorLength
;
9940 ULONG dwInitiatorOffset
;
9941 ULONG dwAcceptorAddrType
;
9942 ULONG cbAcceptorLength
;
9943 ULONG dwAcceptorOffset
;
9944 ULONG cbApplicationDataLength
;
9945 ULONG dwApplicationDataOffset
;
9946 } SEC_CHANNEL_BINDINGS
, *PSEC_CHANNEL_BINDINGS
;
9948 #ifndef _AUTH_IDENTITY_EX2_DEFINED
9949 #define _AUTH_IDENTITY_EX2_DEFINED
9950 typedef struct _SEC_WINNT_AUTH_IDENTITY_EX2
9953 USHORT cbHeaderLength
;
9954 ULONG cbStructureLength
;
9958 USHORT DomainLength
;
9959 ULONG PackedCredentialsOffset
;
9960 USHORT PackedCredentialsLength
;
9962 ULONG PackageListOffset
;
9963 USHORT PackageListLength
;
9964 } SEC_WINNT_AUTH_IDENTITY_EX2
, *PSEC_WINNT_AUTH_IDENTITY_EX2
;
9965 #define SEC_WINNT_AUTH_IDENTITY_VERSION_2 0x201
9968 #ifndef _AUTH_IDENTITY_DEFINED
9969 #define _AUTH_IDENTITY_DEFINED
9970 typedef struct _SEC_WINNT_AUTH_IDENTITY_W
9977 ULONG PasswordLength
;
9979 } SEC_WINNT_AUTH_IDENTITY_W
, *PSEC_WINNT_AUTH_IDENTITY_W
;
9980 #define SEC_WINNT_AUTH_IDENTITY_ANSI 0x1
9981 #define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x2
9982 #define SEC_WINNT_AUTH_IDENTITY SEC_WINNT_AUTH_IDENTITY_W
9983 #define PSEC_WINNT_AUTH_IDENTITY PSEC_WINNT_AUTH_IDENTITY_W
9984 #define _SEC_WINNT_AUTH_IDENTITY _SEC_WINNT_AUTH_IDENTITY_W
9987 #ifndef SEC_WINNT_AUTH_IDENTITY_VERSION
9988 #define SEC_WINNT_AUTH_IDENTITY_VERSION 0x200
9989 typedef struct _SEC_WINNT_AUTH_IDENTITY_EXW
9998 ULONG PasswordLength
;
10000 PUSHORT PackageList
;
10001 ULONG PackageListLength
;
10002 } SEC_WINNT_AUTH_IDENTITY_EXW
, *PSEC_WINNT_AUTH_IDENTITY_EXW
;
10003 #define SEC_WINNT_AUTH_IDENTITY_EX SEC_WINNT_AUTH_IDENTITY_EXW
10004 #define PSEC_WINNT_AUTH_IDENTITY_EX PSEC_WINNT_AUTH_IDENTITY_EXW
10007 #ifndef __SECHANDLE_DEFINED__
10008 typedef struct _SecHandle
10012 } SecHandle
, *PSecHandle
;
10013 #define __SECHANDLE_DEFINED__
10016 typedef SecHandle CredHandle
, *PCredHandle
, CtxtHandle
, *PCtxtHandle
;
10018 typedef struct _SecBuffer
10023 MIDL_PROP([size_is(cbBuffer
)]) PCHAR pvBuffer
;
10025 _Field_size_bytes_(cbBuffer
) void SEC_FAR
*pvBuffer
;
10027 } SecBuffer
, *PSecBuffer
;
10029 typedef struct _SecBufferDesc
10033 MIDL_PROP([size_is(cBuffers
)]) _Field_size_(cBuffers
) PSecBuffer pBuffers
;
10034 } SecBufferDesc
, SEC_FAR
*PSecBufferDesc
;
10036 typedef struct _SecPkgInfoW
10038 ULONG fCapabilities
;
10042 MIDL_PROP([string
]) SEC_WCHAR
*Name
;
10043 MIDL_PROP([string
]) SEC_WCHAR
*Comment
;
10044 } SecPkgInfoW
, *PSecPkgInfoW
;
10045 #define SecPkgInfo SecPkgInfoW
10046 #define PSecPkgInfo PSecPkgInfoW
10048 typedef struct _SecPkgCredentials_NamesW
10050 MIDL_PROP([string
]) SEC_WCHAR
*sUserName
;
10051 } SecPkgCredentials_NamesW
, *PSecPkgCredentials_NamesW
;
10052 #define SecPkgCredentials_Names SecPkgCredentials_NamesW
10053 #define PSecPkgCredentials_Names PSecPkgCredentials_NamesW
10055 typedef struct _SecPkgContext_NamesW
10057 SEC_WCHAR
*sUserName
;
10058 } SecPkgContext_NamesW
, *PSecPkgContext_NamesW
;
10059 #define SecPkgContext_Names SecPkgContext_NamesW
10060 #define PSecPkgContext_Names PSecPkgContext_NamesW
10062 #if OSVER(NTDDI_VERSION) > NTDDI_WIN2K
10063 typedef struct _SecPkgContext_CredentialNameW
10065 ULONG CredentialType
;
10066 SEC_WCHAR
*sCredentialName
;
10067 } SecPkgContext_CredentialNameW
, *PSecPkgContext_CredentialNameW
;
10069 #define SecPkgContext_CredentialName SecPkgContext_CredentialNameW
10070 #define PSecPkgContext_CredentialName PSecPkgContext_CredentialNameW
10072 typedef struct _SecPkgContext_SubjectAttributes
10074 PVOID AttributeInfo
;
10075 } SecPkgContext_SubjectAttributes
, *PSecPkgContext_SubjectAttributes
;
10077 typedef struct _SecPkgContext_CredInfo
10079 SECPKG_CRED_CLASS CredClass
;
10080 ULONG IsPromptingNeeded
;
10081 } SecPkgContext_CredInfo
, *PSecPkgContext_CredInfo
;
10083 typedef struct _SecPkgContext_NegoPackageInfo
10086 } SecPkgContext_NegoPackageInfo
, *PSecPkgContext_NegoPackageInfo
;
10088 typedef struct _SecPkgContext_NegoStatus
10091 } SecPkgContext_NegoStatus
, *PSecPkgContext_NegoStatus
;
10093 typedef struct _SecPkgContext_Sizes
10096 ULONG cbMaxSignature
;
10098 ULONG cbSecurityTrailer
;
10099 } SecPkgContext_Sizes
, *PSecPkgContext_Sizes
;
10101 typedef struct _SecPkgContext_StreamSizes
10105 ULONG cbMaximumMessage
;
10108 } SecPkgContext_StreamSizes
, *PSecPkgContext_StreamSizes
;
10110 typedef struct _SecPkgContext_Lifespan
10113 TimeStamp tsExpiry
;
10114 } SecPkgContext_Lifespan
, *PSecPkgContext_Lifespan
;
10116 typedef struct _SecPkgContext_PasswordExpiry
10118 TimeStamp tsPasswordExpires
;
10119 } SecPkgContext_PasswordExpiry
, *PSecPkgContext_PasswordExpiry
;
10121 typedef struct _SecPkgContext_ProtoInfoW
10123 SEC_WCHAR
*sProtocolName
;
10124 ULONG majorVersion
;
10125 ULONG minorVersion
;
10126 } SecPkgContext_ProtoInfoW
, *PSecPkgContext_ProtoInfoW
;
10127 #define SecPkgContext_ProtoInfo SecPkgContext_ProtoInfoW
10128 #define PSecPkgContext_ProtoInfo PSecPkgContext_ProtoInfoW
10130 typedef struct _SecPkgContext_KeyInfoW
10132 SEC_WCHAR
*sSignatureAlgorithmName
;
10133 SEC_WCHAR
*sEncryptAlgorithmName
;
10135 ULONG SignatureAlgorithm
;
10136 ULONG EncryptAlgorithm
;
10137 } SecPkgContext_KeyInfoW
, *PSecPkgContext_KeyInfoW
;
10138 #define SecPkgContext_KeyInfo SecPkgContext_KeyInfoW
10139 #define PSecPkgContext_KeyInfo PSecPkgContext_KeyInfoW
10141 typedef struct _SecPkgContext_SessionKey
10143 ULONG SessionKeyLength
;
10144 _Field_size_bytes_(SessionKeyLength
) PUCHAR SessionKey
;
10145 } SecPkgContext_SessionKey
, *PSecPkgContext_SessionKey
;
10147 typedef struct _SecPkgContext_NegoKeys
10151 _Field_size_bytes_(KeyLength
) PUCHAR KeyValue
;
10152 ULONG VerifyKeyType
;
10153 USHORT VerifyKeyLength
;
10154 _Field_size_bytes_(VerifyKeyLength
) PUCHAR VerifyKeyValue
;
10155 } SecPkgContext_NegoKeys
, *PSecPkgContext_NegoKeys
;
10157 typedef struct _SecPkgContext_DceInfo
10161 } SecPkgContext_DceInfo
, *PSecPkgContext_DceInfo
;
10163 typedef struct _SecPkgContext_PackageInfoW
10165 PSecPkgInfoW PackageInfo
;
10166 } SecPkgContext_PackageInfoW
, *PSecPkgContext_PackageInfoW
;
10167 #define SecPkgContext_PackageInfo SecPkgContext_PackageInfoW
10168 #define PSecPkgContext_PackageInfo PSecPkgContext_PackageInfoW
10170 typedef struct _SecPkgContext_UserFlags
10173 } SecPkgContext_UserFlags
, *PSecPkgContext_UserFlags
;
10175 typedef struct _SecPkgContext_Flags
10178 } SecPkgContext_Flags
, *PSecPkgContext_Flags
;
10180 typedef struct _SecPkgContext_NegotiationInfoW
10182 PSecPkgInfoW PackageInfo
;
10183 ULONG NegotiationState
;
10184 } SecPkgContext_NegotiationInfoW
, *PSecPkgContext_NegotiationInfoW
;
10186 typedef struct _SecPkgContext_AuthorityW
10188 SEC_WCHAR
*sAuthorityName
;
10189 } SecPkgContext_AuthorityW
, *PSecPkgContext_AuthorityW
;
10190 #define SecPkgContext_Authority SecPkgContext_AuthorityW
10191 #define PSecPkgContext_Authority PSecPkgContext_AuthorityW
10194 #if NTDDI_VERSION > NTDDI_WS03
10195 typedef struct _SecPkgCredentials_SSIProviderW
10197 SEC_WCHAR
*sProviderName
;
10198 ULONG ProviderInfoLength
;
10199 PCHAR ProviderInfo
;
10200 } SecPkgCredentials_SSIProviderW
, *PSecPkgCredentials_SSIProviderW
;
10201 #define SecPkgCredentials_SSIProvider SecPkgCredentials_SSIProviderW
10202 #define PSecPkgCredentials_SSIProvider PSecPkgCredentials_SSIProviderW
10204 typedef struct _SecPkgContext_LogoffTime
10206 TimeStamp tsLogoffTime
;
10207 } SecPkgContext_LogoffTime
, *PSecPkgContext_LogoffTime
;
10210 /* forward declaration */
10211 typedef struct _SECURITY_FUNCTION_TABLE_W SecurityFunctionTableW
, *PSecurityFunctionTableW
;
10212 #define SecurityFunctionTable SecurityFunctionTableW
10213 #define PSecurityFunctionTable PSecurityFunctionTableW
10217 (SEC_ENTRY
* SEC_GET_KEY_FN
)(
10222 SECURITY_STATUS
*Status
);
10227 AcceptSecurityContext(
10228 _In_opt_ PCredHandle phCredential
,
10229 _In_opt_ PCtxtHandle phContext
,
10230 _In_opt_ PSecBufferDesc pInput
,
10231 _In_ ULONG fContextReq
,
10232 _In_ ULONG TargetDataRep
,
10233 _In_opt_ PCtxtHandle phNewContext
,
10234 _In_opt_ PSecBufferDesc pOutput
,
10235 _Out_ PULONG pfContextAttr
,
10236 _Out_opt_ PTimeStamp ptsExpiry
);
10240 (SEC_ENTRY
* ACCEPT_SECURITY_CONTEXT_FN
)(
10254 AcquireCredentialsHandleW(
10255 _In_opt_ PSSPI_SEC_STRING pPrincipal
,
10256 _In_ PSSPI_SEC_STRING pPackage
,
10257 _In_ ULONG fCredentialUse
,
10258 _In_opt_ PVOID pvLogonId
,
10259 _In_opt_ PVOID pAuthData
,
10260 _In_opt_ SEC_GET_KEY_FN pGetKeyFn
,
10261 _In_opt_ PVOID pvGetKeyArgument
,
10262 _Out_ PCredHandle phCredential
,
10263 _Out_opt_ PTimeStamp ptsExpiry
);
10264 #define AcquireCredentialsHandle AcquireCredentialsHandleW
10268 (SEC_ENTRY
* ACQUIRE_CREDENTIALS_HANDLE_FN_W
)(
10278 #define ACQUIRE_CREDENTIALS_HANDLE_FN ACQUIRE_CREDENTIALS_HANDLE_FN_W
10283 _In_ PCredHandle hCredentials
,
10284 _In_opt_ LPSTR pszPrincipal
,
10285 _In_ LPSTR pszPackage
,
10286 _In_ ULONG fCredentialUse
,
10287 _In_opt_ PVOID pAuthData
,
10288 _In_opt_ SEC_GET_KEY_FN pGetKeyFn
,
10289 _In_opt_ PVOID pvGetKeyArgument
,
10290 _Out_opt_ PTimeStamp ptsExpiry
);
10294 (SEC_ENTRY
* ADD_CREDENTIALS_FN_A
)(
10308 _In_ PCredHandle hCredentials
,
10309 _In_opt_ PSSPI_SEC_STRING pPrincipal
,
10310 _In_ PSSPI_SEC_STRING pPackage
,
10311 _In_ ULONG fCredentialUse
,
10312 _In_opt_ PVOID pAuthData
,
10313 _In_opt_ SEC_GET_KEY_FN pGetKeyFn
,
10314 _In_opt_ PVOID pvGetKeyArgument
,
10315 _Out_opt_ PTimeStamp ptsExpiry
);
10319 (SEC_ENTRY
* ADD_CREDENTIALS_FN_W
)(
10330 #define AddCredentials AddCredentialsW
10331 #define ADD_CREDENTIALS_FN ADD_CREDENTIALS_FN_W
10333 #define AddCredentials AddCredentialsA
10334 #define ADD_CREDENTIALS_FN ADD_CREDENTIALS_FN_A
10341 _In_ PCtxtHandle phContext
,
10342 _In_ PSecBufferDesc pInput
);
10346 (SEC_ENTRY
* APPLY_CONTROL_TOKEN_FN
)(
10347 PCtxtHandle
, PSecBufferDesc
);
10349 #if (ISSP_MODE != 0)
10353 ChangeAccountPasswordA(
10354 _In_ SEC_CHAR
* pszPackageName
,
10355 _In_ SEC_CHAR
* pszDomainName
,
10356 _In_ SEC_CHAR
* pszAccountName
,
10357 _In_ SEC_CHAR
* pszOldPassword
,
10358 _In_ SEC_CHAR
* pszNewPassword
,
10359 _In_ BOOLEAN bImpersonating
,
10360 _In_ ULONG dwReserved
,
10361 _Inout_ PSecBufferDesc pOutput
);
10365 (SEC_ENTRY
* CHANGE_PASSWORD_FN_A
)(
10377 ChangeAccountPasswordW(
10378 _In_ SEC_WCHAR
* pszPackageName
,
10379 _In_ SEC_WCHAR
* pszDomainName
,
10380 _In_ SEC_WCHAR
* pszAccountName
,
10381 _In_ SEC_WCHAR
* pszOldPassword
,
10382 _In_ SEC_WCHAR
* pszNewPassword
,
10383 _In_ BOOLEAN bImpersonating
,
10384 _In_ ULONG dwReserved
,
10385 _Inout_ PSecBufferDesc pOutput
);
10389 (SEC_ENTRY
* CHANGE_PASSWORD_FN_W
)(
10400 #define ChangeAccountPassword ChangeAccountPasswordW
10401 #define CHANGE_PASSWORD_FN CHANGE_PASSWORD_FN_W
10403 #define ChangeAccountPassword ChangeAccountPasswordA
10404 #define CHANGE_PASSWORD_FN CHANGE_PASSWORD_FN_A
10407 #endif /* ISSP_MODE != 0 */
10412 _In_ PCtxtHandle phContext
,
10413 _In_ PSecBufferDesc pToken
);
10417 (SEC_ENTRY
* COMPLETE_AUTH_TOKEN_FN
)(
10424 _In_ PCtxtHandle phContext
,
10425 _Inout_ PSecBufferDesc pMessage
,
10426 _In_ ULONG MessageSeqNo
,
10427 _Out_opt_ PULONG pfQOP
);
10431 (SEC_ENTRY
* DECRYPT_MESSAGE_FN
)(
10440 DeleteSecurityContext(
10441 _In_ PCtxtHandle phContext
);
10445 (SEC_ENTRY
* DELETE_SECURITY_CONTEXT_FN
)(
10451 _In_ PCtxtHandle phContext
,
10453 _Inout_ PSecBufferDesc pMessage
,
10454 _In_ ULONG MessageSeqNo
);
10458 (SEC_ENTRY
* ENCRYPT_MESSAGE_FN
)(
10467 EnumerateSecurityPackagesW(
10468 _Out_ PULONG pcPackages
,
10469 _Deref_out_ PSecPkgInfoW
* ppPackageInfo
);
10470 #define EnumerateSecurityPackages EnumerateSecurityPackagesW
10474 (SEC_ENTRY
* ENUMERATE_SECURITY_PACKAGES_FN_W
)(
10477 #define ENUMERATE_SECURITY_PACKAGES_FN ENUMERATE_SECURITY_PACKAGES_FN_W
10482 ExportSecurityContext(
10483 _In_ PCtxtHandle phContext
,
10485 _Out_ PSecBuffer pPackedContext
,
10486 _Out_ PVOID
* pToken
);
10490 (SEC_ENTRY
* EXPORT_SECURITY_CONTEXT_FN
)(
10499 _Inout_ PVOID pvContextBuffer
);
10503 (SEC_ENTRY
* FREE_CONTEXT_BUFFER_FN
)(
10509 FreeCredentialsHandle(
10510 _In_ PCredHandle phCredential
);
10514 (SEC_ENTRY
* FREE_CREDENTIALS_HANDLE_FN
)(
10520 ImpersonateSecurityContext(
10521 _In_ PCtxtHandle phContext
);
10525 (SEC_ENTRY
* IMPERSONATE_SECURITY_CONTEXT_FN
)(
10531 ImportSecurityContextW(
10532 _In_ PSSPI_SEC_STRING pszPackage
,
10533 _In_ PSecBuffer pPackedContext
,
10535 _Out_ PCtxtHandle phContext
);
10536 #define ImportSecurityContext ImportSecurityContextW
10540 (SEC_ENTRY
* IMPORT_SECURITY_CONTEXT_FN_W
)(
10545 #define IMPORT_SECURITY_CONTEXT_FN IMPORT_SECURITY_CONTEXT_FN_W
10550 InitializeSecurityContextW(
10551 _In_opt_ PCredHandle phCredential
,
10552 _In_opt_ PCtxtHandle phContext
,
10553 _In_opt_ PSSPI_SEC_STRING pTargetName
,
10554 _In_ ULONG fContextReq
,
10555 _In_ ULONG Reserved1
,
10556 _In_ ULONG TargetDataRep
,
10557 _In_opt_ PSecBufferDesc pInput
,
10558 _In_ ULONG Reserved2
,
10559 _Inout_opt_ PCtxtHandle phNewContext
,
10560 _Inout_opt_ PSecBufferDesc pOutput
,
10561 _Out_ PULONG pfContextAttr
,
10562 _Out_opt_ PTimeStamp ptsExpiry
);
10563 #define InitializeSecurityContext InitializeSecurityContextW
10567 (SEC_ENTRY
* INITIALIZE_SECURITY_CONTEXT_FN_W
)(
10580 #define INITIALIZE_SECURITY_CONTEXT_FN INITIALIZE_SECURITY_CONTEXT_FN_W
10583 PSecurityFunctionTableW
10585 InitSecurityInterfaceW(VOID
);
10586 #define InitSecurityInterface InitSecurityInterfaceW
10589 PSecurityFunctionTableW
10590 (SEC_ENTRY
* INIT_SECURITY_INTERFACE_W
)(VOID
);
10591 #define INIT_SECURITY_INTERFACE INIT_SECURITY_INTERFACE_W
10597 _In_ PCtxtHandle phContext
,
10599 _In_ PSecBufferDesc pMessage
,
10600 _In_ ULONG MessageSeqNo
);
10604 (SEC_ENTRY
* MAKE_SIGNATURE_FN
)(
10613 QueryContextAttributesW(
10614 _In_ PCtxtHandle phContext
,
10615 _In_ ULONG ulAttribute
,
10616 _Out_ PVOID pBuffer
);
10617 #define QueryContextAttributes QueryContextAttributesW
10621 (SEC_ENTRY
* QUERY_CONTEXT_ATTRIBUTES_FN_W
)(
10625 #define QUERY_CONTEXT_ATTRIBUTES_FN QUERY_CONTEXT_ATTRIBUTES_FN_W
10630 QueryCredentialsAttributesW(
10631 _In_ PCredHandle phCredential
,
10632 _In_ ULONG ulAttribute
,
10633 _Inout_ PVOID pBuffer
);
10634 #define QueryCredentialsAttributes QueryCredentialsAttributesW
10638 (SEC_ENTRY
* QUERY_CREDENTIALS_ATTRIBUTES_FN_W
)(
10642 #define QUERY_CREDENTIALS_ATTRIBUTES_FN QUERY_CREDENTIALS_ATTRIBUTES_FN_W
10647 QuerySecurityContextToken(
10648 _In_ PCtxtHandle phContext
,
10649 _Out_ PVOID
* Token
);
10653 (SEC_ENTRY
* QUERY_SECURITY_CONTEXT_TOKEN_FN
)(
10654 PCtxtHandle
, PVOID
*);
10659 QuerySecurityPackageInfoW(
10660 _In_ PSSPI_SEC_STRING pPackageName
,
10661 _Deref_out_ PSecPkgInfoW
*ppPackageInfo
);
10662 #define QuerySecurityPackageInfo QuerySecurityPackageInfoW
10666 (SEC_ENTRY
* QUERY_SECURITY_PACKAGE_INFO_FN_W
)(
10669 #define QUERY_SECURITY_PACKAGE_INFO_FN QUERY_SECURITY_PACKAGE_INFO_FN_W
10674 RevertSecurityContext(
10675 _In_ PCtxtHandle phContext
);
10679 (SEC_ENTRY
* REVERT_SECURITY_CONTEXT_FN
)(
10682 #if (OSVER(NTDDI_VERSION) > NTDDI_WIN2K)
10685 SetContextAttributesW(
10686 _In_ PCtxtHandle phContext
,
10687 _In_ ULONG ulAttribute
,
10688 _In_bytecount_(cbBuffer
) PVOID pBuffer
,
10689 _In_ ULONG cbBuffer
);
10690 #define SetContextAttributes SetContextAttributesW
10694 (SEC_ENTRY
* SET_CONTEXT_ATTRIBUTES_FN_W
)(
10699 #define SET_CONTEXT_ATTRIBUTES_FN SET_CONTEXT_ATTRIBUTES_FN_W
10702 #if (NTDDI_VERSION > NTDDI_WS03)
10706 SetCredentialsAttributesW(
10707 _In_ PCredHandle phCredential
,
10708 _In_ ULONG ulAttribute
,
10709 _In_bytecount_(cbBuffer
) PVOID pBuffer
,
10710 _In_ ULONG cbBuffer
);
10711 #define SetCredentialsAttributes SetCredentialsAttributesW
10715 (SEC_ENTRY
* SET_CREDENTIALS_ATTRIBUTES_FN_W
)(
10720 #define SET_CREDENTIALS_ATTRIBUTES_FN SET_CREDENTIALS_ATTRIBUTES_FN_W
10721 #endif /* NTDDI_VERSION > NTDDI_WS03 */
10727 _In_ PCtxtHandle phContext
,
10728 _In_ PSecBufferDesc pMessage
,
10729 _In_ ULONG MessageSeqNo
,
10730 _Out_ PULONG pfQOP
);
10734 (SEC_ENTRY
* VERIFY_SIGNATURE_FN
)(
10740 #if (ISSP_MODE == 0)
10746 _In_ PUNICODE_STRING ServiceClass
,
10747 _In_ PUNICODE_STRING ServiceName
,
10748 _In_opt_ PUNICODE_STRING InstanceName
,
10749 _In_opt_ USHORT InstancePort
,
10750 _In_opt_ PUNICODE_STRING Referrer
,
10751 _Inout_ PUNICODE_STRING Spn
,
10752 _Out_opt_ PULONG Length
,
10753 _In_ BOOLEAN Allocate
);
10755 #if (NTDDI_VERSION >= NTDDI_WINXP)
10760 _In_ PUNICODE_STRING ServiceClass
,
10761 _In_ PUNICODE_STRING ServiceName
,
10762 _In_opt_ PUNICODE_STRING InstanceName
,
10763 _In_opt_ USHORT InstancePort
,
10764 _In_opt_ PUNICODE_STRING Referrer
,
10765 _In_opt_ PUNICODE_STRING TargetInfo
,
10766 _Inout_ PUNICODE_STRING Spn
,
10767 _Out_ PULONG Length OPTIONAL
,
10768 _In_ BOOLEAN Allocate
);
10773 SecLookupAccountSid(
10775 _Out_ PULONG NameSize
,
10776 _Inout_ PUNICODE_STRING NameBuffer
,
10777 _Out_ PULONG DomainSize OPTIONAL
,
10778 _Out_opt_ PUNICODE_STRING DomainBuffer
,
10779 _Out_ PSID_NAME_USE NameUse
);
10784 SecLookupAccountName(
10785 _In_ PUNICODE_STRING Name
,
10786 _Inout_ PULONG SidSize
,
10788 _Out_ PSID_NAME_USE NameUse
,
10789 _Out_opt_ PULONG DomainSize
, // WDK says _Out_ only + ... OPTIONAL
10790 _Inout_opt_ PUNICODE_STRING ReferencedDomain
);
10793 #if (NTDDI_VERSION >= NTDDI_WS03)
10797 SecLookupWellKnownSid(
10798 _In_ WELL_KNOWN_SID_TYPE SidType
,
10800 _In_ ULONG SidBufferSize
,
10801 _Inout_opt_ PULONG SidSize
);
10804 #if (NTDDI_VERSION >= NTDDI_VISTA)
10809 _In_ PUNICODE_STRING ServiceClass
,
10810 _In_ PUNICODE_STRING ServiceName
,
10811 _In_opt_ PUNICODE_STRING InstanceName
,
10812 _In_opt_ USHORT InstancePort
,
10813 _In_opt_ PUNICODE_STRING Referrer
,
10814 _In_opt_ PUNICODE_STRING InTargetInfo
,
10815 _Inout_ PUNICODE_STRING Spn
,
10816 _Out_opt_ PULONG TotalSize
,
10817 _In_ BOOLEAN Allocate
,
10818 _In_ BOOLEAN IsTargetInfoMarshaled
);
10821 #endif /* ISSP_MODE == 0 */
10823 #if (NTDDI_VERSION >= NTDDI_WIN7)
10827 SspiEncodeAuthIdentityAsStrings(
10828 _In_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE pAuthIdentity
,
10829 _Deref_out_opt_ PCWSTR
* ppszUserName
,
10830 _Deref_out_opt_ PCWSTR
* ppszDomainName
,
10831 _Deref_opt_out_opt_ PCWSTR
* ppszPackedCredentialsString
);
10835 SspiValidateAuthIdentity(
10836 _In_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData
);
10840 SspiCopyAuthIdentity(
10841 _In_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData
,
10842 _Deref_out_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE
* AuthDataCopy
);
10846 SspiFreeAuthIdentity(
10847 _In_opt_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData
);
10851 SspiZeroAuthIdentity(
10852 _In_opt_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData
);
10857 _In_opt_ PVOID DataBuffer
);
10861 SspiEncodeStringsAsAuthIdentity(
10862 _In_opt_ PCWSTR pszUserName
,
10863 _In_opt_ PCWSTR pszDomainName
,
10864 _In_opt_ PCWSTR pszPackedCredentialsString
,
10865 _Deref_out_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE
* ppAuthIdentity
);
10869 SspiCompareAuthIdentities(
10870 _In_opt_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity1
,
10871 _In_opt_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity2
,
10872 _Out_opt_ PBOOLEAN SameSuppliedUser
,
10873 _Out_opt_ PBOOLEAN SameSuppliedIdentity
);
10877 SspiMarshalAuthIdentity(
10878 _In_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity
,
10879 _Out_ PULONG AuthIdentityLength
,
10880 _Outptr_result_bytebuffer_(*AuthIdentityLength
) PCHAR
* AuthIdentityByteArray
);
10884 SspiUnmarshalAuthIdentity(
10885 _In_ PULONG AuthIdentityLength
,
10886 _In_reads_bytes_(AuthIdentityLength
) PCHAR AuthIdentityByteArray
,
10887 _Outptr_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE
* ppAuthIdentity
);
10891 SspiIsPromptingNeeded(
10892 _In_ PULONG ErrorOrNtStatus
);
10896 SspiGetTargetHostName(
10897 _In_ PCWSTR pszTargetName
,
10898 _Outptr_ PWSTR
* pszHostName
);
10902 SspiExcludePackage(
10903 _In_opt_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity
,
10904 _In_ PCWSTR pszPackageName
,
10905 _Outptr_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE
* ppNewAuthIdentity
);
10907 #define SEC_WINNT_AUTH_IDENTITY_MARSHALLED 0x04
10908 #define SEC_WINNT_AUTH_IDENTITY_ONLY 0x08
10910 #endif /* NTDDI_VERSION >= NTDDI_WIN7 */
10912 #define FreeCredentialHandle FreeCredentialsHandle
10913 struct _SECURITY_FUNCTION_TABLE_W
10916 ENUMERATE_SECURITY_PACKAGES_FN_W EnumerateSecurityPackagesW
;
10917 QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW
;
10918 ACQUIRE_CREDENTIALS_HANDLE_FN_W AcquireCredentialsHandleW
;
10919 FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle
;
10921 INITIALIZE_SECURITY_CONTEXT_FN_W InitializeSecurityContextW
;
10922 ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext
;
10923 COMPLETE_AUTH_TOKEN_FN CompleteAuthToken
;
10924 DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext
;
10925 APPLY_CONTROL_TOKEN_FN ApplyControlToken
;
10926 QUERY_CONTEXT_ATTRIBUTES_FN_W QueryContextAttributesW
;
10927 IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext
;
10928 REVERT_SECURITY_CONTEXT_FN RevertSecurityContext
;
10929 MAKE_SIGNATURE_FN MakeSignature
;
10930 VERIFY_SIGNATURE_FN VerifySignature
;
10931 FREE_CONTEXT_BUFFER_FN FreeContextBuffer
;
10932 QUERY_SECURITY_PACKAGE_INFO_FN_W QuerySecurityPackageInfoW
;
10935 EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext
;
10936 IMPORT_SECURITY_CONTEXT_FN_W ImportSecurityContextW
;
10937 ADD_CREDENTIALS_FN_W AddCredentialsW
;
10939 QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken
;
10940 ENCRYPT_MESSAGE_FN EncryptMessage
;
10941 DECRYPT_MESSAGE_FN DecryptMessage
;
10942 #if OSVER(NTDDI_VERSION) > NTDDI_WIN2K
10943 SET_CONTEXT_ATTRIBUTES_FN_W SetContextAttributesW
;
10945 #if NTDDI_VERSION > NTDDI_WS03SP1
10946 SET_CREDENTIALS_ATTRIBUTES_FN_W SetCredentialsAttributesW
;
10949 CHANGE_PASSWORD_FN_W ChangeAccountPasswordW
;
10955 #endif /* !__SSPI_H__ */
10957 /* #if !defined(_X86AMD64_) FIXME : WHAT ?! */
10958 #if defined(_WIN64)
10959 C_ASSERT(sizeof(ERESOURCE
) == 0x68);
10960 C_ASSERT(FIELD_OFFSET(ERESOURCE
,ActiveCount
) == 0x18);
10961 C_ASSERT(FIELD_OFFSET(ERESOURCE
,Flag
) == 0x1a);
10963 C_ASSERT(sizeof(ERESOURCE
) == 0x38);
10964 C_ASSERT(FIELD_OFFSET(ERESOURCE
,ActiveCount
) == 0x0c);
10965 C_ASSERT(FIELD_OFFSET(ERESOURCE
,Flag
) == 0x0e);
10969 #if defined(_IA64_)
10970 #if (NTDDI_VERSION >= NTDDI_WIN2K)
10971 //DECLSPEC_DEPRECATED_DDK
10975 HalGetDmaAlignmentRequirement(
10980 #if defined(_M_IX86) || defined(_M_AMD64)
10981 #define HalGetDmaAlignmentRequirement() 1L
10985 extern PUSHORT NlsOemLeadByteInfo
;
10986 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
10988 __CREATE_NTOS_DATA_IMPORT_ALIAS(NlsOemLeadByteInfo
)
10989 extern PUSHORT
*NlsOemLeadByteInfo
;
10990 #define NLS_OEM_LEAD_BYTE_INFO (*NlsOemLeadByteInfo)
10993 #if (NTDDI_VERSION >= NTDDI_VISTA)
10995 typedef enum _NETWORK_OPEN_LOCATION_QUALIFIER
{
10996 NetworkOpenLocationAny
,
10997 NetworkOpenLocationRemote
,
10998 NetworkOpenLocationLoopback
10999 } NETWORK_OPEN_LOCATION_QUALIFIER
;
11001 typedef enum _NETWORK_OPEN_INTEGRITY_QUALIFIER
{
11002 NetworkOpenIntegrityAny
,
11003 NetworkOpenIntegrityNone
,
11004 NetworkOpenIntegritySigned
,
11005 NetworkOpenIntegrityEncrypted
,
11006 NetworkOpenIntegrityMaximum
11007 } NETWORK_OPEN_INTEGRITY_QUALIFIER
;
11009 #if (NTDDI_VERSION >= NTDDI_WIN7)
11011 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_COLLAPSING 0x1
11012 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_DURABILITY 0x2
11013 #define NETWORK_OPEN_ECP_IN_FLAG_FORCE_BUFFERED_SYNCHRONOUS_IO_HACK 0x80000000
11015 typedef struct _NETWORK_OPEN_ECP_CONTEXT
{
11018 _ANONYMOUS_STRUCT
struct {
11020 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
11021 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
11025 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
11026 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
11030 } NETWORK_OPEN_ECP_CONTEXT
, *PNETWORK_OPEN_ECP_CONTEXT
;
11032 typedef struct _NETWORK_OPEN_ECP_CONTEXT_V0
{
11035 _ANONYMOUS_STRUCT
struct {
11037 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
11038 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
11041 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
11042 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
11045 } NETWORK_OPEN_ECP_CONTEXT_V0
, *PNETWORK_OPEN_ECP_CONTEXT_V0
;
11047 #elif (NTDDI_VERSION >= NTDDI_VISTA)
11048 typedef struct _NETWORK_OPEN_ECP_CONTEXT
{
11051 _ANONYMOUS_STRUCT
struct {
11053 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
11054 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
11057 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
11058 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
11061 } NETWORK_OPEN_ECP_CONTEXT
, *PNETWORK_OPEN_ECP_CONTEXT
;
11064 DEFINE_GUID(GUID_ECP_NETWORK_OPEN_CONTEXT
, 0xc584edbf, 0x00df, 0x4d28, 0xb8, 0x84, 0x35, 0xba, 0xca, 0x89, 0x11, 0xe8);
11066 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
11069 #if (NTDDI_VERSION >= NTDDI_VISTA)
11071 typedef struct _PREFETCH_OPEN_ECP_CONTEXT
{
11073 } PREFETCH_OPEN_ECP_CONTEXT
, *PPREFETCH_OPEN_ECP_CONTEXT
;
11075 DEFINE_GUID(GUID_ECP_PREFETCH_OPEN
, 0xe1777b21, 0x847e, 0x4837, 0xaa, 0x45, 0x64, 0x16, 0x1d, 0x28, 0x6, 0x55);
11077 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
11079 #if (NTDDI_VERSION >= NTDDI_WIN7)
11081 DEFINE_GUID (GUID_ECP_NFS_OPEN
, 0xf326d30c, 0xe5f8, 0x4fe7, 0xab, 0x74, 0xf5, 0xa3, 0x19, 0x6d, 0x92, 0xdb);
11082 DEFINE_GUID (GUID_ECP_SRV_OPEN
, 0xbebfaebc, 0xaabf, 0x489d, 0x9d, 0x2c, 0xe9, 0xe3, 0x61, 0x10, 0x28, 0x53);
11084 typedef struct sockaddr_storage
*PSOCKADDR_STORAGE_NFS
;
11086 typedef struct _NFS_OPEN_ECP_CONTEXT
{
11087 PUNICODE_STRING ExportAlias
;
11088 PSOCKADDR_STORAGE_NFS ClientSocketAddress
;
11089 } NFS_OPEN_ECP_CONTEXT
, *PNFS_OPEN_ECP_CONTEXT
, **PPNFS_OPEN_ECP_CONTEXT
;
11091 typedef struct _SRV_OPEN_ECP_CONTEXT
{
11092 PUNICODE_STRING ShareName
;
11093 PSOCKADDR_STORAGE_NFS SocketAddress
;
11094 BOOLEAN OplockBlockState
;
11095 BOOLEAN OplockAppState
;
11096 BOOLEAN OplockFinalState
;
11097 } SRV_OPEN_ECP_CONTEXT
, *PSRV_OPEN_ECP_CONTEXT
;
11099 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
11101 #define PIN_WAIT (1)
11102 #define PIN_EXCLUSIVE (2)
11103 #define PIN_NO_READ (4)
11104 #define PIN_IF_BCB (8)
11105 #define PIN_CALLER_TRACKS_DIRTY_DATA (32)
11106 #define PIN_HIGH_PRIORITY (64)
11109 #define MAP_NO_READ (16)
11110 #define MAP_HIGH_PRIORITY (64)
11112 #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
11113 #define IOCTL_REDIR_QUERY_PATH_EX CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 100, METHOD_NEITHER, FILE_ANY_ACCESS)
11115 typedef struct _QUERY_PATH_REQUEST
{
11116 ULONG PathNameLength
;
11117 PIO_SECURITY_CONTEXT SecurityContext
;
11118 WCHAR FilePathName
[1];
11119 } QUERY_PATH_REQUEST
, *PQUERY_PATH_REQUEST
;
11121 typedef struct _QUERY_PATH_REQUEST_EX
{
11122 PIO_SECURITY_CONTEXT pSecurityContext
;
11125 UNICODE_STRING PathName
;
11126 UNICODE_STRING DomainServiceName
;
11127 ULONG_PTR Reserved
[ 3 ];
11128 } QUERY_PATH_REQUEST_EX
, *PQUERY_PATH_REQUEST_EX
;
11130 typedef struct _QUERY_PATH_RESPONSE
{
11131 ULONG LengthAccepted
;
11132 } QUERY_PATH_RESPONSE
, *PQUERY_PATH_RESPONSE
;
11134 #define VOLSNAPCONTROLTYPE 0x00000053
11135 #define IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES CTL_CODE(VOLSNAPCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
11137 /* FIXME : These definitions below don't belong here (or anywhere in ddk really) */
11138 #pragma pack(push,4)
11140 #ifndef VER_PRODUCTBUILD
11141 #define VER_PRODUCTBUILD 10000
11146 #define FS_LFN_APIS 0x00004000
11148 #define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
11149 #define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
11150 #define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
11151 #define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
11152 #define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
11153 #define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
11154 #define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
11155 #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
11156 #define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
11157 #define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
11158 #define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
11159 #define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
11160 #define FILE_STORAGE_TYPE_MASK 0x000f0000
11161 #define FILE_STORAGE_TYPE_SHIFT 16
11163 #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
11166 #define HARDWARE_PTE HARDWARE_PTE_X86
11167 #define PHARDWARE_PTE PHARDWARE_PTE_X86
11170 #define IO_ATTACH_DEVICE_API 0x80000000
11172 #define IO_TYPE_APC 18
11173 #define IO_TYPE_DPC 19
11174 #define IO_TYPE_DEVICE_QUEUE 20
11175 #define IO_TYPE_EVENT_PAIR 21
11176 #define IO_TYPE_INTERRUPT 22
11177 #define IO_TYPE_PROFILE 23
11179 #define IRP_BEING_VERIFIED 0x10
11181 #define MAILSLOT_CLASS_FIRSTCLASS 1
11182 #define MAILSLOT_CLASS_SECONDCLASS 2
11184 #define MAILSLOT_SIZE_AUTO 0
11186 #define MEM_DOS_LIM 0x40000000
11188 #define OB_TYPE_TYPE 1
11189 #define OB_TYPE_DIRECTORY 2
11190 #define OB_TYPE_SYMBOLIC_LINK 3
11191 #define OB_TYPE_TOKEN 4
11192 #define OB_TYPE_PROCESS 5
11193 #define OB_TYPE_THREAD 6
11194 #define OB_TYPE_EVENT 7
11195 #define OB_TYPE_EVENT_PAIR 8
11196 #define OB_TYPE_MUTANT 9
11197 #define OB_TYPE_SEMAPHORE 10
11198 #define OB_TYPE_TIMER 11
11199 #define OB_TYPE_PROFILE 12
11200 #define OB_TYPE_WINDOW_STATION 13
11201 #define OB_TYPE_DESKTOP 14
11202 #define OB_TYPE_SECTION 15
11203 #define OB_TYPE_KEY 16
11204 #define OB_TYPE_PORT 17
11205 #define OB_TYPE_ADAPTER 18
11206 #define OB_TYPE_CONTROLLER 19
11207 #define OB_TYPE_DEVICE 20
11208 #define OB_TYPE_DRIVER 21
11209 #define OB_TYPE_IO_COMPLETION 22
11210 #define OB_TYPE_FILE 23
11212 #define SEC_BASED 0x00200000
11216 #define TOKEN_HAS_ADMIN_GROUP 0x08
11218 #if (VER_PRODUCTBUILD >= 1381)
11219 #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
11220 #endif /* (VER_PRODUCTBUILD >= 1381) */
11222 #if (VER_PRODUCTBUILD >= 2195)
11224 #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
11225 #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
11227 #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
11229 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
11230 #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
11231 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
11232 #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
11233 #endif /* (VER_PRODUCTBUILD >= 2195) */
11235 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
11236 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
11237 #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
11238 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
11239 #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
11240 #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
11241 #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
11242 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
11244 typedef enum _FILE_STORAGE_TYPE
{
11245 StorageTypeDefault
= 1,
11246 StorageTypeDirectory
,
11248 StorageTypeJunctionPoint
,
11249 StorageTypeCatalog
,
11250 StorageTypeStructuredStorage
,
11251 StorageTypeEmbedding
,
11253 } FILE_STORAGE_TYPE
;
11255 typedef struct _OBJECT_BASIC_INFORMATION
11258 ACCESS_MASK GrantedAccess
;
11260 ULONG PointerCount
;
11261 ULONG PagedPoolCharge
;
11262 ULONG NonPagedPoolCharge
;
11263 ULONG Reserved
[ 3 ];
11264 ULONG NameInfoSize
;
11265 ULONG TypeInfoSize
;
11266 ULONG SecurityDescriptorSize
;
11267 LARGE_INTEGER CreationTime
;
11268 } OBJECT_BASIC_INFORMATION
, *POBJECT_BASIC_INFORMATION
;
11270 typedef struct _FILE_COPY_ON_WRITE_INFORMATION
{
11271 BOOLEAN ReplaceIfExists
;
11272 HANDLE RootDirectory
;
11273 ULONG FileNameLength
;
11275 } FILE_COPY_ON_WRITE_INFORMATION
, *PFILE_COPY_ON_WRITE_INFORMATION
;
11277 typedef struct _FILE_FULL_DIRECTORY_INFORMATION
{
11278 ULONG NextEntryOffset
;
11280 LARGE_INTEGER CreationTime
;
11281 LARGE_INTEGER LastAccessTime
;
11282 LARGE_INTEGER LastWriteTime
;
11283 LARGE_INTEGER ChangeTime
;
11284 LARGE_INTEGER EndOfFile
;
11285 LARGE_INTEGER AllocationSize
;
11286 ULONG FileAttributes
;
11287 ULONG FileNameLength
;
11289 WCHAR FileName
[ANYSIZE_ARRAY
];
11290 } FILE_FULL_DIRECTORY_INFORMATION
, *PFILE_FULL_DIRECTORY_INFORMATION
;
11292 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
11293 typedef struct _FILE_SHARED_LOCK_ENTRY
{
11296 FILE_LOCK_INFO FileLock
;
11297 } FILE_SHARED_LOCK_ENTRY
, *PFILE_SHARED_LOCK_ENTRY
;
11299 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
11300 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY
{
11301 LIST_ENTRY ListEntry
;
11304 FILE_LOCK_INFO FileLock
;
11305 } FILE_EXCLUSIVE_LOCK_ENTRY
, *PFILE_EXCLUSIVE_LOCK_ENTRY
;
11307 typedef struct _FILE_MAILSLOT_PEEK_BUFFER
{
11308 ULONG ReadDataAvailable
;
11309 ULONG NumberOfMessages
;
11310 ULONG MessageLength
;
11311 } FILE_MAILSLOT_PEEK_BUFFER
, *PFILE_MAILSLOT_PEEK_BUFFER
;
11313 typedef struct _FILE_OLE_CLASSID_INFORMATION
{
11315 } FILE_OLE_CLASSID_INFORMATION
, *PFILE_OLE_CLASSID_INFORMATION
;
11317 typedef struct _FILE_OLE_ALL_INFORMATION
{
11318 FILE_BASIC_INFORMATION BasicInformation
;
11319 FILE_STANDARD_INFORMATION StandardInformation
;
11320 FILE_INTERNAL_INFORMATION InternalInformation
;
11321 FILE_EA_INFORMATION EaInformation
;
11322 FILE_ACCESS_INFORMATION AccessInformation
;
11323 FILE_POSITION_INFORMATION PositionInformation
;
11324 FILE_MODE_INFORMATION ModeInformation
;
11325 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
11327 USN ReplicationUsn
;
11328 LARGE_INTEGER SecurityChangeTime
;
11329 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation
;
11330 FILE_OBJECTID_INFORMATION ObjectIdInformation
;
11331 FILE_STORAGE_TYPE StorageType
;
11332 ULONG OleStateBits
;
11334 ULONG NumberOfStreamReferences
;
11337 BOOLEAN ContentIndexDisable
;
11338 BOOLEAN InheritContentIndexDisable
;
11339 FILE_NAME_INFORMATION NameInformation
;
11340 } FILE_OLE_ALL_INFORMATION
, *PFILE_OLE_ALL_INFORMATION
;
11342 typedef struct _FILE_OLE_DIR_INFORMATION
{
11343 ULONG NextEntryOffset
;
11345 LARGE_INTEGER CreationTime
;
11346 LARGE_INTEGER LastAccessTime
;
11347 LARGE_INTEGER LastWriteTime
;
11348 LARGE_INTEGER ChangeTime
;
11349 LARGE_INTEGER EndOfFile
;
11350 LARGE_INTEGER AllocationSize
;
11351 ULONG FileAttributes
;
11352 ULONG FileNameLength
;
11353 FILE_STORAGE_TYPE StorageType
;
11355 ULONG OleStateBits
;
11356 BOOLEAN ContentIndexDisable
;
11357 BOOLEAN InheritContentIndexDisable
;
11359 } FILE_OLE_DIR_INFORMATION
, *PFILE_OLE_DIR_INFORMATION
;
11361 typedef struct _FILE_OLE_INFORMATION
{
11362 LARGE_INTEGER SecurityChangeTime
;
11363 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation
;
11364 FILE_OBJECTID_INFORMATION ObjectIdInformation
;
11365 FILE_STORAGE_TYPE StorageType
;
11366 ULONG OleStateBits
;
11367 BOOLEAN ContentIndexDisable
;
11368 BOOLEAN InheritContentIndexDisable
;
11369 } FILE_OLE_INFORMATION
, *PFILE_OLE_INFORMATION
;
11371 typedef struct _FILE_OLE_STATE_BITS_INFORMATION
{
11373 ULONG StateBitsMask
;
11374 } FILE_OLE_STATE_BITS_INFORMATION
, *PFILE_OLE_STATE_BITS_INFORMATION
;
11376 typedef struct _MAPPING_PAIR
{
11379 } MAPPING_PAIR
, *PMAPPING_PAIR
;
11381 typedef struct _GET_RETRIEVAL_DESCRIPTOR
{
11382 ULONG NumberOfPairs
;
11383 ULONGLONG StartVcn
;
11384 MAPPING_PAIR Pair
[1];
11385 } GET_RETRIEVAL_DESCRIPTOR
, *PGET_RETRIEVAL_DESCRIPTOR
;
11387 typedef struct _MOVEFILE_DESCRIPTOR
{
11390 LARGE_INTEGER StartVcn
;
11391 LARGE_INTEGER TargetLcn
;
11394 } MOVEFILE_DESCRIPTOR
, *PMOVEFILE_DESCRIPTOR
;
11396 typedef struct _OBJECT_BASIC_INFO
{
11398 ACCESS_MASK GrantedAccess
;
11400 ULONG ReferenceCount
;
11401 ULONG PagedPoolUsage
;
11402 ULONG NonPagedPoolUsage
;
11404 ULONG NameInformationLength
;
11405 ULONG TypeInformationLength
;
11406 ULONG SecurityDescriptorLength
;
11407 LARGE_INTEGER CreateTime
;
11408 } OBJECT_BASIC_INFO
, *POBJECT_BASIC_INFO
;
11410 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO
{
11412 BOOLEAN ProtectFromClose
;
11413 } OBJECT_HANDLE_ATTRIBUTE_INFO
, *POBJECT_HANDLE_ATTRIBUTE_INFO
;
11415 typedef struct _OBJECT_NAME_INFO
{
11416 UNICODE_STRING ObjectName
;
11417 WCHAR ObjectNameBuffer
[1];
11418 } OBJECT_NAME_INFO
, *POBJECT_NAME_INFO
;
11420 typedef struct _OBJECT_PROTECTION_INFO
{
11422 BOOLEAN ProtectHandle
;
11423 } OBJECT_PROTECTION_INFO
, *POBJECT_PROTECTION_INFO
;
11425 typedef struct _OBJECT_TYPE_INFO
{
11426 UNICODE_STRING ObjectTypeName
;
11427 UCHAR Unknown
[0x58];
11428 WCHAR ObjectTypeNameBuffer
[1];
11429 } OBJECT_TYPE_INFO
, *POBJECT_TYPE_INFO
;
11431 typedef struct _OBJECT_ALL_TYPES_INFO
{
11432 ULONG NumberOfObjectTypes
;
11433 OBJECT_TYPE_INFO ObjectsTypeInfo
[1];
11434 } OBJECT_ALL_TYPES_INFO
, *POBJECT_ALL_TYPES_INFO
;
11436 #if defined(USE_LPC6432)
11437 #define LPC_CLIENT_ID CLIENT_ID64
11438 #define LPC_SIZE_T ULONGLONG
11439 #define LPC_PVOID ULONGLONG
11440 #define LPC_HANDLE ULONGLONG
11442 #define LPC_CLIENT_ID CLIENT_ID
11443 #define LPC_SIZE_T SIZE_T
11444 #define LPC_PVOID PVOID
11445 #define LPC_HANDLE HANDLE
11448 typedef struct _PORT_MESSAGE
11455 CSHORT TotalLength
;
11464 CSHORT DataInfoOffset
;
11468 __GNU_EXTENSION
union
11470 LPC_CLIENT_ID ClientId
;
11471 double DoNotUseThisField
;
11474 __GNU_EXTENSION
union
11476 LPC_SIZE_T ClientViewSize
;
11479 } PORT_MESSAGE
, *PPORT_MESSAGE
;
11481 #define LPC_KERNELMODE_MESSAGE (CSHORT)((USHORT)0x8000)
11483 typedef struct _PORT_VIEW
11486 LPC_HANDLE SectionHandle
;
11487 ULONG SectionOffset
;
11488 LPC_SIZE_T ViewSize
;
11489 LPC_PVOID ViewBase
;
11490 LPC_PVOID ViewRemoteBase
;
11491 } PORT_VIEW
, *PPORT_VIEW
;
11493 typedef struct _REMOTE_PORT_VIEW
11496 LPC_SIZE_T ViewSize
;
11497 LPC_PVOID ViewBase
;
11498 } REMOTE_PORT_VIEW
, *PREMOTE_PORT_VIEW
;
11500 typedef struct _VAD_HEADER
{
11503 struct _VAD_HEADER
* ParentLink
;
11504 struct _VAD_HEADER
* LeftLink
;
11505 struct _VAD_HEADER
* RightLink
;
11506 ULONG Flags
; /* LSB = CommitCharge */
11508 PVOID FirstProtoPte
;
11511 LIST_ENTRY Secured
;
11512 } VAD_HEADER
, *PVAD_HEADER
;
11517 CcGetLsnForFileObject (
11518 _In_ PFILE_OBJECT FileObject
,
11519 _Out_opt_ PLARGE_INTEGER OldestLsn
11525 FsRtlAllocatePool (
11526 _In_ POOL_TYPE PoolType
,
11527 _In_ ULONG NumberOfBytes
11533 FsRtlAllocatePoolWithQuota (
11534 _In_ POOL_TYPE PoolType
,
11535 _In_ ULONG NumberOfBytes
11541 FsRtlAllocatePoolWithQuotaTag (
11542 _In_ POOL_TYPE PoolType
,
11543 _In_ ULONG NumberOfBytes
,
11550 FsRtlAllocatePoolWithTag (
11551 _In_ POOL_TYPE PoolType
,
11552 _In_ ULONG NumberOfBytes
,
11559 FsRtlMdlReadComplete (
11560 _In_ PFILE_OBJECT FileObject
,
11567 FsRtlMdlWriteComplete (
11568 _In_ PFILE_OBJECT FileObject
,
11569 _In_ PLARGE_INTEGER FileOffset
,
11576 FsRtlNotifyChangeDirectory (
11577 _In_ PNOTIFY_SYNC NotifySync
,
11578 _In_ PVOID FsContext
,
11579 _In_ PSTRING FullDirectoryName
,
11580 _In_ PLIST_ENTRY NotifyList
,
11581 _In_ BOOLEAN WatchTree
,
11582 _In_ ULONG CompletionFilter
,
11583 _In_ PIRP NotifyIrp
11591 _In_opt_ KPROCESSOR_MODE ObjectAttributesAccessMode
,
11592 _In_ POBJECT_TYPE ObjectType
,
11593 _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes
,
11594 _In_ KPROCESSOR_MODE AccessMode
,
11595 _Inout_opt_ PVOID ParseContext
,
11596 _In_ ULONG ObjectSize
,
11597 _In_opt_ ULONG PagedPoolCharge
,
11598 _In_opt_ ULONG NonPagedPoolCharge
,
11599 _Out_ PVOID
*Object
11605 ObReferenceObjectByName (
11606 _In_ PUNICODE_STRING ObjectName
,
11607 _In_ ULONG Attributes
,
11608 _In_opt_ PACCESS_STATE PassedAccessState
,
11609 _In_opt_ ACCESS_MASK DesiredAccess
,
11610 _In_ POBJECT_TYPE ObjectType
,
11611 _In_ KPROCESSOR_MODE AccessMode
,
11612 _Inout_opt_ PVOID ParseContext
,
11613 _Out_ PVOID
*Object
11616 #define PsDereferenceImpersonationToken(T) \
11617 {if (ARGUMENT_PRESENT(T)) { \
11618 (ObDereferenceObject((T))); \
11627 PsLookupProcessThreadByCid (
11628 _In_ PCLIENT_ID Cid
,
11629 _Out_opt_ PEPROCESS
*Process
,
11630 _Out_ PETHREAD
*Thread
11636 RtlSetSaclSecurityDescriptor (
11637 _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor
,
11638 _In_ BOOLEAN SaclPresent
,
11640 _In_ BOOLEAN SaclDefaulted
11643 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;