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 #define FSRTL_COMMON_FCB_HEADER_LAYOUT \
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;
6165 typedef struct _FSRTL_COMMON_FCB_HEADER
{
6166 FSRTL_COMMON_FCB_HEADER_LAYOUT
6167 } FSRTL_COMMON_FCB_HEADER
, *PFSRTL_COMMON_FCB_HEADER
;
6170 typedef struct _FSRTL_ADVANCED_FCB_HEADER
:FSRTL_COMMON_FCB_HEADER
{
6171 #else /* __cplusplus */
6172 typedef struct _FSRTL_ADVANCED_FCB_HEADER
{
6173 FSRTL_COMMON_FCB_HEADER_LAYOUT
6174 #endif /* __cplusplus */
6175 PFAST_MUTEX FastMutex
;
6176 LIST_ENTRY FilterContexts
;
6177 #if (NTDDI_VERSION >= NTDDI_VISTA)
6178 EX_PUSH_LOCK PushLock
;
6179 PVOID
*FileContextSupportPointer
;
6181 } FSRTL_ADVANCED_FCB_HEADER
, *PFSRTL_ADVANCED_FCB_HEADER
;
6183 #define FSRTL_FCB_HEADER_V0 (0x00)
6184 #define FSRTL_FCB_HEADER_V1 (0x01)
6186 #define FSRTL_FLAG_FILE_MODIFIED (0x01)
6187 #define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
6188 #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
6189 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
6190 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
6191 #define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
6192 #define FSRTL_FLAG_ADVANCED_HEADER (0x40)
6193 #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
6195 #define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
6196 #define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02)
6197 #define FSRTL_FLAG2_PURGE_WHEN_MAPPED (0x04)
6198 #define FSRTL_FLAG2_IS_PAGING_FILE (0x08)
6200 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
6201 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
6202 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
6203 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
6204 #define FSRTL_NETWORK1_TOP_LEVEL_IRP ((LONG_PTR)0x05)
6205 #define FSRTL_NETWORK2_TOP_LEVEL_IRP ((LONG_PTR)0x06)
6206 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG ((LONG_PTR)0xFFFF)
6208 typedef struct _EOF_WAIT_BLOCK
{
6209 LIST_ENTRY EofWaitLinks
;
6211 } EOF_WAIT_BLOCK
, *PEOF_WAIT_BLOCK
;
6213 typedef struct _FSRTL_AUXILIARY_BUFFER
{
6218 } FSRTL_AUXILIARY_BUFFER
, *PFSRTL_AUXILIARY_BUFFER
;
6220 #define FSRTL_AUXILIARY_FLAG_DEALLOCATE 0x00000001
6222 typedef struct _FILE_LOCK_INFO
{
6223 LARGE_INTEGER StartingByte
;
6224 LARGE_INTEGER Length
;
6225 BOOLEAN ExclusiveLock
;
6227 PFILE_OBJECT FileObject
;
6229 LARGE_INTEGER EndingByte
;
6230 } FILE_LOCK_INFO
, *PFILE_LOCK_INFO
;
6233 (NTAPI
*PCOMPLETE_LOCK_IRP_ROUTINE
) (
6238 (NTAPI
*PUNLOCK_ROUTINE
) (
6240 IN PFILE_LOCK_INFO FileLockInfo
);
6242 typedef struct _FILE_LOCK
{
6243 PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine
;
6244 PUNLOCK_ROUTINE UnlockRoutine
;
6245 BOOLEAN FastIoIsQuestionable
;
6247 PVOID LockInformation
;
6248 FILE_LOCK_INFO LastReturnedLockInfo
;
6249 PVOID LastReturnedLock
;
6250 LONG
volatile LockRequestsInProgress
;
6251 } FILE_LOCK
, *PFILE_LOCK
;
6253 typedef struct _TUNNEL
{
6255 PRTL_SPLAY_LINKS Cache
;
6256 LIST_ENTRY TimerQueue
;
6260 typedef enum _FSRTL_COMPARISON_RESULT
{
6264 } FSRTL_COMPARISON_RESULT
;
6266 #define FSRTL_FAT_LEGAL 0x01
6267 #define FSRTL_HPFS_LEGAL 0x02
6268 #define FSRTL_NTFS_LEGAL 0x04
6269 #define FSRTL_WILD_CHARACTER 0x08
6270 #define FSRTL_OLE_LEGAL 0x10
6271 #define FSRTL_NTFS_STREAM_LEGAL (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL)
6273 typedef struct _BASE_MCB
{
6274 ULONG MaximumPairCount
;
6279 } BASE_MCB
, *PBASE_MCB
;
6281 typedef struct _LARGE_MCB
{
6282 PKGUARDED_MUTEX GuardedMutex
;
6284 } LARGE_MCB
, *PLARGE_MCB
;
6286 #define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
6288 typedef struct _MCB
{
6289 LARGE_MCB DummyFieldThatSizesThisStructureCorrectly
;
6292 typedef PVOID OPLOCK
, *POPLOCK
;
6295 (NTAPI
*POPLOCK_WAIT_COMPLETE_ROUTINE
) (
6300 (NTAPI
*POPLOCK_FS_PREPOST_IRP
) (
6304 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
6305 #define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED 0x00000001
6308 #if (NTDDI_VERSION >= NTDDI_WIN7)
6309 #define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY 0x00000002
6310 #define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK 0x00000004
6311 #define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS 0x00000008
6312 #define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH 0x00000001
6315 #if (NTDDI_VERSION >= NTDDI_WIN7)
6317 typedef struct _OPLOCK_KEY_ECP_CONTEXT
{
6320 } OPLOCK_KEY_ECP_CONTEXT
, *POPLOCK_KEY_ECP_CONTEXT
;
6322 DEFINE_GUID( GUID_ECP_OPLOCK_KEY
, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f );
6326 #define FSRTL_VOLUME_DISMOUNT 1
6327 #define FSRTL_VOLUME_DISMOUNT_FAILED 2
6328 #define FSRTL_VOLUME_LOCK 3
6329 #define FSRTL_VOLUME_LOCK_FAILED 4
6330 #define FSRTL_VOLUME_UNLOCK 5
6331 #define FSRTL_VOLUME_MOUNT 6
6332 #define FSRTL_VOLUME_NEEDS_CHKDSK 7
6333 #define FSRTL_VOLUME_WORM_NEAR_FULL 8
6334 #define FSRTL_VOLUME_WEARING_OUT 9
6335 #define FSRTL_VOLUME_FORCED_CLOSED 10
6336 #define FSRTL_VOLUME_INFO_MAKE_COMPAT 11
6337 #define FSRTL_VOLUME_PREPARING_EJECT 12
6338 #define FSRTL_VOLUME_CHANGE_SIZE 13
6339 #define FSRTL_VOLUME_BACKGROUND_FORMAT 14
6341 typedef PVOID PNOTIFY_SYNC
;
6344 (NTAPI
*PCHECK_FOR_TRAVERSE_ACCESS
) (
6345 IN PVOID NotifyContext
,
6346 IN PVOID TargetContext OPTIONAL
,
6347 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
);
6350 (NTAPI
*PFILTER_REPORT_CHANGE
) (
6351 IN PVOID NotifyContext
,
6352 IN PVOID FilterContext
);
6355 (NTAPI
*PFSRTL_STACK_OVERFLOW_ROUTINE
) (
6359 #if (NTDDI_VERSION >= NTDDI_VISTA)
6361 #define FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED 0x00000001
6362 #define FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED 0x00000002
6363 #define FSRTL_UNC_PROVIDER_FLAGS_DOMAIN_SVC_AWARE 0x00000004
6365 #define FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA 0x00000001
6367 #define FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA 0x00000001
6368 #define FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL 0x00000002
6370 #define FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL 0x00000002
6372 #define FSRTL_VIRTDISK_FULLY_ALLOCATED 0x00000001
6373 #define FSRTL_VIRTDISK_NO_DRIVE_LETTER 0x00000002
6375 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_1
{
6377 } FSRTL_MUP_PROVIDER_INFO_LEVEL_1
, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_1
;
6379 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_2
{
6381 UNICODE_STRING ProviderName
;
6382 } FSRTL_MUP_PROVIDER_INFO_LEVEL_2
, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_2
;
6385 (*PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK
) (
6386 IN OUT PVOID EcpContext
,
6387 IN LPCGUID EcpType
);
6389 typedef struct _ECP_LIST ECP_LIST
, *PECP_LIST
;
6391 typedef ULONG FSRTL_ALLOCATE_ECPLIST_FLAGS
;
6392 typedef ULONG FSRTL_ALLOCATE_ECP_FLAGS
;
6393 typedef ULONG FSRTL_ECP_LOOKASIDE_FLAGS
;
6395 typedef enum _FSRTL_CHANGE_BACKING_TYPE
{
6396 ChangeDataControlArea
,
6397 ChangeImageControlArea
,
6398 ChangeSharedCacheMap
6399 } FSRTL_CHANGE_BACKING_TYPE
, *PFSRTL_CHANGE_BACKING_TYPE
;
6401 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
6403 typedef struct _FSRTL_PER_FILE_CONTEXT
{
6407 PFREE_FUNCTION FreeCallback
;
6408 } FSRTL_PER_FILE_CONTEXT
, *PFSRTL_PER_FILE_CONTEXT
;
6410 typedef struct _FSRTL_PER_STREAM_CONTEXT
{
6414 PFREE_FUNCTION FreeCallback
;
6415 } FSRTL_PER_STREAM_CONTEXT
, *PFSRTL_PER_STREAM_CONTEXT
;
6417 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6419 (*PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS
) (
6420 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader
);
6423 typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT
{
6427 } FSRTL_PER_FILEOBJECT_CONTEXT
, *PFSRTL_PER_FILEOBJECT_CONTEXT
;
6429 #define FsRtlEnterFileSystem KeEnterCriticalRegion
6430 #define FsRtlExitFileSystem KeLeaveCriticalRegion
6432 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_HARD_ERROR 0x1
6433 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_LOG_ENTRY 0x2
6435 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6441 IN PFILE_OBJECT FileObject
,
6442 IN PLARGE_INTEGER FileOffset
,
6447 OUT PIO_STATUS_BLOCK IoStatus
,
6448 IN PDEVICE_OBJECT DeviceObject
);
6454 IN PFILE_OBJECT FileObject
,
6455 IN PLARGE_INTEGER FileOffset
,
6460 OUT PIO_STATUS_BLOCK IoStatus
,
6461 IN PDEVICE_OBJECT DeviceObject
);
6467 IN PFILE_OBJECT FileObject
,
6468 IN PLARGE_INTEGER FileOffset
,
6472 OUT PIO_STATUS_BLOCK IoStatus
,
6473 IN PDEVICE_OBJECT DeviceObject OPTIONAL
);
6478 FsRtlMdlReadCompleteDev(
6479 IN PFILE_OBJECT FileObject
,
6481 IN PDEVICE_OBJECT DeviceObject OPTIONAL
);
6486 FsRtlPrepareMdlWriteDev(
6487 IN PFILE_OBJECT FileObject
,
6488 IN PLARGE_INTEGER FileOffset
,
6492 OUT PIO_STATUS_BLOCK IoStatus
,
6493 IN PDEVICE_OBJECT DeviceObject
);
6498 FsRtlMdlWriteCompleteDev(
6499 IN PFILE_OBJECT FileObject
,
6500 IN PLARGE_INTEGER FileOffset
,
6502 IN PDEVICE_OBJECT DeviceObject
);
6507 FsRtlAcquireFileExclusive(
6508 IN PFILE_OBJECT FileObject
);
6514 IN PFILE_OBJECT FileObject
);
6520 IN PFILE_OBJECT FileObject
,
6521 OUT PLARGE_INTEGER FileSize
);
6526 FsRtlIsTotalDeviceFailure(
6527 IN NTSTATUS Status
);
6532 FsRtlAllocateFileLock(
6533 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL
,
6534 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
);
6540 IN PFILE_LOCK FileLock
);
6545 FsRtlInitializeFileLock(
6546 IN PFILE_LOCK FileLock
,
6547 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL
,
6548 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
);
6553 FsRtlUninitializeFileLock(
6554 IN PFILE_LOCK FileLock
);
6557 FsRtlProcessFileLock:
6560 -STATUS_INVALID_DEVICE_REQUEST
6561 -STATUS_RANGE_NOT_LOCKED from unlock routines.
6562 -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
6563 (redirected IoStatus->Status).
6566 -switch ( Irp->CurrentStackLocation->MinorFunction )
6567 lock: return FsRtlPrivateLock;
6568 unlocksingle: return FsRtlFastUnlockSingle;
6569 unlockall: return FsRtlFastUnlockAll;
6570 unlockallbykey: return FsRtlFastUnlockAllByKey;
6571 default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
6572 return STATUS_INVALID_DEVICE_REQUEST;
6574 -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
6575 -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
6580 FsRtlProcessFileLock(
6581 IN PFILE_LOCK FileLock
,
6583 IN PVOID Context OPTIONAL
);
6586 FsRtlCheckLockForReadAccess:
6588 All this really does is pick out the lock parameters from the irp (io stack
6589 location?), get IoGetRequestorProcess, and pass values on to
6590 FsRtlFastCheckLockForRead.
6595 FsRtlCheckLockForReadAccess(
6596 IN PFILE_LOCK FileLock
,
6600 FsRtlCheckLockForWriteAccess:
6602 All this really does is pick out the lock parameters from the irp (io stack
6603 location?), get IoGetRequestorProcess, and pass values on to
6604 FsRtlFastCheckLockForWrite.
6609 FsRtlCheckLockForWriteAccess(
6610 IN PFILE_LOCK FileLock
,
6616 FsRtlFastCheckLockForRead(
6617 IN PFILE_LOCK FileLock
,
6618 IN PLARGE_INTEGER FileOffset
,
6619 IN PLARGE_INTEGER Length
,
6621 IN PFILE_OBJECT FileObject
,
6627 FsRtlFastCheckLockForWrite(
6628 IN PFILE_LOCK FileLock
,
6629 IN PLARGE_INTEGER FileOffset
,
6630 IN PLARGE_INTEGER Length
,
6632 IN PFILE_OBJECT FileObject
,
6636 FsRtlGetNextFileLock:
6638 ret: NULL if no more locks
6641 FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
6642 FileLock->LastReturnedLock as storage.
6643 LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
6644 list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
6645 calls with Restart = FALSE.
6650 FsRtlGetNextFileLock(
6651 IN PFILE_LOCK FileLock
,
6652 IN BOOLEAN Restart
);
6657 FsRtlFastUnlockSingle(
6658 IN PFILE_LOCK FileLock
,
6659 IN PFILE_OBJECT FileObject
,
6660 IN PLARGE_INTEGER FileOffset
,
6661 IN PLARGE_INTEGER Length
,
6662 IN PEPROCESS Process
,
6664 IN PVOID Context OPTIONAL
,
6665 IN BOOLEAN AlreadySynchronized
);
6671 IN PFILE_LOCK FileLock
,
6672 IN PFILE_OBJECT FileObject
,
6673 IN PEPROCESS Process
,
6674 IN PVOID Context OPTIONAL
);
6679 FsRtlFastUnlockAllByKey(
6680 IN PFILE_LOCK FileLock
,
6681 IN PFILE_OBJECT FileObject
,
6682 IN PEPROCESS Process
,
6684 IN PVOID Context OPTIONAL
);
6689 ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
6692 -Calls IoCompleteRequest if Irp
6693 -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
6699 IN PFILE_LOCK FileLock
,
6700 IN PFILE_OBJECT FileObject
,
6701 IN PLARGE_INTEGER FileOffset
,
6702 IN PLARGE_INTEGER Length
,
6703 IN PEPROCESS Process
,
6705 IN BOOLEAN FailImmediately
,
6706 IN BOOLEAN ExclusiveLock
,
6707 OUT PIO_STATUS_BLOCK IoStatus
,
6708 IN PIRP Irp OPTIONAL
,
6710 IN BOOLEAN AlreadySynchronized
);
6715 FsRtlInitializeTunnelCache(
6721 FsRtlAddToTunnelCache(
6723 IN ULONGLONG DirectoryKey
,
6724 IN PUNICODE_STRING ShortName
,
6725 IN PUNICODE_STRING LongName
,
6726 IN BOOLEAN KeyByShortName
,
6727 IN ULONG DataLength
,
6733 FsRtlFindInTunnelCache(
6735 IN ULONGLONG DirectoryKey
,
6736 IN PUNICODE_STRING Name
,
6737 OUT PUNICODE_STRING ShortName
,
6738 OUT PUNICODE_STRING LongName
,
6739 IN OUT PULONG DataLength
,
6745 FsRtlDeleteKeyFromTunnelCache(
6747 IN ULONGLONG DirectoryKey
);
6752 FsRtlDeleteTunnelCache(
6759 IN ANSI_STRING Name
,
6760 OUT PANSI_STRING FirstPart
,
6761 OUT PANSI_STRING RemainingPart
);
6766 FsRtlDoesDbcsContainWildCards(
6767 IN PANSI_STRING Name
);
6772 FsRtlIsDbcsInExpression(
6773 IN PANSI_STRING Expression
,
6774 IN PANSI_STRING Name
);
6779 FsRtlIsFatDbcsLegal(
6780 IN ANSI_STRING DbcsName
,
6781 IN BOOLEAN WildCardsPermissible
,
6782 IN BOOLEAN PathNamePermissible
,
6783 IN BOOLEAN LeadingBackslashPermissible
);
6788 FsRtlIsHpfsDbcsLegal(
6789 IN ANSI_STRING DbcsName
,
6790 IN BOOLEAN WildCardsPermissible
,
6791 IN BOOLEAN PathNamePermissible
,
6792 IN BOOLEAN LeadingBackslashPermissible
);
6797 FsRtlNormalizeNtstatus(
6798 IN NTSTATUS Exception
,
6799 IN NTSTATUS GenericException
);
6804 FsRtlIsNtstatusExpected(
6805 IN NTSTATUS Ntstatus
);
6810 FsRtlAllocateResource(
6816 FsRtlInitializeLargeMcb(
6818 IN POOL_TYPE PoolType
);
6823 FsRtlUninitializeLargeMcb(
6831 IN BOOLEAN SelfSynchronized
);
6836 FsRtlTruncateLargeMcb(
6843 FsRtlAddLargeMcbEntry(
6847 IN LONGLONG SectorCount
);
6852 FsRtlRemoveLargeMcbEntry(
6855 IN LONGLONG SectorCount
);
6860 FsRtlLookupLargeMcbEntry(
6863 OUT PLONGLONG Lbn OPTIONAL
,
6864 OUT PLONGLONG SectorCountFromLbn OPTIONAL
,
6865 OUT PLONGLONG StartingLbn OPTIONAL
,
6866 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL
,
6867 OUT PULONG Index OPTIONAL
);
6872 FsRtlLookupLastLargeMcbEntry(
6880 FsRtlLookupLastLargeMcbEntryAndIndex(
6881 IN PLARGE_MCB OpaqueMcb
,
6882 OUT PLONGLONG LargeVbn
,
6883 OUT PLONGLONG LargeLbn
,
6889 FsRtlNumberOfRunsInLargeMcb(
6895 FsRtlGetNextLargeMcbEntry(
6900 OUT PLONGLONG SectorCount
);
6908 IN LONGLONG Amount
);
6915 IN POOL_TYPE PoolType
);
6920 FsRtlUninitializeMcb(
6937 IN ULONG SectorCount
);
6942 FsRtlRemoveMcbEntry(
6945 IN ULONG SectorCount
);
6950 FsRtlLookupMcbEntry(
6954 OUT PULONG SectorCount OPTIONAL
,
6960 FsRtlLookupLastMcbEntry(
6968 FsRtlNumberOfRunsInMcb(
6974 FsRtlGetNextMcbEntry(
6979 OUT PULONG SectorCount
);
6985 IN PDEVICE_OBJECT TargetDevice
);
6990 FsRtlInitializeOplock(
6991 IN OUT POPLOCK Oplock
);
6996 FsRtlUninitializeOplock(
6997 IN OUT POPLOCK Oplock
);
7005 IN ULONG OpenCount
);
7014 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
7015 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
);
7020 FsRtlOplockIsFastIoPossible(
7026 FsRtlCurrentBatchOplock(
7032 FsRtlNotifyVolumeEvent(
7033 IN PFILE_OBJECT FileObject
,
7034 IN ULONG EventCode
);
7039 FsRtlNotifyInitializeSync(
7040 IN PNOTIFY_SYNC
*NotifySync
);
7045 FsRtlNotifyUninitializeSync(
7046 IN PNOTIFY_SYNC
*NotifySync
);
7051 FsRtlNotifyFullChangeDirectory(
7052 IN PNOTIFY_SYNC NotifySync
,
7053 IN PLIST_ENTRY NotifyList
,
7055 IN PSTRING FullDirectoryName
,
7056 IN BOOLEAN WatchTree
,
7057 IN BOOLEAN IgnoreBuffer
,
7058 IN ULONG CompletionFilter
,
7059 IN PIRP NotifyIrp OPTIONAL
,
7060 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL
,
7061 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
);
7066 FsRtlNotifyFilterReportChange(
7067 IN PNOTIFY_SYNC NotifySync
,
7068 IN PLIST_ENTRY NotifyList
,
7069 IN PSTRING FullTargetName
,
7070 IN USHORT TargetNameOffset
,
7071 IN PSTRING StreamName OPTIONAL
,
7072 IN PSTRING NormalizedParentName OPTIONAL
,
7073 IN ULONG FilterMatch
,
7075 IN PVOID TargetContext OPTIONAL
,
7076 IN PVOID FilterContext OPTIONAL
);
7081 FsRtlNotifyFullReportChange(
7082 IN PNOTIFY_SYNC NotifySync
,
7083 IN PLIST_ENTRY NotifyList
,
7084 IN PSTRING FullTargetName
,
7085 IN USHORT TargetNameOffset
,
7086 IN PSTRING StreamName OPTIONAL
,
7087 IN PSTRING NormalizedParentName OPTIONAL
,
7088 IN ULONG FilterMatch
,
7090 IN PVOID TargetContext OPTIONAL
);
7096 IN PNOTIFY_SYNC NotifySync
,
7097 IN PLIST_ENTRY NotifyList
,
7098 IN PVOID FsContext
);
7104 IN UNICODE_STRING Name
,
7105 OUT PUNICODE_STRING FirstPart
,
7106 OUT PUNICODE_STRING RemainingPart
);
7111 FsRtlDoesNameContainWildCards(
7112 IN PUNICODE_STRING Name
);
7118 IN PCUNICODE_STRING Name1
,
7119 IN PCUNICODE_STRING Name2
,
7120 IN BOOLEAN IgnoreCase
,
7121 IN PCWCH UpcaseTable OPTIONAL
);
7126 FsRtlIsNameInExpression(
7127 IN PUNICODE_STRING Expression
,
7128 IN PUNICODE_STRING Name
,
7129 IN BOOLEAN IgnoreCase
,
7130 IN PWCHAR UpcaseTable OPTIONAL
);
7135 FsRtlPostPagingFileStackOverflow(
7138 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
);
7143 FsRtlPostStackOverflow (
7146 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
);
7151 FsRtlRegisterUncProvider(
7152 OUT PHANDLE MupHandle
,
7153 IN PUNICODE_STRING RedirectorDeviceName
,
7154 IN BOOLEAN MailslotsSupported
);
7159 FsRtlDeregisterUncProvider(
7165 FsRtlTeardownPerStreamContexts(
7166 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader
);
7171 FsRtlCreateSectionForDataScan(
7172 OUT PHANDLE SectionHandle
,
7173 OUT PVOID
*SectionObject
,
7174 OUT PLARGE_INTEGER SectionFileSize OPTIONAL
,
7175 IN PFILE_OBJECT FileObject
,
7176 IN ACCESS_MASK DesiredAccess
,
7177 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
7178 IN PLARGE_INTEGER MaximumSize OPTIONAL
,
7179 IN ULONG SectionPageProtection
,
7180 IN ULONG AllocationAttributes
,
7183 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
7185 #if (NTDDI_VERSION >= NTDDI_WINXP)
7190 FsRtlNotifyFilterChangeDirectory(
7191 IN PNOTIFY_SYNC NotifySync
,
7192 IN PLIST_ENTRY NotifyList
,
7194 IN PSTRING FullDirectoryName
,
7195 IN BOOLEAN WatchTree
,
7196 IN BOOLEAN IgnoreBuffer
,
7197 IN ULONG CompletionFilter
,
7198 IN PIRP NotifyIrp OPTIONAL
,
7199 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL
,
7200 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
,
7201 IN PFILTER_REPORT_CHANGE FilterCallback OPTIONAL
);
7206 FsRtlInsertPerStreamContext(
7207 IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext
,
7208 IN PFSRTL_PER_STREAM_CONTEXT Ptr
);
7211 PFSRTL_PER_STREAM_CONTEXT
7213 FsRtlLookupPerStreamContextInternal(
7214 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext
,
7215 IN PVOID OwnerId OPTIONAL
,
7216 IN PVOID InstanceId OPTIONAL
);
7219 PFSRTL_PER_STREAM_CONTEXT
7221 FsRtlRemovePerStreamContext(
7222 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext
,
7223 IN PVOID OwnerId OPTIONAL
,
7224 IN PVOID InstanceId OPTIONAL
);
7229 FsRtlIncrementCcFastReadNotPossible(
7235 FsRtlIncrementCcFastReadWait(
7241 FsRtlIncrementCcFastReadNoWait(
7247 FsRtlIncrementCcFastReadResourceMiss(
7254 IN PFILE_OBJECT FileObject
);
7256 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
7258 #if (NTDDI_VERSION >= NTDDI_WS03)
7263 FsRtlInitializeBaseMcb(
7265 IN POOL_TYPE PoolType
);
7270 FsRtlUninitializeBaseMcb(
7282 FsRtlTruncateBaseMcb(
7289 FsRtlAddBaseMcbEntry(
7293 IN LONGLONG SectorCount
);
7298 FsRtlRemoveBaseMcbEntry(
7301 IN LONGLONG SectorCount
);
7306 FsRtlLookupBaseMcbEntry(
7309 OUT PLONGLONG Lbn OPTIONAL
,
7310 OUT PLONGLONG SectorCountFromLbn OPTIONAL
,
7311 OUT PLONGLONG StartingLbn OPTIONAL
,
7312 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL
,
7313 OUT PULONG Index OPTIONAL
);
7318 FsRtlLookupLastBaseMcbEntry(
7326 FsRtlLookupLastBaseMcbEntryAndIndex(
7327 IN PBASE_MCB OpaqueMcb
,
7328 IN OUT PLONGLONG LargeVbn
,
7329 IN OUT PLONGLONG LargeLbn
,
7330 IN OUT PULONG Index
);
7335 FsRtlNumberOfRunsInBaseMcb(
7341 FsRtlGetNextBaseMcbEntry(
7346 OUT PLONGLONG SectorCount
);
7354 IN LONGLONG Amount
);
7356 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
7358 #if (NTDDI_VERSION >= NTDDI_VISTA)
7362 FsRtlInitializeBaseMcbEx(
7364 IN POOL_TYPE PoolType
,
7369 FsRtlAddBaseMcbEntryEx(
7373 IN LONGLONG SectorCount
);
7384 FsRtlOplockBreakToNone(
7385 IN OUT POPLOCK Oplock
,
7386 IN PIO_STACK_LOCATION IrpSp OPTIONAL
,
7388 IN PVOID Context OPTIONAL
,
7389 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
7390 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
);
7395 FsRtlNotifyVolumeEventEx(
7396 IN PFILE_OBJECT FileObject
,
7398 IN PTARGET_DEVICE_CUSTOM_NOTIFICATION Event
);
7403 FsRtlNotifyCleanupAll(
7404 IN PNOTIFY_SYNC NotifySync
,
7405 IN PLIST_ENTRY NotifyList
);
7409 FsRtlRegisterUncProviderEx(
7410 OUT PHANDLE MupHandle
,
7411 IN PUNICODE_STRING RedirDevName
,
7412 IN PDEVICE_OBJECT DeviceObject
,
7418 FsRtlCancellableWaitForSingleObject(
7420 IN PLARGE_INTEGER Timeout OPTIONAL
,
7421 IN PIRP Irp OPTIONAL
);
7426 FsRtlCancellableWaitForMultipleObjects(
7428 IN PVOID ObjectArray
[],
7429 IN WAIT_TYPE WaitType
,
7430 IN PLARGE_INTEGER Timeout OPTIONAL
,
7431 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
,
7432 IN PIRP Irp OPTIONAL
);
7437 FsRtlMupGetProviderInfoFromFileObject(
7438 IN PFILE_OBJECT pFileObject
,
7441 IN OUT PULONG pBufferSize
);
7446 FsRtlMupGetProviderIdFromName(
7447 IN PUNICODE_STRING pProviderName
,
7448 OUT PULONG32 pProviderId
);
7453 FsRtlIncrementCcFastMdlReadWait(
7459 FsRtlValidateReparsePointBuffer(
7460 IN ULONG BufferLength
,
7461 IN PREPARSE_DATA_BUFFER ReparseBuffer
);
7466 FsRtlRemoveDotsFromPath(
7467 IN OUT PWSTR OriginalString
,
7468 IN USHORT PathLength
,
7469 OUT USHORT
*NewLength
);
7474 FsRtlAllocateExtraCreateParameterList(
7475 IN FSRTL_ALLOCATE_ECPLIST_FLAGS Flags
,
7476 OUT PECP_LIST
*EcpList
);
7481 FsRtlFreeExtraCreateParameterList(
7482 IN PECP_LIST EcpList
);
7487 FsRtlAllocateExtraCreateParameter(
7489 IN ULONG SizeOfContext
,
7490 IN FSRTL_ALLOCATE_ECP_FLAGS Flags
,
7491 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL
,
7493 OUT PVOID
*EcpContext
);
7498 FsRtlFreeExtraCreateParameter(
7499 IN PVOID EcpContext
);
7504 FsRtlInitExtraCreateParameterLookasideList(
7505 IN OUT PVOID Lookaside
,
7506 IN FSRTL_ECP_LOOKASIDE_FLAGS Flags
,
7512 FsRtlDeleteExtraCreateParameterLookasideList(
7513 IN OUT PVOID Lookaside
,
7514 IN FSRTL_ECP_LOOKASIDE_FLAGS Flags
);
7519 FsRtlAllocateExtraCreateParameterFromLookasideList(
7521 IN ULONG SizeOfContext
,
7522 IN FSRTL_ALLOCATE_ECP_FLAGS Flags
,
7523 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL
,
7524 IN OUT PVOID LookasideList
,
7525 OUT PVOID
*EcpContext
);
7530 FsRtlInsertExtraCreateParameter(
7531 IN OUT PECP_LIST EcpList
,
7532 IN OUT PVOID EcpContext
);
7537 FsRtlFindExtraCreateParameter(
7538 IN PECP_LIST EcpList
,
7540 OUT PVOID
*EcpContext OPTIONAL
,
7541 OUT ULONG
*EcpContextSize OPTIONAL
);
7546 FsRtlRemoveExtraCreateParameter(
7547 IN OUT PECP_LIST EcpList
,
7549 OUT PVOID
*EcpContext
,
7550 OUT ULONG
*EcpContextSize OPTIONAL
);
7555 FsRtlGetEcpListFromIrp(
7557 OUT PECP_LIST
*EcpList OPTIONAL
);
7562 FsRtlSetEcpListIntoIrp(
7564 IN PECP_LIST EcpList
);
7569 FsRtlGetNextExtraCreateParameter(
7570 IN PECP_LIST EcpList
,
7571 IN PVOID CurrentEcpContext OPTIONAL
,
7572 OUT LPGUID NextEcpType OPTIONAL
,
7573 OUT PVOID
*NextEcpContext OPTIONAL
,
7574 OUT ULONG
*NextEcpContextSize OPTIONAL
);
7579 FsRtlAcknowledgeEcp(
7580 IN PVOID EcpContext
);
7585 FsRtlIsEcpAcknowledged(
7586 IN PVOID EcpContext
);
7591 FsRtlIsEcpFromUserMode(
7592 IN PVOID EcpContext
);
7597 FsRtlChangeBackingFileObject(
7598 IN PFILE_OBJECT CurrentFileObject OPTIONAL
,
7599 IN PFILE_OBJECT NewFileObject
,
7600 IN FSRTL_CHANGE_BACKING_TYPE ChangeBackingType
,
7606 FsRtlLogCcFlushError(
7607 IN PUNICODE_STRING FileName
,
7608 IN PDEVICE_OBJECT DeviceObject
,
7609 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
7610 IN NTSTATUS FlushError
,
7616 FsRtlAreVolumeStartupApplicationsComplete(
7622 FsRtlQueryMaximumVirtualDiskNestingLevel(
7628 FsRtlGetVirtualDiskNestingLevel(
7629 IN PDEVICE_OBJECT DeviceObject
,
7630 OUT PULONG NestingLevel
,
7631 OUT PULONG NestingFlags OPTIONAL
);
7633 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
7635 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
7643 IN PVOID Context OPTIONAL
,
7644 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
7645 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
);
7649 #if (NTDDI_VERSION >= NTDDI_WIN7)
7654 FsRtlAreThereCurrentOrInProgressFileLocks(
7655 IN PFILE_LOCK FileLock
);
7660 FsRtlOplockIsSharedRequest(
7670 IN PVOID Context OPTIONAL
,
7671 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
7672 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
);
7677 FsRtlCurrentOplockH(
7683 FsRtlOplockBreakToNoneEx(
7684 IN OUT POPLOCK Oplock
,
7687 IN PVOID Context OPTIONAL
,
7688 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
7689 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
);
7694 FsRtlOplockFsctrlEx(
7703 FsRtlOplockKeysEqual(
7704 IN PFILE_OBJECT Fo1 OPTIONAL
,
7705 IN PFILE_OBJECT Fo2 OPTIONAL
);
7710 FsRtlInitializeExtraCreateParameterList(
7711 IN OUT PECP_LIST EcpList
);
7716 FsRtlInitializeExtraCreateParameter(
7719 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL
,
7722 IN PVOID ListAllocatedFrom OPTIONAL
);
7724 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
7729 FsRtlInsertPerFileContext(
7730 IN PVOID
* PerFileContextPointer
,
7731 IN PFSRTL_PER_FILE_CONTEXT Ptr
);
7734 PFSRTL_PER_FILE_CONTEXT
7736 FsRtlLookupPerFileContext(
7737 IN PVOID
* PerFileContextPointer
,
7738 IN PVOID OwnerId OPTIONAL
,
7739 IN PVOID InstanceId OPTIONAL
);
7742 PFSRTL_PER_FILE_CONTEXT
7744 FsRtlRemovePerFileContext(
7745 IN PVOID
* PerFileContextPointer
,
7746 IN PVOID OwnerId OPTIONAL
,
7747 IN PVOID InstanceId OPTIONAL
);
7752 FsRtlTeardownPerFileContexts(
7753 IN PVOID
* PerFileContextPointer
);
7758 FsRtlInsertPerFileObjectContext(
7759 IN PFILE_OBJECT FileObject
,
7760 IN PFSRTL_PER_FILEOBJECT_CONTEXT Ptr
);
7763 PFSRTL_PER_FILEOBJECT_CONTEXT
7765 FsRtlLookupPerFileObjectContext(
7766 IN PFILE_OBJECT FileObject
,
7767 IN PVOID OwnerId OPTIONAL
,
7768 IN PVOID InstanceId OPTIONAL
);
7771 PFSRTL_PER_FILEOBJECT_CONTEXT
7773 FsRtlRemovePerFileObjectContext(
7774 IN PFILE_OBJECT FileObject
,
7775 IN PVOID OwnerId OPTIONAL
,
7776 IN PVOID InstanceId OPTIONAL
);
7778 #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
7779 FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
7782 #define FsRtlAreThereCurrentFileLocks(FL) ( \
7783 ((FL)->FastIoIsQuestionable) \
7786 #define FsRtlIncrementLockRequestsInProgress(FL) { \
7787 ASSERT( (FL)->LockRequestsInProgress >= 0 ); \
7789 (InterlockedIncrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
7792 #define FsRtlDecrementLockRequestsInProgress(FL) { \
7793 ASSERT( (FL)->LockRequestsInProgress > 0 ); \
7795 (InterlockedDecrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
7798 extern NTKERNELAPI PUSHORT NlsOemLeadByteInfo
;
7799 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
7801 #ifdef NLS_MB_CODE_PAGE_TAG
7802 #undef NLS_MB_CODE_PAGE_TAG
7804 #define NLS_MB_CODE_PAGE_TAG NlsMbOemCodePageTag
7806 /* GCC compatible definition, MS one is retarded */
7807 extern NTKERNELAPI
const UCHAR
* const FsRtlLegalAnsiCharacterArray
;
7808 #define LEGAL_ANSI_CHARACTER_ARRAY FsRtlLegalAnsiCharacterArray
7810 #define FsRtlIsAnsiCharacterWild(C) ( \
7811 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \
7814 #define FsRtlIsAnsiCharacterLegalFat(C, WILD) ( \
7815 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_FAT_LEGAL) | \
7816 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7819 #define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) ( \
7820 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) | \
7821 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7824 #define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) ( \
7825 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) | \
7826 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7829 #define FsRtlIsAnsiCharacterLegalNtfsStream(C,WILD_OK) ( \
7830 FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_NTFS_STREAM_LEGAL) \
7833 #define FsRtlIsAnsiCharacterLegal(C,FLAGS) ( \
7834 FsRtlTestAnsiCharacter((C), TRUE, FALSE, (FLAGS)) \
7837 #define FsRtlTestAnsiCharacter(C, DEFAULT_RET, WILD_OK, FLAGS) ( \
7838 ((SCHAR)(C) < 0) ? DEFAULT_RET : \
7839 FlagOn( LEGAL_ANSI_CHARACTER_ARRAY[(C)], \
7841 ((WILD_OK) ? FSRTL_WILD_CHARACTER : 0) ) \
7844 #define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \
7845 (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \
7846 (NLS_MB_CODE_PAGE_TAG && \
7847 (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \
7850 #define FsRtlIsUnicodeCharacterWild(C) ( \
7853 FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER )) \
7856 #define FsRtlInitPerFileContext( _fc, _owner, _inst, _cb) \
7857 ((_fc)->OwnerId = (_owner), \
7858 (_fc)->InstanceId = (_inst), \
7859 (_fc)->FreeCallback = (_cb))
7861 #define FsRtlGetPerFileContextPointer(_fo) \
7862 (FsRtlSupportsPerFileContexts(_fo) ? \
7863 FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer : \
7866 #define FsRtlSupportsPerFileContexts(_fo) \
7867 ((FsRtlGetPerStreamContextPointer(_fo) != NULL) && \
7868 (FsRtlGetPerStreamContextPointer(_fo)->Version >= FSRTL_FCB_HEADER_V1) && \
7869 (FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer != NULL))
7871 #define FsRtlSetupAdvancedHeaderEx( _advhdr, _fmutx, _fctxptr ) \
7873 FsRtlSetupAdvancedHeader( _advhdr, _fmutx ); \
7874 if ((_fctxptr) != NULL) { \
7875 (_advhdr)->FileContextSupportPointer = (_fctxptr); \
7879 #define FsRtlGetPerStreamContextPointer(FO) ( \
7880 (PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext \
7883 #define FsRtlInitPerStreamContext(PSC, O, I, FC) ( \
7884 (PSC)->OwnerId = (O), \
7885 (PSC)->InstanceId = (I), \
7886 (PSC)->FreeCallback = (FC) \
7889 #define FsRtlSupportsPerStreamContexts(FO) ( \
7890 (BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) && \
7891 FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \
7892 FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS)) \
7895 #define FsRtlLookupPerStreamContext(_sc, _oid, _iid) \
7896 (((NULL != (_sc)) && \
7897 FlagOn((_sc)->Flags2,FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS) && \
7898 !IsListEmpty(&(_sc)->FilterContexts)) ? \
7899 FsRtlLookupPerStreamContextInternal((_sc), (_oid), (_iid)) : \
7905 FsRtlSetupAdvancedHeader(
7907 IN PFAST_MUTEX FMutex
)
7909 PFSRTL_ADVANCED_FCB_HEADER localAdvHdr
= (PFSRTL_ADVANCED_FCB_HEADER
)AdvHdr
;
7911 localAdvHdr
->Flags
|= FSRTL_FLAG_ADVANCED_HEADER
;
7912 localAdvHdr
->Flags2
|= FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS
;
7913 #if (NTDDI_VERSION >= NTDDI_VISTA)
7914 localAdvHdr
->Version
= FSRTL_FCB_HEADER_V1
;
7916 localAdvHdr
->Version
= FSRTL_FCB_HEADER_V0
;
7918 InitializeListHead( &localAdvHdr
->FilterContexts
);
7919 if (FMutex
!= NULL
) {
7920 localAdvHdr
->FastMutex
= FMutex
;
7922 #if (NTDDI_VERSION >= NTDDI_VISTA)
7923 *((PULONG_PTR
)(&localAdvHdr
->PushLock
)) = 0;
7924 localAdvHdr
->FileContextSupportPointer
= NULL
;
7928 #define FsRtlInitPerFileObjectContext(_fc, _owner, _inst) \
7929 ((_fc)->OwnerId = (_owner), (_fc)->InstanceId = (_inst))
7931 #define FsRtlCompleteRequest(IRP,STATUS) { \
7932 (IRP)->IoStatus.Status = (STATUS); \
7933 IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
7936 #if (NTDDI_VERSION >= NTDDI_WIN7)
7937 typedef struct _ECP_HEADER ECP_HEADER
, *PECP_HEADER
;
7940 #if (NTDDI_VERSION >= NTDDI_VISTA)
7942 typedef enum _NETWORK_OPEN_LOCATION_QUALIFIER
{
7943 NetworkOpenLocationAny
,
7944 NetworkOpenLocationRemote
,
7945 NetworkOpenLocationLoopback
7946 } NETWORK_OPEN_LOCATION_QUALIFIER
;
7948 typedef enum _NETWORK_OPEN_INTEGRITY_QUALIFIER
{
7949 NetworkOpenIntegrityAny
,
7950 NetworkOpenIntegrityNone
,
7951 NetworkOpenIntegritySigned
,
7952 NetworkOpenIntegrityEncrypted
,
7953 NetworkOpenIntegrityMaximum
7954 } NETWORK_OPEN_INTEGRITY_QUALIFIER
;
7956 #if (NTDDI_VERSION >= NTDDI_WIN7)
7958 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_COLLAPSING 0x1
7959 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_DURABILITY 0x2
7960 #define NETWORK_OPEN_ECP_IN_FLAG_FORCE_BUFFERED_SYNCHRONOUS_IO_HACK 0x80000000
7962 typedef struct _NETWORK_OPEN_ECP_CONTEXT
{
7967 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
7968 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
7972 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
7973 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
7977 } NETWORK_OPEN_ECP_CONTEXT
, *PNETWORK_OPEN_ECP_CONTEXT
;
7979 typedef struct _NETWORK_OPEN_ECP_CONTEXT_V0
{
7984 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
7985 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
7988 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
7989 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
7992 } NETWORK_OPEN_ECP_CONTEXT_V0
, *PNETWORK_OPEN_ECP_CONTEXT_V0
;
7994 #elif (NTDDI_VERSION >= NTDDI_VISTA)
7995 typedef struct _NETWORK_OPEN_ECP_CONTEXT
{
8000 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
8001 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
8004 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
8005 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
8008 } NETWORK_OPEN_ECP_CONTEXT
, *PNETWORK_OPEN_ECP_CONTEXT
;
8011 DEFINE_GUID(GUID_ECP_NETWORK_OPEN_CONTEXT
, 0xc584edbf, 0x00df, 0x4d28, 0xb8, 0x84, 0x35, 0xba, 0xca, 0x89, 0x11, 0xe8 );
8013 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8016 #if (NTDDI_VERSION >= NTDDI_VISTA)
8018 typedef struct _PREFETCH_OPEN_ECP_CONTEXT
{
8020 } PREFETCH_OPEN_ECP_CONTEXT
, *PPREFETCH_OPEN_ECP_CONTEXT
;
8022 DEFINE_GUID(GUID_ECP_PREFETCH_OPEN
, 0xe1777b21, 0x847e, 0x4837, 0xaa, 0x45, 0x64, 0x16, 0x1d, 0x28, 0x6, 0x55 );
8024 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8026 #if (NTDDI_VERSION >= NTDDI_WIN7)
8028 DEFINE_GUID (GUID_ECP_NFS_OPEN
, 0xf326d30c, 0xe5f8, 0x4fe7, 0xab, 0x74, 0xf5, 0xa3, 0x19, 0x6d, 0x92, 0xdb);
8029 DEFINE_GUID(GUID_ECP_SRV_OPEN
, 0xbebfaebc, 0xaabf, 0x489d, 0x9d, 0x2c, 0xe9, 0xe3, 0x61, 0x10, 0x28, 0x53 );
8031 typedef struct sockaddr_storage
*PSOCKADDR_STORAGE_NFS
;
8033 typedef struct _NFS_OPEN_ECP_CONTEXT
{
8034 PUNICODE_STRING ExportAlias
;
8035 PSOCKADDR_STORAGE_NFS ClientSocketAddress
;
8036 } NFS_OPEN_ECP_CONTEXT
, *PNFS_OPEN_ECP_CONTEXT
, **PPNFS_OPEN_ECP_CONTEXT
;
8038 typedef struct _SRV_OPEN_ECP_CONTEXT
{
8039 PUNICODE_STRING ShareName
;
8040 PSOCKADDR_STORAGE_NFS SocketAddress
;
8041 BOOLEAN OplockBlockState
;
8042 BOOLEAN OplockAppState
;
8043 BOOLEAN OplockFinalState
;
8044 } SRV_OPEN_ECP_CONTEXT
, *PSRV_OPEN_ECP_CONTEXT
;
8046 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
8048 #define VACB_MAPPING_GRANULARITY (0x40000)
8049 #define VACB_OFFSET_SHIFT (18)
8051 typedef struct _PUBLIC_BCB
{
8052 CSHORT NodeTypeCode
;
8053 CSHORT NodeByteSize
;
8055 LARGE_INTEGER MappedFileOffset
;
8056 } PUBLIC_BCB
, *PPUBLIC_BCB
;
8058 typedef struct _CC_FILE_SIZES
{
8059 LARGE_INTEGER AllocationSize
;
8060 LARGE_INTEGER FileSize
;
8061 LARGE_INTEGER ValidDataLength
;
8062 } CC_FILE_SIZES
, *PCC_FILE_SIZES
;
8065 (NTAPI
*PACQUIRE_FOR_LAZY_WRITE
) (
8070 (NTAPI
*PRELEASE_FROM_LAZY_WRITE
) (
8074 (NTAPI
*PACQUIRE_FOR_READ_AHEAD
) (
8079 (NTAPI
*PRELEASE_FROM_READ_AHEAD
) (
8082 typedef struct _CACHE_MANAGER_CALLBACKS
{
8083 PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite
;
8084 PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite
;
8085 PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead
;
8086 PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead
;
8087 } CACHE_MANAGER_CALLBACKS
, *PCACHE_MANAGER_CALLBACKS
;
8089 typedef struct _CACHE_UNINITIALIZE_EVENT
{
8090 struct _CACHE_UNINITIALIZE_EVENT
*Next
;
8092 } CACHE_UNINITIALIZE_EVENT
, *PCACHE_UNINITIALIZE_EVENT
;
8095 (NTAPI
*PDIRTY_PAGE_ROUTINE
) (
8096 IN PFILE_OBJECT FileObject
,
8097 IN PLARGE_INTEGER FileOffset
,
8099 IN PLARGE_INTEGER OldestLsn
,
8100 IN PLARGE_INTEGER NewestLsn
,
8105 (NTAPI
*PFLUSH_TO_LSN
) (
8107 IN LARGE_INTEGER Lsn
);
8110 (NTAPI
*PCC_POST_DEFERRED_WRITE
) (
8114 #define CcIsFileCached(FO) ( \
8115 ((FO)->SectionObjectPointer != NULL) && \
8116 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
8119 extern ULONG CcFastMdlReadWait
;
8121 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8126 CcInitializeCacheMap(
8127 IN PFILE_OBJECT FileObject
,
8128 IN PCC_FILE_SIZES FileSizes
,
8129 IN BOOLEAN PinAccess
,
8130 IN PCACHE_MANAGER_CALLBACKS Callbacks
,
8131 IN PVOID LazyWriteContext
);
8136 CcUninitializeCacheMap(
8137 IN PFILE_OBJECT FileObject
,
8138 IN PLARGE_INTEGER TruncateSize OPTIONAL
,
8139 IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL
);
8145 IN PFILE_OBJECT FileObject
,
8146 IN PCC_FILE_SIZES FileSizes
);
8151 CcSetDirtyPageThreshold(
8152 IN PFILE_OBJECT FileObject
,
8153 IN ULONG DirtyPageThreshold
);
8159 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8160 IN PLARGE_INTEGER FileOffset OPTIONAL
,
8162 OUT PIO_STATUS_BLOCK IoStatus OPTIONAL
);
8167 CcGetFlushedValidData(
8168 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8169 IN BOOLEAN BcbListHeld
);
8175 IN PFILE_OBJECT FileObject
,
8176 IN PLARGE_INTEGER StartOffset
,
8177 IN PLARGE_INTEGER EndOffset
,
8197 IN BOOLEAN WriteThrough
,
8198 OUT PIO_STATUS_BLOCK IoStatus
);
8203 CcGetFileObjectFromSectionPtrs(
8204 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
);
8209 CcGetFileObjectFromBcb(
8216 IN PFILE_OBJECT FileObject
,
8217 IN ULONG BytesToWrite
,
8219 IN BOOLEAN Retrying
);
8225 IN PFILE_OBJECT FileObject
,
8226 IN PCC_POST_DEFERRED_WRITE PostRoutine
,
8229 IN ULONG BytesToWrite
,
8230 IN BOOLEAN Retrying
);
8236 IN PFILE_OBJECT FileObject
,
8237 IN PLARGE_INTEGER FileOffset
,
8241 OUT PIO_STATUS_BLOCK IoStatus
);
8247 IN PFILE_OBJECT FileObject
,
8248 IN ULONG FileOffset
,
8252 OUT PIO_STATUS_BLOCK IoStatus
);
8258 IN PFILE_OBJECT FileObject
,
8259 IN PLARGE_INTEGER FileOffset
,
8268 IN PFILE_OBJECT FileObject
,
8269 IN ULONG FileOffset
,
8277 IN PFILE_OBJECT FileObject
,
8278 IN PLARGE_INTEGER FileOffset
,
8281 OUT PIO_STATUS_BLOCK IoStatus
);
8287 IN PFILE_OBJECT FileObject
,
8294 IN PFILE_OBJECT FileObject
,
8295 IN PLARGE_INTEGER FileOffset
,
8298 OUT PIO_STATUS_BLOCK IoStatus
);
8304 IN PFILE_OBJECT FileObject
,
8305 IN PLARGE_INTEGER FileOffset
,
8311 CcScheduleReadAhead(
8312 IN PFILE_OBJECT FileObject
,
8313 IN PLARGE_INTEGER FileOffset
,
8319 CcWaitForCurrentLazyWriterActivity(
8325 CcSetReadAheadGranularity(
8326 IN PFILE_OBJECT FileObject
,
8327 IN ULONG Granularity
);
8333 IN PFILE_OBJECT FileObject
,
8334 IN PLARGE_INTEGER FileOffset
,
8344 IN PFILE_OBJECT FileObject
,
8345 IN PLARGE_INTEGER FileOffset
,
8354 IN PFILE_OBJECT FileObject
,
8355 IN PLARGE_INTEGER FileOffset
,
8365 CcSetDirtyPinnedData(
8367 IN PLARGE_INTEGER Lsn OPTIONAL
);
8378 CcSetBcbOwnerPointer(
8380 IN PVOID OwnerPointer
);
8385 CcUnpinDataForThread(
8387 IN ERESOURCE_THREAD ResourceThreadId
);
8392 CcSetAdditionalCacheAttributes(
8393 IN PFILE_OBJECT FileObject
,
8394 IN BOOLEAN DisableReadAhead
,
8395 IN BOOLEAN DisableWriteBehind
);
8403 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
8405 #if (NTDDI_VERSION >= NTDDI_WINXP)
8411 IN PFILE_OBJECT FileObject
,
8417 CcSetLogHandleForFile(
8418 IN PFILE_OBJECT FileObject
,
8420 IN PFLUSH_TO_LSN FlushToLsnRoutine
);
8427 IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine
,
8433 #if (NTDDI_VERSION >= NTDDI_WINXP)
8438 IN PFILE_OBJECT FileObject
,
8439 IN PLARGE_INTEGER FileOffset
,
8444 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
8449 IN PFILE_OBJECT FileObject
,
8450 IN PLARGE_INTEGER FileOffset
,
8457 #if (NTDDI_VERSION >= NTDDI_VISTA)
8463 IN PFILE_OBJECT FileObject
,
8464 IN PCC_FILE_SIZES FileSizes
);
8469 CcGetFileObjectFromSectionPtrsRef(
8470 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
);
8475 CcSetParallelFlushFile(
8476 IN PFILE_OBJECT FileObject
,
8477 IN BOOLEAN EnableParallelFlush
);
8481 CcIsThereDirtyDataEx(
8483 IN PULONG NumberOfDirtyPages OPTIONAL
);
8487 #if (NTDDI_VERSION >= NTDDI_WIN7)
8491 CcCoherencyFlushAndPurgeCache(
8492 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8493 IN PLARGE_INTEGER FileOffset OPTIONAL
,
8495 OUT PIO_STATUS_BLOCK IoStatus
,
8496 IN ULONG Flags OPTIONAL
);
8499 #define CcGetFileSizePointer(FO) ( \
8500 ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
8503 #define UNINITIALIZE_CACHE_MAPS (1)
8504 #define DO_NOT_RETRY_PURGE (2)
8505 #define DO_NOT_PURGE_DIRTY_PAGES (0x4)
8507 #define CC_FLUSH_AND_PURGE_NO_PURGE (0x1)
8509 #if (NTDDI_VERSION >= NTDDI_VISTA)
8513 CcPurgeCacheSection(
8514 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8515 IN PLARGE_INTEGER FileOffset OPTIONAL
,
8518 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
8522 CcPurgeCacheSection(
8523 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8524 IN PLARGE_INTEGER FileOffset OPTIONAL
,
8526 IN BOOLEAN UninitializeCacheMaps
);
8529 #if (NTDDI_VERSION >= NTDDI_WIN7)
8533 CcCopyWriteWontFlush(
8534 IN PFILE_OBJECT FileObject
,
8535 IN PLARGE_INTEGER FileOffset
,
8538 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
8541 #define CcReadAhead(FO, FOFF, LEN) ( \
8542 if ((LEN) >= 256) { \
8543 CcScheduleReadAhead((FO), (FOFF), (LEN)); \
8547 #define PIN_WAIT (1)
8548 #define PIN_EXCLUSIVE (2)
8549 #define PIN_NO_READ (4)
8550 #define PIN_IF_BCB (8)
8551 #define PIN_CALLER_TRACKS_DIRTY_DATA (32)
8552 #define PIN_HIGH_PRIORITY (64)
8555 #define MAP_NO_READ (16)
8556 #define MAP_HIGH_PRIORITY (64)
8558 #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
8559 #define IOCTL_REDIR_QUERY_PATH_EX CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 100, METHOD_NEITHER, FILE_ANY_ACCESS)
8561 typedef struct _QUERY_PATH_REQUEST
{
8562 ULONG PathNameLength
;
8563 PIO_SECURITY_CONTEXT SecurityContext
;
8564 WCHAR FilePathName
[1];
8565 } QUERY_PATH_REQUEST
, *PQUERY_PATH_REQUEST
;
8567 typedef struct _QUERY_PATH_REQUEST_EX
{
8568 PIO_SECURITY_CONTEXT pSecurityContext
;
8571 UNICODE_STRING PathName
;
8572 UNICODE_STRING DomainServiceName
;
8573 ULONG_PTR Reserved
[ 3 ];
8574 } QUERY_PATH_REQUEST_EX
, *PQUERY_PATH_REQUEST_EX
;
8576 typedef struct _QUERY_PATH_RESPONSE
{
8577 ULONG LengthAccepted
;
8578 } QUERY_PATH_RESPONSE
, *PQUERY_PATH_RESPONSE
;
8580 #define VOLSNAPCONTROLTYPE 0x00000053
8581 #define IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES CTL_CODE(VOLSNAPCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
8583 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8589 IN HANDLE Handle OPTIONAL
,
8590 IN OBJECT_INFORMATION_CLASS ObjectInformationClass
,
8591 OUT PVOID ObjectInformation OPTIONAL
,
8592 IN ULONG ObjectInformationLength
,
8593 OUT PULONG ReturnLength OPTIONAL
);
8599 IN HANDLE KeyHandle
,
8600 IN HANDLE EventHandle OPTIONAL
,
8601 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8602 IN PVOID ApcContext OPTIONAL
,
8603 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8604 IN ULONG NotifyFilter
,
8605 IN BOOLEAN WatchSubtree
,
8607 IN ULONG BufferLength
,
8608 IN BOOLEAN Asynchronous
);
8614 OUT PHANDLE EventHandle
,
8615 IN ACCESS_MASK DesiredAccess
,
8616 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
8617 IN EVENT_TYPE EventType
,
8618 IN BOOLEAN InitialState
);
8624 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8629 ZwQueryDirectoryFile(
8630 IN HANDLE FileHandle
,
8631 IN HANDLE Event OPTIONAL
,
8632 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8633 IN PVOID ApcContext OPTIONAL
,
8634 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8635 OUT PVOID FileInformation
,
8637 IN FILE_INFORMATION_CLASS FileInformationClass
,
8638 IN BOOLEAN ReturnSingleEntry
,
8639 IN PUNICODE_STRING FileName OPTIONAL
,
8640 IN BOOLEAN RestartScan
);
8645 ZwSetVolumeInformationFile(
8646 IN HANDLE FileHandle
,
8647 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8648 IN PVOID FsInformation
,
8650 IN FS_INFORMATION_CLASS FsInformationClass
);
8656 IN HANDLE FileHandle
,
8657 IN HANDLE Event OPTIONAL
,
8658 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8659 IN PVOID ApcContext OPTIONAL
,
8660 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8661 IN ULONG FsControlCode
,
8662 IN PVOID InputBuffer OPTIONAL
,
8663 IN ULONG InputBufferLength
,
8664 OUT PVOID OutputBuffer OPTIONAL
,
8665 IN ULONG OutputBufferLength
);
8671 IN HANDLE SourceProcessHandle
,
8672 IN HANDLE SourceHandle
,
8673 IN HANDLE TargetProcessHandle OPTIONAL
,
8674 OUT PHANDLE TargetHandle OPTIONAL
,
8675 IN ACCESS_MASK DesiredAccess
,
8676 IN ULONG HandleAttributes
,
8682 ZwOpenDirectoryObject(
8683 OUT PHANDLE DirectoryHandle
,
8684 IN ACCESS_MASK DesiredAccess
,
8685 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8690 ZwAllocateVirtualMemory(
8691 IN HANDLE ProcessHandle
,
8692 IN OUT PVOID
*BaseAddress
,
8693 IN ULONG_PTR ZeroBits
,
8694 IN OUT PSIZE_T RegionSize
,
8695 IN ULONG AllocationType
,
8701 ZwFreeVirtualMemory(
8702 IN HANDLE ProcessHandle
,
8703 IN OUT PVOID
*BaseAddress
,
8704 IN OUT PSIZE_T RegionSize
,
8710 ZwWaitForSingleObject(
8712 IN BOOLEAN Alertable
,
8713 IN PLARGE_INTEGER Timeout OPTIONAL
);
8719 IN HANDLE EventHandle
,
8720 OUT PLONG PreviousState OPTIONAL
);
8725 ZwFlushVirtualMemory(
8726 IN HANDLE ProcessHandle
,
8727 IN OUT PVOID
*BaseAddress
,
8728 IN OUT PSIZE_T RegionSize
,
8729 OUT PIO_STATUS_BLOCK IoStatusBlock
);
8734 ZwQueryInformationToken(
8735 IN HANDLE TokenHandle
,
8736 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
8737 OUT PVOID TokenInformation
,
8739 OUT PULONG ResultLength
);
8744 ZwSetSecurityObject(
8746 IN SECURITY_INFORMATION SecurityInformation
,
8747 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
8752 ZwQuerySecurityObject(
8753 IN HANDLE FileHandle
,
8754 IN SECURITY_INFORMATION SecurityInformation
,
8755 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
8757 OUT PULONG ResultLength
);
8759 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
8761 #if (NTDDI_VERSION >= NTDDI_WINXP)
8766 ZwOpenProcessTokenEx(
8767 IN HANDLE ProcessHandle
,
8768 IN ACCESS_MASK DesiredAccess
,
8769 IN ULONG HandleAttributes
,
8770 OUT PHANDLE TokenHandle
);
8775 ZwOpenThreadTokenEx(
8776 IN HANDLE ThreadHandle
,
8777 IN ACCESS_MASK DesiredAccess
,
8778 IN BOOLEAN OpenAsSelf
,
8779 IN ULONG HandleAttributes
,
8780 OUT PHANDLE TokenHandle
);
8784 #if (NTDDI_VERSION >= NTDDI_VISTA)
8790 IN HANDLE FileHandle
,
8791 IN HANDLE Event OPTIONAL
,
8792 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8793 IN PVOID ApcContext OPTIONAL
,
8794 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8795 IN PLARGE_INTEGER ByteOffset
,
8796 IN PLARGE_INTEGER Length
,
8798 IN BOOLEAN FailImmediately
,
8799 IN BOOLEAN ExclusiveLock
);
8805 IN HANDLE FileHandle
,
8806 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8807 IN PLARGE_INTEGER ByteOffset
,
8808 IN PLARGE_INTEGER Length
,
8814 ZwQueryQuotaInformationFile(
8815 IN HANDLE FileHandle
,
8816 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8819 IN BOOLEAN ReturnSingleEntry
,
8821 IN ULONG SidListLength
,
8822 IN PSID StartSid OPTIONAL
,
8823 IN BOOLEAN RestartScan
);
8828 ZwSetQuotaInformationFile(
8829 IN HANDLE FileHandle
,
8830 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8838 IN HANDLE FileHandle
,
8839 OUT PIO_STATUS_BLOCK IoStatusBlock
);
8841 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8843 #if (NTDDI_VERSION >= NTDDI_WIN7)
8847 ZwSetInformationToken(
8848 IN HANDLE TokenHandle
,
8849 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
8850 IN PVOID TokenInformation
,
8851 IN ULONG TokenInformationLength
);
8858 IN HANDLE FileHandle
,
8859 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8862 IN BOOLEAN ReturnSingleEntry
,
8863 IN PVOID EaList OPTIONAL
,
8864 IN ULONG EaListLength
,
8865 IN PULONG EaIndex OPTIONAL
,
8866 IN BOOLEAN RestartScan
);
8872 IN HANDLE FileHandle
,
8873 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8881 IN HANDLE ExistingTokenHandle
,
8882 IN ACCESS_MASK DesiredAccess
,
8883 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8884 IN BOOLEAN EffectiveOnly
,
8885 IN TOKEN_TYPE TokenType
,
8886 OUT PHANDLE NewTokenHandle
);
8888 #pragma pack(push,4)
8890 #ifndef VER_PRODUCTBUILD
8891 #define VER_PRODUCTBUILD 10000
8896 extern PACL SePublicDefaultDacl
;
8897 extern PACL SeSystemDefaultDacl
;
8899 #define FS_LFN_APIS 0x00004000
8901 #define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
8902 #define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
8903 #define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
8904 #define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
8905 #define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
8906 #define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
8907 #define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
8908 #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
8909 #define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
8910 #define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
8911 #define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
8912 #define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
8913 #define FILE_STORAGE_TYPE_MASK 0x000f0000
8914 #define FILE_STORAGE_TYPE_SHIFT 16
8916 #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
8919 #define HARDWARE_PTE HARDWARE_PTE_X86
8920 #define PHARDWARE_PTE PHARDWARE_PTE_X86
8923 #define IO_ATTACH_DEVICE_API 0x80000000
8925 #define IO_TYPE_APC 18
8926 #define IO_TYPE_DPC 19
8927 #define IO_TYPE_DEVICE_QUEUE 20
8928 #define IO_TYPE_EVENT_PAIR 21
8929 #define IO_TYPE_INTERRUPT 22
8930 #define IO_TYPE_PROFILE 23
8932 #define IRP_BEING_VERIFIED 0x10
8934 #define MAILSLOT_CLASS_FIRSTCLASS 1
8935 #define MAILSLOT_CLASS_SECONDCLASS 2
8937 #define MAILSLOT_SIZE_AUTO 0
8939 #define MEM_DOS_LIM 0x40000000
8941 #define OB_TYPE_TYPE 1
8942 #define OB_TYPE_DIRECTORY 2
8943 #define OB_TYPE_SYMBOLIC_LINK 3
8944 #define OB_TYPE_TOKEN 4
8945 #define OB_TYPE_PROCESS 5
8946 #define OB_TYPE_THREAD 6
8947 #define OB_TYPE_EVENT 7
8948 #define OB_TYPE_EVENT_PAIR 8
8949 #define OB_TYPE_MUTANT 9
8950 #define OB_TYPE_SEMAPHORE 10
8951 #define OB_TYPE_TIMER 11
8952 #define OB_TYPE_PROFILE 12
8953 #define OB_TYPE_WINDOW_STATION 13
8954 #define OB_TYPE_DESKTOP 14
8955 #define OB_TYPE_SECTION 15
8956 #define OB_TYPE_KEY 16
8957 #define OB_TYPE_PORT 17
8958 #define OB_TYPE_ADAPTER 18
8959 #define OB_TYPE_CONTROLLER 19
8960 #define OB_TYPE_DEVICE 20
8961 #define OB_TYPE_DRIVER 21
8962 #define OB_TYPE_IO_COMPLETION 22
8963 #define OB_TYPE_FILE 23
8965 #define SEC_BASED 0x00200000
8969 #define TOKEN_HAS_ADMIN_GROUP 0x08
8971 #if (VER_PRODUCTBUILD >= 1381)
8972 #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
8973 #endif /* (VER_PRODUCTBUILD >= 1381) */
8975 #if (VER_PRODUCTBUILD >= 2195)
8977 #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
8978 #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
8980 #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
8982 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
8983 #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
8984 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
8985 #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
8986 #endif /* (VER_PRODUCTBUILD >= 2195) */
8988 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
8989 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
8990 #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
8991 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
8992 #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
8993 #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
8994 #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
8995 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
8997 typedef enum _FILE_STORAGE_TYPE
{
8998 StorageTypeDefault
= 1,
8999 StorageTypeDirectory
,
9001 StorageTypeJunctionPoint
,
9003 StorageTypeStructuredStorage
,
9004 StorageTypeEmbedding
,
9006 } FILE_STORAGE_TYPE
;
9008 typedef struct _OBJECT_BASIC_INFORMATION
9011 ACCESS_MASK GrantedAccess
;
9014 ULONG PagedPoolCharge
;
9015 ULONG NonPagedPoolCharge
;
9016 ULONG Reserved
[ 3 ];
9019 ULONG SecurityDescriptorSize
;
9020 LARGE_INTEGER CreationTime
;
9021 } OBJECT_BASIC_INFORMATION
, *POBJECT_BASIC_INFORMATION
;
9023 typedef struct _BITMAP_RANGE
{
9026 ULONG FirstDirtyPage
;
9027 ULONG LastDirtyPage
;
9030 } BITMAP_RANGE
, *PBITMAP_RANGE
;
9032 typedef struct _FILE_COPY_ON_WRITE_INFORMATION
{
9033 BOOLEAN ReplaceIfExists
;
9034 HANDLE RootDirectory
;
9035 ULONG FileNameLength
;
9037 } FILE_COPY_ON_WRITE_INFORMATION
, *PFILE_COPY_ON_WRITE_INFORMATION
;
9039 typedef struct _FILE_FULL_DIRECTORY_INFORMATION
{
9040 ULONG NextEntryOffset
;
9042 LARGE_INTEGER CreationTime
;
9043 LARGE_INTEGER LastAccessTime
;
9044 LARGE_INTEGER LastWriteTime
;
9045 LARGE_INTEGER ChangeTime
;
9046 LARGE_INTEGER EndOfFile
;
9047 LARGE_INTEGER AllocationSize
;
9048 ULONG FileAttributes
;
9049 ULONG FileNameLength
;
9051 WCHAR FileName
[ANYSIZE_ARRAY
];
9052 } FILE_FULL_DIRECTORY_INFORMATION
, *PFILE_FULL_DIRECTORY_INFORMATION
;
9054 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
9055 typedef struct _FILE_SHARED_LOCK_ENTRY
{
9058 FILE_LOCK_INFO FileLock
;
9059 } FILE_SHARED_LOCK_ENTRY
, *PFILE_SHARED_LOCK_ENTRY
;
9061 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
9062 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY
{
9063 LIST_ENTRY ListEntry
;
9066 FILE_LOCK_INFO FileLock
;
9067 } FILE_EXCLUSIVE_LOCK_ENTRY
, *PFILE_EXCLUSIVE_LOCK_ENTRY
;
9069 typedef struct _FILE_MAILSLOT_PEEK_BUFFER
{
9070 ULONG ReadDataAvailable
;
9071 ULONG NumberOfMessages
;
9072 ULONG MessageLength
;
9073 } FILE_MAILSLOT_PEEK_BUFFER
, *PFILE_MAILSLOT_PEEK_BUFFER
;
9075 typedef struct _FILE_OLE_CLASSID_INFORMATION
{
9077 } FILE_OLE_CLASSID_INFORMATION
, *PFILE_OLE_CLASSID_INFORMATION
;
9079 typedef struct _FILE_OLE_ALL_INFORMATION
{
9080 FILE_BASIC_INFORMATION BasicInformation
;
9081 FILE_STANDARD_INFORMATION StandardInformation
;
9082 FILE_INTERNAL_INFORMATION InternalInformation
;
9083 FILE_EA_INFORMATION EaInformation
;
9084 FILE_ACCESS_INFORMATION AccessInformation
;
9085 FILE_POSITION_INFORMATION PositionInformation
;
9086 FILE_MODE_INFORMATION ModeInformation
;
9087 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
9090 LARGE_INTEGER SecurityChangeTime
;
9091 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation
;
9092 FILE_OBJECTID_INFORMATION ObjectIdInformation
;
9093 FILE_STORAGE_TYPE StorageType
;
9096 ULONG NumberOfStreamReferences
;
9099 BOOLEAN ContentIndexDisable
;
9100 BOOLEAN InheritContentIndexDisable
;
9101 FILE_NAME_INFORMATION NameInformation
;
9102 } FILE_OLE_ALL_INFORMATION
, *PFILE_OLE_ALL_INFORMATION
;
9104 typedef struct _FILE_OLE_DIR_INFORMATION
{
9105 ULONG NextEntryOffset
;
9107 LARGE_INTEGER CreationTime
;
9108 LARGE_INTEGER LastAccessTime
;
9109 LARGE_INTEGER LastWriteTime
;
9110 LARGE_INTEGER ChangeTime
;
9111 LARGE_INTEGER EndOfFile
;
9112 LARGE_INTEGER AllocationSize
;
9113 ULONG FileAttributes
;
9114 ULONG FileNameLength
;
9115 FILE_STORAGE_TYPE StorageType
;
9118 BOOLEAN ContentIndexDisable
;
9119 BOOLEAN InheritContentIndexDisable
;
9121 } FILE_OLE_DIR_INFORMATION
, *PFILE_OLE_DIR_INFORMATION
;
9123 typedef struct _FILE_OLE_INFORMATION
{
9124 LARGE_INTEGER SecurityChangeTime
;
9125 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation
;
9126 FILE_OBJECTID_INFORMATION ObjectIdInformation
;
9127 FILE_STORAGE_TYPE StorageType
;
9129 BOOLEAN ContentIndexDisable
;
9130 BOOLEAN InheritContentIndexDisable
;
9131 } FILE_OLE_INFORMATION
, *PFILE_OLE_INFORMATION
;
9133 typedef struct _FILE_OLE_STATE_BITS_INFORMATION
{
9135 ULONG StateBitsMask
;
9136 } FILE_OLE_STATE_BITS_INFORMATION
, *PFILE_OLE_STATE_BITS_INFORMATION
;
9138 typedef struct _MAPPING_PAIR
{
9141 } MAPPING_PAIR
, *PMAPPING_PAIR
;
9143 typedef struct _GET_RETRIEVAL_DESCRIPTOR
{
9144 ULONG NumberOfPairs
;
9146 MAPPING_PAIR Pair
[1];
9147 } GET_RETRIEVAL_DESCRIPTOR
, *PGET_RETRIEVAL_DESCRIPTOR
;
9149 typedef struct _MBCB
{
9150 CSHORT NodeTypeCode
;
9151 CSHORT NodeIsInZone
;
9155 LIST_ENTRY BitmapRanges
;
9156 LONGLONG ResumeWritePage
;
9157 BITMAP_RANGE BitmapRange1
;
9158 BITMAP_RANGE BitmapRange2
;
9159 BITMAP_RANGE BitmapRange3
;
9162 typedef struct _MOVEFILE_DESCRIPTOR
{
9165 LARGE_INTEGER StartVcn
;
9166 LARGE_INTEGER TargetLcn
;
9169 } MOVEFILE_DESCRIPTOR
, *PMOVEFILE_DESCRIPTOR
;
9171 typedef struct _OBJECT_BASIC_INFO
{
9173 ACCESS_MASK GrantedAccess
;
9175 ULONG ReferenceCount
;
9176 ULONG PagedPoolUsage
;
9177 ULONG NonPagedPoolUsage
;
9179 ULONG NameInformationLength
;
9180 ULONG TypeInformationLength
;
9181 ULONG SecurityDescriptorLength
;
9182 LARGE_INTEGER CreateTime
;
9183 } OBJECT_BASIC_INFO
, *POBJECT_BASIC_INFO
;
9185 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO
{
9187 BOOLEAN ProtectFromClose
;
9188 } OBJECT_HANDLE_ATTRIBUTE_INFO
, *POBJECT_HANDLE_ATTRIBUTE_INFO
;
9190 typedef struct _OBJECT_NAME_INFO
{
9191 UNICODE_STRING ObjectName
;
9192 WCHAR ObjectNameBuffer
[1];
9193 } OBJECT_NAME_INFO
, *POBJECT_NAME_INFO
;
9195 typedef struct _OBJECT_PROTECTION_INFO
{
9197 BOOLEAN ProtectHandle
;
9198 } OBJECT_PROTECTION_INFO
, *POBJECT_PROTECTION_INFO
;
9200 typedef struct _OBJECT_TYPE_INFO
{
9201 UNICODE_STRING ObjectTypeName
;
9202 UCHAR Unknown
[0x58];
9203 WCHAR ObjectTypeNameBuffer
[1];
9204 } OBJECT_TYPE_INFO
, *POBJECT_TYPE_INFO
;
9206 typedef struct _OBJECT_ALL_TYPES_INFO
{
9207 ULONG NumberOfObjectTypes
;
9208 OBJECT_TYPE_INFO ObjectsTypeInfo
[1];
9209 } OBJECT_ALL_TYPES_INFO
, *POBJECT_ALL_TYPES_INFO
;
9211 #if defined(USE_LPC6432)
9212 #define LPC_CLIENT_ID CLIENT_ID64
9213 #define LPC_SIZE_T ULONGLONG
9214 #define LPC_PVOID ULONGLONG
9215 #define LPC_HANDLE ULONGLONG
9217 #define LPC_CLIENT_ID CLIENT_ID
9218 #define LPC_SIZE_T SIZE_T
9219 #define LPC_PVOID PVOID
9220 #define LPC_HANDLE HANDLE
9223 typedef struct _PORT_MESSAGE
9239 CSHORT DataInfoOffset
;
9243 __GNU_EXTENSION
union
9245 LPC_CLIENT_ID ClientId
;
9246 double DoNotUseThisField
;
9249 __GNU_EXTENSION
union
9251 LPC_SIZE_T ClientViewSize
;
9254 } PORT_MESSAGE
, *PPORT_MESSAGE
;
9256 #define LPC_KERNELMODE_MESSAGE (CSHORT)((USHORT)0x8000)
9258 typedef struct _PORT_VIEW
9261 LPC_HANDLE SectionHandle
;
9262 ULONG SectionOffset
;
9263 LPC_SIZE_T ViewSize
;
9265 LPC_PVOID ViewRemoteBase
;
9266 } PORT_VIEW
, *PPORT_VIEW
;
9268 typedef struct _REMOTE_PORT_VIEW
9271 LPC_SIZE_T ViewSize
;
9273 } REMOTE_PORT_VIEW
, *PREMOTE_PORT_VIEW
;
9275 typedef struct _VAD_HEADER
{
9278 struct _VAD_HEADER
* ParentLink
;
9279 struct _VAD_HEADER
* LeftLink
;
9280 struct _VAD_HEADER
* RightLink
;
9281 ULONG Flags
; /* LSB = CommitCharge */
9283 PVOID FirstProtoPte
;
9287 } VAD_HEADER
, *PVAD_HEADER
;
9292 CcGetLsnForFileObject (
9293 IN PFILE_OBJECT FileObject
,
9294 OUT PLARGE_INTEGER OldestLsn OPTIONAL
9301 IN POOL_TYPE PoolType
,
9302 IN ULONG NumberOfBytes
9308 FsRtlAllocatePoolWithQuota (
9309 IN POOL_TYPE PoolType
,
9310 IN ULONG NumberOfBytes
9316 FsRtlAllocatePoolWithQuotaTag (
9317 IN POOL_TYPE PoolType
,
9318 IN ULONG NumberOfBytes
,
9325 FsRtlAllocatePoolWithTag (
9326 IN POOL_TYPE PoolType
,
9327 IN ULONG NumberOfBytes
,
9334 FsRtlIsFatDbcsLegal (
9335 IN ANSI_STRING DbcsName
,
9336 IN BOOLEAN WildCardsPermissible
,
9337 IN BOOLEAN PathNamePermissible
,
9338 IN BOOLEAN LeadingBackslashPermissible
9344 FsRtlMdlReadComplete (
9345 IN PFILE_OBJECT FileObject
,
9352 FsRtlMdlWriteComplete (
9353 IN PFILE_OBJECT FileObject
,
9354 IN PLARGE_INTEGER FileOffset
,
9361 FsRtlNotifyChangeDirectory (
9362 IN PNOTIFY_SYNC NotifySync
,
9364 IN PSTRING FullDirectoryName
,
9365 IN PLIST_ENTRY NotifyList
,
9366 IN BOOLEAN WatchTree
,
9367 IN ULONG CompletionFilter
,
9375 IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL
,
9376 IN POBJECT_TYPE ObjectType
,
9377 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9378 IN KPROCESSOR_MODE AccessMode
,
9379 IN OUT PVOID ParseContext OPTIONAL
,
9380 IN ULONG ObjectSize
,
9381 IN ULONG PagedPoolCharge OPTIONAL
,
9382 IN ULONG NonPagedPoolCharge OPTIONAL
,
9389 ObGetObjectPointerCount (
9396 ObReferenceObjectByName (
9397 IN PUNICODE_STRING ObjectName
,
9398 IN ULONG Attributes
,
9399 IN PACCESS_STATE PassedAccessState OPTIONAL
,
9400 IN ACCESS_MASK DesiredAccess OPTIONAL
,
9401 IN POBJECT_TYPE ObjectType
,
9402 IN KPROCESSOR_MODE AccessMode
,
9403 IN OUT PVOID ParseContext OPTIONAL
,
9407 #define PsDereferenceImpersonationToken(T) \
9408 {if (ARGUMENT_PRESENT(T)) { \
9409 (ObDereferenceObject((T))); \
9418 PsLookupProcessThreadByCid (
9420 OUT PEPROCESS
*Process OPTIONAL
,
9421 OUT PETHREAD
*Thread
9427 RtlSetSaclSecurityDescriptor (
9428 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
9429 IN BOOLEAN SaclPresent
,
9431 IN BOOLEAN SaclDefaulted
9434 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
9436 #if (VER_PRODUCTBUILD >= 2195)
9441 ZwAdjustPrivilegesToken (
9442 IN HANDLE TokenHandle
,
9443 IN BOOLEAN DisableAllPrivileges
,
9444 IN PTOKEN_PRIVILEGES NewState
,
9445 IN ULONG BufferLength
,
9446 OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL
,
9447 OUT PULONG ReturnLength
9450 #endif /* (VER_PRODUCTBUILD >= 2195) */
9456 IN HANDLE ThreadHandle
9462 ZwAccessCheckAndAuditAlarm (
9463 IN PUNICODE_STRING SubsystemName
,
9465 IN PUNICODE_STRING ObjectTypeName
,
9466 IN PUNICODE_STRING ObjectName
,
9467 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
9468 IN ACCESS_MASK DesiredAccess
,
9469 IN PGENERIC_MAPPING GenericMapping
,
9470 IN BOOLEAN ObjectCreation
,
9471 OUT PACCESS_MASK GrantedAccess
,
9472 OUT PBOOLEAN AccessStatus
,
9473 OUT PBOOLEAN GenerateOnClose
9476 #if (VER_PRODUCTBUILD >= 2195)
9482 IN HANDLE FileHandle
,
9483 OUT PIO_STATUS_BLOCK IoStatusBlock
9486 #endif /* (VER_PRODUCTBUILD >= 2195) */
9492 IN HANDLE EventHandle
9498 ZwCloseObjectAuditAlarm (
9499 IN PUNICODE_STRING SubsystemName
,
9501 IN BOOLEAN GenerateOnClose
9507 ZwCreateSymbolicLinkObject (
9508 OUT PHANDLE SymbolicLinkHandle
,
9509 IN ACCESS_MASK DesiredAccess
,
9510 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9511 IN PUNICODE_STRING TargetName
9517 ZwFlushInstructionCache (
9518 IN HANDLE ProcessHandle
,
9519 IN PVOID BaseAddress OPTIONAL
,
9527 IN HANDLE FileHandle
,
9528 OUT PIO_STATUS_BLOCK IoStatusBlock
9531 #if (VER_PRODUCTBUILD >= 2195)
9536 ZwInitiatePowerAction (
9537 IN POWER_ACTION SystemAction
,
9538 IN SYSTEM_POWER_STATE MinSystemState
,
9540 IN BOOLEAN Asynchronous
9543 #endif /* (VER_PRODUCTBUILD >= 2195) */
9549 IN POBJECT_ATTRIBUTES KeyObjectAttributes
,
9550 IN POBJECT_ATTRIBUTES FileObjectAttributes
9556 ZwOpenProcessToken (
9557 IN HANDLE ProcessHandle
,
9558 IN ACCESS_MASK DesiredAccess
,
9559 OUT PHANDLE TokenHandle
9566 OUT PHANDLE ThreadHandle
,
9567 IN ACCESS_MASK DesiredAccess
,
9568 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9569 IN PCLIENT_ID ClientId
9576 IN HANDLE ThreadHandle
,
9577 IN ACCESS_MASK DesiredAccess
,
9578 IN BOOLEAN OpenAsSelf
,
9579 OUT PHANDLE TokenHandle
9586 IN HANDLE EventHandle
,
9587 OUT PLONG PreviousState OPTIONAL
9593 ZwQueryDefaultLocale (
9594 IN BOOLEAN ThreadOrSystem
,
9598 #if (VER_PRODUCTBUILD >= 2195)
9603 ZwQueryDirectoryObject (
9604 IN HANDLE DirectoryHandle
,
9607 IN BOOLEAN ReturnSingleEntry
,
9608 IN BOOLEAN RestartScan
,
9609 IN OUT PULONG Context
,
9610 OUT PULONG ReturnLength OPTIONAL
9613 #endif /* (VER_PRODUCTBUILD >= 2195) */
9618 ZwQueryInformationProcess (
9619 IN HANDLE ProcessHandle
,
9620 IN PROCESSINFOCLASS ProcessInformationClass
,
9621 OUT PVOID ProcessInformation
,
9622 IN ULONG ProcessInformationLength
,
9623 OUT PULONG ReturnLength OPTIONAL
9630 IN POBJECT_ATTRIBUTES NewFileObjectAttributes
,
9631 IN HANDLE KeyHandle
,
9632 IN POBJECT_ATTRIBUTES OldFileObjectAttributes
9639 IN HANDLE EventHandle
,
9640 OUT PLONG PreviousState OPTIONAL
9643 #if (VER_PRODUCTBUILD >= 2195)
9649 IN HANDLE KeyHandle
,
9650 IN HANDLE FileHandle
,
9654 #endif /* (VER_PRODUCTBUILD >= 2195) */
9660 IN HANDLE KeyHandle
,
9661 IN HANDLE FileHandle
9667 ZwSetDefaultLocale (
9668 IN BOOLEAN ThreadOrSystem
,
9672 #if (VER_PRODUCTBUILD >= 2195)
9677 ZwSetDefaultUILanguage (
9678 IN LANGID LanguageId
9681 #endif /* (VER_PRODUCTBUILD >= 2195) */
9686 ZwSetInformationProcess (
9687 IN HANDLE ProcessHandle
,
9688 IN PROCESSINFOCLASS ProcessInformationClass
,
9689 IN PVOID ProcessInformation
,
9690 IN ULONG ProcessInformationLength
9697 IN PLARGE_INTEGER NewTime
,
9698 OUT PLARGE_INTEGER OldTime OPTIONAL
9705 IN POBJECT_ATTRIBUTES KeyObjectAttributes
9711 ZwWaitForMultipleObjects (
9712 IN ULONG HandleCount
,
9714 IN WAIT_TYPE WaitType
,
9715 IN BOOLEAN Alertable
,
9716 IN PLARGE_INTEGER Timeout OPTIONAL