4 * Windows NT Filesystem Driver Developer Kit
6 * This file is part of the ReactOS DDK package.
10 * Timo Kreuzer (timo.kreuzer@reactos.org)
12 * THIS SOFTWARE IS NOT COPYRIGHTED
14 * This source code is offered for use in the public domain. You may
15 * use, modify or distribute it freely.
17 * This code is distributed in the hope that it will be useful but
18 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
19 * DISCLAIMED. This includes but is not limited to warranties of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
26 #define _NTIFS_INCLUDED_
44 #define FlagOn(_F,_SF) ((_F) & (_SF))
48 #define BooleanFlagOn(F,SF) ((BOOLEAN)(((F) & (SF)) != 0))
52 #define SetFlag(_F,_SF) ((_F) |= (_SF))
56 #define ClearFlag(_F,_SF) ((_F) &= ~(_SF))
59 typedef UNICODE_STRING LSA_UNICODE_STRING
, *PLSA_UNICODE_STRING
;
60 typedef STRING LSA_STRING
, *PLSA_STRING
;
61 typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES
, *PLSA_OBJECT_ATTRIBUTES
;
63 /******************************************************************************
64 * Security Manager Types *
65 ******************************************************************************/
66 #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
67 #define SID_IDENTIFIER_AUTHORITY_DEFINED
68 typedef struct _SID_IDENTIFIER_AUTHORITY
{
70 } SID_IDENTIFIER_AUTHORITY
,*PSID_IDENTIFIER_AUTHORITY
,*LPSID_IDENTIFIER_AUTHORITY
;
77 UCHAR SubAuthorityCount
;
78 SID_IDENTIFIER_AUTHORITY IdentifierAuthority
;
79 ULONG SubAuthority
[ANYSIZE_ARRAY
];
83 #define SID_REVISION 1
84 #define SID_MAX_SUB_AUTHORITIES 15
85 #define SID_RECOMMENDED_SUB_AUTHORITIES 1
87 typedef enum _SID_NAME_USE
{
92 SidTypeWellKnownGroup
,
93 SidTypeDeletedAccount
,
98 } SID_NAME_USE
, *PSID_NAME_USE
;
100 typedef struct _SID_AND_ATTRIBUTES
{
103 } SID_AND_ATTRIBUTES
, *PSID_AND_ATTRIBUTES
;
104 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY
[ANYSIZE_ARRAY
];
105 typedef SID_AND_ATTRIBUTES_ARRAY
*PSID_AND_ATTRIBUTES_ARRAY
;
107 #define SID_HASH_SIZE 32
108 typedef ULONG_PTR SID_HASH_ENTRY
, *PSID_HASH_ENTRY
;
110 typedef struct _SID_AND_ATTRIBUTES_HASH
{
112 PSID_AND_ATTRIBUTES SidAttr
;
113 SID_HASH_ENTRY Hash
[SID_HASH_SIZE
];
114 } SID_AND_ATTRIBUTES_HASH
, *PSID_AND_ATTRIBUTES_HASH
;
116 /* Universal well-known SIDs */
118 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
119 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
120 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
121 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
122 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
123 #define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
125 #define SECURITY_NULL_RID (0x00000000L)
126 #define SECURITY_WORLD_RID (0x00000000L)
127 #define SECURITY_LOCAL_RID (0x00000000L)
128 #define SECURITY_LOCAL_LOGON_RID (0x00000001L)
130 #define SECURITY_CREATOR_OWNER_RID (0x00000000L)
131 #define SECURITY_CREATOR_GROUP_RID (0x00000001L)
132 #define SECURITY_CREATOR_OWNER_SERVER_RID (0x00000002L)
133 #define SECURITY_CREATOR_GROUP_SERVER_RID (0x00000003L)
134 #define SECURITY_CREATOR_OWNER_RIGHTS_RID (0x00000004L)
136 /* NT well-known SIDs */
138 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
140 #define SECURITY_DIALUP_RID (0x00000001L)
141 #define SECURITY_NETWORK_RID (0x00000002L)
142 #define SECURITY_BATCH_RID (0x00000003L)
143 #define SECURITY_INTERACTIVE_RID (0x00000004L)
144 #define SECURITY_LOGON_IDS_RID (0x00000005L)
145 #define SECURITY_LOGON_IDS_RID_COUNT (3L)
146 #define SECURITY_SERVICE_RID (0x00000006L)
147 #define SECURITY_ANONYMOUS_LOGON_RID (0x00000007L)
148 #define SECURITY_PROXY_RID (0x00000008L)
149 #define SECURITY_ENTERPRISE_CONTROLLERS_RID (0x00000009L)
150 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
151 #define SECURITY_PRINCIPAL_SELF_RID (0x0000000AL)
152 #define SECURITY_AUTHENTICATED_USER_RID (0x0000000BL)
153 #define SECURITY_RESTRICTED_CODE_RID (0x0000000CL)
154 #define SECURITY_TERMINAL_SERVER_RID (0x0000000DL)
155 #define SECURITY_REMOTE_LOGON_RID (0x0000000EL)
156 #define SECURITY_THIS_ORGANIZATION_RID (0x0000000FL)
157 #define SECURITY_IUSER_RID (0x00000011L)
158 #define SECURITY_LOCAL_SYSTEM_RID (0x00000012L)
159 #define SECURITY_LOCAL_SERVICE_RID (0x00000013L)
160 #define SECURITY_NETWORK_SERVICE_RID (0x00000014L)
161 #define SECURITY_NT_NON_UNIQUE (0x00000015L)
162 #define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT (3L)
163 #define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID (0x00000016L)
165 #define SECURITY_BUILTIN_DOMAIN_RID (0x00000020L)
166 #define SECURITY_WRITE_RESTRICTED_CODE_RID (0x00000021L)
169 #define SECURITY_PACKAGE_BASE_RID (0x00000040L)
170 #define SECURITY_PACKAGE_RID_COUNT (2L)
171 #define SECURITY_PACKAGE_NTLM_RID (0x0000000AL)
172 #define SECURITY_PACKAGE_SCHANNEL_RID (0x0000000EL)
173 #define SECURITY_PACKAGE_DIGEST_RID (0x00000015L)
175 #define SECURITY_CRED_TYPE_BASE_RID (0x00000041L)
176 #define SECURITY_CRED_TYPE_RID_COUNT (2L)
177 #define SECURITY_CRED_TYPE_THIS_ORG_CERT_RID (0x00000001L)
179 #define SECURITY_MIN_BASE_RID (0x00000050L)
180 #define SECURITY_SERVICE_ID_BASE_RID (0x00000050L)
181 #define SECURITY_SERVICE_ID_RID_COUNT (6L)
182 #define SECURITY_RESERVED_ID_BASE_RID (0x00000051L)
183 #define SECURITY_APPPOOL_ID_BASE_RID (0x00000052L)
184 #define SECURITY_APPPOOL_ID_RID_COUNT (6L)
185 #define SECURITY_VIRTUALSERVER_ID_BASE_RID (0x00000053L)
186 #define SECURITY_VIRTUALSERVER_ID_RID_COUNT (6L)
187 #define SECURITY_USERMODEDRIVERHOST_ID_BASE_RID (0x00000054L)
188 #define SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT (6L)
189 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID (0x00000055L)
190 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT (6L)
191 #define SECURITY_WMIHOST_ID_BASE_RID (0x00000056L)
192 #define SECURITY_WMIHOST_ID_RID_COUNT (6L)
193 #define SECURITY_TASK_ID_BASE_RID (0x00000057L)
194 #define SECURITY_NFS_ID_BASE_RID (0x00000058L)
195 #define SECURITY_COM_ID_BASE_RID (0x00000059L)
196 #define SECURITY_VIRTUALACCOUNT_ID_RID_COUNT (6L)
198 #define SECURITY_MAX_BASE_RID (0x0000006FL)
200 #define SECURITY_MAX_ALWAYS_FILTERED (0x000003E7L)
201 #define SECURITY_MIN_NEVER_FILTERED (0x000003E8L)
203 #define SECURITY_OTHER_ORGANIZATION_RID (0x000003E8L)
205 #define SECURITY_WINDOWSMOBILE_ID_BASE_RID (0x00000070L)
207 /* Well-known domain relative sub-authority values (RIDs) */
209 #define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS (0x000001F2L)
211 #define FOREST_USER_RID_MAX (0x000001F3L)
213 /* Well-known users */
215 #define DOMAIN_USER_RID_ADMIN (0x000001F4L)
216 #define DOMAIN_USER_RID_GUEST (0x000001F5L)
217 #define DOMAIN_USER_RID_KRBTGT (0x000001F6L)
219 #define DOMAIN_USER_RID_MAX (0x000003E7L)
221 /* Well-known groups */
223 #define DOMAIN_GROUP_RID_ADMINS (0x00000200L)
224 #define DOMAIN_GROUP_RID_USERS (0x00000201L)
225 #define DOMAIN_GROUP_RID_GUESTS (0x00000202L)
226 #define DOMAIN_GROUP_RID_COMPUTERS (0x00000203L)
227 #define DOMAIN_GROUP_RID_CONTROLLERS (0x00000204L)
228 #define DOMAIN_GROUP_RID_CERT_ADMINS (0x00000205L)
229 #define DOMAIN_GROUP_RID_SCHEMA_ADMINS (0x00000206L)
230 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (0x00000207L)
231 #define DOMAIN_GROUP_RID_POLICY_ADMINS (0x00000208L)
232 #define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (0x00000209L)
234 /* Well-known aliases */
236 #define DOMAIN_ALIAS_RID_ADMINS (0x00000220L)
237 #define DOMAIN_ALIAS_RID_USERS (0x00000221L)
238 #define DOMAIN_ALIAS_RID_GUESTS (0x00000222L)
239 #define DOMAIN_ALIAS_RID_POWER_USERS (0x00000223L)
241 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS (0x00000224L)
242 #define DOMAIN_ALIAS_RID_SYSTEM_OPS (0x00000225L)
243 #define DOMAIN_ALIAS_RID_PRINT_OPS (0x00000226L)
244 #define DOMAIN_ALIAS_RID_BACKUP_OPS (0x00000227L)
246 #define DOMAIN_ALIAS_RID_REPLICATOR (0x00000228L)
247 #define DOMAIN_ALIAS_RID_RAS_SERVERS (0x00000229L)
248 #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS (0x0000022AL)
249 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS (0x0000022BL)
250 #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS (0x0000022CL)
251 #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS (0x0000022DL)
253 #define DOMAIN_ALIAS_RID_MONITORING_USERS (0x0000022EL)
254 #define DOMAIN_ALIAS_RID_LOGGING_USERS (0x0000022FL)
255 #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS (0x00000230L)
256 #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS (0x00000231L)
257 #define DOMAIN_ALIAS_RID_DCOM_USERS (0x00000232L)
258 #define DOMAIN_ALIAS_RID_IUSERS (0x00000238L)
259 #define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS (0x00000239L)
260 #define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP (0x0000023BL)
261 #define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (0x0000023CL)
262 #define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP (0x0000023DL)
263 #define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP (0x0000023EL)
265 #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
266 #define SECURITY_MANDATORY_UNTRUSTED_RID (0x00000000L)
267 #define SECURITY_MANDATORY_LOW_RID (0x00001000L)
268 #define SECURITY_MANDATORY_MEDIUM_RID (0x00002000L)
269 #define SECURITY_MANDATORY_HIGH_RID (0x00003000L)
270 #define SECURITY_MANDATORY_SYSTEM_RID (0x00004000L)
271 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID (0x00005000L)
273 /* SECURITY_MANDATORY_MAXIMUM_USER_RID is the highest RID that
274 can be set by a usermode caller.*/
276 #define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
278 #define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
280 /* Allocate the System Luid. The first 1000 LUIDs are reserved.
281 Use #999 here (0x3e7 = 999) */
283 #define SYSTEM_LUID { 0x3e7, 0x0 }
284 #define ANONYMOUS_LOGON_LUID { 0x3e6, 0x0 }
285 #define LOCALSERVICE_LUID { 0x3e5, 0x0 }
286 #define NETWORKSERVICE_LUID { 0x3e4, 0x0 }
287 #define IUSER_LUID { 0x3e3, 0x0 }
289 typedef struct _ACE_HEADER
{
293 } ACE_HEADER
, *PACE_HEADER
;
295 /* also in winnt.h */
296 #define ACCESS_MIN_MS_ACE_TYPE (0x0)
297 #define ACCESS_ALLOWED_ACE_TYPE (0x0)
298 #define ACCESS_DENIED_ACE_TYPE (0x1)
299 #define SYSTEM_AUDIT_ACE_TYPE (0x2)
300 #define SYSTEM_ALARM_ACE_TYPE (0x3)
301 #define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
302 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
303 #define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
304 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
305 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
306 #define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
307 #define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
308 #define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
309 #define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
310 #define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
311 #define ACCESS_MAX_MS_ACE_TYPE (0x8)
312 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
313 #define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
314 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
315 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
316 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
317 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
318 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
319 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
320 #define ACCESS_MAX_MS_V5_ACE_TYPE (0x11)
321 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE (0x11)
323 /* The following are the inherit flags that go into the AceFlags field
326 #define OBJECT_INHERIT_ACE (0x1)
327 #define CONTAINER_INHERIT_ACE (0x2)
328 #define NO_PROPAGATE_INHERIT_ACE (0x4)
329 #define INHERIT_ONLY_ACE (0x8)
330 #define INHERITED_ACE (0x10)
331 #define VALID_INHERIT_FLAGS (0x1F)
333 #define SUCCESSFUL_ACCESS_ACE_FLAG (0x40)
334 #define FAILED_ACCESS_ACE_FLAG (0x80)
336 typedef struct _ACCESS_ALLOWED_ACE
{
340 } ACCESS_ALLOWED_ACE
, *PACCESS_ALLOWED_ACE
;
342 typedef struct _ACCESS_DENIED_ACE
{
346 } ACCESS_DENIED_ACE
, *PACCESS_DENIED_ACE
;
348 typedef struct _SYSTEM_AUDIT_ACE
{
352 } SYSTEM_AUDIT_ACE
, *PSYSTEM_AUDIT_ACE
;
354 typedef struct _SYSTEM_ALARM_ACE
{
358 } SYSTEM_ALARM_ACE
, *PSYSTEM_ALARM_ACE
;
360 typedef struct _SYSTEM_MANDATORY_LABEL_ACE
{
364 } SYSTEM_MANDATORY_LABEL_ACE
, *PSYSTEM_MANDATORY_LABEL_ACE
;
366 #define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1
367 #define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2
368 #define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
369 #define SYSTEM_MANDATORY_LABEL_VALID_MASK (SYSTEM_MANDATORY_LABEL_NO_WRITE_UP | \
370 SYSTEM_MANDATORY_LABEL_NO_READ_UP | \
371 SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP)
373 #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
375 typedef USHORT SECURITY_DESCRIPTOR_CONTROL
,*PSECURITY_DESCRIPTOR_CONTROL
;
377 #define SE_OWNER_DEFAULTED 0x0001
378 #define SE_GROUP_DEFAULTED 0x0002
379 #define SE_DACL_PRESENT 0x0004
380 #define SE_DACL_DEFAULTED 0x0008
381 #define SE_SACL_PRESENT 0x0010
382 #define SE_SACL_DEFAULTED 0x0020
383 #define SE_DACL_UNTRUSTED 0x0040
384 #define SE_SERVER_SECURITY 0x0080
385 #define SE_DACL_AUTO_INHERIT_REQ 0x0100
386 #define SE_SACL_AUTO_INHERIT_REQ 0x0200
387 #define SE_DACL_AUTO_INHERITED 0x0400
388 #define SE_SACL_AUTO_INHERITED 0x0800
389 #define SE_DACL_PROTECTED 0x1000
390 #define SE_SACL_PROTECTED 0x2000
391 #define SE_RM_CONTROL_VALID 0x4000
392 #define SE_SELF_RELATIVE 0x8000
394 typedef struct _SECURITY_DESCRIPTOR_RELATIVE
{
397 SECURITY_DESCRIPTOR_CONTROL Control
;
402 } SECURITY_DESCRIPTOR_RELATIVE
, *PISECURITY_DESCRIPTOR_RELATIVE
;
404 typedef struct _SECURITY_DESCRIPTOR
{
407 SECURITY_DESCRIPTOR_CONTROL Control
;
412 } SECURITY_DESCRIPTOR
, *PISECURITY_DESCRIPTOR
;
414 typedef struct _OBJECT_TYPE_LIST
{
418 } OBJECT_TYPE_LIST
, *POBJECT_TYPE_LIST
;
420 #define ACCESS_OBJECT_GUID 0
421 #define ACCESS_PROPERTY_SET_GUID 1
422 #define ACCESS_PROPERTY_GUID 2
423 #define ACCESS_MAX_LEVEL 4
425 typedef enum _AUDIT_EVENT_TYPE
{
426 AuditEventObjectAccess
,
427 AuditEventDirectoryServiceAccess
428 } AUDIT_EVENT_TYPE
, *PAUDIT_EVENT_TYPE
;
430 #define AUDIT_ALLOW_NO_PRIVILEGE 0x1
432 #define ACCESS_DS_SOURCE_A "DS"
433 #define ACCESS_DS_SOURCE_W L"DS"
434 #define ACCESS_DS_OBJECT_TYPE_NAME_A "Directory Service Object"
435 #define ACCESS_DS_OBJECT_TYPE_NAME_W L"Directory Service Object"
437 #define ACCESS_REASON_TYPE_MASK 0xffff0000
438 #define ACCESS_REASON_DATA_MASK 0x0000ffff
440 typedef enum _ACCESS_REASON_TYPE
{
441 AccessReasonNone
= 0x00000000,
442 AccessReasonAllowedAce
= 0x00010000,
443 AccessReasonDeniedAce
= 0x00020000,
444 AccessReasonAllowedParentAce
= 0x00030000,
445 AccessReasonDeniedParentAce
= 0x00040000,
446 AccessReasonMissingPrivilege
= 0x00100000,
447 AccessReasonFromPrivilege
= 0x00200000,
448 AccessReasonIntegrityLevel
= 0x00300000,
449 AccessReasonOwnership
= 0x00400000,
450 AccessReasonNullDacl
= 0x00500000,
451 AccessReasonEmptyDacl
= 0x00600000,
452 AccessReasonNoSD
= 0x00700000,
453 AccessReasonNoGrant
= 0x00800000
454 } ACCESS_REASON_TYPE
;
456 typedef ULONG ACCESS_REASON
;
458 typedef struct _ACCESS_REASONS
{
459 ACCESS_REASON Data
[32];
460 } ACCESS_REASONS
, *PACCESS_REASONS
;
462 #define SE_SECURITY_DESCRIPTOR_FLAG_NO_OWNER_ACE 0x00000001
463 #define SE_SECURITY_DESCRIPTOR_FLAG_NO_LABEL_ACE 0x00000002
464 #define SE_SECURITY_DESCRIPTOR_VALID_FLAGS 0x00000003
466 typedef struct _SE_SECURITY_DESCRIPTOR
{
469 PSECURITY_DESCRIPTOR SecurityDescriptor
;
470 } SE_SECURITY_DESCRIPTOR
, *PSE_SECURITY_DESCRIPTOR
;
472 typedef struct _SE_ACCESS_REQUEST
{
474 PSE_SECURITY_DESCRIPTOR SeSecurityDescriptor
;
475 ACCESS_MASK DesiredAccess
;
476 ACCESS_MASK PreviouslyGrantedAccess
;
477 PSID PrincipalSelfSid
;
478 PGENERIC_MAPPING GenericMapping
;
479 ULONG ObjectTypeListCount
;
480 POBJECT_TYPE_LIST ObjectTypeList
;
481 } SE_ACCESS_REQUEST
, *PSE_ACCESS_REQUEST
;
483 typedef struct _SE_ACCESS_REPLY
{
485 ULONG ResultListCount
;
486 PACCESS_MASK GrantedAccess
;
487 PNTSTATUS AccessStatus
;
488 PACCESS_REASONS AccessReason
;
489 PPRIVILEGE_SET
* Privileges
;
490 } SE_ACCESS_REPLY
, *PSE_ACCESS_REPLY
;
492 typedef enum _SE_AUDIT_OPERATION
{
493 AuditPrivilegeObject
,
494 AuditPrivilegeService
,
497 AuditOpenObjectWithTransaction
,
500 AuditOpenObjectForDelete
,
501 AuditOpenObjectForDeleteWithTransaction
,
504 AuditObjectReference
,
506 } SE_AUDIT_OPERATION
, *PSE_AUDIT_OPERATION
;
508 typedef struct _SE_AUDIT_INFO
{
510 AUDIT_EVENT_TYPE AuditType
;
511 SE_AUDIT_OPERATION AuditOperation
;
513 UNICODE_STRING SubsystemName
;
514 UNICODE_STRING ObjectTypeName
;
515 UNICODE_STRING ObjectName
;
519 BOOLEAN ObjectCreation
;
520 BOOLEAN GenerateOnClose
;
521 } SE_AUDIT_INFO
, *PSE_AUDIT_INFO
;
523 #define TOKEN_ASSIGN_PRIMARY (0x0001)
524 #define TOKEN_DUPLICATE (0x0002)
525 #define TOKEN_IMPERSONATE (0x0004)
526 #define TOKEN_QUERY (0x0008)
527 #define TOKEN_QUERY_SOURCE (0x0010)
528 #define TOKEN_ADJUST_PRIVILEGES (0x0020)
529 #define TOKEN_ADJUST_GROUPS (0x0040)
530 #define TOKEN_ADJUST_DEFAULT (0x0080)
531 #define TOKEN_ADJUST_SESSIONID (0x0100)
533 #define TOKEN_ALL_ACCESS_P (STANDARD_RIGHTS_REQUIRED |\
534 TOKEN_ASSIGN_PRIMARY |\
538 TOKEN_QUERY_SOURCE |\
539 TOKEN_ADJUST_PRIVILEGES |\
540 TOKEN_ADJUST_GROUPS |\
541 TOKEN_ADJUST_DEFAULT )
543 #if ((defined(_WIN32_WINNT) && (_WIN32_WINNT > 0x0400)) || (!defined(_WIN32_WINNT)))
544 #define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P |\
545 TOKEN_ADJUST_SESSIONID )
547 #define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P)
550 #define TOKEN_READ (STANDARD_RIGHTS_READ |\
553 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\
554 TOKEN_ADJUST_PRIVILEGES |\
555 TOKEN_ADJUST_GROUPS |\
556 TOKEN_ADJUST_DEFAULT)
558 #define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
560 typedef enum _TOKEN_TYPE
{
563 } TOKEN_TYPE
,*PTOKEN_TYPE
;
565 typedef enum _TOKEN_INFORMATION_CLASS
{
574 TokenImpersonationLevel
,
578 TokenGroupsAndPrivileges
,
579 TokenSessionReference
,
586 TokenHasRestrictions
,
587 TokenAccessInformation
,
588 TokenVirtualizationAllowed
,
589 TokenVirtualizationEnabled
,
592 TokenMandatoryPolicy
,
595 } TOKEN_INFORMATION_CLASS
, *PTOKEN_INFORMATION_CLASS
;
597 typedef struct _TOKEN_USER
{
598 SID_AND_ATTRIBUTES User
;
599 } TOKEN_USER
, *PTOKEN_USER
;
601 typedef struct _TOKEN_GROUPS
{
603 SID_AND_ATTRIBUTES Groups
[ANYSIZE_ARRAY
];
604 } TOKEN_GROUPS
,*PTOKEN_GROUPS
,*LPTOKEN_GROUPS
;
606 typedef struct _TOKEN_PRIVILEGES
{
607 ULONG PrivilegeCount
;
608 LUID_AND_ATTRIBUTES Privileges
[ANYSIZE_ARRAY
];
609 } TOKEN_PRIVILEGES
,*PTOKEN_PRIVILEGES
,*LPTOKEN_PRIVILEGES
;
611 typedef struct _TOKEN_OWNER
{
613 } TOKEN_OWNER
,*PTOKEN_OWNER
;
615 typedef struct _TOKEN_PRIMARY_GROUP
{
617 } TOKEN_PRIMARY_GROUP
,*PTOKEN_PRIMARY_GROUP
;
619 typedef struct _TOKEN_DEFAULT_DACL
{
621 } TOKEN_DEFAULT_DACL
,*PTOKEN_DEFAULT_DACL
;
623 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES
{
626 PSID_AND_ATTRIBUTES Sids
;
627 ULONG RestrictedSidCount
;
628 ULONG RestrictedSidLength
;
629 PSID_AND_ATTRIBUTES RestrictedSids
;
630 ULONG PrivilegeCount
;
631 ULONG PrivilegeLength
;
632 PLUID_AND_ATTRIBUTES Privileges
;
633 LUID AuthenticationId
;
634 } TOKEN_GROUPS_AND_PRIVILEGES
, *PTOKEN_GROUPS_AND_PRIVILEGES
;
636 typedef struct _TOKEN_LINKED_TOKEN
{
638 } TOKEN_LINKED_TOKEN
, *PTOKEN_LINKED_TOKEN
;
640 typedef struct _TOKEN_ELEVATION
{
641 ULONG TokenIsElevated
;
642 } TOKEN_ELEVATION
, *PTOKEN_ELEVATION
;
644 typedef struct _TOKEN_MANDATORY_LABEL
{
645 SID_AND_ATTRIBUTES Label
;
646 } TOKEN_MANDATORY_LABEL
, *PTOKEN_MANDATORY_LABEL
;
648 #define TOKEN_MANDATORY_POLICY_OFF 0x0
649 #define TOKEN_MANDATORY_POLICY_NO_WRITE_UP 0x1
650 #define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2
652 #define TOKEN_MANDATORY_POLICY_VALID_MASK (TOKEN_MANDATORY_POLICY_NO_WRITE_UP | \
653 TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN)
655 typedef struct _TOKEN_MANDATORY_POLICY
{
657 } TOKEN_MANDATORY_POLICY
, *PTOKEN_MANDATORY_POLICY
;
659 typedef struct _TOKEN_ACCESS_INFORMATION
{
660 PSID_AND_ATTRIBUTES_HASH SidHash
;
661 PSID_AND_ATTRIBUTES_HASH RestrictedSidHash
;
662 PTOKEN_PRIVILEGES Privileges
;
663 LUID AuthenticationId
;
664 TOKEN_TYPE TokenType
;
665 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
666 TOKEN_MANDATORY_POLICY MandatoryPolicy
;
668 } TOKEN_ACCESS_INFORMATION
, *PTOKEN_ACCESS_INFORMATION
;
670 #define POLICY_AUDIT_SUBCATEGORY_COUNT (53)
672 typedef struct _TOKEN_AUDIT_POLICY
{
673 UCHAR PerUserPolicy
[((POLICY_AUDIT_SUBCATEGORY_COUNT
) >> 1) + 1];
674 } TOKEN_AUDIT_POLICY
, *PTOKEN_AUDIT_POLICY
;
676 #define TOKEN_SOURCE_LENGTH 8
678 typedef struct _TOKEN_SOURCE
{
679 CHAR SourceName
[TOKEN_SOURCE_LENGTH
];
680 LUID SourceIdentifier
;
681 } TOKEN_SOURCE
,*PTOKEN_SOURCE
;
683 typedef struct _TOKEN_STATISTICS
{
685 LUID AuthenticationId
;
686 LARGE_INTEGER ExpirationTime
;
687 TOKEN_TYPE TokenType
;
688 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
689 ULONG DynamicCharged
;
690 ULONG DynamicAvailable
;
692 ULONG PrivilegeCount
;
694 } TOKEN_STATISTICS
, *PTOKEN_STATISTICS
;
696 typedef struct _TOKEN_CONTROL
{
698 LUID AuthenticationId
;
700 TOKEN_SOURCE TokenSource
;
701 } TOKEN_CONTROL
,*PTOKEN_CONTROL
;
703 typedef struct _TOKEN_ORIGIN
{
704 LUID OriginatingLogonSession
;
705 } TOKEN_ORIGIN
, *PTOKEN_ORIGIN
;
707 typedef enum _MANDATORY_LEVEL
{
708 MandatoryLevelUntrusted
= 0,
710 MandatoryLevelMedium
,
712 MandatoryLevelSystem
,
713 MandatoryLevelSecureProcess
,
715 } MANDATORY_LEVEL
, *PMANDATORY_LEVEL
;
717 #define TOKEN_HAS_TRAVERSE_PRIVILEGE 0x0001
718 #define TOKEN_HAS_BACKUP_PRIVILEGE 0x0002
719 #define TOKEN_HAS_RESTORE_PRIVILEGE 0x0004
720 #define TOKEN_WRITE_RESTRICTED 0x0008
721 #define TOKEN_IS_RESTRICTED 0x0010
722 #define TOKEN_SESSION_NOT_REFERENCED 0x0020
723 #define TOKEN_SANDBOX_INERT 0x0040
724 #define TOKEN_HAS_IMPERSONATE_PRIVILEGE 0x0080
725 #define SE_BACKUP_PRIVILEGES_CHECKED 0x0100
726 #define TOKEN_VIRTUALIZE_ALLOWED 0x0200
727 #define TOKEN_VIRTUALIZE_ENABLED 0x0400
728 #define TOKEN_IS_FILTERED 0x0800
729 #define TOKEN_UIACCESS 0x1000
730 #define TOKEN_NOT_LOW 0x2000
732 typedef struct _SE_EXPORTS
{
733 LUID SeCreateTokenPrivilege
;
734 LUID SeAssignPrimaryTokenPrivilege
;
735 LUID SeLockMemoryPrivilege
;
736 LUID SeIncreaseQuotaPrivilege
;
737 LUID SeUnsolicitedInputPrivilege
;
739 LUID SeSecurityPrivilege
;
740 LUID SeTakeOwnershipPrivilege
;
741 LUID SeLoadDriverPrivilege
;
742 LUID SeCreatePagefilePrivilege
;
743 LUID SeIncreaseBasePriorityPrivilege
;
744 LUID SeSystemProfilePrivilege
;
745 LUID SeSystemtimePrivilege
;
746 LUID SeProfileSingleProcessPrivilege
;
747 LUID SeCreatePermanentPrivilege
;
748 LUID SeBackupPrivilege
;
749 LUID SeRestorePrivilege
;
750 LUID SeShutdownPrivilege
;
751 LUID SeDebugPrivilege
;
752 LUID SeAuditPrivilege
;
753 LUID SeSystemEnvironmentPrivilege
;
754 LUID SeChangeNotifyPrivilege
;
755 LUID SeRemoteShutdownPrivilege
;
759 PSID SeCreatorOwnerSid
;
760 PSID SeCreatorGroupSid
;
761 PSID SeNtAuthoritySid
;
765 PSID SeInteractiveSid
;
766 PSID SeLocalSystemSid
;
767 PSID SeAliasAdminsSid
;
768 PSID SeAliasUsersSid
;
769 PSID SeAliasGuestsSid
;
770 PSID SeAliasPowerUsersSid
;
771 PSID SeAliasAccountOpsSid
;
772 PSID SeAliasSystemOpsSid
;
773 PSID SeAliasPrintOpsSid
;
774 PSID SeAliasBackupOpsSid
;
775 PSID SeAuthenticatedUsersSid
;
776 PSID SeRestrictedSid
;
777 PSID SeAnonymousLogonSid
;
778 LUID SeUndockPrivilege
;
779 LUID SeSyncAgentPrivilege
;
780 LUID SeEnableDelegationPrivilege
;
781 PSID SeLocalServiceSid
;
782 PSID SeNetworkServiceSid
;
783 LUID SeManageVolumePrivilege
;
784 LUID SeImpersonatePrivilege
;
785 LUID SeCreateGlobalPrivilege
;
786 LUID SeTrustedCredManAccessPrivilege
;
787 LUID SeRelabelPrivilege
;
788 LUID SeIncreaseWorkingSetPrivilege
;
789 LUID SeTimeZonePrivilege
;
790 LUID SeCreateSymbolicLinkPrivilege
;
792 PSID SeUntrustedMandatorySid
;
793 PSID SeLowMandatorySid
;
794 PSID SeMediumMandatorySid
;
795 PSID SeHighMandatorySid
;
796 PSID SeSystemMandatorySid
;
797 PSID SeOwnerRightsSid
;
798 } SE_EXPORTS
, *PSE_EXPORTS
;
801 (NTAPI
*PSE_LOGON_SESSION_TERMINATED_ROUTINE
)(
803 /******************************************************************************
804 * Runtime Library Types *
805 ******************************************************************************/
808 #define RTL_SYSTEM_VOLUME_INFORMATION_FOLDER L"System Volume Information"
811 (NTAPI
*PRTL_ALLOCATE_STRING_ROUTINE
)(
812 IN SIZE_T NumberOfBytes
);
814 #if _WIN32_WINNT >= 0x0600
816 (NTAPI
*PRTL_REALLOCATE_STRING_ROUTINE
)(
817 IN SIZE_T NumberOfBytes
,
822 (NTAPI
*PRTL_FREE_STRING_ROUTINE
)(
825 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine
;
826 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine
;
828 #if _WIN32_WINNT >= 0x0600
829 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine
;
833 (NTAPI
* PRTL_HEAP_COMMIT_ROUTINE
) (
835 IN OUT PVOID
*CommitAddress
,
836 IN OUT PSIZE_T CommitSize
);
838 typedef struct _RTL_HEAP_PARAMETERS
{
840 SIZE_T SegmentReserve
;
841 SIZE_T SegmentCommit
;
842 SIZE_T DeCommitFreeBlockThreshold
;
843 SIZE_T DeCommitTotalFreeThreshold
;
844 SIZE_T MaximumAllocationSize
;
845 SIZE_T VirtualMemoryThreshold
;
846 SIZE_T InitialCommit
;
847 SIZE_T InitialReserve
;
848 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine
;
850 } RTL_HEAP_PARAMETERS
, *PRTL_HEAP_PARAMETERS
;
852 #if (NTDDI_VERSION >= NTDDI_WIN2K)
854 typedef struct _GENERATE_NAME_CONTEXT
{
856 BOOLEAN CheckSumInserted
;
859 ULONG ExtensionLength
;
860 WCHAR ExtensionBuffer
[4];
861 ULONG LastIndexValue
;
862 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
864 typedef struct _PREFIX_TABLE_ENTRY
{
867 struct _PREFIX_TABLE_ENTRY
*NextPrefixTree
;
868 RTL_SPLAY_LINKS Links
;
870 } PREFIX_TABLE_ENTRY
, *PPREFIX_TABLE_ENTRY
;
872 typedef struct _PREFIX_TABLE
{
875 PPREFIX_TABLE_ENTRY NextPrefixTree
;
876 } PREFIX_TABLE
, *PPREFIX_TABLE
;
878 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
{
881 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
882 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
883 RTL_SPLAY_LINKS Links
;
884 PUNICODE_STRING Prefix
;
885 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
887 typedef struct _UNICODE_PREFIX_TABLE
{
890 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
891 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
892 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
894 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
896 #if (NTDDI_VERSION >= NTDDI_WINXP)
897 typedef struct _COMPRESSED_DATA_INFO
{
898 USHORT CompressionFormatAndEngine
;
899 UCHAR CompressionUnitShift
;
903 USHORT NumberOfChunks
;
904 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
905 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
907 /******************************************************************************
908 * Runtime Library Functions *
909 ******************************************************************************/
912 #if (NTDDI_VERSION >= NTDDI_WIN2K)
919 IN HANDLE HeapHandle
,
920 IN ULONG Flags OPTIONAL
,
928 IN ULONG Flags OPTIONAL
,
929 IN PVOID BaseAddress
);
935 OUT PCONTEXT ContextRecord
);
946 RtlCreateUnicodeString(
947 OUT PUNICODE_STRING DestinationString
,
948 IN PCWSTR SourceString
);
953 RtlAppendStringToString(
954 IN OUT PSTRING Destination
,
955 IN
const STRING
*Source
);
960 RtlOemStringToUnicodeString(
961 IN OUT PUNICODE_STRING DestinationString
,
962 IN PCOEM_STRING SourceString
,
963 IN BOOLEAN AllocateDestinationString
);
968 RtlUnicodeStringToOemString(
969 IN OUT POEM_STRING DestinationString
,
970 IN PCUNICODE_STRING SourceString
,
971 IN BOOLEAN AllocateDestinationString
);
976 RtlUpcaseUnicodeStringToOemString(
977 IN OUT POEM_STRING DestinationString
,
978 IN PCUNICODE_STRING SourceString
,
979 IN BOOLEAN AllocateDestinationString
);
984 RtlOemStringToCountedUnicodeString(
985 IN OUT PUNICODE_STRING DestinationString
,
986 IN PCOEM_STRING SourceString
,
987 IN BOOLEAN AllocateDestinationString
);
992 RtlUnicodeStringToCountedOemString(
993 IN OUT POEM_STRING DestinationString
,
994 IN PCUNICODE_STRING SourceString
,
995 IN BOOLEAN AllocateDestinationString
);
1000 RtlUpcaseUnicodeStringToCountedOemString(
1001 IN OUT POEM_STRING DestinationString
,
1002 IN PCUNICODE_STRING SourceString
,
1003 IN BOOLEAN AllocateDestinationString
);
1008 RtlDowncaseUnicodeString(
1009 IN OUT PUNICODE_STRING UniDest
,
1010 IN PCUNICODE_STRING UniSource
,
1011 IN BOOLEAN AllocateDestinationString
);
1017 IN OUT POEM_STRING OemString
);
1022 RtlxUnicodeStringToOemSize(
1023 IN PCUNICODE_STRING UnicodeString
);
1028 RtlxOemStringToUnicodeSize(
1029 IN PCOEM_STRING OemString
);
1034 RtlMultiByteToUnicodeN(
1035 OUT PWCH UnicodeString
,
1036 IN ULONG MaxBytesInUnicodeString
,
1037 OUT PULONG BytesInUnicodeString OPTIONAL
,
1038 IN
const CHAR
*MultiByteString
,
1039 IN ULONG BytesInMultiByteString
);
1044 RtlMultiByteToUnicodeSize(
1045 OUT PULONG BytesInUnicodeString
,
1046 IN
const CHAR
*MultiByteString
,
1047 IN ULONG BytesInMultiByteString
);
1052 RtlUnicodeToMultiByteSize(
1053 OUT PULONG BytesInMultiByteString
,
1054 IN PCWCH UnicodeString
,
1055 IN ULONG BytesInUnicodeString
);
1060 RtlUnicodeToMultiByteN(
1061 OUT PCHAR MultiByteString
,
1062 IN ULONG MaxBytesInMultiByteString
,
1063 OUT PULONG BytesInMultiByteString OPTIONAL
,
1064 IN PWCH UnicodeString
,
1065 IN ULONG BytesInUnicodeString
);
1070 RtlUpcaseUnicodeToMultiByteN(
1071 OUT PCHAR MultiByteString
,
1072 IN ULONG MaxBytesInMultiByteString
,
1073 OUT PULONG BytesInMultiByteString OPTIONAL
,
1074 IN PCWCH UnicodeString
,
1075 IN ULONG BytesInUnicodeString
);
1081 OUT PWSTR UnicodeString
,
1082 IN ULONG MaxBytesInUnicodeString
,
1083 OUT PULONG BytesInUnicodeString OPTIONAL
,
1085 IN ULONG BytesInOemString
);
1091 OUT PCHAR OemString
,
1092 IN ULONG MaxBytesInOemString
,
1093 OUT PULONG BytesInOemString OPTIONAL
,
1094 IN PCWCH UnicodeString
,
1095 IN ULONG BytesInUnicodeString
);
1100 RtlUpcaseUnicodeToOemN(
1101 OUT PCHAR OemString
,
1102 IN ULONG MaxBytesInOemString
,
1103 OUT PULONG BytesInOemString OPTIONAL
,
1104 IN PCWCH UnicodeString
,
1105 IN ULONG BytesInUnicodeString
);
1107 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1111 RtlGenerate8dot3Name(
1112 IN PCUNICODE_STRING Name
,
1113 IN BOOLEAN AllowExtendedCharacters
,
1114 IN OUT PGENERATE_NAME_CONTEXT Context
,
1115 IN OUT PUNICODE_STRING Name8dot3
);
1120 RtlGenerate8dot3Name(
1121 IN PCUNICODE_STRING Name
,
1122 IN BOOLEAN AllowExtendedCharacters
,
1123 IN OUT PGENERATE_NAME_CONTEXT Context
,
1124 IN OUT PUNICODE_STRING Name8dot3
);
1130 RtlIsNameLegalDOS8Dot3(
1131 IN PCUNICODE_STRING Name
,
1132 IN OUT POEM_STRING OemName OPTIONAL
,
1133 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
);
1138 RtlIsValidOemCharacter(
1139 IN OUT PWCHAR Char
);
1145 OUT PPREFIX_TABLE PrefixTable
);
1151 IN PPREFIX_TABLE PrefixTable
,
1153 OUT PPREFIX_TABLE_ENTRY PrefixTableEntry
);
1159 IN PPREFIX_TABLE PrefixTable
,
1160 IN PPREFIX_TABLE_ENTRY PrefixTableEntry
);
1166 IN PPREFIX_TABLE PrefixTable
,
1167 IN PSTRING FullName
);
1172 RtlInitializeUnicodePrefix(
1173 OUT PUNICODE_PREFIX_TABLE PrefixTable
);
1178 RtlInsertUnicodePrefix(
1179 IN PUNICODE_PREFIX_TABLE PrefixTable
,
1180 IN PUNICODE_STRING Prefix
,
1181 OUT PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
);
1186 RtlRemoveUnicodePrefix(
1187 IN PUNICODE_PREFIX_TABLE PrefixTable
,
1188 IN PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
);
1191 PUNICODE_PREFIX_TABLE_ENTRY
1193 RtlFindUnicodePrefix(
1194 IN PUNICODE_PREFIX_TABLE PrefixTable
,
1195 IN PUNICODE_STRING FullName
,
1196 IN ULONG CaseInsensitiveIndex
);
1199 PUNICODE_PREFIX_TABLE_ENTRY
1201 RtlNextUnicodePrefix(
1202 IN PUNICODE_PREFIX_TABLE PrefixTable
,
1203 IN BOOLEAN Restart
);
1208 RtlCompareMemoryUlong(
1216 RtlTimeToSecondsSince1980(
1217 IN PLARGE_INTEGER Time
,
1218 OUT PULONG ElapsedSeconds
);
1223 RtlSecondsSince1980ToTime(
1224 IN ULONG ElapsedSeconds
,
1225 OUT PLARGE_INTEGER Time
);
1230 RtlTimeToSecondsSince1970(
1231 IN PLARGE_INTEGER Time
,
1232 OUT PULONG ElapsedSeconds
);
1237 RtlSecondsSince1970ToTime(
1238 IN ULONG ElapsedSeconds
,
1239 OUT PLARGE_INTEGER Time
);
1264 RtlLengthRequiredSid(
1265 IN ULONG SubAuthorityCount
);
1276 RtlAllocateAndInitializeSid(
1277 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1278 IN UCHAR SubAuthorityCount
,
1279 IN ULONG SubAuthority0
,
1280 IN ULONG SubAuthority1
,
1281 IN ULONG SubAuthority2
,
1282 IN ULONG SubAuthority3
,
1283 IN ULONG SubAuthority4
,
1284 IN ULONG SubAuthority5
,
1285 IN ULONG SubAuthority6
,
1286 IN ULONG SubAuthority7
,
1294 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1295 IN UCHAR SubAuthorityCount
);
1302 IN ULONG SubAuthority
);
1315 IN PSID Destination
,
1321 RtlConvertSidToUnicodeString(
1322 IN OUT PUNICODE_STRING UnicodeString
,
1324 IN BOOLEAN AllocateDestinationString
);
1330 OUT PLUID DestinationLuid
,
1331 IN PLUID SourceLuid
);
1339 IN ULONG AclRevision
);
1346 IN ULONG AceRevision
,
1347 IN ULONG StartingAceIndex
,
1349 IN ULONG AceListLength
);
1369 RtlAddAccessAllowedAce(
1371 IN ULONG AceRevision
,
1372 IN ACCESS_MASK AccessMask
,
1378 RtlAddAccessAllowedAceEx(
1380 IN ULONG AceRevision
,
1382 IN ACCESS_MASK AccessMask
,
1388 RtlCreateSecurityDescriptorRelative(
1389 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor
,
1395 RtlGetDaclSecurityDescriptor(
1396 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1397 OUT PBOOLEAN DaclPresent
,
1399 OUT PBOOLEAN DaclDefaulted
);
1404 RtlSetOwnerSecurityDescriptor(
1405 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1406 IN PSID Owner OPTIONAL
,
1407 IN BOOLEAN OwnerDefaulted
);
1412 RtlGetOwnerSecurityDescriptor(
1413 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1415 OUT PBOOLEAN OwnerDefaulted
);
1420 RtlNtStatusToDosError(
1421 IN NTSTATUS Status
);
1426 RtlCustomCPToUnicodeN(
1427 IN PCPTABLEINFO CustomCP
,
1428 OUT PWCH UnicodeString
,
1429 IN ULONG MaxBytesInUnicodeString
,
1430 OUT PULONG BytesInUnicodeString OPTIONAL
,
1431 IN PCH CustomCPString
,
1432 IN ULONG BytesInCustomCPString
);
1437 RtlUnicodeToCustomCPN(
1438 IN PCPTABLEINFO CustomCP
,
1439 OUT PCH CustomCPString
,
1440 IN ULONG MaxBytesInCustomCPString
,
1441 OUT PULONG BytesInCustomCPString OPTIONAL
,
1442 IN PWCH UnicodeString
,
1443 IN ULONG BytesInUnicodeString
);
1448 RtlUpcaseUnicodeToCustomCPN(
1449 IN PCPTABLEINFO CustomCP
,
1450 OUT PCH CustomCPString
,
1451 IN ULONG MaxBytesInCustomCPString
,
1452 OUT PULONG BytesInCustomCPString OPTIONAL
,
1453 IN PWCH UnicodeString
,
1454 IN ULONG BytesInUnicodeString
);
1459 RtlInitCodePageTable(
1460 IN PUSHORT TableBase
,
1461 IN OUT PCPTABLEINFO CodePageTable
);
1464 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
1467 #if (NTDDI_VERSION >= NTDDI_WINXP)
1476 IN PVOID HeapBase OPTIONAL
,
1477 IN SIZE_T ReserveSize OPTIONAL
,
1478 IN SIZE_T CommitSize OPTIONAL
,
1479 IN PVOID Lock OPTIONAL
,
1480 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
);
1486 IN PVOID HeapHandle
);
1491 RtlCaptureStackBackTrace(
1492 IN ULONG FramesToSkip
,
1493 IN ULONG FramesToCapture
,
1494 OUT PVOID
*BackTrace
,
1495 OUT PULONG BackTraceHash OPTIONAL
);
1501 IN OUT PULONG Seed
);
1506 RtlInitUnicodeStringEx(
1507 OUT PUNICODE_STRING DestinationString
,
1508 IN PCWSTR SourceString OPTIONAL
);
1513 RtlValidateUnicodeString(
1515 IN PCUNICODE_STRING String
);
1520 RtlDuplicateUnicodeString(
1522 IN PCUNICODE_STRING SourceString
,
1523 OUT PUNICODE_STRING DestinationString
);
1528 RtlGetCompressionWorkSpaceSize(
1529 IN USHORT CompressionFormatAndEngine
,
1530 OUT PULONG CompressBufferWorkSpaceSize
,
1531 OUT PULONG CompressFragmentWorkSpaceSize
);
1537 IN USHORT CompressionFormatAndEngine
,
1538 IN PUCHAR UncompressedBuffer
,
1539 IN ULONG UncompressedBufferSize
,
1540 OUT PUCHAR CompressedBuffer
,
1541 IN ULONG CompressedBufferSize
,
1542 IN ULONG UncompressedChunkSize
,
1543 OUT PULONG FinalCompressedSize
,
1544 IN PVOID WorkSpace
);
1549 RtlDecompressBuffer(
1550 IN USHORT CompressionFormat
,
1551 OUT PUCHAR UncompressedBuffer
,
1552 IN ULONG UncompressedBufferSize
,
1553 IN PUCHAR CompressedBuffer
,
1554 IN ULONG CompressedBufferSize
,
1555 OUT PULONG FinalUncompressedSize
);
1560 RtlDecompressFragment(
1561 IN USHORT CompressionFormat
,
1562 OUT PUCHAR UncompressedFragment
,
1563 IN ULONG UncompressedFragmentSize
,
1564 IN PUCHAR CompressedBuffer
,
1565 IN ULONG CompressedBufferSize
,
1566 IN ULONG FragmentOffset
,
1567 OUT PULONG FinalUncompressedSize
,
1568 IN PVOID WorkSpace
);
1574 IN USHORT CompressionFormat
,
1575 IN OUT PUCHAR
*CompressedBuffer
,
1576 IN PUCHAR EndOfCompressedBufferPlus1
,
1577 OUT PUCHAR
*ChunkBuffer
,
1578 OUT PULONG ChunkSize
);
1584 IN USHORT CompressionFormat
,
1585 IN OUT PUCHAR
*CompressedBuffer
,
1586 IN PUCHAR EndOfCompressedBufferPlus1
,
1587 OUT PUCHAR
*ChunkBuffer
,
1588 IN ULONG ChunkSize
);
1593 RtlDecompressChunks(
1594 OUT PUCHAR UncompressedBuffer
,
1595 IN ULONG UncompressedBufferSize
,
1596 IN PUCHAR CompressedBuffer
,
1597 IN ULONG CompressedBufferSize
,
1598 IN PUCHAR CompressedTail
,
1599 IN ULONG CompressedTailSize
,
1600 IN PCOMPRESSED_DATA_INFO CompressedDataInfo
);
1606 IN PUCHAR UncompressedBuffer
,
1607 IN ULONG UncompressedBufferSize
,
1608 OUT PUCHAR CompressedBuffer
,
1609 IN ULONG CompressedBufferSize
,
1610 IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo
,
1611 IN ULONG CompressedDataInfoLength
,
1612 IN PVOID WorkSpace
);
1615 PSID_IDENTIFIER_AUTHORITY
1617 RtlIdentifierAuthoritySid(
1623 RtlSubAuthorityCountSid(
1629 RtlNtStatusToDosErrorNoTeb(
1630 IN NTSTATUS Status
);
1635 RtlCreateSystemVolumeInformationFolder(
1636 IN PCUNICODE_STRING VolumeRootPath
);
1638 #if defined(_M_AMD64)
1642 RtlFillMemoryUlong (
1643 OUT PVOID Destination
,
1647 PULONG Address
= (PULONG
)Destination
;
1648 if ((Length
/= 4) != 0) {
1649 if (((ULONG64
)Address
& 4) != 0) {
1651 if ((Length
-= 1) == 0) {
1656 __stosq((PULONG64
)(Address
), Pattern
| ((ULONG64
)Pattern
<< 32), Length
/ 2);
1657 if ((Length
& 1) != 0) Address
[Length
- 1] = Pattern
;
1662 #define RtlFillMemoryUlonglong(Destination, Length, Pattern) \
1663 __stosq((PULONG64)(Destination), Pattern, (Length) / 8)
1671 OUT PVOID Destination
,
1678 RtlFillMemoryUlonglong(
1679 OUT PVOID Destination
,
1681 IN ULONGLONG Pattern
);
1683 #endif /* defined(_M_AMD64) */
1685 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
1687 #if (NTDDI_VERSION >= NTDDI_WS03)
1691 RtlInitAnsiStringEx(
1692 OUT PANSI_STRING DestinationString
,
1693 IN PCSZ SourceString OPTIONAL
);
1696 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
1701 RtlGetSaclSecurityDescriptor(
1702 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1703 OUT PBOOLEAN SaclPresent
,
1705 OUT PBOOLEAN SaclDefaulted
);
1710 RtlSetGroupSecurityDescriptor(
1711 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1712 IN PSID Group OPTIONAL
,
1713 IN BOOLEAN GroupDefaulted OPTIONAL
);
1718 RtlGetGroupSecurityDescriptor(
1719 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1721 OUT PBOOLEAN GroupDefaulted
);
1726 RtlAbsoluteToSelfRelativeSD(
1727 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor
,
1728 OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor OPTIONAL
,
1729 IN OUT PULONG BufferLength
);
1734 RtlSelfRelativeToAbsoluteSD(
1735 IN PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor
,
1736 OUT PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor OPTIONAL
,
1737 IN OUT PULONG AbsoluteSecurityDescriptorSize
,
1738 OUT PACL Dacl OPTIONAL
,
1739 IN OUT PULONG DaclSize
,
1740 OUT PACL Sacl OPTIONAL
,
1741 IN OUT PULONG SaclSize
,
1742 OUT PSID Owner OPTIONAL
,
1743 IN OUT PULONG OwnerSize
,
1744 OUT PSID PrimaryGroup OPTIONAL
,
1745 IN OUT PULONG PrimaryGroupSize
);
1747 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
1749 #if (NTDDI_VERSION >= NTDDI_VISTA)
1756 IN PCWSTR SourceString
,
1757 IN LONG SourceStringLength
,
1758 OUT PWSTR DestinationString
,
1759 IN OUT PLONG DestinationStringLength
);
1764 RtlIsNormalizedString(
1766 IN PCWSTR SourceString
,
1767 IN LONG SourceStringLength
,
1768 OUT PBOOLEAN Normalized
);
1775 IN PCWSTR SourceString
,
1776 IN LONG SourceStringLength
,
1777 OUT PWSTR DestinationString
,
1778 IN OUT PLONG DestinationStringLength
);
1785 IN PCWSTR SourceString
,
1786 IN LONG SourceStringLength
,
1787 OUT PWSTR DestinationString
,
1788 IN OUT PLONG DestinationStringLength
);
1793 RtlIdnToNameprepUnicode(
1795 IN PCWSTR SourceString
,
1796 IN LONG SourceStringLength
,
1797 OUT PWSTR DestinationString
,
1798 IN OUT PLONG DestinationStringLength
);
1803 RtlCreateServiceSid(
1804 IN PUNICODE_STRING ServiceName
,
1805 OUT PSID ServiceSid
,
1806 IN OUT PULONG ServiceSidLength
);
1811 RtlCompareAltitudes(
1812 IN PCUNICODE_STRING Altitude1
,
1813 IN PCUNICODE_STRING Altitude2
);
1816 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1818 #if (NTDDI_VERSION >= NTDDI_WIN7)
1824 OUT PCHAR UTF8StringDestination
,
1825 IN ULONG UTF8StringMaxByteCount
,
1826 OUT PULONG UTF8StringActualByteCount
,
1827 IN PCWCH UnicodeStringSource
,
1828 IN ULONG UnicodeStringByteCount
);
1834 OUT PWSTR UnicodeStringDestination
,
1835 IN ULONG UnicodeStringMaxByteCount
,
1836 OUT PULONG UnicodeStringActualByteCount
,
1837 IN PCCH UTF8StringSource
,
1838 IN ULONG UTF8StringByteCount
);
1844 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1847 OUT ULONG
*NumChanges
);
1852 RtlCreateVirtualAccountSid(
1853 IN PCUNICODE_STRING Name
,
1854 IN ULONG BaseSubAuthority
,
1856 IN OUT PULONG SidLength
);
1858 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1861 #if defined(_AMD64_) || defined(_IA64_)
1865 #endif /* defined(_AMD64_) || defined(_IA64_) */
1869 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
1870 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
1872 #define RtlUnicodeStringToOemSize(STRING) (NLS_MB_OEM_CODE_PAGE_TAG ? \
1873 RtlxUnicodeStringToOemSize(STRING) : \
1874 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
1877 #define RtlOemStringToUnicodeSize(STRING) ( \
1878 NLS_MB_OEM_CODE_PAGE_TAG ? \
1879 RtlxOemStringToUnicodeSize(STRING) : \
1880 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
1883 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
1884 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
1887 #define RtlOffsetToPointer(B,O) ((PCHAR)(((PCHAR)(B)) + ((ULONG_PTR)(O))))
1888 #define RtlPointerToOffset(B,P) ((ULONG)(((PCHAR)(P)) - ((PCHAR)(B))))
1890 typedef enum _OBJECT_INFORMATION_CLASS
{
1891 ObjectBasicInformation
= 0,
1892 ObjectNameInformation
= 1, /* FIXME, not in WDK */
1893 ObjectTypeInformation
= 2,
1894 ObjectTypesInformation
= 3, /* FIXME, not in WDK */
1895 ObjectHandleFlagInformation
= 4, /* FIXME, not in WDK */
1896 ObjectSessionInformation
= 5, /* FIXME, not in WDK */
1897 MaxObjectInfoClass
/* FIXME, not in WDK */
1898 } OBJECT_INFORMATION_CLASS
;
1904 IN HANDLE Handle OPTIONAL
,
1905 IN OBJECT_INFORMATION_CLASS ObjectInformationClass
,
1906 OUT PVOID ObjectInformation OPTIONAL
,
1907 IN ULONG ObjectInformationLength
,
1908 OUT PULONG ReturnLength OPTIONAL
);
1910 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1916 IN HANDLE ThreadHandle
,
1917 IN ACCESS_MASK DesiredAccess
,
1918 IN BOOLEAN OpenAsSelf
,
1919 OUT PHANDLE TokenHandle
);
1925 IN HANDLE ProcessHandle
,
1926 IN ACCESS_MASK DesiredAccess
,
1927 OUT PHANDLE TokenHandle
);
1932 NtQueryInformationToken(
1933 IN HANDLE TokenHandle
,
1934 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
1935 OUT PVOID TokenInformation OPTIONAL
,
1936 IN ULONG TokenInformationLength
,
1937 OUT PULONG ReturnLength
);
1942 NtAdjustPrivilegesToken(
1943 IN HANDLE TokenHandle
,
1944 IN BOOLEAN DisableAllPrivileges
,
1945 IN PTOKEN_PRIVILEGES NewState OPTIONAL
,
1946 IN ULONG BufferLength
,
1947 OUT PTOKEN_PRIVILEGES PreviousState
,
1948 OUT PULONG ReturnLength OPTIONAL
);
1954 OUT PHANDLE FileHandle
,
1955 IN ACCESS_MASK DesiredAccess
,
1956 IN POBJECT_ATTRIBUTES ObjectAttributes
,
1957 OUT PIO_STATUS_BLOCK IoStatusBlock
,
1958 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
1959 IN ULONG FileAttributes
,
1960 IN ULONG ShareAccess
,
1961 IN ULONG CreateDisposition
,
1962 IN ULONG CreateOptions
,
1969 NtDeviceIoControlFile(
1970 IN HANDLE FileHandle
,
1971 IN HANDLE Event OPTIONAL
,
1972 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
1973 IN PVOID ApcContext OPTIONAL
,
1974 OUT PIO_STATUS_BLOCK IoStatusBlock
,
1975 IN ULONG IoControlCode
,
1976 IN PVOID InputBuffer OPTIONAL
,
1977 IN ULONG InputBufferLength
,
1978 OUT PVOID OutputBuffer OPTIONAL
,
1979 IN ULONG OutputBufferLength
);
1985 IN HANDLE FileHandle
,
1986 IN HANDLE Event OPTIONAL
,
1987 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
1988 IN PVOID ApcContext OPTIONAL
,
1989 OUT PIO_STATUS_BLOCK IoStatusBlock
,
1990 IN ULONG FsControlCode
,
1991 IN PVOID InputBuffer OPTIONAL
,
1992 IN ULONG InputBufferLength
,
1993 OUT PVOID OutputBuffer OPTIONAL
,
1994 IN ULONG OutputBufferLength
);
2000 IN HANDLE FileHandle
,
2001 IN HANDLE Event OPTIONAL
,
2002 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
2003 IN PVOID ApcContext OPTIONAL
,
2004 OUT PIO_STATUS_BLOCK IoStatusBlock
,
2005 IN PLARGE_INTEGER ByteOffset
,
2006 IN PLARGE_INTEGER Length
,
2008 IN BOOLEAN FailImmediately
,
2009 IN BOOLEAN ExclusiveLock
);
2015 OUT PHANDLE FileHandle
,
2016 IN ACCESS_MASK DesiredAccess
,
2017 IN POBJECT_ATTRIBUTES ObjectAttributes
,
2018 OUT PIO_STATUS_BLOCK IoStatusBlock
,
2019 IN ULONG ShareAccess
,
2020 IN ULONG OpenOptions
);
2025 NtQueryDirectoryFile(
2026 IN HANDLE FileHandle
,
2027 IN HANDLE Event OPTIONAL
,
2028 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
2029 IN PVOID ApcContext OPTIONAL
,
2030 OUT PIO_STATUS_BLOCK IoStatusBlock
,
2031 OUT PVOID FileInformation
,
2033 IN FILE_INFORMATION_CLASS FileInformationClass
,
2034 IN BOOLEAN ReturnSingleEntry
,
2035 IN PUNICODE_STRING FileName OPTIONAL
,
2036 IN BOOLEAN RestartScan
);
2041 NtQueryInformationFile(
2042 IN HANDLE FileHandle
,
2043 OUT PIO_STATUS_BLOCK IoStatusBlock
,
2044 OUT PVOID FileInformation
,
2046 IN FILE_INFORMATION_CLASS FileInformationClass
);
2051 NtQueryQuotaInformationFile(
2052 IN HANDLE FileHandle
,
2053 OUT PIO_STATUS_BLOCK IoStatusBlock
,
2056 IN BOOLEAN ReturnSingleEntry
,
2058 IN ULONG SidListLength
,
2059 IN PSID StartSid OPTIONAL
,
2060 IN BOOLEAN RestartScan
);
2065 NtQueryVolumeInformationFile(
2066 IN HANDLE FileHandle
,
2067 OUT PIO_STATUS_BLOCK IoStatusBlock
,
2068 OUT PVOID FsInformation
,
2070 IN FS_INFORMATION_CLASS FsInformationClass
);
2076 IN HANDLE FileHandle
,
2077 IN HANDLE Event OPTIONAL
,
2078 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
2079 IN PVOID ApcContext OPTIONAL
,
2080 OUT PIO_STATUS_BLOCK IoStatusBlock
,
2083 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
2084 IN PULONG Key OPTIONAL
);
2089 NtSetInformationFile(
2090 IN HANDLE FileHandle
,
2091 OUT PIO_STATUS_BLOCK IoStatusBlock
,
2092 IN PVOID FileInformation
,
2094 IN FILE_INFORMATION_CLASS FileInformationClass
);
2099 NtSetQuotaInformationFile(
2100 IN HANDLE FileHandle
,
2101 OUT PIO_STATUS_BLOCK IoStatusBlock
,
2108 NtSetVolumeInformationFile(
2109 IN HANDLE FileHandle
,
2110 OUT PIO_STATUS_BLOCK IoStatusBlock
,
2111 IN PVOID FsInformation
,
2113 IN FS_INFORMATION_CLASS FsInformationClass
);
2119 IN HANDLE FileHandle
,
2120 IN HANDLE Event OPTIONAL
,
2121 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
2122 IN PVOID ApcContext OPTIONAL
,
2123 OUT PIO_STATUS_BLOCK IoStatusBlock
,
2126 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
2127 IN PULONG Key OPTIONAL
);
2133 IN HANDLE FileHandle
,
2134 OUT PIO_STATUS_BLOCK IoStatusBlock
,
2135 IN PLARGE_INTEGER ByteOffset
,
2136 IN PLARGE_INTEGER Length
,
2142 NtSetSecurityObject(
2144 IN SECURITY_INFORMATION SecurityInformation
,
2145 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
2150 NtQuerySecurityObject(
2152 IN SECURITY_INFORMATION SecurityInformation
,
2153 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
2155 OUT PULONG LengthNeeded
);
2166 NtAllocateVirtualMemory(
2167 IN HANDLE ProcessHandle
,
2168 IN OUT PVOID
*BaseAddress
,
2169 IN ULONG_PTR ZeroBits
,
2170 IN OUT PSIZE_T RegionSize
,
2171 IN ULONG AllocationType
,
2177 NtFreeVirtualMemory(
2178 IN HANDLE ProcessHandle
,
2179 IN OUT PVOID
*BaseAddress
,
2180 IN OUT PSIZE_T RegionSize
,
2185 #if (NTDDI_VERSION >= NTDDI_WINXP)
2190 NtOpenThreadTokenEx(
2191 IN HANDLE ThreadHandle
,
2192 IN ACCESS_MASK DesiredAccess
,
2193 IN BOOLEAN OpenAsSelf
,
2194 IN ULONG HandleAttributes
,
2195 OUT PHANDLE TokenHandle
);
2200 NtOpenProcessTokenEx(
2201 IN HANDLE ProcessHandle
,
2202 IN ACCESS_MASK DesiredAccess
,
2203 IN ULONG HandleAttributes
,
2204 OUT PHANDLE TokenHandle
);
2209 NtOpenJobObjectToken(
2210 IN HANDLE JobHandle
,
2211 IN ACCESS_MASK DesiredAccess
,
2212 OUT PHANDLE TokenHandle
);
2218 IN HANDLE ExistingTokenHandle
,
2219 IN ACCESS_MASK DesiredAccess
,
2220 IN POBJECT_ATTRIBUTES ObjectAttributes
,
2221 IN BOOLEAN EffectiveOnly
,
2222 IN TOKEN_TYPE TokenType
,
2223 OUT PHANDLE NewTokenHandle
);
2229 IN HANDLE ExistingTokenHandle
,
2231 IN PTOKEN_GROUPS SidsToDisable OPTIONAL
,
2232 IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL
,
2233 IN PTOKEN_GROUPS RestrictedSids OPTIONAL
,
2234 OUT PHANDLE NewTokenHandle
);
2239 NtImpersonateAnonymousToken(
2240 IN HANDLE ThreadHandle
);
2245 NtSetInformationToken(
2246 IN HANDLE TokenHandle
,
2247 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
2248 IN PVOID TokenInformation
,
2249 IN ULONG TokenInformationLength
);
2254 NtAdjustGroupsToken(
2255 IN HANDLE TokenHandle
,
2256 IN BOOLEAN ResetToDefault
,
2257 IN PTOKEN_GROUPS NewState OPTIONAL
,
2258 IN ULONG BufferLength OPTIONAL
,
2259 OUT PTOKEN_GROUPS PreviousState
,
2260 OUT PULONG ReturnLength
);
2266 IN HANDLE ClientToken
,
2267 IN OUT PPRIVILEGE_SET RequiredPrivileges
,
2268 OUT PBOOLEAN Result
);
2273 NtAccessCheckAndAuditAlarm(
2274 IN PUNICODE_STRING SubsystemName
,
2275 IN PVOID HandleId OPTIONAL
,
2276 IN PUNICODE_STRING ObjectTypeName
,
2277 IN PUNICODE_STRING ObjectName
,
2278 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
2279 IN ACCESS_MASK DesiredAccess
,
2280 IN PGENERIC_MAPPING GenericMapping
,
2281 IN BOOLEAN ObjectCreation
,
2282 OUT PACCESS_MASK GrantedAccess
,
2283 OUT PNTSTATUS AccessStatus
,
2284 OUT PBOOLEAN GenerateOnClose
);
2289 NtAccessCheckByTypeAndAuditAlarm(
2290 IN PUNICODE_STRING SubsystemName
,
2292 IN PUNICODE_STRING ObjectTypeName
,
2293 IN PUNICODE_STRING ObjectName
,
2294 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
2295 IN PSID PrincipalSelfSid OPTIONAL
,
2296 IN ACCESS_MASK DesiredAccess
,
2297 IN AUDIT_EVENT_TYPE AuditType
,
2299 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL
,
2300 IN ULONG ObjectTypeLength
,
2301 IN PGENERIC_MAPPING GenericMapping
,
2302 IN BOOLEAN ObjectCreation
,
2303 OUT PACCESS_MASK GrantedAccess
,
2304 OUT PNTSTATUS AccessStatus
,
2305 OUT PBOOLEAN GenerateOnClose
);
2310 NtAccessCheckByTypeResultListAndAuditAlarm(
2311 IN PUNICODE_STRING SubsystemName
,
2312 IN PVOID HandleId OPTIONAL
,
2313 IN PUNICODE_STRING ObjectTypeName
,
2314 IN PUNICODE_STRING ObjectName
,
2315 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
2316 IN PSID PrincipalSelfSid OPTIONAL
,
2317 IN ACCESS_MASK DesiredAccess
,
2318 IN AUDIT_EVENT_TYPE AuditType
,
2320 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL
,
2321 IN ULONG ObjectTypeLength
,
2322 IN PGENERIC_MAPPING GenericMapping
,
2323 IN BOOLEAN ObjectCreation
,
2324 OUT PACCESS_MASK GrantedAccess
,
2325 OUT PNTSTATUS AccessStatus
,
2326 OUT PBOOLEAN GenerateOnClose
);
2330 NtAccessCheckByTypeResultListAndAuditAlarmByHandle(
2331 IN PUNICODE_STRING SubsystemName
,
2332 IN PVOID HandleId OPTIONAL
,
2333 IN HANDLE ClientToken
,
2334 IN PUNICODE_STRING ObjectTypeName
,
2335 IN PUNICODE_STRING ObjectName
,
2336 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
2337 IN PSID PrincipalSelfSid OPTIONAL
,
2338 IN ACCESS_MASK DesiredAccess
,
2339 IN AUDIT_EVENT_TYPE AuditType
,
2341 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL
,
2342 IN ULONG ObjectTypeLength
,
2343 IN PGENERIC_MAPPING GenericMapping
,
2344 IN BOOLEAN ObjectCreation
,
2345 OUT PACCESS_MASK GrantedAccess
,
2346 OUT PNTSTATUS AccessStatus
,
2347 OUT PBOOLEAN GenerateOnClose
);
2352 NtOpenObjectAuditAlarm(
2353 IN PUNICODE_STRING SubsystemName
,
2354 IN PVOID HandleId OPTIONAL
,
2355 IN PUNICODE_STRING ObjectTypeName
,
2356 IN PUNICODE_STRING ObjectName
,
2357 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
,
2358 IN HANDLE ClientToken
,
2359 IN ACCESS_MASK DesiredAccess
,
2360 IN ACCESS_MASK GrantedAccess
,
2361 IN PPRIVILEGE_SET Privileges OPTIONAL
,
2362 IN BOOLEAN ObjectCreation
,
2363 IN BOOLEAN AccessGranted
,
2364 OUT PBOOLEAN GenerateOnClose
);
2369 NtPrivilegeObjectAuditAlarm(
2370 IN PUNICODE_STRING SubsystemName
,
2371 IN PVOID HandleId OPTIONAL
,
2372 IN HANDLE ClientToken
,
2373 IN ACCESS_MASK DesiredAccess
,
2374 IN PPRIVILEGE_SET Privileges
,
2375 IN BOOLEAN AccessGranted
);
2380 NtCloseObjectAuditAlarm(
2381 IN PUNICODE_STRING SubsystemName
,
2382 IN PVOID HandleId OPTIONAL
,
2383 IN BOOLEAN GenerateOnClose
);
2388 NtDeleteObjectAuditAlarm(
2389 IN PUNICODE_STRING SubsystemName
,
2390 IN PVOID HandleId OPTIONAL
,
2391 IN BOOLEAN GenerateOnClose
);
2396 NtPrivilegedServiceAuditAlarm(
2397 IN PUNICODE_STRING SubsystemName
,
2398 IN PUNICODE_STRING ServiceName
,
2399 IN HANDLE ClientToken
,
2400 IN PPRIVILEGE_SET Privileges
,
2401 IN BOOLEAN AccessGranted
);
2406 NtSetInformationThread(
2407 IN HANDLE ThreadHandle
,
2408 IN THREADINFOCLASS ThreadInformationClass
,
2409 IN PVOID ThreadInformation
,
2410 IN ULONG ThreadInformationLength
);
2416 OUT PHANDLE SectionHandle
,
2417 IN ACCESS_MASK DesiredAccess
,
2418 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
2419 IN PLARGE_INTEGER MaximumSize OPTIONAL
,
2420 IN ULONG SectionPageProtection
,
2421 IN ULONG AllocationAttributes
,
2422 IN HANDLE FileHandle OPTIONAL
);
2426 #define COMPRESSION_FORMAT_NONE (0x0000)
2427 #define COMPRESSION_FORMAT_DEFAULT (0x0001)
2428 #define COMPRESSION_FORMAT_LZNT1 (0x0002)
2429 #define COMPRESSION_ENGINE_STANDARD (0x0000)
2430 #define COMPRESSION_ENGINE_MAXIMUM (0x0100)
2431 #define COMPRESSION_ENGINE_HIBER (0x0200)
2433 #define MAX_UNICODE_STACK_BUFFER_LENGTH 256
2435 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
2437 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
2438 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
2440 typedef ULONG LSA_OPERATIONAL_MODE
, *PLSA_OPERATIONAL_MODE
;
2442 typedef enum _SECURITY_LOGON_TYPE
{
2443 UndefinedLogonType
= 0,
2452 #if (_WIN32_WINNT >= 0x0501)
2456 #if (_WIN32_WINNT >= 0x0502)
2457 CachedRemoteInteractive
,
2460 } SECURITY_LOGON_TYPE
, *PSECURITY_LOGON_TYPE
;
2462 #ifndef _NTLSA_AUDIT_
2463 #define _NTLSA_AUDIT_
2465 #ifndef GUID_DEFINED
2466 #include <guiddef.h>
2469 #endif /* _NTLSA_AUDIT_ */
2473 LsaRegisterLogonProcess(
2474 IN PLSA_STRING LogonProcessName
,
2475 OUT PHANDLE LsaHandle
,
2476 OUT PLSA_OPERATIONAL_MODE SecurityMode
);
2481 IN HANDLE LsaHandle
,
2482 IN PLSA_STRING OriginName
,
2483 IN SECURITY_LOGON_TYPE LogonType
,
2484 IN ULONG AuthenticationPackage
,
2485 IN PVOID AuthenticationInformation
,
2486 IN ULONG AuthenticationInformationLength
,
2487 IN PTOKEN_GROUPS LocalGroups OPTIONAL
,
2488 IN PTOKEN_SOURCE SourceContext
,
2489 OUT PVOID
*ProfileBuffer
,
2490 OUT PULONG ProfileBufferLength
,
2493 OUT PQUOTA_LIMITS Quotas
,
2494 OUT PNTSTATUS SubStatus
);
2498 LsaFreeReturnBuffer(
2505 #define MSV1_0_PACKAGE_NAME "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
2506 #define MSV1_0_PACKAGE_NAMEW L"MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
2507 #define MSV1_0_PACKAGE_NAMEW_LENGTH sizeof(MSV1_0_PACKAGE_NAMEW) - sizeof(WCHAR)
2509 #define MSV1_0_SUBAUTHENTICATION_KEY "SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1_0"
2510 #define MSV1_0_SUBAUTHENTICATION_VALUE "Auth"
2512 #define MSV1_0_CHALLENGE_LENGTH 8
2513 #define MSV1_0_USER_SESSION_KEY_LENGTH 16
2514 #define MSV1_0_LANMAN_SESSION_KEY_LENGTH 8
2516 #define MSV1_0_CLEARTEXT_PASSWORD_ALLOWED 0x02
2517 #define MSV1_0_UPDATE_LOGON_STATISTICS 0x04
2518 #define MSV1_0_RETURN_USER_PARAMETERS 0x08
2519 #define MSV1_0_DONT_TRY_GUEST_ACCOUNT 0x10
2520 #define MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT 0x20
2521 #define MSV1_0_RETURN_PASSWORD_EXPIRY 0x40
2522 #define MSV1_0_USE_CLIENT_CHALLENGE 0x80
2523 #define MSV1_0_TRY_GUEST_ACCOUNT_ONLY 0x100
2524 #define MSV1_0_RETURN_PROFILE_PATH 0x200
2525 #define MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY 0x400
2526 #define MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT 0x800
2528 #define MSV1_0_DISABLE_PERSONAL_FALLBACK 0x00001000
2529 #define MSV1_0_ALLOW_FORCE_GUEST 0x00002000
2531 #if (_WIN32_WINNT >= 0x0502)
2532 #define MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED 0x00004000
2533 #define MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY 0x00008000
2536 #define MSV1_0_SUBAUTHENTICATION_DLL_EX 0x00100000
2537 #define MSV1_0_ALLOW_MSVCHAPV2 0x00010000
2539 #if (_WIN32_WINNT >= 0x0600)
2540 #define MSV1_0_S4U2SELF 0x00020000
2541 #define MSV1_0_CHECK_LOGONHOURS_FOR_S4U 0x00040000
2544 #define MSV1_0_SUBAUTHENTICATION_DLL 0xFF000000
2545 #define MSV1_0_SUBAUTHENTICATION_DLL_SHIFT 24
2546 #define MSV1_0_MNS_LOGON 0x01000000
2548 #define MSV1_0_SUBAUTHENTICATION_DLL_RAS 2
2549 #define MSV1_0_SUBAUTHENTICATION_DLL_IIS 132
2551 #define LOGON_GUEST 0x01
2552 #define LOGON_NOENCRYPTION 0x02
2553 #define LOGON_CACHED_ACCOUNT 0x04
2554 #define LOGON_USED_LM_PASSWORD 0x08
2555 #define LOGON_EXTRA_SIDS 0x20
2556 #define LOGON_SUBAUTH_SESSION_KEY 0x40
2557 #define LOGON_SERVER_TRUST_ACCOUNT 0x80
2558 #define LOGON_NTLMV2_ENABLED 0x100
2559 #define LOGON_RESOURCE_GROUPS 0x200
2560 #define LOGON_PROFILE_PATH_RETURNED 0x400
2561 #define LOGON_NT_V2 0x800
2562 #define LOGON_LM_V2 0x1000
2563 #define LOGON_NTLM_V2 0x2000
2565 #if (_WIN32_WINNT >= 0x0600)
2567 #define LOGON_OPTIMIZED 0x4000
2568 #define LOGON_WINLOGON 0x8000
2569 #define LOGON_PKINIT 0x10000
2570 #define LOGON_NO_OPTIMIZED 0x20000
2574 #define MSV1_0_SUBAUTHENTICATION_FLAGS 0xFF000000
2576 #define LOGON_GRACE_LOGON 0x01000000
2578 #define MSV1_0_OWF_PASSWORD_LENGTH 16
2579 #define MSV1_0_CRED_LM_PRESENT 0x1
2580 #define MSV1_0_CRED_NT_PRESENT 0x2
2581 #define MSV1_0_CRED_VERSION 0
2583 #define MSV1_0_NTLM3_RESPONSE_LENGTH 16
2584 #define MSV1_0_NTLM3_OWF_LENGTH 16
2586 #if (_WIN32_WINNT == 0x0500)
2587 #define MSV1_0_MAX_NTLM3_LIFE 1800
2589 #define MSV1_0_MAX_NTLM3_LIFE 129600
2591 #define MSV1_0_MAX_AVL_SIZE 64000
2593 #if (_WIN32_WINNT >= 0x0501)
2595 #define MSV1_0_AV_FLAG_FORCE_GUEST 0x00000001
2597 #if (_WIN32_WINNT >= 0x0600)
2598 #define MSV1_0_AV_FLAG_MIC_HANDSHAKE_MESSAGES 0x00000002
2603 #define MSV1_0_NTLM3_INPUT_LENGTH (sizeof(MSV1_0_NTLM3_RESPONSE) - MSV1_0_NTLM3_RESPONSE_LENGTH)
2605 #if(_WIN32_WINNT >= 0x0502)
2606 #define MSV1_0_NTLM3_MIN_NT_RESPONSE_LENGTH RTL_SIZEOF_THROUGH_FIELD(MSV1_0_NTLM3_RESPONSE, AvPairsOff)
2609 #define USE_PRIMARY_PASSWORD 0x01
2610 #define RETURN_PRIMARY_USERNAME 0x02
2611 #define RETURN_PRIMARY_LOGON_DOMAINNAME 0x04
2612 #define RETURN_NON_NT_USER_SESSION_KEY 0x08
2613 #define GENERATE_CLIENT_CHALLENGE 0x10
2614 #define GCR_NTLM3_PARMS 0x20
2615 #define GCR_TARGET_INFO 0x40
2616 #define RETURN_RESERVED_PARAMETER 0x80
2617 #define GCR_ALLOW_NTLM 0x100
2618 #define GCR_USE_OEM_SET 0x200
2619 #define GCR_MACHINE_CREDENTIAL 0x400
2620 #define GCR_USE_OWF_PASSWORD 0x800
2621 #define GCR_ALLOW_LM 0x1000
2622 #define GCR_ALLOW_NO_TARGET 0x2000
2624 typedef enum _MSV1_0_LOGON_SUBMIT_TYPE
{
2625 MsV1_0InteractiveLogon
= 2,
2629 MsV1_0WorkstationUnlockLogon
= 7,
2630 MsV1_0S4ULogon
= 12,
2631 MsV1_0VirtualLogon
= 82
2632 } MSV1_0_LOGON_SUBMIT_TYPE
, *PMSV1_0_LOGON_SUBMIT_TYPE
;
2634 typedef enum _MSV1_0_PROFILE_BUFFER_TYPE
{
2635 MsV1_0InteractiveProfile
= 2,
2636 MsV1_0Lm20LogonProfile
,
2637 MsV1_0SmartCardProfile
2638 } MSV1_0_PROFILE_BUFFER_TYPE
, *PMSV1_0_PROFILE_BUFFER_TYPE
;
2640 typedef struct _MSV1_0_INTERACTIVE_LOGON
{
2641 MSV1_0_LOGON_SUBMIT_TYPE MessageType
;
2642 UNICODE_STRING LogonDomainName
;
2643 UNICODE_STRING UserName
;
2644 UNICODE_STRING Password
;
2645 } MSV1_0_INTERACTIVE_LOGON
, *PMSV1_0_INTERACTIVE_LOGON
;
2647 typedef struct _MSV1_0_INTERACTIVE_PROFILE
{
2648 MSV1_0_PROFILE_BUFFER_TYPE MessageType
;
2650 USHORT BadPasswordCount
;
2651 LARGE_INTEGER LogonTime
;
2652 LARGE_INTEGER LogoffTime
;
2653 LARGE_INTEGER KickOffTime
;
2654 LARGE_INTEGER PasswordLastSet
;
2655 LARGE_INTEGER PasswordCanChange
;
2656 LARGE_INTEGER PasswordMustChange
;
2657 UNICODE_STRING LogonScript
;
2658 UNICODE_STRING HomeDirectory
;
2659 UNICODE_STRING FullName
;
2660 UNICODE_STRING ProfilePath
;
2661 UNICODE_STRING HomeDirectoryDrive
;
2662 UNICODE_STRING LogonServer
;
2664 } MSV1_0_INTERACTIVE_PROFILE
, *PMSV1_0_INTERACTIVE_PROFILE
;
2666 typedef struct _MSV1_0_LM20_LOGON
{
2667 MSV1_0_LOGON_SUBMIT_TYPE MessageType
;
2668 UNICODE_STRING LogonDomainName
;
2669 UNICODE_STRING UserName
;
2670 UNICODE_STRING Workstation
;
2671 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
2672 STRING CaseSensitiveChallengeResponse
;
2673 STRING CaseInsensitiveChallengeResponse
;
2674 ULONG ParameterControl
;
2675 } MSV1_0_LM20_LOGON
, * PMSV1_0_LM20_LOGON
;
2677 typedef struct _MSV1_0_SUBAUTH_LOGON
{
2678 MSV1_0_LOGON_SUBMIT_TYPE MessageType
;
2679 UNICODE_STRING LogonDomainName
;
2680 UNICODE_STRING UserName
;
2681 UNICODE_STRING Workstation
;
2682 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
2683 STRING AuthenticationInfo1
;
2684 STRING AuthenticationInfo2
;
2685 ULONG ParameterControl
;
2686 ULONG SubAuthPackageId
;
2687 } MSV1_0_SUBAUTH_LOGON
, * PMSV1_0_SUBAUTH_LOGON
;
2689 #if (_WIN32_WINNT >= 0x0600)
2691 #define MSV1_0_S4U_LOGON_FLAG_CHECK_LOGONHOURS 0x2
2693 typedef struct _MSV1_0_S4U_LOGON
{
2694 MSV1_0_LOGON_SUBMIT_TYPE MessageType
;
2696 UNICODE_STRING UserPrincipalName
;
2697 UNICODE_STRING DomainName
;
2698 } MSV1_0_S4U_LOGON
, *PMSV1_0_S4U_LOGON
;
2702 typedef struct _MSV1_0_LM20_LOGON_PROFILE
{
2703 MSV1_0_PROFILE_BUFFER_TYPE MessageType
;
2704 LARGE_INTEGER KickOffTime
;
2705 LARGE_INTEGER LogoffTime
;
2707 UCHAR UserSessionKey
[MSV1_0_USER_SESSION_KEY_LENGTH
];
2708 UNICODE_STRING LogonDomainName
;
2709 UCHAR LanmanSessionKey
[MSV1_0_LANMAN_SESSION_KEY_LENGTH
];
2710 UNICODE_STRING LogonServer
;
2711 UNICODE_STRING UserParameters
;
2712 } MSV1_0_LM20_LOGON_PROFILE
, * PMSV1_0_LM20_LOGON_PROFILE
;
2714 typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL
{
2717 UCHAR LmPassword
[MSV1_0_OWF_PASSWORD_LENGTH
];
2718 UCHAR NtPassword
[MSV1_0_OWF_PASSWORD_LENGTH
];
2719 } MSV1_0_SUPPLEMENTAL_CREDENTIAL
, *PMSV1_0_SUPPLEMENTAL_CREDENTIAL
;
2721 typedef struct _MSV1_0_NTLM3_RESPONSE
{
2722 UCHAR Response
[MSV1_0_NTLM3_RESPONSE_LENGTH
];
2727 ULONGLONG TimeStamp
;
2728 UCHAR ChallengeFromClient
[MSV1_0_CHALLENGE_LENGTH
];
2731 } MSV1_0_NTLM3_RESPONSE
, *PMSV1_0_NTLM3_RESPONSE
;
2733 typedef enum _MSV1_0_AVID
{
2735 MsvAvNbComputerName
,
2737 MsvAvDnsComputerName
,
2739 #if (_WIN32_WINNT >= 0x0501)
2742 #if (_WIN32_WINNT >= 0x0600)
2746 MsvAvChannelBindings
,
2751 typedef struct _MSV1_0_AV_PAIR
{
2754 } MSV1_0_AV_PAIR
, *PMSV1_0_AV_PAIR
;
2756 typedef enum _MSV1_0_PROTOCOL_MESSAGE_TYPE
{
2757 MsV1_0Lm20ChallengeRequest
= 0,
2758 MsV1_0Lm20GetChallengeResponse
,
2759 MsV1_0EnumerateUsers
,
2762 MsV1_0ChangePassword
,
2763 MsV1_0ChangeCachedPassword
,
2764 MsV1_0GenericPassthrough
,
2767 MsV1_0DeriveCredential
,
2769 #if (_WIN32_WINNT >= 0x0501)
2770 MsV1_0SetProcessOption
,
2772 #if (_WIN32_WINNT >= 0x0600)
2773 MsV1_0ConfigLocalAliases
,
2774 MsV1_0ClearCachedCredentials
,
2776 } MSV1_0_PROTOCOL_MESSAGE_TYPE
, *PMSV1_0_PROTOCOL_MESSAGE_TYPE
;
2778 typedef struct _MSV1_0_LM20_CHALLENGE_REQUEST
{
2779 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2780 } MSV1_0_LM20_CHALLENGE_REQUEST
, *PMSV1_0_LM20_CHALLENGE_REQUEST
;
2782 typedef struct _MSV1_0_LM20_CHALLENGE_RESPONSE
{
2783 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2784 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
2785 } MSV1_0_LM20_CHALLENGE_RESPONSE
, *PMSV1_0_LM20_CHALLENGE_RESPONSE
;
2787 typedef struct _MSV1_0_GETCHALLENRESP_REQUEST_V1
{
2788 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2789 ULONG ParameterControl
;
2791 UNICODE_STRING Password
;
2792 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
2793 } MSV1_0_GETCHALLENRESP_REQUEST_V1
, *PMSV1_0_GETCHALLENRESP_REQUEST_V1
;
2795 typedef struct _MSV1_0_GETCHALLENRESP_REQUEST
{
2796 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2797 ULONG ParameterControl
;
2799 UNICODE_STRING Password
;
2800 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
2801 UNICODE_STRING UserName
;
2802 UNICODE_STRING LogonDomainName
;
2803 UNICODE_STRING ServerName
;
2804 } MSV1_0_GETCHALLENRESP_REQUEST
, *PMSV1_0_GETCHALLENRESP_REQUEST
;
2806 typedef struct _MSV1_0_GETCHALLENRESP_RESPONSE
{
2807 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2808 STRING CaseSensitiveChallengeResponse
;
2809 STRING CaseInsensitiveChallengeResponse
;
2810 UNICODE_STRING UserName
;
2811 UNICODE_STRING LogonDomainName
;
2812 UCHAR UserSessionKey
[MSV1_0_USER_SESSION_KEY_LENGTH
];
2813 UCHAR LanmanSessionKey
[MSV1_0_LANMAN_SESSION_KEY_LENGTH
];
2814 } MSV1_0_GETCHALLENRESP_RESPONSE
, *PMSV1_0_GETCHALLENRESP_RESPONSE
;
2816 typedef struct _MSV1_0_ENUMUSERS_REQUEST
{
2817 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2818 } MSV1_0_ENUMUSERS_REQUEST
, *PMSV1_0_ENUMUSERS_REQUEST
;
2820 typedef struct _MSV1_0_ENUMUSERS_RESPONSE
{
2821 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2822 ULONG NumberOfLoggedOnUsers
;
2825 } MSV1_0_ENUMUSERS_RESPONSE
, *PMSV1_0_ENUMUSERS_RESPONSE
;
2827 typedef struct _MSV1_0_GETUSERINFO_REQUEST
{
2828 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2830 } MSV1_0_GETUSERINFO_REQUEST
, *PMSV1_0_GETUSERINFO_REQUEST
;
2832 typedef struct _MSV1_0_GETUSERINFO_RESPONSE
{
2833 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2835 UNICODE_STRING UserName
;
2836 UNICODE_STRING LogonDomainName
;
2837 UNICODE_STRING LogonServer
;
2838 SECURITY_LOGON_TYPE LogonType
;
2839 } MSV1_0_GETUSERINFO_RESPONSE
, *PMSV1_0_GETUSERINFO_RESPONSE
;
2843 #define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007
2844 #define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008
2845 #define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009
2847 /* also in winnt.h */
2848 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
2849 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
2850 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
2851 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
2852 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
2853 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
2854 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
2855 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
2856 #define FILE_NOTIFY_CHANGE_EA 0x00000080
2857 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
2858 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
2859 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
2860 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
2861 #define FILE_NOTIFY_VALID_MASK 0x00000fff
2863 #define FILE_ACTION_ADDED 0x00000001
2864 #define FILE_ACTION_REMOVED 0x00000002
2865 #define FILE_ACTION_MODIFIED 0x00000003
2866 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
2867 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
2868 #define FILE_ACTION_ADDED_STREAM 0x00000006
2869 #define FILE_ACTION_REMOVED_STREAM 0x00000007
2870 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
2871 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
2872 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
2873 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
2876 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
2877 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
2879 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000
2880 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002
2882 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000
2883 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002
2884 #define FILE_PIPE_TYPE_VALID_MASK 0x00000003
2886 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
2887 #define FILE_PIPE_MESSAGE_MODE 0x00000001
2889 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
2890 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
2892 #define FILE_PIPE_INBOUND 0x00000000
2893 #define FILE_PIPE_OUTBOUND 0x00000001
2894 #define FILE_PIPE_FULL_DUPLEX 0x00000002
2896 #define FILE_PIPE_DISCONNECTED_STATE 0x00000001
2897 #define FILE_PIPE_LISTENING_STATE 0x00000002
2898 #define FILE_PIPE_CONNECTED_STATE 0x00000003
2899 #define FILE_PIPE_CLOSING_STATE 0x00000004
2901 #define FILE_PIPE_CLIENT_END 0x00000000
2902 #define FILE_PIPE_SERVER_END 0x00000001
2904 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
2905 #define FILE_CASE_PRESERVED_NAMES 0x00000002
2906 #define FILE_UNICODE_ON_DISK 0x00000004
2907 #define FILE_PERSISTENT_ACLS 0x00000008
2908 #define FILE_FILE_COMPRESSION 0x00000010
2909 #define FILE_VOLUME_QUOTAS 0x00000020
2910 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
2911 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
2912 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
2913 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
2914 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
2915 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
2916 #define FILE_NAMED_STREAMS 0x00040000
2917 #define FILE_READ_ONLY_VOLUME 0x00080000
2918 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
2919 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
2920 #define FILE_SUPPORTS_HARD_LINKS 0x00400000
2921 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
2922 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
2923 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000
2925 #define FILE_NEED_EA 0x00000080
2927 #define FILE_EA_TYPE_BINARY 0xfffe
2928 #define FILE_EA_TYPE_ASCII 0xfffd
2929 #define FILE_EA_TYPE_BITMAP 0xfffb
2930 #define FILE_EA_TYPE_METAFILE 0xfffa
2931 #define FILE_EA_TYPE_ICON 0xfff9
2932 #define FILE_EA_TYPE_EA 0xffee
2933 #define FILE_EA_TYPE_MVMT 0xffdf
2934 #define FILE_EA_TYPE_MVST 0xffde
2935 #define FILE_EA_TYPE_ASN1 0xffdd
2936 #define FILE_EA_TYPE_FAMILY_IDS 0xff01
2938 typedef struct _FILE_NOTIFY_INFORMATION
{
2939 ULONG NextEntryOffset
;
2941 ULONG FileNameLength
;
2943 } FILE_NOTIFY_INFORMATION
, *PFILE_NOTIFY_INFORMATION
;
2945 typedef struct _FILE_DIRECTORY_INFORMATION
{
2946 ULONG NextEntryOffset
;
2948 LARGE_INTEGER CreationTime
;
2949 LARGE_INTEGER LastAccessTime
;
2950 LARGE_INTEGER LastWriteTime
;
2951 LARGE_INTEGER ChangeTime
;
2952 LARGE_INTEGER EndOfFile
;
2953 LARGE_INTEGER AllocationSize
;
2954 ULONG FileAttributes
;
2955 ULONG FileNameLength
;
2957 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
2959 typedef struct _FILE_FULL_DIR_INFORMATION
{
2960 ULONG NextEntryOffset
;
2962 LARGE_INTEGER CreationTime
;
2963 LARGE_INTEGER LastAccessTime
;
2964 LARGE_INTEGER LastWriteTime
;
2965 LARGE_INTEGER ChangeTime
;
2966 LARGE_INTEGER EndOfFile
;
2967 LARGE_INTEGER AllocationSize
;
2968 ULONG FileAttributes
;
2969 ULONG FileNameLength
;
2972 } FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
2974 typedef struct _FILE_ID_FULL_DIR_INFORMATION
{
2975 ULONG NextEntryOffset
;
2977 LARGE_INTEGER CreationTime
;
2978 LARGE_INTEGER LastAccessTime
;
2979 LARGE_INTEGER LastWriteTime
;
2980 LARGE_INTEGER ChangeTime
;
2981 LARGE_INTEGER EndOfFile
;
2982 LARGE_INTEGER AllocationSize
;
2983 ULONG FileAttributes
;
2984 ULONG FileNameLength
;
2986 LARGE_INTEGER FileId
;
2988 } FILE_ID_FULL_DIR_INFORMATION
, *PFILE_ID_FULL_DIR_INFORMATION
;
2990 typedef struct _FILE_BOTH_DIR_INFORMATION
{
2991 ULONG NextEntryOffset
;
2993 LARGE_INTEGER CreationTime
;
2994 LARGE_INTEGER LastAccessTime
;
2995 LARGE_INTEGER LastWriteTime
;
2996 LARGE_INTEGER ChangeTime
;
2997 LARGE_INTEGER EndOfFile
;
2998 LARGE_INTEGER AllocationSize
;
2999 ULONG FileAttributes
;
3000 ULONG FileNameLength
;
3002 CCHAR ShortNameLength
;
3003 WCHAR ShortName
[12];
3005 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
3007 typedef struct _FILE_ID_BOTH_DIR_INFORMATION
{
3008 ULONG NextEntryOffset
;
3010 LARGE_INTEGER CreationTime
;
3011 LARGE_INTEGER LastAccessTime
;
3012 LARGE_INTEGER LastWriteTime
;
3013 LARGE_INTEGER ChangeTime
;
3014 LARGE_INTEGER EndOfFile
;
3015 LARGE_INTEGER AllocationSize
;
3016 ULONG FileAttributes
;
3017 ULONG FileNameLength
;
3019 CCHAR ShortNameLength
;
3020 WCHAR ShortName
[12];
3021 LARGE_INTEGER FileId
;
3023 } FILE_ID_BOTH_DIR_INFORMATION
, *PFILE_ID_BOTH_DIR_INFORMATION
;
3025 typedef struct _FILE_NAMES_INFORMATION
{
3026 ULONG NextEntryOffset
;
3028 ULONG FileNameLength
;
3030 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
3032 typedef struct _FILE_ID_GLOBAL_TX_DIR_INFORMATION
{
3033 ULONG NextEntryOffset
;
3035 LARGE_INTEGER CreationTime
;
3036 LARGE_INTEGER LastAccessTime
;
3037 LARGE_INTEGER LastWriteTime
;
3038 LARGE_INTEGER ChangeTime
;
3039 LARGE_INTEGER EndOfFile
;
3040 LARGE_INTEGER AllocationSize
;
3041 ULONG FileAttributes
;
3042 ULONG FileNameLength
;
3043 LARGE_INTEGER FileId
;
3044 GUID LockingTransactionId
;
3047 } FILE_ID_GLOBAL_TX_DIR_INFORMATION
, *PFILE_ID_GLOBAL_TX_DIR_INFORMATION
;
3049 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_WRITELOCKED 0x00000001
3050 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_TO_TX 0x00000002
3051 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_OUTSIDE_TX 0x00000004
3053 typedef struct _FILE_OBJECTID_INFORMATION
{
3054 LONGLONG FileReference
;
3056 _ANONYMOUS_UNION
union {
3057 __GNU_EXTENSION
struct {
3058 UCHAR BirthVolumeId
[16];
3059 UCHAR BirthObjectId
[16];
3062 UCHAR ExtendedInfo
[48];
3064 } FILE_OBJECTID_INFORMATION
, *PFILE_OBJECTID_INFORMATION
;
3066 #define ANSI_DOS_STAR ('<')
3067 #define ANSI_DOS_QM ('>')
3068 #define ANSI_DOS_DOT ('"')
3070 #define DOS_STAR (L'<')
3071 #define DOS_QM (L'>')
3072 #define DOS_DOT (L'"')
3074 typedef struct _FILE_INTERNAL_INFORMATION
{
3075 LARGE_INTEGER IndexNumber
;
3076 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
3078 typedef struct _FILE_EA_INFORMATION
{
3080 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
3082 typedef struct _FILE_ACCESS_INFORMATION
{
3083 ACCESS_MASK AccessFlags
;
3084 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
3086 typedef struct _FILE_MODE_INFORMATION
{
3088 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
3090 typedef struct _FILE_ALL_INFORMATION
{
3091 FILE_BASIC_INFORMATION BasicInformation
;
3092 FILE_STANDARD_INFORMATION StandardInformation
;
3093 FILE_INTERNAL_INFORMATION InternalInformation
;
3094 FILE_EA_INFORMATION EaInformation
;
3095 FILE_ACCESS_INFORMATION AccessInformation
;
3096 FILE_POSITION_INFORMATION PositionInformation
;
3097 FILE_MODE_INFORMATION ModeInformation
;
3098 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
3099 FILE_NAME_INFORMATION NameInformation
;
3100 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
3102 typedef struct _FILE_ALLOCATION_INFORMATION
{
3103 LARGE_INTEGER AllocationSize
;
3104 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
3106 typedef struct _FILE_COMPRESSION_INFORMATION
{
3107 LARGE_INTEGER CompressedFileSize
;
3108 USHORT CompressionFormat
;
3109 UCHAR CompressionUnitShift
;
3113 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
3115 typedef struct _FILE_LINK_INFORMATION
{
3116 BOOLEAN ReplaceIfExists
;
3117 HANDLE RootDirectory
;
3118 ULONG FileNameLength
;
3120 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
3122 typedef struct _FILE_MOVE_CLUSTER_INFORMATION
{
3124 HANDLE RootDirectory
;
3125 ULONG FileNameLength
;
3127 } FILE_MOVE_CLUSTER_INFORMATION
, *PFILE_MOVE_CLUSTER_INFORMATION
;
3129 typedef struct _FILE_RENAME_INFORMATION
{
3130 BOOLEAN ReplaceIfExists
;
3131 HANDLE RootDirectory
;
3132 ULONG FileNameLength
;
3134 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
3136 typedef struct _FILE_STREAM_INFORMATION
{
3137 ULONG NextEntryOffset
;
3138 ULONG StreamNameLength
;
3139 LARGE_INTEGER StreamSize
;
3140 LARGE_INTEGER StreamAllocationSize
;
3141 WCHAR StreamName
[1];
3142 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
3144 typedef struct _FILE_TRACKING_INFORMATION
{
3145 HANDLE DestinationFile
;
3146 ULONG ObjectInformationLength
;
3147 CHAR ObjectInformation
[1];
3148 } FILE_TRACKING_INFORMATION
, *PFILE_TRACKING_INFORMATION
;
3150 typedef struct _FILE_COMPLETION_INFORMATION
{
3153 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
3155 typedef struct _FILE_PIPE_INFORMATION
{
3157 ULONG CompletionMode
;
3158 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
3160 typedef struct _FILE_PIPE_LOCAL_INFORMATION
{
3161 ULONG NamedPipeType
;
3162 ULONG NamedPipeConfiguration
;
3163 ULONG MaximumInstances
;
3164 ULONG CurrentInstances
;
3166 ULONG ReadDataAvailable
;
3167 ULONG OutboundQuota
;
3168 ULONG WriteQuotaAvailable
;
3169 ULONG NamedPipeState
;
3171 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
3173 typedef struct _FILE_PIPE_REMOTE_INFORMATION
{
3174 LARGE_INTEGER CollectDataTime
;
3175 ULONG MaximumCollectionCount
;
3176 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
3178 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
{
3179 ULONG MaximumMessageSize
;
3180 ULONG MailslotQuota
;
3181 ULONG NextMessageSize
;
3182 ULONG MessagesAvailable
;
3183 LARGE_INTEGER ReadTimeout
;
3184 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
3186 typedef struct _FILE_MAILSLOT_SET_INFORMATION
{
3187 PLARGE_INTEGER ReadTimeout
;
3188 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
3190 typedef struct _FILE_REPARSE_POINT_INFORMATION
{
3191 LONGLONG FileReference
;
3193 } FILE_REPARSE_POINT_INFORMATION
, *PFILE_REPARSE_POINT_INFORMATION
;
3195 typedef struct _FILE_LINK_ENTRY_INFORMATION
{
3196 ULONG NextEntryOffset
;
3197 LONGLONG ParentFileId
;
3198 ULONG FileNameLength
;
3200 } FILE_LINK_ENTRY_INFORMATION
, *PFILE_LINK_ENTRY_INFORMATION
;
3202 typedef struct _FILE_LINKS_INFORMATION
{
3204 ULONG EntriesReturned
;
3205 FILE_LINK_ENTRY_INFORMATION Entry
;
3206 } FILE_LINKS_INFORMATION
, *PFILE_LINKS_INFORMATION
;
3208 typedef struct _FILE_NETWORK_PHYSICAL_NAME_INFORMATION
{
3209 ULONG FileNameLength
;
3211 } FILE_NETWORK_PHYSICAL_NAME_INFORMATION
, *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION
;
3213 typedef struct _FILE_STANDARD_LINK_INFORMATION
{
3214 ULONG NumberOfAccessibleLinks
;
3215 ULONG TotalNumberOfLinks
;
3216 BOOLEAN DeletePending
;
3218 } FILE_STANDARD_LINK_INFORMATION
, *PFILE_STANDARD_LINK_INFORMATION
;
3220 typedef struct _FILE_GET_EA_INFORMATION
{
3221 ULONG NextEntryOffset
;
3224 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
3226 #define REMOTE_PROTOCOL_FLAG_LOOPBACK 0x00000001
3227 #define REMOTE_PROTOCOL_FLAG_OFFLINE 0x00000002
3229 typedef struct _FILE_REMOTE_PROTOCOL_INFORMATION
{
3230 USHORT StructureVersion
;
3231 USHORT StructureSize
;
3233 USHORT ProtocolMajorVersion
;
3234 USHORT ProtocolMinorVersion
;
3235 USHORT ProtocolRevision
;
3243 } ProtocolSpecificReserved
;
3244 } FILE_REMOTE_PROTOCOL_INFORMATION
, *PFILE_REMOTE_PROTOCOL_INFORMATION
;
3246 typedef struct _FILE_GET_QUOTA_INFORMATION
{
3247 ULONG NextEntryOffset
;
3250 } FILE_GET_QUOTA_INFORMATION
, *PFILE_GET_QUOTA_INFORMATION
;
3252 typedef struct _FILE_QUOTA_INFORMATION
{
3253 ULONG NextEntryOffset
;
3255 LARGE_INTEGER ChangeTime
;
3256 LARGE_INTEGER QuotaUsed
;
3257 LARGE_INTEGER QuotaThreshold
;
3258 LARGE_INTEGER QuotaLimit
;
3260 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
3262 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
3263 ULONG FileSystemAttributes
;
3264 ULONG MaximumComponentNameLength
;
3265 ULONG FileSystemNameLength
;
3266 WCHAR FileSystemName
[1];
3267 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
3269 typedef struct _FILE_FS_DRIVER_PATH_INFORMATION
{
3270 BOOLEAN DriverInPath
;
3271 ULONG DriverNameLength
;
3272 WCHAR DriverName
[1];
3273 } FILE_FS_DRIVER_PATH_INFORMATION
, *PFILE_FS_DRIVER_PATH_INFORMATION
;
3275 typedef struct _FILE_FS_VOLUME_FLAGS_INFORMATION
{
3277 } FILE_FS_VOLUME_FLAGS_INFORMATION
, *PFILE_FS_VOLUME_FLAGS_INFORMATION
;
3279 #define FILE_VC_QUOTA_NONE 0x00000000
3280 #define FILE_VC_QUOTA_TRACK 0x00000001
3281 #define FILE_VC_QUOTA_ENFORCE 0x00000002
3282 #define FILE_VC_QUOTA_MASK 0x00000003
3283 #define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008
3284 #define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010
3285 #define FILE_VC_LOG_QUOTA_LIMIT 0x00000020
3286 #define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040
3287 #define FILE_VC_LOG_VOLUME_LIMIT 0x00000080
3288 #define FILE_VC_QUOTAS_INCOMPLETE 0x00000100
3289 #define FILE_VC_QUOTAS_REBUILDING 0x00000200
3290 #define FILE_VC_VALID_MASK 0x000003ff
3292 typedef struct _FILE_FS_CONTROL_INFORMATION
{
3293 LARGE_INTEGER FreeSpaceStartFiltering
;
3294 LARGE_INTEGER FreeSpaceThreshold
;
3295 LARGE_INTEGER FreeSpaceStopFiltering
;
3296 LARGE_INTEGER DefaultQuotaThreshold
;
3297 LARGE_INTEGER DefaultQuotaLimit
;
3298 ULONG FileSystemControlFlags
;
3299 } FILE_FS_CONTROL_INFORMATION
, *PFILE_FS_CONTROL_INFORMATION
;
3301 #ifndef _FILESYSTEMFSCTL_
3302 #define _FILESYSTEMFSCTL_
3304 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
3305 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
3306 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
3307 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
3308 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
3309 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
3310 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
3311 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
3312 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
3313 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
3314 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
3315 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
3316 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
3317 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
3318 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
3319 #define FSCTL_SET_BOOTLOADER_ACCESSED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
3321 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
3322 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
3323 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
3324 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
3325 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
3327 #if (_WIN32_WINNT >= 0x0400)
3329 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
3330 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
3331 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS)
3332 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
3333 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
3334 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
3335 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
3339 #if (_WIN32_WINNT >= 0x0500)
3341 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
3342 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA)
3343 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
3344 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA)
3345 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA)
3346 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
3347 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA)
3348 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_READ_DATA)
3349 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA)
3350 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_READ_DATA)
3351 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA)
3352 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
3353 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA)
3354 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
3355 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
3356 #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
3357 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
3358 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
3359 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_ANY_ACCESS)
3360 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_ANY_ACCESS)
3361 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_READ_DATA)
3362 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_READ_DATA)
3363 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_READ_DATA)
3364 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
3365 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
3366 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
3367 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
3368 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
3369 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
3370 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
3371 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
3372 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3376 #if (_WIN32_WINNT >= 0x0600)
3378 #define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA)
3379 #define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA)
3380 #define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS)
3381 #define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS)
3382 #define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3383 #define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA)
3384 #define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA)
3385 #define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA)
3386 #define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA)
3387 #define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA)
3388 #define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA)
3389 #define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA)
3390 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA)
3391 #define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA)
3392 #define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA)
3393 #define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA)
3394 #define FSCTL_TXFS_SAVEPOINT_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 94, METHOD_BUFFERED, FILE_WRITE_DATA)
3395 #define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA)
3396 #define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA)
3397 #define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3398 #define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS)
3399 #define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS)
3400 #define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS)
3401 #define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS)
3402 #define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS)
3403 #define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3404 #define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS)
3405 #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS)
3407 #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES \
3408 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA)
3409 #define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA)
3410 #define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS)
3411 #define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS)
3412 #define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS)
3416 #if (_WIN32_WINNT >= 0x0601)
3418 #define FSCTL_QUERY_DEPENDENT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 124, METHOD_BUFFERED, FILE_ANY_ACCESS)
3419 #define FSCTL_SD_GLOBAL_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 125, METHOD_BUFFERED, FILE_ANY_ACCESS)
3420 #define FSCTL_LOOKUP_STREAM_FROM_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 127, METHOD_BUFFERED, FILE_ANY_ACCESS)
3421 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS)
3422 #define FSCTL_FILE_TYPE_NOTIFICATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS)
3423 #define FSCTL_GET_BOOT_AREA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 140, METHOD_BUFFERED, FILE_ANY_ACCESS)
3424 #define FSCTL_GET_RETRIEVAL_POINTER_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 141, METHOD_BUFFERED, FILE_ANY_ACCESS)
3425 #define FSCTL_SET_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS)
3426 #define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS)
3428 #define FSCTL_REQUEST_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS)
3430 #define FSCTL_CSV_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS)
3431 #define FSCTL_IS_CSV_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS)
3433 #define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 147, METHOD_BUFFERED, FILE_ANY_ACCESS)
3434 #define FSCTL_CSV_GET_VOLUME_PATH_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 148, METHOD_BUFFERED, FILE_ANY_ACCESS)
3435 #define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS)
3436 #define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS)
3437 #define FSCTL_IS_FILE_ON_CSV_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS)
3439 typedef struct _CSV_NAMESPACE_INFO
{
3442 LARGE_INTEGER StartingOffset
;
3444 } CSV_NAMESPACE_INFO
, *PCSV_NAMESPACE_INFO
;
3446 #define CSV_NAMESPACE_INFO_V1 (sizeof(CSV_NAMESPACE_INFO))
3447 #define CSV_INVALID_DEVICE_NUMBER 0xFFFFFFFF
3451 #define FSCTL_MARK_AS_SYSTEM_HIVE FSCTL_SET_BOOTLOADER_ACCESSED
3453 typedef struct _PATHNAME_BUFFER
{
3454 ULONG PathNameLength
;
3456 } PATHNAME_BUFFER
, *PPATHNAME_BUFFER
;
3458 typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER
{
3459 UCHAR First0x24BytesOfBootSector
[0x24];
3460 } FSCTL_QUERY_FAT_BPB_BUFFER
, *PFSCTL_QUERY_FAT_BPB_BUFFER
;
3462 #if (_WIN32_WINNT >= 0x0400)
3464 typedef struct _NTFS_VOLUME_DATA_BUFFER
{
3465 LARGE_INTEGER VolumeSerialNumber
;
3466 LARGE_INTEGER NumberSectors
;
3467 LARGE_INTEGER TotalClusters
;
3468 LARGE_INTEGER FreeClusters
;
3469 LARGE_INTEGER TotalReserved
;
3470 ULONG BytesPerSector
;
3471 ULONG BytesPerCluster
;
3472 ULONG BytesPerFileRecordSegment
;
3473 ULONG ClustersPerFileRecordSegment
;
3474 LARGE_INTEGER MftValidDataLength
;
3475 LARGE_INTEGER MftStartLcn
;
3476 LARGE_INTEGER Mft2StartLcn
;
3477 LARGE_INTEGER MftZoneStart
;
3478 LARGE_INTEGER MftZoneEnd
;
3479 } NTFS_VOLUME_DATA_BUFFER
, *PNTFS_VOLUME_DATA_BUFFER
;
3481 typedef struct _NTFS_EXTENDED_VOLUME_DATA
{
3483 USHORT MajorVersion
;
3484 USHORT MinorVersion
;
3485 } NTFS_EXTENDED_VOLUME_DATA
, *PNTFS_EXTENDED_VOLUME_DATA
;
3487 typedef struct _STARTING_LCN_INPUT_BUFFER
{
3488 LARGE_INTEGER StartingLcn
;
3489 } STARTING_LCN_INPUT_BUFFER
, *PSTARTING_LCN_INPUT_BUFFER
;
3491 typedef struct _VOLUME_BITMAP_BUFFER
{
3492 LARGE_INTEGER StartingLcn
;
3493 LARGE_INTEGER BitmapSize
;
3495 } VOLUME_BITMAP_BUFFER
, *PVOLUME_BITMAP_BUFFER
;
3497 typedef struct _STARTING_VCN_INPUT_BUFFER
{
3498 LARGE_INTEGER StartingVcn
;
3499 } STARTING_VCN_INPUT_BUFFER
, *PSTARTING_VCN_INPUT_BUFFER
;
3501 typedef struct _RETRIEVAL_POINTERS_BUFFER
{
3503 LARGE_INTEGER StartingVcn
;
3505 LARGE_INTEGER NextVcn
;
3508 } RETRIEVAL_POINTERS_BUFFER
, *PRETRIEVAL_POINTERS_BUFFER
;
3510 typedef struct _NTFS_FILE_RECORD_INPUT_BUFFER
{
3511 LARGE_INTEGER FileReferenceNumber
;
3512 } NTFS_FILE_RECORD_INPUT_BUFFER
, *PNTFS_FILE_RECORD_INPUT_BUFFER
;
3514 typedef struct _NTFS_FILE_RECORD_OUTPUT_BUFFER
{
3515 LARGE_INTEGER FileReferenceNumber
;
3516 ULONG FileRecordLength
;
3517 UCHAR FileRecordBuffer
[1];
3518 } NTFS_FILE_RECORD_OUTPUT_BUFFER
, *PNTFS_FILE_RECORD_OUTPUT_BUFFER
;
3520 typedef struct _MOVE_FILE_DATA
{
3522 LARGE_INTEGER StartingVcn
;
3523 LARGE_INTEGER StartingLcn
;
3525 } MOVE_FILE_DATA
, *PMOVE_FILE_DATA
;
3527 typedef struct _MOVE_FILE_RECORD_DATA
{
3529 LARGE_INTEGER SourceFileRecord
;
3530 LARGE_INTEGER TargetFileRecord
;
3531 } MOVE_FILE_RECORD_DATA
, *PMOVE_FILE_RECORD_DATA
;
3534 typedef struct _MOVE_FILE_DATA32
{
3536 LARGE_INTEGER StartingVcn
;
3537 LARGE_INTEGER StartingLcn
;
3539 } MOVE_FILE_DATA32
, *PMOVE_FILE_DATA32
;
3542 #endif /* (_WIN32_WINNT >= 0x0400) */
3544 #if (_WIN32_WINNT >= 0x0500)
3546 typedef struct _FIND_BY_SID_DATA
{
3549 } FIND_BY_SID_DATA
, *PFIND_BY_SID_DATA
;
3551 typedef struct _FIND_BY_SID_OUTPUT
{
3552 ULONG NextEntryOffset
;
3554 ULONG FileNameLength
;
3556 } FIND_BY_SID_OUTPUT
, *PFIND_BY_SID_OUTPUT
;
3558 typedef struct _MFT_ENUM_DATA
{
3559 ULONGLONG StartFileReferenceNumber
;
3562 } MFT_ENUM_DATA
, *PMFT_ENUM_DATA
;
3564 typedef struct _CREATE_USN_JOURNAL_DATA
{
3565 ULONGLONG MaximumSize
;
3566 ULONGLONG AllocationDelta
;
3567 } CREATE_USN_JOURNAL_DATA
, *PCREATE_USN_JOURNAL_DATA
;
3569 typedef struct _READ_USN_JOURNAL_DATA
{
3572 ULONG ReturnOnlyOnClose
;
3574 ULONGLONG BytesToWaitFor
;
3575 ULONGLONG UsnJournalID
;
3576 } READ_USN_JOURNAL_DATA
, *PREAD_USN_JOURNAL_DATA
;
3578 typedef struct _USN_RECORD
{
3580 USHORT MajorVersion
;
3581 USHORT MinorVersion
;
3582 ULONGLONG FileReferenceNumber
;
3583 ULONGLONG ParentFileReferenceNumber
;
3585 LARGE_INTEGER TimeStamp
;
3589 ULONG FileAttributes
;
3590 USHORT FileNameLength
;
3591 USHORT FileNameOffset
;
3593 } USN_RECORD
, *PUSN_RECORD
;
3595 #define USN_PAGE_SIZE (0x1000)
3597 #define USN_REASON_DATA_OVERWRITE (0x00000001)
3598 #define USN_REASON_DATA_EXTEND (0x00000002)
3599 #define USN_REASON_DATA_TRUNCATION (0x00000004)
3600 #define USN_REASON_NAMED_DATA_OVERWRITE (0x00000010)
3601 #define USN_REASON_NAMED_DATA_EXTEND (0x00000020)
3602 #define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040)
3603 #define USN_REASON_FILE_CREATE (0x00000100)
3604 #define USN_REASON_FILE_DELETE (0x00000200)
3605 #define USN_REASON_EA_CHANGE (0x00000400)
3606 #define USN_REASON_SECURITY_CHANGE (0x00000800)
3607 #define USN_REASON_RENAME_OLD_NAME (0x00001000)
3608 #define USN_REASON_RENAME_NEW_NAME (0x00002000)
3609 #define USN_REASON_INDEXABLE_CHANGE (0x00004000)
3610 #define USN_REASON_BASIC_INFO_CHANGE (0x00008000)
3611 #define USN_REASON_HARD_LINK_CHANGE (0x00010000)
3612 #define USN_REASON_COMPRESSION_CHANGE (0x00020000)
3613 #define USN_REASON_ENCRYPTION_CHANGE (0x00040000)
3614 #define USN_REASON_OBJECT_ID_CHANGE (0x00080000)
3615 #define USN_REASON_REPARSE_POINT_CHANGE (0x00100000)
3616 #define USN_REASON_STREAM_CHANGE (0x00200000)
3617 #define USN_REASON_TRANSACTED_CHANGE (0x00400000)
3618 #define USN_REASON_CLOSE (0x80000000)
3620 typedef struct _USN_JOURNAL_DATA
{
3621 ULONGLONG UsnJournalID
;
3626 ULONGLONG MaximumSize
;
3627 ULONGLONG AllocationDelta
;
3628 } USN_JOURNAL_DATA
, *PUSN_JOURNAL_DATA
;
3630 typedef struct _DELETE_USN_JOURNAL_DATA
{
3631 ULONGLONG UsnJournalID
;
3633 } DELETE_USN_JOURNAL_DATA
, *PDELETE_USN_JOURNAL_DATA
;
3635 #define USN_DELETE_FLAG_DELETE (0x00000001)
3636 #define USN_DELETE_FLAG_NOTIFY (0x00000002)
3637 #define USN_DELETE_VALID_FLAGS (0x00000003)
3639 typedef struct _MARK_HANDLE_INFO
{
3640 ULONG UsnSourceInfo
;
3641 HANDLE VolumeHandle
;
3643 } MARK_HANDLE_INFO
, *PMARK_HANDLE_INFO
;
3646 typedef struct _MARK_HANDLE_INFO32
{
3647 ULONG UsnSourceInfo
;
3648 UINT32 VolumeHandle
;
3650 } MARK_HANDLE_INFO32
, *PMARK_HANDLE_INFO32
;
3653 #define USN_SOURCE_DATA_MANAGEMENT (0x00000001)
3654 #define USN_SOURCE_AUXILIARY_DATA (0x00000002)
3655 #define USN_SOURCE_REPLICATION_MANAGEMENT (0x00000004)
3657 #define MARK_HANDLE_PROTECT_CLUSTERS (0x00000001)
3658 #define MARK_HANDLE_TXF_SYSTEM_LOG (0x00000004)
3659 #define MARK_HANDLE_NOT_TXF_SYSTEM_LOG (0x00000008)
3661 typedef struct _BULK_SECURITY_TEST_DATA
{
3662 ACCESS_MASK DesiredAccess
;
3663 ULONG SecurityIds
[1];
3664 } BULK_SECURITY_TEST_DATA
, *PBULK_SECURITY_TEST_DATA
;
3666 #define VOLUME_IS_DIRTY (0x00000001)
3667 #define VOLUME_UPGRADE_SCHEDULED (0x00000002)
3668 #define VOLUME_SESSION_OPEN (0x00000004)
3670 typedef struct _FILE_PREFETCH
{
3673 ULONGLONG Prefetch
[1];
3674 } FILE_PREFETCH
, *PFILE_PREFETCH
;
3676 typedef struct _FILE_PREFETCH_EX
{
3680 ULONGLONG Prefetch
[1];
3681 } FILE_PREFETCH_EX
, *PFILE_PREFETCH_EX
;
3683 #define FILE_PREFETCH_TYPE_FOR_CREATE 0x1
3684 #define FILE_PREFETCH_TYPE_FOR_DIRENUM 0x2
3685 #define FILE_PREFETCH_TYPE_FOR_CREATE_EX 0x3
3686 #define FILE_PREFETCH_TYPE_FOR_DIRENUM_EX 0x4
3688 #define FILE_PREFETCH_TYPE_MAX 0x4
3690 typedef struct _FILE_OBJECTID_BUFFER
{
3694 UCHAR BirthVolumeId
[16];
3695 UCHAR BirthObjectId
[16];
3698 UCHAR ExtendedInfo
[48];
3700 } FILE_OBJECTID_BUFFER
, *PFILE_OBJECTID_BUFFER
;
3702 typedef struct _FILE_SET_SPARSE_BUFFER
{
3704 } FILE_SET_SPARSE_BUFFER
, *PFILE_SET_SPARSE_BUFFER
;
3706 typedef struct _FILE_ZERO_DATA_INFORMATION
{
3707 LARGE_INTEGER FileOffset
;
3708 LARGE_INTEGER BeyondFinalZero
;
3709 } FILE_ZERO_DATA_INFORMATION
, *PFILE_ZERO_DATA_INFORMATION
;
3711 typedef struct _FILE_ALLOCATED_RANGE_BUFFER
{
3712 LARGE_INTEGER FileOffset
;
3713 LARGE_INTEGER Length
;
3714 } FILE_ALLOCATED_RANGE_BUFFER
, *PFILE_ALLOCATED_RANGE_BUFFER
;
3716 typedef struct _ENCRYPTION_BUFFER
{
3717 ULONG EncryptionOperation
;
3719 } ENCRYPTION_BUFFER
, *PENCRYPTION_BUFFER
;
3721 #define FILE_SET_ENCRYPTION 0x00000001
3722 #define FILE_CLEAR_ENCRYPTION 0x00000002
3723 #define STREAM_SET_ENCRYPTION 0x00000003
3724 #define STREAM_CLEAR_ENCRYPTION 0x00000004
3726 #define MAXIMUM_ENCRYPTION_VALUE 0x00000004
3728 typedef struct _DECRYPTION_STATUS_BUFFER
{
3729 BOOLEAN NoEncryptedStreams
;
3730 } DECRYPTION_STATUS_BUFFER
, *PDECRYPTION_STATUS_BUFFER
;
3732 #define ENCRYPTION_FORMAT_DEFAULT (0x01)
3734 #define COMPRESSION_FORMAT_SPARSE (0x4000)
3736 typedef struct _REQUEST_RAW_ENCRYPTED_DATA
{
3737 LONGLONG FileOffset
;
3739 } REQUEST_RAW_ENCRYPTED_DATA
, *PREQUEST_RAW_ENCRYPTED_DATA
;
3741 typedef struct _ENCRYPTED_DATA_INFO
{
3742 ULONGLONG StartingFileOffset
;
3743 ULONG OutputBufferOffset
;
3744 ULONG BytesWithinFileSize
;
3745 ULONG BytesWithinValidDataLength
;
3746 USHORT CompressionFormat
;
3747 UCHAR DataUnitShift
;
3750 UCHAR EncryptionFormat
;
3751 USHORT NumberOfDataBlocks
;
3752 ULONG DataBlockSize
[ANYSIZE_ARRAY
];
3753 } ENCRYPTED_DATA_INFO
, *PENCRYPTED_DATA_INFO
;
3755 typedef struct _PLEX_READ_DATA_REQUEST
{
3756 LARGE_INTEGER ByteOffset
;
3759 } PLEX_READ_DATA_REQUEST
, *PPLEX_READ_DATA_REQUEST
;
3761 typedef struct _SI_COPYFILE
{
3762 ULONG SourceFileNameLength
;
3763 ULONG DestinationFileNameLength
;
3765 WCHAR FileNameBuffer
[1];
3766 } SI_COPYFILE
, *PSI_COPYFILE
;
3768 #define COPYFILE_SIS_LINK 0x0001
3769 #define COPYFILE_SIS_REPLACE 0x0002
3770 #define COPYFILE_SIS_FLAGS 0x0003
3772 #endif /* (_WIN32_WINNT >= 0x0500) */
3774 #if (_WIN32_WINNT >= 0x0600)
3776 typedef struct _FILE_MAKE_COMPATIBLE_BUFFER
{
3778 } FILE_MAKE_COMPATIBLE_BUFFER
, *PFILE_MAKE_COMPATIBLE_BUFFER
;
3780 typedef struct _FILE_SET_DEFECT_MGMT_BUFFER
{
3782 } FILE_SET_DEFECT_MGMT_BUFFER
, *PFILE_SET_DEFECT_MGMT_BUFFER
;
3784 typedef struct _FILE_QUERY_SPARING_BUFFER
{
3785 ULONG SparingUnitBytes
;
3786 BOOLEAN SoftwareSparing
;
3787 ULONG TotalSpareBlocks
;
3788 ULONG FreeSpareBlocks
;
3789 } FILE_QUERY_SPARING_BUFFER
, *PFILE_QUERY_SPARING_BUFFER
;
3791 typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER
{
3792 LARGE_INTEGER DirectoryCount
;
3793 LARGE_INTEGER FileCount
;
3794 USHORT FsFormatMajVersion
;
3795 USHORT FsFormatMinVersion
;
3796 WCHAR FsFormatName
[12];
3797 LARGE_INTEGER FormatTime
;
3798 LARGE_INTEGER LastUpdateTime
;
3799 WCHAR CopyrightInfo
[34];
3800 WCHAR AbstractInfo
[34];
3801 WCHAR FormattingImplementationInfo
[34];
3802 WCHAR LastModifyingImplementationInfo
[34];
3803 } FILE_QUERY_ON_DISK_VOL_INFO_BUFFER
, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER
;
3805 #define SET_REPAIR_ENABLED (0x00000001)
3806 #define SET_REPAIR_VOLUME_BITMAP_SCAN (0x00000002)
3807 #define SET_REPAIR_DELETE_CROSSLINK (0x00000004)
3808 #define SET_REPAIR_WARN_ABOUT_DATA_LOSS (0x00000008)
3809 #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT (0x00000010)
3810 #define SET_REPAIR_VALID_MASK (0x0000001F)
3812 typedef enum _SHRINK_VOLUME_REQUEST_TYPES
{
3816 } SHRINK_VOLUME_REQUEST_TYPES
, *PSHRINK_VOLUME_REQUEST_TYPES
;
3818 typedef struct _SHRINK_VOLUME_INFORMATION
{
3819 SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType
;
3821 LONGLONG NewNumberOfSectors
;
3822 } SHRINK_VOLUME_INFORMATION
, *PSHRINK_VOLUME_INFORMATION
;
3824 #define TXFS_RM_FLAG_LOGGING_MODE 0x00000001
3825 #define TXFS_RM_FLAG_RENAME_RM 0x00000002
3826 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004
3827 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008
3828 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010
3829 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020
3830 #define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040
3831 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080
3832 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100
3833 #define TXFS_RM_FLAG_GROW_LOG 0x00000400
3834 #define TXFS_RM_FLAG_SHRINK_LOG 0x00000800
3835 #define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000
3836 #define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000
3837 #define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000
3838 #define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000
3839 #define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000
3840 #define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000
3842 #define TXFS_LOGGING_MODE_SIMPLE (0x0001)
3843 #define TXFS_LOGGING_MODE_FULL (0x0002)
3845 #define TXFS_TRANSACTION_STATE_NONE 0x00
3846 #define TXFS_TRANSACTION_STATE_ACTIVE 0x01
3847 #define TXFS_TRANSACTION_STATE_PREPARED 0x02
3848 #define TXFS_TRANSACTION_STATE_NOTACTIVE 0x03
3850 #define TXFS_MODIFY_RM_VALID_FLAGS \
3851 (TXFS_RM_FLAG_LOGGING_MODE | \
3852 TXFS_RM_FLAG_RENAME_RM | \
3853 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
3854 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
3855 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
3856 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
3857 TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
3858 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
3859 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
3860 TXFS_RM_FLAG_SHRINK_LOG | \
3861 TXFS_RM_FLAG_GROW_LOG | \
3862 TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE | \
3863 TXFS_RM_FLAG_PRESERVE_CHANGES | \
3864 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
3865 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
3866 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
3867 TXFS_RM_FLAG_PREFER_AVAILABILITY)
3869 typedef struct _TXFS_MODIFY_RM
{
3871 ULONG LogContainerCountMax
;
3872 ULONG LogContainerCountMin
;
3873 ULONG LogContainerCount
;
3874 ULONG LogGrowthIncrement
;
3875 ULONG LogAutoShrinkPercentage
;
3878 } TXFS_MODIFY_RM
, *PTXFS_MODIFY_RM
;
3880 #define TXFS_RM_STATE_NOT_STARTED 0
3881 #define TXFS_RM_STATE_STARTING 1
3882 #define TXFS_RM_STATE_ACTIVE 2
3883 #define TXFS_RM_STATE_SHUTTING_DOWN 3
3885 #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS \
3886 (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
3887 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
3888 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
3889 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
3890 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
3891 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
3892 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
3893 TXFS_RM_FLAG_PREFER_AVAILABILITY)
3895 typedef struct _TXFS_QUERY_RM_INFORMATION
{
3896 ULONG BytesRequired
;
3898 ULONGLONG CurrentLsn
;
3899 ULONGLONG ArchiveTailLsn
;
3900 ULONGLONG LogContainerSize
;
3901 LARGE_INTEGER HighestVirtualClock
;
3902 ULONG LogContainerCount
;
3903 ULONG LogContainerCountMax
;
3904 ULONG LogContainerCountMin
;
3905 ULONG LogGrowthIncrement
;
3906 ULONG LogAutoShrinkPercentage
;
3911 ULONGLONG LogCapacity
;
3915 ULONGLONG TransactionCount
;
3916 ULONGLONG OnePCCount
;
3917 ULONGLONG TwoPCCount
;
3918 ULONGLONG NumberLogFileFull
;
3919 ULONGLONG OldestTransactionAge
;
3921 ULONG TmLogPathOffset
;
3922 } TXFS_QUERY_RM_INFORMATION
, *PTXFS_QUERY_RM_INFORMATION
;
3924 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x01
3925 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x02
3927 #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS \
3928 (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN | \
3929 TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK)
3931 typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION
{
3932 LARGE_INTEGER LastVirtualClock
;
3933 ULONGLONG LastRedoLsn
;
3934 ULONGLONG HighestRecoveryLsn
;
3936 } TXFS_ROLLFORWARD_REDO_INFORMATION
, *PTXFS_ROLLFORWARD_REDO_INFORMATION
;
3938 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001
3939 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002
3940 #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004
3941 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008
3942 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010
3943 #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020
3944 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040
3945 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080
3947 #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200
3948 #define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400
3949 #define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800
3951 #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000
3952 #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000
3954 #define TXFS_START_RM_VALID_FLAGS \
3955 (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
3956 TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
3957 TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE | \
3958 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
3959 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
3960 TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
3961 TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT | \
3962 TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
3963 TXFS_START_RM_FLAG_LOGGING_MODE | \
3964 TXFS_START_RM_FLAG_PRESERVE_CHANGES | \
3965 TXFS_START_RM_FLAG_PREFER_CONSISTENCY | \
3966 TXFS_START_RM_FLAG_PREFER_AVAILABILITY)
3968 typedef struct _TXFS_START_RM_INFORMATION
{
3970 ULONGLONG LogContainerSize
;
3971 ULONG LogContainerCountMin
;
3972 ULONG LogContainerCountMax
;
3973 ULONG LogGrowthIncrement
;
3974 ULONG LogAutoShrinkPercentage
;
3975 ULONG TmLogPathOffset
;
3976 USHORT TmLogPathLength
;
3978 USHORT LogPathLength
;
3981 } TXFS_START_RM_INFORMATION
, *PTXFS_START_RM_INFORMATION
;
3983 typedef struct _TXFS_GET_METADATA_INFO_OUT
{
3988 GUID LockingTransaction
;
3990 ULONG TransactionState
;
3991 } TXFS_GET_METADATA_INFO_OUT
, *PTXFS_GET_METADATA_INFO_OUT
;
3993 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001
3994 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x00000002
3996 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
{
4004 } TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
;
4006 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES
{
4007 GUID KtmTransaction
;
4008 ULONGLONG NumberOfFiles
;
4009 ULONGLONG BufferSizeRequired
;
4011 } TXFS_LIST_TRANSACTION_LOCKED_FILES
, *PTXFS_LIST_TRANSACTION_LOCKED_FILES
;
4013 typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY
{
4015 ULONG TransactionState
;
4019 } TXFS_LIST_TRANSACTIONS_ENTRY
, *PTXFS_LIST_TRANSACTIONS_ENTRY
;
4021 typedef struct _TXFS_LIST_TRANSACTIONS
{
4022 ULONGLONG NumberOfTransactions
;
4023 ULONGLONG BufferSizeRequired
;
4024 } TXFS_LIST_TRANSACTIONS
, *PTXFS_LIST_TRANSACTIONS
;
4026 typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT
{
4031 } TXFS_READ_BACKUP_INFORMATION_OUT
, *PTXFS_READ_BACKUP_INFORMATION_OUT
;
4033 typedef struct _TXFS_WRITE_BACKUP_INFORMATION
{
4035 } TXFS_WRITE_BACKUP_INFORMATION
, *PTXFS_WRITE_BACKUP_INFORMATION
;
4037 #define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFE
4038 #define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFF
4040 typedef struct _TXFS_GET_TRANSACTED_VERSION
{
4041 ULONG ThisBaseVersion
;
4042 ULONG LatestVersion
;
4043 USHORT ThisMiniVersion
;
4044 USHORT FirstMiniVersion
;
4045 USHORT LatestMiniVersion
;
4046 } TXFS_GET_TRANSACTED_VERSION
, *PTXFS_GET_TRANSACTED_VERSION
;
4048 #define TXFS_SAVEPOINT_SET 0x00000001
4049 #define TXFS_SAVEPOINT_ROLLBACK 0x00000002
4050 #define TXFS_SAVEPOINT_CLEAR 0x00000004
4051 #define TXFS_SAVEPOINT_CLEAR_ALL 0x00000010
4053 typedef struct _TXFS_SAVEPOINT_INFORMATION
{
4054 HANDLE KtmTransaction
;
4057 } TXFS_SAVEPOINT_INFORMATION
, *PTXFS_SAVEPOINT_INFORMATION
;
4059 typedef struct _TXFS_CREATE_MINIVERSION_INFO
{
4060 USHORT StructureVersion
;
4061 USHORT StructureLength
;
4064 } TXFS_CREATE_MINIVERSION_INFO
, *PTXFS_CREATE_MINIVERSION_INFO
;
4066 typedef struct _TXFS_TRANSACTION_ACTIVE_INFO
{
4067 BOOLEAN TransactionsActiveAtSnapshot
;
4068 } TXFS_TRANSACTION_ACTIVE_INFO
, *PTXFS_TRANSACTION_ACTIVE_INFO
;
4070 #endif /* (_WIN32_WINNT >= 0x0600) */
4072 #if (_WIN32_WINNT >= 0x0601)
4074 #define MARK_HANDLE_REALTIME (0x00000020)
4075 #define MARK_HANDLE_NOT_REALTIME (0x00000040)
4077 #define NO_8DOT3_NAME_PRESENT (0x00000001)
4078 #define REMOVED_8DOT3_NAME (0x00000002)
4080 #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED (0x00000001)
4082 typedef struct _BOOT_AREA_INFO
{
4083 ULONG BootSectorCount
;
4085 LARGE_INTEGER Offset
;
4087 } BOOT_AREA_INFO
, *PBOOT_AREA_INFO
;
4089 typedef struct _RETRIEVAL_POINTER_BASE
{
4090 LARGE_INTEGER FileAreaOffset
;
4091 } RETRIEVAL_POINTER_BASE
, *PRETRIEVAL_POINTER_BASE
;
4093 typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION
{
4098 } FILE_FS_PERSISTENT_VOLUME_INFORMATION
, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION
;
4100 typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION
{
4102 } FILE_SYSTEM_RECOGNITION_INFORMATION
, *PFILE_SYSTEM_RECOGNITION_INFORMATION
;
4104 #define OPLOCK_LEVEL_CACHE_READ (0x00000001)
4105 #define OPLOCK_LEVEL_CACHE_HANDLE (0x00000002)
4106 #define OPLOCK_LEVEL_CACHE_WRITE (0x00000004)
4108 #define REQUEST_OPLOCK_INPUT_FLAG_REQUEST (0x00000001)
4109 #define REQUEST_OPLOCK_INPUT_FLAG_ACK (0x00000002)
4110 #define REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE (0x00000004)
4112 #define REQUEST_OPLOCK_CURRENT_VERSION 1
4114 typedef struct _REQUEST_OPLOCK_INPUT_BUFFER
{
4115 USHORT StructureVersion
;
4116 USHORT StructureLength
;
4117 ULONG RequestedOplockLevel
;
4119 } REQUEST_OPLOCK_INPUT_BUFFER
, *PREQUEST_OPLOCK_INPUT_BUFFER
;
4121 #define REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED (0x00000001)
4122 #define REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED (0x00000002)
4124 typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER
{
4125 USHORT StructureVersion
;
4126 USHORT StructureLength
;
4127 ULONG OriginalOplockLevel
;
4128 ULONG NewOplockLevel
;
4130 ACCESS_MASK AccessMode
;
4132 } REQUEST_OPLOCK_OUTPUT_BUFFER
, *PREQUEST_OPLOCK_OUTPUT_BUFFER
;
4134 #define SD_GLOBAL_CHANGE_TYPE_MACHINE_SID 1
4136 typedef struct _SD_CHANGE_MACHINE_SID_INPUT
{
4137 USHORT CurrentMachineSIDOffset
;
4138 USHORT CurrentMachineSIDLength
;
4139 USHORT NewMachineSIDOffset
;
4140 USHORT NewMachineSIDLength
;
4141 } SD_CHANGE_MACHINE_SID_INPUT
, *PSD_CHANGE_MACHINE_SID_INPUT
;
4143 typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT
{
4144 ULONGLONG NumSDChangedSuccess
;
4145 ULONGLONG NumSDChangedFail
;
4146 ULONGLONG NumSDUnused
;
4147 ULONGLONG NumSDTotal
;
4148 ULONGLONG NumMftSDChangedSuccess
;
4149 ULONGLONG NumMftSDChangedFail
;
4150 ULONGLONG NumMftSDTotal
;
4151 } SD_CHANGE_MACHINE_SID_OUTPUT
, *PSD_CHANGE_MACHINE_SID_OUTPUT
;
4153 typedef struct _SD_GLOBAL_CHANGE_INPUT
{
4157 SD_CHANGE_MACHINE_SID_INPUT SdChange
;
4159 } SD_GLOBAL_CHANGE_INPUT
, *PSD_GLOBAL_CHANGE_INPUT
;
4161 typedef struct _SD_GLOBAL_CHANGE_OUTPUT
{
4165 SD_CHANGE_MACHINE_SID_OUTPUT SdChange
;
4167 } SD_GLOBAL_CHANGE_OUTPUT
, *PSD_GLOBAL_CHANGE_OUTPUT
;
4169 #define ENCRYPTED_DATA_INFO_SPARSE_FILE 1
4171 typedef struct _EXTENDED_ENCRYPTED_DATA_INFO
{
4176 } EXTENDED_ENCRYPTED_DATA_INFO
, *PEXTENDED_ENCRYPTED_DATA_INFO
;
4178 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT
{
4180 ULONG NumberOfClusters
;
4181 LARGE_INTEGER Cluster
[1];
4182 } LOOKUP_STREAM_FROM_CLUSTER_INPUT
, *PLOOKUP_STREAM_FROM_CLUSTER_INPUT
;
4184 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT
{
4186 ULONG NumberOfMatches
;
4187 ULONG BufferSizeRequired
;
4188 } LOOKUP_STREAM_FROM_CLUSTER_OUTPUT
, *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT
;
4190 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE 0x00000001
4191 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET 0x00000002
4192 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE 0x00000004
4193 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE 0x00000008
4195 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK 0xff000000
4196 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA 0x01000000
4197 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX 0x02000000
4198 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM 0x03000000
4200 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY
{
4203 LARGE_INTEGER Reserved
;
4204 LARGE_INTEGER Cluster
;
4206 } LOOKUP_STREAM_FROM_CLUSTER_ENTRY
, *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY
;
4208 typedef struct _FILE_TYPE_NOTIFICATION_INPUT
{
4210 ULONG NumFileTypeIDs
;
4212 } FILE_TYPE_NOTIFICATION_INPUT
, *PFILE_TYPE_NOTIFICATION_INPUT
;
4214 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_BEGIN 0x00000001
4215 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_END 0x00000002
4217 DEFINE_GUID( FILE_TYPE_NOTIFICATION_GUID_PAGE_FILE
, 0x0d0a64a1, 0x38fc, 0x4db8, 0x9f, 0xe7, 0x3f, 0x43, 0x52, 0xcd, 0x7c, 0x5c );
4218 DEFINE_GUID( FILE_TYPE_NOTIFICATION_GUID_HIBERNATION_FILE
, 0xb7624d64, 0xb9a3, 0x4cf8, 0x80, 0x11, 0x5b, 0x86, 0xc9, 0x40, 0xe7, 0xb7 );
4219 DEFINE_GUID( FILE_TYPE_NOTIFICATION_GUID_CRASHDUMP_FILE
, 0x9d453eb7, 0xd2a6, 0x4dbd, 0xa2, 0xe3, 0xfb, 0xd0, 0xed, 0x91, 0x09, 0xa9 );
4221 #ifndef _VIRTUAL_STORAGE_TYPE_DEFINED
4222 #define _VIRTUAL_STORAGE_TYPE_DEFINED
4223 typedef struct _VIRTUAL_STORAGE_TYPE
{
4226 } VIRTUAL_STORAGE_TYPE
, *PVIRTUAL_STORAGE_TYPE
;
4229 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
{
4232 } STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
;
4234 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_HOST_VOLUMES 0x1
4235 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_GUEST_VOLUMES 0x2
4237 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
{
4239 ULONG DependencyTypeFlags
;
4240 ULONG ProviderSpecificFlags
;
4241 VIRTUAL_STORAGE_TYPE VirtualStorageType
;
4242 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
;
4244 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
{
4246 ULONG DependencyTypeFlags
;
4247 ULONG ProviderSpecificFlags
;
4248 VIRTUAL_STORAGE_TYPE VirtualStorageType
;
4249 ULONG AncestorLevel
;
4250 ULONG HostVolumeNameOffset
;
4251 ULONG HostVolumeNameSize
;
4252 ULONG DependentVolumeNameOffset
;
4253 ULONG DependentVolumeNameSize
;
4254 ULONG RelativePathOffset
;
4255 ULONG RelativePathSize
;
4256 ULONG DependentDeviceNameOffset
;
4257 ULONG DependentDeviceNameSize
;
4258 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
;
4260 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
{
4261 ULONG ResponseLevel
;
4262 ULONG NumberEntries
;
4264 STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY Lev1Depends
[];
4265 STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY Lev2Depends
[];
4267 } STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
;
4269 #endif /* (_WIN32_WINNT >= 0x0601) */
4271 typedef struct _FILESYSTEM_STATISTICS
{
4272 USHORT FileSystemType
;
4274 ULONG SizeOfCompleteStructure
;
4275 ULONG UserFileReads
;
4276 ULONG UserFileReadBytes
;
4277 ULONG UserDiskReads
;
4278 ULONG UserFileWrites
;
4279 ULONG UserFileWriteBytes
;
4280 ULONG UserDiskWrites
;
4281 ULONG MetaDataReads
;
4282 ULONG MetaDataReadBytes
;
4283 ULONG MetaDataDiskReads
;
4284 ULONG MetaDataWrites
;
4285 ULONG MetaDataWriteBytes
;
4286 ULONG MetaDataDiskWrites
;
4287 } FILESYSTEM_STATISTICS
, *PFILESYSTEM_STATISTICS
;
4289 #define FILESYSTEM_STATISTICS_TYPE_NTFS 1
4290 #define FILESYSTEM_STATISTICS_TYPE_FAT 2
4291 #define FILESYSTEM_STATISTICS_TYPE_EXFAT 3
4293 typedef struct _FAT_STATISTICS
{
4295 ULONG SuccessfulCreates
;
4296 ULONG FailedCreates
;
4297 ULONG NonCachedReads
;
4298 ULONG NonCachedReadBytes
;
4299 ULONG NonCachedWrites
;
4300 ULONG NonCachedWriteBytes
;
4301 ULONG NonCachedDiskReads
;
4302 ULONG NonCachedDiskWrites
;
4303 } FAT_STATISTICS
, *PFAT_STATISTICS
;
4305 typedef struct _EXFAT_STATISTICS
{
4307 ULONG SuccessfulCreates
;
4308 ULONG FailedCreates
;
4309 ULONG NonCachedReads
;
4310 ULONG NonCachedReadBytes
;
4311 ULONG NonCachedWrites
;
4312 ULONG NonCachedWriteBytes
;
4313 ULONG NonCachedDiskReads
;
4314 ULONG NonCachedDiskWrites
;
4315 } EXFAT_STATISTICS
, *PEXFAT_STATISTICS
;
4317 typedef struct _NTFS_STATISTICS
{
4318 ULONG LogFileFullExceptions
;
4319 ULONG OtherExceptions
;
4323 ULONG MftWriteBytes
;
4329 } MftWritesUserLevel
;
4330 USHORT MftWritesFlushForLogFileFull
;
4331 USHORT MftWritesLazyWriter
;
4332 USHORT MftWritesUserRequest
;
4334 ULONG Mft2WriteBytes
;
4340 } Mft2WritesUserLevel
;
4341 USHORT Mft2WritesFlushForLogFileFull
;
4342 USHORT Mft2WritesLazyWriter
;
4343 USHORT Mft2WritesUserRequest
;
4344 ULONG RootIndexReads
;
4345 ULONG RootIndexReadBytes
;
4346 ULONG RootIndexWrites
;
4347 ULONG RootIndexWriteBytes
;
4349 ULONG BitmapReadBytes
;
4351 ULONG BitmapWriteBytes
;
4352 USHORT BitmapWritesFlushForLogFileFull
;
4353 USHORT BitmapWritesLazyWriter
;
4354 USHORT BitmapWritesUserRequest
;
4359 } BitmapWritesUserLevel
;
4360 ULONG MftBitmapReads
;
4361 ULONG MftBitmapReadBytes
;
4362 ULONG MftBitmapWrites
;
4363 ULONG MftBitmapWriteBytes
;
4364 USHORT MftBitmapWritesFlushForLogFileFull
;
4365 USHORT MftBitmapWritesLazyWriter
;
4366 USHORT MftBitmapWritesUserRequest
;
4372 } MftBitmapWritesUserLevel
;
4373 ULONG UserIndexReads
;
4374 ULONG UserIndexReadBytes
;
4375 ULONG UserIndexWrites
;
4376 ULONG UserIndexWriteBytes
;
4378 ULONG LogFileReadBytes
;
4379 ULONG LogFileWrites
;
4380 ULONG LogFileWriteBytes
;
4387 ULONG HintsClusters
;
4389 ULONG CacheClusters
;
4391 ULONG CacheMissClusters
;
4393 } NTFS_STATISTICS
, *PNTFS_STATISTICS
;
4395 #endif // _FILESYSTEMFSCTL_
4397 #define SYMLINK_FLAG_RELATIVE 1
4399 typedef struct _REPARSE_DATA_BUFFER
{
4401 USHORT ReparseDataLength
;
4403 __GNU_EXTENSION
union {
4405 USHORT SubstituteNameOffset
;
4406 USHORT SubstituteNameLength
;
4407 USHORT PrintNameOffset
;
4408 USHORT PrintNameLength
;
4410 WCHAR PathBuffer
[1];
4411 } SymbolicLinkReparseBuffer
;
4413 USHORT SubstituteNameOffset
;
4414 USHORT SubstituteNameLength
;
4415 USHORT PrintNameOffset
;
4416 USHORT PrintNameLength
;
4417 WCHAR PathBuffer
[1];
4418 } MountPointReparseBuffer
;
4420 UCHAR DataBuffer
[1];
4421 } GenericReparseBuffer
;
4423 } REPARSE_DATA_BUFFER
, *PREPARSE_DATA_BUFFER
;
4425 #define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
4427 typedef struct _REPARSE_GUID_DATA_BUFFER
{
4429 USHORT ReparseDataLength
;
4433 UCHAR DataBuffer
[1];
4434 } GenericReparseBuffer
;
4435 } REPARSE_GUID_DATA_BUFFER
, *PREPARSE_GUID_DATA_BUFFER
;
4437 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
4439 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 )
4441 /* Reserved reparse tags */
4442 #define IO_REPARSE_TAG_RESERVED_ZERO (0)
4443 #define IO_REPARSE_TAG_RESERVED_ONE (1)
4444 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
4446 #define IsReparseTagMicrosoft(_tag) (((_tag) & 0x80000000))
4447 #define IsReparseTagNameSurrogate(_tag) (((_tag) & 0x20000000))
4449 #define IO_REPARSE_TAG_VALID_VALUES (0xF000FFFF)
4451 #define IsReparseTagValid(tag) ( \
4452 !((tag) & ~IO_REPARSE_TAG_VALID_VALUES) && \
4453 ((tag) > IO_REPARSE_TAG_RESERVED_RANGE) \
4456 /* MicroSoft reparse point tags */
4457 #define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
4458 #define IO_REPARSE_TAG_HSM (0xC0000004L)
4459 #define IO_REPARSE_TAG_DRIVE_EXTENDER (0x80000005L)
4460 #define IO_REPARSE_TAG_HSM2 (0x80000006L)
4461 #define IO_REPARSE_TAG_SIS (0x80000007L)
4462 #define IO_REPARSE_TAG_WIM (0x80000008L)
4463 #define IO_REPARSE_TAG_CSV (0x80000009L)
4464 #define IO_REPARSE_TAG_DFS (0x8000000AL)
4465 #define IO_REPARSE_TAG_FILTER_MANAGER (0x8000000BL)
4466 #define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
4467 #define IO_REPARSE_TAG_IIS_CACHE (0xA0000010L)
4468 #define IO_REPARSE_TAG_DFSR (0x80000012L)
4471 typedef struct _REPARSE_INDEX_KEY
{
4472 ULONG FileReparseTag
;
4473 LARGE_INTEGER FileId
;
4474 } REPARSE_INDEX_KEY
, *PREPARSE_INDEX_KEY
;
4477 #define FSCTL_LMR_GET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,58,METHOD_BUFFERED,FILE_ANY_ACCESS)
4478 #define FSCTL_LMR_SET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,59,METHOD_BUFFERED,FILE_ANY_ACCESS)
4479 #define IOCTL_LMR_ARE_FILE_OBJECTS_ON_SAME_SERVER CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS)
4481 #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
4482 #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
4483 #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
4484 #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
4485 #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
4486 #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
4487 #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
4488 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
4489 #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
4490 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
4491 #define FSCTL_PIPE_GET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
4492 #define FSCTL_PIPE_SET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
4493 #define FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
4494 #define FSCTL_PIPE_SET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
4495 #define FSCTL_PIPE_GET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
4496 #define FSCTL_PIPE_SET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
4497 #define FSCTL_PIPE_FLUSH CTL_CODE(FILE_DEVICE_NAMED_PIPE, 16, METHOD_BUFFERED, FILE_WRITE_DATA)
4499 #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
4500 #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
4501 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
4502 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
4504 #define FILE_PIPE_READ_DATA 0x00000000
4505 #define FILE_PIPE_WRITE_SPACE 0x00000001
4507 typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER
{
4510 } FILE_PIPE_ASSIGN_EVENT_BUFFER
, *PFILE_PIPE_ASSIGN_EVENT_BUFFER
;
4512 typedef struct _FILE_PIPE_EVENT_BUFFER
{
4513 ULONG NamedPipeState
;
4517 ULONG NumberRequests
;
4518 } FILE_PIPE_EVENT_BUFFER
, *PFILE_PIPE_EVENT_BUFFER
;
4520 typedef struct _FILE_PIPE_PEEK_BUFFER
{
4521 ULONG NamedPipeState
;
4522 ULONG ReadDataAvailable
;
4523 ULONG NumberOfMessages
;
4524 ULONG MessageLength
;
4526 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
4528 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
{
4529 LARGE_INTEGER Timeout
;
4531 BOOLEAN TimeoutSpecified
;
4533 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
4535 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER
{
4536 #if !defined(BUILD_WOW6432)
4537 PVOID ClientSession
;
4538 PVOID ClientProcess
;
4540 ULONGLONG ClientSession
;
4541 ULONGLONG ClientProcess
;
4543 } FILE_PIPE_CLIENT_PROCESS_BUFFER
, *PFILE_PIPE_CLIENT_PROCESS_BUFFER
;
4545 #define FILE_PIPE_COMPUTER_NAME_LENGTH 15
4547 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER_EX
{
4548 #if !defined(BUILD_WOW6432)
4549 PVOID ClientSession
;
4550 PVOID ClientProcess
;
4552 ULONGLONG ClientSession
;
4553 ULONGLONG ClientProcess
;
4555 USHORT ClientComputerNameLength
;
4556 WCHAR ClientComputerBuffer
[FILE_PIPE_COMPUTER_NAME_LENGTH
+1];
4557 } FILE_PIPE_CLIENT_PROCESS_BUFFER_EX
, *PFILE_PIPE_CLIENT_PROCESS_BUFFER_EX
;
4559 #define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
4561 typedef enum _LINK_TRACKING_INFORMATION_TYPE
{
4562 NtfsLinkTrackingInformation
,
4563 DfsLinkTrackingInformation
4564 } LINK_TRACKING_INFORMATION_TYPE
, *PLINK_TRACKING_INFORMATION_TYPE
;
4566 typedef struct _LINK_TRACKING_INFORMATION
{
4567 LINK_TRACKING_INFORMATION_TYPE Type
;
4569 } LINK_TRACKING_INFORMATION
, *PLINK_TRACKING_INFORMATION
;
4571 typedef struct _REMOTE_LINK_TRACKING_INFORMATION
{
4572 PVOID TargetFileObject
;
4573 ULONG TargetLinkTrackingInformationLength
;
4574 UCHAR TargetLinkTrackingInformationBuffer
[1];
4575 } REMOTE_LINK_TRACKING_INFORMATION
, *PREMOTE_LINK_TRACKING_INFORMATION
;
4577 #define IO_OPEN_PAGING_FILE 0x0002
4578 #define IO_OPEN_TARGET_DIRECTORY 0x0004
4579 #define IO_STOP_ON_SYMLINK 0x0008
4580 #define IO_MM_PAGING_FILE 0x0010
4583 (NTAPI
*PDRIVER_FS_NOTIFICATION
) (
4584 IN PDEVICE_OBJECT DeviceObject
,
4585 IN BOOLEAN FsActive
);
4587 typedef enum _FS_FILTER_SECTION_SYNC_TYPE
{
4589 SyncTypeCreateSection
4590 } FS_FILTER_SECTION_SYNC_TYPE
, *PFS_FILTER_SECTION_SYNC_TYPE
;
4592 typedef enum _FS_FILTER_STREAM_FO_NOTIFICATION_TYPE
{
4593 NotifyTypeCreate
= 0,
4595 } FS_FILTER_STREAM_FO_NOTIFICATION_TYPE
, *PFS_FILTER_STREAM_FO_NOTIFICATION_TYPE
;
4597 typedef union _FS_FILTER_PARAMETERS
{
4599 PLARGE_INTEGER EndingOffset
;
4600 PERESOURCE
*ResourceToRelease
;
4601 } AcquireForModifiedPageWriter
;
4603 PERESOURCE ResourceToRelease
;
4604 } ReleaseForModifiedPageWriter
;
4606 FS_FILTER_SECTION_SYNC_TYPE SyncType
;
4607 ULONG PageProtection
;
4608 } AcquireForSectionSynchronization
;
4610 FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType
;
4611 BOOLEAN POINTER_ALIGNMENT SafeToRecurse
;
4612 } NotifyStreamFileObject
;
4620 } FS_FILTER_PARAMETERS
, *PFS_FILTER_PARAMETERS
;
4622 #define FS_FILTER_ACQUIRE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-1
4623 #define FS_FILTER_RELEASE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-2
4624 #define FS_FILTER_ACQUIRE_FOR_MOD_WRITE (UCHAR)-3
4625 #define FS_FILTER_RELEASE_FOR_MOD_WRITE (UCHAR)-4
4626 #define FS_FILTER_ACQUIRE_FOR_CC_FLUSH (UCHAR)-5
4627 #define FS_FILTER_RELEASE_FOR_CC_FLUSH (UCHAR)-6
4629 typedef struct _FS_FILTER_CALLBACK_DATA
{
4630 ULONG SizeOfFsFilterCallbackData
;
4633 struct _DEVICE_OBJECT
*DeviceObject
;
4634 struct _FILE_OBJECT
*FileObject
;
4635 FS_FILTER_PARAMETERS Parameters
;
4636 } FS_FILTER_CALLBACK_DATA
, *PFS_FILTER_CALLBACK_DATA
;
4639 (NTAPI
*PFS_FILTER_CALLBACK
) (
4640 IN PFS_FILTER_CALLBACK_DATA Data
,
4641 OUT PVOID
*CompletionContext
);
4644 (NTAPI
*PFS_FILTER_COMPLETION_CALLBACK
) (
4645 IN PFS_FILTER_CALLBACK_DATA Data
,
4646 IN NTSTATUS OperationStatus
,
4647 IN PVOID CompletionContext
);
4649 typedef struct _FS_FILTER_CALLBACKS
{
4650 ULONG SizeOfFsFilterCallbacks
;
4652 PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization
;
4653 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization
;
4654 PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization
;
4655 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization
;
4656 PFS_FILTER_CALLBACK PreAcquireForCcFlush
;
4657 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush
;
4658 PFS_FILTER_CALLBACK PreReleaseForCcFlush
;
4659 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush
;
4660 PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter
;
4661 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter
;
4662 PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter
;
4663 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter
;
4664 } FS_FILTER_CALLBACKS
, *PFS_FILTER_CALLBACKS
;
4666 #if (NTDDI_VERSION >= NTDDI_WINXP)
4670 FsRtlRegisterFileSystemFilterCallbacks(
4671 IN
struct _DRIVER_OBJECT
*FilterDriverObject
,
4672 IN PFS_FILTER_CALLBACKS Callbacks
);
4673 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4675 #if (NTDDI_VERSION >= NTDDI_VISTA)
4679 FsRtlNotifyStreamFileObject(
4680 IN
struct _FILE_OBJECT
* StreamFileObject
,
4681 IN
struct _DEVICE_OBJECT
*DeviceObjectHint OPTIONAL
,
4682 IN FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType
,
4683 IN BOOLEAN SafeToRecurse
);
4684 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4686 #define DO_VERIFY_VOLUME 0x00000002
4687 #define DO_BUFFERED_IO 0x00000004
4688 #define DO_EXCLUSIVE 0x00000008
4689 #define DO_DIRECT_IO 0x00000010
4690 #define DO_MAP_IO_BUFFER 0x00000020
4691 #define DO_DEVICE_HAS_NAME 0x00000040
4692 #define DO_DEVICE_INITIALIZING 0x00000080
4693 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
4694 #define DO_LONG_TERM_REQUESTS 0x00000200
4695 #define DO_NEVER_LAST_DEVICE 0x00000400
4696 #define DO_SHUTDOWN_REGISTERED 0x00000800
4697 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
4698 #define DO_POWER_PAGABLE 0x00002000
4699 #define DO_POWER_INRUSH 0x00004000
4700 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
4701 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
4702 #define DO_FORCE_NEITHER_IO 0x00080000
4703 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
4704 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
4705 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
4706 #define DO_DISALLOW_EXECUTE 0x00800000
4708 extern KSPIN_LOCK IoStatisticsLock
;
4709 extern ULONG IoReadOperationCount
;
4710 extern ULONG IoWriteOperationCount
;
4711 extern ULONG IoOtherOperationCount
;
4712 extern LARGE_INTEGER IoReadTransferCount
;
4713 extern LARGE_INTEGER IoWriteTransferCount
;
4714 extern LARGE_INTEGER IoOtherTransferCount
;
4716 #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64
4717 #define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024
4719 #if (NTDDI_VERSION >= NTDDI_VISTA)
4720 typedef struct _IO_PRIORITY_INFO
{
4722 ULONG ThreadPriority
;
4724 IO_PRIORITY_HINT IoPriority
;
4725 } IO_PRIORITY_INFO
, *PIO_PRIORITY_INFO
;
4728 typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION
{
4730 ACCESS_MASK GrantedAccess
;
4734 } PUBLIC_OBJECT_BASIC_INFORMATION
, *PPUBLIC_OBJECT_BASIC_INFORMATION
;
4736 typedef struct _PUBLIC_OBJECT_TYPE_INFORMATION
{
4737 UNICODE_STRING TypeName
;
4738 ULONG Reserved
[22];
4739 } PUBLIC_OBJECT_TYPE_INFORMATION
, *PPUBLIC_OBJECT_TYPE_INFORMATION
;
4741 typedef struct _SECURITY_CLIENT_CONTEXT
{
4742 SECURITY_QUALITY_OF_SERVICE SecurityQos
;
4743 PACCESS_TOKEN ClientToken
;
4744 BOOLEAN DirectlyAccessClientToken
;
4745 BOOLEAN DirectAccessEffectiveOnly
;
4746 BOOLEAN ServerIsRemote
;
4747 TOKEN_CONTROL ClientTokenControl
;
4748 } SECURITY_CLIENT_CONTEXT
, *PSECURITY_CLIENT_CONTEXT
;
4750 #define SYSTEM_PAGE_PRIORITY_BITS 3
4751 #define SYSTEM_PAGE_PRIORITY_LEVELS (1 << SYSTEM_PAGE_PRIORITY_BITS)
4753 typedef struct _KAPC_STATE
{
4754 LIST_ENTRY ApcListHead
[MaximumMode
];
4756 BOOLEAN KernelApcInProgress
;
4757 BOOLEAN KernelApcPending
;
4758 BOOLEAN UserApcPending
;
4759 } KAPC_STATE
, *PKAPC_STATE
, *RESTRICTED_POINTER PRKAPC_STATE
;
4761 #define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
4763 #define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
4765 typedef struct _KQUEUE
{
4766 DISPATCHER_HEADER Header
;
4767 LIST_ENTRY EntryListHead
;
4768 volatile ULONG CurrentCount
;
4770 LIST_ENTRY ThreadListHead
;
4771 } KQUEUE
, *PKQUEUE
, *RESTRICTED_POINTER PRKQUEUE
;
4773 /******************************************************************************
4774 * Kernel Functions *
4775 ******************************************************************************/
4779 KeGetProcessorNumberFromIndex(
4781 OUT PPROCESSOR_NUMBER ProcNumber
);
4785 KeGetProcessorIndexFromNumber(
4786 IN PPROCESSOR_NUMBER ProcNumber
);
4788 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4797 OUT PRKMUTANT Mutant
,
4798 IN BOOLEAN InitialOwner
);
4804 IN PRKMUTANT Mutant
);
4810 IN OUT PRKMUTANT Mutant
,
4811 IN KPRIORITY Increment
,
4812 IN BOOLEAN Abandoned
,
4832 IN OUT PRKQUEUE Queue
,
4833 IN OUT PLIST_ENTRY Entry
);
4839 IN OUT PRKQUEUE Queue
,
4840 IN OUT PLIST_ENTRY Entry
);
4846 IN OUT PRKQUEUE Queue
,
4847 IN KPROCESSOR_MODE WaitMode
,
4848 IN PLARGE_INTEGER Timeout OPTIONAL
);
4854 IN OUT PKPROCESS Process
);
4866 IN OUT PRKQUEUE Queue
);
4871 KeStackAttachProcess(
4872 IN OUT PKPROCESS Process
,
4873 OUT PKAPC_STATE ApcState
);
4878 KeUnstackDetachProcess(
4879 IN PKAPC_STATE ApcState
);
4884 KeSetIdealProcessorThread(
4885 IN OUT PKTHREAD Thread
,
4886 IN UCHAR Processor
);
4891 KeSetKernelStackSwapEnable(
4898 KeAcquireSpinLockRaiseToSynch(
4899 IN OUT PKSPIN_LOCK SpinLock
);
4903 KeAcquireSpinLockRaiseToSynch(
4904 IN OUT PKSPIN_LOCK SpinLock
);
4907 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4909 #if (NTDDI_VERSION >= NTDDI_WINXP)
4915 KeAcquireQueuedSpinLock(
4916 IN OUT KSPIN_LOCK_QUEUE_NUMBER Number
);
4921 KeReleaseQueuedSpinLock(
4922 IN OUT KSPIN_LOCK_QUEUE_NUMBER Number
,
4928 KeTryToAcquireQueuedSpinLock(
4929 IN KSPIN_LOCK_QUEUE_NUMBER Number
,
4930 OUT PKIRQL OldIrql
);
4932 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4938 #if (NTDDI_VERSION >= NTDDI_VISTA)
4944 OUT PCLIENT_ID ClientId
);
4949 IN OUT PKQUEUE Queue
,
4950 IN KPROCESSOR_MODE WaitMode
,
4951 IN BOOLEAN Alertable
,
4952 IN PLARGE_INTEGER Timeout OPTIONAL
,
4953 OUT PLIST_ENTRY
*EntryArray
,
4956 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4960 /******************************************************************************
4961 * Executive Functions *
4962 ******************************************************************************/
4965 #define ExDisableResourceBoost ExDisableResourceBoostLite
4968 ExInitializePushLock (
4969 OUT PEX_PUSH_LOCK PushLock
);
4971 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4976 ExQueryPoolBlockSize(
4978 OUT PBOOLEAN QuotaCharged
);
4981 ExAdjustLookasideDepth(
4987 ExDisableResourceBoostLite(
4988 IN PERESOURCE Resource
);
4989 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4991 #if (NTDDI_VERSION >= NTDDI_WINXP)
4995 InterlockedPushListSList(
4996 IN OUT PSLIST_HEADER ListHead
,
4997 IN OUT PSLIST_ENTRY List
,
4998 IN OUT PSLIST_ENTRY ListEnd
,
5000 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5002 /******************************************************************************
5003 * Security Manager Functions *
5004 ******************************************************************************/
5006 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5012 SeReleaseSubjectContext(
5013 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
);
5019 IN OUT PPRIVILEGE_SET RequiredPrivileges
,
5020 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
5021 IN KPROCESSOR_MODE AccessMode
);
5026 SeOpenObjectAuditAlarm(
5027 IN PUNICODE_STRING ObjectTypeName
,
5028 IN PVOID Object OPTIONAL
,
5029 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL
,
5030 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5031 IN PACCESS_STATE AccessState
,
5032 IN BOOLEAN ObjectCreated
,
5033 IN BOOLEAN AccessGranted
,
5034 IN KPROCESSOR_MODE AccessMode
,
5035 OUT PBOOLEAN GenerateOnClose
);
5040 SeOpenObjectForDeleteAuditAlarm(
5041 IN PUNICODE_STRING ObjectTypeName
,
5042 IN PVOID Object OPTIONAL
,
5043 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL
,
5044 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5045 IN PACCESS_STATE AccessState
,
5046 IN BOOLEAN ObjectCreated
,
5047 IN BOOLEAN AccessGranted
,
5048 IN KPROCESSOR_MODE AccessMode
,
5049 OUT PBOOLEAN GenerateOnClose
);
5054 SeDeleteObjectAuditAlarm(
5062 IN PACCESS_TOKEN Token
);
5068 IN PACCESS_TOKEN Token
);
5073 SeTokenIsRestricted(
5074 IN PACCESS_TOKEN Token
);
5079 SeQueryAuthenticationIdToken(
5080 IN PACCESS_TOKEN Token
,
5081 OUT PLUID AuthenticationId
);
5086 SeQuerySessionIdToken(
5087 IN PACCESS_TOKEN Token
,
5088 OUT PULONG SessionId
);
5093 SeCreateClientSecurity(
5094 IN PETHREAD ClientThread
,
5095 IN PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos
,
5096 IN BOOLEAN RemoteSession
,
5097 OUT PSECURITY_CLIENT_CONTEXT ClientContext
);
5102 SeImpersonateClient(
5103 IN PSECURITY_CLIENT_CONTEXT ClientContext
,
5104 IN PETHREAD ServerThread OPTIONAL
);
5109 SeImpersonateClientEx(
5110 IN PSECURITY_CLIENT_CONTEXT ClientContext
,
5111 IN PETHREAD ServerThread OPTIONAL
);
5116 SeCreateClientSecurityFromSubjectContext(
5117 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
5118 IN PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos
,
5119 IN BOOLEAN ServerIsRemote
,
5120 OUT PSECURITY_CLIENT_CONTEXT ClientContext
);
5125 SeQuerySecurityDescriptorInfo(
5126 IN PSECURITY_INFORMATION SecurityInformation
,
5127 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
5128 IN OUT PULONG Length
,
5129 IN OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
);
5134 SeSetSecurityDescriptorInfo(
5135 IN PVOID Object OPTIONAL
,
5136 IN PSECURITY_INFORMATION SecurityInformation
,
5137 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5138 IN OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
5139 IN POOL_TYPE PoolType
,
5140 IN PGENERIC_MAPPING GenericMapping
);
5145 SeSetSecurityDescriptorInfoEx(
5146 IN PVOID Object OPTIONAL
,
5147 IN PSECURITY_INFORMATION SecurityInformation
,
5148 IN PSECURITY_DESCRIPTOR ModificationDescriptor
,
5149 IN OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
5150 IN ULONG AutoInheritFlags
,
5151 IN POOL_TYPE PoolType
,
5152 IN PGENERIC_MAPPING GenericMapping
);
5158 IN OUT PACCESS_STATE AccessState
,
5159 IN PPRIVILEGE_SET Privileges
);
5164 SeAuditingFileEvents(
5165 IN BOOLEAN AccessGranted
,
5166 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
5171 SeAuditingFileOrGlobalEvents(
5172 IN BOOLEAN AccessGranted
,
5173 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5174 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext
);
5178 SeSetAccessStateGenericMapping(
5179 IN OUT PACCESS_STATE AccessState
,
5180 IN PGENERIC_MAPPING GenericMapping
);
5185 SeRegisterLogonSessionTerminatedRoutine(
5186 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
);
5191 SeUnregisterLogonSessionTerminatedRoutine(
5192 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
);
5197 SeMarkLogonSessionForTerminationNotification(
5203 SeQueryInformationToken(
5204 IN PACCESS_TOKEN Token
,
5205 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
5206 OUT PVOID
*TokenInformation
);
5208 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5209 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
5213 SeAuditingHardLinkEvents(
5214 IN BOOLEAN AccessGranted
,
5215 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
5218 #if (NTDDI_VERSION >= NTDDI_WINXP)
5224 IN PACCESS_TOKEN ExistingToken
,
5226 IN PTOKEN_GROUPS SidsToDisable OPTIONAL
,
5227 IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL
,
5228 IN PTOKEN_GROUPS RestrictedSids OPTIONAL
,
5229 OUT PACCESS_TOKEN
*FilteredToken
);
5234 SeAuditHardLinkCreation(
5235 IN PUNICODE_STRING FileName
,
5236 IN PUNICODE_STRING LinkName
,
5237 IN BOOLEAN bSuccess
);
5239 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5241 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
5246 SeAuditingFileEventsWithContext(
5247 IN BOOLEAN AccessGranted
,
5248 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5249 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL
);
5254 SeAuditingHardLinkEventsWithContext(
5255 IN BOOLEAN AccessGranted
,
5256 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5257 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL
);
5262 #if (NTDDI_VERSION >= NTDDI_VISTA)
5267 SeOpenObjectAuditAlarmWithTransaction(
5268 IN PUNICODE_STRING ObjectTypeName
,
5269 IN PVOID Object OPTIONAL
,
5270 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL
,
5271 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5272 IN PACCESS_STATE AccessState
,
5273 IN BOOLEAN ObjectCreated
,
5274 IN BOOLEAN AccessGranted
,
5275 IN KPROCESSOR_MODE AccessMode
,
5276 IN GUID
*TransactionId OPTIONAL
,
5277 OUT PBOOLEAN GenerateOnClose
);
5282 SeOpenObjectForDeleteAuditAlarmWithTransaction(
5283 IN PUNICODE_STRING ObjectTypeName
,
5284 IN PVOID Object OPTIONAL
,
5285 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL
,
5286 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5287 IN PACCESS_STATE AccessState
,
5288 IN BOOLEAN ObjectCreated
,
5289 IN BOOLEAN AccessGranted
,
5290 IN KPROCESSOR_MODE AccessMode
,
5291 IN GUID
*TransactionId OPTIONAL
,
5292 OUT PBOOLEAN GenerateOnClose
);
5299 IN PACCESS_TOKEN Token
,
5300 IN ACCESS_MASK DesiredAccess
,
5301 IN BOOLEAN AccessGranted
,
5302 OUT PBOOLEAN GenerateAudit
,
5303 OUT PBOOLEAN GenerateAlarm
);
5308 SeDeleteObjectAuditAlarmWithTransaction(
5311 IN GUID
*TransactionId OPTIONAL
);
5316 SeQueryTokenIntegrity(
5317 IN PACCESS_TOKEN Token
,
5318 IN OUT PSID_AND_ATTRIBUTES IntegritySA
);
5323 SeSetSessionIdToken(
5324 IN PACCESS_TOKEN Token
,
5325 IN ULONG SessionId
);
5330 SeAuditHardLinkCreationWithTransaction(
5331 IN PUNICODE_STRING FileName
,
5332 IN PUNICODE_STRING LinkName
,
5333 IN BOOLEAN bSuccess
,
5334 IN GUID
*TransactionId OPTIONAL
);
5339 SeAuditTransactionStateChange(
5340 IN GUID
*TransactionId
,
5341 IN GUID
*ResourceManagerId
,
5342 IN ULONG NewTransactionState
);
5343 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5345 #if (NTDDI_VERSION >= NTDDI_VISTA || (NTDDI_VERSION >= NTDDI_WINXPSP2 && NTDDI_VERSION < NTDDI_WS03))
5349 SeTokenIsWriteRestricted(
5350 IN PACCESS_TOKEN Token
);
5353 #if (NTDDI_VERSION >= NTDDI_WIN7)
5358 SeAuditingAnyFileEventsWithContext(
5359 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5360 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL
);
5365 SeExamineGlobalSacl(
5366 IN PUNICODE_STRING ObjectType
,
5367 IN PACCESS_TOKEN Token
,
5368 IN ACCESS_MASK DesiredAccess
,
5369 IN BOOLEAN AccessGranted
,
5370 IN OUT PBOOLEAN GenerateAudit
,
5371 IN OUT PBOOLEAN GenerateAlarm OPTIONAL
);
5376 SeMaximumAuditMaskFromGlobalSacl(
5377 IN PUNICODE_STRING ObjectTypeName OPTIONAL
,
5378 IN ACCESS_MASK GrantedAccess
,
5379 IN PACCESS_TOKEN Token
,
5380 IN OUT PACCESS_MASK AuditMask
);
5382 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5386 SeReportSecurityEventWithSubCategory(
5388 IN PUNICODE_STRING SourceName
,
5389 IN PSID UserSid OPTIONAL
,
5390 IN PSE_ADT_PARAMETER_ARRAY AuditParameters
,
5391 IN ULONG AuditSubcategoryId
);
5395 SeAccessCheckFromState(
5396 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
5397 IN PTOKEN_ACCESS_INFORMATION PrimaryTokenInformation
,
5398 IN PTOKEN_ACCESS_INFORMATION ClientTokenInformation OPTIONAL
,
5399 IN ACCESS_MASK DesiredAccess
,
5400 IN ACCESS_MASK PreviouslyGrantedAccess
,
5401 OUT PPRIVILEGE_SET
*Privileges OPTIONAL
,
5402 IN PGENERIC_MAPPING GenericMapping
,
5403 IN KPROCESSOR_MODE AccessMode
,
5404 OUT PACCESS_MASK GrantedAccess
,
5405 OUT PNTSTATUS AccessStatus
);
5411 IN PPRIVILEGE_SET Privileges
);
5415 SeLocateProcessImageName(
5416 IN OUT PEPROCESS Process
,
5417 OUT PUNICODE_STRING
*pImageFileName
);
5419 #define SeLengthSid( Sid ) \
5420 (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
5422 #define SeDeleteClientSecurity(C) { \
5423 if (SeTokenType((C)->ClientToken) == TokenPrimary) { \
5424 PsDereferencePrimaryToken( (C)->ClientToken ); \
5426 PsDereferenceImpersonationToken( (C)->ClientToken ); \
5430 #define SeStopImpersonatingClient() PsRevertToSelf()
5432 #define SeQuerySubjectContextToken( SubjectContext ) \
5433 ( ARGUMENT_PRESENT( \
5434 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken \
5436 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken : \
5437 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
5439 extern NTKERNELAPI PSE_EXPORTS SeExports
;
5440 /******************************************************************************
5441 * Process Manager Functions *
5442 ******************************************************************************/
5447 PsLookupProcessByProcessId(
5448 IN HANDLE ProcessId
,
5449 OUT PEPROCESS
*Process
);
5454 PsLookupThreadByThreadId(
5455 IN HANDLE UniqueThreadId
,
5456 OUT PETHREAD
*Thread
);
5458 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5464 PsReferenceImpersonationToken(
5465 IN OUT PETHREAD Thread
,
5466 OUT PBOOLEAN CopyOnOpen
,
5467 OUT PBOOLEAN EffectiveOnly
,
5468 OUT PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel
);
5473 PsGetProcessExitTime(VOID
);
5478 PsIsThreadTerminating(
5479 IN PETHREAD Thread
);
5484 PsImpersonateClient(
5485 IN OUT PETHREAD Thread
,
5486 IN PACCESS_TOKEN Token
,
5487 IN BOOLEAN CopyOnOpen
,
5488 IN BOOLEAN EffectiveOnly
,
5489 IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
);
5494 PsDisableImpersonation(
5495 IN OUT PETHREAD Thread
,
5496 IN OUT PSE_IMPERSONATION_STATE ImpersonationState
);
5501 PsRestoreImpersonation(
5503 IN PSE_IMPERSONATION_STATE ImpersonationState
);
5508 PsRevertToSelf(VOID
);
5514 IN PEPROCESS Process
,
5515 IN POOL_TYPE PoolType
,
5516 IN ULONG_PTR Amount
);
5522 IN PEPROCESS Process
,
5523 IN POOL_TYPE PoolType
,
5524 IN ULONG_PTR Amount
);
5529 PsAssignImpersonationToken(
5531 IN HANDLE Token OPTIONAL
);
5536 PsReferencePrimaryToken(
5537 IN OUT PEPROCESS Process
);
5538 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5539 #if (NTDDI_VERSION >= NTDDI_WINXP)
5545 PsDereferencePrimaryToken(
5546 IN PACCESS_TOKEN PrimaryToken
);
5551 PsDereferenceImpersonationToken(
5552 IN PACCESS_TOKEN ImpersonationToken
);
5557 PsChargeProcessPoolQuota(
5558 IN PEPROCESS Process
,
5559 IN POOL_TYPE PoolType
,
5560 IN ULONG_PTR Amount
);
5566 IN PETHREAD Thread
);
5567 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5569 /******************************************************************************
5570 * I/O Manager Functions *
5571 ******************************************************************************/
5573 #define IoIsFileOpenedExclusively(FileObject) ( \
5575 (FileObject)->SharedRead || \
5576 (FileObject)->SharedWrite || \
5577 (FileObject)->SharedDelete \
5581 #if (NTDDI_VERSION == NTDDI_WIN2K)
5585 IoRegisterFsRegistrationChangeEx(
5586 IN PDRIVER_OBJECT DriverObject
,
5587 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
);
5589 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5595 IoAcquireVpbSpinLock(
5601 IoCheckDesiredAccess(
5602 IN OUT PACCESS_MASK DesiredAccess
,
5603 IN ACCESS_MASK GrantedAccess
);
5608 IoCheckEaBufferValidity(
5609 IN PFILE_FULL_EA_INFORMATION EaBuffer
,
5611 OUT PULONG ErrorOffset
);
5616 IoCheckFunctionAccess(
5617 IN ACCESS_MASK GrantedAccess
,
5618 IN UCHAR MajorFunction
,
5619 IN UCHAR MinorFunction
,
5620 IN ULONG IoControlCode
,
5621 IN PVOID Argument1 OPTIONAL
,
5622 IN PVOID Argument2 OPTIONAL
);
5627 IoCheckQuerySetFileInformation(
5628 IN FILE_INFORMATION_CLASS FileInformationClass
,
5630 IN BOOLEAN SetOperation
);
5635 IoCheckQuerySetVolumeInformation(
5636 IN FS_INFORMATION_CLASS FsInformationClass
,
5638 IN BOOLEAN SetOperation
);
5643 IoCheckQuotaBufferValidity(
5644 IN PFILE_QUOTA_INFORMATION QuotaBuffer
,
5645 IN ULONG QuotaLength
,
5646 OUT PULONG ErrorOffset
);
5651 IoCreateStreamFileObject(
5652 IN PFILE_OBJECT FileObject OPTIONAL
,
5653 IN PDEVICE_OBJECT DeviceObject OPTIONAL
);
5658 IoCreateStreamFileObjectLite(
5659 IN PFILE_OBJECT FileObject OPTIONAL
,
5660 IN PDEVICE_OBJECT DeviceObject OPTIONAL
);
5665 IoFastQueryNetworkAttributes(
5666 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5667 IN ACCESS_MASK DesiredAccess
,
5668 IN ULONG OpenOptions
,
5669 OUT PIO_STATUS_BLOCK IoStatus
,
5670 OUT PFILE_NETWORK_OPEN_INFORMATION Buffer
);
5676 IN PFILE_OBJECT FileObject
,
5678 IN PLARGE_INTEGER Offset
,
5680 OUT PIO_STATUS_BLOCK IoStatusBlock
);
5685 IoGetBaseFileSystemDeviceObject(
5686 IN PFILE_OBJECT FileObject
);
5689 PCONFIGURATION_INFORMATION
5691 IoGetConfigurationInformation(VOID
);
5696 IoGetRequestorProcessId(
5702 IoGetRequestorProcess(
5708 IoGetTopLevelIrp(VOID
);
5713 IoIsOperationSynchronous(
5720 IN PETHREAD Thread
);
5725 IoIsValidNameGraftingBuffer(
5727 IN PREPARSE_DATA_BUFFER ReparseBuffer
);
5732 IoQueryFileInformation(
5733 IN PFILE_OBJECT FileObject
,
5734 IN FILE_INFORMATION_CLASS FileInformationClass
,
5736 OUT PVOID FileInformation
,
5737 OUT PULONG ReturnedLength
);
5742 IoQueryVolumeInformation(
5743 IN PFILE_OBJECT FileObject
,
5744 IN FS_INFORMATION_CLASS FsInformationClass
,
5746 OUT PVOID FsInformation
,
5747 OUT PULONG ReturnedLength
);
5758 IoRegisterFileSystem(
5759 IN PDEVICE_OBJECT DeviceObject
);
5764 IoRegisterFsRegistrationChange(
5765 IN PDRIVER_OBJECT DriverObject
,
5766 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
);
5771 IoReleaseVpbSpinLock(
5777 IoSetDeviceToVerify(
5779 IN PDEVICE_OBJECT DeviceObject OPTIONAL
);
5785 IN PFILE_OBJECT FileObject
,
5786 IN FILE_INFORMATION_CLASS FileInformationClass
,
5788 IN PVOID FileInformation
);
5794 IN PIRP Irp OPTIONAL
);
5799 IoSynchronousPageWrite(
5800 IN PFILE_OBJECT FileObject
,
5802 IN PLARGE_INTEGER FileOffset
,
5804 OUT PIO_STATUS_BLOCK IoStatusBlock
);
5810 IN PETHREAD Thread
);
5815 IoUnregisterFileSystem(
5816 IN PDEVICE_OBJECT DeviceObject
);
5821 IoUnregisterFsRegistrationChange(
5822 IN PDRIVER_OBJECT DriverObject
,
5823 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
);
5829 IN PDEVICE_OBJECT DeviceObject
,
5830 IN BOOLEAN AllowRawMount
);
5835 IoGetRequestorSessionId(
5837 OUT PULONG pSessionId
);
5839 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5842 #if (NTDDI_VERSION >= NTDDI_WINXP)
5848 IoCreateStreamFileObjectEx(
5849 IN PFILE_OBJECT FileObject OPTIONAL
,
5850 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
5851 OUT PHANDLE FileObjectHandle OPTIONAL
);
5856 IoQueryFileDosDeviceName(
5857 IN PFILE_OBJECT FileObject
,
5858 OUT POBJECT_NAME_INFORMATION
*ObjectNameInformation
);
5863 IoEnumerateDeviceObjectList(
5864 IN PDRIVER_OBJECT DriverObject
,
5865 OUT PDEVICE_OBJECT
*DeviceObjectList
,
5866 IN ULONG DeviceObjectListSize
,
5867 OUT PULONG ActualNumberDeviceObjects
);
5872 IoGetLowerDeviceObject(
5873 IN PDEVICE_OBJECT DeviceObject
);
5878 IoGetDeviceAttachmentBaseRef(
5879 IN PDEVICE_OBJECT DeviceObject
);
5884 IoGetDiskDeviceObject(
5885 IN PDEVICE_OBJECT FileSystemDeviceObject
,
5886 OUT PDEVICE_OBJECT
*DiskDeviceObject
);
5888 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5890 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
5896 IoEnumerateRegisteredFiltersList(
5897 OUT PDRIVER_OBJECT
*DriverObjectList
,
5898 IN ULONG DriverObjectListSize
,
5899 OUT PULONG ActualNumberDriverObjects
);
5900 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
5902 #if (NTDDI_VERSION >= NTDDI_VISTA)
5907 IoInitializePriorityInfo(
5908 IN PIO_PRIORITY_INFO PriorityInfo
)
5910 PriorityInfo
->Size
= sizeof(IO_PRIORITY_INFO
);
5911 PriorityInfo
->ThreadPriority
= 0xffff;
5912 PriorityInfo
->IoPriority
= IoPriorityNormal
;
5913 PriorityInfo
->PagePriority
= 0;
5915 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
5917 #if (NTDDI_VERSION >= NTDDI_WIN7)
5923 IoRegisterFsRegistrationChangeMountAware(
5924 IN PDRIVER_OBJECT DriverObject
,
5925 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
,
5926 IN BOOLEAN SynchronizeWithMounts
);
5931 IoReplaceFileObjectName(
5932 IN PFILE_OBJECT FileObject
,
5933 IN PWSTR NewFileName
,
5934 IN USHORT FileNameLength
);
5935 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5938 #define PO_CB_SYSTEM_POWER_POLICY 0
5939 #define PO_CB_AC_STATUS 1
5940 #define PO_CB_BUTTON_COLLISION 2
5941 #define PO_CB_SYSTEM_STATE_LOCK 3
5942 #define PO_CB_LID_SWITCH_STATE 4
5943 #define PO_CB_PROCESSOR_POWER_POLICY 5
5946 #if (NTDDI_VERSION >= NTDDI_WINXP)
5950 PoQueueShutdownWorkItem(
5951 IN OUT PWORK_QUEUE_ITEM WorkItem
);
5953 /******************************************************************************
5954 * Memory manager Types *
5955 ******************************************************************************/
5956 typedef enum _MMFLUSH_TYPE
{
5961 typedef struct _READ_LIST
{
5962 PFILE_OBJECT FileObject
;
5963 ULONG NumberOfEntries
;
5965 FILE_SEGMENT_ELEMENT List
[ANYSIZE_ARRAY
];
5966 } READ_LIST
, *PREAD_LIST
;
5968 #if (NTDDI_VERSION >= NTDDI_WINXP)
5970 typedef union _MM_PREFETCH_FLAGS
{
5972 ULONG Priority
: SYSTEM_PAGE_PRIORITY_BITS
;
5973 ULONG RepurposePriority
: SYSTEM_PAGE_PRIORITY_BITS
;
5976 } MM_PREFETCH_FLAGS
, *PMM_PREFETCH_FLAGS
;
5978 #define MM_PREFETCH_FLAGS_MASK ((1 << (2*SYSTEM_PAGE_PRIORITY_BITS)) - 1)
5980 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
5982 #define HEAP_NO_SERIALIZE 0x00000001
5983 #define HEAP_GROWABLE 0x00000002
5984 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
5985 #define HEAP_ZERO_MEMORY 0x00000008
5986 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
5987 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
5988 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
5989 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
5991 #define HEAP_CREATE_ALIGN_16 0x00010000
5992 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
5993 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
5995 #define HEAP_SETTABLE_USER_VALUE 0x00000100
5996 #define HEAP_SETTABLE_USER_FLAG1 0x00000200
5997 #define HEAP_SETTABLE_USER_FLAG2 0x00000400
5998 #define HEAP_SETTABLE_USER_FLAG3 0x00000800
5999 #define HEAP_SETTABLE_USER_FLAGS 0x00000E00
6001 #define HEAP_CLASS_0 0x00000000
6002 #define HEAP_CLASS_1 0x00001000
6003 #define HEAP_CLASS_2 0x00002000
6004 #define HEAP_CLASS_3 0x00003000
6005 #define HEAP_CLASS_4 0x00004000
6006 #define HEAP_CLASS_5 0x00005000
6007 #define HEAP_CLASS_6 0x00006000
6008 #define HEAP_CLASS_7 0x00007000
6009 #define HEAP_CLASS_8 0x00008000
6010 #define HEAP_CLASS_MASK 0x0000F000
6012 #define HEAP_MAXIMUM_TAG 0x0FFF
6013 #define HEAP_GLOBAL_TAG 0x0800
6014 #define HEAP_PSEUDO_TAG_FLAG 0x8000
6015 #define HEAP_TAG_SHIFT 18
6016 #define HEAP_TAG_MASK (HEAP_MAXIMUM_TAG << HEAP_TAG_SHIFT)
6018 #define HEAP_CREATE_VALID_MASK (HEAP_NO_SERIALIZE | \
6020 HEAP_GENERATE_EXCEPTIONS | \
6021 HEAP_ZERO_MEMORY | \
6022 HEAP_REALLOC_IN_PLACE_ONLY | \
6023 HEAP_TAIL_CHECKING_ENABLED | \
6024 HEAP_FREE_CHECKING_ENABLED | \
6025 HEAP_DISABLE_COALESCE_ON_FREE | \
6027 HEAP_CREATE_ALIGN_16 | \
6028 HEAP_CREATE_ENABLE_TRACING | \
6029 HEAP_CREATE_ENABLE_EXECUTE)
6031 /******************************************************************************
6032 * Memory manager Functions *
6033 ******************************************************************************/
6037 HEAP_MAKE_TAG_FLAGS(
6041 //__assume_bound(TagBase); // FIXME
6042 return ((ULONG
)((TagBase
) + ((Tag
) << HEAP_TAG_SHIFT
)));
6045 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6050 MmIsRecursiveIoFault(
6056 MmForceSectionClosed(
6057 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
6058 IN BOOLEAN DelayClose
);
6063 MmFlushImageSection(
6064 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
6065 IN MMFLUSH_TYPE FlushType
);
6070 MmCanFileBeTruncated(
6071 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
6072 IN PLARGE_INTEGER NewFileSize OPTIONAL
);
6077 MmSetAddressRangeModified(
6081 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
6083 #if (NTDDI_VERSION >= NTDDI_WINXP)
6090 IN ULONG NumberOfLists
,
6091 IN PREAD_LIST
*ReadLists
);
6093 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
6096 #if (NTDDI_VERSION >= NTDDI_VISTA)
6101 MmDoesFileHaveUserWritableReferences(
6102 IN PSECTION_OBJECT_POINTERS SectionPointer
);
6103 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
6106 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6113 IN OUT PACCESS_STATE PassedAccessState OPTIONAL
,
6114 IN ACCESS_MASK DesiredAccess OPTIONAL
,
6115 IN ULONG ObjectPointerBias
,
6116 OUT PVOID
*NewObject OPTIONAL
,
6117 OUT PHANDLE Handle OPTIONAL
);
6122 ObOpenObjectByPointer(
6124 IN ULONG HandleAttributes
,
6125 IN PACCESS_STATE PassedAccessState OPTIONAL
,
6126 IN ACCESS_MASK DesiredAccess OPTIONAL
,
6127 IN POBJECT_TYPE ObjectType OPTIONAL
,
6128 IN KPROCESSOR_MODE AccessMode
,
6129 OUT PHANDLE Handle
);
6134 ObMakeTemporaryObject(
6142 OUT POBJECT_NAME_INFORMATION ObjectNameInfo OPTIONAL
,
6144 OUT PULONG ReturnLength
);
6149 ObQueryObjectAuditingByHandle(
6151 OUT PBOOLEAN GenerateOnClose
);
6152 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
6154 #if (NTDDI_VERSION >= NTDDI_VISTA)
6164 #if (NTDDI_VERSION >= NTDDI_WIN7)
6169 ObOpenObjectByPointerWithTag(
6171 IN ULONG HandleAttributes
,
6172 IN PACCESS_STATE PassedAccessState OPTIONAL
,
6173 IN ACCESS_MASK DesiredAccess
,
6174 IN POBJECT_TYPE ObjectType OPTIONAL
,
6175 IN KPROCESSOR_MODE AccessMode
,
6177 OUT PHANDLE Handle
);
6178 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
6182 typedef struct _FSRTL_COMMON_FCB_HEADER
{
6183 CSHORT NodeTypeCode
;
6184 CSHORT NodeByteSize
;
6186 UCHAR IsFastIoPossible
;
6190 PERESOURCE Resource
;
6191 PERESOURCE PagingIoResource
;
6192 LARGE_INTEGER AllocationSize
;
6193 LARGE_INTEGER FileSize
;
6194 LARGE_INTEGER ValidDataLength
;
6195 } FSRTL_COMMON_FCB_HEADER
, *PFSRTL_COMMON_FCB_HEADER
;
6198 typedef struct _FSRTL_ADVANCED_FCB_HEADER
:FSRTL_COMMON_FCB_HEADER
{
6199 #else /* __cplusplus */
6200 typedef struct _FSRTL_ADVANCED_FCB_HEADER
{
6201 FSRTL_COMMON_FCB_HEADER DUMMYSTRUCTNAME
;
6202 #endif /* __cplusplus */
6203 PFAST_MUTEX FastMutex
;
6204 LIST_ENTRY FilterContexts
;
6205 #if (NTDDI_VERSION >= NTDDI_VISTA)
6206 EX_PUSH_LOCK PushLock
;
6207 PVOID
*FileContextSupportPointer
;
6209 } FSRTL_ADVANCED_FCB_HEADER
, *PFSRTL_ADVANCED_FCB_HEADER
;
6211 #define FSRTL_FCB_HEADER_V0 (0x00)
6212 #define FSRTL_FCB_HEADER_V1 (0x01)
6214 #define FSRTL_FLAG_FILE_MODIFIED (0x01)
6215 #define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
6216 #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
6217 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
6218 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
6219 #define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
6220 #define FSRTL_FLAG_ADVANCED_HEADER (0x40)
6221 #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
6223 #define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
6224 #define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02)
6225 #define FSRTL_FLAG2_PURGE_WHEN_MAPPED (0x04)
6226 #define FSRTL_FLAG2_IS_PAGING_FILE (0x08)
6228 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
6229 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
6230 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
6231 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
6232 #define FSRTL_NETWORK1_TOP_LEVEL_IRP ((LONG_PTR)0x05)
6233 #define FSRTL_NETWORK2_TOP_LEVEL_IRP ((LONG_PTR)0x06)
6234 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG ((LONG_PTR)0xFFFF)
6236 typedef struct _FSRTL_AUXILIARY_BUFFER
{
6241 } FSRTL_AUXILIARY_BUFFER
, *PFSRTL_AUXILIARY_BUFFER
;
6243 #define FSRTL_AUXILIARY_FLAG_DEALLOCATE 0x00000001
6245 typedef enum _FSRTL_COMPARISON_RESULT
{
6249 } FSRTL_COMPARISON_RESULT
;
6251 #define FSRTL_FAT_LEGAL 0x01
6252 #define FSRTL_HPFS_LEGAL 0x02
6253 #define FSRTL_NTFS_LEGAL 0x04
6254 #define FSRTL_WILD_CHARACTER 0x08
6255 #define FSRTL_OLE_LEGAL 0x10
6256 #define FSRTL_NTFS_STREAM_LEGAL (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL)
6258 #define FSRTL_VOLUME_DISMOUNT 1
6259 #define FSRTL_VOLUME_DISMOUNT_FAILED 2
6260 #define FSRTL_VOLUME_LOCK 3
6261 #define FSRTL_VOLUME_LOCK_FAILED 4
6262 #define FSRTL_VOLUME_UNLOCK 5
6263 #define FSRTL_VOLUME_MOUNT 6
6264 #define FSRTL_VOLUME_NEEDS_CHKDSK 7
6265 #define FSRTL_VOLUME_WORM_NEAR_FULL 8
6266 #define FSRTL_VOLUME_WEARING_OUT 9
6267 #define FSRTL_VOLUME_FORCED_CLOSED 10
6268 #define FSRTL_VOLUME_INFO_MAKE_COMPAT 11
6269 #define FSRTL_VOLUME_PREPARING_EJECT 12
6270 #define FSRTL_VOLUME_CHANGE_SIZE 13
6271 #define FSRTL_VOLUME_BACKGROUND_FORMAT 14
6274 (NTAPI
*PFSRTL_STACK_OVERFLOW_ROUTINE
) (
6278 #if (NTDDI_VERSION >= NTDDI_VISTA)
6280 #define FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED 0x00000001
6281 #define FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED 0x00000002
6282 #define FSRTL_UNC_PROVIDER_FLAGS_DOMAIN_SVC_AWARE 0x00000004
6284 #define FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA 0x00000001
6286 #define FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA 0x00000001
6287 #define FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL 0x00000002
6289 #define FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL 0x00000002
6291 #define FSRTL_VIRTDISK_FULLY_ALLOCATED 0x00000001
6292 #define FSRTL_VIRTDISK_NO_DRIVE_LETTER 0x00000002
6294 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_1
{
6296 } FSRTL_MUP_PROVIDER_INFO_LEVEL_1
, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_1
;
6298 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_2
{
6300 UNICODE_STRING ProviderName
;
6301 } FSRTL_MUP_PROVIDER_INFO_LEVEL_2
, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_2
;
6304 (*PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK
) (
6305 IN OUT PVOID EcpContext
,
6306 IN LPCGUID EcpType
);
6308 typedef struct _ECP_LIST ECP_LIST
, *PECP_LIST
;
6310 typedef ULONG FSRTL_ALLOCATE_ECPLIST_FLAGS
;
6311 typedef ULONG FSRTL_ALLOCATE_ECP_FLAGS
;
6312 typedef ULONG FSRTL_ECP_LOOKASIDE_FLAGS
;
6314 typedef enum _FSRTL_CHANGE_BACKING_TYPE
{
6315 ChangeDataControlArea
,
6316 ChangeImageControlArea
,
6317 ChangeSharedCacheMap
6318 } FSRTL_CHANGE_BACKING_TYPE
, *PFSRTL_CHANGE_BACKING_TYPE
;
6320 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
6322 typedef struct _FSRTL_PER_FILE_CONTEXT
{
6326 PFREE_FUNCTION FreeCallback
;
6327 } FSRTL_PER_FILE_CONTEXT
, *PFSRTL_PER_FILE_CONTEXT
;
6329 typedef struct _FSRTL_PER_STREAM_CONTEXT
{
6333 PFREE_FUNCTION FreeCallback
;
6334 } FSRTL_PER_STREAM_CONTEXT
, *PFSRTL_PER_STREAM_CONTEXT
;
6336 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6338 (*PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS
) (
6339 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader
);
6342 typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT
{
6346 } FSRTL_PER_FILEOBJECT_CONTEXT
, *PFSRTL_PER_FILEOBJECT_CONTEXT
;
6348 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_HARD_ERROR 0x1
6349 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_LOG_ENTRY 0x2
6350 /* FSRTL Functions */
6352 #define FsRtlEnterFileSystem KeEnterCriticalRegion
6353 #define FsRtlExitFileSystem KeLeaveCriticalRegion
6355 #if (NTDDI_VERSION >= NTDDI_WIN2K)
6361 IN PFILE_OBJECT FileObject
,
6362 IN PLARGE_INTEGER FileOffset
,
6367 OUT PIO_STATUS_BLOCK IoStatus
,
6368 IN PDEVICE_OBJECT DeviceObject
);
6374 IN PFILE_OBJECT FileObject
,
6375 IN PLARGE_INTEGER FileOffset
,
6380 OUT PIO_STATUS_BLOCK IoStatus
,
6381 IN PDEVICE_OBJECT DeviceObject
);
6387 IN PFILE_OBJECT FileObject
,
6388 IN PLARGE_INTEGER FileOffset
,
6392 OUT PIO_STATUS_BLOCK IoStatus
,
6393 IN PDEVICE_OBJECT DeviceObject OPTIONAL
);
6398 FsRtlMdlReadCompleteDev(
6399 IN PFILE_OBJECT FileObject
,
6401 IN PDEVICE_OBJECT DeviceObject OPTIONAL
);
6406 FsRtlPrepareMdlWriteDev(
6407 IN PFILE_OBJECT FileObject
,
6408 IN PLARGE_INTEGER FileOffset
,
6412 OUT PIO_STATUS_BLOCK IoStatus
,
6413 IN PDEVICE_OBJECT DeviceObject
);
6418 FsRtlMdlWriteCompleteDev(
6419 IN PFILE_OBJECT FileObject
,
6420 IN PLARGE_INTEGER FileOffset
,
6422 IN PDEVICE_OBJECT DeviceObject
);
6427 FsRtlAcquireFileExclusive(
6428 IN PFILE_OBJECT FileObject
);
6434 IN PFILE_OBJECT FileObject
);
6440 IN PFILE_OBJECT FileObject
,
6441 OUT PLARGE_INTEGER FileSize
);
6446 FsRtlIsTotalDeviceFailure(
6447 IN NTSTATUS Status
);
6452 FsRtlAllocateFileLock(
6453 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL
,
6454 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
);
6460 IN PFILE_LOCK FileLock
);
6465 FsRtlInitializeFileLock(
6466 IN PFILE_LOCK FileLock
,
6467 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL
,
6468 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
);
6473 FsRtlUninitializeFileLock(
6474 IN PFILE_LOCK FileLock
);
6477 FsRtlProcessFileLock:
6480 -STATUS_INVALID_DEVICE_REQUEST
6481 -STATUS_RANGE_NOT_LOCKED from unlock routines.
6482 -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
6483 (redirected IoStatus->Status).
6486 -switch ( Irp->CurrentStackLocation->MinorFunction )
6487 lock: return FsRtlPrivateLock;
6488 unlocksingle: return FsRtlFastUnlockSingle;
6489 unlockall: return FsRtlFastUnlockAll;
6490 unlockallbykey: return FsRtlFastUnlockAllByKey;
6491 default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
6492 return STATUS_INVALID_DEVICE_REQUEST;
6494 -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
6495 -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
6500 FsRtlProcessFileLock(
6501 IN PFILE_LOCK FileLock
,
6503 IN PVOID Context OPTIONAL
);
6506 FsRtlCheckLockForReadAccess:
6508 All this really does is pick out the lock parameters from the irp (io stack
6509 location?), get IoGetRequestorProcess, and pass values on to
6510 FsRtlFastCheckLockForRead.
6515 FsRtlCheckLockForReadAccess(
6516 IN PFILE_LOCK FileLock
,
6520 FsRtlCheckLockForWriteAccess:
6522 All this really does is pick out the lock parameters from the irp (io stack
6523 location?), get IoGetRequestorProcess, and pass values on to
6524 FsRtlFastCheckLockForWrite.
6529 FsRtlCheckLockForWriteAccess(
6530 IN PFILE_LOCK FileLock
,
6536 FsRtlFastCheckLockForRead(
6537 IN PFILE_LOCK FileLock
,
6538 IN PLARGE_INTEGER FileOffset
,
6539 IN PLARGE_INTEGER Length
,
6541 IN PFILE_OBJECT FileObject
,
6547 FsRtlFastCheckLockForWrite(
6548 IN PFILE_LOCK FileLock
,
6549 IN PLARGE_INTEGER FileOffset
,
6550 IN PLARGE_INTEGER Length
,
6552 IN PFILE_OBJECT FileObject
,
6556 FsRtlGetNextFileLock:
6558 ret: NULL if no more locks
6561 FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
6562 FileLock->LastReturnedLock as storage.
6563 LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
6564 list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
6565 calls with Restart = FALSE.
6570 FsRtlGetNextFileLock(
6571 IN PFILE_LOCK FileLock
,
6572 IN BOOLEAN Restart
);
6577 FsRtlFastUnlockSingle(
6578 IN PFILE_LOCK FileLock
,
6579 IN PFILE_OBJECT FileObject
,
6580 IN PLARGE_INTEGER FileOffset
,
6581 IN PLARGE_INTEGER Length
,
6582 IN PEPROCESS Process
,
6584 IN PVOID Context OPTIONAL
,
6585 IN BOOLEAN AlreadySynchronized
);
6591 IN PFILE_LOCK FileLock
,
6592 IN PFILE_OBJECT FileObject
,
6593 IN PEPROCESS Process
,
6594 IN PVOID Context OPTIONAL
);
6599 FsRtlFastUnlockAllByKey(
6600 IN PFILE_LOCK FileLock
,
6601 IN PFILE_OBJECT FileObject
,
6602 IN PEPROCESS Process
,
6604 IN PVOID Context OPTIONAL
);
6609 ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
6612 -Calls IoCompleteRequest if Irp
6613 -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
6619 IN PFILE_LOCK FileLock
,
6620 IN PFILE_OBJECT FileObject
,
6621 IN PLARGE_INTEGER FileOffset
,
6622 IN PLARGE_INTEGER Length
,
6623 IN PEPROCESS Process
,
6625 IN BOOLEAN FailImmediately
,
6626 IN BOOLEAN ExclusiveLock
,
6627 OUT PIO_STATUS_BLOCK IoStatus
,
6628 IN PIRP Irp OPTIONAL
,
6630 IN BOOLEAN AlreadySynchronized
);
6635 FsRtlInitializeTunnelCache(
6641 FsRtlAddToTunnelCache(
6643 IN ULONGLONG DirectoryKey
,
6644 IN PUNICODE_STRING ShortName
,
6645 IN PUNICODE_STRING LongName
,
6646 IN BOOLEAN KeyByShortName
,
6647 IN ULONG DataLength
,
6653 FsRtlFindInTunnelCache(
6655 IN ULONGLONG DirectoryKey
,
6656 IN PUNICODE_STRING Name
,
6657 OUT PUNICODE_STRING ShortName
,
6658 OUT PUNICODE_STRING LongName
,
6659 IN OUT PULONG DataLength
,
6665 FsRtlDeleteKeyFromTunnelCache(
6667 IN ULONGLONG DirectoryKey
);
6672 FsRtlDeleteTunnelCache(
6679 IN ANSI_STRING Name
,
6680 OUT PANSI_STRING FirstPart
,
6681 OUT PANSI_STRING RemainingPart
);
6686 FsRtlDoesDbcsContainWildCards(
6687 IN PANSI_STRING Name
);
6692 FsRtlIsDbcsInExpression(
6693 IN PANSI_STRING Expression
,
6694 IN PANSI_STRING Name
);
6699 FsRtlIsFatDbcsLegal(
6700 IN ANSI_STRING DbcsName
,
6701 IN BOOLEAN WildCardsPermissible
,
6702 IN BOOLEAN PathNamePermissible
,
6703 IN BOOLEAN LeadingBackslashPermissible
);
6708 FsRtlIsHpfsDbcsLegal(
6709 IN ANSI_STRING DbcsName
,
6710 IN BOOLEAN WildCardsPermissible
,
6711 IN BOOLEAN PathNamePermissible
,
6712 IN BOOLEAN LeadingBackslashPermissible
);
6717 FsRtlNormalizeNtstatus(
6718 IN NTSTATUS Exception
,
6719 IN NTSTATUS GenericException
);
6724 FsRtlIsNtstatusExpected(
6725 IN NTSTATUS Ntstatus
);
6730 FsRtlAllocateResource(
6736 FsRtlInitializeLargeMcb(
6738 IN POOL_TYPE PoolType
);
6743 FsRtlUninitializeLargeMcb(
6751 IN BOOLEAN SelfSynchronized
);
6756 FsRtlTruncateLargeMcb(
6763 FsRtlAddLargeMcbEntry(
6767 IN LONGLONG SectorCount
);
6772 FsRtlRemoveLargeMcbEntry(
6775 IN LONGLONG SectorCount
);
6780 FsRtlLookupLargeMcbEntry(
6783 OUT PLONGLONG Lbn OPTIONAL
,
6784 OUT PLONGLONG SectorCountFromLbn OPTIONAL
,
6785 OUT PLONGLONG StartingLbn OPTIONAL
,
6786 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL
,
6787 OUT PULONG Index OPTIONAL
);
6792 FsRtlLookupLastLargeMcbEntry(
6800 FsRtlLookupLastLargeMcbEntryAndIndex(
6801 IN PLARGE_MCB OpaqueMcb
,
6802 OUT PLONGLONG LargeVbn
,
6803 OUT PLONGLONG LargeLbn
,
6809 FsRtlNumberOfRunsInLargeMcb(
6815 FsRtlGetNextLargeMcbEntry(
6820 OUT PLONGLONG SectorCount
);
6828 IN LONGLONG Amount
);
6835 IN POOL_TYPE PoolType
);
6840 FsRtlUninitializeMcb(
6857 IN ULONG SectorCount
);
6862 FsRtlRemoveMcbEntry(
6865 IN ULONG SectorCount
);
6870 FsRtlLookupMcbEntry(
6874 OUT PULONG SectorCount OPTIONAL
,
6880 FsRtlLookupLastMcbEntry(
6888 FsRtlNumberOfRunsInMcb(
6894 FsRtlGetNextMcbEntry(
6899 OUT PULONG SectorCount
);
6905 IN PDEVICE_OBJECT TargetDevice
);
6910 FsRtlInitializeOplock(
6911 IN OUT POPLOCK Oplock
);
6916 FsRtlUninitializeOplock(
6917 IN OUT POPLOCK Oplock
);
6925 IN ULONG OpenCount
);
6934 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
6935 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
);
6940 FsRtlOplockIsFastIoPossible(
6946 FsRtlCurrentBatchOplock(
6952 FsRtlNotifyVolumeEvent(
6953 IN PFILE_OBJECT FileObject
,
6954 IN ULONG EventCode
);
6959 FsRtlNotifyInitializeSync(
6960 IN PNOTIFY_SYNC
*NotifySync
);
6965 FsRtlNotifyUninitializeSync(
6966 IN PNOTIFY_SYNC
*NotifySync
);
6971 FsRtlNotifyFullChangeDirectory(
6972 IN PNOTIFY_SYNC NotifySync
,
6973 IN PLIST_ENTRY NotifyList
,
6975 IN PSTRING FullDirectoryName
,
6976 IN BOOLEAN WatchTree
,
6977 IN BOOLEAN IgnoreBuffer
,
6978 IN ULONG CompletionFilter
,
6979 IN PIRP NotifyIrp OPTIONAL
,
6980 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL
,
6981 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
);
6986 FsRtlNotifyFilterReportChange(
6987 IN PNOTIFY_SYNC NotifySync
,
6988 IN PLIST_ENTRY NotifyList
,
6989 IN PSTRING FullTargetName
,
6990 IN USHORT TargetNameOffset
,
6991 IN PSTRING StreamName OPTIONAL
,
6992 IN PSTRING NormalizedParentName OPTIONAL
,
6993 IN ULONG FilterMatch
,
6995 IN PVOID TargetContext OPTIONAL
,
6996 IN PVOID FilterContext OPTIONAL
);
7001 FsRtlNotifyFullReportChange(
7002 IN PNOTIFY_SYNC NotifySync
,
7003 IN PLIST_ENTRY NotifyList
,
7004 IN PSTRING FullTargetName
,
7005 IN USHORT TargetNameOffset
,
7006 IN PSTRING StreamName OPTIONAL
,
7007 IN PSTRING NormalizedParentName OPTIONAL
,
7008 IN ULONG FilterMatch
,
7010 IN PVOID TargetContext OPTIONAL
);
7016 IN PNOTIFY_SYNC NotifySync
,
7017 IN PLIST_ENTRY NotifyList
,
7018 IN PVOID FsContext
);
7024 IN UNICODE_STRING Name
,
7025 OUT PUNICODE_STRING FirstPart
,
7026 OUT PUNICODE_STRING RemainingPart
);
7031 FsRtlDoesNameContainWildCards(
7032 IN PUNICODE_STRING Name
);
7038 IN PCUNICODE_STRING Name1
,
7039 IN PCUNICODE_STRING Name2
,
7040 IN BOOLEAN IgnoreCase
,
7041 IN PCWCH UpcaseTable OPTIONAL
);
7046 FsRtlIsNameInExpression(
7047 IN PUNICODE_STRING Expression
,
7048 IN PUNICODE_STRING Name
,
7049 IN BOOLEAN IgnoreCase
,
7050 IN PWCHAR UpcaseTable OPTIONAL
);
7055 FsRtlPostPagingFileStackOverflow(
7058 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
);
7063 FsRtlPostStackOverflow (
7066 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
);
7071 FsRtlRegisterUncProvider(
7072 OUT PHANDLE MupHandle
,
7073 IN PUNICODE_STRING RedirectorDeviceName
,
7074 IN BOOLEAN MailslotsSupported
);
7079 FsRtlDeregisterUncProvider(
7085 FsRtlTeardownPerStreamContexts(
7086 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader
);
7091 FsRtlCreateSectionForDataScan(
7092 OUT PHANDLE SectionHandle
,
7093 OUT PVOID
*SectionObject
,
7094 OUT PLARGE_INTEGER SectionFileSize OPTIONAL
,
7095 IN PFILE_OBJECT FileObject
,
7096 IN ACCESS_MASK DesiredAccess
,
7097 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
7098 IN PLARGE_INTEGER MaximumSize OPTIONAL
,
7099 IN ULONG SectionPageProtection
,
7100 IN ULONG AllocationAttributes
,
7103 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
7105 #if (NTDDI_VERSION >= NTDDI_WINXP)
7110 FsRtlNotifyFilterChangeDirectory(
7111 IN PNOTIFY_SYNC NotifySync
,
7112 IN PLIST_ENTRY NotifyList
,
7114 IN PSTRING FullDirectoryName
,
7115 IN BOOLEAN WatchTree
,
7116 IN BOOLEAN IgnoreBuffer
,
7117 IN ULONG CompletionFilter
,
7118 IN PIRP NotifyIrp OPTIONAL
,
7119 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL
,
7120 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
,
7121 IN PFILTER_REPORT_CHANGE FilterCallback OPTIONAL
);
7126 FsRtlInsertPerStreamContext(
7127 IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext
,
7128 IN PFSRTL_PER_STREAM_CONTEXT Ptr
);
7131 PFSRTL_PER_STREAM_CONTEXT
7133 FsRtlLookupPerStreamContextInternal(
7134 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext
,
7135 IN PVOID OwnerId OPTIONAL
,
7136 IN PVOID InstanceId OPTIONAL
);
7139 PFSRTL_PER_STREAM_CONTEXT
7141 FsRtlRemovePerStreamContext(
7142 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext
,
7143 IN PVOID OwnerId OPTIONAL
,
7144 IN PVOID InstanceId OPTIONAL
);
7149 FsRtlIncrementCcFastReadNotPossible(
7155 FsRtlIncrementCcFastReadWait(
7161 FsRtlIncrementCcFastReadNoWait(
7167 FsRtlIncrementCcFastReadResourceMiss(
7174 IN PFILE_OBJECT FileObject
);
7176 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
7178 #if (NTDDI_VERSION >= NTDDI_WS03)
7183 FsRtlInitializeBaseMcb(
7185 IN POOL_TYPE PoolType
);
7190 FsRtlUninitializeBaseMcb(
7202 FsRtlTruncateBaseMcb(
7209 FsRtlAddBaseMcbEntry(
7213 IN LONGLONG SectorCount
);
7218 FsRtlRemoveBaseMcbEntry(
7221 IN LONGLONG SectorCount
);
7226 FsRtlLookupBaseMcbEntry(
7229 OUT PLONGLONG Lbn OPTIONAL
,
7230 OUT PLONGLONG SectorCountFromLbn OPTIONAL
,
7231 OUT PLONGLONG StartingLbn OPTIONAL
,
7232 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL
,
7233 OUT PULONG Index OPTIONAL
);
7238 FsRtlLookupLastBaseMcbEntry(
7246 FsRtlLookupLastBaseMcbEntryAndIndex(
7247 IN PBASE_MCB OpaqueMcb
,
7248 IN OUT PLONGLONG LargeVbn
,
7249 IN OUT PLONGLONG LargeLbn
,
7250 IN OUT PULONG Index
);
7255 FsRtlNumberOfRunsInBaseMcb(
7261 FsRtlGetNextBaseMcbEntry(
7266 OUT PLONGLONG SectorCount
);
7274 IN LONGLONG Amount
);
7276 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
7278 #if (NTDDI_VERSION >= NTDDI_VISTA)
7282 FsRtlInitializeBaseMcbEx(
7284 IN POOL_TYPE PoolType
,
7289 FsRtlAddBaseMcbEntryEx(
7293 IN LONGLONG SectorCount
);
7304 FsRtlOplockBreakToNone(
7305 IN OUT POPLOCK Oplock
,
7306 IN PIO_STACK_LOCATION IrpSp OPTIONAL
,
7308 IN PVOID Context OPTIONAL
,
7309 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
7310 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
);
7315 FsRtlNotifyVolumeEventEx(
7316 IN PFILE_OBJECT FileObject
,
7318 IN PTARGET_DEVICE_CUSTOM_NOTIFICATION Event
);
7323 FsRtlNotifyCleanupAll(
7324 IN PNOTIFY_SYNC NotifySync
,
7325 IN PLIST_ENTRY NotifyList
);
7329 FsRtlRegisterUncProviderEx(
7330 OUT PHANDLE MupHandle
,
7331 IN PUNICODE_STRING RedirDevName
,
7332 IN PDEVICE_OBJECT DeviceObject
,
7338 FsRtlCancellableWaitForSingleObject(
7340 IN PLARGE_INTEGER Timeout OPTIONAL
,
7341 IN PIRP Irp OPTIONAL
);
7346 FsRtlCancellableWaitForMultipleObjects(
7348 IN PVOID ObjectArray
[],
7349 IN WAIT_TYPE WaitType
,
7350 IN PLARGE_INTEGER Timeout OPTIONAL
,
7351 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL
,
7352 IN PIRP Irp OPTIONAL
);
7357 FsRtlMupGetProviderInfoFromFileObject(
7358 IN PFILE_OBJECT pFileObject
,
7361 IN OUT PULONG pBufferSize
);
7366 FsRtlMupGetProviderIdFromName(
7367 IN PUNICODE_STRING pProviderName
,
7368 OUT PULONG32 pProviderId
);
7373 FsRtlIncrementCcFastMdlReadWait(
7379 FsRtlValidateReparsePointBuffer(
7380 IN ULONG BufferLength
,
7381 IN PREPARSE_DATA_BUFFER ReparseBuffer
);
7386 FsRtlRemoveDotsFromPath(
7387 IN OUT PWSTR OriginalString
,
7388 IN USHORT PathLength
,
7389 OUT USHORT
*NewLength
);
7394 FsRtlAllocateExtraCreateParameterList(
7395 IN FSRTL_ALLOCATE_ECPLIST_FLAGS Flags
,
7396 OUT PECP_LIST
*EcpList
);
7401 FsRtlFreeExtraCreateParameterList(
7402 IN PECP_LIST EcpList
);
7407 FsRtlAllocateExtraCreateParameter(
7409 IN ULONG SizeOfContext
,
7410 IN FSRTL_ALLOCATE_ECP_FLAGS Flags
,
7411 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL
,
7413 OUT PVOID
*EcpContext
);
7418 FsRtlFreeExtraCreateParameter(
7419 IN PVOID EcpContext
);
7424 FsRtlInitExtraCreateParameterLookasideList(
7425 IN OUT PVOID Lookaside
,
7426 IN FSRTL_ECP_LOOKASIDE_FLAGS Flags
,
7432 FsRtlDeleteExtraCreateParameterLookasideList(
7433 IN OUT PVOID Lookaside
,
7434 IN FSRTL_ECP_LOOKASIDE_FLAGS Flags
);
7439 FsRtlAllocateExtraCreateParameterFromLookasideList(
7441 IN ULONG SizeOfContext
,
7442 IN FSRTL_ALLOCATE_ECP_FLAGS Flags
,
7443 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL
,
7444 IN OUT PVOID LookasideList
,
7445 OUT PVOID
*EcpContext
);
7450 FsRtlInsertExtraCreateParameter(
7451 IN OUT PECP_LIST EcpList
,
7452 IN OUT PVOID EcpContext
);
7457 FsRtlFindExtraCreateParameter(
7458 IN PECP_LIST EcpList
,
7460 OUT PVOID
*EcpContext OPTIONAL
,
7461 OUT ULONG
*EcpContextSize OPTIONAL
);
7466 FsRtlRemoveExtraCreateParameter(
7467 IN OUT PECP_LIST EcpList
,
7469 OUT PVOID
*EcpContext
,
7470 OUT ULONG
*EcpContextSize OPTIONAL
);
7475 FsRtlGetEcpListFromIrp(
7477 OUT PECP_LIST
*EcpList OPTIONAL
);
7482 FsRtlSetEcpListIntoIrp(
7484 IN PECP_LIST EcpList
);
7489 FsRtlGetNextExtraCreateParameter(
7490 IN PECP_LIST EcpList
,
7491 IN PVOID CurrentEcpContext OPTIONAL
,
7492 OUT LPGUID NextEcpType OPTIONAL
,
7493 OUT PVOID
*NextEcpContext OPTIONAL
,
7494 OUT ULONG
*NextEcpContextSize OPTIONAL
);
7499 FsRtlAcknowledgeEcp(
7500 IN PVOID EcpContext
);
7505 FsRtlIsEcpAcknowledged(
7506 IN PVOID EcpContext
);
7511 FsRtlIsEcpFromUserMode(
7512 IN PVOID EcpContext
);
7517 FsRtlChangeBackingFileObject(
7518 IN PFILE_OBJECT CurrentFileObject OPTIONAL
,
7519 IN PFILE_OBJECT NewFileObject
,
7520 IN FSRTL_CHANGE_BACKING_TYPE ChangeBackingType
,
7526 FsRtlLogCcFlushError(
7527 IN PUNICODE_STRING FileName
,
7528 IN PDEVICE_OBJECT DeviceObject
,
7529 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
7530 IN NTSTATUS FlushError
,
7536 FsRtlAreVolumeStartupApplicationsComplete(
7542 FsRtlQueryMaximumVirtualDiskNestingLevel(
7548 FsRtlGetVirtualDiskNestingLevel(
7549 IN PDEVICE_OBJECT DeviceObject
,
7550 OUT PULONG NestingLevel
,
7551 OUT PULONG NestingFlags OPTIONAL
);
7553 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
7555 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
7563 IN PVOID Context OPTIONAL
,
7564 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
7565 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
);
7569 #if (NTDDI_VERSION >= NTDDI_WIN7)
7574 FsRtlAreThereCurrentOrInProgressFileLocks(
7575 IN PFILE_LOCK FileLock
);
7580 FsRtlOplockIsSharedRequest(
7590 IN PVOID Context OPTIONAL
,
7591 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
7592 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
);
7597 FsRtlCurrentOplockH(
7603 FsRtlOplockBreakToNoneEx(
7604 IN OUT POPLOCK Oplock
,
7607 IN PVOID Context OPTIONAL
,
7608 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
7609 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
);
7614 FsRtlOplockFsctrlEx(
7623 FsRtlOplockKeysEqual(
7624 IN PFILE_OBJECT Fo1 OPTIONAL
,
7625 IN PFILE_OBJECT Fo2 OPTIONAL
);
7630 FsRtlInitializeExtraCreateParameterList(
7631 IN OUT PECP_LIST EcpList
);
7636 FsRtlInitializeExtraCreateParameter(
7639 IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL
,
7642 IN PVOID ListAllocatedFrom OPTIONAL
);
7644 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
7649 FsRtlInsertPerFileContext(
7650 IN PVOID
* PerFileContextPointer
,
7651 IN PFSRTL_PER_FILE_CONTEXT Ptr
);
7654 PFSRTL_PER_FILE_CONTEXT
7656 FsRtlLookupPerFileContext(
7657 IN PVOID
* PerFileContextPointer
,
7658 IN PVOID OwnerId OPTIONAL
,
7659 IN PVOID InstanceId OPTIONAL
);
7662 PFSRTL_PER_FILE_CONTEXT
7664 FsRtlRemovePerFileContext(
7665 IN PVOID
* PerFileContextPointer
,
7666 IN PVOID OwnerId OPTIONAL
,
7667 IN PVOID InstanceId OPTIONAL
);
7672 FsRtlTeardownPerFileContexts(
7673 IN PVOID
* PerFileContextPointer
);
7678 FsRtlInsertPerFileObjectContext(
7679 IN PFILE_OBJECT FileObject
,
7680 IN PFSRTL_PER_FILEOBJECT_CONTEXT Ptr
);
7683 PFSRTL_PER_FILEOBJECT_CONTEXT
7685 FsRtlLookupPerFileObjectContext(
7686 IN PFILE_OBJECT FileObject
,
7687 IN PVOID OwnerId OPTIONAL
,
7688 IN PVOID InstanceId OPTIONAL
);
7691 PFSRTL_PER_FILEOBJECT_CONTEXT
7693 FsRtlRemovePerFileObjectContext(
7694 IN PFILE_OBJECT FileObject
,
7695 IN PVOID OwnerId OPTIONAL
,
7696 IN PVOID InstanceId OPTIONAL
);
7698 #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
7699 FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
7702 #define FsRtlAreThereCurrentFileLocks(FL) ( \
7703 ((FL)->FastIoIsQuestionable) \
7706 #define FsRtlIncrementLockRequestsInProgress(FL) { \
7707 ASSERT( (FL)->LockRequestsInProgress >= 0 ); \
7709 (InterlockedIncrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
7712 #define FsRtlDecrementLockRequestsInProgress(FL) { \
7713 ASSERT( (FL)->LockRequestsInProgress > 0 ); \
7715 (InterlockedDecrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
7718 /* GCC compatible definition, MS one is retarded */
7719 extern NTKERNELAPI
const UCHAR
* const FsRtlLegalAnsiCharacterArray
;
7720 #define LEGAL_ANSI_CHARACTER_ARRAY FsRtlLegalAnsiCharacterArray
7722 #define FsRtlIsAnsiCharacterWild(C) ( \
7723 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \
7726 #define FsRtlIsAnsiCharacterLegalFat(C, WILD) ( \
7727 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_FAT_LEGAL) | \
7728 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7731 #define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) ( \
7732 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) | \
7733 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7736 #define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) ( \
7737 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) | \
7738 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7741 #define FsRtlIsAnsiCharacterLegalNtfsStream(C,WILD_OK) ( \
7742 FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_NTFS_STREAM_LEGAL) \
7745 #define FsRtlIsAnsiCharacterLegal(C,FLAGS) ( \
7746 FsRtlTestAnsiCharacter((C), TRUE, FALSE, (FLAGS)) \
7749 #define FsRtlTestAnsiCharacter(C, DEFAULT_RET, WILD_OK, FLAGS) ( \
7750 ((SCHAR)(C) < 0) ? DEFAULT_RET : \
7751 FlagOn( LEGAL_ANSI_CHARACTER_ARRAY[(C)], \
7753 ((WILD_OK) ? FSRTL_WILD_CHARACTER : 0) ) \
7756 #define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \
7757 (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \
7758 (NLS_MB_CODE_PAGE_TAG && \
7759 (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \
7762 #define FsRtlIsUnicodeCharacterWild(C) ( \
7765 FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER )) \
7768 #define FsRtlInitPerFileContext( _fc, _owner, _inst, _cb) \
7769 ((_fc)->OwnerId = (_owner), \
7770 (_fc)->InstanceId = (_inst), \
7771 (_fc)->FreeCallback = (_cb))
7773 #define FsRtlGetPerFileContextPointer(_fo) \
7774 (FsRtlSupportsPerFileContexts(_fo) ? \
7775 FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer : \
7778 #define FsRtlSupportsPerFileContexts(_fo) \
7779 ((FsRtlGetPerStreamContextPointer(_fo) != NULL) && \
7780 (FsRtlGetPerStreamContextPointer(_fo)->Version >= FSRTL_FCB_HEADER_V1) && \
7781 (FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer != NULL))
7783 #define FsRtlSetupAdvancedHeaderEx( _advhdr, _fmutx, _fctxptr ) \
7785 FsRtlSetupAdvancedHeader( _advhdr, _fmutx ); \
7786 if ((_fctxptr) != NULL) { \
7787 (_advhdr)->FileContextSupportPointer = (_fctxptr); \
7791 #define FsRtlGetPerStreamContextPointer(FO) ( \
7792 (PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext \
7795 #define FsRtlInitPerStreamContext(PSC, O, I, FC) ( \
7796 (PSC)->OwnerId = (O), \
7797 (PSC)->InstanceId = (I), \
7798 (PSC)->FreeCallback = (FC) \
7801 #define FsRtlSupportsPerStreamContexts(FO) ( \
7802 (BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) && \
7803 FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \
7804 FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS)) \
7807 #define FsRtlLookupPerStreamContext(_sc, _oid, _iid) \
7808 (((NULL != (_sc)) && \
7809 FlagOn((_sc)->Flags2,FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS) && \
7810 !IsListEmpty(&(_sc)->FilterContexts)) ? \
7811 FsRtlLookupPerStreamContextInternal((_sc), (_oid), (_iid)) : \
7817 FsRtlSetupAdvancedHeader(
7819 IN PFAST_MUTEX FMutex
)
7821 PFSRTL_ADVANCED_FCB_HEADER localAdvHdr
= (PFSRTL_ADVANCED_FCB_HEADER
)AdvHdr
;
7823 localAdvHdr
->Flags
|= FSRTL_FLAG_ADVANCED_HEADER
;
7824 localAdvHdr
->Flags2
|= FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS
;
7825 #if (NTDDI_VERSION >= NTDDI_VISTA)
7826 localAdvHdr
->Version
= FSRTL_FCB_HEADER_V1
;
7828 localAdvHdr
->Version
= FSRTL_FCB_HEADER_V0
;
7830 InitializeListHead( &localAdvHdr
->FilterContexts
);
7831 if (FMutex
!= NULL
) {
7832 localAdvHdr
->FastMutex
= FMutex
;
7834 #if (NTDDI_VERSION >= NTDDI_VISTA)
7835 *((PULONG_PTR
)(&localAdvHdr
->PushLock
)) = 0;
7836 localAdvHdr
->FileContextSupportPointer
= NULL
;
7840 #define FsRtlInitPerFileObjectContext(_fc, _owner, _inst) \
7841 ((_fc)->OwnerId = (_owner), (_fc)->InstanceId = (_inst))
7843 #define FsRtlCompleteRequest(IRP,STATUS) { \
7844 (IRP)->IoStatus.Status = (STATUS); \
7845 IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
7847 /* Common Cache Types */
7849 #define VACB_MAPPING_GRANULARITY (0x40000)
7850 #define VACB_OFFSET_SHIFT (18)
7852 typedef struct _PUBLIC_BCB
{
7853 CSHORT NodeTypeCode
;
7854 CSHORT NodeByteSize
;
7856 LARGE_INTEGER MappedFileOffset
;
7857 } PUBLIC_BCB
, *PPUBLIC_BCB
;
7859 typedef struct _CC_FILE_SIZES
{
7860 LARGE_INTEGER AllocationSize
;
7861 LARGE_INTEGER FileSize
;
7862 LARGE_INTEGER ValidDataLength
;
7863 } CC_FILE_SIZES
, *PCC_FILE_SIZES
;
7866 (NTAPI
*PACQUIRE_FOR_LAZY_WRITE
) (
7871 (NTAPI
*PRELEASE_FROM_LAZY_WRITE
) (
7875 (NTAPI
*PACQUIRE_FOR_READ_AHEAD
) (
7880 (NTAPI
*PRELEASE_FROM_READ_AHEAD
) (
7883 typedef struct _CACHE_MANAGER_CALLBACKS
{
7884 PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite
;
7885 PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite
;
7886 PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead
;
7887 PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead
;
7888 } CACHE_MANAGER_CALLBACKS
, *PCACHE_MANAGER_CALLBACKS
;
7890 typedef struct _CACHE_UNINITIALIZE_EVENT
{
7891 struct _CACHE_UNINITIALIZE_EVENT
*Next
;
7893 } CACHE_UNINITIALIZE_EVENT
, *PCACHE_UNINITIALIZE_EVENT
;
7896 (NTAPI
*PDIRTY_PAGE_ROUTINE
) (
7897 IN PFILE_OBJECT FileObject
,
7898 IN PLARGE_INTEGER FileOffset
,
7900 IN PLARGE_INTEGER OldestLsn
,
7901 IN PLARGE_INTEGER NewestLsn
,
7906 (NTAPI
*PFLUSH_TO_LSN
) (
7908 IN LARGE_INTEGER Lsn
);
7911 (NTAPI
*PCC_POST_DEFERRED_WRITE
) (
7915 #define UNINITIALIZE_CACHE_MAPS (1)
7916 #define DO_NOT_RETRY_PURGE (2)
7917 #define DO_NOT_PURGE_DIRTY_PAGES (0x4)
7919 #define CC_FLUSH_AND_PURGE_NO_PURGE (0x1)
7920 /* Common Cache Functions */
7922 #define CcIsFileCached(FO) ( \
7923 ((FO)->SectionObjectPointer != NULL) && \
7924 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
7927 extern ULONG CcFastMdlReadWait
;
7929 #if (NTDDI_VERSION >= NTDDI_WIN2K)
7934 CcInitializeCacheMap(
7935 IN PFILE_OBJECT FileObject
,
7936 IN PCC_FILE_SIZES FileSizes
,
7937 IN BOOLEAN PinAccess
,
7938 IN PCACHE_MANAGER_CALLBACKS Callbacks
,
7939 IN PVOID LazyWriteContext
);
7944 CcUninitializeCacheMap(
7945 IN PFILE_OBJECT FileObject
,
7946 IN PLARGE_INTEGER TruncateSize OPTIONAL
,
7947 IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL
);
7953 IN PFILE_OBJECT FileObject
,
7954 IN PCC_FILE_SIZES FileSizes
);
7959 CcSetDirtyPageThreshold(
7960 IN PFILE_OBJECT FileObject
,
7961 IN ULONG DirtyPageThreshold
);
7967 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
7968 IN PLARGE_INTEGER FileOffset OPTIONAL
,
7970 OUT PIO_STATUS_BLOCK IoStatus OPTIONAL
);
7975 CcGetFlushedValidData(
7976 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
7977 IN BOOLEAN BcbListHeld
);
7983 IN PFILE_OBJECT FileObject
,
7984 IN PLARGE_INTEGER StartOffset
,
7985 IN PLARGE_INTEGER EndOffset
,
8005 IN BOOLEAN WriteThrough
,
8006 OUT PIO_STATUS_BLOCK IoStatus
);
8011 CcGetFileObjectFromSectionPtrs(
8012 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
);
8017 CcGetFileObjectFromBcb(
8024 IN PFILE_OBJECT FileObject
,
8025 IN ULONG BytesToWrite
,
8027 IN BOOLEAN Retrying
);
8033 IN PFILE_OBJECT FileObject
,
8034 IN PCC_POST_DEFERRED_WRITE PostRoutine
,
8037 IN ULONG BytesToWrite
,
8038 IN BOOLEAN Retrying
);
8044 IN PFILE_OBJECT FileObject
,
8045 IN PLARGE_INTEGER FileOffset
,
8049 OUT PIO_STATUS_BLOCK IoStatus
);
8055 IN PFILE_OBJECT FileObject
,
8056 IN ULONG FileOffset
,
8060 OUT PIO_STATUS_BLOCK IoStatus
);
8066 IN PFILE_OBJECT FileObject
,
8067 IN PLARGE_INTEGER FileOffset
,
8076 IN PFILE_OBJECT FileObject
,
8077 IN ULONG FileOffset
,
8085 IN PFILE_OBJECT FileObject
,
8086 IN PLARGE_INTEGER FileOffset
,
8089 OUT PIO_STATUS_BLOCK IoStatus
);
8095 IN PFILE_OBJECT FileObject
,
8102 IN PFILE_OBJECT FileObject
,
8103 IN PLARGE_INTEGER FileOffset
,
8106 OUT PIO_STATUS_BLOCK IoStatus
);
8112 IN PFILE_OBJECT FileObject
,
8113 IN PLARGE_INTEGER FileOffset
,
8119 CcScheduleReadAhead(
8120 IN PFILE_OBJECT FileObject
,
8121 IN PLARGE_INTEGER FileOffset
,
8127 CcWaitForCurrentLazyWriterActivity(
8133 CcSetReadAheadGranularity(
8134 IN PFILE_OBJECT FileObject
,
8135 IN ULONG Granularity
);
8141 IN PFILE_OBJECT FileObject
,
8142 IN PLARGE_INTEGER FileOffset
,
8152 IN PFILE_OBJECT FileObject
,
8153 IN PLARGE_INTEGER FileOffset
,
8162 IN PFILE_OBJECT FileObject
,
8163 IN PLARGE_INTEGER FileOffset
,
8173 CcSetDirtyPinnedData(
8175 IN PLARGE_INTEGER Lsn OPTIONAL
);
8186 CcSetBcbOwnerPointer(
8188 IN PVOID OwnerPointer
);
8193 CcUnpinDataForThread(
8195 IN ERESOURCE_THREAD ResourceThreadId
);
8200 CcSetAdditionalCacheAttributes(
8201 IN PFILE_OBJECT FileObject
,
8202 IN BOOLEAN DisableReadAhead
,
8203 IN BOOLEAN DisableWriteBehind
);
8211 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
8213 #if (NTDDI_VERSION >= NTDDI_WINXP)
8219 IN PFILE_OBJECT FileObject
,
8225 CcSetLogHandleForFile(
8226 IN PFILE_OBJECT FileObject
,
8228 IN PFLUSH_TO_LSN FlushToLsnRoutine
);
8235 IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine
,
8241 #if (NTDDI_VERSION >= NTDDI_WINXP)
8246 IN PFILE_OBJECT FileObject
,
8247 IN PLARGE_INTEGER FileOffset
,
8252 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
8257 IN PFILE_OBJECT FileObject
,
8258 IN PLARGE_INTEGER FileOffset
,
8265 #if (NTDDI_VERSION >= NTDDI_VISTA)
8271 IN PFILE_OBJECT FileObject
,
8272 IN PCC_FILE_SIZES FileSizes
);
8277 CcGetFileObjectFromSectionPtrsRef(
8278 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
);
8283 CcSetParallelFlushFile(
8284 IN PFILE_OBJECT FileObject
,
8285 IN BOOLEAN EnableParallelFlush
);
8289 CcIsThereDirtyDataEx(
8291 IN PULONG NumberOfDirtyPages OPTIONAL
);
8295 #if (NTDDI_VERSION >= NTDDI_WIN7)
8299 CcCoherencyFlushAndPurgeCache(
8300 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8301 IN PLARGE_INTEGER FileOffset OPTIONAL
,
8303 OUT PIO_STATUS_BLOCK IoStatus
,
8304 IN ULONG Flags OPTIONAL
);
8307 #define CcGetFileSizePointer(FO) ( \
8308 ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
8311 #if (NTDDI_VERSION >= NTDDI_VISTA)
8315 CcPurgeCacheSection(
8316 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8317 IN PLARGE_INTEGER FileOffset OPTIONAL
,
8320 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
8324 CcPurgeCacheSection(
8325 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
8326 IN PLARGE_INTEGER FileOffset OPTIONAL
,
8328 IN BOOLEAN UninitializeCacheMaps
);
8331 #if (NTDDI_VERSION >= NTDDI_WIN7)
8335 CcCopyWriteWontFlush(
8336 IN PFILE_OBJECT FileObject
,
8337 IN PLARGE_INTEGER FileOffset
,
8340 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
8343 #define CcReadAhead(FO, FOFF, LEN) ( \
8344 if ((LEN) >= 256) { \
8345 CcScheduleReadAhead((FO), (FOFF), (LEN)); \
8348 /******************************************************************************
8350 ******************************************************************************/
8358 IN HANDLE FileHandle
,
8359 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8362 IN BOOLEAN ReturnSingleEntry
,
8363 IN PVOID EaList OPTIONAL
,
8364 IN ULONG EaListLength
,
8365 IN PULONG EaIndex OPTIONAL
,
8366 IN BOOLEAN RestartScan
);
8372 IN HANDLE FileHandle
,
8373 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8381 IN HANDLE ExistingTokenHandle
,
8382 IN ACCESS_MASK DesiredAccess
,
8383 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8384 IN BOOLEAN EffectiveOnly
,
8385 IN TOKEN_TYPE TokenType
,
8386 OUT PHANDLE NewTokenHandle
);
8388 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8394 IN HANDLE Handle OPTIONAL
,
8395 IN OBJECT_INFORMATION_CLASS ObjectInformationClass
,
8396 OUT PVOID ObjectInformation OPTIONAL
,
8397 IN ULONG ObjectInformationLength
,
8398 OUT PULONG ReturnLength OPTIONAL
);
8404 IN HANDLE KeyHandle
,
8405 IN HANDLE EventHandle OPTIONAL
,
8406 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8407 IN PVOID ApcContext OPTIONAL
,
8408 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8409 IN ULONG NotifyFilter
,
8410 IN BOOLEAN WatchSubtree
,
8412 IN ULONG BufferLength
,
8413 IN BOOLEAN Asynchronous
);
8419 OUT PHANDLE EventHandle
,
8420 IN ACCESS_MASK DesiredAccess
,
8421 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
8422 IN EVENT_TYPE EventType
,
8423 IN BOOLEAN InitialState
);
8429 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8434 ZwQueryDirectoryFile(
8435 IN HANDLE FileHandle
,
8436 IN HANDLE Event OPTIONAL
,
8437 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8438 IN PVOID ApcContext OPTIONAL
,
8439 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8440 OUT PVOID FileInformation
,
8442 IN FILE_INFORMATION_CLASS FileInformationClass
,
8443 IN BOOLEAN ReturnSingleEntry
,
8444 IN PUNICODE_STRING FileName OPTIONAL
,
8445 IN BOOLEAN RestartScan
);
8450 ZwSetVolumeInformationFile(
8451 IN HANDLE FileHandle
,
8452 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8453 IN PVOID FsInformation
,
8455 IN FS_INFORMATION_CLASS FsInformationClass
);
8461 IN HANDLE FileHandle
,
8462 IN HANDLE Event OPTIONAL
,
8463 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8464 IN PVOID ApcContext OPTIONAL
,
8465 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8466 IN ULONG FsControlCode
,
8467 IN PVOID InputBuffer OPTIONAL
,
8468 IN ULONG InputBufferLength
,
8469 OUT PVOID OutputBuffer OPTIONAL
,
8470 IN ULONG OutputBufferLength
);
8476 IN HANDLE SourceProcessHandle
,
8477 IN HANDLE SourceHandle
,
8478 IN HANDLE TargetProcessHandle OPTIONAL
,
8479 OUT PHANDLE TargetHandle OPTIONAL
,
8480 IN ACCESS_MASK DesiredAccess
,
8481 IN ULONG HandleAttributes
,
8487 ZwOpenDirectoryObject(
8488 OUT PHANDLE DirectoryHandle
,
8489 IN ACCESS_MASK DesiredAccess
,
8490 IN POBJECT_ATTRIBUTES ObjectAttributes
);
8495 ZwAllocateVirtualMemory(
8496 IN HANDLE ProcessHandle
,
8497 IN OUT PVOID
*BaseAddress
,
8498 IN ULONG_PTR ZeroBits
,
8499 IN OUT PSIZE_T RegionSize
,
8500 IN ULONG AllocationType
,
8506 ZwFreeVirtualMemory(
8507 IN HANDLE ProcessHandle
,
8508 IN OUT PVOID
*BaseAddress
,
8509 IN OUT PSIZE_T RegionSize
,
8515 ZwWaitForSingleObject(
8517 IN BOOLEAN Alertable
,
8518 IN PLARGE_INTEGER Timeout OPTIONAL
);
8524 IN HANDLE EventHandle
,
8525 OUT PLONG PreviousState OPTIONAL
);
8530 ZwFlushVirtualMemory(
8531 IN HANDLE ProcessHandle
,
8532 IN OUT PVOID
*BaseAddress
,
8533 IN OUT PSIZE_T RegionSize
,
8534 OUT PIO_STATUS_BLOCK IoStatusBlock
);
8539 ZwQueryInformationToken(
8540 IN HANDLE TokenHandle
,
8541 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
8542 OUT PVOID TokenInformation
,
8544 OUT PULONG ResultLength
);
8549 ZwSetSecurityObject(
8551 IN SECURITY_INFORMATION SecurityInformation
,
8552 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
8557 ZwQuerySecurityObject(
8558 IN HANDLE FileHandle
,
8559 IN SECURITY_INFORMATION SecurityInformation
,
8560 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
8562 OUT PULONG ResultLength
);
8563 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
8565 #if (NTDDI_VERSION >= NTDDI_WINXP)
8570 ZwOpenProcessTokenEx(
8571 IN HANDLE ProcessHandle
,
8572 IN ACCESS_MASK DesiredAccess
,
8573 IN ULONG HandleAttributes
,
8574 OUT PHANDLE TokenHandle
);
8579 ZwOpenThreadTokenEx(
8580 IN HANDLE ThreadHandle
,
8581 IN ACCESS_MASK DesiredAccess
,
8582 IN BOOLEAN OpenAsSelf
,
8583 IN ULONG HandleAttributes
,
8584 OUT PHANDLE TokenHandle
);
8586 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
8588 #if (NTDDI_VERSION >= NTDDI_VISTA)
8594 IN HANDLE FileHandle
,
8595 IN HANDLE Event OPTIONAL
,
8596 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8597 IN PVOID ApcContext OPTIONAL
,
8598 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8599 IN PLARGE_INTEGER ByteOffset
,
8600 IN PLARGE_INTEGER Length
,
8602 IN BOOLEAN FailImmediately
,
8603 IN BOOLEAN ExclusiveLock
);
8609 IN HANDLE FileHandle
,
8610 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8611 IN PLARGE_INTEGER ByteOffset
,
8612 IN PLARGE_INTEGER Length
,
8618 ZwQueryQuotaInformationFile(
8619 IN HANDLE FileHandle
,
8620 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8623 IN BOOLEAN ReturnSingleEntry
,
8625 IN ULONG SidListLength
,
8626 IN PSID StartSid OPTIONAL
,
8627 IN BOOLEAN RestartScan
);
8632 ZwSetQuotaInformationFile(
8633 IN HANDLE FileHandle
,
8634 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8642 IN HANDLE FileHandle
,
8643 OUT PIO_STATUS_BLOCK IoStatusBlock
);
8644 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8645 #if (NTDDI_VERSION >= NTDDI_WIN7)
8650 ZwSetInformationToken(
8651 IN HANDLE TokenHandle
,
8652 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
8653 IN PVOID TokenInformation
,
8654 IN ULONG TokenInformationLength
);
8655 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
8658 #define INVALID_PROCESSOR_INDEX 0xffffffff
8660 #define EX_PUSH_LOCK ULONG_PTR
8661 #define PEX_PUSH_LOCK PULONG_PTR
8663 /* #if !defined(_X86AMD64_) FIXME : WHAT ?! */
8666 C_ASSERT(sizeof(ERESOURCE
) == 0x68);
8667 C_ASSERT(FIELD_OFFSET(ERESOURCE
,ActiveCount
) == 0x18);
8668 C_ASSERT(FIELD_OFFSET(ERESOURCE
,Flag
) == 0x1a);
8672 C_ASSERT(sizeof(ERESOURCE
) == 0x38);
8673 C_ASSERT(FIELD_OFFSET(ERESOURCE
,ActiveCount
) == 0x0c);
8674 C_ASSERT(FIELD_OFFSET(ERESOURCE
,Flag
) == 0x0e);
8680 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8681 //DECLSPEC_DEPRECATED_DDK
8685 HalGetDmaAlignmentRequirement(
8690 #if defined(_M_IX86) || defined(_M_AMD64)
8691 #define HalGetDmaAlignmentRequirement() 1L
8700 typedef enum _FAST_IO_POSSIBLE
{
8701 FastIoIsNotPossible
= 0,
8703 FastIoIsQuestionable
8706 typedef struct _EOF_WAIT_BLOCK
{
8707 LIST_ENTRY EofWaitLinks
;
8709 } EOF_WAIT_BLOCK
, *PEOF_WAIT_BLOCK
;
8711 typedef struct _FILE_LOCK_INFO
{
8712 LARGE_INTEGER StartingByte
;
8713 LARGE_INTEGER Length
;
8714 BOOLEAN ExclusiveLock
;
8716 PFILE_OBJECT FileObject
;
8718 LARGE_INTEGER EndingByte
;
8719 } FILE_LOCK_INFO
, *PFILE_LOCK_INFO
;
8722 (NTAPI
*PCOMPLETE_LOCK_IRP_ROUTINE
) (
8727 (NTAPI
*PUNLOCK_ROUTINE
) (
8729 IN PFILE_LOCK_INFO FileLockInfo
);
8731 typedef struct _FILE_LOCK
{
8732 PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine
;
8733 PUNLOCK_ROUTINE UnlockRoutine
;
8734 BOOLEAN FastIoIsQuestionable
;
8736 PVOID LockInformation
;
8737 FILE_LOCK_INFO LastReturnedLockInfo
;
8738 PVOID LastReturnedLock
;
8739 LONG
volatile LockRequestsInProgress
;
8740 } FILE_LOCK
, *PFILE_LOCK
;
8742 typedef struct _TUNNEL
{
8744 PRTL_SPLAY_LINKS Cache
;
8745 LIST_ENTRY TimerQueue
;
8749 typedef struct _BASE_MCB
{
8750 ULONG MaximumPairCount
;
8755 } BASE_MCB
, *PBASE_MCB
;
8757 typedef struct _LARGE_MCB
{
8758 PKGUARDED_MUTEX GuardedMutex
;
8760 } LARGE_MCB
, *PLARGE_MCB
;
8762 #define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
8764 typedef struct _MCB
{
8765 LARGE_MCB DummyFieldThatSizesThisStructureCorrectly
;
8768 typedef PVOID OPLOCK
, *POPLOCK
;
8771 (NTAPI
*POPLOCK_WAIT_COMPLETE_ROUTINE
) (
8776 (NTAPI
*POPLOCK_FS_PREPOST_IRP
) (
8780 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
8781 #define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED 0x00000001
8784 #if (NTDDI_VERSION >= NTDDI_WIN7)
8785 #define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY 0x00000002
8786 #define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK 0x00000004
8787 #define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS 0x00000008
8788 #define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH 0x00000001
8791 #if (NTDDI_VERSION >= NTDDI_WIN7)
8793 typedef struct _OPLOCK_KEY_ECP_CONTEXT
{
8796 } OPLOCK_KEY_ECP_CONTEXT
, *POPLOCK_KEY_ECP_CONTEXT
;
8798 DEFINE_GUID( GUID_ECP_OPLOCK_KEY
, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f );
8802 typedef PVOID PNOTIFY_SYNC
;
8805 (NTAPI
*PCHECK_FOR_TRAVERSE_ACCESS
) (
8806 IN PVOID NotifyContext
,
8807 IN PVOID TargetContext OPTIONAL
,
8808 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
);
8811 (NTAPI
*PFILTER_REPORT_CHANGE
) (
8812 IN PVOID NotifyContext
,
8813 IN PVOID FilterContext
);
8815 extern NTKERNELAPI PUSHORT NlsOemLeadByteInfo
;
8816 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
8818 #ifdef NLS_MB_CODE_PAGE_TAG
8819 #undef NLS_MB_CODE_PAGE_TAG
8821 #define NLS_MB_CODE_PAGE_TAG NlsMbOemCodePageTag
8823 #if (NTDDI_VERSION >= NTDDI_WIN7)
8824 typedef struct _ECP_HEADER ECP_HEADER
, *PECP_HEADER
;
8827 #if (NTDDI_VERSION >= NTDDI_VISTA)
8829 typedef enum _NETWORK_OPEN_LOCATION_QUALIFIER
{
8830 NetworkOpenLocationAny
,
8831 NetworkOpenLocationRemote
,
8832 NetworkOpenLocationLoopback
8833 } NETWORK_OPEN_LOCATION_QUALIFIER
;
8835 typedef enum _NETWORK_OPEN_INTEGRITY_QUALIFIER
{
8836 NetworkOpenIntegrityAny
,
8837 NetworkOpenIntegrityNone
,
8838 NetworkOpenIntegritySigned
,
8839 NetworkOpenIntegrityEncrypted
,
8840 NetworkOpenIntegrityMaximum
8841 } NETWORK_OPEN_INTEGRITY_QUALIFIER
;
8843 #if (NTDDI_VERSION >= NTDDI_WIN7)
8845 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_COLLAPSING 0x1
8846 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_DURABILITY 0x2
8847 #define NETWORK_OPEN_ECP_IN_FLAG_FORCE_BUFFERED_SYNCHRONOUS_IO_HACK 0x80000000
8849 typedef struct _NETWORK_OPEN_ECP_CONTEXT
{
8854 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
8855 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
8859 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
8860 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
8864 } NETWORK_OPEN_ECP_CONTEXT
, *PNETWORK_OPEN_ECP_CONTEXT
;
8866 typedef struct _NETWORK_OPEN_ECP_CONTEXT_V0
{
8871 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
8872 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
8875 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
8876 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
8879 } NETWORK_OPEN_ECP_CONTEXT_V0
, *PNETWORK_OPEN_ECP_CONTEXT_V0
;
8881 #elif (NTDDI_VERSION >= NTDDI_VISTA)
8882 typedef struct _NETWORK_OPEN_ECP_CONTEXT
{
8887 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
8888 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
8891 NETWORK_OPEN_LOCATION_QUALIFIER Location
;
8892 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity
;
8895 } NETWORK_OPEN_ECP_CONTEXT
, *PNETWORK_OPEN_ECP_CONTEXT
;
8898 DEFINE_GUID(GUID_ECP_NETWORK_OPEN_CONTEXT
, 0xc584edbf, 0x00df, 0x4d28, 0xb8, 0x84, 0x35, 0xba, 0xca, 0x89, 0x11, 0xe8 );
8900 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8903 #if (NTDDI_VERSION >= NTDDI_VISTA)
8905 typedef struct _PREFETCH_OPEN_ECP_CONTEXT
{
8907 } PREFETCH_OPEN_ECP_CONTEXT
, *PPREFETCH_OPEN_ECP_CONTEXT
;
8909 DEFINE_GUID(GUID_ECP_PREFETCH_OPEN
, 0xe1777b21, 0x847e, 0x4837, 0xaa, 0x45, 0x64, 0x16, 0x1d, 0x28, 0x6, 0x55 );
8911 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
8913 #if (NTDDI_VERSION >= NTDDI_WIN7)
8915 DEFINE_GUID (GUID_ECP_NFS_OPEN
, 0xf326d30c, 0xe5f8, 0x4fe7, 0xab, 0x74, 0xf5, 0xa3, 0x19, 0x6d, 0x92, 0xdb);
8916 DEFINE_GUID(GUID_ECP_SRV_OPEN
, 0xbebfaebc, 0xaabf, 0x489d, 0x9d, 0x2c, 0xe9, 0xe3, 0x61, 0x10, 0x28, 0x53 );
8918 typedef struct sockaddr_storage
*PSOCKADDR_STORAGE_NFS
;
8920 typedef struct _NFS_OPEN_ECP_CONTEXT
{
8921 PUNICODE_STRING ExportAlias
;
8922 PSOCKADDR_STORAGE_NFS ClientSocketAddress
;
8923 } NFS_OPEN_ECP_CONTEXT
, *PNFS_OPEN_ECP_CONTEXT
, **PPNFS_OPEN_ECP_CONTEXT
;
8925 typedef struct _SRV_OPEN_ECP_CONTEXT
{
8926 PUNICODE_STRING ShareName
;
8927 PSOCKADDR_STORAGE_NFS SocketAddress
;
8928 BOOLEAN OplockBlockState
;
8929 BOOLEAN OplockAppState
;
8930 BOOLEAN OplockFinalState
;
8931 } SRV_OPEN_ECP_CONTEXT
, *PSRV_OPEN_ECP_CONTEXT
;
8933 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
8935 #define PIN_WAIT (1)
8936 #define PIN_EXCLUSIVE (2)
8937 #define PIN_NO_READ (4)
8938 #define PIN_IF_BCB (8)
8939 #define PIN_CALLER_TRACKS_DIRTY_DATA (32)
8940 #define PIN_HIGH_PRIORITY (64)
8943 #define MAP_NO_READ (16)
8944 #define MAP_HIGH_PRIORITY (64)
8946 #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
8947 #define IOCTL_REDIR_QUERY_PATH_EX CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 100, METHOD_NEITHER, FILE_ANY_ACCESS)
8949 typedef struct _QUERY_PATH_REQUEST
{
8950 ULONG PathNameLength
;
8951 PIO_SECURITY_CONTEXT SecurityContext
;
8952 WCHAR FilePathName
[1];
8953 } QUERY_PATH_REQUEST
, *PQUERY_PATH_REQUEST
;
8955 typedef struct _QUERY_PATH_REQUEST_EX
{
8956 PIO_SECURITY_CONTEXT pSecurityContext
;
8959 UNICODE_STRING PathName
;
8960 UNICODE_STRING DomainServiceName
;
8961 ULONG_PTR Reserved
[ 3 ];
8962 } QUERY_PATH_REQUEST_EX
, *PQUERY_PATH_REQUEST_EX
;
8964 typedef struct _QUERY_PATH_RESPONSE
{
8965 ULONG LengthAccepted
;
8966 } QUERY_PATH_RESPONSE
, *PQUERY_PATH_RESPONSE
;
8968 #define VOLSNAPCONTROLTYPE 0x00000053
8969 #define IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES CTL_CODE(VOLSNAPCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
8971 /* FIXME : These definitions below don't belong here (or anywhere in ddk really) */
8972 #pragma pack(push,4)
8974 #ifndef VER_PRODUCTBUILD
8975 #define VER_PRODUCTBUILD 10000
8980 extern PACL SePublicDefaultDacl
;
8981 extern PACL SeSystemDefaultDacl
;
8983 #define FS_LFN_APIS 0x00004000
8985 #define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
8986 #define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
8987 #define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
8988 #define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
8989 #define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
8990 #define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
8991 #define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
8992 #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
8993 #define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
8994 #define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
8995 #define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
8996 #define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
8997 #define FILE_STORAGE_TYPE_MASK 0x000f0000
8998 #define FILE_STORAGE_TYPE_SHIFT 16
9000 #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
9003 #define HARDWARE_PTE HARDWARE_PTE_X86
9004 #define PHARDWARE_PTE PHARDWARE_PTE_X86
9007 #define IO_ATTACH_DEVICE_API 0x80000000
9009 #define IO_TYPE_APC 18
9010 #define IO_TYPE_DPC 19
9011 #define IO_TYPE_DEVICE_QUEUE 20
9012 #define IO_TYPE_EVENT_PAIR 21
9013 #define IO_TYPE_INTERRUPT 22
9014 #define IO_TYPE_PROFILE 23
9016 #define IRP_BEING_VERIFIED 0x10
9018 #define MAILSLOT_CLASS_FIRSTCLASS 1
9019 #define MAILSLOT_CLASS_SECONDCLASS 2
9021 #define MAILSLOT_SIZE_AUTO 0
9023 #define MEM_DOS_LIM 0x40000000
9025 #define OB_TYPE_TYPE 1
9026 #define OB_TYPE_DIRECTORY 2
9027 #define OB_TYPE_SYMBOLIC_LINK 3
9028 #define OB_TYPE_TOKEN 4
9029 #define OB_TYPE_PROCESS 5
9030 #define OB_TYPE_THREAD 6
9031 #define OB_TYPE_EVENT 7
9032 #define OB_TYPE_EVENT_PAIR 8
9033 #define OB_TYPE_MUTANT 9
9034 #define OB_TYPE_SEMAPHORE 10
9035 #define OB_TYPE_TIMER 11
9036 #define OB_TYPE_PROFILE 12
9037 #define OB_TYPE_WINDOW_STATION 13
9038 #define OB_TYPE_DESKTOP 14
9039 #define OB_TYPE_SECTION 15
9040 #define OB_TYPE_KEY 16
9041 #define OB_TYPE_PORT 17
9042 #define OB_TYPE_ADAPTER 18
9043 #define OB_TYPE_CONTROLLER 19
9044 #define OB_TYPE_DEVICE 20
9045 #define OB_TYPE_DRIVER 21
9046 #define OB_TYPE_IO_COMPLETION 22
9047 #define OB_TYPE_FILE 23
9049 #define SEC_BASED 0x00200000
9053 #define TOKEN_HAS_ADMIN_GROUP 0x08
9055 #if (VER_PRODUCTBUILD >= 1381)
9056 #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
9057 #endif /* (VER_PRODUCTBUILD >= 1381) */
9059 #if (VER_PRODUCTBUILD >= 2195)
9061 #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
9062 #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
9064 #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
9066 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
9067 #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
9068 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
9069 #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
9070 #endif /* (VER_PRODUCTBUILD >= 2195) */
9072 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
9073 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
9074 #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
9075 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
9076 #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
9077 #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
9078 #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
9079 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
9081 typedef enum _FILE_STORAGE_TYPE
{
9082 StorageTypeDefault
= 1,
9083 StorageTypeDirectory
,
9085 StorageTypeJunctionPoint
,
9087 StorageTypeStructuredStorage
,
9088 StorageTypeEmbedding
,
9090 } FILE_STORAGE_TYPE
;
9092 typedef struct _OBJECT_BASIC_INFORMATION
9095 ACCESS_MASK GrantedAccess
;
9098 ULONG PagedPoolCharge
;
9099 ULONG NonPagedPoolCharge
;
9100 ULONG Reserved
[ 3 ];
9103 ULONG SecurityDescriptorSize
;
9104 LARGE_INTEGER CreationTime
;
9105 } OBJECT_BASIC_INFORMATION
, *POBJECT_BASIC_INFORMATION
;
9107 typedef struct _BITMAP_RANGE
{
9110 ULONG FirstDirtyPage
;
9111 ULONG LastDirtyPage
;
9114 } BITMAP_RANGE
, *PBITMAP_RANGE
;
9116 typedef struct _FILE_COPY_ON_WRITE_INFORMATION
{
9117 BOOLEAN ReplaceIfExists
;
9118 HANDLE RootDirectory
;
9119 ULONG FileNameLength
;
9121 } FILE_COPY_ON_WRITE_INFORMATION
, *PFILE_COPY_ON_WRITE_INFORMATION
;
9123 typedef struct _FILE_FULL_DIRECTORY_INFORMATION
{
9124 ULONG NextEntryOffset
;
9126 LARGE_INTEGER CreationTime
;
9127 LARGE_INTEGER LastAccessTime
;
9128 LARGE_INTEGER LastWriteTime
;
9129 LARGE_INTEGER ChangeTime
;
9130 LARGE_INTEGER EndOfFile
;
9131 LARGE_INTEGER AllocationSize
;
9132 ULONG FileAttributes
;
9133 ULONG FileNameLength
;
9135 WCHAR FileName
[ANYSIZE_ARRAY
];
9136 } FILE_FULL_DIRECTORY_INFORMATION
, *PFILE_FULL_DIRECTORY_INFORMATION
;
9138 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
9139 typedef struct _FILE_SHARED_LOCK_ENTRY
{
9142 FILE_LOCK_INFO FileLock
;
9143 } FILE_SHARED_LOCK_ENTRY
, *PFILE_SHARED_LOCK_ENTRY
;
9145 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
9146 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY
{
9147 LIST_ENTRY ListEntry
;
9150 FILE_LOCK_INFO FileLock
;
9151 } FILE_EXCLUSIVE_LOCK_ENTRY
, *PFILE_EXCLUSIVE_LOCK_ENTRY
;
9153 typedef struct _FILE_MAILSLOT_PEEK_BUFFER
{
9154 ULONG ReadDataAvailable
;
9155 ULONG NumberOfMessages
;
9156 ULONG MessageLength
;
9157 } FILE_MAILSLOT_PEEK_BUFFER
, *PFILE_MAILSLOT_PEEK_BUFFER
;
9159 typedef struct _FILE_OLE_CLASSID_INFORMATION
{
9161 } FILE_OLE_CLASSID_INFORMATION
, *PFILE_OLE_CLASSID_INFORMATION
;
9163 typedef struct _FILE_OLE_ALL_INFORMATION
{
9164 FILE_BASIC_INFORMATION BasicInformation
;
9165 FILE_STANDARD_INFORMATION StandardInformation
;
9166 FILE_INTERNAL_INFORMATION InternalInformation
;
9167 FILE_EA_INFORMATION EaInformation
;
9168 FILE_ACCESS_INFORMATION AccessInformation
;
9169 FILE_POSITION_INFORMATION PositionInformation
;
9170 FILE_MODE_INFORMATION ModeInformation
;
9171 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
9174 LARGE_INTEGER SecurityChangeTime
;
9175 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation
;
9176 FILE_OBJECTID_INFORMATION ObjectIdInformation
;
9177 FILE_STORAGE_TYPE StorageType
;
9180 ULONG NumberOfStreamReferences
;
9183 BOOLEAN ContentIndexDisable
;
9184 BOOLEAN InheritContentIndexDisable
;
9185 FILE_NAME_INFORMATION NameInformation
;
9186 } FILE_OLE_ALL_INFORMATION
, *PFILE_OLE_ALL_INFORMATION
;
9188 typedef struct _FILE_OLE_DIR_INFORMATION
{
9189 ULONG NextEntryOffset
;
9191 LARGE_INTEGER CreationTime
;
9192 LARGE_INTEGER LastAccessTime
;
9193 LARGE_INTEGER LastWriteTime
;
9194 LARGE_INTEGER ChangeTime
;
9195 LARGE_INTEGER EndOfFile
;
9196 LARGE_INTEGER AllocationSize
;
9197 ULONG FileAttributes
;
9198 ULONG FileNameLength
;
9199 FILE_STORAGE_TYPE StorageType
;
9202 BOOLEAN ContentIndexDisable
;
9203 BOOLEAN InheritContentIndexDisable
;
9205 } FILE_OLE_DIR_INFORMATION
, *PFILE_OLE_DIR_INFORMATION
;
9207 typedef struct _FILE_OLE_INFORMATION
{
9208 LARGE_INTEGER SecurityChangeTime
;
9209 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation
;
9210 FILE_OBJECTID_INFORMATION ObjectIdInformation
;
9211 FILE_STORAGE_TYPE StorageType
;
9213 BOOLEAN ContentIndexDisable
;
9214 BOOLEAN InheritContentIndexDisable
;
9215 } FILE_OLE_INFORMATION
, *PFILE_OLE_INFORMATION
;
9217 typedef struct _FILE_OLE_STATE_BITS_INFORMATION
{
9219 ULONG StateBitsMask
;
9220 } FILE_OLE_STATE_BITS_INFORMATION
, *PFILE_OLE_STATE_BITS_INFORMATION
;
9222 typedef struct _MAPPING_PAIR
{
9225 } MAPPING_PAIR
, *PMAPPING_PAIR
;
9227 typedef struct _GET_RETRIEVAL_DESCRIPTOR
{
9228 ULONG NumberOfPairs
;
9230 MAPPING_PAIR Pair
[1];
9231 } GET_RETRIEVAL_DESCRIPTOR
, *PGET_RETRIEVAL_DESCRIPTOR
;
9233 typedef struct _MBCB
{
9234 CSHORT NodeTypeCode
;
9235 CSHORT NodeIsInZone
;
9239 LIST_ENTRY BitmapRanges
;
9240 LONGLONG ResumeWritePage
;
9241 BITMAP_RANGE BitmapRange1
;
9242 BITMAP_RANGE BitmapRange2
;
9243 BITMAP_RANGE BitmapRange3
;
9246 typedef struct _MOVEFILE_DESCRIPTOR
{
9249 LARGE_INTEGER StartVcn
;
9250 LARGE_INTEGER TargetLcn
;
9253 } MOVEFILE_DESCRIPTOR
, *PMOVEFILE_DESCRIPTOR
;
9255 typedef struct _OBJECT_BASIC_INFO
{
9257 ACCESS_MASK GrantedAccess
;
9259 ULONG ReferenceCount
;
9260 ULONG PagedPoolUsage
;
9261 ULONG NonPagedPoolUsage
;
9263 ULONG NameInformationLength
;
9264 ULONG TypeInformationLength
;
9265 ULONG SecurityDescriptorLength
;
9266 LARGE_INTEGER CreateTime
;
9267 } OBJECT_BASIC_INFO
, *POBJECT_BASIC_INFO
;
9269 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO
{
9271 BOOLEAN ProtectFromClose
;
9272 } OBJECT_HANDLE_ATTRIBUTE_INFO
, *POBJECT_HANDLE_ATTRIBUTE_INFO
;
9274 typedef struct _OBJECT_NAME_INFO
{
9275 UNICODE_STRING ObjectName
;
9276 WCHAR ObjectNameBuffer
[1];
9277 } OBJECT_NAME_INFO
, *POBJECT_NAME_INFO
;
9279 typedef struct _OBJECT_PROTECTION_INFO
{
9281 BOOLEAN ProtectHandle
;
9282 } OBJECT_PROTECTION_INFO
, *POBJECT_PROTECTION_INFO
;
9284 typedef struct _OBJECT_TYPE_INFO
{
9285 UNICODE_STRING ObjectTypeName
;
9286 UCHAR Unknown
[0x58];
9287 WCHAR ObjectTypeNameBuffer
[1];
9288 } OBJECT_TYPE_INFO
, *POBJECT_TYPE_INFO
;
9290 typedef struct _OBJECT_ALL_TYPES_INFO
{
9291 ULONG NumberOfObjectTypes
;
9292 OBJECT_TYPE_INFO ObjectsTypeInfo
[1];
9293 } OBJECT_ALL_TYPES_INFO
, *POBJECT_ALL_TYPES_INFO
;
9295 #if defined(USE_LPC6432)
9296 #define LPC_CLIENT_ID CLIENT_ID64
9297 #define LPC_SIZE_T ULONGLONG
9298 #define LPC_PVOID ULONGLONG
9299 #define LPC_HANDLE ULONGLONG
9301 #define LPC_CLIENT_ID CLIENT_ID
9302 #define LPC_SIZE_T SIZE_T
9303 #define LPC_PVOID PVOID
9304 #define LPC_HANDLE HANDLE
9307 typedef struct _PORT_MESSAGE
9323 CSHORT DataInfoOffset
;
9327 __GNU_EXTENSION
union
9329 LPC_CLIENT_ID ClientId
;
9330 double DoNotUseThisField
;
9333 __GNU_EXTENSION
union
9335 LPC_SIZE_T ClientViewSize
;
9338 } PORT_MESSAGE
, *PPORT_MESSAGE
;
9340 #define LPC_KERNELMODE_MESSAGE (CSHORT)((USHORT)0x8000)
9342 typedef struct _PORT_VIEW
9345 LPC_HANDLE SectionHandle
;
9346 ULONG SectionOffset
;
9347 LPC_SIZE_T ViewSize
;
9349 LPC_PVOID ViewRemoteBase
;
9350 } PORT_VIEW
, *PPORT_VIEW
;
9352 typedef struct _REMOTE_PORT_VIEW
9355 LPC_SIZE_T ViewSize
;
9357 } REMOTE_PORT_VIEW
, *PREMOTE_PORT_VIEW
;
9359 typedef struct _VAD_HEADER
{
9362 struct _VAD_HEADER
* ParentLink
;
9363 struct _VAD_HEADER
* LeftLink
;
9364 struct _VAD_HEADER
* RightLink
;
9365 ULONG Flags
; /* LSB = CommitCharge */
9367 PVOID FirstProtoPte
;
9371 } VAD_HEADER
, *PVAD_HEADER
;
9376 CcGetLsnForFileObject (
9377 IN PFILE_OBJECT FileObject
,
9378 OUT PLARGE_INTEGER OldestLsn OPTIONAL
9385 IN POOL_TYPE PoolType
,
9386 IN ULONG NumberOfBytes
9392 FsRtlAllocatePoolWithQuota (
9393 IN POOL_TYPE PoolType
,
9394 IN ULONG NumberOfBytes
9400 FsRtlAllocatePoolWithQuotaTag (
9401 IN POOL_TYPE PoolType
,
9402 IN ULONG NumberOfBytes
,
9409 FsRtlAllocatePoolWithTag (
9410 IN POOL_TYPE PoolType
,
9411 IN ULONG NumberOfBytes
,
9418 FsRtlIsFatDbcsLegal (
9419 IN ANSI_STRING DbcsName
,
9420 IN BOOLEAN WildCardsPermissible
,
9421 IN BOOLEAN PathNamePermissible
,
9422 IN BOOLEAN LeadingBackslashPermissible
9428 FsRtlMdlReadComplete (
9429 IN PFILE_OBJECT FileObject
,
9436 FsRtlMdlWriteComplete (
9437 IN PFILE_OBJECT FileObject
,
9438 IN PLARGE_INTEGER FileOffset
,
9445 FsRtlNotifyChangeDirectory (
9446 IN PNOTIFY_SYNC NotifySync
,
9448 IN PSTRING FullDirectoryName
,
9449 IN PLIST_ENTRY NotifyList
,
9450 IN BOOLEAN WatchTree
,
9451 IN ULONG CompletionFilter
,
9459 IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL
,
9460 IN POBJECT_TYPE ObjectType
,
9461 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
9462 IN KPROCESSOR_MODE AccessMode
,
9463 IN OUT PVOID ParseContext OPTIONAL
,
9464 IN ULONG ObjectSize
,
9465 IN ULONG PagedPoolCharge OPTIONAL
,
9466 IN ULONG NonPagedPoolCharge OPTIONAL
,
9473 ObGetObjectPointerCount (
9480 ObReferenceObjectByName (
9481 IN PUNICODE_STRING ObjectName
,
9482 IN ULONG Attributes
,
9483 IN PACCESS_STATE PassedAccessState OPTIONAL
,
9484 IN ACCESS_MASK DesiredAccess OPTIONAL
,
9485 IN POBJECT_TYPE ObjectType
,
9486 IN KPROCESSOR_MODE AccessMode
,
9487 IN OUT PVOID ParseContext OPTIONAL
,
9491 #define PsDereferenceImpersonationToken(T) \
9492 {if (ARGUMENT_PRESENT(T)) { \
9493 (ObDereferenceObject((T))); \
9502 PsLookupProcessThreadByCid (
9504 OUT PEPROCESS
*Process OPTIONAL
,
9505 OUT PETHREAD
*Thread
9511 RtlSetSaclSecurityDescriptor (
9512 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
9513 IN BOOLEAN SaclPresent
,
9515 IN BOOLEAN SaclDefaulted
9518 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
9520 #if (VER_PRODUCTBUILD >= 2195)
9525 ZwAdjustPrivilegesToken (
9526 IN HANDLE TokenHandle
,
9527 IN BOOLEAN DisableAllPrivileges
,
9528 IN PTOKEN_PRIVILEGES NewState
,
9529 IN ULONG BufferLength
,
9530 OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL
,
9531 OUT PULONG ReturnLength
9534 #endif /* (VER_PRODUCTBUILD >= 2195) */
9540 IN HANDLE ThreadHandle
9546 ZwAccessCheckAndAuditAlarm (
9547 IN PUNICODE_STRING SubsystemName
,
9549 IN PUNICODE_STRING ObjectTypeName
,
9550 IN PUNICODE_STRING ObjectName
,
9551 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
9552 IN ACCESS_MASK DesiredAccess
,
9553 IN PGENERIC_MAPPING GenericMapping
,
9554 IN BOOLEAN ObjectCreation
,
9555 OUT PACCESS_MASK GrantedAccess
,
9556 OUT PBOOLEAN AccessStatus
,
9557 OUT PBOOLEAN GenerateOnClose
9560 #if (VER_PRODUCTBUILD >= 2195)
9566 IN HANDLE FileHandle
,
9567 OUT PIO_STATUS_BLOCK IoStatusBlock
9570 #endif /* (VER_PRODUCTBUILD >= 2195) */
9576 IN HANDLE EventHandle
9582 ZwCloseObjectAuditAlarm (
9583 IN PUNICODE_STRING SubsystemName
,
9585 IN BOOLEAN GenerateOnClose
9591 ZwCreateSymbolicLinkObject (
9592 OUT PHANDLE SymbolicLinkHandle
,
9593 IN ACCESS_MASK DesiredAccess
,
9594 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9595 IN PUNICODE_STRING TargetName
9601 ZwFlushInstructionCache (
9602 IN HANDLE ProcessHandle
,
9603 IN PVOID BaseAddress OPTIONAL
,
9611 IN HANDLE FileHandle
,
9612 OUT PIO_STATUS_BLOCK IoStatusBlock
9615 #if (VER_PRODUCTBUILD >= 2195)
9620 ZwInitiatePowerAction (
9621 IN POWER_ACTION SystemAction
,
9622 IN SYSTEM_POWER_STATE MinSystemState
,
9624 IN BOOLEAN Asynchronous
9627 #endif /* (VER_PRODUCTBUILD >= 2195) */
9633 IN POBJECT_ATTRIBUTES KeyObjectAttributes
,
9634 IN POBJECT_ATTRIBUTES FileObjectAttributes
9640 ZwOpenProcessToken (
9641 IN HANDLE ProcessHandle
,
9642 IN ACCESS_MASK DesiredAccess
,
9643 OUT PHANDLE TokenHandle
9650 OUT PHANDLE ThreadHandle
,
9651 IN ACCESS_MASK DesiredAccess
,
9652 IN POBJECT_ATTRIBUTES ObjectAttributes
,
9653 IN PCLIENT_ID ClientId
9660 IN HANDLE ThreadHandle
,
9661 IN ACCESS_MASK DesiredAccess
,
9662 IN BOOLEAN OpenAsSelf
,
9663 OUT PHANDLE TokenHandle
9670 IN HANDLE EventHandle
,
9671 OUT PLONG PreviousState OPTIONAL
9677 ZwQueryDefaultLocale (
9678 IN BOOLEAN ThreadOrSystem
,
9682 #if (VER_PRODUCTBUILD >= 2195)
9687 ZwQueryDirectoryObject (
9688 IN HANDLE DirectoryHandle
,
9691 IN BOOLEAN ReturnSingleEntry
,
9692 IN BOOLEAN RestartScan
,
9693 IN OUT PULONG Context
,
9694 OUT PULONG ReturnLength OPTIONAL
9697 #endif /* (VER_PRODUCTBUILD >= 2195) */
9702 ZwQueryInformationProcess (
9703 IN HANDLE ProcessHandle
,
9704 IN PROCESSINFOCLASS ProcessInformationClass
,
9705 OUT PVOID ProcessInformation
,
9706 IN ULONG ProcessInformationLength
,
9707 OUT PULONG ReturnLength OPTIONAL
9714 IN POBJECT_ATTRIBUTES NewFileObjectAttributes
,
9715 IN HANDLE KeyHandle
,
9716 IN POBJECT_ATTRIBUTES OldFileObjectAttributes
9723 IN HANDLE EventHandle
,
9724 OUT PLONG PreviousState OPTIONAL
9727 #if (VER_PRODUCTBUILD >= 2195)
9733 IN HANDLE KeyHandle
,
9734 IN HANDLE FileHandle
,
9738 #endif /* (VER_PRODUCTBUILD >= 2195) */
9744 IN HANDLE KeyHandle
,
9745 IN HANDLE FileHandle
9751 ZwSetDefaultLocale (
9752 IN BOOLEAN ThreadOrSystem
,
9756 #if (VER_PRODUCTBUILD >= 2195)
9761 ZwSetDefaultUILanguage (
9762 IN LANGID LanguageId
9765 #endif /* (VER_PRODUCTBUILD >= 2195) */
9770 ZwSetInformationProcess (
9771 IN HANDLE ProcessHandle
,
9772 IN PROCESSINFOCLASS ProcessInformationClass
,
9773 IN PVOID ProcessInformation
,
9774 IN ULONG ProcessInformationLength
9781 IN PLARGE_INTEGER NewTime
,
9782 OUT PLARGE_INTEGER OldTime OPTIONAL
9789 IN POBJECT_ATTRIBUTES KeyObjectAttributes
9795 ZwWaitForMultipleObjects (
9796 IN ULONG HandleCount
,
9798 IN WAIT_TYPE WaitType
,
9799 IN BOOLEAN Alertable
,
9800 IN PLARGE_INTEGER Timeout OPTIONAL