4 * Windows NT Filesystem Driver Developer Kit
6 * This file is part of the w32api package.
9 * Created by Bo Brantén <bosse@acc.umu.se>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
25 #define _NTIFS_INCLUDED_
39 /* FIXME : #include <ntiologc.h> */
42 #define FlagOn(_F,_SF) ((_F) & (_SF))
46 #define BooleanFlagOn(F,SF) ((BOOLEAN)(((F) & (SF)) != 0))
50 #define SetFlag(_F,_SF) ((_F) |= (_SF))
54 #define ClearFlag(_F,_SF) ((_F) &= ~(_SF))
57 typedef UNICODE_STRING LSA_UNICODE_STRING
, *PLSA_UNICODE_STRING
;
58 typedef STRING LSA_STRING
, *PLSA_STRING
;
59 typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES
, *PLSA_OBJECT_ATTRIBUTES
;
61 #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
62 #define SID_IDENTIFIER_AUTHORITY_DEFINED
63 typedef struct _SID_IDENTIFIER_AUTHORITY
{
65 } SID_IDENTIFIER_AUTHORITY
,*PSID_IDENTIFIER_AUTHORITY
,*LPSID_IDENTIFIER_AUTHORITY
;
72 UCHAR SubAuthorityCount
;
73 SID_IDENTIFIER_AUTHORITY IdentifierAuthority
;
74 ULONG SubAuthority
[ANYSIZE_ARRAY
];
78 #define SID_REVISION 1
79 #define SID_MAX_SUB_AUTHORITIES 15
80 #define SID_RECOMMENDED_SUB_AUTHORITIES 1
82 typedef enum _SID_NAME_USE
{
87 SidTypeWellKnownGroup
,
88 SidTypeDeletedAccount
,
93 } SID_NAME_USE
, *PSID_NAME_USE
;
95 typedef struct _SID_AND_ATTRIBUTES
{
98 } SID_AND_ATTRIBUTES
, *PSID_AND_ATTRIBUTES
;
99 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY
[ANYSIZE_ARRAY
];
100 typedef SID_AND_ATTRIBUTES_ARRAY
*PSID_AND_ATTRIBUTES_ARRAY
;
102 #define SID_HASH_SIZE 32
103 typedef ULONG_PTR SID_HASH_ENTRY
, *PSID_HASH_ENTRY
;
105 typedef struct _SID_AND_ATTRIBUTES_HASH
{
107 PSID_AND_ATTRIBUTES SidAttr
;
108 SID_HASH_ENTRY Hash
[SID_HASH_SIZE
];
109 } SID_AND_ATTRIBUTES_HASH
, *PSID_AND_ATTRIBUTES_HASH
;
111 /* Universal well-known SIDs */
113 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
114 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
115 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
116 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
117 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
118 #define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
120 #define SECURITY_NULL_RID (0x00000000L)
121 #define SECURITY_WORLD_RID (0x00000000L)
122 #define SECURITY_LOCAL_RID (0x00000000L)
123 #define SECURITY_LOCAL_LOGON_RID (0x00000001L)
125 #define SECURITY_CREATOR_OWNER_RID (0x00000000L)
126 #define SECURITY_CREATOR_GROUP_RID (0x00000001L)
127 #define SECURITY_CREATOR_OWNER_SERVER_RID (0x00000002L)
128 #define SECURITY_CREATOR_GROUP_SERVER_RID (0x00000003L)
129 #define SECURITY_CREATOR_OWNER_RIGHTS_RID (0x00000004L)
131 /* NT well-known SIDs */
133 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
135 #define SECURITY_DIALUP_RID (0x00000001L)
136 #define SECURITY_NETWORK_RID (0x00000002L)
137 #define SECURITY_BATCH_RID (0x00000003L)
138 #define SECURITY_INTERACTIVE_RID (0x00000004L)
139 #define SECURITY_LOGON_IDS_RID (0x00000005L)
140 #define SECURITY_LOGON_IDS_RID_COUNT (3L)
141 #define SECURITY_SERVICE_RID (0x00000006L)
142 #define SECURITY_ANONYMOUS_LOGON_RID (0x00000007L)
143 #define SECURITY_PROXY_RID (0x00000008L)
144 #define SECURITY_ENTERPRISE_CONTROLLERS_RID (0x00000009L)
145 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
146 #define SECURITY_PRINCIPAL_SELF_RID (0x0000000AL)
147 #define SECURITY_AUTHENTICATED_USER_RID (0x0000000BL)
148 #define SECURITY_RESTRICTED_CODE_RID (0x0000000CL)
149 #define SECURITY_TERMINAL_SERVER_RID (0x0000000DL)
150 #define SECURITY_REMOTE_LOGON_RID (0x0000000EL)
151 #define SECURITY_THIS_ORGANIZATION_RID (0x0000000FL)
152 #define SECURITY_IUSER_RID (0x00000011L)
153 #define SECURITY_LOCAL_SYSTEM_RID (0x00000012L)
154 #define SECURITY_LOCAL_SERVICE_RID (0x00000013L)
155 #define SECURITY_NETWORK_SERVICE_RID (0x00000014L)
156 #define SECURITY_NT_NON_UNIQUE (0x00000015L)
157 #define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT (3L)
158 #define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID (0x00000016L)
160 #define SECURITY_BUILTIN_DOMAIN_RID (0x00000020L)
161 #define SECURITY_WRITE_RESTRICTED_CODE_RID (0x00000021L)
164 #define SECURITY_PACKAGE_BASE_RID (0x00000040L)
165 #define SECURITY_PACKAGE_RID_COUNT (2L)
166 #define SECURITY_PACKAGE_NTLM_RID (0x0000000AL)
167 #define SECURITY_PACKAGE_SCHANNEL_RID (0x0000000EL)
168 #define SECURITY_PACKAGE_DIGEST_RID (0x00000015L)
170 #define SECURITY_CRED_TYPE_BASE_RID (0x00000041L)
171 #define SECURITY_CRED_TYPE_RID_COUNT (2L)
172 #define SECURITY_CRED_TYPE_THIS_ORG_CERT_RID (0x00000001L)
174 #define SECURITY_MIN_BASE_RID (0x00000050L)
175 #define SECURITY_SERVICE_ID_BASE_RID (0x00000050L)
176 #define SECURITY_SERVICE_ID_RID_COUNT (6L)
177 #define SECURITY_RESERVED_ID_BASE_RID (0x00000051L)
178 #define SECURITY_APPPOOL_ID_BASE_RID (0x00000052L)
179 #define SECURITY_APPPOOL_ID_RID_COUNT (6L)
180 #define SECURITY_VIRTUALSERVER_ID_BASE_RID (0x00000053L)
181 #define SECURITY_VIRTUALSERVER_ID_RID_COUNT (6L)
182 #define SECURITY_USERMODEDRIVERHOST_ID_BASE_RID (0x00000054L)
183 #define SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT (6L)
184 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID (0x00000055L)
185 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT (6L)
186 #define SECURITY_WMIHOST_ID_BASE_RID (0x00000056L)
187 #define SECURITY_WMIHOST_ID_RID_COUNT (6L)
188 #define SECURITY_TASK_ID_BASE_RID (0x00000057L)
189 #define SECURITY_NFS_ID_BASE_RID (0x00000058L)
190 #define SECURITY_COM_ID_BASE_RID (0x00000059L)
191 #define SECURITY_VIRTUALACCOUNT_ID_RID_COUNT (6L)
193 #define SECURITY_MAX_BASE_RID (0x0000006FL)
195 #define SECURITY_MAX_ALWAYS_FILTERED (0x000003E7L)
196 #define SECURITY_MIN_NEVER_FILTERED (0x000003E8L)
198 #define SECURITY_OTHER_ORGANIZATION_RID (0x000003E8L)
200 #define SECURITY_WINDOWSMOBILE_ID_BASE_RID (0x00000070L)
202 /* Well-known domain relative sub-authority values (RIDs) */
204 #define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS (0x000001F2L)
206 #define FOREST_USER_RID_MAX (0x000001F3L)
208 /* Well-known users */
210 #define DOMAIN_USER_RID_ADMIN (0x000001F4L)
211 #define DOMAIN_USER_RID_GUEST (0x000001F5L)
212 #define DOMAIN_USER_RID_KRBTGT (0x000001F6L)
214 #define DOMAIN_USER_RID_MAX (0x000003E7L)
216 /* Well-known groups */
218 #define DOMAIN_GROUP_RID_ADMINS (0x00000200L)
219 #define DOMAIN_GROUP_RID_USERS (0x00000201L)
220 #define DOMAIN_GROUP_RID_GUESTS (0x00000202L)
221 #define DOMAIN_GROUP_RID_COMPUTERS (0x00000203L)
222 #define DOMAIN_GROUP_RID_CONTROLLERS (0x00000204L)
223 #define DOMAIN_GROUP_RID_CERT_ADMINS (0x00000205L)
224 #define DOMAIN_GROUP_RID_SCHEMA_ADMINS (0x00000206L)
225 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (0x00000207L)
226 #define DOMAIN_GROUP_RID_POLICY_ADMINS (0x00000208L)
227 #define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (0x00000209L)
229 /* Well-known aliases */
231 #define DOMAIN_ALIAS_RID_ADMINS (0x00000220L)
232 #define DOMAIN_ALIAS_RID_USERS (0x00000221L)
233 #define DOMAIN_ALIAS_RID_GUESTS (0x00000222L)
234 #define DOMAIN_ALIAS_RID_POWER_USERS (0x00000223L)
236 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS (0x00000224L)
237 #define DOMAIN_ALIAS_RID_SYSTEM_OPS (0x00000225L)
238 #define DOMAIN_ALIAS_RID_PRINT_OPS (0x00000226L)
239 #define DOMAIN_ALIAS_RID_BACKUP_OPS (0x00000227L)
241 #define DOMAIN_ALIAS_RID_REPLICATOR (0x00000228L)
242 #define DOMAIN_ALIAS_RID_RAS_SERVERS (0x00000229L)
243 #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS (0x0000022AL)
244 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS (0x0000022BL)
245 #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS (0x0000022CL)
246 #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS (0x0000022DL)
248 #define DOMAIN_ALIAS_RID_MONITORING_USERS (0x0000022EL)
249 #define DOMAIN_ALIAS_RID_LOGGING_USERS (0x0000022FL)
250 #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS (0x00000230L)
251 #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS (0x00000231L)
252 #define DOMAIN_ALIAS_RID_DCOM_USERS (0x00000232L)
253 #define DOMAIN_ALIAS_RID_IUSERS (0x00000238L)
254 #define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS (0x00000239L)
255 #define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP (0x0000023BL)
256 #define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (0x0000023CL)
257 #define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP (0x0000023DL)
258 #define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP (0x0000023EL)
260 #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
261 #define SECURITY_MANDATORY_UNTRUSTED_RID (0x00000000L)
262 #define SECURITY_MANDATORY_LOW_RID (0x00001000L)
263 #define SECURITY_MANDATORY_MEDIUM_RID (0x00002000L)
264 #define SECURITY_MANDATORY_HIGH_RID (0x00003000L)
265 #define SECURITY_MANDATORY_SYSTEM_RID (0x00004000L)
266 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID (0x00005000L)
268 /* SECURITY_MANDATORY_MAXIMUM_USER_RID is the highest RID that
269 can be set by a usermode caller.*/
271 #define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
273 #define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
275 /* Allocate the System Luid. The first 1000 LUIDs are reserved.
276 Use #999 here (0x3e7 = 999) */
278 #define SYSTEM_LUID { 0x3e7, 0x0 }
279 #define ANONYMOUS_LOGON_LUID { 0x3e6, 0x0 }
280 #define LOCALSERVICE_LUID { 0x3e5, 0x0 }
281 #define NETWORKSERVICE_LUID { 0x3e4, 0x0 }
282 #define IUSER_LUID { 0x3e3, 0x0 }
284 typedef struct _ACE_HEADER
{
288 } ACE_HEADER
, *PACE_HEADER
;
290 /* also in winnt.h */
291 #define ACCESS_MIN_MS_ACE_TYPE (0x0)
292 #define ACCESS_ALLOWED_ACE_TYPE (0x0)
293 #define ACCESS_DENIED_ACE_TYPE (0x1)
294 #define SYSTEM_AUDIT_ACE_TYPE (0x2)
295 #define SYSTEM_ALARM_ACE_TYPE (0x3)
296 #define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
297 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
298 #define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
299 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
300 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
301 #define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
302 #define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
303 #define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
304 #define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
305 #define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
306 #define ACCESS_MAX_MS_ACE_TYPE (0x8)
307 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
308 #define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
309 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
310 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
311 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
312 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
313 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
314 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
315 #define ACCESS_MAX_MS_V5_ACE_TYPE (0x11)
316 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE (0x11)
318 /* The following are the inherit flags that go into the AceFlags field
321 #define OBJECT_INHERIT_ACE (0x1)
322 #define CONTAINER_INHERIT_ACE (0x2)
323 #define NO_PROPAGATE_INHERIT_ACE (0x4)
324 #define INHERIT_ONLY_ACE (0x8)
325 #define INHERITED_ACE (0x10)
326 #define VALID_INHERIT_FLAGS (0x1F)
328 #define SUCCESSFUL_ACCESS_ACE_FLAG (0x40)
329 #define FAILED_ACCESS_ACE_FLAG (0x80)
331 typedef struct _ACCESS_ALLOWED_ACE
{
335 } ACCESS_ALLOWED_ACE
, *PACCESS_ALLOWED_ACE
;
337 typedef struct _ACCESS_DENIED_ACE
{
341 } ACCESS_DENIED_ACE
, *PACCESS_DENIED_ACE
;
343 typedef struct _SYSTEM_AUDIT_ACE
{
347 } SYSTEM_AUDIT_ACE
, *PSYSTEM_AUDIT_ACE
;
349 typedef struct _SYSTEM_ALARM_ACE
{
353 } SYSTEM_ALARM_ACE
, *PSYSTEM_ALARM_ACE
;
355 typedef struct _SYSTEM_MANDATORY_LABEL_ACE
{
359 } SYSTEM_MANDATORY_LABEL_ACE
, *PSYSTEM_MANDATORY_LABEL_ACE
;
361 #define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1
362 #define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2
363 #define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
364 #define SYSTEM_MANDATORY_LABEL_VALID_MASK (SYSTEM_MANDATORY_LABEL_NO_WRITE_UP | \
365 SYSTEM_MANDATORY_LABEL_NO_READ_UP | \
366 SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP)
368 #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
370 typedef USHORT SECURITY_DESCRIPTOR_CONTROL
,*PSECURITY_DESCRIPTOR_CONTROL
;
372 #define SE_OWNER_DEFAULTED 0x0001
373 #define SE_GROUP_DEFAULTED 0x0002
374 #define SE_DACL_PRESENT 0x0004
375 #define SE_DACL_DEFAULTED 0x0008
376 #define SE_SACL_PRESENT 0x0010
377 #define SE_SACL_DEFAULTED 0x0020
378 #define SE_DACL_UNTRUSTED 0x0040
379 #define SE_SERVER_SECURITY 0x0080
380 #define SE_DACL_AUTO_INHERIT_REQ 0x0100
381 #define SE_SACL_AUTO_INHERIT_REQ 0x0200
382 #define SE_DACL_AUTO_INHERITED 0x0400
383 #define SE_SACL_AUTO_INHERITED 0x0800
384 #define SE_DACL_PROTECTED 0x1000
385 #define SE_SACL_PROTECTED 0x2000
386 #define SE_RM_CONTROL_VALID 0x4000
387 #define SE_SELF_RELATIVE 0x8000
389 typedef struct _SECURITY_DESCRIPTOR_RELATIVE
{
392 SECURITY_DESCRIPTOR_CONTROL Control
;
397 } SECURITY_DESCRIPTOR_RELATIVE
, *PISECURITY_DESCRIPTOR_RELATIVE
;
399 typedef struct _SECURITY_DESCRIPTOR
{
402 SECURITY_DESCRIPTOR_CONTROL Control
;
407 } SECURITY_DESCRIPTOR
, *PISECURITY_DESCRIPTOR
;
409 typedef struct _OBJECT_TYPE_LIST
{
413 } OBJECT_TYPE_LIST
, *POBJECT_TYPE_LIST
;
415 #define ACCESS_OBJECT_GUID 0
416 #define ACCESS_PROPERTY_SET_GUID 1
417 #define ACCESS_PROPERTY_GUID 2
418 #define ACCESS_MAX_LEVEL 4
420 typedef enum _AUDIT_EVENT_TYPE
{
421 AuditEventObjectAccess
,
422 AuditEventDirectoryServiceAccess
423 } AUDIT_EVENT_TYPE
, *PAUDIT_EVENT_TYPE
;
425 #define AUDIT_ALLOW_NO_PRIVILEGE 0x1
427 #define ACCESS_DS_SOURCE_A "DS"
428 #define ACCESS_DS_SOURCE_W L"DS"
429 #define ACCESS_DS_OBJECT_TYPE_NAME_A "Directory Service Object"
430 #define ACCESS_DS_OBJECT_TYPE_NAME_W L"Directory Service Object"
432 #define ACCESS_REASON_TYPE_MASK 0xffff0000
433 #define ACCESS_REASON_DATA_MASK 0x0000ffff
435 typedef enum _ACCESS_REASON_TYPE
{
436 AccessReasonNone
= 0x00000000,
437 AccessReasonAllowedAce
= 0x00010000,
438 AccessReasonDeniedAce
= 0x00020000,
439 AccessReasonAllowedParentAce
= 0x00030000,
440 AccessReasonDeniedParentAce
= 0x00040000,
441 AccessReasonMissingPrivilege
= 0x00100000,
442 AccessReasonFromPrivilege
= 0x00200000,
443 AccessReasonIntegrityLevel
= 0x00300000,
444 AccessReasonOwnership
= 0x00400000,
445 AccessReasonNullDacl
= 0x00500000,
446 AccessReasonEmptyDacl
= 0x00600000,
447 AccessReasonNoSD
= 0x00700000,
448 AccessReasonNoGrant
= 0x00800000
449 } ACCESS_REASON_TYPE
;
451 typedef ULONG ACCESS_REASON
;
453 typedef struct _ACCESS_REASONS
{
454 ACCESS_REASON Data
[32];
455 } ACCESS_REASONS
, *PACCESS_REASONS
;
457 #define SE_SECURITY_DESCRIPTOR_FLAG_NO_OWNER_ACE 0x00000001
458 #define SE_SECURITY_DESCRIPTOR_FLAG_NO_LABEL_ACE 0x00000002
459 #define SE_SECURITY_DESCRIPTOR_VALID_FLAGS 0x00000003
461 typedef struct _SE_SECURITY_DESCRIPTOR
{
464 PSECURITY_DESCRIPTOR SecurityDescriptor
;
465 } SE_SECURITY_DESCRIPTOR
, *PSE_SECURITY_DESCRIPTOR
;
467 typedef struct _SE_ACCESS_REQUEST
{
469 PSE_SECURITY_DESCRIPTOR SeSecurityDescriptor
;
470 ACCESS_MASK DesiredAccess
;
471 ACCESS_MASK PreviouslyGrantedAccess
;
472 PSID PrincipalSelfSid
;
473 PGENERIC_MAPPING GenericMapping
;
474 ULONG ObjectTypeListCount
;
475 POBJECT_TYPE_LIST ObjectTypeList
;
476 } SE_ACCESS_REQUEST
, *PSE_ACCESS_REQUEST
;
478 typedef struct _SE_ACCESS_REPLY
{
480 ULONG ResultListCount
;
481 PACCESS_MASK GrantedAccess
;
482 PNTSTATUS AccessStatus
;
483 PACCESS_REASONS AccessReason
;
484 PPRIVILEGE_SET
* Privileges
;
485 } SE_ACCESS_REPLY
, *PSE_ACCESS_REPLY
;
487 typedef enum _SE_AUDIT_OPERATION
{
488 AuditPrivilegeObject
,
489 AuditPrivilegeService
,
492 AuditOpenObjectWithTransaction
,
495 AuditOpenObjectForDelete
,
496 AuditOpenObjectForDeleteWithTransaction
,
499 AuditObjectReference
,
501 } SE_AUDIT_OPERATION
, *PSE_AUDIT_OPERATION
;
503 typedef struct _SE_AUDIT_INFO
{
505 AUDIT_EVENT_TYPE AuditType
;
506 SE_AUDIT_OPERATION AuditOperation
;
508 UNICODE_STRING SubsystemName
;
509 UNICODE_STRING ObjectTypeName
;
510 UNICODE_STRING ObjectName
;
514 BOOLEAN ObjectCreation
;
515 BOOLEAN GenerateOnClose
;
516 } SE_AUDIT_INFO
, *PSE_AUDIT_INFO
;
518 #define TOKEN_ASSIGN_PRIMARY (0x0001)
519 #define TOKEN_DUPLICATE (0x0002)
520 #define TOKEN_IMPERSONATE (0x0004)
521 #define TOKEN_QUERY (0x0008)
522 #define TOKEN_QUERY_SOURCE (0x0010)
523 #define TOKEN_ADJUST_PRIVILEGES (0x0020)
524 #define TOKEN_ADJUST_GROUPS (0x0040)
525 #define TOKEN_ADJUST_DEFAULT (0x0080)
526 #define TOKEN_ADJUST_SESSIONID (0x0100)
528 #define TOKEN_ALL_ACCESS_P (STANDARD_RIGHTS_REQUIRED |\
529 TOKEN_ASSIGN_PRIMARY |\
533 TOKEN_QUERY_SOURCE |\
534 TOKEN_ADJUST_PRIVILEGES |\
535 TOKEN_ADJUST_GROUPS |\
536 TOKEN_ADJUST_DEFAULT )
538 #if ((defined(_WIN32_WINNT) && (_WIN32_WINNT > 0x0400)) || (!defined(_WIN32_WINNT)))
539 #define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P |\
540 TOKEN_ADJUST_SESSIONID )
542 #define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P)
545 #define TOKEN_READ (STANDARD_RIGHTS_READ |\
548 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\
549 TOKEN_ADJUST_PRIVILEGES |\
550 TOKEN_ADJUST_GROUPS |\
551 TOKEN_ADJUST_DEFAULT)
553 #define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
555 typedef enum _TOKEN_TYPE
{
558 } TOKEN_TYPE
,*PTOKEN_TYPE
;
560 typedef enum _TOKEN_INFORMATION_CLASS
{
569 TokenImpersonationLevel
,
573 TokenGroupsAndPrivileges
,
574 TokenSessionReference
,
581 TokenHasRestrictions
,
582 TokenAccessInformation
,
583 TokenVirtualizationAllowed
,
584 TokenVirtualizationEnabled
,
587 TokenMandatoryPolicy
,
590 } TOKEN_INFORMATION_CLASS
, *PTOKEN_INFORMATION_CLASS
;
592 typedef struct _TOKEN_USER
{
593 SID_AND_ATTRIBUTES User
;
594 } TOKEN_USER
, *PTOKEN_USER
;
596 typedef struct _TOKEN_GROUPS
{
598 SID_AND_ATTRIBUTES Groups
[ANYSIZE_ARRAY
];
599 } TOKEN_GROUPS
,*PTOKEN_GROUPS
,*LPTOKEN_GROUPS
;
601 typedef struct _TOKEN_PRIVILEGES
{
602 ULONG PrivilegeCount
;
603 LUID_AND_ATTRIBUTES Privileges
[ANYSIZE_ARRAY
];
604 } TOKEN_PRIVILEGES
,*PTOKEN_PRIVILEGES
,*LPTOKEN_PRIVILEGES
;
606 typedef struct _TOKEN_OWNER
{
608 } TOKEN_OWNER
,*PTOKEN_OWNER
;
610 typedef struct _TOKEN_PRIMARY_GROUP
{
612 } TOKEN_PRIMARY_GROUP
,*PTOKEN_PRIMARY_GROUP
;
614 typedef struct _TOKEN_DEFAULT_DACL
{
616 } TOKEN_DEFAULT_DACL
,*PTOKEN_DEFAULT_DACL
;
618 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES
{
621 PSID_AND_ATTRIBUTES Sids
;
622 ULONG RestrictedSidCount
;
623 ULONG RestrictedSidLength
;
624 PSID_AND_ATTRIBUTES RestrictedSids
;
625 ULONG PrivilegeCount
;
626 ULONG PrivilegeLength
;
627 PLUID_AND_ATTRIBUTES Privileges
;
628 LUID AuthenticationId
;
629 } TOKEN_GROUPS_AND_PRIVILEGES
, *PTOKEN_GROUPS_AND_PRIVILEGES
;
631 typedef struct _TOKEN_LINKED_TOKEN
{
633 } TOKEN_LINKED_TOKEN
, *PTOKEN_LINKED_TOKEN
;
635 typedef struct _TOKEN_ELEVATION
{
636 ULONG TokenIsElevated
;
637 } TOKEN_ELEVATION
, *PTOKEN_ELEVATION
;
639 typedef struct _TOKEN_MANDATORY_LABEL
{
640 SID_AND_ATTRIBUTES Label
;
641 } TOKEN_MANDATORY_LABEL
, *PTOKEN_MANDATORY_LABEL
;
643 #define TOKEN_MANDATORY_POLICY_OFF 0x0
644 #define TOKEN_MANDATORY_POLICY_NO_WRITE_UP 0x1
645 #define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2
647 #define TOKEN_MANDATORY_POLICY_VALID_MASK (TOKEN_MANDATORY_POLICY_NO_WRITE_UP | \
648 TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN)
650 typedef struct _TOKEN_MANDATORY_POLICY
{
652 } TOKEN_MANDATORY_POLICY
, *PTOKEN_MANDATORY_POLICY
;
654 typedef struct _TOKEN_ACCESS_INFORMATION
{
655 PSID_AND_ATTRIBUTES_HASH SidHash
;
656 PSID_AND_ATTRIBUTES_HASH RestrictedSidHash
;
657 PTOKEN_PRIVILEGES Privileges
;
658 LUID AuthenticationId
;
659 TOKEN_TYPE TokenType
;
660 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
661 TOKEN_MANDATORY_POLICY MandatoryPolicy
;
663 } TOKEN_ACCESS_INFORMATION
, *PTOKEN_ACCESS_INFORMATION
;
665 #define POLICY_AUDIT_SUBCATEGORY_COUNT (53)
667 typedef struct _TOKEN_AUDIT_POLICY
{
668 UCHAR PerUserPolicy
[((POLICY_AUDIT_SUBCATEGORY_COUNT
) >> 1) + 1];
669 } TOKEN_AUDIT_POLICY
, *PTOKEN_AUDIT_POLICY
;
671 #define TOKEN_SOURCE_LENGTH 8
673 typedef struct _TOKEN_SOURCE
{
674 CHAR SourceName
[TOKEN_SOURCE_LENGTH
];
675 LUID SourceIdentifier
;
676 } TOKEN_SOURCE
,*PTOKEN_SOURCE
;
678 typedef struct _TOKEN_STATISTICS
{
680 LUID AuthenticationId
;
681 LARGE_INTEGER ExpirationTime
;
682 TOKEN_TYPE TokenType
;
683 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
684 ULONG DynamicCharged
;
685 ULONG DynamicAvailable
;
687 ULONG PrivilegeCount
;
689 } TOKEN_STATISTICS
, *PTOKEN_STATISTICS
;
691 typedef struct _TOKEN_CONTROL
{
693 LUID AuthenticationId
;
695 TOKEN_SOURCE TokenSource
;
696 } TOKEN_CONTROL
,*PTOKEN_CONTROL
;
698 typedef struct _TOKEN_ORIGIN
{
699 LUID OriginatingLogonSession
;
700 } TOKEN_ORIGIN
, *PTOKEN_ORIGIN
;
702 typedef enum _MANDATORY_LEVEL
{
703 MandatoryLevelUntrusted
= 0,
705 MandatoryLevelMedium
,
707 MandatoryLevelSystem
,
708 MandatoryLevelSecureProcess
,
710 } MANDATORY_LEVEL
, *PMANDATORY_LEVEL
;
712 typedef enum _OBJECT_INFORMATION_CLASS
{
713 ObjectBasicInformation
= 0,
714 ObjectNameInformation
= 1, /* FIXME, not in WDK */
715 ObjectTypeInformation
= 2,
716 ObjectTypesInformation
= 3, /* FIXME, not in WDK */
717 ObjectHandleFlagInformation
= 4, /* FIXME, not in WDK */
718 ObjectSessionInformation
= 5, /* FIXME, not in WDK */
719 MaxObjectInfoClass
/* FIXME, not in WDK */
720 } OBJECT_INFORMATION_CLASS
;
726 IN HANDLE Handle OPTIONAL
,
727 IN OBJECT_INFORMATION_CLASS ObjectInformationClass
,
728 OUT PVOID ObjectInformation OPTIONAL
,
729 IN ULONG ObjectInformationLength
,
730 OUT PULONG ReturnLength OPTIONAL
);
732 #if (NTDDI_VERSION >= NTDDI_WIN2K)
738 IN HANDLE ThreadHandle
,
739 IN ACCESS_MASK DesiredAccess
,
740 IN BOOLEAN OpenAsSelf
,
741 OUT PHANDLE TokenHandle
);
747 IN HANDLE ProcessHandle
,
748 IN ACCESS_MASK DesiredAccess
,
749 OUT PHANDLE TokenHandle
);
754 NtQueryInformationToken(
755 IN HANDLE TokenHandle
,
756 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
757 OUT PVOID TokenInformation OPTIONAL
,
758 IN ULONG TokenInformationLength
,
759 OUT PULONG ReturnLength
);
764 NtAdjustPrivilegesToken(
765 IN HANDLE TokenHandle
,
766 IN BOOLEAN DisableAllPrivileges
,
767 IN PTOKEN_PRIVILEGES NewState OPTIONAL
,
768 IN ULONG BufferLength
,
769 OUT PTOKEN_PRIVILEGES PreviousState
,
770 OUT PULONG ReturnLength OPTIONAL
);
776 OUT PHANDLE FileHandle
,
777 IN ACCESS_MASK DesiredAccess
,
778 IN POBJECT_ATTRIBUTES ObjectAttributes
,
779 OUT PIO_STATUS_BLOCK IoStatusBlock
,
780 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
781 IN ULONG FileAttributes
,
782 IN ULONG ShareAccess
,
783 IN ULONG CreateDisposition
,
784 IN ULONG CreateOptions
,
791 NtDeviceIoControlFile(
792 IN HANDLE FileHandle
,
793 IN HANDLE Event OPTIONAL
,
794 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
795 IN PVOID ApcContext OPTIONAL
,
796 OUT PIO_STATUS_BLOCK IoStatusBlock
,
797 IN ULONG IoControlCode
,
798 IN PVOID InputBuffer OPTIONAL
,
799 IN ULONG InputBufferLength
,
800 OUT PVOID OutputBuffer OPTIONAL
,
801 IN ULONG OutputBufferLength
);
807 IN HANDLE FileHandle
,
808 IN HANDLE Event OPTIONAL
,
809 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
810 IN PVOID ApcContext OPTIONAL
,
811 OUT PIO_STATUS_BLOCK IoStatusBlock
,
812 IN ULONG FsControlCode
,
813 IN PVOID InputBuffer OPTIONAL
,
814 IN ULONG InputBufferLength
,
815 OUT PVOID OutputBuffer OPTIONAL
,
816 IN ULONG OutputBufferLength
);
822 IN HANDLE FileHandle
,
823 IN HANDLE Event OPTIONAL
,
824 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
825 IN PVOID ApcContext OPTIONAL
,
826 OUT PIO_STATUS_BLOCK IoStatusBlock
,
827 IN PLARGE_INTEGER ByteOffset
,
828 IN PLARGE_INTEGER Length
,
830 IN BOOLEAN FailImmediately
,
831 IN BOOLEAN ExclusiveLock
);
837 OUT PHANDLE FileHandle
,
838 IN ACCESS_MASK DesiredAccess
,
839 IN POBJECT_ATTRIBUTES ObjectAttributes
,
840 OUT PIO_STATUS_BLOCK IoStatusBlock
,
841 IN ULONG ShareAccess
,
842 IN ULONG OpenOptions
);
847 NtQueryDirectoryFile(
848 IN HANDLE FileHandle
,
849 IN HANDLE Event OPTIONAL
,
850 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
851 IN PVOID ApcContext OPTIONAL
,
852 OUT PIO_STATUS_BLOCK IoStatusBlock
,
853 OUT PVOID FileInformation
,
855 IN FILE_INFORMATION_CLASS FileInformationClass
,
856 IN BOOLEAN ReturnSingleEntry
,
857 IN PUNICODE_STRING FileName OPTIONAL
,
858 IN BOOLEAN RestartScan
);
863 NtQueryInformationFile(
864 IN HANDLE FileHandle
,
865 OUT PIO_STATUS_BLOCK IoStatusBlock
,
866 OUT PVOID FileInformation
,
868 IN FILE_INFORMATION_CLASS FileInformationClass
);
873 NtQueryQuotaInformationFile(
874 IN HANDLE FileHandle
,
875 OUT PIO_STATUS_BLOCK IoStatusBlock
,
878 IN BOOLEAN ReturnSingleEntry
,
880 IN ULONG SidListLength
,
881 IN PSID StartSid OPTIONAL
,
882 IN BOOLEAN RestartScan
);
887 NtQueryVolumeInformationFile(
888 IN HANDLE FileHandle
,
889 OUT PIO_STATUS_BLOCK IoStatusBlock
,
890 OUT PVOID FsInformation
,
892 IN FS_INFORMATION_CLASS FsInformationClass
);
898 IN HANDLE FileHandle
,
899 IN HANDLE Event OPTIONAL
,
900 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
901 IN PVOID ApcContext OPTIONAL
,
902 OUT PIO_STATUS_BLOCK IoStatusBlock
,
905 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
906 IN PULONG Key OPTIONAL
);
911 NtSetInformationFile(
912 IN HANDLE FileHandle
,
913 OUT PIO_STATUS_BLOCK IoStatusBlock
,
914 IN PVOID FileInformation
,
916 IN FILE_INFORMATION_CLASS FileInformationClass
);
921 NtSetQuotaInformationFile(
922 IN HANDLE FileHandle
,
923 OUT PIO_STATUS_BLOCK IoStatusBlock
,
930 NtSetVolumeInformationFile(
931 IN HANDLE FileHandle
,
932 OUT PIO_STATUS_BLOCK IoStatusBlock
,
933 IN PVOID FsInformation
,
935 IN FS_INFORMATION_CLASS FsInformationClass
);
941 IN HANDLE FileHandle
,
942 IN HANDLE Event OPTIONAL
,
943 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
944 IN PVOID ApcContext OPTIONAL
,
945 OUT PIO_STATUS_BLOCK IoStatusBlock
,
948 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
949 IN PULONG Key OPTIONAL
);
955 IN HANDLE FileHandle
,
956 OUT PIO_STATUS_BLOCK IoStatusBlock
,
957 IN PLARGE_INTEGER ByteOffset
,
958 IN PLARGE_INTEGER Length
,
966 IN SECURITY_INFORMATION SecurityInformation
,
967 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
972 NtQuerySecurityObject(
974 IN SECURITY_INFORMATION SecurityInformation
,
975 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
977 OUT PULONG LengthNeeded
);
988 NtAllocateVirtualMemory(
989 IN HANDLE ProcessHandle
,
990 IN OUT PVOID
*BaseAddress
,
991 IN ULONG_PTR ZeroBits
,
992 IN OUT PSIZE_T RegionSize
,
993 IN ULONG AllocationType
,
1000 IN HANDLE ProcessHandle
,
1001 IN OUT PVOID
*BaseAddress
,
1002 IN OUT PSIZE_T RegionSize
,
1007 #if (NTDDI_VERSION >= NTDDI_WINXP)
1012 NtOpenThreadTokenEx(
1013 IN HANDLE ThreadHandle
,
1014 IN ACCESS_MASK DesiredAccess
,
1015 IN BOOLEAN OpenAsSelf
,
1016 IN ULONG HandleAttributes
,
1017 OUT PHANDLE TokenHandle
);
1022 NtOpenProcessTokenEx(
1023 IN HANDLE ProcessHandle
,
1024 IN ACCESS_MASK DesiredAccess
,
1025 IN ULONG HandleAttributes
,
1026 OUT PHANDLE TokenHandle
);
1031 NtOpenJobObjectToken(
1032 IN HANDLE JobHandle
,
1033 IN ACCESS_MASK DesiredAccess
,
1034 OUT PHANDLE TokenHandle
);
1040 IN HANDLE ExistingTokenHandle
,
1041 IN ACCESS_MASK DesiredAccess
,
1042 IN POBJECT_ATTRIBUTES ObjectAttributes
,
1043 IN BOOLEAN EffectiveOnly
,
1044 IN TOKEN_TYPE TokenType
,
1045 OUT PHANDLE NewTokenHandle
);
1051 IN HANDLE ExistingTokenHandle
,
1053 IN PTOKEN_GROUPS SidsToDisable OPTIONAL
,
1054 IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL
,
1055 IN PTOKEN_GROUPS RestrictedSids OPTIONAL
,
1056 OUT PHANDLE NewTokenHandle
);
1061 NtImpersonateAnonymousToken(
1062 IN HANDLE ThreadHandle
);
1067 NtSetInformationToken(
1068 IN HANDLE TokenHandle
,
1069 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
1070 IN PVOID TokenInformation
,
1071 IN ULONG TokenInformationLength
);
1076 NtAdjustGroupsToken(
1077 IN HANDLE TokenHandle
,
1078 IN BOOLEAN ResetToDefault
,
1079 IN PTOKEN_GROUPS NewState OPTIONAL
,
1080 IN ULONG BufferLength OPTIONAL
,
1081 OUT PTOKEN_GROUPS PreviousState
,
1082 OUT PULONG ReturnLength
);
1088 IN HANDLE ClientToken
,
1089 IN OUT PPRIVILEGE_SET RequiredPrivileges
,
1090 OUT PBOOLEAN Result
);
1095 NtAccessCheckAndAuditAlarm(
1096 IN PUNICODE_STRING SubsystemName
,
1097 IN PVOID HandleId OPTIONAL
,
1098 IN PUNICODE_STRING ObjectTypeName
,
1099 IN PUNICODE_STRING ObjectName
,
1100 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1101 IN ACCESS_MASK DesiredAccess
,
1102 IN PGENERIC_MAPPING GenericMapping
,
1103 IN BOOLEAN ObjectCreation
,
1104 OUT PACCESS_MASK GrantedAccess
,
1105 OUT PNTSTATUS AccessStatus
,
1106 OUT PBOOLEAN GenerateOnClose
);
1111 NtAccessCheckByTypeAndAuditAlarm(
1112 IN PUNICODE_STRING SubsystemName
,
1114 IN PUNICODE_STRING ObjectTypeName
,
1115 IN PUNICODE_STRING ObjectName
,
1116 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1117 IN PSID PrincipalSelfSid OPTIONAL
,
1118 IN ACCESS_MASK DesiredAccess
,
1119 IN AUDIT_EVENT_TYPE AuditType
,
1121 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL
,
1122 IN ULONG ObjectTypeLength
,
1123 IN PGENERIC_MAPPING GenericMapping
,
1124 IN BOOLEAN ObjectCreation
,
1125 OUT PACCESS_MASK GrantedAccess
,
1126 OUT PNTSTATUS AccessStatus
,
1127 OUT PBOOLEAN GenerateOnClose
);
1132 NtAccessCheckByTypeResultListAndAuditAlarm(
1133 IN PUNICODE_STRING SubsystemName
,
1134 IN PVOID HandleId OPTIONAL
,
1135 IN PUNICODE_STRING ObjectTypeName
,
1136 IN PUNICODE_STRING ObjectName
,
1137 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1138 IN PSID PrincipalSelfSid OPTIONAL
,
1139 IN ACCESS_MASK DesiredAccess
,
1140 IN AUDIT_EVENT_TYPE AuditType
,
1142 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL
,
1143 IN ULONG ObjectTypeLength
,
1144 IN PGENERIC_MAPPING GenericMapping
,
1145 IN BOOLEAN ObjectCreation
,
1146 OUT PACCESS_MASK GrantedAccess
,
1147 OUT PNTSTATUS AccessStatus
,
1148 OUT PBOOLEAN GenerateOnClose
);
1152 NtAccessCheckByTypeResultListAndAuditAlarmByHandle(
1153 IN PUNICODE_STRING SubsystemName
,
1154 IN PVOID HandleId OPTIONAL
,
1155 IN HANDLE ClientToken
,
1156 IN PUNICODE_STRING ObjectTypeName
,
1157 IN PUNICODE_STRING ObjectName
,
1158 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1159 IN PSID PrincipalSelfSid OPTIONAL
,
1160 IN ACCESS_MASK DesiredAccess
,
1161 IN AUDIT_EVENT_TYPE AuditType
,
1163 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL
,
1164 IN ULONG ObjectTypeLength
,
1165 IN PGENERIC_MAPPING GenericMapping
,
1166 IN BOOLEAN ObjectCreation
,
1167 OUT PACCESS_MASK GrantedAccess
,
1168 OUT PNTSTATUS AccessStatus
,
1169 OUT PBOOLEAN GenerateOnClose
);
1174 NtOpenObjectAuditAlarm(
1175 IN PUNICODE_STRING SubsystemName
,
1176 IN PVOID HandleId OPTIONAL
,
1177 IN PUNICODE_STRING ObjectTypeName
,
1178 IN PUNICODE_STRING ObjectName
,
1179 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
,
1180 IN HANDLE ClientToken
,
1181 IN ACCESS_MASK DesiredAccess
,
1182 IN ACCESS_MASK GrantedAccess
,
1183 IN PPRIVILEGE_SET Privileges OPTIONAL
,
1184 IN BOOLEAN ObjectCreation
,
1185 IN BOOLEAN AccessGranted
,
1186 OUT PBOOLEAN GenerateOnClose
);
1191 NtPrivilegeObjectAuditAlarm(
1192 IN PUNICODE_STRING SubsystemName
,
1193 IN PVOID HandleId OPTIONAL
,
1194 IN HANDLE ClientToken
,
1195 IN ACCESS_MASK DesiredAccess
,
1196 IN PPRIVILEGE_SET Privileges
,
1197 IN BOOLEAN AccessGranted
);
1202 NtCloseObjectAuditAlarm(
1203 IN PUNICODE_STRING SubsystemName
,
1204 IN PVOID HandleId OPTIONAL
,
1205 IN BOOLEAN GenerateOnClose
);
1210 NtDeleteObjectAuditAlarm(
1211 IN PUNICODE_STRING SubsystemName
,
1212 IN PVOID HandleId OPTIONAL
,
1213 IN BOOLEAN GenerateOnClose
);
1218 NtPrivilegedServiceAuditAlarm(
1219 IN PUNICODE_STRING SubsystemName
,
1220 IN PUNICODE_STRING ServiceName
,
1221 IN HANDLE ClientToken
,
1222 IN PPRIVILEGE_SET Privileges
,
1223 IN BOOLEAN AccessGranted
);
1228 NtSetInformationThread(
1229 IN HANDLE ThreadHandle
,
1230 IN THREADINFOCLASS ThreadInformationClass
,
1231 IN PVOID ThreadInformation
,
1232 IN ULONG ThreadInformationLength
);
1238 OUT PHANDLE SectionHandle
,
1239 IN ACCESS_MASK DesiredAccess
,
1240 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
1241 IN PLARGE_INTEGER MaximumSize OPTIONAL
,
1242 IN ULONG SectionPageProtection
,
1243 IN ULONG AllocationAttributes
,
1244 IN HANDLE FileHandle OPTIONAL
);
1249 (NTAPI
* PRTL_HEAP_COMMIT_ROUTINE
) (
1251 IN OUT PVOID
*CommitAddress
,
1252 IN OUT PSIZE_T CommitSize
);
1254 typedef struct _RTL_HEAP_PARAMETERS
{
1256 SIZE_T SegmentReserve
;
1257 SIZE_T SegmentCommit
;
1258 SIZE_T DeCommitFreeBlockThreshold
;
1259 SIZE_T DeCommitTotalFreeThreshold
;
1260 SIZE_T MaximumAllocationSize
;
1261 SIZE_T VirtualMemoryThreshold
;
1262 SIZE_T InitialCommit
;
1263 SIZE_T InitialReserve
;
1264 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine
;
1266 } RTL_HEAP_PARAMETERS
, *PRTL_HEAP_PARAMETERS
;
1268 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1274 IN HANDLE HeapHandle
,
1275 IN ULONG Flags OPTIONAL
,
1282 IN PVOID HeapHandle
,
1283 IN ULONG Flags OPTIONAL
,
1284 IN PVOID BaseAddress
);
1290 OUT PCONTEXT ContextRecord
);
1296 IN OUT PULONG Seed
);
1301 RtlCreateUnicodeString(
1302 OUT PUNICODE_STRING DestinationString
,
1303 IN PCWSTR SourceString
);
1308 RtlAppendStringToString(
1309 IN OUT PSTRING Destination
,
1310 IN
const STRING
*Source
);
1315 RtlOemStringToUnicodeString(
1316 IN OUT PUNICODE_STRING DestinationString
,
1317 IN PCOEM_STRING SourceString
,
1318 IN BOOLEAN AllocateDestinationString
);
1323 RtlUnicodeStringToOemString(
1324 IN OUT POEM_STRING DestinationString
,
1325 IN PCUNICODE_STRING SourceString
,
1326 IN BOOLEAN AllocateDestinationString
);
1331 RtlUpcaseUnicodeStringToOemString(
1332 IN OUT POEM_STRING DestinationString
,
1333 IN PCUNICODE_STRING SourceString
,
1334 IN BOOLEAN AllocateDestinationString
);
1339 RtlOemStringToCountedUnicodeString(
1340 IN OUT PUNICODE_STRING DestinationString
,
1341 IN PCOEM_STRING SourceString
,
1342 IN BOOLEAN AllocateDestinationString
);
1347 RtlUnicodeStringToCountedOemString(
1348 IN OUT POEM_STRING DestinationString
,
1349 IN PCUNICODE_STRING SourceString
,
1350 IN BOOLEAN AllocateDestinationString
);
1355 RtlUpcaseUnicodeStringToCountedOemString(
1356 IN OUT POEM_STRING DestinationString
,
1357 IN PCUNICODE_STRING SourceString
,
1358 IN BOOLEAN AllocateDestinationString
);
1363 RtlDowncaseUnicodeString(
1364 IN OUT PUNICODE_STRING UniDest
,
1365 IN PCUNICODE_STRING UniSource
,
1366 IN BOOLEAN AllocateDestinationString
);
1372 IN OUT POEM_STRING OemString
);
1377 RtlxUnicodeStringToOemSize(
1378 IN PCUNICODE_STRING UnicodeString
);
1383 RtlxOemStringToUnicodeSize(
1384 IN PCOEM_STRING OemString
);
1389 RtlMultiByteToUnicodeN(
1390 OUT PWCH UnicodeString
,
1391 IN ULONG MaxBytesInUnicodeString
,
1392 OUT PULONG BytesInUnicodeString OPTIONAL
,
1393 IN
const CHAR
*MultiByteString
,
1394 IN ULONG BytesInMultiByteString
);
1399 RtlMultiByteToUnicodeSize(
1400 OUT PULONG BytesInUnicodeString
,
1401 IN
const CHAR
*MultiByteString
,
1402 IN ULONG BytesInMultiByteString
);
1407 RtlUnicodeToMultiByteSize(
1408 OUT PULONG BytesInMultiByteString
,
1409 IN PCWCH UnicodeString
,
1410 IN ULONG BytesInUnicodeString
);
1415 RtlUnicodeToMultiByteN(
1416 OUT PCHAR MultiByteString
,
1417 IN ULONG MaxBytesInMultiByteString
,
1418 OUT PULONG BytesInMultiByteString OPTIONAL
,
1419 IN PWCH UnicodeString
,
1420 IN ULONG BytesInUnicodeString
);
1425 RtlUpcaseUnicodeToMultiByteN(
1426 OUT PCHAR MultiByteString
,
1427 IN ULONG MaxBytesInMultiByteString
,
1428 OUT PULONG BytesInMultiByteString OPTIONAL
,
1429 IN PCWCH UnicodeString
,
1430 IN ULONG BytesInUnicodeString
);
1436 OUT PWSTR UnicodeString
,
1437 IN ULONG MaxBytesInUnicodeString
,
1438 OUT PULONG BytesInUnicodeString OPTIONAL
,
1440 IN ULONG BytesInOemString
);
1446 OUT PCHAR OemString
,
1447 IN ULONG MaxBytesInOemString
,
1448 OUT PULONG BytesInOemString OPTIONAL
,
1449 IN PCWCH UnicodeString
,
1450 IN ULONG BytesInUnicodeString
);
1455 RtlUpcaseUnicodeToOemN(
1456 OUT PCHAR OemString
,
1457 IN ULONG MaxBytesInOemString
,
1458 OUT PULONG BytesInOemString OPTIONAL
,
1459 IN PCWCH UnicodeString
,
1460 IN ULONG BytesInUnicodeString
);
1462 typedef struct _GENERATE_NAME_CONTEXT
{
1464 BOOLEAN CheckSumInserted
;
1466 WCHAR NameBuffer
[8];
1467 ULONG ExtensionLength
;
1468 WCHAR ExtensionBuffer
[4];
1469 ULONG LastIndexValue
;
1470 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
1472 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1476 RtlGenerate8dot3Name(
1477 IN PCUNICODE_STRING Name
,
1478 IN BOOLEAN AllowExtendedCharacters
,
1479 IN OUT PGENERATE_NAME_CONTEXT Context
,
1480 IN OUT PUNICODE_STRING Name8dot3
);
1485 RtlGenerate8dot3Name(
1486 IN PCUNICODE_STRING Name
,
1487 IN BOOLEAN AllowExtendedCharacters
,
1488 IN OUT PGENERATE_NAME_CONTEXT Context
,
1489 IN OUT PUNICODE_STRING Name8dot3
);
1495 RtlIsNameLegalDOS8Dot3(
1496 IN PCUNICODE_STRING Name
,
1497 IN OUT POEM_STRING OemName OPTIONAL
,
1498 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
);
1503 RtlIsValidOemCharacter(
1504 IN OUT PWCHAR Char
);
1506 typedef struct _PREFIX_TABLE_ENTRY
{
1507 CSHORT NodeTypeCode
;
1509 struct _PREFIX_TABLE_ENTRY
*NextPrefixTree
;
1510 RTL_SPLAY_LINKS Links
;
1512 } PREFIX_TABLE_ENTRY
, *PPREFIX_TABLE_ENTRY
;
1514 typedef struct _PREFIX_TABLE
{
1515 CSHORT NodeTypeCode
;
1517 PPREFIX_TABLE_ENTRY NextPrefixTree
;
1518 } PREFIX_TABLE
, *PPREFIX_TABLE
;
1524 OUT PPREFIX_TABLE PrefixTable
);
1530 IN PPREFIX_TABLE PrefixTable
,
1532 OUT PPREFIX_TABLE_ENTRY PrefixTableEntry
);
1538 IN PPREFIX_TABLE PrefixTable
,
1539 IN PPREFIX_TABLE_ENTRY PrefixTableEntry
);
1545 IN PPREFIX_TABLE PrefixTable
,
1546 IN PSTRING FullName
);
1548 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
{
1549 CSHORT NodeTypeCode
;
1551 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
1552 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
1553 RTL_SPLAY_LINKS Links
;
1554 PUNICODE_STRING Prefix
;
1555 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
1557 typedef struct _UNICODE_PREFIX_TABLE
{
1558 CSHORT NodeTypeCode
;
1560 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
1561 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
1562 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
1567 RtlInitializeUnicodePrefix(
1568 OUT PUNICODE_PREFIX_TABLE PrefixTable
);
1573 RtlInsertUnicodePrefix(
1574 IN PUNICODE_PREFIX_TABLE PrefixTable
,
1575 IN PUNICODE_STRING Prefix
,
1576 OUT PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
);
1581 RtlRemoveUnicodePrefix(
1582 IN PUNICODE_PREFIX_TABLE PrefixTable
,
1583 IN PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
);
1586 PUNICODE_PREFIX_TABLE_ENTRY
1588 RtlFindUnicodePrefix(
1589 IN PUNICODE_PREFIX_TABLE PrefixTable
,
1590 IN PUNICODE_STRING FullName
,
1591 IN ULONG CaseInsensitiveIndex
);
1594 PUNICODE_PREFIX_TABLE_ENTRY
1596 RtlNextUnicodePrefix(
1597 IN PUNICODE_PREFIX_TABLE PrefixTable
,
1598 IN BOOLEAN Restart
);
1603 RtlCompareMemoryUlong(
1611 RtlTimeToSecondsSince1980(
1612 IN PLARGE_INTEGER Time
,
1613 OUT PULONG ElapsedSeconds
);
1618 RtlSecondsSince1980ToTime(
1619 IN ULONG ElapsedSeconds
,
1620 OUT PLARGE_INTEGER Time
);
1625 RtlTimeToSecondsSince1970(
1626 IN PLARGE_INTEGER Time
,
1627 OUT PULONG ElapsedSeconds
);
1632 RtlSecondsSince1970ToTime(
1633 IN ULONG ElapsedSeconds
,
1634 OUT PLARGE_INTEGER Time
);
1659 RtlLengthRequiredSid(
1660 IN ULONG SubAuthorityCount
);
1671 RtlAllocateAndInitializeSid(
1672 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1673 IN UCHAR SubAuthorityCount
,
1674 IN ULONG SubAuthority0
,
1675 IN ULONG SubAuthority1
,
1676 IN ULONG SubAuthority2
,
1677 IN ULONG SubAuthority3
,
1678 IN ULONG SubAuthority4
,
1679 IN ULONG SubAuthority5
,
1680 IN ULONG SubAuthority6
,
1681 IN ULONG SubAuthority7
,
1689 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1690 IN UCHAR SubAuthorityCount
);
1697 IN ULONG SubAuthority
);
1710 IN PSID Destination
,
1716 RtlConvertSidToUnicodeString(
1717 IN OUT PUNICODE_STRING UnicodeString
,
1719 IN BOOLEAN AllocateDestinationString
);
1725 OUT PLUID DestinationLuid
,
1726 IN PLUID SourceLuid
);
1734 IN ULONG AclRevision
);
1741 IN ULONG AceRevision
,
1742 IN ULONG StartingAceIndex
,
1744 IN ULONG AceListLength
);
1764 RtlAddAccessAllowedAce(
1766 IN ULONG AceRevision
,
1767 IN ACCESS_MASK AccessMask
,
1773 RtlAddAccessAllowedAceEx(
1775 IN ULONG AceRevision
,
1777 IN ACCESS_MASK AccessMask
,
1783 RtlCreateSecurityDescriptorRelative(
1784 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor
,
1790 RtlGetDaclSecurityDescriptor(
1791 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1792 OUT PBOOLEAN DaclPresent
,
1794 OUT PBOOLEAN DaclDefaulted
);
1799 RtlSetOwnerSecurityDescriptor(
1800 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1801 IN PSID Owner OPTIONAL
,
1802 IN BOOLEAN OwnerDefaulted
);
1807 RtlGetOwnerSecurityDescriptor(
1808 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1810 OUT PBOOLEAN OwnerDefaulted
);
1815 RtlNtStatusToDosError(
1816 IN NTSTATUS Status
);
1821 RtlCustomCPToUnicodeN(
1822 IN PCPTABLEINFO CustomCP
,
1823 OUT PWCH UnicodeString
,
1824 IN ULONG MaxBytesInUnicodeString
,
1825 OUT PULONG BytesInUnicodeString OPTIONAL
,
1826 IN PCH CustomCPString
,
1827 IN ULONG BytesInCustomCPString
);
1832 RtlUnicodeToCustomCPN(
1833 IN PCPTABLEINFO CustomCP
,
1834 OUT PCH CustomCPString
,
1835 IN ULONG MaxBytesInCustomCPString
,
1836 OUT PULONG BytesInCustomCPString OPTIONAL
,
1837 IN PWCH UnicodeString
,
1838 IN ULONG BytesInUnicodeString
);
1843 RtlUpcaseUnicodeToCustomCPN(
1844 IN PCPTABLEINFO CustomCP
,
1845 OUT PCH CustomCPString
,
1846 IN ULONG MaxBytesInCustomCPString
,
1847 OUT PULONG BytesInCustomCPString OPTIONAL
,
1848 IN PWCH UnicodeString
,
1849 IN ULONG BytesInUnicodeString
);
1854 RtlInitCodePageTable(
1855 IN PUSHORT TableBase
,
1856 IN OUT PCPTABLEINFO CodePageTable
);
1860 #if (NTDDI_VERSION >= NTDDI_WINXP)
1867 IN PVOID HeapBase OPTIONAL
,
1868 IN SIZE_T ReserveSize OPTIONAL
,
1869 IN SIZE_T CommitSize OPTIONAL
,
1870 IN PVOID Lock OPTIONAL
,
1871 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
);
1877 IN PVOID HeapHandle
);
1882 RtlCaptureStackBackTrace(
1883 IN ULONG FramesToSkip
,
1884 IN ULONG FramesToCapture
,
1885 OUT PVOID
*BackTrace
,
1886 OUT PULONG BackTraceHash OPTIONAL
);
1892 IN OUT PULONG Seed
);
1897 RtlInitUnicodeStringEx(
1898 OUT PUNICODE_STRING DestinationString
,
1899 IN PCWSTR SourceString OPTIONAL
);
1904 RtlValidateUnicodeString(
1906 IN PCUNICODE_STRING String
);
1911 RtlDuplicateUnicodeString(
1913 IN PCUNICODE_STRING SourceString
,
1914 OUT PUNICODE_STRING DestinationString
);
1919 RtlGetCompressionWorkSpaceSize(
1920 IN USHORT CompressionFormatAndEngine
,
1921 OUT PULONG CompressBufferWorkSpaceSize
,
1922 OUT PULONG CompressFragmentWorkSpaceSize
);
1928 IN USHORT CompressionFormatAndEngine
,
1929 IN PUCHAR UncompressedBuffer
,
1930 IN ULONG UncompressedBufferSize
,
1931 OUT PUCHAR CompressedBuffer
,
1932 IN ULONG CompressedBufferSize
,
1933 IN ULONG UncompressedChunkSize
,
1934 OUT PULONG FinalCompressedSize
,
1935 IN PVOID WorkSpace
);
1940 RtlDecompressBuffer(
1941 IN USHORT CompressionFormat
,
1942 OUT PUCHAR UncompressedBuffer
,
1943 IN ULONG UncompressedBufferSize
,
1944 IN PUCHAR CompressedBuffer
,
1945 IN ULONG CompressedBufferSize
,
1946 OUT PULONG FinalUncompressedSize
);
1951 RtlDecompressFragment(
1952 IN USHORT CompressionFormat
,
1953 OUT PUCHAR UncompressedFragment
,
1954 IN ULONG UncompressedFragmentSize
,
1955 IN PUCHAR CompressedBuffer
,
1956 IN ULONG CompressedBufferSize
,
1957 IN ULONG FragmentOffset
,
1958 OUT PULONG FinalUncompressedSize
,
1959 IN PVOID WorkSpace
);
1965 IN USHORT CompressionFormat
,
1966 IN OUT PUCHAR
*CompressedBuffer
,
1967 IN PUCHAR EndOfCompressedBufferPlus1
,
1968 OUT PUCHAR
*ChunkBuffer
,
1969 OUT PULONG ChunkSize
);
1975 IN USHORT CompressionFormat
,
1976 IN OUT PUCHAR
*CompressedBuffer
,
1977 IN PUCHAR EndOfCompressedBufferPlus1
,
1978 OUT PUCHAR
*ChunkBuffer
,
1979 IN ULONG ChunkSize
);
1981 typedef struct _COMPRESSED_DATA_INFO
{
1982 USHORT CompressionFormatAndEngine
;
1983 UCHAR CompressionUnitShift
;
1987 USHORT NumberOfChunks
;
1988 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
1989 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
1994 RtlDecompressChunks(
1995 OUT PUCHAR UncompressedBuffer
,
1996 IN ULONG UncompressedBufferSize
,
1997 IN PUCHAR CompressedBuffer
,
1998 IN ULONG CompressedBufferSize
,
1999 IN PUCHAR CompressedTail
,
2000 IN ULONG CompressedTailSize
,
2001 IN PCOMPRESSED_DATA_INFO CompressedDataInfo
);
2007 IN PUCHAR UncompressedBuffer
,
2008 IN ULONG UncompressedBufferSize
,
2009 OUT PUCHAR CompressedBuffer
,
2010 IN ULONG CompressedBufferSize
,
2011 IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo
,
2012 IN ULONG CompressedDataInfoLength
,
2013 IN PVOID WorkSpace
);
2016 PSID_IDENTIFIER_AUTHORITY
2018 RtlIdentifierAuthoritySid(
2024 RtlSubAuthorityCountSid(
2030 RtlNtStatusToDosErrorNoTeb(
2031 IN NTSTATUS Status
);
2036 RtlCreateSystemVolumeInformationFolder(
2037 IN PCUNICODE_STRING VolumeRootPath
);
2041 #if defined(_M_AMD64)
2045 RtlFillMemoryUlong (
2046 OUT PVOID Destination
,
2050 PULONG Address
= (PULONG
)Destination
;
2051 if ((Length
/= 4) != 0) {
2052 if (((ULONG64
)Address
& 4) != 0) {
2054 if ((Length
-= 1) == 0) {
2059 __stosq((PULONG64
)(Address
), Pattern
| ((ULONG64
)Pattern
<< 32), Length
/ 2);
2060 if ((Length
& 1) != 0) Address
[Length
- 1] = Pattern
;
2065 #define RtlFillMemoryUlonglong(Destination, Length, Pattern) \
2066 __stosq((PULONG64)(Destination), Pattern, (Length) / 8)
2070 #if (NTDDI_VERSION >= NTDDI_WINXP)
2076 OUT PVOID Destination
,
2083 RtlFillMemoryUlonglong(
2084 OUT PVOID Destination
,
2086 IN ULONGLONG Pattern
);
2090 #endif // defined(_M_AMD64)
2092 #if (NTDDI_VERSION >= NTDDI_WS03)
2097 RtlInitAnsiStringEx(
2098 OUT PANSI_STRING DestinationString
,
2099 IN PCSZ SourceString OPTIONAL
);
2103 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
2108 RtlGetSaclSecurityDescriptor(
2109 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
2110 OUT PBOOLEAN SaclPresent
,
2112 OUT PBOOLEAN SaclDefaulted
);
2117 RtlSetGroupSecurityDescriptor(
2118 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
2119 IN PSID Group OPTIONAL
,
2120 IN BOOLEAN GroupDefaulted OPTIONAL
);
2125 RtlGetGroupSecurityDescriptor(
2126 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
2128 OUT PBOOLEAN GroupDefaulted
);
2133 RtlAbsoluteToSelfRelativeSD(
2134 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor
,
2135 OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor OPTIONAL
,
2136 IN OUT PULONG BufferLength
);
2141 RtlSelfRelativeToAbsoluteSD(
2142 IN PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor
,
2143 OUT PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor OPTIONAL
,
2144 IN OUT PULONG AbsoluteSecurityDescriptorSize
,
2145 OUT PACL Dacl OPTIONAL
,
2146 IN OUT PULONG DaclSize
,
2147 OUT PACL Sacl OPTIONAL
,
2148 IN OUT PULONG SaclSize
,
2149 OUT PSID Owner OPTIONAL
,
2150 IN OUT PULONG OwnerSize
,
2151 OUT PSID PrimaryGroup OPTIONAL
,
2152 IN OUT PULONG PrimaryGroupSize
);
2156 #if (NTDDI_VERSION >= NTDDI_VISTA)
2163 IN PCWSTR SourceString
,
2164 IN LONG SourceStringLength
,
2165 OUT PWSTR DestinationString
,
2166 IN OUT PLONG DestinationStringLength
);
2171 RtlIsNormalizedString(
2173 IN PCWSTR SourceString
,
2174 IN LONG SourceStringLength
,
2175 OUT PBOOLEAN Normalized
);
2182 IN PCWSTR SourceString
,
2183 IN LONG SourceStringLength
,
2184 OUT PWSTR DestinationString
,
2185 IN OUT PLONG DestinationStringLength
);
2192 IN PCWSTR SourceString
,
2193 IN LONG SourceStringLength
,
2194 OUT PWSTR DestinationString
,
2195 IN OUT PLONG DestinationStringLength
);
2200 RtlIdnToNameprepUnicode(
2202 IN PCWSTR SourceString
,
2203 IN LONG SourceStringLength
,
2204 OUT PWSTR DestinationString
,
2205 IN OUT PLONG DestinationStringLength
);
2210 RtlCreateServiceSid(
2211 IN PUNICODE_STRING ServiceName
,
2212 OUT PSID ServiceSid
,
2213 IN OUT PULONG ServiceSidLength
);
2218 RtlCompareAltitudes(
2219 IN PCUNICODE_STRING Altitude1
,
2220 IN PCUNICODE_STRING Altitude2
);
2224 #if (NTDDI_VERSION >= NTDDI_WIN7)
2230 OUT PCHAR UTF8StringDestination
,
2231 IN ULONG UTF8StringMaxByteCount
,
2232 OUT PULONG UTF8StringActualByteCount
,
2233 IN PCWCH UnicodeStringSource
,
2234 IN ULONG UnicodeStringByteCount
);
2240 OUT PWSTR UnicodeStringDestination
,
2241 IN ULONG UnicodeStringMaxByteCount
,
2242 OUT PULONG UnicodeStringActualByteCount
,
2243 IN PCCH UTF8StringSource
,
2244 IN ULONG UTF8StringByteCount
);
2250 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
2253 OUT ULONG
*NumChanges
);
2258 RtlCreateVirtualAccountSid(
2259 IN PCUNICODE_STRING Name
,
2260 IN ULONG BaseSubAuthority
,
2262 IN OUT PULONG SidLength
);
2266 #define HEAP_NO_SERIALIZE 0x00000001
2267 #define HEAP_GROWABLE 0x00000002
2268 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
2269 #define HEAP_ZERO_MEMORY 0x00000008
2270 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
2271 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
2272 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
2273 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
2275 #define HEAP_CREATE_ALIGN_16 0x00010000
2276 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
2277 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
2279 #define HEAP_SETTABLE_USER_VALUE 0x00000100
2280 #define HEAP_SETTABLE_USER_FLAG1 0x00000200
2281 #define HEAP_SETTABLE_USER_FLAG2 0x00000400
2282 #define HEAP_SETTABLE_USER_FLAG3 0x00000800
2283 #define HEAP_SETTABLE_USER_FLAGS 0x00000E00
2285 #define HEAP_CLASS_0 0x00000000
2286 #define HEAP_CLASS_1 0x00001000
2287 #define HEAP_CLASS_2 0x00002000
2288 #define HEAP_CLASS_3 0x00003000
2289 #define HEAP_CLASS_4 0x00004000
2290 #define HEAP_CLASS_5 0x00005000
2291 #define HEAP_CLASS_6 0x00006000
2292 #define HEAP_CLASS_7 0x00007000
2293 #define HEAP_CLASS_8 0x00008000
2294 #define HEAP_CLASS_MASK 0x0000F000
2296 #define HEAP_MAXIMUM_TAG 0x0FFF
2297 #define HEAP_GLOBAL_TAG 0x0800
2298 #define HEAP_PSEUDO_TAG_FLAG 0x8000
2299 #define HEAP_TAG_SHIFT 18
2300 #define HEAP_TAG_MASK (HEAP_MAXIMUM_TAG << HEAP_TAG_SHIFT)
2302 #define HEAP_CREATE_VALID_MASK (HEAP_NO_SERIALIZE | \
2304 HEAP_GENERATE_EXCEPTIONS | \
2305 HEAP_ZERO_MEMORY | \
2306 HEAP_REALLOC_IN_PLACE_ONLY | \
2307 HEAP_TAIL_CHECKING_ENABLED | \
2308 HEAP_FREE_CHECKING_ENABLED | \
2309 HEAP_DISABLE_COALESCE_ON_FREE | \
2311 HEAP_CREATE_ALIGN_16 | \
2312 HEAP_CREATE_ENABLE_TRACING | \
2313 HEAP_CREATE_ENABLE_EXECUTE)
2317 HEAP_MAKE_TAG_FLAGS(
2321 //__assume_bound(TagBase); // FIXME
2322 return ((ULONG
)((TagBase
) + ((Tag
) << HEAP_TAG_SHIFT
)));
2325 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
2326 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
2328 #define RtlUnicodeStringToOemSize(STRING) (NLS_MB_OEM_CODE_PAGE_TAG ? \
2329 RtlxUnicodeStringToOemSize(STRING) : \
2330 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
2333 #define RtlOemStringToUnicodeSize(STRING) ( \
2334 NLS_MB_OEM_CODE_PAGE_TAG ? \
2335 RtlxOemStringToUnicodeSize(STRING) : \
2336 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
2339 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
2340 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
2344 (NTAPI
*PRTL_ALLOCATE_STRING_ROUTINE
)(
2345 IN SIZE_T NumberOfBytes
);
2347 #if _WIN32_WINNT >= 0x0600
2350 (NTAPI
*PRTL_REALLOCATE_STRING_ROUTINE
)(
2351 IN SIZE_T NumberOfBytes
,
2357 (NTAPI
*PRTL_FREE_STRING_ROUTINE
)(
2360 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine
;
2361 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine
;
2363 #if _WIN32_WINNT >= 0x0600
2364 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine
;
2367 #define COMPRESSION_FORMAT_NONE (0x0000)
2368 #define COMPRESSION_FORMAT_DEFAULT (0x0001)
2369 #define COMPRESSION_FORMAT_LZNT1 (0x0002)
2370 #define COMPRESSION_ENGINE_STANDARD (0x0000)
2371 #define COMPRESSION_ENGINE_MAXIMUM (0x0100)
2372 #define COMPRESSION_ENGINE_HIBER (0x0200)
2374 #define RtlOffsetToPointer(B,O) ((PCHAR)( ((PCHAR)(B)) + ((ULONG_PTR)(O)) ))
2375 #define RtlPointerToOffset(B,P) ((ULONG)( ((PCHAR)(P)) - ((PCHAR)(B)) ))
2377 #define MAX_UNICODE_STACK_BUFFER_LENGTH 256
2379 #define RTL_SYSTEM_VOLUME_INFORMATION_FOLDER L"System Volume Information"
2381 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
2383 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
2384 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
2386 typedef ULONG LSA_OPERATIONAL_MODE
, *PLSA_OPERATIONAL_MODE
;
2388 typedef enum _SECURITY_LOGON_TYPE
{
2389 UndefinedLogonType
= 0,
2398 #if (_WIN32_WINNT >= 0x0501)
2402 #if (_WIN32_WINNT >= 0x0502)
2403 CachedRemoteInteractive
,
2406 } SECURITY_LOGON_TYPE
, *PSECURITY_LOGON_TYPE
;
2408 #ifndef _NTLSA_AUDIT_
2409 #define _NTLSA_AUDIT_
2411 #ifndef GUID_DEFINED
2412 #include <guiddef.h>
2415 #endif /* _NTLSA_AUDIT_ */
2419 LsaRegisterLogonProcess(
2420 IN PLSA_STRING LogonProcessName
,
2421 OUT PHANDLE LsaHandle
,
2422 OUT PLSA_OPERATIONAL_MODE SecurityMode
);
2427 IN HANDLE LsaHandle
,
2428 IN PLSA_STRING OriginName
,
2429 IN SECURITY_LOGON_TYPE LogonType
,
2430 IN ULONG AuthenticationPackage
,
2431 IN PVOID AuthenticationInformation
,
2432 IN ULONG AuthenticationInformationLength
,
2433 IN PTOKEN_GROUPS LocalGroups OPTIONAL
,
2434 IN PTOKEN_SOURCE SourceContext
,
2435 OUT PVOID
*ProfileBuffer
,
2436 OUT PULONG ProfileBufferLength
,
2439 OUT PQUOTA_LIMITS Quotas
,
2440 OUT PNTSTATUS SubStatus
);
2444 LsaFreeReturnBuffer(
2451 #define MSV1_0_PACKAGE_NAME "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
2452 #define MSV1_0_PACKAGE_NAMEW L"MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
2453 #define MSV1_0_PACKAGE_NAMEW_LENGTH sizeof(MSV1_0_PACKAGE_NAMEW) - sizeof(WCHAR)
2455 #define MSV1_0_SUBAUTHENTICATION_KEY "SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1_0"
2456 #define MSV1_0_SUBAUTHENTICATION_VALUE "Auth"
2458 #define MSV1_0_CHALLENGE_LENGTH 8
2459 #define MSV1_0_USER_SESSION_KEY_LENGTH 16
2460 #define MSV1_0_LANMAN_SESSION_KEY_LENGTH 8
2462 #define MSV1_0_CLEARTEXT_PASSWORD_ALLOWED 0x02
2463 #define MSV1_0_UPDATE_LOGON_STATISTICS 0x04
2464 #define MSV1_0_RETURN_USER_PARAMETERS 0x08
2465 #define MSV1_0_DONT_TRY_GUEST_ACCOUNT 0x10
2466 #define MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT 0x20
2467 #define MSV1_0_RETURN_PASSWORD_EXPIRY 0x40
2468 #define MSV1_0_USE_CLIENT_CHALLENGE 0x80
2469 #define MSV1_0_TRY_GUEST_ACCOUNT_ONLY 0x100
2470 #define MSV1_0_RETURN_PROFILE_PATH 0x200
2471 #define MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY 0x400
2472 #define MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT 0x800
2474 #define MSV1_0_DISABLE_PERSONAL_FALLBACK 0x00001000
2475 #define MSV1_0_ALLOW_FORCE_GUEST 0x00002000
2477 #if (_WIN32_WINNT >= 0x0502)
2478 #define MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED 0x00004000
2479 #define MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY 0x00008000
2482 #define MSV1_0_SUBAUTHENTICATION_DLL_EX 0x00100000
2483 #define MSV1_0_ALLOW_MSVCHAPV2 0x00010000
2485 #if (_WIN32_WINNT >= 0x0600)
2486 #define MSV1_0_S4U2SELF 0x00020000
2487 #define MSV1_0_CHECK_LOGONHOURS_FOR_S4U 0x00040000
2490 #define MSV1_0_SUBAUTHENTICATION_DLL 0xFF000000
2491 #define MSV1_0_SUBAUTHENTICATION_DLL_SHIFT 24
2492 #define MSV1_0_MNS_LOGON 0x01000000
2494 #define MSV1_0_SUBAUTHENTICATION_DLL_RAS 2
2495 #define MSV1_0_SUBAUTHENTICATION_DLL_IIS 132
2497 #define LOGON_GUEST 0x01
2498 #define LOGON_NOENCRYPTION 0x02
2499 #define LOGON_CACHED_ACCOUNT 0x04
2500 #define LOGON_USED_LM_PASSWORD 0x08
2501 #define LOGON_EXTRA_SIDS 0x20
2502 #define LOGON_SUBAUTH_SESSION_KEY 0x40
2503 #define LOGON_SERVER_TRUST_ACCOUNT 0x80
2504 #define LOGON_NTLMV2_ENABLED 0x100
2505 #define LOGON_RESOURCE_GROUPS 0x200
2506 #define LOGON_PROFILE_PATH_RETURNED 0x400
2507 #define LOGON_NT_V2 0x800
2508 #define LOGON_LM_V2 0x1000
2509 #define LOGON_NTLM_V2 0x2000
2511 #if (_WIN32_WINNT >= 0x0600)
2513 #define LOGON_OPTIMIZED 0x4000
2514 #define LOGON_WINLOGON 0x8000
2515 #define LOGON_PKINIT 0x10000
2516 #define LOGON_NO_OPTIMIZED 0x20000
2520 #define MSV1_0_SUBAUTHENTICATION_FLAGS 0xFF000000
2522 #define LOGON_GRACE_LOGON 0x01000000
2524 #define MSV1_0_OWF_PASSWORD_LENGTH 16
2525 #define MSV1_0_CRED_LM_PRESENT 0x1
2526 #define MSV1_0_CRED_NT_PRESENT 0x2
2527 #define MSV1_0_CRED_VERSION 0
2529 #define MSV1_0_NTLM3_RESPONSE_LENGTH 16
2530 #define MSV1_0_NTLM3_OWF_LENGTH 16
2532 #if (_WIN32_WINNT == 0x0500)
2533 #define MSV1_0_MAX_NTLM3_LIFE 1800
2535 #define MSV1_0_MAX_NTLM3_LIFE 129600
2537 #define MSV1_0_MAX_AVL_SIZE 64000
2539 #if (_WIN32_WINNT >= 0x0501)
2541 #define MSV1_0_AV_FLAG_FORCE_GUEST 0x00000001
2543 #if (_WIN32_WINNT >= 0x0600)
2544 #define MSV1_0_AV_FLAG_MIC_HANDSHAKE_MESSAGES 0x00000002
2549 #define MSV1_0_NTLM3_INPUT_LENGTH (sizeof(MSV1_0_NTLM3_RESPONSE) - MSV1_0_NTLM3_RESPONSE_LENGTH)
2551 #if(_WIN32_WINNT >= 0x0502)
2552 #define MSV1_0_NTLM3_MIN_NT_RESPONSE_LENGTH RTL_SIZEOF_THROUGH_FIELD(MSV1_0_NTLM3_RESPONSE, AvPairsOff)
2555 #define USE_PRIMARY_PASSWORD 0x01
2556 #define RETURN_PRIMARY_USERNAME 0x02
2557 #define RETURN_PRIMARY_LOGON_DOMAINNAME 0x04
2558 #define RETURN_NON_NT_USER_SESSION_KEY 0x08
2559 #define GENERATE_CLIENT_CHALLENGE 0x10
2560 #define GCR_NTLM3_PARMS 0x20
2561 #define GCR_TARGET_INFO 0x40
2562 #define RETURN_RESERVED_PARAMETER 0x80
2563 #define GCR_ALLOW_NTLM 0x100
2564 #define GCR_USE_OEM_SET 0x200
2565 #define GCR_MACHINE_CREDENTIAL 0x400
2566 #define GCR_USE_OWF_PASSWORD 0x800
2567 #define GCR_ALLOW_LM 0x1000
2568 #define GCR_ALLOW_NO_TARGET 0x2000
2570 typedef enum _MSV1_0_LOGON_SUBMIT_TYPE
{
2571 MsV1_0InteractiveLogon
= 2,
2575 MsV1_0WorkstationUnlockLogon
= 7,
2576 MsV1_0S4ULogon
= 12,
2577 MsV1_0VirtualLogon
= 82
2578 } MSV1_0_LOGON_SUBMIT_TYPE
, *PMSV1_0_LOGON_SUBMIT_TYPE
;
2580 typedef enum _MSV1_0_PROFILE_BUFFER_TYPE
{
2581 MsV1_0InteractiveProfile
= 2,
2582 MsV1_0Lm20LogonProfile
,
2583 MsV1_0SmartCardProfile
2584 } MSV1_0_PROFILE_BUFFER_TYPE
, *PMSV1_0_PROFILE_BUFFER_TYPE
;
2586 typedef struct _MSV1_0_INTERACTIVE_LOGON
{
2587 MSV1_0_LOGON_SUBMIT_TYPE MessageType
;
2588 UNICODE_STRING LogonDomainName
;
2589 UNICODE_STRING UserName
;
2590 UNICODE_STRING Password
;
2591 } MSV1_0_INTERACTIVE_LOGON
, *PMSV1_0_INTERACTIVE_LOGON
;
2593 typedef struct _MSV1_0_INTERACTIVE_PROFILE
{
2594 MSV1_0_PROFILE_BUFFER_TYPE MessageType
;
2596 USHORT BadPasswordCount
;
2597 LARGE_INTEGER LogonTime
;
2598 LARGE_INTEGER LogoffTime
;
2599 LARGE_INTEGER KickOffTime
;
2600 LARGE_INTEGER PasswordLastSet
;
2601 LARGE_INTEGER PasswordCanChange
;
2602 LARGE_INTEGER PasswordMustChange
;
2603 UNICODE_STRING LogonScript
;
2604 UNICODE_STRING HomeDirectory
;
2605 UNICODE_STRING FullName
;
2606 UNICODE_STRING ProfilePath
;
2607 UNICODE_STRING HomeDirectoryDrive
;
2608 UNICODE_STRING LogonServer
;
2610 } MSV1_0_INTERACTIVE_PROFILE
, *PMSV1_0_INTERACTIVE_PROFILE
;
2612 typedef struct _MSV1_0_LM20_LOGON
{
2613 MSV1_0_LOGON_SUBMIT_TYPE MessageType
;
2614 UNICODE_STRING LogonDomainName
;
2615 UNICODE_STRING UserName
;
2616 UNICODE_STRING Workstation
;
2617 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
2618 STRING CaseSensitiveChallengeResponse
;
2619 STRING CaseInsensitiveChallengeResponse
;
2620 ULONG ParameterControl
;
2621 } MSV1_0_LM20_LOGON
, * PMSV1_0_LM20_LOGON
;
2623 typedef struct _MSV1_0_SUBAUTH_LOGON
{
2624 MSV1_0_LOGON_SUBMIT_TYPE MessageType
;
2625 UNICODE_STRING LogonDomainName
;
2626 UNICODE_STRING UserName
;
2627 UNICODE_STRING Workstation
;
2628 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
2629 STRING AuthenticationInfo1
;
2630 STRING AuthenticationInfo2
;
2631 ULONG ParameterControl
;
2632 ULONG SubAuthPackageId
;
2633 } MSV1_0_SUBAUTH_LOGON
, * PMSV1_0_SUBAUTH_LOGON
;
2635 #if (_WIN32_WINNT >= 0x0600)
2637 #define MSV1_0_S4U_LOGON_FLAG_CHECK_LOGONHOURS 0x2
2639 typedef struct _MSV1_0_S4U_LOGON
{
2640 MSV1_0_LOGON_SUBMIT_TYPE MessageType
;
2642 UNICODE_STRING UserPrincipalName
;
2643 UNICODE_STRING DomainName
;
2644 } MSV1_0_S4U_LOGON
, *PMSV1_0_S4U_LOGON
;
2648 typedef struct _MSV1_0_LM20_LOGON_PROFILE
{
2649 MSV1_0_PROFILE_BUFFER_TYPE MessageType
;
2650 LARGE_INTEGER KickOffTime
;
2651 LARGE_INTEGER LogoffTime
;
2653 UCHAR UserSessionKey
[MSV1_0_USER_SESSION_KEY_LENGTH
];
2654 UNICODE_STRING LogonDomainName
;
2655 UCHAR LanmanSessionKey
[MSV1_0_LANMAN_SESSION_KEY_LENGTH
];
2656 UNICODE_STRING LogonServer
;
2657 UNICODE_STRING UserParameters
;
2658 } MSV1_0_LM20_LOGON_PROFILE
, * PMSV1_0_LM20_LOGON_PROFILE
;
2660 typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL
{
2663 UCHAR LmPassword
[MSV1_0_OWF_PASSWORD_LENGTH
];
2664 UCHAR NtPassword
[MSV1_0_OWF_PASSWORD_LENGTH
];
2665 } MSV1_0_SUPPLEMENTAL_CREDENTIAL
, *PMSV1_0_SUPPLEMENTAL_CREDENTIAL
;
2667 typedef struct _MSV1_0_NTLM3_RESPONSE
{
2668 UCHAR Response
[MSV1_0_NTLM3_RESPONSE_LENGTH
];
2673 ULONGLONG TimeStamp
;
2674 UCHAR ChallengeFromClient
[MSV1_0_CHALLENGE_LENGTH
];
2677 } MSV1_0_NTLM3_RESPONSE
, *PMSV1_0_NTLM3_RESPONSE
;
2679 typedef enum _MSV1_0_AVID
{
2681 MsvAvNbComputerName
,
2683 MsvAvDnsComputerName
,
2685 #if (_WIN32_WINNT >= 0x0501)
2688 #if (_WIN32_WINNT >= 0x0600)
2692 MsvAvChannelBindings
,
2697 typedef struct _MSV1_0_AV_PAIR
{
2700 } MSV1_0_AV_PAIR
, *PMSV1_0_AV_PAIR
;
2702 typedef enum _MSV1_0_PROTOCOL_MESSAGE_TYPE
{
2703 MsV1_0Lm20ChallengeRequest
= 0,
2704 MsV1_0Lm20GetChallengeResponse
,
2705 MsV1_0EnumerateUsers
,
2708 MsV1_0ChangePassword
,
2709 MsV1_0ChangeCachedPassword
,
2710 MsV1_0GenericPassthrough
,
2713 MsV1_0DeriveCredential
,
2715 #if (_WIN32_WINNT >= 0x0501)
2716 MsV1_0SetProcessOption
,
2718 #if (_WIN32_WINNT >= 0x0600)
2719 MsV1_0ConfigLocalAliases
,
2720 MsV1_0ClearCachedCredentials
,
2722 } MSV1_0_PROTOCOL_MESSAGE_TYPE
, *PMSV1_0_PROTOCOL_MESSAGE_TYPE
;
2724 typedef struct _MSV1_0_LM20_CHALLENGE_REQUEST
{
2725 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2726 } MSV1_0_LM20_CHALLENGE_REQUEST
, *PMSV1_0_LM20_CHALLENGE_REQUEST
;
2728 typedef struct _MSV1_0_LM20_CHALLENGE_RESPONSE
{
2729 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2730 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
2731 } MSV1_0_LM20_CHALLENGE_RESPONSE
, *PMSV1_0_LM20_CHALLENGE_RESPONSE
;
2733 typedef struct _MSV1_0_GETCHALLENRESP_REQUEST_V1
{
2734 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2735 ULONG ParameterControl
;
2737 UNICODE_STRING Password
;
2738 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
2739 } MSV1_0_GETCHALLENRESP_REQUEST_V1
, *PMSV1_0_GETCHALLENRESP_REQUEST_V1
;
2741 typedef struct _MSV1_0_GETCHALLENRESP_REQUEST
{
2742 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2743 ULONG ParameterControl
;
2745 UNICODE_STRING Password
;
2746 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
2747 UNICODE_STRING UserName
;
2748 UNICODE_STRING LogonDomainName
;
2749 UNICODE_STRING ServerName
;
2750 } MSV1_0_GETCHALLENRESP_REQUEST
, *PMSV1_0_GETCHALLENRESP_REQUEST
;
2752 typedef struct _MSV1_0_GETCHALLENRESP_RESPONSE
{
2753 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2754 STRING CaseSensitiveChallengeResponse
;
2755 STRING CaseInsensitiveChallengeResponse
;
2756 UNICODE_STRING UserName
;
2757 UNICODE_STRING LogonDomainName
;
2758 UCHAR UserSessionKey
[MSV1_0_USER_SESSION_KEY_LENGTH
];
2759 UCHAR LanmanSessionKey
[MSV1_0_LANMAN_SESSION_KEY_LENGTH
];
2760 } MSV1_0_GETCHALLENRESP_RESPONSE
, *PMSV1_0_GETCHALLENRESP_RESPONSE
;
2762 typedef struct _MSV1_0_ENUMUSERS_REQUEST
{
2763 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2764 } MSV1_0_ENUMUSERS_REQUEST
, *PMSV1_0_ENUMUSERS_REQUEST
;
2766 typedef struct _MSV1_0_ENUMUSERS_RESPONSE
{
2767 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2768 ULONG NumberOfLoggedOnUsers
;
2771 } MSV1_0_ENUMUSERS_RESPONSE
, *PMSV1_0_ENUMUSERS_RESPONSE
;
2773 typedef struct _MSV1_0_GETUSERINFO_REQUEST
{
2774 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2776 } MSV1_0_GETUSERINFO_REQUEST
, *PMSV1_0_GETUSERINFO_REQUEST
;
2778 typedef struct _MSV1_0_GETUSERINFO_RESPONSE
{
2779 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2781 UNICODE_STRING UserName
;
2782 UNICODE_STRING LogonDomainName
;
2783 UNICODE_STRING LogonServer
;
2784 SECURITY_LOGON_TYPE LogonType
;
2785 } MSV1_0_GETUSERINFO_RESPONSE
, *PMSV1_0_GETUSERINFO_RESPONSE
;
2787 #define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007
2788 #define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008
2789 #define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009
2791 /* also in winnt.h */
2792 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
2793 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
2794 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
2795 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
2796 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
2797 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
2798 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
2799 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
2800 #define FILE_NOTIFY_CHANGE_EA 0x00000080
2801 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
2802 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
2803 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
2804 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
2805 #define FILE_NOTIFY_VALID_MASK 0x00000fff
2807 #define FILE_ACTION_ADDED 0x00000001
2808 #define FILE_ACTION_REMOVED 0x00000002
2809 #define FILE_ACTION_MODIFIED 0x00000003
2810 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
2811 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
2812 #define FILE_ACTION_ADDED_STREAM 0x00000006
2813 #define FILE_ACTION_REMOVED_STREAM 0x00000007
2814 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
2815 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
2816 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
2817 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
2820 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
2821 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
2823 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000
2824 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002
2826 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000
2827 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002
2828 #define FILE_PIPE_TYPE_VALID_MASK 0x00000003
2830 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
2831 #define FILE_PIPE_MESSAGE_MODE 0x00000001
2833 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
2834 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
2836 #define FILE_PIPE_INBOUND 0x00000000
2837 #define FILE_PIPE_OUTBOUND 0x00000001
2838 #define FILE_PIPE_FULL_DUPLEX 0x00000002
2840 #define FILE_PIPE_DISCONNECTED_STATE 0x00000001
2841 #define FILE_PIPE_LISTENING_STATE 0x00000002
2842 #define FILE_PIPE_CONNECTED_STATE 0x00000003
2843 #define FILE_PIPE_CLOSING_STATE 0x00000004
2845 #define FILE_PIPE_CLIENT_END 0x00000000
2846 #define FILE_PIPE_SERVER_END 0x00000001
2848 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
2849 #define FILE_CASE_PRESERVED_NAMES 0x00000002
2850 #define FILE_UNICODE_ON_DISK 0x00000004
2851 #define FILE_PERSISTENT_ACLS 0x00000008
2852 #define FILE_FILE_COMPRESSION 0x00000010
2853 #define FILE_VOLUME_QUOTAS 0x00000020
2854 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
2855 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
2856 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
2857 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
2858 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
2859 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
2860 #define FILE_NAMED_STREAMS 0x00040000
2861 #define FILE_READ_ONLY_VOLUME 0x00080000
2862 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
2863 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
2864 #define FILE_SUPPORTS_HARD_LINKS 0x00400000
2865 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
2866 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
2867 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000
2869 #define FILE_NEED_EA 0x00000080
2871 #define FILE_EA_TYPE_BINARY 0xfffe
2872 #define FILE_EA_TYPE_ASCII 0xfffd
2873 #define FILE_EA_TYPE_BITMAP 0xfffb
2874 #define FILE_EA_TYPE_METAFILE 0xfffa
2875 #define FILE_EA_TYPE_ICON 0xfff9
2876 #define FILE_EA_TYPE_EA 0xffee
2877 #define FILE_EA_TYPE_MVMT 0xffdf
2878 #define FILE_EA_TYPE_MVST 0xffde
2879 #define FILE_EA_TYPE_ASN1 0xffdd
2880 #define FILE_EA_TYPE_FAMILY_IDS 0xff01
2882 typedef struct _FILE_NOTIFY_INFORMATION
{
2883 ULONG NextEntryOffset
;
2885 ULONG FileNameLength
;
2887 } FILE_NOTIFY_INFORMATION
, *PFILE_NOTIFY_INFORMATION
;
2889 typedef struct _FILE_DIRECTORY_INFORMATION
{
2890 ULONG NextEntryOffset
;
2892 LARGE_INTEGER CreationTime
;
2893 LARGE_INTEGER LastAccessTime
;
2894 LARGE_INTEGER LastWriteTime
;
2895 LARGE_INTEGER ChangeTime
;
2896 LARGE_INTEGER EndOfFile
;
2897 LARGE_INTEGER AllocationSize
;
2898 ULONG FileAttributes
;
2899 ULONG FileNameLength
;
2901 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
2903 typedef struct _FILE_FULL_DIR_INFORMATION
{
2904 ULONG NextEntryOffset
;
2906 LARGE_INTEGER CreationTime
;
2907 LARGE_INTEGER LastAccessTime
;
2908 LARGE_INTEGER LastWriteTime
;
2909 LARGE_INTEGER ChangeTime
;
2910 LARGE_INTEGER EndOfFile
;
2911 LARGE_INTEGER AllocationSize
;
2912 ULONG FileAttributes
;
2913 ULONG FileNameLength
;
2916 } FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
2918 typedef struct _FILE_ID_FULL_DIR_INFORMATION
{
2919 ULONG NextEntryOffset
;
2921 LARGE_INTEGER CreationTime
;
2922 LARGE_INTEGER LastAccessTime
;
2923 LARGE_INTEGER LastWriteTime
;
2924 LARGE_INTEGER ChangeTime
;
2925 LARGE_INTEGER EndOfFile
;
2926 LARGE_INTEGER AllocationSize
;
2927 ULONG FileAttributes
;
2928 ULONG FileNameLength
;
2930 LARGE_INTEGER FileId
;
2932 } FILE_ID_FULL_DIR_INFORMATION
, *PFILE_ID_FULL_DIR_INFORMATION
;
2934 typedef struct _FILE_BOTH_DIR_INFORMATION
{
2935 ULONG NextEntryOffset
;
2937 LARGE_INTEGER CreationTime
;
2938 LARGE_INTEGER LastAccessTime
;
2939 LARGE_INTEGER LastWriteTime
;
2940 LARGE_INTEGER ChangeTime
;
2941 LARGE_INTEGER EndOfFile
;
2942 LARGE_INTEGER AllocationSize
;
2943 ULONG FileAttributes
;
2944 ULONG FileNameLength
;
2946 CCHAR ShortNameLength
;
2947 WCHAR ShortName
[12];
2949 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
2951 typedef struct _FILE_ID_BOTH_DIR_INFORMATION
{
2952 ULONG NextEntryOffset
;
2954 LARGE_INTEGER CreationTime
;
2955 LARGE_INTEGER LastAccessTime
;
2956 LARGE_INTEGER LastWriteTime
;
2957 LARGE_INTEGER ChangeTime
;
2958 LARGE_INTEGER EndOfFile
;
2959 LARGE_INTEGER AllocationSize
;
2960 ULONG FileAttributes
;
2961 ULONG FileNameLength
;
2963 CCHAR ShortNameLength
;
2964 WCHAR ShortName
[12];
2965 LARGE_INTEGER FileId
;
2967 } FILE_ID_BOTH_DIR_INFORMATION
, *PFILE_ID_BOTH_DIR_INFORMATION
;
2969 typedef struct _FILE_NAMES_INFORMATION
{
2970 ULONG NextEntryOffset
;
2972 ULONG FileNameLength
;
2974 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
2976 typedef struct _FILE_ID_GLOBAL_TX_DIR_INFORMATION
{
2977 ULONG NextEntryOffset
;
2979 LARGE_INTEGER CreationTime
;
2980 LARGE_INTEGER LastAccessTime
;
2981 LARGE_INTEGER LastWriteTime
;
2982 LARGE_INTEGER ChangeTime
;
2983 LARGE_INTEGER EndOfFile
;
2984 LARGE_INTEGER AllocationSize
;
2985 ULONG FileAttributes
;
2986 ULONG FileNameLength
;
2987 LARGE_INTEGER FileId
;
2988 GUID LockingTransactionId
;
2991 } FILE_ID_GLOBAL_TX_DIR_INFORMATION
, *PFILE_ID_GLOBAL_TX_DIR_INFORMATION
;
2993 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_WRITELOCKED 0x00000001
2994 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_TO_TX 0x00000002
2995 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_OUTSIDE_TX 0x00000004
2997 typedef struct _FILE_OBJECTID_INFORMATION
{
2998 LONGLONG FileReference
;
3000 _ANONYMOUS_UNION
union {
3001 __GNU_EXTENSION
struct {
3002 UCHAR BirthVolumeId
[16];
3003 UCHAR BirthObjectId
[16];
3006 UCHAR ExtendedInfo
[48];
3008 } FILE_OBJECTID_INFORMATION
, *PFILE_OBJECTID_INFORMATION
;
3010 #define ANSI_DOS_STAR ('<')
3011 #define ANSI_DOS_QM ('>')
3012 #define ANSI_DOS_DOT ('"')
3014 #define DOS_STAR (L'<')
3015 #define DOS_QM (L'>')
3016 #define DOS_DOT (L'"')
3018 typedef struct _FILE_INTERNAL_INFORMATION
{
3019 LARGE_INTEGER IndexNumber
;
3020 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
3022 typedef struct _FILE_EA_INFORMATION
{
3024 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
3026 typedef struct _FILE_ACCESS_INFORMATION
{
3027 ACCESS_MASK AccessFlags
;
3028 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
3030 typedef struct _FILE_MODE_INFORMATION
{
3032 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
3034 typedef struct _FILE_ALL_INFORMATION
{
3035 FILE_BASIC_INFORMATION BasicInformation
;
3036 FILE_STANDARD_INFORMATION StandardInformation
;
3037 FILE_INTERNAL_INFORMATION InternalInformation
;
3038 FILE_EA_INFORMATION EaInformation
;
3039 FILE_ACCESS_INFORMATION AccessInformation
;
3040 FILE_POSITION_INFORMATION PositionInformation
;
3041 FILE_MODE_INFORMATION ModeInformation
;
3042 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
3043 FILE_NAME_INFORMATION NameInformation
;
3044 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
3046 typedef struct _FILE_ALLOCATION_INFORMATION
{
3047 LARGE_INTEGER AllocationSize
;
3048 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
3050 typedef struct _FILE_COMPRESSION_INFORMATION
{
3051 LARGE_INTEGER CompressedFileSize
;
3052 USHORT CompressionFormat
;
3053 UCHAR CompressionUnitShift
;
3057 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
3059 typedef struct _FILE_LINK_INFORMATION
{
3060 BOOLEAN ReplaceIfExists
;
3061 HANDLE RootDirectory
;
3062 ULONG FileNameLength
;
3064 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
3066 typedef struct _FILE_MOVE_CLUSTER_INFORMATION
{
3068 HANDLE RootDirectory
;
3069 ULONG FileNameLength
;
3071 } FILE_MOVE_CLUSTER_INFORMATION
, *PFILE_MOVE_CLUSTER_INFORMATION
;
3073 typedef struct _FILE_RENAME_INFORMATION
{
3074 BOOLEAN ReplaceIfExists
;
3075 HANDLE RootDirectory
;
3076 ULONG FileNameLength
;
3078 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
3080 typedef struct _FILE_STREAM_INFORMATION
{
3081 ULONG NextEntryOffset
;
3082 ULONG StreamNameLength
;
3083 LARGE_INTEGER StreamSize
;
3084 LARGE_INTEGER StreamAllocationSize
;
3085 WCHAR StreamName
[1];
3086 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
3088 typedef struct _FILE_TRACKING_INFORMATION
{
3089 HANDLE DestinationFile
;
3090 ULONG ObjectInformationLength
;
3091 CHAR ObjectInformation
[1];
3092 } FILE_TRACKING_INFORMATION
, *PFILE_TRACKING_INFORMATION
;
3094 typedef struct _FILE_COMPLETION_INFORMATION
{
3097 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
3099 typedef struct _FILE_PIPE_INFORMATION
{
3101 ULONG CompletionMode
;
3102 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
3104 typedef struct _FILE_PIPE_LOCAL_INFORMATION
{
3105 ULONG NamedPipeType
;
3106 ULONG NamedPipeConfiguration
;
3107 ULONG MaximumInstances
;
3108 ULONG CurrentInstances
;
3110 ULONG ReadDataAvailable
;
3111 ULONG OutboundQuota
;
3112 ULONG WriteQuotaAvailable
;
3113 ULONG NamedPipeState
;
3115 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
3117 typedef struct _FILE_PIPE_REMOTE_INFORMATION
{
3118 LARGE_INTEGER CollectDataTime
;
3119 ULONG MaximumCollectionCount
;
3120 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
3122 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
{
3123 ULONG MaximumMessageSize
;
3124 ULONG MailslotQuota
;
3125 ULONG NextMessageSize
;
3126 ULONG MessagesAvailable
;
3127 LARGE_INTEGER ReadTimeout
;
3128 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
3130 typedef struct _FILE_MAILSLOT_SET_INFORMATION
{
3131 PLARGE_INTEGER ReadTimeout
;
3132 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
3134 typedef struct _FILE_REPARSE_POINT_INFORMATION
{
3135 LONGLONG FileReference
;
3137 } FILE_REPARSE_POINT_INFORMATION
, *PFILE_REPARSE_POINT_INFORMATION
;
3139 typedef struct _FILE_LINK_ENTRY_INFORMATION
{
3140 ULONG NextEntryOffset
;
3141 LONGLONG ParentFileId
;
3142 ULONG FileNameLength
;
3144 } FILE_LINK_ENTRY_INFORMATION
, *PFILE_LINK_ENTRY_INFORMATION
;
3146 typedef struct _FILE_LINKS_INFORMATION
{
3148 ULONG EntriesReturned
;
3149 FILE_LINK_ENTRY_INFORMATION Entry
;
3150 } FILE_LINKS_INFORMATION
, *PFILE_LINKS_INFORMATION
;
3152 typedef struct _FILE_NETWORK_PHYSICAL_NAME_INFORMATION
{
3153 ULONG FileNameLength
;
3155 } FILE_NETWORK_PHYSICAL_NAME_INFORMATION
, *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION
;
3157 typedef struct _FILE_STANDARD_LINK_INFORMATION
{
3158 ULONG NumberOfAccessibleLinks
;
3159 ULONG TotalNumberOfLinks
;
3160 BOOLEAN DeletePending
;
3162 } FILE_STANDARD_LINK_INFORMATION
, *PFILE_STANDARD_LINK_INFORMATION
;
3164 typedef struct _FILE_GET_EA_INFORMATION
{
3165 ULONG NextEntryOffset
;
3168 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
3170 #define REMOTE_PROTOCOL_FLAG_LOOPBACK 0x00000001
3171 #define REMOTE_PROTOCOL_FLAG_OFFLINE 0x00000002
3173 typedef struct _FILE_REMOTE_PROTOCOL_INFORMATION
{
3174 USHORT StructureVersion
;
3175 USHORT StructureSize
;
3177 USHORT ProtocolMajorVersion
;
3178 USHORT ProtocolMinorVersion
;
3179 USHORT ProtocolRevision
;
3187 } ProtocolSpecificReserved
;
3188 } FILE_REMOTE_PROTOCOL_INFORMATION
, *PFILE_REMOTE_PROTOCOL_INFORMATION
;
3190 typedef struct _FILE_GET_QUOTA_INFORMATION
{
3191 ULONG NextEntryOffset
;
3194 } FILE_GET_QUOTA_INFORMATION
, *PFILE_GET_QUOTA_INFORMATION
;
3196 typedef struct _FILE_QUOTA_INFORMATION
{
3197 ULONG NextEntryOffset
;
3199 LARGE_INTEGER ChangeTime
;
3200 LARGE_INTEGER QuotaUsed
;
3201 LARGE_INTEGER QuotaThreshold
;
3202 LARGE_INTEGER QuotaLimit
;
3204 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
3206 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
3207 ULONG FileSystemAttributes
;
3208 ULONG MaximumComponentNameLength
;
3209 ULONG FileSystemNameLength
;
3210 WCHAR FileSystemName
[1];
3211 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
3213 typedef struct _FILE_FS_DRIVER_PATH_INFORMATION
{
3214 BOOLEAN DriverInPath
;
3215 ULONG DriverNameLength
;
3216 WCHAR DriverName
[1];
3217 } FILE_FS_DRIVER_PATH_INFORMATION
, *PFILE_FS_DRIVER_PATH_INFORMATION
;
3219 typedef struct _FILE_FS_VOLUME_FLAGS_INFORMATION
{
3221 } FILE_FS_VOLUME_FLAGS_INFORMATION
, *PFILE_FS_VOLUME_FLAGS_INFORMATION
;
3223 #define FILE_VC_QUOTA_NONE 0x00000000
3224 #define FILE_VC_QUOTA_TRACK 0x00000001
3225 #define FILE_VC_QUOTA_ENFORCE 0x00000002
3226 #define FILE_VC_QUOTA_MASK 0x00000003
3227 #define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008
3228 #define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010
3229 #define FILE_VC_LOG_QUOTA_LIMIT 0x00000020
3230 #define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040
3231 #define FILE_VC_LOG_VOLUME_LIMIT 0x00000080
3232 #define FILE_VC_QUOTAS_INCOMPLETE 0x00000100
3233 #define FILE_VC_QUOTAS_REBUILDING 0x00000200
3234 #define FILE_VC_VALID_MASK 0x000003ff
3236 typedef struct _FILE_FS_CONTROL_INFORMATION
{
3237 LARGE_INTEGER FreeSpaceStartFiltering
;
3238 LARGE_INTEGER FreeSpaceThreshold
;
3239 LARGE_INTEGER FreeSpaceStopFiltering
;
3240 LARGE_INTEGER DefaultQuotaThreshold
;
3241 LARGE_INTEGER DefaultQuotaLimit
;
3242 ULONG FileSystemControlFlags
;
3243 } FILE_FS_CONTROL_INFORMATION
, *PFILE_FS_CONTROL_INFORMATION
;
3245 #ifndef _FILESYSTEMFSCTL_
3246 #define _FILESYSTEMFSCTL_
3248 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
3249 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
3250 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
3251 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
3252 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
3253 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
3254 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
3255 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
3256 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
3257 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
3258 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
3259 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
3260 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
3261 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
3262 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
3263 #define FSCTL_SET_BOOTLOADER_ACCESSED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
3265 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
3266 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
3267 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
3268 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
3269 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
3271 #if (_WIN32_WINNT >= 0x0400)
3273 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
3274 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
3275 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS)
3276 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
3277 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
3278 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
3279 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
3283 #if (_WIN32_WINNT >= 0x0500)
3285 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
3286 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA)
3287 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
3288 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA)
3289 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA)
3290 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
3291 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA)
3292 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_READ_DATA)
3293 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA)
3294 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_READ_DATA)
3295 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA)
3296 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
3297 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA)
3298 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
3299 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
3300 #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
3301 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
3302 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
3303 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_ANY_ACCESS)
3304 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_ANY_ACCESS)
3305 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_READ_DATA)
3306 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_READ_DATA)
3307 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_READ_DATA)
3308 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
3309 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
3310 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
3311 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
3312 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
3313 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
3314 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
3315 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
3316 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3320 #if (_WIN32_WINNT >= 0x0600)
3322 #define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA)
3323 #define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA)
3324 #define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS)
3325 #define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS)
3326 #define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3327 #define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA)
3328 #define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA)
3329 #define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA)
3330 #define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA)
3331 #define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA)
3332 #define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA)
3333 #define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA)
3334 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA)
3335 #define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA)
3336 #define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA)
3337 #define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA)
3338 #define FSCTL_TXFS_SAVEPOINT_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 94, METHOD_BUFFERED, FILE_WRITE_DATA)
3339 #define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA)
3340 #define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA)
3341 #define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3342 #define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS)
3343 #define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS)
3344 #define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS)
3345 #define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS)
3346 #define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS)
3347 #define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3348 #define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS)
3349 #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS)
3351 #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES \
3352 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA)
3353 #define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA)
3354 #define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS)
3355 #define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS)
3356 #define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS)
3360 #if (_WIN32_WINNT >= 0x0601)
3362 #define FSCTL_QUERY_DEPENDENT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 124, METHOD_BUFFERED, FILE_ANY_ACCESS)
3363 #define FSCTL_SD_GLOBAL_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 125, METHOD_BUFFERED, FILE_ANY_ACCESS)
3364 #define FSCTL_LOOKUP_STREAM_FROM_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 127, METHOD_BUFFERED, FILE_ANY_ACCESS)
3365 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS)
3366 #define FSCTL_FILE_TYPE_NOTIFICATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS)
3367 #define FSCTL_GET_BOOT_AREA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 140, METHOD_BUFFERED, FILE_ANY_ACCESS)
3368 #define FSCTL_GET_RETRIEVAL_POINTER_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 141, METHOD_BUFFERED, FILE_ANY_ACCESS)
3369 #define FSCTL_SET_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS)
3370 #define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS)
3372 #define FSCTL_REQUEST_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS)
3374 #define FSCTL_CSV_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS)
3375 #define FSCTL_IS_CSV_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS)
3377 #define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 147, METHOD_BUFFERED, FILE_ANY_ACCESS)
3378 #define FSCTL_CSV_GET_VOLUME_PATH_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 148, METHOD_BUFFERED, FILE_ANY_ACCESS)
3379 #define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS)
3380 #define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS)
3381 #define FSCTL_IS_FILE_ON_CSV_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS)
3383 typedef struct _CSV_NAMESPACE_INFO
{
3386 LARGE_INTEGER StartingOffset
;
3388 } CSV_NAMESPACE_INFO
, *PCSV_NAMESPACE_INFO
;
3390 #define CSV_NAMESPACE_INFO_V1 (sizeof(CSV_NAMESPACE_INFO))
3391 #define CSV_INVALID_DEVICE_NUMBER 0xFFFFFFFF
3395 #define FSCTL_MARK_AS_SYSTEM_HIVE FSCTL_SET_BOOTLOADER_ACCESSED
3397 typedef struct _PATHNAME_BUFFER
{
3398 ULONG PathNameLength
;
3400 } PATHNAME_BUFFER
, *PPATHNAME_BUFFER
;
3402 typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER
{
3403 UCHAR First0x24BytesOfBootSector
[0x24];
3404 } FSCTL_QUERY_FAT_BPB_BUFFER
, *PFSCTL_QUERY_FAT_BPB_BUFFER
;
3406 #if (_WIN32_WINNT >= 0x0400)
3408 typedef struct _NTFS_VOLUME_DATA_BUFFER
{
3409 LARGE_INTEGER VolumeSerialNumber
;
3410 LARGE_INTEGER NumberSectors
;
3411 LARGE_INTEGER TotalClusters
;
3412 LARGE_INTEGER FreeClusters
;
3413 LARGE_INTEGER TotalReserved
;
3414 ULONG BytesPerSector
;
3415 ULONG BytesPerCluster
;
3416 ULONG BytesPerFileRecordSegment
;
3417 ULONG ClustersPerFileRecordSegment
;
3418 LARGE_INTEGER MftValidDataLength
;
3419 LARGE_INTEGER MftStartLcn
;
3420 LARGE_INTEGER Mft2StartLcn
;
3421 LARGE_INTEGER MftZoneStart
;
3422 LARGE_INTEGER MftZoneEnd
;
3423 } NTFS_VOLUME_DATA_BUFFER
, *PNTFS_VOLUME_DATA_BUFFER
;
3425 typedef struct _NTFS_EXTENDED_VOLUME_DATA
{
3427 USHORT MajorVersion
;
3428 USHORT MinorVersion
;
3429 } NTFS_EXTENDED_VOLUME_DATA
, *PNTFS_EXTENDED_VOLUME_DATA
;
3431 typedef struct _STARTING_LCN_INPUT_BUFFER
{
3432 LARGE_INTEGER StartingLcn
;
3433 } STARTING_LCN_INPUT_BUFFER
, *PSTARTING_LCN_INPUT_BUFFER
;
3435 typedef struct _VOLUME_BITMAP_BUFFER
{
3436 LARGE_INTEGER StartingLcn
;
3437 LARGE_INTEGER BitmapSize
;
3439 } VOLUME_BITMAP_BUFFER
, *PVOLUME_BITMAP_BUFFER
;
3441 typedef struct _STARTING_VCN_INPUT_BUFFER
{
3442 LARGE_INTEGER StartingVcn
;
3443 } STARTING_VCN_INPUT_BUFFER
, *PSTARTING_VCN_INPUT_BUFFER
;
3445 typedef struct _RETRIEVAL_POINTERS_BUFFER
{
3447 LARGE_INTEGER StartingVcn
;
3449 LARGE_INTEGER NextVcn
;
3452 } RETRIEVAL_POINTERS_BUFFER
, *PRETRIEVAL_POINTERS_BUFFER
;
3454 typedef struct _NTFS_FILE_RECORD_INPUT_BUFFER
{
3455 LARGE_INTEGER FileReferenceNumber
;
3456 } NTFS_FILE_RECORD_INPUT_BUFFER
, *PNTFS_FILE_RECORD_INPUT_BUFFER
;
3458 typedef struct _NTFS_FILE_RECORD_OUTPUT_BUFFER
{
3459 LARGE_INTEGER FileReferenceNumber
;
3460 ULONG FileRecordLength
;
3461 UCHAR FileRecordBuffer
[1];
3462 } NTFS_FILE_RECORD_OUTPUT_BUFFER
, *PNTFS_FILE_RECORD_OUTPUT_BUFFER
;
3464 typedef struct _MOVE_FILE_DATA
{
3466 LARGE_INTEGER StartingVcn
;
3467 LARGE_INTEGER StartingLcn
;
3469 } MOVE_FILE_DATA
, *PMOVE_FILE_DATA
;
3471 typedef struct _MOVE_FILE_RECORD_DATA
{
3473 LARGE_INTEGER SourceFileRecord
;
3474 LARGE_INTEGER TargetFileRecord
;
3475 } MOVE_FILE_RECORD_DATA
, *PMOVE_FILE_RECORD_DATA
;
3478 typedef struct _MOVE_FILE_DATA32
{
3480 LARGE_INTEGER StartingVcn
;
3481 LARGE_INTEGER StartingLcn
;
3483 } MOVE_FILE_DATA32
, *PMOVE_FILE_DATA32
;
3486 #endif /* (_WIN32_WINNT >= 0x0400) */
3488 #if (_WIN32_WINNT >= 0x0500)
3490 typedef struct _FIND_BY_SID_DATA
{
3493 } FIND_BY_SID_DATA
, *PFIND_BY_SID_DATA
;
3495 typedef struct _FIND_BY_SID_OUTPUT
{
3496 ULONG NextEntryOffset
;
3498 ULONG FileNameLength
;
3500 } FIND_BY_SID_OUTPUT
, *PFIND_BY_SID_OUTPUT
;
3502 typedef struct _MFT_ENUM_DATA
{
3503 ULONGLONG StartFileReferenceNumber
;
3506 } MFT_ENUM_DATA
, *PMFT_ENUM_DATA
;
3508 typedef struct _CREATE_USN_JOURNAL_DATA
{
3509 ULONGLONG MaximumSize
;
3510 ULONGLONG AllocationDelta
;
3511 } CREATE_USN_JOURNAL_DATA
, *PCREATE_USN_JOURNAL_DATA
;
3513 typedef struct _READ_USN_JOURNAL_DATA
{
3516 ULONG ReturnOnlyOnClose
;
3518 ULONGLONG BytesToWaitFor
;
3519 ULONGLONG UsnJournalID
;
3520 } READ_USN_JOURNAL_DATA
, *PREAD_USN_JOURNAL_DATA
;
3522 typedef struct _USN_RECORD
{
3524 USHORT MajorVersion
;
3525 USHORT MinorVersion
;
3526 ULONGLONG FileReferenceNumber
;
3527 ULONGLONG ParentFileReferenceNumber
;
3529 LARGE_INTEGER TimeStamp
;
3533 ULONG FileAttributes
;
3534 USHORT FileNameLength
;
3535 USHORT FileNameOffset
;
3537 } USN_RECORD
, *PUSN_RECORD
;
3539 #define USN_PAGE_SIZE (0x1000)
3541 #define USN_REASON_DATA_OVERWRITE (0x00000001)
3542 #define USN_REASON_DATA_EXTEND (0x00000002)
3543 #define USN_REASON_DATA_TRUNCATION (0x00000004)
3544 #define USN_REASON_NAMED_DATA_OVERWRITE (0x00000010)
3545 #define USN_REASON_NAMED_DATA_EXTEND (0x00000020)
3546 #define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040)
3547 #define USN_REASON_FILE_CREATE (0x00000100)
3548 #define USN_REASON_FILE_DELETE (0x00000200)
3549 #define USN_REASON_EA_CHANGE (0x00000400)
3550 #define USN_REASON_SECURITY_CHANGE (0x00000800)
3551 #define USN_REASON_RENAME_OLD_NAME (0x00001000)
3552 #define USN_REASON_RENAME_NEW_NAME (0x00002000)
3553 #define USN_REASON_INDEXABLE_CHANGE (0x00004000)
3554 #define USN_REASON_BASIC_INFO_CHANGE (0x00008000)
3555 #define USN_REASON_HARD_LINK_CHANGE (0x00010000)
3556 #define USN_REASON_COMPRESSION_CHANGE (0x00020000)
3557 #define USN_REASON_ENCRYPTION_CHANGE (0x00040000)
3558 #define USN_REASON_OBJECT_ID_CHANGE (0x00080000)
3559 #define USN_REASON_REPARSE_POINT_CHANGE (0x00100000)
3560 #define USN_REASON_STREAM_CHANGE (0x00200000)
3561 #define USN_REASON_TRANSACTED_CHANGE (0x00400000)
3562 #define USN_REASON_CLOSE (0x80000000)
3564 typedef struct _USN_JOURNAL_DATA
{
3565 ULONGLONG UsnJournalID
;
3570 ULONGLONG MaximumSize
;
3571 ULONGLONG AllocationDelta
;
3572 } USN_JOURNAL_DATA
, *PUSN_JOURNAL_DATA
;
3574 typedef struct _DELETE_USN_JOURNAL_DATA
{
3575 ULONGLONG UsnJournalID
;
3577 } DELETE_USN_JOURNAL_DATA
, *PDELETE_USN_JOURNAL_DATA
;
3579 #define USN_DELETE_FLAG_DELETE (0x00000001)
3580 #define USN_DELETE_FLAG_NOTIFY (0x00000002)
3581 #define USN_DELETE_VALID_FLAGS (0x00000003)
3583 typedef struct _MARK_HANDLE_INFO
{
3584 ULONG UsnSourceInfo
;
3585 HANDLE VolumeHandle
;
3587 } MARK_HANDLE_INFO
, *PMARK_HANDLE_INFO
;
3590 typedef struct _MARK_HANDLE_INFO32
{
3591 ULONG UsnSourceInfo
;
3592 UINT32 VolumeHandle
;
3594 } MARK_HANDLE_INFO32
, *PMARK_HANDLE_INFO32
;
3597 #define USN_SOURCE_DATA_MANAGEMENT (0x00000001)
3598 #define USN_SOURCE_AUXILIARY_DATA (0x00000002)
3599 #define USN_SOURCE_REPLICATION_MANAGEMENT (0x00000004)
3601 #define MARK_HANDLE_PROTECT_CLUSTERS (0x00000001)
3602 #define MARK_HANDLE_TXF_SYSTEM_LOG (0x00000004)
3603 #define MARK_HANDLE_NOT_TXF_SYSTEM_LOG (0x00000008)
3605 typedef struct _BULK_SECURITY_TEST_DATA
{
3606 ACCESS_MASK DesiredAccess
;
3607 ULONG SecurityIds
[1];
3608 } BULK_SECURITY_TEST_DATA
, *PBULK_SECURITY_TEST_DATA
;
3610 #define VOLUME_IS_DIRTY (0x00000001)
3611 #define VOLUME_UPGRADE_SCHEDULED (0x00000002)
3612 #define VOLUME_SESSION_OPEN (0x00000004)
3614 typedef struct _FILE_PREFETCH
{
3617 ULONGLONG Prefetch
[1];
3618 } FILE_PREFETCH
, *PFILE_PREFETCH
;
3620 typedef struct _FILE_PREFETCH_EX
{
3624 ULONGLONG Prefetch
[1];
3625 } FILE_PREFETCH_EX
, *PFILE_PREFETCH_EX
;
3627 #define FILE_PREFETCH_TYPE_FOR_CREATE 0x1
3628 #define FILE_PREFETCH_TYPE_FOR_DIRENUM 0x2
3629 #define FILE_PREFETCH_TYPE_FOR_CREATE_EX 0x3
3630 #define FILE_PREFETCH_TYPE_FOR_DIRENUM_EX 0x4
3632 #define FILE_PREFETCH_TYPE_MAX 0x4
3634 typedef struct _FILE_OBJECTID_BUFFER
{
3638 UCHAR BirthVolumeId
[16];
3639 UCHAR BirthObjectId
[16];
3642 UCHAR ExtendedInfo
[48];
3644 } FILE_OBJECTID_BUFFER
, *PFILE_OBJECTID_BUFFER
;
3646 typedef struct _FILE_SET_SPARSE_BUFFER
{
3648 } FILE_SET_SPARSE_BUFFER
, *PFILE_SET_SPARSE_BUFFER
;
3650 typedef struct _FILE_ZERO_DATA_INFORMATION
{
3651 LARGE_INTEGER FileOffset
;
3652 LARGE_INTEGER BeyondFinalZero
;
3653 } FILE_ZERO_DATA_INFORMATION
, *PFILE_ZERO_DATA_INFORMATION
;
3655 typedef struct _FILE_ALLOCATED_RANGE_BUFFER
{
3656 LARGE_INTEGER FileOffset
;
3657 LARGE_INTEGER Length
;
3658 } FILE_ALLOCATED_RANGE_BUFFER
, *PFILE_ALLOCATED_RANGE_BUFFER
;
3660 typedef struct _ENCRYPTION_BUFFER
{
3661 ULONG EncryptionOperation
;
3663 } ENCRYPTION_BUFFER
, *PENCRYPTION_BUFFER
;
3665 #define FILE_SET_ENCRYPTION 0x00000001
3666 #define FILE_CLEAR_ENCRYPTION 0x00000002
3667 #define STREAM_SET_ENCRYPTION 0x00000003
3668 #define STREAM_CLEAR_ENCRYPTION 0x00000004
3670 #define MAXIMUM_ENCRYPTION_VALUE 0x00000004
3672 typedef struct _DECRYPTION_STATUS_BUFFER
{
3673 BOOLEAN NoEncryptedStreams
;
3674 } DECRYPTION_STATUS_BUFFER
, *PDECRYPTION_STATUS_BUFFER
;
3676 #define ENCRYPTION_FORMAT_DEFAULT (0x01)
3678 #define COMPRESSION_FORMAT_SPARSE (0x4000)
3680 typedef struct _REQUEST_RAW_ENCRYPTED_DATA
{
3681 LONGLONG FileOffset
;
3683 } REQUEST_RAW_ENCRYPTED_DATA
, *PREQUEST_RAW_ENCRYPTED_DATA
;
3685 typedef struct _ENCRYPTED_DATA_INFO
{
3686 ULONGLONG StartingFileOffset
;
3687 ULONG OutputBufferOffset
;
3688 ULONG BytesWithinFileSize
;
3689 ULONG BytesWithinValidDataLength
;
3690 USHORT CompressionFormat
;
3691 UCHAR DataUnitShift
;
3694 UCHAR EncryptionFormat
;
3695 USHORT NumberOfDataBlocks
;
3696 ULONG DataBlockSize
[ANYSIZE_ARRAY
];
3697 } ENCRYPTED_DATA_INFO
, *PENCRYPTED_DATA_INFO
;
3699 typedef struct _PLEX_READ_DATA_REQUEST
{
3700 LARGE_INTEGER ByteOffset
;
3703 } PLEX_READ_DATA_REQUEST
, *PPLEX_READ_DATA_REQUEST
;
3705 typedef struct _SI_COPYFILE
{
3706 ULONG SourceFileNameLength
;
3707 ULONG DestinationFileNameLength
;
3709 WCHAR FileNameBuffer
[1];
3710 } SI_COPYFILE
, *PSI_COPYFILE
;
3712 #define COPYFILE_SIS_LINK 0x0001
3713 #define COPYFILE_SIS_REPLACE 0x0002
3714 #define COPYFILE_SIS_FLAGS 0x0003
3716 #endif /* (_WIN32_WINNT >= 0x0500) */
3718 #if (_WIN32_WINNT >= 0x0600)
3720 typedef struct _FILE_MAKE_COMPATIBLE_BUFFER
{
3722 } FILE_MAKE_COMPATIBLE_BUFFER
, *PFILE_MAKE_COMPATIBLE_BUFFER
;
3724 typedef struct _FILE_SET_DEFECT_MGMT_BUFFER
{
3726 } FILE_SET_DEFECT_MGMT_BUFFER
, *PFILE_SET_DEFECT_MGMT_BUFFER
;
3728 typedef struct _FILE_QUERY_SPARING_BUFFER
{
3729 ULONG SparingUnitBytes
;
3730 BOOLEAN SoftwareSparing
;
3731 ULONG TotalSpareBlocks
;
3732 ULONG FreeSpareBlocks
;
3733 } FILE_QUERY_SPARING_BUFFER
, *PFILE_QUERY_SPARING_BUFFER
;
3735 typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER
{
3736 LARGE_INTEGER DirectoryCount
;
3737 LARGE_INTEGER FileCount
;
3738 USHORT FsFormatMajVersion
;
3739 USHORT FsFormatMinVersion
;
3740 WCHAR FsFormatName
[12];
3741 LARGE_INTEGER FormatTime
;
3742 LARGE_INTEGER LastUpdateTime
;
3743 WCHAR CopyrightInfo
[34];
3744 WCHAR AbstractInfo
[34];
3745 WCHAR FormattingImplementationInfo
[34];
3746 WCHAR LastModifyingImplementationInfo
[34];
3747 } FILE_QUERY_ON_DISK_VOL_INFO_BUFFER
, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER
;
3749 #define SET_REPAIR_ENABLED (0x00000001)
3750 #define SET_REPAIR_VOLUME_BITMAP_SCAN (0x00000002)
3751 #define SET_REPAIR_DELETE_CROSSLINK (0x00000004)
3752 #define SET_REPAIR_WARN_ABOUT_DATA_LOSS (0x00000008)
3753 #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT (0x00000010)
3754 #define SET_REPAIR_VALID_MASK (0x0000001F)
3756 typedef enum _SHRINK_VOLUME_REQUEST_TYPES
{
3760 } SHRINK_VOLUME_REQUEST_TYPES
, *PSHRINK_VOLUME_REQUEST_TYPES
;
3762 typedef struct _SHRINK_VOLUME_INFORMATION
{
3763 SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType
;
3765 LONGLONG NewNumberOfSectors
;
3766 } SHRINK_VOLUME_INFORMATION
, *PSHRINK_VOLUME_INFORMATION
;
3768 #define TXFS_RM_FLAG_LOGGING_MODE 0x00000001
3769 #define TXFS_RM_FLAG_RENAME_RM 0x00000002
3770 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004
3771 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008
3772 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010
3773 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020
3774 #define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040
3775 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080
3776 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100
3777 #define TXFS_RM_FLAG_GROW_LOG 0x00000400
3778 #define TXFS_RM_FLAG_SHRINK_LOG 0x00000800
3779 #define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000
3780 #define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000
3781 #define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000
3782 #define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000
3783 #define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000
3784 #define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000
3786 #define TXFS_LOGGING_MODE_SIMPLE (0x0001)
3787 #define TXFS_LOGGING_MODE_FULL (0x0002)
3789 #define TXFS_TRANSACTION_STATE_NONE 0x00
3790 #define TXFS_TRANSACTION_STATE_ACTIVE 0x01
3791 #define TXFS_TRANSACTION_STATE_PREPARED 0x02
3792 #define TXFS_TRANSACTION_STATE_NOTACTIVE 0x03
3794 #define TXFS_MODIFY_RM_VALID_FLAGS \
3795 (TXFS_RM_FLAG_LOGGING_MODE | \
3796 TXFS_RM_FLAG_RENAME_RM | \
3797 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
3798 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
3799 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
3800 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
3801 TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
3802 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
3803 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
3804 TXFS_RM_FLAG_SHRINK_LOG | \
3805 TXFS_RM_FLAG_GROW_LOG | \
3806 TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE | \
3807 TXFS_RM_FLAG_PRESERVE_CHANGES | \
3808 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
3809 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
3810 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
3811 TXFS_RM_FLAG_PREFER_AVAILABILITY)
3813 typedef struct _TXFS_MODIFY_RM
{
3815 ULONG LogContainerCountMax
;
3816 ULONG LogContainerCountMin
;
3817 ULONG LogContainerCount
;
3818 ULONG LogGrowthIncrement
;
3819 ULONG LogAutoShrinkPercentage
;
3822 } TXFS_MODIFY_RM
, *PTXFS_MODIFY_RM
;
3824 #define TXFS_RM_STATE_NOT_STARTED 0
3825 #define TXFS_RM_STATE_STARTING 1
3826 #define TXFS_RM_STATE_ACTIVE 2
3827 #define TXFS_RM_STATE_SHUTTING_DOWN 3
3829 #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS \
3830 (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
3831 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
3832 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
3833 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
3834 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
3835 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
3836 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
3837 TXFS_RM_FLAG_PREFER_AVAILABILITY)
3839 typedef struct _TXFS_QUERY_RM_INFORMATION
{
3840 ULONG BytesRequired
;
3842 ULONGLONG CurrentLsn
;
3843 ULONGLONG ArchiveTailLsn
;
3844 ULONGLONG LogContainerSize
;
3845 LARGE_INTEGER HighestVirtualClock
;
3846 ULONG LogContainerCount
;
3847 ULONG LogContainerCountMax
;
3848 ULONG LogContainerCountMin
;
3849 ULONG LogGrowthIncrement
;
3850 ULONG LogAutoShrinkPercentage
;
3855 ULONGLONG LogCapacity
;
3859 ULONGLONG TransactionCount
;
3860 ULONGLONG OnePCCount
;
3861 ULONGLONG TwoPCCount
;
3862 ULONGLONG NumberLogFileFull
;
3863 ULONGLONG OldestTransactionAge
;
3865 ULONG TmLogPathOffset
;
3866 } TXFS_QUERY_RM_INFORMATION
, *PTXFS_QUERY_RM_INFORMATION
;
3868 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x01
3869 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x02
3871 #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS \
3872 (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN | \
3873 TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK)
3875 typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION
{
3876 LARGE_INTEGER LastVirtualClock
;
3877 ULONGLONG LastRedoLsn
;
3878 ULONGLONG HighestRecoveryLsn
;
3880 } TXFS_ROLLFORWARD_REDO_INFORMATION
, *PTXFS_ROLLFORWARD_REDO_INFORMATION
;
3882 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001
3883 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002
3884 #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004
3885 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008
3886 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010
3887 #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020
3888 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040
3889 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080
3891 #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200
3892 #define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400
3893 #define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800
3895 #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000
3896 #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000
3898 #define TXFS_START_RM_VALID_FLAGS \
3899 (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
3900 TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
3901 TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE | \
3902 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
3903 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
3904 TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
3905 TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT | \
3906 TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
3907 TXFS_START_RM_FLAG_LOGGING_MODE | \
3908 TXFS_START_RM_FLAG_PRESERVE_CHANGES | \
3909 TXFS_START_RM_FLAG_PREFER_CONSISTENCY | \
3910 TXFS_START_RM_FLAG_PREFER_AVAILABILITY)
3912 typedef struct _TXFS_START_RM_INFORMATION
{
3914 ULONGLONG LogContainerSize
;
3915 ULONG LogContainerCountMin
;
3916 ULONG LogContainerCountMax
;
3917 ULONG LogGrowthIncrement
;
3918 ULONG LogAutoShrinkPercentage
;
3919 ULONG TmLogPathOffset
;
3920 USHORT TmLogPathLength
;
3922 USHORT LogPathLength
;
3925 } TXFS_START_RM_INFORMATION
, *PTXFS_START_RM_INFORMATION
;
3927 typedef struct _TXFS_GET_METADATA_INFO_OUT
{
3932 GUID LockingTransaction
;
3934 ULONG TransactionState
;
3935 } TXFS_GET_METADATA_INFO_OUT
, *PTXFS_GET_METADATA_INFO_OUT
;
3937 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001
3938 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x00000002
3940 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
{
3948 } TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
;
3950 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES
{
3951 GUID KtmTransaction
;
3952 ULONGLONG NumberOfFiles
;
3953 ULONGLONG BufferSizeRequired
;
3955 } TXFS_LIST_TRANSACTION_LOCKED_FILES
, *PTXFS_LIST_TRANSACTION_LOCKED_FILES
;
3957 typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY
{
3959 ULONG TransactionState
;
3963 } TXFS_LIST_TRANSACTIONS_ENTRY
, *PTXFS_LIST_TRANSACTIONS_ENTRY
;
3965 typedef struct _TXFS_LIST_TRANSACTIONS
{
3966 ULONGLONG NumberOfTransactions
;
3967 ULONGLONG BufferSizeRequired
;
3968 } TXFS_LIST_TRANSACTIONS
, *PTXFS_LIST_TRANSACTIONS
;
3970 typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT
{
3975 } TXFS_READ_BACKUP_INFORMATION_OUT
, *PTXFS_READ_BACKUP_INFORMATION_OUT
;
3977 typedef struct _TXFS_WRITE_BACKUP_INFORMATION
{
3979 } TXFS_WRITE_BACKUP_INFORMATION
, *PTXFS_WRITE_BACKUP_INFORMATION
;
3981 #define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFE
3982 #define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFF
3984 typedef struct _TXFS_GET_TRANSACTED_VERSION
{
3985 ULONG ThisBaseVersion
;
3986 ULONG LatestVersion
;
3987 USHORT ThisMiniVersion
;
3988 USHORT FirstMiniVersion
;
3989 USHORT LatestMiniVersion
;
3990 } TXFS_GET_TRANSACTED_VERSION
, *PTXFS_GET_TRANSACTED_VERSION
;
3992 #define TXFS_SAVEPOINT_SET 0x00000001
3993 #define TXFS_SAVEPOINT_ROLLBACK 0x00000002
3994 #define TXFS_SAVEPOINT_CLEAR 0x00000004
3995 #define TXFS_SAVEPOINT_CLEAR_ALL 0x00000010
3997 typedef struct _TXFS_SAVEPOINT_INFORMATION
{
3998 HANDLE KtmTransaction
;
4001 } TXFS_SAVEPOINT_INFORMATION
, *PTXFS_SAVEPOINT_INFORMATION
;
4003 typedef struct _TXFS_CREATE_MINIVERSION_INFO
{
4004 USHORT StructureVersion
;
4005 USHORT StructureLength
;
4008 } TXFS_CREATE_MINIVERSION_INFO
, *PTXFS_CREATE_MINIVERSION_INFO
;
4010 typedef struct _TXFS_TRANSACTION_ACTIVE_INFO
{
4011 BOOLEAN TransactionsActiveAtSnapshot
;
4012 } TXFS_TRANSACTION_ACTIVE_INFO
, *PTXFS_TRANSACTION_ACTIVE_INFO
;
4014 #endif /* (_WIN32_WINNT >= 0x0600) */
4016 #if (_WIN32_WINNT >= 0x0601)
4018 #define MARK_HANDLE_REALTIME (0x00000020)
4019 #define MARK_HANDLE_NOT_REALTIME (0x00000040)
4021 #define NO_8DOT3_NAME_PRESENT (0x00000001)
4022 #define REMOVED_8DOT3_NAME (0x00000002)
4024 #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED (0x00000001)
4026 typedef struct _BOOT_AREA_INFO
{
4027 ULONG BootSectorCount
;
4029 LARGE_INTEGER Offset
;
4031 } BOOT_AREA_INFO
, *PBOOT_AREA_INFO
;
4033 typedef struct _RETRIEVAL_POINTER_BASE
{
4034 LARGE_INTEGER FileAreaOffset
;
4035 } RETRIEVAL_POINTER_BASE
, *PRETRIEVAL_POINTER_BASE
;
4037 typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION
{
4042 } FILE_FS_PERSISTENT_VOLUME_INFORMATION
, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION
;
4044 typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION
{
4046 } FILE_SYSTEM_RECOGNITION_INFORMATION
, *PFILE_SYSTEM_RECOGNITION_INFORMATION
;
4048 #define OPLOCK_LEVEL_CACHE_READ (0x00000001)
4049 #define OPLOCK_LEVEL_CACHE_HANDLE (0x00000002)
4050 #define OPLOCK_LEVEL_CACHE_WRITE (0x00000004)
4052 #define REQUEST_OPLOCK_INPUT_FLAG_REQUEST (0x00000001)
4053 #define REQUEST_OPLOCK_INPUT_FLAG_ACK (0x00000002)
4054 #define REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE (0x00000004)
4056 #define REQUEST_OPLOCK_CURRENT_VERSION 1
4058 typedef struct _REQUEST_OPLOCK_INPUT_BUFFER
{
4059 USHORT StructureVersion
;
4060 USHORT StructureLength
;
4061 ULONG RequestedOplockLevel
;
4063 } REQUEST_OPLOCK_INPUT_BUFFER
, *PREQUEST_OPLOCK_INPUT_BUFFER
;
4065 #define REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED (0x00000001)
4066 #define REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED (0x00000002)
4068 typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER
{
4069 USHORT StructureVersion
;
4070 USHORT StructureLength
;
4071 ULONG OriginalOplockLevel
;
4072 ULONG NewOplockLevel
;
4074 ACCESS_MASK AccessMode
;
4076 } REQUEST_OPLOCK_OUTPUT_BUFFER
, *PREQUEST_OPLOCK_OUTPUT_BUFFER
;
4078 #define SD_GLOBAL_CHANGE_TYPE_MACHINE_SID 1
4080 typedef struct _SD_CHANGE_MACHINE_SID_INPUT
{
4081 USHORT CurrentMachineSIDOffset
;
4082 USHORT CurrentMachineSIDLength
;
4083 USHORT NewMachineSIDOffset
;
4084 USHORT NewMachineSIDLength
;
4085 } SD_CHANGE_MACHINE_SID_INPUT
, *PSD_CHANGE_MACHINE_SID_INPUT
;
4087 typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT
{
4088 ULONGLONG NumSDChangedSuccess
;
4089 ULONGLONG NumSDChangedFail
;
4090 ULONGLONG NumSDUnused
;
4091 ULONGLONG NumSDTotal
;
4092 ULONGLONG NumMftSDChangedSuccess
;
4093 ULONGLONG NumMftSDChangedFail
;
4094 ULONGLONG NumMftSDTotal
;
4095 } SD_CHANGE_MACHINE_SID_OUTPUT
, *PSD_CHANGE_MACHINE_SID_OUTPUT
;
4097 typedef struct _SD_GLOBAL_CHANGE_INPUT
{
4101 SD_CHANGE_MACHINE_SID_INPUT SdChange
;
4103 } SD_GLOBAL_CHANGE_INPUT
, *PSD_GLOBAL_CHANGE_INPUT
;
4105 typedef struct _SD_GLOBAL_CHANGE_OUTPUT
{
4109 SD_CHANGE_MACHINE_SID_OUTPUT SdChange
;
4111 } SD_GLOBAL_CHANGE_OUTPUT
, *PSD_GLOBAL_CHANGE_OUTPUT
;
4113 #define ENCRYPTED_DATA_INFO_SPARSE_FILE 1
4115 typedef struct _EXTENDED_ENCRYPTED_DATA_INFO
{
4120 } EXTENDED_ENCRYPTED_DATA_INFO
, *PEXTENDED_ENCRYPTED_DATA_INFO
;
4122 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT
{
4124 ULONG NumberOfClusters
;
4125 LARGE_INTEGER Cluster
[1];
4126 } LOOKUP_STREAM_FROM_CLUSTER_INPUT
, *PLOOKUP_STREAM_FROM_CLUSTER_INPUT
;
4128 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT
{
4130 ULONG NumberOfMatches
;
4131 ULONG BufferSizeRequired
;
4132 } LOOKUP_STREAM_FROM_CLUSTER_OUTPUT
, *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT
;
4134 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE 0x00000001
4135 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET 0x00000002
4136 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE 0x00000004
4137 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE 0x00000008
4139 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK 0xff000000
4140 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA 0x01000000
4141 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX 0x02000000
4142 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM 0x03000000
4144 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY
{
4147 LARGE_INTEGER Reserved
;
4148 LARGE_INTEGER Cluster
;
4150 } LOOKUP_STREAM_FROM_CLUSTER_ENTRY
, *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY
;
4152 typedef struct _FILE_TYPE_NOTIFICATION_INPUT
{
4154 ULONG NumFileTypeIDs
;
4156 } FILE_TYPE_NOTIFICATION_INPUT
, *PFILE_TYPE_NOTIFICATION_INPUT
;
4158 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_BEGIN 0x00000001
4159 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_END 0x00000002
4161 DEFINE_GUID( FILE_TYPE_NOTIFICATION_GUID_PAGE_FILE
, 0x0d0a64a1, 0x38fc, 0x4db8, 0x9f, 0xe7, 0x3f, 0x43, 0x52, 0xcd, 0x7c, 0x5c );
4162 DEFINE_GUID( FILE_TYPE_NOTIFICATION_GUID_HIBERNATION_FILE
, 0xb7624d64, 0xb9a3, 0x4cf8, 0x80, 0x11, 0x5b, 0x86, 0xc9, 0x40, 0xe7, 0xb7 );
4163 DEFINE_GUID( FILE_TYPE_NOTIFICATION_GUID_CRASHDUMP_FILE
, 0x9d453eb7, 0xd2a6, 0x4dbd, 0xa2, 0xe3, 0xfb, 0xd0, 0xed, 0x91, 0x09, 0xa9 );
4165 #ifndef _VIRTUAL_STORAGE_TYPE_DEFINED
4166 #define _VIRTUAL_STORAGE_TYPE_DEFINED
4167 typedef struct _VIRTUAL_STORAGE_TYPE
{
4170 } VIRTUAL_STORAGE_TYPE
, *PVIRTUAL_STORAGE_TYPE
;
4173 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
{
4176 } STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
;
4178 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_HOST_VOLUMES 0x1
4179 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_GUEST_VOLUMES 0x2
4181 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
{
4183 ULONG DependencyTypeFlags
;
4184 ULONG ProviderSpecificFlags
;
4185 VIRTUAL_STORAGE_TYPE VirtualStorageType
;
4186 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
;
4188 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
{
4190 ULONG DependencyTypeFlags
;
4191 ULONG ProviderSpecificFlags
;
4192 VIRTUAL_STORAGE_TYPE VirtualStorageType
;
4193 ULONG AncestorLevel
;
4194 ULONG HostVolumeNameOffset
;
4195 ULONG HostVolumeNameSize
;
4196 ULONG DependentVolumeNameOffset
;
4197 ULONG DependentVolumeNameSize
;
4198 ULONG RelativePathOffset
;
4199 ULONG RelativePathSize
;
4200 ULONG DependentDeviceNameOffset
;
4201 ULONG DependentDeviceNameSize
;
4202 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
;
4204 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
{
4205 ULONG ResponseLevel
;
4206 ULONG NumberEntries
;
4208 STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY Lev1Depends
[];
4209 STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY Lev2Depends
[];
4211 } STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
;
4213 #endif /* (_WIN32_WINNT >= 0x0601) */
4215 typedef struct _FILESYSTEM_STATISTICS
{
4216 USHORT FileSystemType
;
4218 ULONG SizeOfCompleteStructure
;
4219 ULONG UserFileReads
;
4220 ULONG UserFileReadBytes
;
4221 ULONG UserDiskReads
;
4222 ULONG UserFileWrites
;
4223 ULONG UserFileWriteBytes
;
4224 ULONG UserDiskWrites
;
4225 ULONG MetaDataReads
;
4226 ULONG MetaDataReadBytes
;
4227 ULONG MetaDataDiskReads
;
4228 ULONG MetaDataWrites
;
4229 ULONG MetaDataWriteBytes
;
4230 ULONG MetaDataDiskWrites
;
4231 } FILESYSTEM_STATISTICS
, *PFILESYSTEM_STATISTICS
;
4233 #define FILESYSTEM_STATISTICS_TYPE_NTFS 1
4234 #define FILESYSTEM_STATISTICS_TYPE_FAT 2
4235 #define FILESYSTEM_STATISTICS_TYPE_EXFAT 3
4237 typedef struct _FAT_STATISTICS
{
4239 ULONG SuccessfulCreates
;
4240 ULONG FailedCreates
;
4241 ULONG NonCachedReads
;
4242 ULONG NonCachedReadBytes
;
4243 ULONG NonCachedWrites
;
4244 ULONG NonCachedWriteBytes
;
4245 ULONG NonCachedDiskReads
;
4246 ULONG NonCachedDiskWrites
;
4247 } FAT_STATISTICS
, *PFAT_STATISTICS
;
4249 typedef struct _EXFAT_STATISTICS
{
4251 ULONG SuccessfulCreates
;
4252 ULONG FailedCreates
;
4253 ULONG NonCachedReads
;
4254 ULONG NonCachedReadBytes
;
4255 ULONG NonCachedWrites
;
4256 ULONG NonCachedWriteBytes
;
4257 ULONG NonCachedDiskReads
;
4258 ULONG NonCachedDiskWrites
;
4259 } EXFAT_STATISTICS
, *PEXFAT_STATISTICS
;
4261 typedef struct _NTFS_STATISTICS
{
4262 ULONG LogFileFullExceptions
;
4263 ULONG OtherExceptions
;
4267 ULONG MftWriteBytes
;
4273 } MftWritesUserLevel
;
4274 USHORT MftWritesFlushForLogFileFull
;
4275 USHORT MftWritesLazyWriter
;
4276 USHORT MftWritesUserRequest
;
4278 ULONG Mft2WriteBytes
;
4284 } Mft2WritesUserLevel
;
4285 USHORT Mft2WritesFlushForLogFileFull
;
4286 USHORT Mft2WritesLazyWriter
;
4287 USHORT Mft2WritesUserRequest
;
4288 ULONG RootIndexReads
;
4289 ULONG RootIndexReadBytes
;
4290 ULONG RootIndexWrites
;
4291 ULONG RootIndexWriteBytes
;
4293 ULONG BitmapReadBytes
;
4295 ULONG BitmapWriteBytes
;
4296 USHORT BitmapWritesFlushForLogFileFull
;
4297 USHORT BitmapWritesLazyWriter
;
4298 USHORT BitmapWritesUserRequest
;
4303 } BitmapWritesUserLevel
;
4304 ULONG MftBitmapReads
;
4305 ULONG MftBitmapReadBytes
;
4306 ULONG MftBitmapWrites
;
4307 ULONG MftBitmapWriteBytes
;
4308 USHORT MftBitmapWritesFlushForLogFileFull
;
4309 USHORT MftBitmapWritesLazyWriter
;
4310 USHORT MftBitmapWritesUserRequest
;
4316 } MftBitmapWritesUserLevel
;
4317 ULONG UserIndexReads
;
4318 ULONG UserIndexReadBytes
;
4319 ULONG UserIndexWrites
;
4320 ULONG UserIndexWriteBytes
;
4322 ULONG LogFileReadBytes
;
4323 ULONG LogFileWrites
;
4324 ULONG LogFileWriteBytes
;
4331 ULONG HintsClusters
;
4333 ULONG CacheClusters
;
4335 ULONG CacheMissClusters
;
4337 } NTFS_STATISTICS
, *PNTFS_STATISTICS
;
4339 #endif // _FILESYSTEMFSCTL_
4341 #define SYMLINK_FLAG_RELATIVE 1
4343 typedef struct _REPARSE_DATA_BUFFER
{
4345 USHORT ReparseDataLength
;
4347 __GNU_EXTENSION
union {
4349 USHORT SubstituteNameOffset
;
4350 USHORT SubstituteNameLength
;
4351 USHORT PrintNameOffset
;
4352 USHORT PrintNameLength
;
4354 WCHAR PathBuffer
[1];
4355 } SymbolicLinkReparseBuffer
;
4357 USHORT SubstituteNameOffset
;
4358 USHORT SubstituteNameLength
;
4359 USHORT PrintNameOffset
;
4360 USHORT PrintNameLength
;
4361 WCHAR PathBuffer
[1];
4362 } MountPointReparseBuffer
;
4364 UCHAR DataBuffer
[1];
4365 } GenericReparseBuffer
;
4367 } REPARSE_DATA_BUFFER
, *PREPARSE_DATA_BUFFER
;
4369 #define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
4371 typedef struct _REPARSE_GUID_DATA_BUFFER
{
4373 USHORT ReparseDataLength
;
4377 UCHAR DataBuffer
[1];
4378 } GenericReparseBuffer
;
4379 } REPARSE_GUID_DATA_BUFFER
, *PREPARSE_GUID_DATA_BUFFER
;
4381 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
4383 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 )
4385 /* Reserved reparse tags */
4386 #define IO_REPARSE_TAG_RESERVED_ZERO (0)
4387 #define IO_REPARSE_TAG_RESERVED_ONE (1)
4388 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
4390 #define IsReparseTagMicrosoft(_tag) (((_tag) & 0x80000000))
4391 #define IsReparseTagNameSurrogate(_tag) (((_tag) & 0x20000000))
4393 #define IO_REPARSE_TAG_VALID_VALUES (0xF000FFFF)
4395 #define IsReparseTagValid(tag) ( \
4396 !((tag) & ~IO_REPARSE_TAG_VALID_VALUES) && \
4397 ((tag) > IO_REPARSE_TAG_RESERVED_RANGE) \
4400 /* MicroSoft reparse point tags */
4401 #define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
4402 #define IO_REPARSE_TAG_HSM (0xC0000004L)
4403 #define IO_REPARSE_TAG_DRIVE_EXTENDER (0x80000005L)
4404 #define IO_REPARSE_TAG_HSM2 (0x80000006L)
4405 #define IO_REPARSE_TAG_SIS (0x80000007L)
4406 #define IO_REPARSE_TAG_WIM (0x80000008L)
4407 #define IO_REPARSE_TAG_CSV (0x80000009L)
4408 #define IO_REPARSE_TAG_DFS (0x8000000AL)
4409 #define IO_REPARSE_TAG_FILTER_MANAGER (0x8000000BL)
4410 #define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
4411 #define IO_REPARSE_TAG_IIS_CACHE (0xA0000010L)
4412 #define IO_REPARSE_TAG_DFSR (0x80000012L)
4415 typedef struct _REPARSE_INDEX_KEY
{
4416 ULONG FileReparseTag
;
4417 LARGE_INTEGER FileId
;
4418 } REPARSE_INDEX_KEY
, *PREPARSE_INDEX_KEY
;
4421 #define FSCTL_LMR_GET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,58,METHOD_BUFFERED,FILE_ANY_ACCESS)
4422 #define FSCTL_LMR_SET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,59,METHOD_BUFFERED,FILE_ANY_ACCESS)
4423 #define IOCTL_LMR_ARE_FILE_OBJECTS_ON_SAME_SERVER CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS)
4425 #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
4426 #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
4427 #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
4428 #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
4429 #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
4430 #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
4431 #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
4432 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
4433 #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
4434 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
4435 #define FSCTL_PIPE_GET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
4436 #define FSCTL_PIPE_SET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
4437 #define FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
4438 #define FSCTL_PIPE_SET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
4439 #define FSCTL_PIPE_GET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
4440 #define FSCTL_PIPE_SET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
4441 #define FSCTL_PIPE_FLUSH CTL_CODE(FILE_DEVICE_NAMED_PIPE, 16, METHOD_BUFFERED, FILE_WRITE_DATA)
4443 #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
4444 #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
4445 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
4446 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
4448 #define FILE_PIPE_READ_DATA 0x00000000
4449 #define FILE_PIPE_WRITE_SPACE 0x00000001
4451 typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER
{
4454 } FILE_PIPE_ASSIGN_EVENT_BUFFER
, *PFILE_PIPE_ASSIGN_EVENT_BUFFER
;
4456 typedef struct _FILE_PIPE_EVENT_BUFFER
{
4457 ULONG NamedPipeState
;
4461 ULONG NumberRequests
;
4462 } FILE_PIPE_EVENT_BUFFER
, *PFILE_PIPE_EVENT_BUFFER
;
4464 typedef struct _FILE_PIPE_PEEK_BUFFER
{
4465 ULONG NamedPipeState
;
4466 ULONG ReadDataAvailable
;
4467 ULONG NumberOfMessages
;
4468 ULONG MessageLength
;
4470 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
4472 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
{
4473 LARGE_INTEGER Timeout
;
4475 BOOLEAN TimeoutSpecified
;
4477 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
4479 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER
{
4480 #if !defined(BUILD_WOW6432)
4481 PVOID ClientSession
;
4482 PVOID ClientProcess
;
4484 ULONGLONG ClientSession
;
4485 ULONGLONG ClientProcess
;
4487 } FILE_PIPE_CLIENT_PROCESS_BUFFER
, *PFILE_PIPE_CLIENT_PROCESS_BUFFER
;
4489 #define FILE_PIPE_COMPUTER_NAME_LENGTH 15
4491 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER_EX
{
4492 #if !defined(BUILD_WOW6432)
4493 PVOID ClientSession
;
4494 PVOID ClientProcess
;
4496 ULONGLONG ClientSession
;
4497 ULONGLONG ClientProcess
;
4499 USHORT ClientComputerNameLength
;
4500 WCHAR ClientComputerBuffer
[FILE_PIPE_COMPUTER_NAME_LENGTH
+1];
4501 } FILE_PIPE_CLIENT_PROCESS_BUFFER_EX
, *PFILE_PIPE_CLIENT_PROCESS_BUFFER_EX
;
4503 #define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
4505 typedef enum _LINK_TRACKING_INFORMATION_TYPE
{
4506 NtfsLinkTrackingInformation
,
4507 DfsLinkTrackingInformation
4508 } LINK_TRACKING_INFORMATION_TYPE
, *PLINK_TRACKING_INFORMATION_TYPE
;
4510 typedef struct _LINK_TRACKING_INFORMATION
{
4511 LINK_TRACKING_INFORMATION_TYPE Type
;
4513 } LINK_TRACKING_INFORMATION
, *PLINK_TRACKING_INFORMATION
;
4515 typedef struct _REMOTE_LINK_TRACKING_INFORMATION
{
4516 PVOID TargetFileObject
;
4517 ULONG TargetLinkTrackingInformationLength
;
4518 UCHAR TargetLinkTrackingInformationBuffer
[1];
4519 } REMOTE_LINK_TRACKING_INFORMATION
, *PREMOTE_LINK_TRACKING_INFORMATION
;
4521 typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION
{
4523 ACCESS_MASK GrantedAccess
;
4527 } PUBLIC_OBJECT_BASIC_INFORMATION
, *PPUBLIC_OBJECT_BASIC_INFORMATION
;
4529 typedef struct _PUBLIC_OBJECT_TYPE_INFORMATION
{
4530 UNICODE_STRING TypeName
;
4531 ULONG Reserved
[22];
4532 } PUBLIC_OBJECT_TYPE_INFORMATION
, *PPUBLIC_OBJECT_TYPE_INFORMATION
;
4534 typedef struct _SECURITY_CLIENT_CONTEXT
{
4535 SECURITY_QUALITY_OF_SERVICE SecurityQos
;
4536 PACCESS_TOKEN ClientToken
;
4537 BOOLEAN DirectlyAccessClientToken
;
4538 BOOLEAN DirectAccessEffectiveOnly
;
4539 BOOLEAN ServerIsRemote
;
4540 TOKEN_CONTROL ClientTokenControl
;
4541 } SECURITY_CLIENT_CONTEXT
, *PSECURITY_CLIENT_CONTEXT
;
4543 #define SYSTEM_PAGE_PRIORITY_BITS 3
4544 #define SYSTEM_PAGE_PRIORITY_LEVELS (1 << SYSTEM_PAGE_PRIORITY_BITS)
4546 typedef struct _KAPC_STATE
{
4547 LIST_ENTRY ApcListHead
[MaximumMode
];
4549 BOOLEAN KernelApcInProgress
;
4550 BOOLEAN KernelApcPending
;
4551 BOOLEAN UserApcPending
;
4552 } KAPC_STATE
, *PKAPC_STATE
, *RESTRICTED_POINTER PRKAPC_STATE
;
4554 #define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
4556 #define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
4558 typedef struct _KQUEUE
{
4559 DISPATCHER_HEADER Header
;
4560 LIST_ENTRY EntryListHead
;
4561 volatile ULONG CurrentCount
;
4563 LIST_ENTRY ThreadListHead
;
4564 } KQUEUE
, *PKQUEUE
, *RESTRICTED_POINTER PRKQUEUE
;
4566 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4572 OUT PRKMUTANT Mutant
,
4573 IN BOOLEAN InitialOwner
);
4579 IN PRKMUTANT Mutant
);
4585 IN OUT PRKMUTANT Mutant
,
4586 IN KPRIORITY Increment
,
4587 IN BOOLEAN Abandoned
,
4607 IN OUT PRKQUEUE Queue
,
4608 IN OUT PLIST_ENTRY Entry
);
4614 IN OUT PRKQUEUE Queue
,
4615 IN OUT PLIST_ENTRY Entry
);
4621 IN OUT PRKQUEUE Queue
,
4622 IN KPROCESSOR_MODE WaitMode
,
4623 IN PLARGE_INTEGER Timeout OPTIONAL
);
4629 IN OUT PKPROCESS Process
);
4641 IN OUT PRKQUEUE Queue
);
4646 KeStackAttachProcess(
4647 IN OUT PKPROCESS Process
,
4648 OUT PKAPC_STATE ApcState
);
4653 KeUnstackDetachProcess(
4654 IN PKAPC_STATE ApcState
);
4659 KeSetIdealProcessorThread(
4660 IN OUT PKTHREAD Thread
,
4661 IN UCHAR Processor
);
4666 KeSetKernelStackSwapEnable(
4673 KeAcquireSpinLockRaiseToSynch(
4674 IN OUT PKSPIN_LOCK SpinLock
);
4678 KeAcquireSpinLockRaiseToSynch(
4679 IN OUT PKSPIN_LOCK SpinLock
);
4682 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4684 #if (NTDDI_VERSION >= NTDDI_WINXP)
4689 KeAcquireQueuedSpinLock(
4690 IN OUT KSPIN_LOCK_QUEUE_NUMBER Number
);
4695 KeReleaseQueuedSpinLock(
4696 IN OUT KSPIN_LOCK_QUEUE_NUMBER Number
,
4702 KeTryToAcquireQueuedSpinLock(
4703 IN KSPIN_LOCK_QUEUE_NUMBER Number
,
4704 OUT PKIRQL OldIrql
);
4706 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4708 #if (NTDDI_VERSION >= NTDDI_VISTA)
4714 OUT PCLIENT_ID ClientId
);
4719 IN OUT PKQUEUE Queue
,
4720 IN KPROCESSOR_MODE WaitMode
,
4721 IN BOOLEAN Alertable
,
4722 IN PLARGE_INTEGER Timeout OPTIONAL
,
4723 OUT PLIST_ENTRY
*EntryArray
,
4726 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4728 #define INVALID_PROCESSOR_INDEX 0xffffffff
4732 KeGetProcessorNumberFromIndex(
4734 OUT PPROCESSOR_NUMBER ProcNumber
);
4738 KeGetProcessorIndexFromNumber(
4739 IN PPROCESSOR_NUMBER ProcNumber
);
4741 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4746 ExQueryPoolBlockSize(
4748 OUT PBOOLEAN QuotaCharged
);
4751 ExAdjustLookasideDepth(
4757 ExDisableResourceBoostLite(
4758 IN PERESOURCE Resource
);
4762 #define ExDisableResourceBoost ExDisableResourceBoostLite
4764 #define EX_PUSH_LOCK ULONG_PTR
4765 #define PEX_PUSH_LOCK PULONG_PTR
4768 ExInitializePushLock (
4769 OUT PEX_PUSH_LOCK PushLock
);
4771 #if (NTDDI_VERSION >= NTDDI_WINXP)
4774 InterlockedPushListSList(
4775 IN OUT PSLIST_HEADER ListHead
,
4776 IN OUT PSLIST_ENTRY List
,
4777 IN OUT PSLIST_ENTRY ListEnd
,
4782 /* #if !defined(_X86AMD64_) FIXME : WHAT ?! */
4785 C_ASSERT(sizeof(ERESOURCE
) == 0x68);
4786 C_ASSERT(FIELD_OFFSET(ERESOURCE
,ActiveCount
) == 0x18);
4787 C_ASSERT(FIELD_OFFSET(ERESOURCE
,Flag
) == 0x1a);
4791 C_ASSERT(sizeof(ERESOURCE
) == 0x38);
4792 C_ASSERT(FIELD_OFFSET(ERESOURCE
,ActiveCount
) == 0x0c);
4793 C_ASSERT(FIELD_OFFSET(ERESOURCE
,Flag
) == 0x0e);
4798 #define TOKEN_HAS_TRAVERSE_PRIVILEGE 0x0001
4799 #define TOKEN_HAS_BACKUP_PRIVILEGE 0x0002
4800 #define TOKEN_HAS_RESTORE_PRIVILEGE 0x0004
4801 #define TOKEN_WRITE_RESTRICTED 0x0008
4802 #define TOKEN_IS_RESTRICTED 0x0010
4803 #define TOKEN_SESSION_NOT_REFERENCED 0x0020
4804 #define TOKEN_SANDBOX_INERT 0x0040
4805 #define TOKEN_HAS_IMPERSONATE_PRIVILEGE 0x0080
4806 #define SE_BACKUP_PRIVILEGES_CHECKED 0x0100
4807 #define TOKEN_VIRTUALIZE_ALLOWED 0x0200
4808 #define TOKEN_VIRTUALIZE_ENABLED 0x0400
4809 #define TOKEN_IS_FILTERED 0x0800
4810 #define TOKEN_UIACCESS 0x1000
4811 #define TOKEN_NOT_LOW 0x2000
4813 typedef struct _SE_EXPORTS
{
4814 LUID SeCreateTokenPrivilege
;
4815 LUID SeAssignPrimaryTokenPrivilege
;
4816 LUID SeLockMemoryPrivilege
;
4817 LUID SeIncreaseQuotaPrivilege
;
4818 LUID SeUnsolicitedInputPrivilege
;
4819 LUID SeTcbPrivilege
;
4820 LUID SeSecurityPrivilege
;
4821 LUID SeTakeOwnershipPrivilege
;
4822 LUID SeLoadDriverPrivilege
;
4823 LUID SeCreatePagefilePrivilege
;
4824 LUID SeIncreaseBasePriorityPrivilege
;
4825 LUID SeSystemProfilePrivilege
;
4826 LUID SeSystemtimePrivilege
;
4827 LUID SeProfileSingleProcessPrivilege
;
4828 LUID SeCreatePermanentPrivilege
;
4829 LUID SeBackupPrivilege
;
4830 LUID SeRestorePrivilege
;
4831 LUID SeShutdownPrivilege
;
4832 LUID SeDebugPrivilege
;
4833 LUID SeAuditPrivilege
;
4834 LUID SeSystemEnvironmentPrivilege
;
4835 LUID SeChangeNotifyPrivilege
;
4836 LUID SeRemoteShutdownPrivilege
;
4840 PSID SeCreatorOwnerSid
;
4841 PSID SeCreatorGroupSid
;
4842 PSID SeNtAuthoritySid
;
4846 PSID SeInteractiveSid
;
4847 PSID SeLocalSystemSid
;
4848 PSID SeAliasAdminsSid
;
4849 PSID SeAliasUsersSid
;
4850 PSID SeAliasGuestsSid
;
4851 PSID SeAliasPowerUsersSid
;
4852 PSID SeAliasAccountOpsSid
;
4853 PSID SeAliasSystemOpsSid
;
4854 PSID SeAliasPrintOpsSid
;
4855 PSID SeAliasBackupOpsSid
;
4856 PSID SeAuthenticatedUsersSid
;
4857 PSID SeRestrictedSid
;
4858 PSID SeAnonymousLogonSid
;
4859 LUID SeUndockPrivilege
;
4860 LUID SeSyncAgentPrivilege
;
4861 LUID SeEnableDelegationPrivilege
;
4862 PSID SeLocalServiceSid
;
4863 PSID SeNetworkServiceSid
;
4864 LUID SeManageVolumePrivilege
;
4865 LUID SeImpersonatePrivilege
;
4866 LUID SeCreateGlobalPrivilege
;
4867 LUID SeTrustedCredManAccessPrivilege
;
4868 LUID SeRelabelPrivilege
;
4869 LUID SeIncreaseWorkingSetPrivilege
;
4870 LUID SeTimeZonePrivilege
;
4871 LUID SeCreateSymbolicLinkPrivilege
;
4873 PSID SeUntrustedMandatorySid
;
4874 PSID SeLowMandatorySid
;
4875 PSID SeMediumMandatorySid
;
4876 PSID SeHighMandatorySid
;
4877 PSID SeSystemMandatorySid
;
4878 PSID SeOwnerRightsSid
;
4879 } SE_EXPORTS
, *PSE_EXPORTS
;
4882 (NTAPI
*PSE_LOGON_SESSION_TERMINATED_ROUTINE
)(
4885 #define SeLengthSid( Sid ) \
4886 (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
4888 #define SeDeleteClientSecurity(C) { \
4889 if (SeTokenType((C)->ClientToken) == TokenPrimary) { \
4890 PsDereferencePrimaryToken( (C)->ClientToken ); \
4892 PsDereferenceImpersonationToken( (C)->ClientToken ); \
4896 #define SeStopImpersonatingClient() PsRevertToSelf()
4898 #define SeQuerySubjectContextToken( SubjectContext ) \
4899 ( ARGUMENT_PRESENT( \
4900 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken \
4902 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken : \
4903 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
4905 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4910 SeReleaseSubjectContext(
4911 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
);
4917 IN OUT PPRIVILEGE_SET RequiredPrivileges
,
4918 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
4919 IN KPROCESSOR_MODE AccessMode
);
4924 SeOpenObjectAuditAlarm(
4925 IN PUNICODE_STRING ObjectTypeName
,
4926 IN PVOID Object OPTIONAL
,
4927 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL
,
4928 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4929 IN PACCESS_STATE AccessState
,
4930 IN BOOLEAN ObjectCreated
,
4931 IN BOOLEAN AccessGranted
,
4932 IN KPROCESSOR_MODE AccessMode
,
4933 OUT PBOOLEAN GenerateOnClose
);
4938 SeOpenObjectForDeleteAuditAlarm(
4939 IN PUNICODE_STRING ObjectTypeName
,
4940 IN PVOID Object OPTIONAL
,
4941 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL
,
4942 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
4943 IN PACCESS_STATE AccessState
,
4944 IN BOOLEAN ObjectCreated
,
4945 IN BOOLEAN AccessGranted
,
4946 IN KPROCESSOR_MODE AccessMode
,
4947 OUT PBOOLEAN GenerateOnClose
);
4952 SeDeleteObjectAuditAlarm(
4960 IN PACCESS_TOKEN Token
);
4966 IN PACCESS_TOKEN Token
);
4971 SeTokenIsRestricted(
4972 IN PACCESS_TOKEN Token
);
4977 SeQueryAuthenticationIdToken(
4978 IN PACCESS_TOKEN Token
,
4979 OUT PLUID AuthenticationId
);
4984 SeQuerySessionIdToken(
4985 IN PACCESS_TOKEN Token
,
4986 OUT PULONG SessionId
);
4991 SeCreateClientSecurity(
4992 IN PETHREAD ClientThread
,
4993 IN PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos
,
4994 IN BOOLEAN RemoteSession
,
4995 OUT PSECURITY_CLIENT_CONTEXT ClientContext
);
5000 SeImpersonateClient(
5001 IN PSECURITY_CLIENT_CONTEXT ClientContext
,
5002 IN PETHREAD ServerThread OPTIONAL
);
5007 SeImpersonateClientEx(
5008 IN PSECURITY_CLIENT_CONTEXT ClientContext
,
5009 IN PETHREAD ServerThread OPTIONAL
);
5014 SeCreateClientSecurityFromSubjectContext(
5015 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
5016 IN PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos
,
5017 IN BOOLEAN ServerIsRemote
,
5018 OUT PSECURITY_CLIENT_CONTEXT ClientContext
);
5023 SeQuerySecurityDescriptorInfo(
5024 IN PSECURITY_INFORMATION SecurityInformation
,
5025 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
5026 IN OUT PULONG Length
,
5027 IN OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
);
5032 SeSetSecurityDescriptorInfo(
5033 IN PVOID Object OPTIONAL
,
5034 IN PSECURITY_INFORMATION SecurityInformation
,
5035 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5036 IN OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
5037 IN POOL_TYPE PoolType
,
5038 IN PGENERIC_MAPPING GenericMapping
);
5043 SeSetSecurityDescriptorInfoEx(
5044 IN PVOID Object OPTIONAL
,
5045 IN PSECURITY_INFORMATION SecurityInformation
,
5046 IN PSECURITY_DESCRIPTOR ModificationDescriptor
,
5047 IN OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
5048 IN ULONG AutoInheritFlags
,
5049 IN POOL_TYPE PoolType
,
5050 IN PGENERIC_MAPPING GenericMapping
);
5056 IN OUT PACCESS_STATE AccessState
,
5057 IN PPRIVILEGE_SET Privileges
);
5062 SeAuditingFileEvents(
5063 IN BOOLEAN AccessGranted
,
5064 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
5069 SeAuditingFileOrGlobalEvents(
5070 IN BOOLEAN AccessGranted
,
5071 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5072 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
);
5076 SeSetAccessStateGenericMapping(
5077 IN OUT PACCESS_STATE AccessState
,
5078 IN PGENERIC_MAPPING GenericMapping
);
5083 SeRegisterLogonSessionTerminatedRoutine(
5084 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
);
5089 SeUnregisterLogonSessionTerminatedRoutine(
5090 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
);
5095 SeMarkLogonSessionForTerminationNotification(
5101 SeQueryInformationToken(
5102 IN PACCESS_TOKEN Token
,
5103 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
5104 OUT PVOID
*TokenInformation
);
5106 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5108 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
5112 SeAuditingHardLinkEvents(
5113 IN BOOLEAN AccessGranted
,
5114 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
5117 #if (NTDDI_VERSION >= NTDDI_WINXP)
5123 IN PACCESS_TOKEN ExistingToken
,
5125 IN PTOKEN_GROUPS SidsToDisable OPTIONAL
,
5126 IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL
,
5127 IN PTOKEN_GROUPS RestrictedSids OPTIONAL
,
5128 OUT PACCESS_TOKEN
*FilteredToken
);
5133 SeAuditHardLinkCreation(
5134 IN PUNICODE_STRING FileName
,
5135 IN PUNICODE_STRING LinkName
,
5136 IN BOOLEAN bSuccess
);
5138 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5140 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
5145 SeAuditingFileEventsWithContext(
5146 IN BOOLEAN AccessGranted
,
5147 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5148 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL
);
5153 SeAuditingHardLinkEventsWithContext(
5154 IN BOOLEAN AccessGranted
,
5155 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5156 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL
);
5160 #if (NTDDI_VERSION >= NTDDI_VISTA)
5165 SeOpenObjectAuditAlarmWithTransaction(
5166 IN PUNICODE_STRING ObjectTypeName
,
5167 IN PVOID Object OPTIONAL
,
5168 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL
,
5169 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5170 IN PACCESS_STATE AccessState
,
5171 IN BOOLEAN ObjectCreated
,
5172 IN BOOLEAN AccessGranted
,
5173 IN KPROCESSOR_MODE AccessMode
,
5174 IN GUID
*TransactionId OPTIONAL
,
5175 OUT PBOOLEAN GenerateOnClose
);
5180 SeOpenObjectForDeleteAuditAlarmWithTransaction(
5181 IN PUNICODE_STRING ObjectTypeName
,
5182 IN PVOID Object OPTIONAL
,
5183 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL
,
5184 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5185 IN PACCESS_STATE AccessState
,
5186 IN BOOLEAN ObjectCreated
,
5187 IN BOOLEAN AccessGranted
,
5188 IN KPROCESSOR_MODE AccessMode
,
5189 IN GUID
*TransactionId OPTIONAL
,
5190 OUT PBOOLEAN GenerateOnClose
);
5197 IN PACCESS_TOKEN Token
,
5198 IN ACCESS_MASK DesiredAccess
,
5199 IN BOOLEAN AccessGranted
,
5200 OUT PBOOLEAN GenerateAudit
,
5201 OUT PBOOLEAN GenerateAlarm
);
5206 SeDeleteObjectAuditAlarmWithTransaction(
5209 IN GUID
*TransactionId OPTIONAL
);
5214 SeQueryTokenIntegrity(
5215 IN PACCESS_TOKEN Token
,
5216 IN OUT PSID_AND_ATTRIBUTES IntegritySA
);
5221 SeSetSessionIdToken(
5222 IN PACCESS_TOKEN Token
,
5223 IN ULONG SessionId
);
5228 SeAuditHardLinkCreationWithTransaction(
5229 IN PUNICODE_STRING FileName
,
5230 IN PUNICODE_STRING LinkName
,
5231 IN BOOLEAN bSuccess
,
5232 IN GUID
*TransactionId OPTIONAL
);
5237 SeAuditTransactionStateChange(
5238 IN GUID
*TransactionId
,
5239 IN GUID
*ResourceManagerId
,
5240 IN ULONG NewTransactionState
);
5242 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5244 #if (NTDDI_VERSION >= NTDDI_VISTA || (NTDDI_VERSION >= NTDDI_WINXPSP2 && NTDDI_VERSION < NTDDI_WS03))
5248 SeTokenIsWriteRestricted(
5249 IN PACCESS_TOKEN Token
);
5252 #if (NTDDI_VERSION >= NTDDI_WIN7)
5257 SeAuditingAnyFileEventsWithContext(
5258 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5259 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL
);
5264 SeExamineGlobalSacl(
5265 IN PUNICODE_STRING ObjectType
,
5266 IN PACCESS_TOKEN Token
,
5267 IN ACCESS_MASK DesiredAccess
,
5268 IN BOOLEAN AccessGranted
,
5269 IN OUT PBOOLEAN GenerateAudit
,
5270 IN OUT PBOOLEAN GenerateAlarm OPTIONAL
);
5275 SeMaximumAuditMaskFromGlobalSacl(
5276 IN PUNICODE_STRING ObjectTypeName OPTIONAL
,
5277 IN ACCESS_MASK GrantedAccess
,
5278 IN PACCESS_TOKEN Token
,
5279 IN OUT PACCESS_MASK AuditMask
);
5285 SeReportSecurityEventWithSubCategory(
5287 IN PUNICODE_STRING SourceName
,
5288 IN PSID UserSid OPTIONAL
,
5289 IN PSE_ADT_PARAMETER_ARRAY AuditParameters
,
5290 IN ULONG AuditSubcategoryId
);
5294 SeAccessCheckFromState(
5295 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5296 IN PTOKEN_ACCESS_INFORMATION PrimaryTokenInformation
,
5297 IN PTOKEN_ACCESS_INFORMATION ClientTokenInformation OPTIONAL
,
5298 IN ACCESS_MASK DesiredAccess
,
5299 IN ACCESS_MASK PreviouslyGrantedAccess
,
5300 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
5301 IN PGENERIC_MAPPING GenericMapping
,
5302 IN KPROCESSOR_MODE AccessMode
,
5303 OUT PACCESS_MASK GrantedAccess
,
5304 OUT PNTSTATUS AccessStatus
);
5310 IN PPRIVILEGE_SET Privileges
);
5314 SeLocateProcessImageName(
5315 IN OUT PEPROCESS Process
,
5316 OUT PUNICODE_STRING
*pImageFileName
);
5318 extern NTKERNELAPI PSE_EXPORTS SeExports
;
5320 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5325 PsReferenceImpersonationToken(
5326 IN OUT PETHREAD Thread
,
5327 OUT PBOOLEAN CopyOnOpen
,
5328 OUT PBOOLEAN EffectiveOnly
,
5329 OUT PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel
);
5334 PsGetProcessExitTime(
5340 PsIsThreadTerminating(
5341 IN PETHREAD Thread
);
5346 PsImpersonateClient(
5347 IN OUT PETHREAD Thread
,
5348 IN PACCESS_TOKEN Token
,
5349 IN BOOLEAN CopyOnOpen
,
5350 IN BOOLEAN EffectiveOnly
,
5351 IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
);
5356 PsDisableImpersonation(
5357 IN OUT PETHREAD Thread
,
5358 IN OUT PSE_IMPERSONATION_STATE ImpersonationState
);
5363 PsRestoreImpersonation(
5365 IN PSE_IMPERSONATION_STATE ImpersonationState
);
5377 IN PEPROCESS Process
,
5378 IN POOL_TYPE PoolType
,
5379 IN ULONG_PTR Amount
);
5385 IN PEPROCESS Process
,
5386 IN POOL_TYPE PoolType
,
5387 IN ULONG_PTR Amount
);
5392 PsAssignImpersonationToken(
5394 IN HANDLE Token OPTIONAL
);
5399 PsReferencePrimaryToken(
5400 IN OUT PEPROCESS Process
);
5402 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5404 #if (NTDDI_VERSION >= NTDDI_WINXP)
5409 PsDereferencePrimaryToken(
5410 IN PACCESS_TOKEN PrimaryToken
);
5415 PsDereferenceImpersonationToken(
5416 IN PACCESS_TOKEN ImpersonationToken
);
5421 PsChargeProcessPoolQuota(
5422 IN PEPROCESS Process
,
5423 IN POOL_TYPE PoolType
,
5424 IN ULONG_PTR Amount
);
5430 IN PETHREAD Thread
);
5437 PsLookupProcessByProcessId(
5438 IN HANDLE ProcessId
,
5439 OUT PEPROCESS
*Process
);
5444 PsLookupThreadByThreadId(
5445 IN HANDLE UniqueThreadId
,
5446 OUT PETHREAD
*Thread
);
5448 #define IO_OPEN_PAGING_FILE 0x0002
5449 #define IO_OPEN_TARGET_DIRECTORY 0x0004
5450 #define IO_STOP_ON_SYMLINK 0x0008
5451 #define IO_MM_PAGING_FILE 0x0010
5454 (NTAPI
*PDRIVER_FS_NOTIFICATION
) (
5455 IN PDEVICE_OBJECT DeviceObject
,
5456 IN BOOLEAN FsActive
);
5458 typedef enum _FS_FILTER_SECTION_SYNC_TYPE
{
5460 SyncTypeCreateSection
5461 } FS_FILTER_SECTION_SYNC_TYPE
, *PFS_FILTER_SECTION_SYNC_TYPE
;
5463 typedef enum _FS_FILTER_STREAM_FO_NOTIFICATION_TYPE
{
5464 NotifyTypeCreate
= 0,
5466 } FS_FILTER_STREAM_FO_NOTIFICATION_TYPE
, *PFS_FILTER_STREAM_FO_NOTIFICATION_TYPE
;
5468 typedef union _FS_FILTER_PARAMETERS
{
5470 PLARGE_INTEGER EndingOffset
;
5471 PERESOURCE
*ResourceToRelease
;
5472 } AcquireForModifiedPageWriter
;
5474 PERESOURCE ResourceToRelease
;
5475 } ReleaseForModifiedPageWriter
;
5477 FS_FILTER_SECTION_SYNC_TYPE SyncType
;
5478 ULONG PageProtection
;
5479 } AcquireForSectionSynchronization
;
5481 FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType
;
5482 BOOLEAN POINTER_ALIGNMENT SafeToRecurse
;
5483 } NotifyStreamFileObject
;
5491 } FS_FILTER_PARAMETERS
, *PFS_FILTER_PARAMETERS
;
5493 #define FS_FILTER_ACQUIRE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-1
5494 #define FS_FILTER_RELEASE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-2
5495 #define FS_FILTER_ACQUIRE_FOR_MOD_WRITE (UCHAR)-3
5496 #define FS_FILTER_RELEASE_FOR_MOD_WRITE (UCHAR)-4
5497 #define FS_FILTER_ACQUIRE_FOR_CC_FLUSH (UCHAR)-5
5498 #define FS_FILTER_RELEASE_FOR_CC_FLUSH (UCHAR)-6
5500 typedef struct _FS_FILTER_CALLBACK_DATA
{
5501 ULONG SizeOfFsFilterCallbackData
;
5504 struct _DEVICE_OBJECT
*DeviceObject
;
5505 struct _FILE_OBJECT
*FileObject
;
5506 FS_FILTER_PARAMETERS Parameters
;
5507 } FS_FILTER_CALLBACK_DATA
, *PFS_FILTER_CALLBACK_DATA
;
5510 (NTAPI
*PFS_FILTER_CALLBACK
) (
5511 IN PFS_FILTER_CALLBACK_DATA Data
,
5512 OUT PVOID
*CompletionContext
);
5515 (NTAPI
*PFS_FILTER_COMPLETION_CALLBACK
) (
5516 IN PFS_FILTER_CALLBACK_DATA Data
,
5517 IN NTSTATUS OperationStatus
,
5518 IN PVOID CompletionContext
);
5520 typedef struct _FS_FILTER_CALLBACKS
{
5521 ULONG SizeOfFsFilterCallbacks
;
5523 PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization
;
5524 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization
;
5525 PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization
;
5526 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization
;
5527 PFS_FILTER_CALLBACK PreAcquireForCcFlush
;
5528 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush
;
5529 PFS_FILTER_CALLBACK PreReleaseForCcFlush
;
5530 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush
;
5531 PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter
;
5532 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter
;
5533 PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter
;
5534 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter
;
5535 } FS_FILTER_CALLBACKS
, *PFS_FILTER_CALLBACKS
;
5537 #if (NTDDI_VERSION >= NTDDI_WINXP)
5541 FsRtlRegisterFileSystemFilterCallbacks(
5542 IN
struct _DRIVER_OBJECT
*FilterDriverObject
,
5543 IN PFS_FILTER_CALLBACKS Callbacks
);
5544 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5546 #if (NTDDI_VERSION >= NTDDI_VISTA)
5550 FsRtlNotifyStreamFileObject(
5551 IN
struct _FILE_OBJECT
* StreamFileObject
,
5552 IN
struct _DEVICE_OBJECT
*DeviceObjectHint OPTIONAL
,
5553 IN FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType
,
5554 IN BOOLEAN SafeToRecurse
);
5555 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5557 #define DO_VERIFY_VOLUME 0x00000002
5558 #define DO_BUFFERED_IO 0x00000004
5559 #define DO_EXCLUSIVE 0x00000008
5560 #define DO_DIRECT_IO 0x00000010
5561 #define DO_MAP_IO_BUFFER 0x00000020
5562 #define DO_DEVICE_HAS_NAME 0x00000040
5563 #define DO_DEVICE_INITIALIZING 0x00000080
5564 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
5565 #define DO_LONG_TERM_REQUESTS 0x00000200
5566 #define DO_NEVER_LAST_DEVICE 0x00000400
5567 #define DO_SHUTDOWN_REGISTERED 0x00000800
5568 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
5569 #define DO_POWER_PAGABLE 0x00002000
5570 #define DO_POWER_INRUSH 0x00004000
5571 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
5572 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
5573 #define DO_FORCE_NEITHER_IO 0x00080000
5574 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
5575 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
5576 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
5577 #define DO_DISALLOW_EXECUTE 0x00800000
5579 extern KSPIN_LOCK IoStatisticsLock
;
5580 extern ULONG IoReadOperationCount
;
5581 extern ULONG IoWriteOperationCount
;
5582 extern ULONG IoOtherOperationCount
;
5583 extern LARGE_INTEGER IoReadTransferCount
;
5584 extern LARGE_INTEGER IoWriteTransferCount
;
5585 extern LARGE_INTEGER IoOtherTransferCount
;
5587 #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64
5588 #define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024
5590 #if (NTDDI_VERSION == NTDDI_WIN2K)
5594 IoRegisterFsRegistrationChangeEx(
5595 IN PDRIVER_OBJECT DriverObject
,
5596 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
);
5599 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5604 IoAcquireVpbSpinLock(
5610 IoCheckDesiredAccess(
5611 IN OUT PACCESS_MASK DesiredAccess
,
5612 IN ACCESS_MASK GrantedAccess
);
5617 IoCheckEaBufferValidity(
5618 IN PFILE_FULL_EA_INFORMATION EaBuffer
,
5620 OUT PULONG ErrorOffset
);
5625 IoCheckFunctionAccess(
5626 IN ACCESS_MASK GrantedAccess
,
5627 IN UCHAR MajorFunction
,
5628 IN UCHAR MinorFunction
,
5629 IN ULONG IoControlCode
,
5630 IN PVOID Argument1 OPTIONAL
,
5631 IN PVOID Argument2 OPTIONAL
);
5636 IoCheckQuerySetFileInformation(
5637 IN FILE_INFORMATION_CLASS FileInformationClass
,
5639 IN BOOLEAN SetOperation
);
5644 IoCheckQuerySetVolumeInformation(
5645 IN FS_INFORMATION_CLASS FsInformationClass
,
5647 IN BOOLEAN SetOperation
);
5652 IoCheckQuotaBufferValidity(
5653 IN PFILE_QUOTA_INFORMATION QuotaBuffer
,
5654 IN ULONG QuotaLength
,
5655 OUT PULONG ErrorOffset
);
5660 IoCreateStreamFileObject(
5661 IN PFILE_OBJECT FileObject OPTIONAL
,
5662 IN PDEVICE_OBJECT DeviceObject OPTIONAL
);
5667 IoCreateStreamFileObjectLite(
5668 IN PFILE_OBJECT FileObject OPTIONAL
,
5669 IN PDEVICE_OBJECT DeviceObject OPTIONAL
);
5674 IoFastQueryNetworkAttributes(
5675 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5676 IN ACCESS_MASK DesiredAccess
,
5677 IN ULONG OpenOptions
,
5678 OUT PIO_STATUS_BLOCK IoStatus
,
5679 OUT PFILE_NETWORK_OPEN_INFORMATION Buffer
);
5685 IN PFILE_OBJECT FileObject
,
5687 IN PLARGE_INTEGER Offset
,
5689 OUT PIO_STATUS_BLOCK IoStatusBlock
);
5694 IoGetBaseFileSystemDeviceObject(
5695 IN PFILE_OBJECT FileObject
);
5698 PCONFIGURATION_INFORMATION
5700 IoGetConfigurationInformation(
5706 IoGetRequestorProcessId(
5712 IoGetRequestorProcess(
5724 IoIsOperationSynchronous(
5731 IN PETHREAD Thread
);
5736 IoIsValidNameGraftingBuffer(
5738 IN PREPARSE_DATA_BUFFER ReparseBuffer
);
5743 IoQueryFileInformation(
5744 IN PFILE_OBJECT FileObject
,
5745 IN FILE_INFORMATION_CLASS FileInformationClass
,
5747 OUT PVOID FileInformation
,
5748 OUT PULONG ReturnedLength
);
5753 IoQueryVolumeInformation(
5754 IN PFILE_OBJECT FileObject
,
5755 IN FS_INFORMATION_CLASS FsInformationClass
,
5757 OUT PVOID FsInformation
,
5758 OUT PULONG ReturnedLength
);
5769 IoRegisterFileSystem(
5770 IN PDEVICE_OBJECT DeviceObject
);
5775 IoRegisterFsRegistrationChange(
5776 IN PDRIVER_OBJECT DriverObject
,
5777 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
);
5782 IoReleaseVpbSpinLock(
5788 IoSetDeviceToVerify(
5790 IN PDEVICE_OBJECT DeviceObject OPTIONAL
);
5796 IN PFILE_OBJECT FileObject
,
5797 IN FILE_INFORMATION_CLASS FileInformationClass
,
5799 IN PVOID FileInformation
);
5805 IN PIRP Irp OPTIONAL
);
5810 IoSynchronousPageWrite(
5811 IN PFILE_OBJECT FileObject
,
5813 IN PLARGE_INTEGER FileOffset
,
5815 OUT PIO_STATUS_BLOCK IoStatusBlock
);
5821 IN PETHREAD Thread
);
5826 IoUnregisterFileSystem(
5827 IN PDEVICE_OBJECT DeviceObject
);
5832 IoUnregisterFsRegistrationChange(
5833 IN PDRIVER_OBJECT DriverObject
,
5834 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
);
5840 IN PDEVICE_OBJECT DeviceObject
,
5841 IN BOOLEAN AllowRawMount
);
5846 IoGetRequestorSessionId(
5848 OUT PULONG pSessionId
);
5850 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5852 #if (NTDDI_VERSION >= NTDDI_WINXP)
5857 IoCreateStreamFileObjectEx(
5858 IN PFILE_OBJECT FileObject OPTIONAL
,
5859 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
5860 OUT PHANDLE FileObjectHandle OPTIONAL
);
5865 IoQueryFileDosDeviceName(
5866 IN PFILE_OBJECT FileObject
,
5867 OUT POBJECT_NAME_INFORMATION
*ObjectNameInformation
);
5872 IoEnumerateDeviceObjectList(
5873 IN PDRIVER_OBJECT DriverObject
,
5874 OUT PDEVICE_OBJECT
*DeviceObjectList
,
5875 IN ULONG DeviceObjectListSize
,
5876 OUT PULONG ActualNumberDeviceObjects
);
5881 IoGetLowerDeviceObject(
5882 IN PDEVICE_OBJECT DeviceObject
);
5887 IoGetDeviceAttachmentBaseRef(
5888 IN PDEVICE_OBJECT DeviceObject
);
5893 IoGetDiskDeviceObject(
5894 IN PDEVICE_OBJECT FileSystemDeviceObject
,
5895 OUT PDEVICE_OBJECT
*DiskDeviceObject
);
5899 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
5903 IoEnumerateRegisteredFiltersList(
5904 OUT PDRIVER_OBJECT
*DriverObjectList
,
5905 IN ULONG DriverObjectListSize
,
5906 OUT PULONG ActualNumberDriverObjects
);
5909 #if (NTDDI_VERSION >= NTDDI_VISTA)
5913 IoInitializePriorityInfo(
5914 IN PIO_PRIORITY_INFO PriorityInfo
)
5916 PriorityInfo
->Size
= sizeof(IO_PRIORITY_INFO
);
5917 PriorityInfo
->ThreadPriority
= 0xffff;
5918 PriorityInfo
->IoPriority
= IoPriorityNormal
;
5919 PriorityInfo
->PagePriority
= 0;
5923 #if (NTDDI_VERSION >= NTDDI_WIN7)
5928 IoRegisterFsRegistrationChangeMountAware(
5929 IN PDRIVER_OBJECT DriverObject
,
5930 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
,
5931 IN BOOLEAN SynchronizeWithMounts
);
5936 IoReplaceFileObjectName(
5937 IN PFILE_OBJECT FileObject
,
5938 IN PWSTR NewFileName
,
5939 IN USHORT FileNameLength
);
5943 #define IoIsFileOpenedExclusively(FileObject) ( \
5945 (FileObject)->SharedRead || \
5946 (FileObject)->SharedWrite || \
5947 (FileObject)->SharedDelete \
5951 #if (NTDDI_VERSION >= NTDDI_VISTA)
5952 typedef struct _IO_PRIORITY_INFO
{
5954 ULONG ThreadPriority
;
5956 IO_PRIORITY_HINT IoPriority
;
5957 } IO_PRIORITY_INFO
, *PIO_PRIORITY_INFO
;
5960 #define PO_CB_SYSTEM_POWER_POLICY 0
5961 #define PO_CB_AC_STATUS 1
5962 #define PO_CB_BUTTON_COLLISION 2
5963 #define PO_CB_SYSTEM_STATE_LOCK 3
5964 #define PO_CB_LID_SWITCH_STATE 4
5965 #define PO_CB_PROCESSOR_POWER_POLICY 5
5967 #if (NTDDI_VERSION >= NTDDI_WINXP)
5971 PoQueueShutdownWorkItem(
5972 IN OUT PWORK_QUEUE_ITEM WorkItem
);
5976 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5977 //DECLSPEC_DEPRECATED_DDK
5981 HalGetDmaAlignmentRequirement(
5986 #if defined(_M_IX86) || defined(_M_AMD64)
5987 #define HalGetDmaAlignmentRequirement() 1L
5990 typedef enum _MMFLUSH_TYPE
{
5995 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6000 MmIsRecursiveIoFault(
6006 MmForceSectionClosed(
6007 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
6008 IN BOOLEAN DelayClose
);
6013 MmFlushImageSection(
6014 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
6015 IN MMFLUSH_TYPE FlushType
);
6020 MmCanFileBeTruncated(
6021 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
6022 IN PLARGE_INTEGER NewFileSize OPTIONAL
);
6027 MmSetAddressRangeModified(
6033 typedef struct _READ_LIST
{
6034 PFILE_OBJECT FileObject
;
6035 ULONG NumberOfEntries
;
6037 FILE_SEGMENT_ELEMENT List
[ANYSIZE_ARRAY
];
6038 } READ_LIST
, *PREAD_LIST
;
6040 #if (NTDDI_VERSION >= NTDDI_WINXP)
6041 typedef union _MM_PREFETCH_FLAGS
{
6043 ULONG Priority
: SYSTEM_PAGE_PRIORITY_BITS
;
6044 ULONG RepurposePriority
: SYSTEM_PAGE_PRIORITY_BITS
;
6047 } MM_PREFETCH_FLAGS
, *PMM_PREFETCH_FLAGS
;
6049 #define MM_PREFETCH_FLAGS_MASK ((1 << (2*SYSTEM_PAGE_PRIORITY_BITS)) - 1)
6055 IN ULONG NumberOfLists
,
6056 IN PREAD_LIST
*ReadLists
);
6059 #if (NTDDI_VERSION >= NTDDI_VISTA)
6063 MmDoesFileHaveUserWritableReferences(
6064 IN PSECTION_OBJECT_POINTERS SectionPointer
);
6067 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6074 IN OUT PACCESS_STATE PassedAccessState OPTIONAL
,
6075 IN ACCESS_MASK DesiredAccess OPTIONAL
,
6076 IN ULONG ObjectPointerBias
,
6077 OUT PVOID
*NewObject OPTIONAL
,
6078 OUT PHANDLE Handle OPTIONAL
);
6083 ObOpenObjectByPointer(
6085 IN ULONG HandleAttributes
,
6086 IN PACCESS_STATE PassedAccessState OPTIONAL
,
6087 IN ACCESS_MASK DesiredAccess OPTIONAL
,
6088 IN POBJECT_TYPE ObjectType OPTIONAL
,
6089 IN KPROCESSOR_MODE AccessMode
,
6090 OUT PHANDLE Handle
);
6095 ObMakeTemporaryObject(
6103 OUT POBJECT_NAME_INFORMATION ObjectNameInfo OPTIONAL
,
6105 OUT PULONG ReturnLength
);
6110 ObQueryObjectAuditingByHandle(
6112 OUT PBOOLEAN GenerateOnClose
);
6116 #if (NTDDI_VERSION >= NTDDI_VISTA)
6124 #if (NTDDI_VERSION >= NTDDI_WIN7)
6128 ObOpenObjectByPointerWithTag(
6130 IN ULONG HandleAttributes
,
6131 IN PACCESS_STATE PassedAccessState OPTIONAL
,
6132 IN ACCESS_MASK DesiredAccess
,
6133 IN POBJECT_TYPE ObjectType OPTIONAL
,
6134 IN KPROCESSOR_MODE AccessMode
,
6136 OUT PHANDLE Handle
);
6145 typedef enum _FAST_IO_POSSIBLE
{
6146 FastIoIsNotPossible
= 0,
6148 FastIoIsQuestionable
6151 typedef struct _FSRTL_COMMON_FCB_HEADER
{
6152 CSHORT NodeTypeCode
;
6153 CSHORT NodeByteSize
;
6155 UCHAR IsFastIoPossible
;
6159 PERESOURCE Resource
;
6160 PERESOURCE PagingIoResource
;
6161 LARGE_INTEGER AllocationSize
;
6162 LARGE_INTEGER FileSize
;
6163 LARGE_INTEGER ValidDataLength
;
6164 } FSRTL_COMMON_FCB_HEADER
, *PFSRTL_COMMON_FCB_HEADER
;
6167 typedef struct _FSRTL_ADVANCED_FCB_HEADER
:FSRTL_COMMON_FCB_HEADER
{
6168 #else /* __cplusplus */
6169 typedef struct _FSRTL_ADVANCED_FCB_HEADER
{
6170 FSRTL_COMMON_FCB_HEADER DUMMYSTRUCTNAME
;
6171 #endif /* __cplusplus */
6172 PFAST_MUTEX FastMutex
;
6173 LIST_ENTRY FilterContexts
;
6174 #if (NTDDI_VERSION >= NTDDI_VISTA)
6175 EX_PUSH_LOCK PushLock
;
6176 PVOID
*FileContextSupportPointer
;
6178 } FSRTL_ADVANCED_FCB_HEADER
, *PFSRTL_ADVANCED_FCB_HEADER
;
6180 #define FSRTL_FCB_HEADER_V0 (0x00)
6181 #define FSRTL_FCB_HEADER_V1 (0x01)
6183 #define FSRTL_FLAG_FILE_MODIFIED (0x01)
6184 #define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
6185 #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
6186 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
6187 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
6188 #define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
6189 #define FSRTL_FLAG_ADVANCED_HEADER (0x40)
6190 #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
6192 #define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
6193 #define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02)
6194 #define FSRTL_FLAG2_PURGE_WHEN_MAPPED (0x04)
6195 #define FSRTL_FLAG2_IS_PAGING_FILE (0x08)
6197 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
6198 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
6199 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
6200 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
6201 #define FSRTL_NETWORK1_TOP_LEVEL_IRP ((LONG_PTR)0x05)
6202 #define FSRTL_NETWORK2_TOP_LEVEL_IRP ((LONG_PTR)0x06)
6203 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG ((LONG_PTR)0xFFFF)
6205 typedef struct _EOF_WAIT_BLOCK
{
6206 LIST_ENTRY EofWaitLinks
;
6208 } EOF_WAIT_BLOCK
, *PEOF_WAIT_BLOCK
;
6210 typedef struct _FSRTL_AUXILIARY_BUFFER
{
6215 } FSRTL_AUXILIARY_BUFFER
, *PFSRTL_AUXILIARY_BUFFER
;
6217 #define FSRTL_AUXILIARY_FLAG_DEALLOCATE 0x00000001
6219 typedef struct _FILE_LOCK_INFO
{
6220 LARGE_INTEGER StartingByte
;
6221 LARGE_INTEGER Length
;
6222 BOOLEAN ExclusiveLock
;
6224 PFILE_OBJECT FileObject
;
6226 LARGE_INTEGER EndingByte
;
6227 } FILE_LOCK_INFO
, *PFILE_LOCK_INFO
;
6230 (NTAPI
*PCOMPLETE_LOCK_IRP_ROUTINE
) (
6235 (NTAPI
*PUNLOCK_ROUTINE
) (
6237 IN PFILE_LOCK_INFO FileLockInfo
);
6239 typedef struct _FILE_LOCK
{
6240 PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine
;
6241 PUNLOCK_ROUTINE UnlockRoutine
;
6242 BOOLEAN FastIoIsQuestionable
;
6244 PVOID LockInformation
;
6245 FILE_LOCK_INFO LastReturnedLockInfo
;
6246 PVOID LastReturnedLock
;
6247 LONG
volatile LockRequestsInProgress
;
6248 } FILE_LOCK
, *PFILE_LOCK
;
6250 typedef struct _TUNNEL
{
6252 PRTL_SPLAY_LINKS Cache
;
6253 LIST_ENTRY TimerQueue
;
6257 typedef enum _FSRTL_COMPARISON_RESULT
{
6261 } FSRTL_COMPARISON_RESULT
;
6263 #define FSRTL_FAT_LEGAL 0x01
6264 #define FSRTL_HPFS_LEGAL 0x02
6265 #define FSRTL_NTFS_LEGAL 0x04
6266 #define FSRTL_WILD_CHARACTER 0x08
6267 #define FSRTL_OLE_LEGAL 0x10
6268 #define FSRTL_NTFS_STREAM_LEGAL (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL)
6270 typedef struct _BASE_MCB
{
6271 ULONG MaximumPairCount
;
6276 } BASE_MCB
, *PBASE_MCB
;
6278 typedef struct _LARGE_MCB
{
6279 PKGUARDED_MUTEX GuardedMutex
;
6281 } LARGE_MCB
, *PLARGE_MCB
;
6283 #define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
6285 typedef struct _MCB
{
6286 LARGE_MCB DummyFieldThatSizesThisStructureCorrectly
;
6289 typedef PVOID OPLOCK
, *POPLOCK
;
6292 (NTAPI
*POPLOCK_WAIT_COMPLETE_ROUTINE
) (
6297 (NTAPI
*POPLOCK_FS_PREPOST_IRP
) (
6301 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
6302 #define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED 0x00000001
6305 #if (NTDDI_VERSION >= NTDDI_WIN7)
6306 #define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY 0x00000002
6307 #define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK 0x00000004
6308 #define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS 0x00000008
6309 #define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH 0x00000001
6312 #if (NTDDI_VERSION >= NTDDI_WIN7)
6314 typedef struct _OPLOCK_KEY_ECP_CONTEXT
{
6317 } OPLOCK_KEY_ECP_CONTEXT
, *POPLOCK_KEY_ECP_CONTEXT
;
6319 DEFINE_GUID( GUID_ECP_OPLOCK_KEY
, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f );
6323 #define FSRTL_VOLUME_DISMOUNT 1
6324 #define FSRTL_VOLUME_DISMOUNT_FAILED 2
6325 #define FSRTL_VOLUME_LOCK 3
6326 #define FSRTL_VOLUME_LOCK_FAILED 4
6327 #define FSRTL_VOLUME_UNLOCK 5
6328 #define FSRTL_VOLUME_MOUNT 6
6329 #define FSRTL_VOLUME_NEEDS_CHKDSK 7
6330 #define FSRTL_VOLUME_WORM_NEAR_FULL 8
6331 #define FSRTL_VOLUME_WEARING_OUT 9
6332 #define FSRTL_VOLUME_FORCED_CLOSED 10
6333 #define FSRTL_VOLUME_INFO_MAKE_COMPAT 11
6334 #define FSRTL_VOLUME_PREPARING_EJECT 12
6335 #define FSRTL_VOLUME_CHANGE_SIZE 13
6336 #define FSRTL_VOLUME_BACKGROUND_FORMAT 14
6338 typedef PVOID PNOTIFY_SYNC
;
6341 (NTAPI
*PCHECK_FOR_TRAVERSE_ACCESS
) (
6342 IN PVOID NotifyContext
,
6343 IN PVOID TargetContext OPTIONAL
,
6344 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
);
6347 (NTAPI
*PFILTER_REPORT_CHANGE
) (
6348 IN PVOID NotifyContext
,
6349 IN PVOID FilterContext
);
6352 (NTAPI
*PFSRTL_STACK_OVERFLOW_ROUTINE
) (
6356 #if (NTDDI_VERSION >= NTDDI_VISTA)
6358 #define FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED 0x00000001
6359 #define FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED 0x00000002
6360 #define FSRTL_UNC_PROVIDER_FLAGS_DOMAIN_SVC_AWARE 0x00000004
6362 #define FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA 0x00000001
6364 #define FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA 0x00000001
6365 #define FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL 0x00000002
6367 #define FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL 0x00000002
6369 #define FSRTL_VIRTDISK_FULLY_ALLOCATED 0x00000001
6370 #define FSRTL_VIRTDISK_NO_DRIVE_LETTER 0x00000002
6372 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_1
{
6374 } FSRTL_MUP_PROVIDER_INFO_LEVEL_1
, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_1
;
6376 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_2
{
6378 UNICODE_STRING ProviderName
;
6379 } FSRTL_MUP_PROVIDER_INFO_LEVEL_2
, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_2
;
6382 (*PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK
) (
6383 IN OUT PVOID EcpContext
,
6384 IN LPCGUID EcpType
);
6386 typedef struct _ECP_LIST ECP_LIST
, *PECP_LIST
;
6388 typedef ULONG FSRTL_ALLOCATE_ECPLIST_FLAGS
;
6389 typedef ULONG FSRTL_ALLOCATE_ECP_FLAGS
;
6390 typedef ULONG FSRTL_ECP_LOOKASIDE_FLAGS
;
6392 typedef enum _FSRTL_CHANGE_BACKING_TYPE
{
6393 ChangeDataControlArea
,
6394 ChangeImageControlArea
,
6395 ChangeSharedCacheMap
6396 } FSRTL_CHANGE_BACKING_TYPE
, *PFSRTL_CHANGE_BACKING_TYPE
;
6398 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
6400 typedef struct _FSRTL_PER_FILE_CONTEXT
{
6404 PFREE_FUNCTION FreeCallback
;
6405 } FSRTL_PER_FILE_CONTEXT
, *PFSRTL_PER_FILE_CONTEXT
;
6407 typedef struct _FSRTL_PER_STREAM_CONTEXT
{
6411 PFREE_FUNCTION FreeCallback
;
6412 } FSRTL_PER_STREAM_CONTEXT
, *PFSRTL_PER_STREAM_CONTEXT
;
6414 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6416 (*PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS
) (
6417 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader
);
6420 typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT
{
6424 } FSRTL_PER_FILEOBJECT_CONTEXT
, *PFSRTL_PER_FILEOBJECT_CONTEXT
;
6426 #define FsRtlEnterFileSystem KeEnterCriticalRegion
6427 #define FsRtlExitFileSystem KeLeaveCriticalRegion
6429 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_HARD_ERROR 0x1
6430 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_LOG_ENTRY 0x2
6432 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6438 IN PFILE_OBJECT FileObject
,
6439 IN PLARGE_INTEGER FileOffset
,
6444 OUT PIO_STATUS_BLOCK IoStatus
,
6445 IN PDEVICE_OBJECT DeviceObject
);
6451 IN PFILE_OBJECT FileObject
,
6452 IN PLARGE_INTEGER FileOffset
,
6457 OUT PIO_STATUS_BLOCK IoStatus
,
6458 IN PDEVICE_OBJECT DeviceObject
);
6464 IN PFILE_OBJECT FileObject
,
6465 IN PLARGE_INTEGER FileOffset
,
6469 OUT PIO_STATUS_BLOCK IoStatus
,
6470 IN PDEVICE_OBJECT DeviceObject OPTIONAL
);
6475 FsRtlMdlReadCompleteDev(
6476 IN PFILE_OBJECT FileObject
,
6478 IN PDEVICE_OBJECT DeviceObject OPTIONAL
);
6483 FsRtlPrepareMdlWriteDev(
6484 IN PFILE_OBJECT FileObject
,
6485 IN PLARGE_INTEGER FileOffset
,
6489 OUT PIO_STATUS_BLOCK IoStatus
,
6490 IN PDEVICE_OBJECT DeviceObject
);
6495 FsRtlMdlWriteCompleteDev(
6496 IN PFILE_OBJECT FileObject
,
6497 IN PLARGE_INTEGER FileOffset
,
6499 IN PDEVICE_OBJECT DeviceObject
);
6504 FsRtlAcquireFileExclusive(
6505 IN PFILE_OBJECT FileObject
);
6511 IN PFILE_OBJECT FileObject
);
6517 IN PFILE_OBJECT FileObject
,
6518 OUT PLARGE_INTEGER FileSize
);
6523 FsRtlIsTotalDeviceFailure(
6524 IN NTSTATUS Status
);
6529 FsRtlAllocateFileLock(
6530 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL
,
6531 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
);
6537 IN PFILE_LOCK FileLock
);
6542 FsRtlInitializeFileLock(
6543 IN PFILE_LOCK FileLock
,
6544 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL
,
6545 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
);
6550 FsRtlUninitializeFileLock(
6551 IN PFILE_LOCK FileLock
);
6554 FsRtlProcessFileLock:
6557 -STATUS_INVALID_DEVICE_REQUEST
6558 -STATUS_RANGE_NOT_LOCKED from unlock routines.
6559 -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
6560 (redirected IoStatus->Status).
6563 -switch ( Irp->CurrentStackLocation->MinorFunction )
6564 lock: return FsRtlPrivateLock;
6565 unlocksingle: return FsRtlFastUnlockSingle;
6566 unlockall: return FsRtlFastUnlockAll;
6567 unlockallbykey: return FsRtlFastUnlockAllByKey;
6568 default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
6569 return STATUS_INVALID_DEVICE_REQUEST;
6571 -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
6572 -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
6577 FsRtlProcessFileLock(
6578 IN PFILE_LOCK FileLock
,
6580 IN PVOID Context OPTIONAL
);
6583 FsRtlCheckLockForReadAccess:
6585 All this really does is pick out the lock parameters from the irp (io stack
6586 location?), get IoGetRequestorProcess, and pass values on to
6587 FsRtlFastCheckLockForRead.
6592 FsRtlCheckLockForReadAccess(
6593 IN PFILE_LOCK FileLock
,
6597 FsRtlCheckLockForWriteAccess:
6599 All this really does is pick out the lock parameters from the irp (io stack
6600 location?), get IoGetRequestorProcess, and pass values on to
6601 FsRtlFastCheckLockForWrite.
6606 FsRtlCheckLockForWriteAccess(
6607 IN PFILE_LOCK FileLock
,
6613 FsRtlFastCheckLockForRead(
6614 IN PFILE_LOCK FileLock
,
6615 IN PLARGE_INTEGER FileOffset
,
6616 IN PLARGE_INTEGER Length
,
6618 IN PFILE_OBJECT FileObject
,
6624 FsRtlFastCheckLockForWrite(
6625 IN PFILE_LOCK FileLock
,
6626 IN PLARGE_INTEGER FileOffset
,
6627 IN PLARGE_INTEGER Length
,
6629 IN PFILE_OBJECT FileObject
,
6633 FsRtlGetNextFileLock:
6635 ret: NULL if no more locks
6638 FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
6639 FileLock->LastReturnedLock as storage.
6640 LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
6641 list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
6642 calls with Restart = FALSE.
6647 FsRtlGetNextFileLock(
6648 IN PFILE_LOCK FileLock
,
6649 IN BOOLEAN Restart
);
6654 FsRtlFastUnlockSingle(
6655 IN PFILE_LOCK FileLock
,
6656 IN PFILE_OBJECT FileObject
,
6657 IN PLARGE_INTEGER FileOffset
,
6658 IN PLARGE_INTEGER Length
,
6659 IN PEPROCESS Process
,
6661 IN PVOID Context OPTIONAL
,
6662 IN BOOLEAN AlreadySynchronized
);
6668 IN PFILE_LOCK FileLock
,
6669 IN PFILE_OBJECT FileObject
,
6670 IN PEPROCESS Process
,
6671 IN PVOID Context OPTIONAL
);
6676 FsRtlFastUnlockAllByKey(
6677 IN PFILE_LOCK FileLock
,
6678 IN PFILE_OBJECT FileObject
,
6679 IN PEPROCESS Process
,
6681 IN PVOID Context OPTIONAL
);
6686 ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
6689 -Calls IoCompleteRequest if Irp
6690 -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
6696 IN PFILE_LOCK FileLock
,
6697 IN PFILE_OBJECT FileObject
,
6698 IN PLARGE_INTEGER FileOffset
,
6699 IN PLARGE_INTEGER Length
,
6700 IN PEPROCESS Process
,
6702 IN BOOLEAN FailImmediately
,
6703 IN BOOLEAN ExclusiveLock
,
6704 OUT PIO_STATUS_BLOCK IoStatus
,
6705 IN PIRP Irp OPTIONAL
,
6707 IN BOOLEAN AlreadySynchronized
);
6712 FsRtlInitializeTunnelCache(
6718 FsRtlAddToTunnelCache(
6720 IN ULONGLONG DirectoryKey
,
6721 IN PUNICODE_STRING ShortName
,
6722 IN PUNICODE_STRING LongName
,
6723 IN BOOLEAN KeyByShortName
,
6724 IN ULONG DataLength
,
6730 FsRtlFindInTunnelCache(
6732 IN ULONGLONG DirectoryKey
,
6733 IN PUNICODE_STRING Name
,
6734 OUT PUNICODE_STRING ShortName
,
6735 OUT PUNICODE_STRING LongName
,
6736 IN OUT PULONG DataLength
,
6742 FsRtlDeleteKeyFromTunnelCache(
6744 IN ULONGLONG DirectoryKey
);
6749 FsRtlDeleteTunnelCache(
6756 IN ANSI_STRING Name
,
6757 OUT PANSI_STRING FirstPart
,
6758 OUT PANSI_STRING RemainingPart
);
6763 FsRtlDoesDbcsContainWildCards(
6764 IN PANSI_STRING Name
);
6769 FsRtlIsDbcsInExpression(
6770 IN PANSI_STRING Expression
,
6771 IN PANSI_STRING Name
);
6776 FsRtlIsFatDbcsLegal(
6777 IN ANSI_STRING DbcsName
,
6778 IN BOOLEAN WildCardsPermissible
,
6779 IN BOOLEAN PathNamePermissible
,
6780 IN BOOLEAN LeadingBackslashPermissible
);
6785 FsRtlIsHpfsDbcsLegal(
6786 IN ANSI_STRING DbcsName
,
6787 IN BOOLEAN WildCardsPermissible
,
6788 IN BOOLEAN PathNamePermissible
,
6789 IN BOOLEAN LeadingBackslashPermissible
);
6794 FsRtlNormalizeNtstatus(
6795 IN NTSTATUS Exception
,
6796 IN NTSTATUS GenericException
);
6801 FsRtlIsNtstatusExpected(
6802 IN NTSTATUS Ntstatus
);
6807 FsRtlAllocateResource(
6813 FsRtlInitializeLargeMcb(
6815 IN POOL_TYPE PoolType
);
6820 FsRtlUninitializeLargeMcb(
6828 IN BOOLEAN SelfSynchronized
);
6833 FsRtlTruncateLargeMcb(
6840 FsRtlAddLargeMcbEntry(
6844 IN LONGLONG SectorCount
);
6849 FsRtlRemoveLargeMcbEntry(
6852 IN LONGLONG SectorCount
);
6857 FsRtlLookupLargeMcbEntry(
6860 OUT PLONGLONG Lbn OPTIONAL
,
6861 OUT PLONGLONG SectorCountFromLbn OPTIONAL
,
6862 OUT PLONGLONG StartingLbn OPTIONAL
,
6863 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL
,
6864 OUT PULONG Index OPTIONAL
);
6869 FsRtlLookupLastLargeMcbEntry(
6877 FsRtlLookupLastLargeMcbEntryAndIndex(
6878 IN PLARGE_MCB OpaqueMcb
,
6879 OUT PLONGLONG LargeVbn
,
6880 OUT PLONGLONG LargeLbn
,
6886 FsRtlNumberOfRunsInLargeMcb(
6892 FsRtlGetNextLargeMcbEntry(
6897 OUT PLONGLONG SectorCount
);
6905 IN LONGLONG Amount
);
6912 IN POOL_TYPE PoolType
);
6917 FsRtlUninitializeMcb(
6934 IN ULONG SectorCount
);
6939 FsRtlRemoveMcbEntry(
6942 IN ULONG SectorCount
);
6947 FsRtlLookupMcbEntry(
6951 OUT PULONG SectorCount OPTIONAL
,
6957 FsRtlLookupLastMcbEntry(
6965 FsRtlNumberOfRunsInMcb(
6971 FsRtlGetNextMcbEntry(
6976 OUT PULONG SectorCount
);
6982 IN PDEVICE_OBJECT TargetDevice
);
6987 FsRtlInitializeOplock(
6988 IN OUT POPLOCK Oplock
);
6993 FsRtlUninitializeOplock(
6994 IN OUT POPLOCK Oplock
);
7002 IN ULONG OpenCount
);
7011 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
7012 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
);
7017 FsRtlOplockIsFastIoPossible(
7023 FsRtlCurrentBatchOplock(
7029 FsRtlNotifyVolumeEvent(
7030 IN PFILE_OBJECT FileObject
,
7031 IN ULONG EventCode
);
7036 FsRtlNotifyInitializeSync(
7037 IN PNOTIFY_SYNC
*NotifySync
);
7042 FsRtlNotifyUninitializeSync(
7043 IN PNOTIFY_SYNC
*NotifySync
);
7048 FsRtlNotifyFullChangeDirectory(
7049 IN PNOTIFY_SYNC NotifySync
,
7050 IN PLIST_ENTRY NotifyList
,
7052 IN PSTRING FullDirectoryName
,
7053 IN BOOLEAN WatchTree
,
7054 IN BOOLEAN IgnoreBuffer
,
7055 IN ULONG CompletionFilter
,
7056 IN PIRP NotifyIrp OPTIONAL
,
7057 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL
,
7058 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
);
7063 FsRtlNotifyFilterReportChange(
7064 IN PNOTIFY_SYNC NotifySync
,
7065 IN PLIST_ENTRY NotifyList
,
7066 IN PSTRING FullTargetName
,
7067 IN USHORT TargetNameOffset
,
7068 IN PSTRING StreamName OPTIONAL
,
7069 IN PSTRING NormalizedParentName OPTIONAL
,
7070 IN ULONG FilterMatch
,
7072 IN PVOID TargetContext OPTIONAL
,
7073 IN PVOID FilterContext OPTIONAL
);
7078 FsRtlNotifyFullReportChange(
7079 IN PNOTIFY_SYNC NotifySync
,
7080 IN PLIST_ENTRY NotifyList
,
7081 IN PSTRING FullTargetName
,
7082 IN USHORT TargetNameOffset
,
7083 IN PSTRING StreamName OPTIONAL
,
7084 IN PSTRING NormalizedParentName OPTIONAL
,
7085 IN ULONG FilterMatch
,
7087 IN PVOID TargetContext OPTIONAL
);
7093 IN PNOTIFY_SYNC NotifySync
,
7094 IN PLIST_ENTRY NotifyList
,
7095 IN PVOID FsContext
);
7101 IN UNICODE_STRING Name
,
7102 OUT PUNICODE_STRING FirstPart
,
7103 OUT PUNICODE_STRING RemainingPart
);
7108 FsRtlDoesNameContainWildCards(
7109 IN PUNICODE_STRING Name
);
7115 IN PCUNICODE_STRING Name1
,
7116 IN PCUNICODE_STRING Name2
,
7117 IN BOOLEAN IgnoreCase
,
7118 IN PCWCH UpcaseTable OPTIONAL
);
7123 FsRtlIsNameInExpression(
7124 IN PUNICODE_STRING Expression
,
7125 IN PUNICODE_STRING Name
,
7126 IN BOOLEAN IgnoreCase
,
7127 IN PWCHAR UpcaseTable OPTIONAL
);
7132 FsRtlPostPagingFileStackOverflow(
7135 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
);
7140 FsRtlPostStackOverflow (
7143 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
);
7148 FsRtlRegisterUncProvider(
7149 OUT PHANDLE MupHandle
,
7150 IN PUNICODE_STRING RedirectorDeviceName
,
7151 IN BOOLEAN MailslotsSupported
);
7156 FsRtlDeregisterUncProvider(
7162 FsRtlTeardownPerStreamContexts(
7163 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader
);
7168 FsRtlCreateSectionForDataScan(
7169 OUT PHANDLE SectionHandle
,
7170 OUT PVOID
*SectionObject
,
7171 OUT PLARGE_INTEGER SectionFileSize OPTIONAL
,
7172 IN PFILE_OBJECT FileObject
,
7173 IN ACCESS_MASK DesiredAccess
,
7174 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
7175 IN PLARGE_INTEGER MaximumSize OPTIONAL
,
7176 IN ULONG SectionPageProtection
,
7177 IN ULONG AllocationAttributes
,
7180 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
7182 #if (NTDDI_VERSION >= NTDDI_WINXP)
7187 FsRtlNotifyFilterChangeDirectory(
7188 IN PNOTIFY_SYNC NotifySync
,
7189 IN PLIST_ENTRY NotifyList
,
7191 IN PSTRING FullDirectoryName
,
7192 IN BOOLEAN WatchTree
,
7193 IN BOOLEAN IgnoreBuffer
,
7194 IN ULONG CompletionFilter
,
7195 IN PIRP NotifyIrp OPTIONAL
,
7196 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL
,
7197 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
,
7198 IN PFILTER_REPORT_CHANGE FilterCallback OPTIONAL
);
7203 FsRtlInsertPerStreamContext(
7204 IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext
,
7205 IN PFSRTL_PER_STREAM_CONTEXT Ptr
);
7208 PFSRTL_PER_STREAM_CONTEXT
7210 FsRtlLookupPerStreamContextInternal(
7211 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext
,
7212 IN PVOID OwnerId OPTIONAL
,
7213 IN PVOID InstanceId OPTIONAL
);
7216 PFSRTL_PER_STREAM_CONTEXT
7218 FsRtlRemovePerStreamContext(
7219 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext
,
7220 IN PVOID OwnerId OPTIONAL
,
7221 IN PVOID InstanceId OPTIONAL
);
7226 FsRtlIncrementCcFastReadNotPossible(
7232 FsRtlIncrementCcFastReadWait(
7238 FsRtlIncrementCcFastReadNoWait(
7244 FsRtlIncrementCcFastReadResourceMiss(
7251 IN PFILE_OBJECT FileObject
);
7253 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
7255 #if (NTDDI_VERSION >= NTDDI_WS03)
7260 FsRtlInitializeBaseMcb(
7262 IN POOL_TYPE PoolType
);
7267 FsRtlUninitializeBaseMcb(
7279 FsRtlTruncateBaseMcb(
7286 FsRtlAddBaseMcbEntry(
7290 IN LONGLONG SectorCount
);
7295 FsRtlRemoveBaseMcbEntry(
7298 IN LONGLONG SectorCount
);
7303 FsRtlLookupBaseMcbEntry(
7306 OUT PLONGLONG Lbn OPTIONAL
,
7307 OUT PLONGLONG SectorCountFromLbn OPTIONAL
,
7308 OUT PLONGLONG StartingLbn OPTIONAL
,
7309 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL
,
7310 OUT PULONG Index OPTIONAL
);
7315 FsRtlLookupLastBaseMcbEntry(
7323 FsRtlLookupLastBaseMcbEntryAndIndex(
7324 IN PBASE_MCB OpaqueMcb
,
7325 IN OUT PLONGLONG LargeVbn
,
7326 IN OUT PLONGLONG LargeLbn
,
7327 IN OUT PULONG Index
);
7332 FsRtlNumberOfRunsInBaseMcb(
7338 FsRtlGetNextBaseMcbEntry(
7343 OUT PLONGLONG SectorCount
);
7351 IN LONGLONG Amount
);
7353 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
7355 #if (NTDDI_VERSION >= NTDDI_VISTA)
7359 FsRtlInitializeBaseMcbEx(
7361 IN POOL_TYPE PoolType
,
7366 FsRtlAddBaseMcbEntryEx(
7370 IN LONGLONG SectorCount
);
7381 FsRtlOplockBreakToNone(
7382 IN OUT POPLOCK Oplock
,
7383 IN PIO_STACK_LOCATION IrpSp OPTIONAL
,
7385 IN PVOID Context OPTIONAL
,
7386 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
7387 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
);
7392 FsRtlNotifyVolumeEventEx(
7393 IN PFILE_OBJECT FileObject
,
7395 IN PTARGET_DEVICE_CUSTOM_NOTIFICATION Event
);
7400 FsRtlNotifyCleanupAll(
7401 IN PNOTIFY_SYNC NotifySync
,
7402 IN PLIST_ENTRY NotifyList
);
7406 FsRtlRegisterUncProviderEx(
7407 OUT PHANDLE MupHandle
,
7408 IN PUNICODE_STRING RedirDevName
,
7409 IN PDEVICE_OBJECT DeviceObject
,
7415 FsRtlCancellableWaitForSingleObject(
7417 IN PLARGE_INTEGER Timeout OPTIONAL
,
7418 IN PIRP Irp OPTIONAL
);
7423 FsRtlCancellableWaitForMultipleObjects(
7425 IN PVOID ObjectArray
[],
7426 IN WAIT_TYPE WaitType
,
7427 IN PLARGE_INTEGER Timeout OPTIONAL
,
7428 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
,
7429 IN PIRP Irp OPTIONAL
);
7434 FsRtlMupGetProviderInfoFromFileObject(
7435 IN PFILE_OBJECT pFileObject
,
7438 IN OUT PULONG pBufferSize
);
7443 FsRtlMupGetProviderIdFromName(
7444 IN PUNICODE_STRING pProviderName
,
7445 OUT PULONG32 pProviderId
);
7450 FsRtlIncrementCcFastMdlReadWait(
7456 FsRtlValidateReparsePointBuffer(
7457 IN ULONG BufferLength
,
7458 IN PREPARSE_DATA_BUFFER ReparseBuffer
);
7463 FsRtlRemoveDotsFromPath(
7464 IN OUT PWSTR OriginalString
,
7465 IN USHORT PathLength
,
7466 OUT USHORT
*NewLength
);
7471 FsRtlAllocateExtraCreateParameterList(
7472 IN FSRTL_ALLOCATE_ECPLIST_FLAGS Flags
,
7473 OUT PECP_LIST
*EcpList
);
7478 FsRtlFreeExtraCreateParameterList(
7479 IN PECP_LIST EcpList
);
7484 FsRtlAllocateExtraCreateParameter(
7486 IN ULONG SizeOfContext
,
7487 IN FSRTL_ALLOCATE_ECP_FLAGS Flags
,
7488 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL
,
7490 OUT PVOID
*EcpContext
);
7495 FsRtlFreeExtraCreateParameter(
7496 IN PVOID EcpContext
);
7501 FsRtlInitExtraCreateParameterLookasideList(
7502 IN OUT PVOID Lookaside
,
7503 IN FSRTL_ECP_LOOKASIDE_FLAGS Flags
,
7509 FsRtlDeleteExtraCreateParameterLookasideList(
7510 IN OUT PVOID Lookaside
,
7511 IN FSRTL_ECP_LOOKASIDE_FLAGS Flags
);
7516 FsRtlAllocateExtraCreateParameterFromLookasideList(
7518 IN ULONG SizeOfContext
,
7519 IN FSRTL_ALLOCATE_ECP_FLAGS Flags
,
7520 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL
,
7521 IN OUT PVOID LookasideList
,
7522 OUT PVOID
*EcpContext
);
7527 FsRtlInsertExtraCreateParameter(
7528 IN OUT PECP_LIST EcpList
,
7529 IN OUT PVOID EcpContext
);
7534 FsRtlFindExtraCreateParameter(
7535 IN PECP_LIST EcpList
,
7537 OUT PVOID
*EcpContext OPTIONAL
,
7538 OUT ULONG
*EcpContextSize OPTIONAL
);
7543 FsRtlRemoveExtraCreateParameter(
7544 IN OUT PECP_LIST EcpList
,
7546 OUT PVOID
*EcpContext
,
7547 OUT ULONG
*EcpContextSize OPTIONAL
);
7552 FsRtlGetEcpListFromIrp(
7554 OUT PECP_LIST
*EcpList OPTIONAL
);
7559 FsRtlSetEcpListIntoIrp(
7561 IN PECP_LIST EcpList
);
7566 FsRtlGetNextExtraCreateParameter(
7567 IN PECP_LIST EcpList
,
7568 IN PVOID CurrentEcpContext OPTIONAL
,
7569 OUT LPGUID NextEcpType OPTIONAL
,
7570 OUT PVOID
*NextEcpContext OPTIONAL
,
7571 OUT ULONG
*NextEcpContextSize OPTIONAL
);
7576 FsRtlAcknowledgeEcp(
7577 IN PVOID EcpContext
);
7582 FsRtlIsEcpAcknowledged(
7583 IN PVOID EcpContext
);
7588 FsRtlIsEcpFromUserMode(
7589 IN PVOID EcpContext
);
7594 FsRtlChangeBackingFileObject(
7595 IN PFILE_OBJECT CurrentFileObject OPTIONAL
,
7596 IN PFILE_OBJECT NewFileObject
,
7597 IN FSRTL_CHANGE_BACKING_TYPE ChangeBackingType
,
7603 FsRtlLogCcFlushError(
7604 IN PUNICODE_STRING FileName
,
7605 IN PDEVICE_OBJECT DeviceObject
,
7606 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
7607 IN NTSTATUS FlushError
,
7613 FsRtlAreVolumeStartupApplicationsComplete(
7619 FsRtlQueryMaximumVirtualDiskNestingLevel(
7625 FsRtlGetVirtualDiskNestingLevel(
7626 IN PDEVICE_OBJECT DeviceObject
,
7627 OUT PULONG NestingLevel
,
7628 OUT PULONG NestingFlags OPTIONAL
);
7630 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
7632 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
7640 IN PVOID Context OPTIONAL
,
7641 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
7642 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
);
7646 #if (NTDDI_VERSION >= NTDDI_WIN7)
7651 FsRtlAreThereCurrentOrInProgressFileLocks(
7652 IN PFILE_LOCK FileLock
);
7657 FsRtlOplockIsSharedRequest(
7667 IN PVOID Context OPTIONAL
,
7668 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
7669 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
);
7674 FsRtlCurrentOplockH(
7680 FsRtlOplockBreakToNoneEx(
7681 IN OUT POPLOCK Oplock
,
7684 IN PVOID Context OPTIONAL
,
7685 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
7686 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
);
7691 FsRtlOplockFsctrlEx(
7700 FsRtlOplockKeysEqual(
7701 IN PFILE_OBJECT Fo1 OPTIONAL
,
7702 IN PFILE_OBJECT Fo2 OPTIONAL
);
7707 FsRtlInitializeExtraCreateParameterList(
7708 IN OUT PECP_LIST EcpList
);
7713 FsRtlInitializeExtraCreateParameter(
7716 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL
,
7719 IN PVOID ListAllocatedFrom OPTIONAL
);
7721 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
7726 FsRtlInsertPerFileContext(
7727 IN PVOID
* PerFileContextPointer
,
7728 IN PFSRTL_PER_FILE_CONTEXT Ptr
);
7731 PFSRTL_PER_FILE_CONTEXT
7733 FsRtlLookupPerFileContext(
7734 IN PVOID
* PerFileContextPointer
,
7735 IN PVOID OwnerId OPTIONAL
,
7736 IN PVOID InstanceId OPTIONAL
);
7739 PFSRTL_PER_FILE_CONTEXT
7741 FsRtlRemovePerFileContext(
7742 IN PVOID
* PerFileContextPointer
,
7743 IN PVOID OwnerId OPTIONAL
,
7744 IN PVOID InstanceId OPTIONAL
);
7749 FsRtlTeardownPerFileContexts(
7750 IN PVOID
* PerFileContextPointer
);
7755 FsRtlInsertPerFileObjectContext(
7756 IN PFILE_OBJECT FileObject
,
7757 IN PFSRTL_PER_FILEOBJECT_CONTEXT Ptr
);
7760 PFSRTL_PER_FILEOBJECT_CONTEXT
7762 FsRtlLookupPerFileObjectContext(
7763 IN PFILE_OBJECT FileObject
,
7764 IN PVOID OwnerId OPTIONAL
,
7765 IN PVOID InstanceId OPTIONAL
);
7768 PFSRTL_PER_FILEOBJECT_CONTEXT
7770 FsRtlRemovePerFileObjectContext(
7771 IN PFILE_OBJECT FileObject
,
7772 IN PVOID OwnerId OPTIONAL
,
7773 IN PVOID InstanceId OPTIONAL
);
7775 #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
7776 FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
7779 #define FsRtlAreThereCurrentFileLocks(FL) ( \
7780 ((FL)->FastIoIsQuestionable) \
7783 #define FsRtlIncrementLockRequestsInProgress(FL) { \
7784 ASSERT( (FL)->LockRequestsInProgress >= 0 ); \
7786 (InterlockedIncrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
7789 #define FsRtlDecrementLockRequestsInProgress(FL) { \
7790 ASSERT( (FL)->LockRequestsInProgress > 0 ); \
7792 (InterlockedDecrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
7795 extern NTKERNELAPI PUSHORT NlsOemLeadByteInfo
;
7796 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
7798 #ifdef NLS_MB_CODE_PAGE_TAG
7799 #undef NLS_MB_CODE_PAGE_TAG
7801 #define NLS_MB_CODE_PAGE_TAG NlsMbOemCodePageTag
7803 /* GCC compatible definition, MS one is retarded */
7804 extern NTKERNELAPI
const UCHAR
* const FsRtlLegalAnsiCharacterArray
;
7805 #define LEGAL_ANSI_CHARACTER_ARRAY FsRtlLegalAnsiCharacterArray
7807 #define FsRtlIsAnsiCharacterWild(C) ( \
7808 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \
7811 #define FsRtlIsAnsiCharacterLegalFat(C, WILD) ( \
7812 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_FAT_LEGAL) | \
7813 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7816 #define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) ( \
7817 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) | \
7818 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7821 #define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) ( \
7822 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) | \
7823 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7826 #define FsRtlIsAnsiCharacterLegalNtfsStream(C,WILD_OK) ( \
7827 FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_NTFS_STREAM_LEGAL) \
7830 #define FsRtlIsAnsiCharacterLegal(C,FLAGS) ( \
7831 FsRtlTestAnsiCharacter((C), TRUE, FALSE, (FLAGS)) \
7834 #define FsRtlTestAnsiCharacter(C, DEFAULT_RET, WILD_OK, FLAGS) ( \
7835 ((SCHAR)(C) < 0) ? DEFAULT_RET : \
7836 FlagOn( LEGAL_ANSI_CHARACTER_ARRAY[(C)], \
7838 ((WILD_OK) ? FSRTL_WILD_CHARACTER : 0) ) \
7841 #define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \
7842 (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \
7843 (NLS_MB_CODE_PAGE_TAG && \
7844 (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \
7847 #define FsRtlIsUnicodeCharacterWild(C) ( \
7850 FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER )) \
7853 #define FsRtlInitPerFileContext( _fc, _owner, _inst, _cb) \
7854 ((_fc)->OwnerId = (_owner), \
7855 (_fc)->InstanceId = (_inst), \
7856 (_fc)->FreeCallback = (_cb))
7858 #define FsRtlGetPerFileContextPointer(_fo) \
7859 (FsRtlSupportsPerFileContexts(_fo) ? \
7860 FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer : \
7863 #define FsRtlSupportsPerFileContexts(_fo) \
7864 ((FsRtlGetPerStreamContextPointer(_fo) != NULL) && \
7865 (FsRtlGetPerStreamContextPointer(_fo)->Version >= FSRTL_FCB_HEADER_V1) && \
7866 (FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer != NULL))
7868 #define FsRtlSetupAdvancedHeaderEx( _advhdr, _fmutx, _fctxptr ) \
7870 FsRtlSetupAdvancedHeader( _advhdr, _fmutx ); \
7871 if ((_fctxptr) != NULL) { \
7872 (_advhdr)->FileContextSupportPointer = (_fctxptr); \
7876 #define FsRtlGetPerStreamContextPointer(FO) ( \
7877 (PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext \
7880 #define FsRtlInitPerStreamContext(PSC, O, I, FC) ( \
7881 (PSC)->OwnerId = (O), \
7882 (PSC)->InstanceId = (I), \
7883 (PSC)->FreeCallback = (FC) \
7886 #define FsRtlSupportsPerStreamContexts(FO) ( \
7887 (BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) && \
7888 FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \
7889 FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS)) \
7892 #define FsRtlLookupPerStreamContext(_sc, _oid, _iid) \
7893 (((NULL != (_sc)) && \
7894 FlagOn((_sc)->Flags2,FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS) && \
7895 !IsListEmpty(&(_sc)->FilterContexts)) ? \
7896 FsRtlLookupPerStreamContextInternal((_sc), (_oid), (_iid)) : \
7902 FsRtlSetupAdvancedHeader(
7904 IN PFAST_MUTEX FMutex
)
7906 PFSRTL_ADVANCED_FCB_HEADER localAdvHdr
= (PFSRTL_ADVANCED_FCB_HEADER
)AdvHdr
;
7908 localAdvHdr
->Flags
|= FSRTL_FLAG_ADVANCED_HEADER
;
7909 localAdvHdr
->Flags2
|= FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS
;
7910 #if (NTDDI_VERSION >= NTDDI_VISTA)
7911 localAdvHdr
->Version
= FSRTL_FCB_HEADER_V1
;
7913 localAdvHdr
->Version
= FSRTL_FCB_HEADER_V0
;
7915 InitializeListHead( &localAdvHdr
->FilterContexts
);
7916 if (FMutex
!= NULL
) {
7917 localAdvHdr
->FastMutex
= FMutex
;
7919 #if (NTDDI_VERSION >= NTDDI_VISTA)
7920 *((PULONG_PTR
)(&localAdvHdr
->PushLock
)) = 0;
7921 localAdvHdr
->FileContextSupportPointer
= NULL
;
7925 #define FsRtlInitPerFileObjectContext(_fc, _owner, _inst) \
7926 ((_fc)->OwnerId = (_owner), (_fc)->InstanceId = (_inst))
7928 #define FsRtlCompleteRequest(IRP,STATUS) { \
7929 (IRP)->IoStatus.Status = (STATUS); \
7930 IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
7933 #if (NTDDI_VERSION >= NTDDI_WIN7)
7934 typedef struct _ECP_HEADER ECP_HEADER
, *PECP_HEADER
;
7937 #if (NTDDI_VERSION >= NTDDI_VISTA)
7939 typedef enum _NETWORK_OPEN_LOCATION_QUALIFIER
{
7940 NetworkOpenLocationAny
,
7941 NetworkOpenLocationRemote
,
7942 NetworkOpenLocationLoopback
7943 } NETWORK_OPEN_LOCATION_QUALIFIER
;
7945 typedef enum _NETWORK_OPEN_INTEGRITY_QUALIFIER
{
7946 NetworkOpenIntegrityAny
,
7947 NetworkOpenIntegrityNone
,
7948 NetworkOpenIntegritySigned
,
7949 NetworkOpenIntegrityEncrypted
,
7950 NetworkOpenIntegrityMaximum
7951 } NETWORK_OPEN_INTEGRITY_QUALIFIER
;
7953 #if (NTDDI_VERSION >= NTDDI_WIN7)
7955 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_COLLAPSING 0x1
7956 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_DURABILITY 0x2
7957 #define NETWORK_OPEN_ECP_IN_FLAG_FORCE_BUFFERED_SYNCHRONOUS_IO_HACK 0x80000000
7959 typedef struct _NETWORK_OPEN_ECP_CONTEXT
{
7964 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
7965 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
7969 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
7970 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
7974 } NETWORK_OPEN_ECP_CONTEXT
, *PNETWORK_OPEN_ECP_CONTEXT
;
7976 typedef struct _NETWORK_OPEN_ECP_CONTEXT_V0
{
7981 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
7982 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
7985 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
7986 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
7989 } NETWORK_OPEN_ECP_CONTEXT_V0
, *PNETWORK_OPEN_ECP_CONTEXT_V0
;
7991 #elif (NTDDI_VERSION >= NTDDI_VISTA)
7992 typedef struct _NETWORK_OPEN_ECP_CONTEXT
{
7997 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
7998 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
8001 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
8002 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
8005 } NETWORK_OPEN_ECP_CONTEXT
, *PNETWORK_OPEN_ECP_CONTEXT
;
8008 DEFINE_GUID(GUID_ECP_NETWORK_OPEN_CONTEXT
, 0xc584edbf, 0x00df, 0x4d28, 0xb8, 0x84, 0x35, 0xba, 0xca, 0x89, 0x11, 0xe8 );
8010 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8013 #if (NTDDI_VERSION >= NTDDI_VISTA)
8015 typedef struct _PREFETCH_OPEN_ECP_CONTEXT
{
8017 } PREFETCH_OPEN_ECP_CONTEXT
, *PPREFETCH_OPEN_ECP_CONTEXT
;
8019 DEFINE_GUID(GUID_ECP_PREFETCH_OPEN
, 0xe1777b21, 0x847e, 0x4837, 0xaa, 0x45, 0x64, 0x16, 0x1d, 0x28, 0x6, 0x55 );
8021 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8023 #if (NTDDI_VERSION >= NTDDI_WIN7)
8025 DEFINE_GUID (GUID_ECP_NFS_OPEN
, 0xf326d30c, 0xe5f8, 0x4fe7, 0xab, 0x74, 0xf5, 0xa3, 0x19, 0x6d, 0x92, 0xdb);
8026 DEFINE_GUID(GUID_ECP_SRV_OPEN
, 0xbebfaebc, 0xaabf, 0x489d, 0x9d, 0x2c, 0xe9, 0xe3, 0x61, 0x10, 0x28, 0x53 );
8028 typedef struct sockaddr_storage
*PSOCKADDR_STORAGE_NFS
;
8030 typedef struct _NFS_OPEN_ECP_CONTEXT
{
8031 PUNICODE_STRING ExportAlias
;
8032 PSOCKADDR_STORAGE_NFS ClientSocketAddress
;
8033 } NFS_OPEN_ECP_CONTEXT
, *PNFS_OPEN_ECP_CONTEXT
, **PPNFS_OPEN_ECP_CONTEXT
;
8035 typedef struct _SRV_OPEN_ECP_CONTEXT
{
8036 PUNICODE_STRING ShareName
;
8037 PSOCKADDR_STORAGE_NFS SocketAddress
;
8038 BOOLEAN OplockBlockState
;
8039 BOOLEAN OplockAppState
;
8040 BOOLEAN OplockFinalState
;
8041 } SRV_OPEN_ECP_CONTEXT
, *PSRV_OPEN_ECP_CONTEXT
;
8043 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
8045 #define VACB_MAPPING_GRANULARITY (0x40000)
8046 #define VACB_OFFSET_SHIFT (18)
8048 typedef struct _PUBLIC_BCB
{
8049 CSHORT NodeTypeCode
;
8050 CSHORT NodeByteSize
;
8052 LARGE_INTEGER MappedFileOffset
;
8053 } PUBLIC_BCB
, *PPUBLIC_BCB
;
8055 typedef struct _CC_FILE_SIZES
{
8056 LARGE_INTEGER AllocationSize
;
8057 LARGE_INTEGER FileSize
;
8058 LARGE_INTEGER ValidDataLength
;
8059 } CC_FILE_SIZES
, *PCC_FILE_SIZES
;
8062 (NTAPI
*PACQUIRE_FOR_LAZY_WRITE
) (
8067 (NTAPI
*PRELEASE_FROM_LAZY_WRITE
) (
8071 (NTAPI
*PACQUIRE_FOR_READ_AHEAD
) (
8076 (NTAPI
*PRELEASE_FROM_READ_AHEAD
) (
8079 typedef struct _CACHE_MANAGER_CALLBACKS
{
8080 PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite
;
8081 PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite
;
8082 PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead
;
8083 PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead
;
8084 } CACHE_MANAGER_CALLBACKS
, *PCACHE_MANAGER_CALLBACKS
;
8086 typedef struct _CACHE_UNINITIALIZE_EVENT
{
8087 struct _CACHE_UNINITIALIZE_EVENT
*Next
;
8089 } CACHE_UNINITIALIZE_EVENT
, *PCACHE_UNINITIALIZE_EVENT
;
8092 (NTAPI
*PDIRTY_PAGE_ROUTINE
) (
8093 IN PFILE_OBJECT FileObject
,
8094 IN PLARGE_INTEGER FileOffset
,
8096 IN PLARGE_INTEGER OldestLsn
,
8097 IN PLARGE_INTEGER NewestLsn
,
8102 (NTAPI
*PFLUSH_TO_LSN
) (
8104 IN LARGE_INTEGER Lsn
);
8107 (NTAPI
*PCC_POST_DEFERRED_WRITE
) (
8111 #define CcIsFileCached(FO) ( \
8112 ((FO)->SectionObjectPointer != NULL) && \
8113 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
8116 extern ULONG CcFastMdlReadWait
;
8118 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8123 CcInitializeCacheMap(
8124 IN PFILE_OBJECT FileObject
,
8125 IN PCC_FILE_SIZES FileSizes
,
8126 IN BOOLEAN PinAccess
,
8127 IN PCACHE_MANAGER_CALLBACKS Callbacks
,
8128 IN PVOID LazyWriteContext
);
8133 CcUninitializeCacheMap(
8134 IN PFILE_OBJECT FileObject
,
8135 IN PLARGE_INTEGER TruncateSize OPTIONAL
,
8136 IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL
);
8142 IN PFILE_OBJECT FileObject
,
8143 IN PCC_FILE_SIZES FileSizes
);
8148 CcSetDirtyPageThreshold(
8149 IN PFILE_OBJECT FileObject
,
8150 IN ULONG DirtyPageThreshold
);
8156 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8157 IN PLARGE_INTEGER FileOffset OPTIONAL
,
8159 OUT PIO_STATUS_BLOCK IoStatus OPTIONAL
);
8164 CcGetFlushedValidData(
8165 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8166 IN BOOLEAN BcbListHeld
);
8172 IN PFILE_OBJECT FileObject
,
8173 IN PLARGE_INTEGER StartOffset
,
8174 IN PLARGE_INTEGER EndOffset
,
8194 IN BOOLEAN WriteThrough
,
8195 OUT PIO_STATUS_BLOCK IoStatus
);
8200 CcGetFileObjectFromSectionPtrs(
8201 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
);
8206 CcGetFileObjectFromBcb(
8213 IN PFILE_OBJECT FileObject
,
8214 IN ULONG BytesToWrite
,
8216 IN BOOLEAN Retrying
);
8222 IN PFILE_OBJECT FileObject
,
8223 IN PCC_POST_DEFERRED_WRITE PostRoutine
,
8226 IN ULONG BytesToWrite
,
8227 IN BOOLEAN Retrying
);
8233 IN PFILE_OBJECT FileObject
,
8234 IN PLARGE_INTEGER FileOffset
,
8238 OUT PIO_STATUS_BLOCK IoStatus
);
8244 IN PFILE_OBJECT FileObject
,
8245 IN ULONG FileOffset
,
8249 OUT PIO_STATUS_BLOCK IoStatus
);
8255 IN PFILE_OBJECT FileObject
,
8256 IN PLARGE_INTEGER FileOffset
,
8265 IN PFILE_OBJECT FileObject
,
8266 IN ULONG FileOffset
,
8274 IN PFILE_OBJECT FileObject
,
8275 IN PLARGE_INTEGER FileOffset
,
8278 OUT PIO_STATUS_BLOCK IoStatus
);
8284 IN PFILE_OBJECT FileObject
,
8291 IN PFILE_OBJECT FileObject
,
8292 IN PLARGE_INTEGER FileOffset
,
8295 OUT PIO_STATUS_BLOCK IoStatus
);
8301 IN PFILE_OBJECT FileObject
,
8302 IN PLARGE_INTEGER FileOffset
,
8308 CcScheduleReadAhead(
8309 IN PFILE_OBJECT FileObject
,
8310 IN PLARGE_INTEGER FileOffset
,
8316 CcWaitForCurrentLazyWriterActivity(
8322 CcSetReadAheadGranularity(
8323 IN PFILE_OBJECT FileObject
,
8324 IN ULONG Granularity
);
8330 IN PFILE_OBJECT FileObject
,
8331 IN PLARGE_INTEGER FileOffset
,
8341 IN PFILE_OBJECT FileObject
,
8342 IN PLARGE_INTEGER FileOffset
,
8351 IN PFILE_OBJECT FileObject
,
8352 IN PLARGE_INTEGER FileOffset
,
8362 CcSetDirtyPinnedData(
8364 IN PLARGE_INTEGER Lsn OPTIONAL
);
8375 CcSetBcbOwnerPointer(
8377 IN PVOID OwnerPointer
);
8382 CcUnpinDataForThread(
8384 IN ERESOURCE_THREAD ResourceThreadId
);
8389 CcSetAdditionalCacheAttributes(
8390 IN PFILE_OBJECT FileObject
,
8391 IN BOOLEAN DisableReadAhead
,
8392 IN BOOLEAN DisableWriteBehind
);
8400 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
8402 #if (NTDDI_VERSION >= NTDDI_WINXP)
8408 IN PFILE_OBJECT FileObject
,
8414 CcSetLogHandleForFile(
8415 IN PFILE_OBJECT FileObject
,
8417 IN PFLUSH_TO_LSN FlushToLsnRoutine
);
8424 IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine
,
8430 #if (NTDDI_VERSION >= NTDDI_WINXP)
8435 IN PFILE_OBJECT FileObject
,
8436 IN PLARGE_INTEGER FileOffset
,
8441 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
8446 IN PFILE_OBJECT FileObject
,
8447 IN PLARGE_INTEGER FileOffset
,
8454 #if (NTDDI_VERSION >= NTDDI_VISTA)
8460 IN PFILE_OBJECT FileObject
,
8461 IN PCC_FILE_SIZES FileSizes
);
8466 CcGetFileObjectFromSectionPtrsRef(
8467 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
);
8472 CcSetParallelFlushFile(
8473 IN PFILE_OBJECT FileObject
,
8474 IN BOOLEAN EnableParallelFlush
);
8478 CcIsThereDirtyDataEx(
8480 IN PULONG NumberOfDirtyPages OPTIONAL
);
8484 #if (NTDDI_VERSION >= NTDDI_WIN7)
8488 CcCoherencyFlushAndPurgeCache(
8489 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8490 IN PLARGE_INTEGER FileOffset OPTIONAL
,
8492 OUT PIO_STATUS_BLOCK IoStatus
,
8493 IN ULONG Flags OPTIONAL
);
8496 #define CcGetFileSizePointer(FO) ( \
8497 ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
8500 #define UNINITIALIZE_CACHE_MAPS (1)
8501 #define DO_NOT_RETRY_PURGE (2)
8502 #define DO_NOT_PURGE_DIRTY_PAGES (0x4)
8504 #define CC_FLUSH_AND_PURGE_NO_PURGE (0x1)
8506 #if (NTDDI_VERSION >= NTDDI_VISTA)
8510 CcPurgeCacheSection(
8511 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8512 IN PLARGE_INTEGER FileOffset OPTIONAL
,
8515 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
8519 CcPurgeCacheSection(
8520 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8521 IN PLARGE_INTEGER FileOffset OPTIONAL
,
8523 IN BOOLEAN UninitializeCacheMaps
);
8526 #if (NTDDI_VERSION >= NTDDI_WIN7)
8530 CcCopyWriteWontFlush(
8531 IN PFILE_OBJECT FileObject
,
8532 IN PLARGE_INTEGER FileOffset
,
8535 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
8538 #define CcReadAhead(FO, FOFF, LEN) ( \
8539 if ((LEN) >= 256) { \
8540 CcScheduleReadAhead((FO), (FOFF), (LEN)); \
8544 #define PIN_WAIT (1)
8545 #define PIN_EXCLUSIVE (2)
8546 #define PIN_NO_READ (4)
8547 #define PIN_IF_BCB (8)
8548 #define PIN_CALLER_TRACKS_DIRTY_DATA (32)
8549 #define PIN_HIGH_PRIORITY (64)
8552 #define MAP_NO_READ (16)
8553 #define MAP_HIGH_PRIORITY (64)
8555 #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
8556 #define IOCTL_REDIR_QUERY_PATH_EX CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 100, METHOD_NEITHER, FILE_ANY_ACCESS)
8558 typedef struct _QUERY_PATH_REQUEST
{
8559 ULONG PathNameLength
;
8560 PIO_SECURITY_CONTEXT SecurityContext
;
8561 WCHAR FilePathName
[1];
8562 } QUERY_PATH_REQUEST
, *PQUERY_PATH_REQUEST
;
8564 typedef struct _QUERY_PATH_REQUEST_EX
{
8565 PIO_SECURITY_CONTEXT pSecurityContext
;
8568 UNICODE_STRING PathName
;
8569 UNICODE_STRING DomainServiceName
;
8570 ULONG_PTR Reserved
[ 3 ];
8571 } QUERY_PATH_REQUEST_EX
, *PQUERY_PATH_REQUEST_EX
;
8573 typedef struct _QUERY_PATH_RESPONSE
{
8574 ULONG LengthAccepted
;
8575 } QUERY_PATH_RESPONSE
, *PQUERY_PATH_RESPONSE
;
8577 #define VOLSNAPCONTROLTYPE 0x00000053
8578 #define IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES CTL_CODE(VOLSNAPCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
8580 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8586 IN HANDLE Handle OPTIONAL
,
8587 IN OBJECT_INFORMATION_CLASS ObjectInformationClass
,
8588 OUT PVOID ObjectInformation OPTIONAL
,
8589 IN ULONG ObjectInformationLength
,
8590 OUT PULONG ReturnLength OPTIONAL
);
8596 IN HANDLE KeyHandle
,
8597 IN HANDLE EventHandle OPTIONAL
,
8598 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8599 IN PVOID ApcContext OPTIONAL
,
8600 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8601 IN ULONG NotifyFilter
,
8602 IN BOOLEAN WatchSubtree
,
8604 IN ULONG BufferLength
,
8605 IN BOOLEAN Asynchronous
);
8611 OUT PHANDLE EventHandle
,
8612 IN ACCESS_MASK DesiredAccess
,
8613 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
8614 IN EVENT_TYPE EventType
,
8615 IN BOOLEAN InitialState
);
8621 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8626 ZwQueryDirectoryFile(
8627 IN HANDLE FileHandle
,
8628 IN HANDLE Event OPTIONAL
,
8629 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8630 IN PVOID ApcContext OPTIONAL
,
8631 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8632 OUT PVOID FileInformation
,
8634 IN FILE_INFORMATION_CLASS FileInformationClass
,
8635 IN BOOLEAN ReturnSingleEntry
,
8636 IN PUNICODE_STRING FileName OPTIONAL
,
8637 IN BOOLEAN RestartScan
);
8642 ZwSetVolumeInformationFile(
8643 IN HANDLE FileHandle
,
8644 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8645 IN PVOID FsInformation
,
8647 IN FS_INFORMATION_CLASS FsInformationClass
);
8653 IN HANDLE FileHandle
,
8654 IN HANDLE Event OPTIONAL
,
8655 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8656 IN PVOID ApcContext OPTIONAL
,
8657 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8658 IN ULONG FsControlCode
,
8659 IN PVOID InputBuffer OPTIONAL
,
8660 IN ULONG InputBufferLength
,
8661 OUT PVOID OutputBuffer OPTIONAL
,
8662 IN ULONG OutputBufferLength
);
8668 IN HANDLE SourceProcessHandle
,
8669 IN HANDLE SourceHandle
,
8670 IN HANDLE TargetProcessHandle OPTIONAL
,
8671 OUT PHANDLE TargetHandle OPTIONAL
,
8672 IN ACCESS_MASK DesiredAccess
,
8673 IN ULONG HandleAttributes
,
8679 ZwOpenDirectoryObject(
8680 OUT PHANDLE DirectoryHandle
,
8681 IN ACCESS_MASK DesiredAccess
,
8682 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8687 ZwAllocateVirtualMemory(
8688 IN HANDLE ProcessHandle
,
8689 IN OUT PVOID
*BaseAddress
,
8690 IN ULONG_PTR ZeroBits
,
8691 IN OUT PSIZE_T RegionSize
,
8692 IN ULONG AllocationType
,
8698 ZwFreeVirtualMemory(
8699 IN HANDLE ProcessHandle
,
8700 IN OUT PVOID
*BaseAddress
,
8701 IN OUT PSIZE_T RegionSize
,
8707 ZwWaitForSingleObject(
8709 IN BOOLEAN Alertable
,
8710 IN PLARGE_INTEGER Timeout OPTIONAL
);
8716 IN HANDLE EventHandle
,
8717 OUT PLONG PreviousState OPTIONAL
);
8722 ZwFlushVirtualMemory(
8723 IN HANDLE ProcessHandle
,
8724 IN OUT PVOID
*BaseAddress
,
8725 IN OUT PSIZE_T RegionSize
,
8726 OUT PIO_STATUS_BLOCK IoStatusBlock
);
8731 ZwQueryInformationToken(
8732 IN HANDLE TokenHandle
,
8733 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
8734 OUT PVOID TokenInformation
,
8736 OUT PULONG ResultLength
);
8741 ZwSetSecurityObject(
8743 IN SECURITY_INFORMATION SecurityInformation
,
8744 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
8749 ZwQuerySecurityObject(
8750 IN HANDLE FileHandle
,
8751 IN SECURITY_INFORMATION SecurityInformation
,
8752 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
8754 OUT PULONG ResultLength
);
8756 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
8758 #if (NTDDI_VERSION >= NTDDI_WINXP)
8763 ZwOpenProcessTokenEx(
8764 IN HANDLE ProcessHandle
,
8765 IN ACCESS_MASK DesiredAccess
,
8766 IN ULONG HandleAttributes
,
8767 OUT PHANDLE TokenHandle
);
8772 ZwOpenThreadTokenEx(
8773 IN HANDLE ThreadHandle
,
8774 IN ACCESS_MASK DesiredAccess
,
8775 IN BOOLEAN OpenAsSelf
,
8776 IN ULONG HandleAttributes
,
8777 OUT PHANDLE TokenHandle
);
8781 #if (NTDDI_VERSION >= NTDDI_VISTA)
8787 IN HANDLE FileHandle
,
8788 IN HANDLE Event OPTIONAL
,
8789 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8790 IN PVOID ApcContext OPTIONAL
,
8791 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8792 IN PLARGE_INTEGER ByteOffset
,
8793 IN PLARGE_INTEGER Length
,
8795 IN BOOLEAN FailImmediately
,
8796 IN BOOLEAN ExclusiveLock
);
8802 IN HANDLE FileHandle
,
8803 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8804 IN PLARGE_INTEGER ByteOffset
,
8805 IN PLARGE_INTEGER Length
,
8811 ZwQueryQuotaInformationFile(
8812 IN HANDLE FileHandle
,
8813 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8816 IN BOOLEAN ReturnSingleEntry
,
8818 IN ULONG SidListLength
,
8819 IN PSID StartSid OPTIONAL
,
8820 IN BOOLEAN RestartScan
);
8825 ZwSetQuotaInformationFile(
8826 IN HANDLE FileHandle
,
8827 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8835 IN HANDLE FileHandle
,
8836 OUT PIO_STATUS_BLOCK IoStatusBlock
);
8838 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8840 #if (NTDDI_VERSION >= NTDDI_WIN7)
8844 ZwSetInformationToken(
8845 IN HANDLE TokenHandle
,
8846 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
8847 IN PVOID TokenInformation
,
8848 IN ULONG TokenInformationLength
);
8855 IN HANDLE FileHandle
,
8856 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8859 IN BOOLEAN ReturnSingleEntry
,
8860 IN PVOID EaList OPTIONAL
,
8861 IN ULONG EaListLength
,
8862 IN PULONG EaIndex OPTIONAL
,
8863 IN BOOLEAN RestartScan
);
8869 IN HANDLE FileHandle
,
8870 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8878 IN HANDLE ExistingTokenHandle
,
8879 IN ACCESS_MASK DesiredAccess
,
8880 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8881 IN BOOLEAN EffectiveOnly
,
8882 IN TOKEN_TYPE TokenType
,
8883 OUT PHANDLE NewTokenHandle
);
8885 #pragma pack(push,4)
8887 #ifndef VER_PRODUCTBUILD
8888 #define VER_PRODUCTBUILD 10000
8893 extern PACL SePublicDefaultDacl
;
8894 extern PACL SeSystemDefaultDacl
;
8896 #define FS_LFN_APIS 0x00004000
8898 #define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
8899 #define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
8900 #define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
8901 #define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
8902 #define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
8903 #define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
8904 #define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
8905 #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
8906 #define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
8907 #define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
8908 #define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
8909 #define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
8910 #define FILE_STORAGE_TYPE_MASK 0x000f0000
8911 #define FILE_STORAGE_TYPE_SHIFT 16
8913 #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
8916 #define HARDWARE_PTE HARDWARE_PTE_X86
8917 #define PHARDWARE_PTE PHARDWARE_PTE_X86
8920 #define IO_ATTACH_DEVICE_API 0x80000000
8922 #define IO_TYPE_APC 18
8923 #define IO_TYPE_DPC 19
8924 #define IO_TYPE_DEVICE_QUEUE 20
8925 #define IO_TYPE_EVENT_PAIR 21
8926 #define IO_TYPE_INTERRUPT 22
8927 #define IO_TYPE_PROFILE 23
8929 #define IRP_BEING_VERIFIED 0x10
8931 #define MAILSLOT_CLASS_FIRSTCLASS 1
8932 #define MAILSLOT_CLASS_SECONDCLASS 2
8934 #define MAILSLOT_SIZE_AUTO 0
8936 #define MEM_DOS_LIM 0x40000000
8938 #define OB_TYPE_TYPE 1
8939 #define OB_TYPE_DIRECTORY 2
8940 #define OB_TYPE_SYMBOLIC_LINK 3
8941 #define OB_TYPE_TOKEN 4
8942 #define OB_TYPE_PROCESS 5
8943 #define OB_TYPE_THREAD 6
8944 #define OB_TYPE_EVENT 7
8945 #define OB_TYPE_EVENT_PAIR 8
8946 #define OB_TYPE_MUTANT 9
8947 #define OB_TYPE_SEMAPHORE 10
8948 #define OB_TYPE_TIMER 11
8949 #define OB_TYPE_PROFILE 12
8950 #define OB_TYPE_WINDOW_STATION 13
8951 #define OB_TYPE_DESKTOP 14
8952 #define OB_TYPE_SECTION 15
8953 #define OB_TYPE_KEY 16
8954 #define OB_TYPE_PORT 17
8955 #define OB_TYPE_ADAPTER 18
8956 #define OB_TYPE_CONTROLLER 19
8957 #define OB_TYPE_DEVICE 20
8958 #define OB_TYPE_DRIVER 21
8959 #define OB_TYPE_IO_COMPLETION 22
8960 #define OB_TYPE_FILE 23
8962 #define SEC_BASED 0x00200000
8966 #define TOKEN_HAS_ADMIN_GROUP 0x08
8968 #if (VER_PRODUCTBUILD >= 1381)
8969 #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
8970 #endif /* (VER_PRODUCTBUILD >= 1381) */
8972 #if (VER_PRODUCTBUILD >= 2195)
8974 #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
8975 #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
8977 #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
8979 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
8980 #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
8981 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
8982 #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
8983 #endif /* (VER_PRODUCTBUILD >= 2195) */
8985 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
8986 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
8987 #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
8988 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
8989 #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
8990 #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
8991 #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
8992 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
8994 typedef enum _FILE_STORAGE_TYPE
{
8995 StorageTypeDefault
= 1,
8996 StorageTypeDirectory
,
8998 StorageTypeJunctionPoint
,
9000 StorageTypeStructuredStorage
,
9001 StorageTypeEmbedding
,
9003 } FILE_STORAGE_TYPE
;
9005 typedef struct _OBJECT_BASIC_INFORMATION
9008 ACCESS_MASK GrantedAccess
;
9011 ULONG PagedPoolCharge
;
9012 ULONG NonPagedPoolCharge
;
9013 ULONG Reserved
[ 3 ];
9016 ULONG SecurityDescriptorSize
;
9017 LARGE_INTEGER CreationTime
;
9018 } OBJECT_BASIC_INFORMATION
, *POBJECT_BASIC_INFORMATION
;
9020 typedef struct _BITMAP_RANGE
{
9023 ULONG FirstDirtyPage
;
9024 ULONG LastDirtyPage
;
9027 } BITMAP_RANGE
, *PBITMAP_RANGE
;
9029 typedef struct _FILE_COPY_ON_WRITE_INFORMATION
{
9030 BOOLEAN ReplaceIfExists
;
9031 HANDLE RootDirectory
;
9032 ULONG FileNameLength
;
9034 } FILE_COPY_ON_WRITE_INFORMATION
, *PFILE_COPY_ON_WRITE_INFORMATION
;
9036 typedef struct _FILE_FULL_DIRECTORY_INFORMATION
{
9037 ULONG NextEntryOffset
;
9039 LARGE_INTEGER CreationTime
;
9040 LARGE_INTEGER LastAccessTime
;
9041 LARGE_INTEGER LastWriteTime
;
9042 LARGE_INTEGER ChangeTime
;
9043 LARGE_INTEGER EndOfFile
;
9044 LARGE_INTEGER AllocationSize
;
9045 ULONG FileAttributes
;
9046 ULONG FileNameLength
;
9048 WCHAR FileName
[ANYSIZE_ARRAY
];
9049 } FILE_FULL_DIRECTORY_INFORMATION
, *PFILE_FULL_DIRECTORY_INFORMATION
;
9051 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
9052 typedef struct _FILE_SHARED_LOCK_ENTRY
{
9055 FILE_LOCK_INFO FileLock
;
9056 } FILE_SHARED_LOCK_ENTRY
, *PFILE_SHARED_LOCK_ENTRY
;
9058 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
9059 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY
{
9060 LIST_ENTRY ListEntry
;
9063 FILE_LOCK_INFO FileLock
;
9064 } FILE_EXCLUSIVE_LOCK_ENTRY
, *PFILE_EXCLUSIVE_LOCK_ENTRY
;
9066 typedef struct _FILE_MAILSLOT_PEEK_BUFFER
{
9067 ULONG ReadDataAvailable
;
9068 ULONG NumberOfMessages
;
9069 ULONG MessageLength
;
9070 } FILE_MAILSLOT_PEEK_BUFFER
, *PFILE_MAILSLOT_PEEK_BUFFER
;
9072 typedef struct _FILE_OLE_CLASSID_INFORMATION
{
9074 } FILE_OLE_CLASSID_INFORMATION
, *PFILE_OLE_CLASSID_INFORMATION
;
9076 typedef struct _FILE_OLE_ALL_INFORMATION
{
9077 FILE_BASIC_INFORMATION BasicInformation
;
9078 FILE_STANDARD_INFORMATION StandardInformation
;
9079 FILE_INTERNAL_INFORMATION InternalInformation
;
9080 FILE_EA_INFORMATION EaInformation
;
9081 FILE_ACCESS_INFORMATION AccessInformation
;
9082 FILE_POSITION_INFORMATION PositionInformation
;
9083 FILE_MODE_INFORMATION ModeInformation
;
9084 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
9087 LARGE_INTEGER SecurityChangeTime
;
9088 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation
;
9089 FILE_OBJECTID_INFORMATION ObjectIdInformation
;
9090 FILE_STORAGE_TYPE StorageType
;
9093 ULONG NumberOfStreamReferences
;
9096 BOOLEAN ContentIndexDisable
;
9097 BOOLEAN InheritContentIndexDisable
;
9098 FILE_NAME_INFORMATION NameInformation
;
9099 } FILE_OLE_ALL_INFORMATION
, *PFILE_OLE_ALL_INFORMATION
;
9101 typedef struct _FILE_OLE_DIR_INFORMATION
{
9102 ULONG NextEntryOffset
;
9104 LARGE_INTEGER CreationTime
;
9105 LARGE_INTEGER LastAccessTime
;
9106 LARGE_INTEGER LastWriteTime
;
9107 LARGE_INTEGER ChangeTime
;
9108 LARGE_INTEGER EndOfFile
;
9109 LARGE_INTEGER AllocationSize
;
9110 ULONG FileAttributes
;
9111 ULONG FileNameLength
;
9112 FILE_STORAGE_TYPE StorageType
;
9115 BOOLEAN ContentIndexDisable
;
9116 BOOLEAN InheritContentIndexDisable
;
9118 } FILE_OLE_DIR_INFORMATION
, *PFILE_OLE_DIR_INFORMATION
;
9120 typedef struct _FILE_OLE_INFORMATION
{
9121 LARGE_INTEGER SecurityChangeTime
;
9122 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation
;
9123 FILE_OBJECTID_INFORMATION ObjectIdInformation
;
9124 FILE_STORAGE_TYPE StorageType
;
9126 BOOLEAN ContentIndexDisable
;
9127 BOOLEAN InheritContentIndexDisable
;
9128 } FILE_OLE_INFORMATION
, *PFILE_OLE_INFORMATION
;
9130 typedef struct _FILE_OLE_STATE_BITS_INFORMATION
{
9132 ULONG StateBitsMask
;
9133 } FILE_OLE_STATE_BITS_INFORMATION
, *PFILE_OLE_STATE_BITS_INFORMATION
;
9135 typedef struct _MAPPING_PAIR
{
9138 } MAPPING_PAIR
, *PMAPPING_PAIR
;
9140 typedef struct _GET_RETRIEVAL_DESCRIPTOR
{
9141 ULONG NumberOfPairs
;
9143 MAPPING_PAIR Pair
[1];
9144 } GET_RETRIEVAL_DESCRIPTOR
, *PGET_RETRIEVAL_DESCRIPTOR
;
9146 typedef struct _MBCB
{
9147 CSHORT NodeTypeCode
;
9148 CSHORT NodeIsInZone
;
9152 LIST_ENTRY BitmapRanges
;
9153 LONGLONG ResumeWritePage
;
9154 BITMAP_RANGE BitmapRange1
;
9155 BITMAP_RANGE BitmapRange2
;
9156 BITMAP_RANGE BitmapRange3
;
9159 typedef struct _MOVEFILE_DESCRIPTOR
{
9162 LARGE_INTEGER StartVcn
;
9163 LARGE_INTEGER TargetLcn
;
9166 } MOVEFILE_DESCRIPTOR
, *PMOVEFILE_DESCRIPTOR
;
9168 typedef struct _OBJECT_BASIC_INFO
{
9170 ACCESS_MASK GrantedAccess
;
9172 ULONG ReferenceCount
;
9173 ULONG PagedPoolUsage
;
9174 ULONG NonPagedPoolUsage
;
9176 ULONG NameInformationLength
;
9177 ULONG TypeInformationLength
;
9178 ULONG SecurityDescriptorLength
;
9179 LARGE_INTEGER CreateTime
;
9180 } OBJECT_BASIC_INFO
, *POBJECT_BASIC_INFO
;
9182 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO
{
9184 BOOLEAN ProtectFromClose
;
9185 } OBJECT_HANDLE_ATTRIBUTE_INFO
, *POBJECT_HANDLE_ATTRIBUTE_INFO
;
9187 typedef struct _OBJECT_NAME_INFO
{
9188 UNICODE_STRING ObjectName
;
9189 WCHAR ObjectNameBuffer
[1];
9190 } OBJECT_NAME_INFO
, *POBJECT_NAME_INFO
;
9192 typedef struct _OBJECT_PROTECTION_INFO
{
9194 BOOLEAN ProtectHandle
;
9195 } OBJECT_PROTECTION_INFO
, *POBJECT_PROTECTION_INFO
;
9197 typedef struct _OBJECT_TYPE_INFO
{
9198 UNICODE_STRING ObjectTypeName
;
9199 UCHAR Unknown
[0x58];
9200 WCHAR ObjectTypeNameBuffer
[1];
9201 } OBJECT_TYPE_INFO
, *POBJECT_TYPE_INFO
;
9203 typedef struct _OBJECT_ALL_TYPES_INFO
{
9204 ULONG NumberOfObjectTypes
;
9205 OBJECT_TYPE_INFO ObjectsTypeInfo
[1];
9206 } OBJECT_ALL_TYPES_INFO
, *POBJECT_ALL_TYPES_INFO
;
9208 #if defined(USE_LPC6432)
9209 #define LPC_CLIENT_ID CLIENT_ID64
9210 #define LPC_SIZE_T ULONGLONG
9211 #define LPC_PVOID ULONGLONG
9212 #define LPC_HANDLE ULONGLONG
9214 #define LPC_CLIENT_ID CLIENT_ID
9215 #define LPC_SIZE_T SIZE_T
9216 #define LPC_PVOID PVOID
9217 #define LPC_HANDLE HANDLE
9220 typedef struct _PORT_MESSAGE
9236 CSHORT DataInfoOffset
;
9240 __GNU_EXTENSION
union
9242 LPC_CLIENT_ID ClientId
;
9243 double DoNotUseThisField
;
9246 __GNU_EXTENSION
union
9248 LPC_SIZE_T ClientViewSize
;
9251 } PORT_MESSAGE
, *PPORT_MESSAGE
;
9253 #define LPC_KERNELMODE_MESSAGE (CSHORT)((USHORT)0x8000)
9255 typedef struct _PORT_VIEW
9258 LPC_HANDLE SectionHandle
;
9259 ULONG SectionOffset
;
9260 LPC_SIZE_T ViewSize
;
9262 LPC_PVOID ViewRemoteBase
;
9263 } PORT_VIEW
, *PPORT_VIEW
;
9265 typedef struct _REMOTE_PORT_VIEW
9268 LPC_SIZE_T ViewSize
;
9270 } REMOTE_PORT_VIEW
, *PREMOTE_PORT_VIEW
;
9272 typedef struct _VAD_HEADER
{
9275 struct _VAD_HEADER
* ParentLink
;
9276 struct _VAD_HEADER
* LeftLink
;
9277 struct _VAD_HEADER
* RightLink
;
9278 ULONG Flags
; /* LSB = CommitCharge */
9280 PVOID FirstProtoPte
;
9284 } VAD_HEADER
, *PVAD_HEADER
;
9289 CcGetLsnForFileObject (
9290 IN PFILE_OBJECT FileObject
,
9291 OUT PLARGE_INTEGER OldestLsn OPTIONAL
9298 IN POOL_TYPE PoolType
,
9299 IN ULONG NumberOfBytes
9305 FsRtlAllocatePoolWithQuota (
9306 IN POOL_TYPE PoolType
,
9307 IN ULONG NumberOfBytes
9313 FsRtlAllocatePoolWithQuotaTag (
9314 IN POOL_TYPE PoolType
,
9315 IN ULONG NumberOfBytes
,
9322 FsRtlAllocatePoolWithTag (
9323 IN POOL_TYPE PoolType
,
9324 IN ULONG NumberOfBytes
,
9331 FsRtlIsFatDbcsLegal (
9332 IN ANSI_STRING DbcsName
,
9333 IN BOOLEAN WildCardsPermissible
,
9334 IN BOOLEAN PathNamePermissible
,
9335 IN BOOLEAN LeadingBackslashPermissible
9341 FsRtlMdlReadComplete (
9342 IN PFILE_OBJECT FileObject
,
9349 FsRtlMdlWriteComplete (
9350 IN PFILE_OBJECT FileObject
,
9351 IN PLARGE_INTEGER FileOffset
,
9358 FsRtlNotifyChangeDirectory (
9359 IN PNOTIFY_SYNC NotifySync
,
9361 IN PSTRING FullDirectoryName
,
9362 IN PLIST_ENTRY NotifyList
,
9363 IN BOOLEAN WatchTree
,
9364 IN ULONG CompletionFilter
,
9372 IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL
,
9373 IN POBJECT_TYPE ObjectType
,
9374 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9375 IN KPROCESSOR_MODE AccessMode
,
9376 IN OUT PVOID ParseContext OPTIONAL
,
9377 IN ULONG ObjectSize
,
9378 IN ULONG PagedPoolCharge OPTIONAL
,
9379 IN ULONG NonPagedPoolCharge OPTIONAL
,
9386 ObGetObjectPointerCount (
9393 ObReferenceObjectByName (
9394 IN PUNICODE_STRING ObjectName
,
9395 IN ULONG Attributes
,
9396 IN PACCESS_STATE PassedAccessState OPTIONAL
,
9397 IN ACCESS_MASK DesiredAccess OPTIONAL
,
9398 IN POBJECT_TYPE ObjectType
,
9399 IN KPROCESSOR_MODE AccessMode
,
9400 IN OUT PVOID ParseContext OPTIONAL
,
9404 #define PsDereferenceImpersonationToken(T) \
9405 {if (ARGUMENT_PRESENT(T)) { \
9406 (ObDereferenceObject((T))); \
9415 PsLookupProcessThreadByCid (
9417 OUT PEPROCESS
*Process OPTIONAL
,
9418 OUT PETHREAD
*Thread
9424 RtlSetSaclSecurityDescriptor (
9425 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
9426 IN BOOLEAN SaclPresent
,
9428 IN BOOLEAN SaclDefaulted
9431 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
9433 #if (VER_PRODUCTBUILD >= 2195)
9438 ZwAdjustPrivilegesToken (
9439 IN HANDLE TokenHandle
,
9440 IN BOOLEAN DisableAllPrivileges
,
9441 IN PTOKEN_PRIVILEGES NewState
,
9442 IN ULONG BufferLength
,
9443 OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL
,
9444 OUT PULONG ReturnLength
9447 #endif /* (VER_PRODUCTBUILD >= 2195) */
9453 IN HANDLE ThreadHandle
9459 ZwAccessCheckAndAuditAlarm (
9460 IN PUNICODE_STRING SubsystemName
,
9462 IN PUNICODE_STRING ObjectTypeName
,
9463 IN PUNICODE_STRING ObjectName
,
9464 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
9465 IN ACCESS_MASK DesiredAccess
,
9466 IN PGENERIC_MAPPING GenericMapping
,
9467 IN BOOLEAN ObjectCreation
,
9468 OUT PACCESS_MASK GrantedAccess
,
9469 OUT PBOOLEAN AccessStatus
,
9470 OUT PBOOLEAN GenerateOnClose
9473 #if (VER_PRODUCTBUILD >= 2195)
9479 IN HANDLE FileHandle
,
9480 OUT PIO_STATUS_BLOCK IoStatusBlock
9483 #endif /* (VER_PRODUCTBUILD >= 2195) */
9489 IN HANDLE EventHandle
9495 ZwCloseObjectAuditAlarm (
9496 IN PUNICODE_STRING SubsystemName
,
9498 IN BOOLEAN GenerateOnClose
9504 ZwCreateSymbolicLinkObject (
9505 OUT PHANDLE SymbolicLinkHandle
,
9506 IN ACCESS_MASK DesiredAccess
,
9507 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9508 IN PUNICODE_STRING TargetName
9514 ZwFlushInstructionCache (
9515 IN HANDLE ProcessHandle
,
9516 IN PVOID BaseAddress OPTIONAL
,
9524 IN HANDLE FileHandle
,
9525 OUT PIO_STATUS_BLOCK IoStatusBlock
9528 #if (VER_PRODUCTBUILD >= 2195)
9533 ZwInitiatePowerAction (
9534 IN POWER_ACTION SystemAction
,
9535 IN SYSTEM_POWER_STATE MinSystemState
,
9537 IN BOOLEAN Asynchronous
9540 #endif /* (VER_PRODUCTBUILD >= 2195) */
9546 IN POBJECT_ATTRIBUTES KeyObjectAttributes
,
9547 IN POBJECT_ATTRIBUTES FileObjectAttributes
9553 ZwOpenProcessToken (
9554 IN HANDLE ProcessHandle
,
9555 IN ACCESS_MASK DesiredAccess
,
9556 OUT PHANDLE TokenHandle
9563 OUT PHANDLE ThreadHandle
,
9564 IN ACCESS_MASK DesiredAccess
,
9565 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9566 IN PCLIENT_ID ClientId
9573 IN HANDLE ThreadHandle
,
9574 IN ACCESS_MASK DesiredAccess
,
9575 IN BOOLEAN OpenAsSelf
,
9576 OUT PHANDLE TokenHandle
9583 IN HANDLE EventHandle
,
9584 OUT PLONG PreviousState OPTIONAL
9590 ZwQueryDefaultLocale (
9591 IN BOOLEAN ThreadOrSystem
,
9595 #if (VER_PRODUCTBUILD >= 2195)
9600 ZwQueryDirectoryObject (
9601 IN HANDLE DirectoryHandle
,
9604 IN BOOLEAN ReturnSingleEntry
,
9605 IN BOOLEAN RestartScan
,
9606 IN OUT PULONG Context
,
9607 OUT PULONG ReturnLength OPTIONAL
9610 #endif /* (VER_PRODUCTBUILD >= 2195) */
9615 ZwQueryInformationProcess (
9616 IN HANDLE ProcessHandle
,
9617 IN PROCESSINFOCLASS ProcessInformationClass
,
9618 OUT PVOID ProcessInformation
,
9619 IN ULONG ProcessInformationLength
,
9620 OUT PULONG ReturnLength OPTIONAL
9627 IN POBJECT_ATTRIBUTES NewFileObjectAttributes
,
9628 IN HANDLE KeyHandle
,
9629 IN POBJECT_ATTRIBUTES OldFileObjectAttributes
9636 IN HANDLE EventHandle
,
9637 OUT PLONG PreviousState OPTIONAL
9640 #if (VER_PRODUCTBUILD >= 2195)
9646 IN HANDLE KeyHandle
,
9647 IN HANDLE FileHandle
,
9651 #endif /* (VER_PRODUCTBUILD >= 2195) */
9657 IN HANDLE KeyHandle
,
9658 IN HANDLE FileHandle
9664 ZwSetDefaultLocale (
9665 IN BOOLEAN ThreadOrSystem
,
9669 #if (VER_PRODUCTBUILD >= 2195)
9674 ZwSetDefaultUILanguage (
9675 IN LANGID LanguageId
9678 #endif /* (VER_PRODUCTBUILD >= 2195) */
9683 ZwSetInformationProcess (
9684 IN HANDLE ProcessHandle
,
9685 IN PROCESSINFOCLASS ProcessInformationClass
,
9686 IN PVOID ProcessInformation
,
9687 IN ULONG ProcessInformationLength
9694 IN PLARGE_INTEGER NewTime
,
9695 OUT PLARGE_INTEGER OldTime OPTIONAL
9702 IN POBJECT_ATTRIBUTES KeyObjectAttributes
9708 ZwWaitForMultipleObjects (
9709 IN ULONG HandleCount
,
9711 IN WAIT_TYPE WaitType
,
9712 IN BOOLEAN Alertable
,
9713 IN PLARGE_INTEGER Timeout OPTIONAL