4 * Windows NT Filesystem Driver Developer Kit
6 * This file is part of the w32api package.
9 * Created by Bo Brantén <bosse@acc.umu.se>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
25 #define _NTIFS_INCLUDED_
28 /* Helper macro to enable gcc's extension. */
29 #ifndef __GNU_EXTENSION
31 #define __GNU_EXTENSION __extension__
33 #define __GNU_EXTENSION
41 #if !defined(_NTHALDLL_) && !defined(_BLDR_)
42 #define NTHALAPI DECLSPEC_IMPORT
48 #if !defined(_NTOSKRNL_) && !defined(_BLDR_)
49 #define NTKERNELAPI DECLSPEC_IMPORT
61 /* FIXME : #include <ntiologc.h> */
64 #define FlagOn(_F,_SF) ((_F) & (_SF))
68 #define BooleanFlagOn(F,SF) ((BOOLEAN)(((F) & (SF)) != 0))
72 #define SetFlag(_F,_SF) ((_F) |= (_SF))
76 #define ClearFlag(_F,_SF) ((_F) &= ~(_SF))
79 #define PsGetCurrentProcess IoGetCurrentProcess
81 #if (NTDDI_VERSION >= NTDDI_VISTA)
82 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
83 #elif (NTDDI_VERSION >= NTDDI_WINXP)
84 extern NTSYSAPI CCHAR KeNumberProcessors
;
86 extern PCCHAR KeNumberProcessors
;
89 typedef UNICODE_STRING LSA_UNICODE_STRING
, *PLSA_UNICODE_STRING
;
90 typedef STRING LSA_STRING
, *PLSA_STRING
;
91 typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES
, *PLSA_OBJECT_ATTRIBUTES
;
93 #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
94 #define SID_IDENTIFIER_AUTHORITY_DEFINED
95 typedef struct _SID_IDENTIFIER_AUTHORITY
{
97 } SID_IDENTIFIER_AUTHORITY
,*PSID_IDENTIFIER_AUTHORITY
,*LPSID_IDENTIFIER_AUTHORITY
;
102 typedef struct _SID
{
104 UCHAR SubAuthorityCount
;
105 SID_IDENTIFIER_AUTHORITY IdentifierAuthority
;
106 ULONG SubAuthority
[ANYSIZE_ARRAY
];
110 #define SID_REVISION 1
111 #define SID_MAX_SUB_AUTHORITIES 15
112 #define SID_RECOMMENDED_SUB_AUTHORITIES 1
114 typedef enum _SID_NAME_USE
{
119 SidTypeWellKnownGroup
,
120 SidTypeDeletedAccount
,
125 } SID_NAME_USE
, *PSID_NAME_USE
;
127 typedef struct _SID_AND_ATTRIBUTES
{
130 } SID_AND_ATTRIBUTES
, *PSID_AND_ATTRIBUTES
;
131 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY
[ANYSIZE_ARRAY
];
132 typedef SID_AND_ATTRIBUTES_ARRAY
*PSID_AND_ATTRIBUTES_ARRAY
;
134 #define SID_HASH_SIZE 32
135 typedef ULONG_PTR SID_HASH_ENTRY
, *PSID_HASH_ENTRY
;
137 typedef struct _SID_AND_ATTRIBUTES_HASH
{
139 PSID_AND_ATTRIBUTES SidAttr
;
140 SID_HASH_ENTRY Hash
[SID_HASH_SIZE
];
141 } SID_AND_ATTRIBUTES_HASH
, *PSID_AND_ATTRIBUTES_HASH
;
143 /* Universal well-known SIDs */
145 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
146 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
147 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
148 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
149 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
150 #define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
152 #define SECURITY_NULL_RID (0x00000000L)
153 #define SECURITY_WORLD_RID (0x00000000L)
154 #define SECURITY_LOCAL_RID (0x00000000L)
155 #define SECURITY_LOCAL_LOGON_RID (0x00000001L)
157 #define SECURITY_CREATOR_OWNER_RID (0x00000000L)
158 #define SECURITY_CREATOR_GROUP_RID (0x00000001L)
159 #define SECURITY_CREATOR_OWNER_SERVER_RID (0x00000002L)
160 #define SECURITY_CREATOR_GROUP_SERVER_RID (0x00000003L)
161 #define SECURITY_CREATOR_OWNER_RIGHTS_RID (0x00000004L)
163 /* NT well-known SIDs */
165 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
167 #define SECURITY_DIALUP_RID (0x00000001L)
168 #define SECURITY_NETWORK_RID (0x00000002L)
169 #define SECURITY_BATCH_RID (0x00000003L)
170 #define SECURITY_INTERACTIVE_RID (0x00000004L)
171 #define SECURITY_LOGON_IDS_RID (0x00000005L)
172 #define SECURITY_LOGON_IDS_RID_COUNT (3L)
173 #define SECURITY_SERVICE_RID (0x00000006L)
174 #define SECURITY_ANONYMOUS_LOGON_RID (0x00000007L)
175 #define SECURITY_PROXY_RID (0x00000008L)
176 #define SECURITY_ENTERPRISE_CONTROLLERS_RID (0x00000009L)
177 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
178 #define SECURITY_PRINCIPAL_SELF_RID (0x0000000AL)
179 #define SECURITY_AUTHENTICATED_USER_RID (0x0000000BL)
180 #define SECURITY_RESTRICTED_CODE_RID (0x0000000CL)
181 #define SECURITY_TERMINAL_SERVER_RID (0x0000000DL)
182 #define SECURITY_REMOTE_LOGON_RID (0x0000000EL)
183 #define SECURITY_THIS_ORGANIZATION_RID (0x0000000FL)
184 #define SECURITY_IUSER_RID (0x00000011L)
185 #define SECURITY_LOCAL_SYSTEM_RID (0x00000012L)
186 #define SECURITY_LOCAL_SERVICE_RID (0x00000013L)
187 #define SECURITY_NETWORK_SERVICE_RID (0x00000014L)
188 #define SECURITY_NT_NON_UNIQUE (0x00000015L)
189 #define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT (3L)
190 #define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID (0x00000016L)
192 #define SECURITY_BUILTIN_DOMAIN_RID (0x00000020L)
193 #define SECURITY_WRITE_RESTRICTED_CODE_RID (0x00000021L)
196 #define SECURITY_PACKAGE_BASE_RID (0x00000040L)
197 #define SECURITY_PACKAGE_RID_COUNT (2L)
198 #define SECURITY_PACKAGE_NTLM_RID (0x0000000AL)
199 #define SECURITY_PACKAGE_SCHANNEL_RID (0x0000000EL)
200 #define SECURITY_PACKAGE_DIGEST_RID (0x00000015L)
202 #define SECURITY_CRED_TYPE_BASE_RID (0x00000041L)
203 #define SECURITY_CRED_TYPE_RID_COUNT (2L)
204 #define SECURITY_CRED_TYPE_THIS_ORG_CERT_RID (0x00000001L)
206 #define SECURITY_MIN_BASE_RID (0x00000050L)
207 #define SECURITY_SERVICE_ID_BASE_RID (0x00000050L)
208 #define SECURITY_SERVICE_ID_RID_COUNT (6L)
209 #define SECURITY_RESERVED_ID_BASE_RID (0x00000051L)
210 #define SECURITY_APPPOOL_ID_BASE_RID (0x00000052L)
211 #define SECURITY_APPPOOL_ID_RID_COUNT (6L)
212 #define SECURITY_VIRTUALSERVER_ID_BASE_RID (0x00000053L)
213 #define SECURITY_VIRTUALSERVER_ID_RID_COUNT (6L)
214 #define SECURITY_USERMODEDRIVERHOST_ID_BASE_RID (0x00000054L)
215 #define SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT (6L)
216 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID (0x00000055L)
217 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT (6L)
218 #define SECURITY_WMIHOST_ID_BASE_RID (0x00000056L)
219 #define SECURITY_WMIHOST_ID_RID_COUNT (6L)
220 #define SECURITY_TASK_ID_BASE_RID (0x00000057L)
221 #define SECURITY_NFS_ID_BASE_RID (0x00000058L)
222 #define SECURITY_COM_ID_BASE_RID (0x00000059L)
223 #define SECURITY_VIRTUALACCOUNT_ID_RID_COUNT (6L)
225 #define SECURITY_MAX_BASE_RID (0x0000006FL)
227 #define SECURITY_MAX_ALWAYS_FILTERED (0x000003E7L)
228 #define SECURITY_MIN_NEVER_FILTERED (0x000003E8L)
230 #define SECURITY_OTHER_ORGANIZATION_RID (0x000003E8L)
232 #define SECURITY_WINDOWSMOBILE_ID_BASE_RID (0x00000070L)
234 /* Well-known domain relative sub-authority values (RIDs) */
236 #define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS (0x000001F2L)
238 #define FOREST_USER_RID_MAX (0x000001F3L)
240 /* Well-known users */
242 #define DOMAIN_USER_RID_ADMIN (0x000001F4L)
243 #define DOMAIN_USER_RID_GUEST (0x000001F5L)
244 #define DOMAIN_USER_RID_KRBTGT (0x000001F6L)
246 #define DOMAIN_USER_RID_MAX (0x000003E7L)
248 /* Well-known groups */
250 #define DOMAIN_GROUP_RID_ADMINS (0x00000200L)
251 #define DOMAIN_GROUP_RID_USERS (0x00000201L)
252 #define DOMAIN_GROUP_RID_GUESTS (0x00000202L)
253 #define DOMAIN_GROUP_RID_COMPUTERS (0x00000203L)
254 #define DOMAIN_GROUP_RID_CONTROLLERS (0x00000204L)
255 #define DOMAIN_GROUP_RID_CERT_ADMINS (0x00000205L)
256 #define DOMAIN_GROUP_RID_SCHEMA_ADMINS (0x00000206L)
257 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (0x00000207L)
258 #define DOMAIN_GROUP_RID_POLICY_ADMINS (0x00000208L)
259 #define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (0x00000209L)
261 /* Well-known aliases */
263 #define DOMAIN_ALIAS_RID_ADMINS (0x00000220L)
264 #define DOMAIN_ALIAS_RID_USERS (0x00000221L)
265 #define DOMAIN_ALIAS_RID_GUESTS (0x00000222L)
266 #define DOMAIN_ALIAS_RID_POWER_USERS (0x00000223L)
268 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS (0x00000224L)
269 #define DOMAIN_ALIAS_RID_SYSTEM_OPS (0x00000225L)
270 #define DOMAIN_ALIAS_RID_PRINT_OPS (0x00000226L)
271 #define DOMAIN_ALIAS_RID_BACKUP_OPS (0x00000227L)
273 #define DOMAIN_ALIAS_RID_REPLICATOR (0x00000228L)
274 #define DOMAIN_ALIAS_RID_RAS_SERVERS (0x00000229L)
275 #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS (0x0000022AL)
276 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS (0x0000022BL)
277 #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS (0x0000022CL)
278 #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS (0x0000022DL)
280 #define DOMAIN_ALIAS_RID_MONITORING_USERS (0x0000022EL)
281 #define DOMAIN_ALIAS_RID_LOGGING_USERS (0x0000022FL)
282 #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS (0x00000230L)
283 #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS (0x00000231L)
284 #define DOMAIN_ALIAS_RID_DCOM_USERS (0x00000232L)
285 #define DOMAIN_ALIAS_RID_IUSERS (0x00000238L)
286 #define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS (0x00000239L)
287 #define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP (0x0000023BL)
288 #define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (0x0000023CL)
289 #define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP (0x0000023DL)
290 #define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP (0x0000023EL)
292 #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
293 #define SECURITY_MANDATORY_UNTRUSTED_RID (0x00000000L)
294 #define SECURITY_MANDATORY_LOW_RID (0x00001000L)
295 #define SECURITY_MANDATORY_MEDIUM_RID (0x00002000L)
296 #define SECURITY_MANDATORY_HIGH_RID (0x00003000L)
297 #define SECURITY_MANDATORY_SYSTEM_RID (0x00004000L)
298 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID (0x00005000L)
300 /* SECURITY_MANDATORY_MAXIMUM_USER_RID is the highest RID that
301 can be set by a usermode caller.*/
303 #define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
305 #define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
307 /* Allocate the System Luid. The first 1000 LUIDs are reserved.
308 Use #999 here (0x3e7 = 999) */
310 #define SYSTEM_LUID { 0x3e7, 0x0 }
311 #define ANONYMOUS_LOGON_LUID { 0x3e6, 0x0 }
312 #define LOCALSERVICE_LUID { 0x3e5, 0x0 }
313 #define NETWORKSERVICE_LUID { 0x3e4, 0x0 }
314 #define IUSER_LUID { 0x3e3, 0x0 }
316 typedef struct _ACE_HEADER
{
320 } ACE_HEADER
, *PACE_HEADER
;
322 /* also in winnt.h */
323 #define ACCESS_MIN_MS_ACE_TYPE (0x0)
324 #define ACCESS_ALLOWED_ACE_TYPE (0x0)
325 #define ACCESS_DENIED_ACE_TYPE (0x1)
326 #define SYSTEM_AUDIT_ACE_TYPE (0x2)
327 #define SYSTEM_ALARM_ACE_TYPE (0x3)
328 #define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
329 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
330 #define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
331 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
332 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
333 #define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
334 #define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
335 #define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
336 #define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
337 #define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
338 #define ACCESS_MAX_MS_ACE_TYPE (0x8)
339 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
340 #define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
341 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
342 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
343 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
344 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
345 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
346 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
347 #define ACCESS_MAX_MS_V5_ACE_TYPE (0x11)
348 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE (0x11)
350 /* The following are the inherit flags that go into the AceFlags field
353 #define OBJECT_INHERIT_ACE (0x1)
354 #define CONTAINER_INHERIT_ACE (0x2)
355 #define NO_PROPAGATE_INHERIT_ACE (0x4)
356 #define INHERIT_ONLY_ACE (0x8)
357 #define INHERITED_ACE (0x10)
358 #define VALID_INHERIT_FLAGS (0x1F)
360 #define SUCCESSFUL_ACCESS_ACE_FLAG (0x40)
361 #define FAILED_ACCESS_ACE_FLAG (0x80)
363 typedef struct _ACCESS_ALLOWED_ACE
{
367 } ACCESS_ALLOWED_ACE
, *PACCESS_ALLOWED_ACE
;
369 typedef struct _ACCESS_DENIED_ACE
{
373 } ACCESS_DENIED_ACE
, *PACCESS_DENIED_ACE
;
375 typedef struct _SYSTEM_AUDIT_ACE
{
379 } SYSTEM_AUDIT_ACE
, *PSYSTEM_AUDIT_ACE
;
381 typedef struct _SYSTEM_ALARM_ACE
{
385 } SYSTEM_ALARM_ACE
, *PSYSTEM_ALARM_ACE
;
387 typedef struct _SYSTEM_MANDATORY_LABEL_ACE
{
391 } SYSTEM_MANDATORY_LABEL_ACE
, *PSYSTEM_MANDATORY_LABEL_ACE
;
393 #define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1
394 #define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2
395 #define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
396 #define SYSTEM_MANDATORY_LABEL_VALID_MASK (SYSTEM_MANDATORY_LABEL_NO_WRITE_UP | \
397 SYSTEM_MANDATORY_LABEL_NO_READ_UP | \
398 SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP)
400 #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
402 typedef USHORT SECURITY_DESCRIPTOR_CONTROL
,*PSECURITY_DESCRIPTOR_CONTROL
;
404 #define SE_OWNER_DEFAULTED 0x0001
405 #define SE_GROUP_DEFAULTED 0x0002
406 #define SE_DACL_PRESENT 0x0004
407 #define SE_DACL_DEFAULTED 0x0008
408 #define SE_SACL_PRESENT 0x0010
409 #define SE_SACL_DEFAULTED 0x0020
410 #define SE_DACL_UNTRUSTED 0x0040
411 #define SE_SERVER_SECURITY 0x0080
412 #define SE_DACL_AUTO_INHERIT_REQ 0x0100
413 #define SE_SACL_AUTO_INHERIT_REQ 0x0200
414 #define SE_DACL_AUTO_INHERITED 0x0400
415 #define SE_SACL_AUTO_INHERITED 0x0800
416 #define SE_DACL_PROTECTED 0x1000
417 #define SE_SACL_PROTECTED 0x2000
418 #define SE_RM_CONTROL_VALID 0x4000
419 #define SE_SELF_RELATIVE 0x8000
421 typedef struct _SECURITY_DESCRIPTOR_RELATIVE
{
424 SECURITY_DESCRIPTOR_CONTROL Control
;
429 } SECURITY_DESCRIPTOR_RELATIVE
, *PISECURITY_DESCRIPTOR_RELATIVE
;
431 typedef struct _SECURITY_DESCRIPTOR
{
434 SECURITY_DESCRIPTOR_CONTROL Control
;
439 } SECURITY_DESCRIPTOR
, *PISECURITY_DESCRIPTOR
;
441 typedef struct _OBJECT_TYPE_LIST
{
445 } OBJECT_TYPE_LIST
, *POBJECT_TYPE_LIST
;
447 #define ACCESS_OBJECT_GUID 0
448 #define ACCESS_PROPERTY_SET_GUID 1
449 #define ACCESS_PROPERTY_GUID 2
450 #define ACCESS_MAX_LEVEL 4
452 typedef enum _AUDIT_EVENT_TYPE
{
453 AuditEventObjectAccess
,
454 AuditEventDirectoryServiceAccess
455 } AUDIT_EVENT_TYPE
, *PAUDIT_EVENT_TYPE
;
457 #define AUDIT_ALLOW_NO_PRIVILEGE 0x1
459 #define ACCESS_DS_SOURCE_A "DS"
460 #define ACCESS_DS_SOURCE_W L"DS"
461 #define ACCESS_DS_OBJECT_TYPE_NAME_A "Directory Service Object"
462 #define ACCESS_DS_OBJECT_TYPE_NAME_W L"Directory Service Object"
464 #define ACCESS_REASON_TYPE_MASK 0xffff0000
465 #define ACCESS_REASON_DATA_MASK 0x0000ffff
467 typedef enum _ACCESS_REASON_TYPE
{
468 AccessReasonNone
= 0x00000000,
469 AccessReasonAllowedAce
= 0x00010000,
470 AccessReasonDeniedAce
= 0x00020000,
471 AccessReasonAllowedParentAce
= 0x00030000,
472 AccessReasonDeniedParentAce
= 0x00040000,
473 AccessReasonMissingPrivilege
= 0x00100000,
474 AccessReasonFromPrivilege
= 0x00200000,
475 AccessReasonIntegrityLevel
= 0x00300000,
476 AccessReasonOwnership
= 0x00400000,
477 AccessReasonNullDacl
= 0x00500000,
478 AccessReasonEmptyDacl
= 0x00600000,
479 AccessReasonNoSD
= 0x00700000,
480 AccessReasonNoGrant
= 0x00800000
481 } ACCESS_REASON_TYPE
;
483 typedef ULONG ACCESS_REASON
;
485 typedef struct _ACCESS_REASONS
{
486 ACCESS_REASON Data
[32];
487 } ACCESS_REASONS
, *PACCESS_REASONS
;
489 #define SE_SECURITY_DESCRIPTOR_FLAG_NO_OWNER_ACE 0x00000001
490 #define SE_SECURITY_DESCRIPTOR_FLAG_NO_LABEL_ACE 0x00000002
491 #define SE_SECURITY_DESCRIPTOR_VALID_FLAGS 0x00000003
493 typedef struct _SE_SECURITY_DESCRIPTOR
{
496 PSECURITY_DESCRIPTOR SecurityDescriptor
;
497 } SE_SECURITY_DESCRIPTOR
, *PSE_SECURITY_DESCRIPTOR
;
499 typedef struct _SE_ACCESS_REQUEST
{
501 PSE_SECURITY_DESCRIPTOR SeSecurityDescriptor
;
502 ACCESS_MASK DesiredAccess
;
503 ACCESS_MASK PreviouslyGrantedAccess
;
504 PSID PrincipalSelfSid
;
505 PGENERIC_MAPPING GenericMapping
;
506 ULONG ObjectTypeListCount
;
507 POBJECT_TYPE_LIST ObjectTypeList
;
508 } SE_ACCESS_REQUEST
, *PSE_ACCESS_REQUEST
;
510 typedef struct _SE_ACCESS_REPLY
{
512 ULONG ResultListCount
;
513 PACCESS_MASK GrantedAccess
;
514 PNTSTATUS AccessStatus
;
515 PACCESS_REASONS AccessReason
;
516 PPRIVILEGE_SET
* Privileges
;
517 } SE_ACCESS_REPLY
, *PSE_ACCESS_REPLY
;
519 typedef enum _SE_AUDIT_OPERATION
{
520 AuditPrivilegeObject
,
521 AuditPrivilegeService
,
524 AuditOpenObjectWithTransaction
,
527 AuditOpenObjectForDelete
,
528 AuditOpenObjectForDeleteWithTransaction
,
531 AuditObjectReference
,
533 } SE_AUDIT_OPERATION
, *PSE_AUDIT_OPERATION
;
535 typedef struct _SE_AUDIT_INFO
{
537 AUDIT_EVENT_TYPE AuditType
;
538 SE_AUDIT_OPERATION AuditOperation
;
540 UNICODE_STRING SubsystemName
;
541 UNICODE_STRING ObjectTypeName
;
542 UNICODE_STRING ObjectName
;
546 BOOLEAN ObjectCreation
;
547 BOOLEAN GenerateOnClose
;
548 } SE_AUDIT_INFO
, *PSE_AUDIT_INFO
;
550 #define TOKEN_ASSIGN_PRIMARY (0x0001)
551 #define TOKEN_DUPLICATE (0x0002)
552 #define TOKEN_IMPERSONATE (0x0004)
553 #define TOKEN_QUERY (0x0008)
554 #define TOKEN_QUERY_SOURCE (0x0010)
555 #define TOKEN_ADJUST_PRIVILEGES (0x0020)
556 #define TOKEN_ADJUST_GROUPS (0x0040)
557 #define TOKEN_ADJUST_DEFAULT (0x0080)
558 #define TOKEN_ADJUST_SESSIONID (0x0100)
560 #define TOKEN_ALL_ACCESS_P (STANDARD_RIGHTS_REQUIRED |\
561 TOKEN_ASSIGN_PRIMARY |\
565 TOKEN_QUERY_SOURCE |\
566 TOKEN_ADJUST_PRIVILEGES |\
567 TOKEN_ADJUST_GROUPS |\
568 TOKEN_ADJUST_DEFAULT )
570 #if ((defined(_WIN32_WINNT) && (_WIN32_WINNT > 0x0400)) || (!defined(_WIN32_WINNT)))
571 #define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P |\
572 TOKEN_ADJUST_SESSIONID )
574 #define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P)
577 #define TOKEN_READ (STANDARD_RIGHTS_READ |\
580 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\
581 TOKEN_ADJUST_PRIVILEGES |\
582 TOKEN_ADJUST_GROUPS |\
583 TOKEN_ADJUST_DEFAULT)
585 #define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
587 typedef enum _TOKEN_TYPE
{
590 } TOKEN_TYPE
,*PTOKEN_TYPE
;
592 typedef enum _TOKEN_INFORMATION_CLASS
{
601 TokenImpersonationLevel
,
605 TokenGroupsAndPrivileges
,
606 TokenSessionReference
,
613 TokenHasRestrictions
,
614 TokenAccessInformation
,
615 TokenVirtualizationAllowed
,
616 TokenVirtualizationEnabled
,
619 TokenMandatoryPolicy
,
622 } TOKEN_INFORMATION_CLASS
, *PTOKEN_INFORMATION_CLASS
;
624 typedef struct _TOKEN_USER
{
625 SID_AND_ATTRIBUTES User
;
626 } TOKEN_USER
, *PTOKEN_USER
;
628 typedef struct _TOKEN_GROUPS
{
630 SID_AND_ATTRIBUTES Groups
[ANYSIZE_ARRAY
];
631 } TOKEN_GROUPS
,*PTOKEN_GROUPS
,*LPTOKEN_GROUPS
;
633 typedef struct _TOKEN_PRIVILEGES
{
634 ULONG PrivilegeCount
;
635 LUID_AND_ATTRIBUTES Privileges
[ANYSIZE_ARRAY
];
636 } TOKEN_PRIVILEGES
,*PTOKEN_PRIVILEGES
,*LPTOKEN_PRIVILEGES
;
638 typedef struct _TOKEN_OWNER
{
640 } TOKEN_OWNER
,*PTOKEN_OWNER
;
642 typedef struct _TOKEN_PRIMARY_GROUP
{
644 } TOKEN_PRIMARY_GROUP
,*PTOKEN_PRIMARY_GROUP
;
646 typedef struct _TOKEN_DEFAULT_DACL
{
648 } TOKEN_DEFAULT_DACL
,*PTOKEN_DEFAULT_DACL
;
650 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES
{
653 PSID_AND_ATTRIBUTES Sids
;
654 ULONG RestrictedSidCount
;
655 ULONG RestrictedSidLength
;
656 PSID_AND_ATTRIBUTES RestrictedSids
;
657 ULONG PrivilegeCount
;
658 ULONG PrivilegeLength
;
659 PLUID_AND_ATTRIBUTES Privileges
;
660 LUID AuthenticationId
;
661 } TOKEN_GROUPS_AND_PRIVILEGES
, *PTOKEN_GROUPS_AND_PRIVILEGES
;
663 typedef struct _TOKEN_LINKED_TOKEN
{
665 } TOKEN_LINKED_TOKEN
, *PTOKEN_LINKED_TOKEN
;
667 typedef struct _TOKEN_ELEVATION
{
668 ULONG TokenIsElevated
;
669 } TOKEN_ELEVATION
, *PTOKEN_ELEVATION
;
671 typedef struct _TOKEN_MANDATORY_LABEL
{
672 SID_AND_ATTRIBUTES Label
;
673 } TOKEN_MANDATORY_LABEL
, *PTOKEN_MANDATORY_LABEL
;
675 #define TOKEN_MANDATORY_POLICY_OFF 0x0
676 #define TOKEN_MANDATORY_POLICY_NO_WRITE_UP 0x1
677 #define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2
679 #define TOKEN_MANDATORY_POLICY_VALID_MASK (TOKEN_MANDATORY_POLICY_NO_WRITE_UP | \
680 TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN)
682 typedef struct _TOKEN_MANDATORY_POLICY
{
684 } TOKEN_MANDATORY_POLICY
, *PTOKEN_MANDATORY_POLICY
;
686 typedef struct _TOKEN_ACCESS_INFORMATION
{
687 PSID_AND_ATTRIBUTES_HASH SidHash
;
688 PSID_AND_ATTRIBUTES_HASH RestrictedSidHash
;
689 PTOKEN_PRIVILEGES Privileges
;
690 LUID AuthenticationId
;
691 TOKEN_TYPE TokenType
;
692 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
693 TOKEN_MANDATORY_POLICY MandatoryPolicy
;
695 } TOKEN_ACCESS_INFORMATION
, *PTOKEN_ACCESS_INFORMATION
;
697 #define POLICY_AUDIT_SUBCATEGORY_COUNT (53)
699 typedef struct _TOKEN_AUDIT_POLICY
{
700 UCHAR PerUserPolicy
[((POLICY_AUDIT_SUBCATEGORY_COUNT
) >> 1) + 1];
701 } TOKEN_AUDIT_POLICY
, *PTOKEN_AUDIT_POLICY
;
703 #define TOKEN_SOURCE_LENGTH 8
705 typedef struct _TOKEN_SOURCE
{
706 CHAR SourceName
[TOKEN_SOURCE_LENGTH
];
707 LUID SourceIdentifier
;
708 } TOKEN_SOURCE
,*PTOKEN_SOURCE
;
710 typedef struct _TOKEN_STATISTICS
{
712 LUID AuthenticationId
;
713 LARGE_INTEGER ExpirationTime
;
714 TOKEN_TYPE TokenType
;
715 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
716 ULONG DynamicCharged
;
717 ULONG DynamicAvailable
;
719 ULONG PrivilegeCount
;
721 } TOKEN_STATISTICS
, *PTOKEN_STATISTICS
;
723 typedef struct _TOKEN_CONTROL
{
725 LUID AuthenticationId
;
727 TOKEN_SOURCE TokenSource
;
728 } TOKEN_CONTROL
,*PTOKEN_CONTROL
;
730 typedef struct _TOKEN_ORIGIN
{
731 LUID OriginatingLogonSession
;
732 } TOKEN_ORIGIN
, *PTOKEN_ORIGIN
;
734 typedef enum _MANDATORY_LEVEL
{
735 MandatoryLevelUntrusted
= 0,
737 MandatoryLevelMedium
,
739 MandatoryLevelSystem
,
740 MandatoryLevelSecureProcess
,
742 } MANDATORY_LEVEL
, *PMANDATORY_LEVEL
;
744 #if (NTDDI_VERSION >= NTDDI_NT4)
750 IN HANDLE Handle OPTIONAL
,
751 IN OBJECT_INFORMATION_CLASS ObjectInformationClass
,
752 OUT PVOID ObjectInformation OPTIONAL
,
753 IN ULONG ObjectInformationLength
,
754 OUT PULONG ReturnLength OPTIONAL
);
758 #if (NTDDI_VERSION >= NTDDI_WIN2K)
764 IN HANDLE ThreadHandle
,
765 IN ACCESS_MASK DesiredAccess
,
766 IN BOOLEAN OpenAsSelf
,
767 OUT PHANDLE TokenHandle
);
773 IN HANDLE ProcessHandle
,
774 IN ACCESS_MASK DesiredAccess
,
775 OUT PHANDLE TokenHandle
);
780 NtQueryInformationToken(
781 IN HANDLE TokenHandle
,
782 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
783 OUT PVOID TokenInformation OPTIONAL
,
784 IN ULONG TokenInformationLength
,
785 OUT PULONG ReturnLength
);
790 NtAdjustPrivilegesToken(
791 IN HANDLE TokenHandle
,
792 IN BOOLEAN DisableAllPrivileges
,
793 IN PTOKEN_PRIVILEGES NewState OPTIONAL
,
794 IN ULONG BufferLength
,
795 OUT PTOKEN_PRIVILEGES PreviousState
,
796 OUT PULONG ReturnLength OPTIONAL
);
802 OUT PHANDLE FileHandle
,
803 IN ACCESS_MASK DesiredAccess
,
804 IN POBJECT_ATTRIBUTES ObjectAttributes
,
805 OUT PIO_STATUS_BLOCK IoStatusBlock
,
806 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
807 IN ULONG FileAttributes
,
808 IN ULONG ShareAccess
,
809 IN ULONG CreateDisposition
,
810 IN ULONG CreateOptions
,
817 NtDeviceIoControlFile(
818 IN HANDLE FileHandle
,
819 IN HANDLE Event OPTIONAL
,
820 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
821 IN PVOID ApcContext OPTIONAL
,
822 OUT PIO_STATUS_BLOCK IoStatusBlock
,
823 IN ULONG IoControlCode
,
824 IN PVOID InputBuffer OPTIONAL
,
825 IN ULONG InputBufferLength
,
826 OUT PVOID OutputBuffer OPTIONAL
,
827 IN ULONG OutputBufferLength
);
833 IN HANDLE FileHandle
,
834 IN HANDLE Event OPTIONAL
,
835 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
836 IN PVOID ApcContext OPTIONAL
,
837 OUT PIO_STATUS_BLOCK IoStatusBlock
,
838 IN ULONG FsControlCode
,
839 IN PVOID InputBuffer OPTIONAL
,
840 IN ULONG InputBufferLength
,
841 OUT PVOID OutputBuffer OPTIONAL
,
842 IN ULONG OutputBufferLength
);
848 IN HANDLE FileHandle
,
849 IN HANDLE Event OPTIONAL
,
850 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
851 IN PVOID ApcContext OPTIONAL
,
852 OUT PIO_STATUS_BLOCK IoStatusBlock
,
853 IN PLARGE_INTEGER ByteOffset
,
854 IN PLARGE_INTEGER Length
,
856 IN BOOLEAN FailImmediately
,
857 IN BOOLEAN ExclusiveLock
);
863 OUT PHANDLE FileHandle
,
864 IN ACCESS_MASK DesiredAccess
,
865 IN POBJECT_ATTRIBUTES ObjectAttributes
,
866 OUT PIO_STATUS_BLOCK IoStatusBlock
,
867 IN ULONG ShareAccess
,
868 IN ULONG OpenOptions
);
873 NtQueryDirectoryFile(
874 IN HANDLE FileHandle
,
875 IN HANDLE Event OPTIONAL
,
876 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
877 IN PVOID ApcContext OPTIONAL
,
878 OUT PIO_STATUS_BLOCK IoStatusBlock
,
879 OUT PVOID FileInformation
,
881 IN FILE_INFORMATION_CLASS FileInformationClass
,
882 IN BOOLEAN ReturnSingleEntry
,
883 IN PUNICODE_STRING FileName OPTIONAL
,
884 IN BOOLEAN RestartScan
);
889 NtQueryInformationFile(
890 IN HANDLE FileHandle
,
891 OUT PIO_STATUS_BLOCK IoStatusBlock
,
892 OUT PVOID FileInformation
,
894 IN FILE_INFORMATION_CLASS FileInformationClass
);
899 NtQueryQuotaInformationFile(
900 IN HANDLE FileHandle
,
901 OUT PIO_STATUS_BLOCK IoStatusBlock
,
904 IN BOOLEAN ReturnSingleEntry
,
906 IN ULONG SidListLength
,
907 IN PSID StartSid OPTIONAL
,
908 IN BOOLEAN RestartScan
);
913 NtQueryVolumeInformationFile(
914 IN HANDLE FileHandle
,
915 OUT PIO_STATUS_BLOCK IoStatusBlock
,
916 OUT PVOID FsInformation
,
918 IN FS_INFORMATION_CLASS FsInformationClass
);
924 IN HANDLE FileHandle
,
925 IN HANDLE Event OPTIONAL
,
926 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
927 IN PVOID ApcContext OPTIONAL
,
928 OUT PIO_STATUS_BLOCK IoStatusBlock
,
931 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
932 IN PULONG Key OPTIONAL
);
937 NtSetInformationFile(
938 IN HANDLE FileHandle
,
939 OUT PIO_STATUS_BLOCK IoStatusBlock
,
940 IN PVOID FileInformation
,
942 IN FILE_INFORMATION_CLASS FileInformationClass
);
947 NtSetQuotaInformationFile(
948 IN HANDLE FileHandle
,
949 OUT PIO_STATUS_BLOCK IoStatusBlock
,
956 NtSetVolumeInformationFile(
957 IN HANDLE FileHandle
,
958 OUT PIO_STATUS_BLOCK IoStatusBlock
,
959 IN PVOID FsInformation
,
961 IN FS_INFORMATION_CLASS FsInformationClass
);
967 IN HANDLE FileHandle
,
968 IN HANDLE Event OPTIONAL
,
969 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
970 IN PVOID ApcContext OPTIONAL
,
971 OUT PIO_STATUS_BLOCK IoStatusBlock
,
974 IN PLARGE_INTEGER ByteOffset OPTIONAL
,
975 IN PULONG Key OPTIONAL
);
981 IN HANDLE FileHandle
,
982 OUT PIO_STATUS_BLOCK IoStatusBlock
,
983 IN PLARGE_INTEGER ByteOffset
,
984 IN PLARGE_INTEGER Length
,
992 IN SECURITY_INFORMATION SecurityInformation
,
993 IN PSECURITY_DESCRIPTOR SecurityDescriptor
);
998 NtQuerySecurityObject(
1000 IN SECURITY_INFORMATION SecurityInformation
,
1001 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1003 OUT PULONG LengthNeeded
);
1014 NtAllocateVirtualMemory(
1015 IN HANDLE ProcessHandle
,
1016 IN OUT PVOID
*BaseAddress
,
1017 IN ULONG_PTR ZeroBits
,
1018 IN OUT PSIZE_T RegionSize
,
1019 IN ULONG AllocationType
,
1025 NtFreeVirtualMemory(
1026 IN HANDLE ProcessHandle
,
1027 IN OUT PVOID
*BaseAddress
,
1028 IN OUT PSIZE_T RegionSize
,
1033 #if (NTDDI_VERSION >= NTDDI_WINXP)
1038 NtOpenThreadTokenEx(
1039 IN HANDLE ThreadHandle
,
1040 IN ACCESS_MASK DesiredAccess
,
1041 IN BOOLEAN OpenAsSelf
,
1042 IN ULONG HandleAttributes
,
1043 OUT PHANDLE TokenHandle
);
1048 NtOpenProcessTokenEx(
1049 IN HANDLE ProcessHandle
,
1050 IN ACCESS_MASK DesiredAccess
,
1051 IN ULONG HandleAttributes
,
1052 OUT PHANDLE TokenHandle
);
1057 NtOpenJobObjectToken(
1058 IN HANDLE JobHandle
,
1059 IN ACCESS_MASK DesiredAccess
,
1060 OUT PHANDLE TokenHandle
);
1066 IN HANDLE ExistingTokenHandle
,
1067 IN ACCESS_MASK DesiredAccess
,
1068 IN POBJECT_ATTRIBUTES ObjectAttributes
,
1069 IN BOOLEAN EffectiveOnly
,
1070 IN TOKEN_TYPE TokenType
,
1071 OUT PHANDLE NewTokenHandle
);
1077 IN HANDLE ExistingTokenHandle
,
1079 IN PTOKEN_GROUPS SidsToDisable OPTIONAL
,
1080 IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL
,
1081 IN PTOKEN_GROUPS RestrictedSids OPTIONAL
,
1082 OUT PHANDLE NewTokenHandle
);
1087 NtImpersonateAnonymousToken(
1088 IN HANDLE ThreadHandle
);
1093 NtSetInformationToken(
1094 IN HANDLE TokenHandle
,
1095 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
1096 IN PVOID TokenInformation
,
1097 IN ULONG TokenInformationLength
);
1102 NtAdjustGroupsToken(
1103 IN HANDLE TokenHandle
,
1104 IN BOOLEAN ResetToDefault
,
1105 IN PTOKEN_GROUPS NewState OPTIONAL
,
1106 IN ULONG BufferLength OPTIONAL
,
1107 OUT PTOKEN_GROUPS PreviousState
,
1108 OUT PULONG ReturnLength
);
1114 IN HANDLE ClientToken
,
1115 IN OUT PPRIVILEGE_SET RequiredPrivileges
,
1116 OUT PBOOLEAN Result
);
1121 NtAccessCheckAndAuditAlarm(
1122 IN PUNICODE_STRING SubsystemName
,
1123 IN PVOID HandleId OPTIONAL
,
1124 IN PUNICODE_STRING ObjectTypeName
,
1125 IN PUNICODE_STRING ObjectName
,
1126 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1127 IN ACCESS_MASK DesiredAccess
,
1128 IN PGENERIC_MAPPING GenericMapping
,
1129 IN BOOLEAN ObjectCreation
,
1130 OUT PACCESS_MASK GrantedAccess
,
1131 OUT PNTSTATUS AccessStatus
,
1132 OUT PBOOLEAN GenerateOnClose
);
1137 NtAccessCheckByTypeAndAuditAlarm(
1138 IN PUNICODE_STRING SubsystemName
,
1140 IN PUNICODE_STRING ObjectTypeName
,
1141 IN PUNICODE_STRING ObjectName
,
1142 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1143 IN PSID PrincipalSelfSid OPTIONAL
,
1144 IN ACCESS_MASK DesiredAccess
,
1145 IN AUDIT_EVENT_TYPE AuditType
,
1147 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL
,
1148 IN ULONG ObjectTypeLength
,
1149 IN PGENERIC_MAPPING GenericMapping
,
1150 IN BOOLEAN ObjectCreation
,
1151 OUT PACCESS_MASK GrantedAccess
,
1152 OUT PNTSTATUS AccessStatus
,
1153 OUT PBOOLEAN GenerateOnClose
);
1158 NtAccessCheckByTypeResultListAndAuditAlarm(
1159 IN PUNICODE_STRING SubsystemName
,
1160 IN PVOID HandleId OPTIONAL
,
1161 IN PUNICODE_STRING ObjectTypeName
,
1162 IN PUNICODE_STRING ObjectName
,
1163 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1164 IN PSID PrincipalSelfSid OPTIONAL
,
1165 IN ACCESS_MASK DesiredAccess
,
1166 IN AUDIT_EVENT_TYPE AuditType
,
1168 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL
,
1169 IN ULONG ObjectTypeLength
,
1170 IN PGENERIC_MAPPING GenericMapping
,
1171 IN BOOLEAN ObjectCreation
,
1172 OUT PACCESS_MASK GrantedAccess
,
1173 OUT PNTSTATUS AccessStatus
,
1174 OUT PBOOLEAN GenerateOnClose
);
1178 NtAccessCheckByTypeResultListAndAuditAlarmByHandle(
1179 IN PUNICODE_STRING SubsystemName
,
1180 IN PVOID HandleId OPTIONAL
,
1181 IN HANDLE ClientToken
,
1182 IN PUNICODE_STRING ObjectTypeName
,
1183 IN PUNICODE_STRING ObjectName
,
1184 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1185 IN PSID PrincipalSelfSid OPTIONAL
,
1186 IN ACCESS_MASK DesiredAccess
,
1187 IN AUDIT_EVENT_TYPE AuditType
,
1189 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL
,
1190 IN ULONG ObjectTypeLength
,
1191 IN PGENERIC_MAPPING GenericMapping
,
1192 IN BOOLEAN ObjectCreation
,
1193 OUT PACCESS_MASK GrantedAccess
,
1194 OUT PNTSTATUS AccessStatus
,
1195 OUT PBOOLEAN GenerateOnClose
);
1200 NtOpenObjectAuditAlarm(
1201 IN PUNICODE_STRING SubsystemName
,
1202 IN PVOID HandleId OPTIONAL
,
1203 IN PUNICODE_STRING ObjectTypeName
,
1204 IN PUNICODE_STRING ObjectName
,
1205 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL
,
1206 IN HANDLE ClientToken
,
1207 IN ACCESS_MASK DesiredAccess
,
1208 IN ACCESS_MASK GrantedAccess
,
1209 IN PPRIVILEGE_SET Privileges OPTIONAL
,
1210 IN BOOLEAN ObjectCreation
,
1211 IN BOOLEAN AccessGranted
,
1212 OUT PBOOLEAN GenerateOnClose
);
1217 NtPrivilegeObjectAuditAlarm(
1218 IN PUNICODE_STRING SubsystemName
,
1219 IN PVOID HandleId OPTIONAL
,
1220 IN HANDLE ClientToken
,
1221 IN ACCESS_MASK DesiredAccess
,
1222 IN PPRIVILEGE_SET Privileges
,
1223 IN BOOLEAN AccessGranted
);
1228 NtCloseObjectAuditAlarm(
1229 IN PUNICODE_STRING SubsystemName
,
1230 IN PVOID HandleId OPTIONAL
,
1231 IN BOOLEAN GenerateOnClose
);
1236 NtDeleteObjectAuditAlarm(
1237 IN PUNICODE_STRING SubsystemName
,
1238 IN PVOID HandleId OPTIONAL
,
1239 IN BOOLEAN GenerateOnClose
);
1244 NtPrivilegedServiceAuditAlarm(
1245 IN PUNICODE_STRING SubsystemName
,
1246 IN PUNICODE_STRING ServiceName
,
1247 IN HANDLE ClientToken
,
1248 IN PPRIVILEGE_SET Privileges
,
1249 IN BOOLEAN AccessGranted
);
1254 NtSetInformationThread(
1255 IN HANDLE ThreadHandle
,
1256 IN THREADINFOCLASS ThreadInformationClass
,
1257 IN PVOID ThreadInformation
,
1258 IN ULONG ThreadInformationLength
);
1264 OUT PHANDLE SectionHandle
,
1265 IN ACCESS_MASK DesiredAccess
,
1266 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
1267 IN PLARGE_INTEGER MaximumSize OPTIONAL
,
1268 IN ULONG SectionPageProtection
,
1269 IN ULONG AllocationAttributes
,
1270 IN HANDLE FileHandle OPTIONAL
);
1275 (NTAPI
* PRTL_HEAP_COMMIT_ROUTINE
) (
1277 IN OUT PVOID
*CommitAddress
,
1278 IN OUT PSIZE_T CommitSize
);
1280 typedef struct _RTL_HEAP_PARAMETERS
{
1282 SIZE_T SegmentReserve
;
1283 SIZE_T SegmentCommit
;
1284 SIZE_T DeCommitFreeBlockThreshold
;
1285 SIZE_T DeCommitTotalFreeThreshold
;
1286 SIZE_T MaximumAllocationSize
;
1287 SIZE_T VirtualMemoryThreshold
;
1288 SIZE_T InitialCommit
;
1289 SIZE_T InitialReserve
;
1290 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine
;
1292 } RTL_HEAP_PARAMETERS
, *PRTL_HEAP_PARAMETERS
;
1294 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1300 IN HANDLE HeapHandle
,
1301 IN ULONG Flags OPTIONAL
,
1308 IN PVOID HeapHandle
,
1309 IN ULONG Flags OPTIONAL
,
1310 IN PVOID BaseAddress
);
1316 OUT PCONTEXT ContextRecord
);
1322 IN OUT PULONG Seed
);
1327 RtlCreateUnicodeString(
1328 OUT PUNICODE_STRING DestinationString
,
1329 IN PCWSTR SourceString
);
1334 RtlAppendStringToString(
1335 IN OUT PSTRING Destination
,
1336 IN
const STRING
*Source
);
1341 RtlOemStringToUnicodeString(
1342 IN OUT PUNICODE_STRING DestinationString
,
1343 IN PCOEM_STRING SourceString
,
1344 IN BOOLEAN AllocateDestinationString
);
1349 RtlUnicodeStringToOemString(
1350 IN OUT POEM_STRING DestinationString
,
1351 IN PCUNICODE_STRING SourceString
,
1352 IN BOOLEAN AllocateDestinationString
);
1357 RtlUpcaseUnicodeStringToOemString(
1358 IN OUT POEM_STRING DestinationString
,
1359 IN PCUNICODE_STRING SourceString
,
1360 IN BOOLEAN AllocateDestinationString
);
1365 RtlOemStringToCountedUnicodeString(
1366 IN OUT PUNICODE_STRING DestinationString
,
1367 IN PCOEM_STRING SourceString
,
1368 IN BOOLEAN AllocateDestinationString
);
1373 RtlUnicodeStringToCountedOemString(
1374 IN OUT POEM_STRING DestinationString
,
1375 IN PCUNICODE_STRING SourceString
,
1376 IN BOOLEAN AllocateDestinationString
);
1381 RtlUpcaseUnicodeStringToCountedOemString(
1382 IN OUT POEM_STRING DestinationString
,
1383 IN PCUNICODE_STRING SourceString
,
1384 IN BOOLEAN AllocateDestinationString
);
1389 RtlDowncaseUnicodeString(
1390 IN OUT PUNICODE_STRING UniDest
,
1391 IN PCUNICODE_STRING UniSource
,
1392 IN BOOLEAN AllocateDestinationString
);
1398 IN OUT POEM_STRING OemString
);
1403 RtlxUnicodeStringToOemSize(
1404 IN PCUNICODE_STRING UnicodeString
);
1409 RtlxOemStringToUnicodeSize(
1410 IN PCOEM_STRING OemString
);
1415 RtlMultiByteToUnicodeN(
1416 OUT PWCH UnicodeString
,
1417 IN ULONG MaxBytesInUnicodeString
,
1418 OUT PULONG BytesInUnicodeString OPTIONAL
,
1419 IN
const CHAR
*MultiByteString
,
1420 IN ULONG BytesInMultiByteString
);
1425 RtlMultiByteToUnicodeSize(
1426 OUT PULONG BytesInUnicodeString
,
1427 IN
const CHAR
*MultiByteString
,
1428 IN ULONG BytesInMultiByteString
);
1433 RtlUnicodeToMultiByteSize(
1434 OUT PULONG BytesInMultiByteString
,
1435 IN PCWCH UnicodeString
,
1436 IN ULONG BytesInUnicodeString
);
1441 RtlUnicodeToMultiByteN(
1442 OUT PCHAR MultiByteString
,
1443 IN ULONG MaxBytesInMultiByteString
,
1444 OUT PULONG BytesInMultiByteString OPTIONAL
,
1445 IN PWCH UnicodeString
,
1446 IN ULONG BytesInUnicodeString
);
1451 RtlUpcaseUnicodeToMultiByteN(
1452 OUT PCHAR MultiByteString
,
1453 IN ULONG MaxBytesInMultiByteString
,
1454 OUT PULONG BytesInMultiByteString OPTIONAL
,
1455 IN PCWCH UnicodeString
,
1456 IN ULONG BytesInUnicodeString
);
1462 OUT PWSTR UnicodeString
,
1463 IN ULONG MaxBytesInUnicodeString
,
1464 OUT PULONG BytesInUnicodeString OPTIONAL
,
1466 IN ULONG BytesInOemString
);
1472 OUT PCHAR OemString
,
1473 IN ULONG MaxBytesInOemString
,
1474 OUT PULONG BytesInOemString OPTIONAL
,
1475 IN PCWCH UnicodeString
,
1476 IN ULONG BytesInUnicodeString
);
1481 RtlUpcaseUnicodeToOemN(
1482 OUT PCHAR OemString
,
1483 IN ULONG MaxBytesInOemString
,
1484 OUT PULONG BytesInOemString OPTIONAL
,
1485 IN PCWCH UnicodeString
,
1486 IN ULONG BytesInUnicodeString
);
1488 typedef struct _GENERATE_NAME_CONTEXT
{
1490 BOOLEAN CheckSumInserted
;
1492 WCHAR NameBuffer
[8];
1493 ULONG ExtensionLength
;
1494 WCHAR ExtensionBuffer
[4];
1495 ULONG LastIndexValue
;
1496 } GENERATE_NAME_CONTEXT
, *PGENERATE_NAME_CONTEXT
;
1498 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1502 RtlGenerate8dot3Name(
1503 IN PCUNICODE_STRING Name
,
1504 IN BOOLEAN AllowExtendedCharacters
,
1505 IN OUT PGENERATE_NAME_CONTEXT Context
,
1506 IN OUT PUNICODE_STRING Name8dot3
);
1511 RtlGenerate8dot3Name(
1512 IN PCUNICODE_STRING Name
,
1513 IN BOOLEAN AllowExtendedCharacters
,
1514 IN OUT PGENERATE_NAME_CONTEXT Context
,
1515 IN OUT PUNICODE_STRING Name8dot3
);
1521 RtlIsNameLegalDOS8Dot3(
1522 IN PCUNICODE_STRING Name
,
1523 IN OUT POEM_STRING OemName OPTIONAL
,
1524 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
);
1529 RtlIsValidOemCharacter(
1530 IN OUT PWCHAR Char
);
1532 typedef struct _PREFIX_TABLE_ENTRY
{
1533 CSHORT NodeTypeCode
;
1535 struct _PREFIX_TABLE_ENTRY
*NextPrefixTree
;
1536 RTL_SPLAY_LINKS Links
;
1538 } PREFIX_TABLE_ENTRY
, *PPREFIX_TABLE_ENTRY
;
1540 typedef struct _PREFIX_TABLE
{
1541 CSHORT NodeTypeCode
;
1543 PPREFIX_TABLE_ENTRY NextPrefixTree
;
1544 } PREFIX_TABLE
, *PPREFIX_TABLE
;
1550 OUT PPREFIX_TABLE PrefixTable
);
1556 IN PPREFIX_TABLE PrefixTable
,
1558 OUT PPREFIX_TABLE_ENTRY PrefixTableEntry
);
1564 IN PPREFIX_TABLE PrefixTable
,
1565 IN PPREFIX_TABLE_ENTRY PrefixTableEntry
);
1571 IN PPREFIX_TABLE PrefixTable
,
1572 IN PSTRING FullName
);
1574 typedef struct _UNICODE_PREFIX_TABLE_ENTRY
{
1575 CSHORT NodeTypeCode
;
1577 struct _UNICODE_PREFIX_TABLE_ENTRY
*NextPrefixTree
;
1578 struct _UNICODE_PREFIX_TABLE_ENTRY
*CaseMatch
;
1579 RTL_SPLAY_LINKS Links
;
1580 PUNICODE_STRING Prefix
;
1581 } UNICODE_PREFIX_TABLE_ENTRY
, *PUNICODE_PREFIX_TABLE_ENTRY
;
1583 typedef struct _UNICODE_PREFIX_TABLE
{
1584 CSHORT NodeTypeCode
;
1586 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree
;
1587 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry
;
1588 } UNICODE_PREFIX_TABLE
, *PUNICODE_PREFIX_TABLE
;
1593 RtlInitializeUnicodePrefix(
1594 OUT PUNICODE_PREFIX_TABLE PrefixTable
);
1599 RtlInsertUnicodePrefix(
1600 IN PUNICODE_PREFIX_TABLE PrefixTable
,
1601 IN PUNICODE_STRING Prefix
,
1602 OUT PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
);
1607 RtlRemoveUnicodePrefix(
1608 IN PUNICODE_PREFIX_TABLE PrefixTable
,
1609 IN PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
);
1612 PUNICODE_PREFIX_TABLE_ENTRY
1614 RtlFindUnicodePrefix(
1615 IN PUNICODE_PREFIX_TABLE PrefixTable
,
1616 IN PUNICODE_STRING FullName
,
1617 IN ULONG CaseInsensitiveIndex
);
1620 PUNICODE_PREFIX_TABLE_ENTRY
1622 RtlNextUnicodePrefix(
1623 IN PUNICODE_PREFIX_TABLE PrefixTable
,
1624 IN BOOLEAN Restart
);
1629 RtlCompareMemoryUlong(
1637 RtlTimeToSecondsSince1980(
1638 IN PLARGE_INTEGER Time
,
1639 OUT PULONG ElapsedSeconds
);
1644 RtlSecondsSince1980ToTime(
1645 IN ULONG ElapsedSeconds
,
1646 OUT PLARGE_INTEGER Time
);
1651 RtlTimeToSecondsSince1970(
1652 IN PLARGE_INTEGER Time
,
1653 OUT PULONG ElapsedSeconds
);
1658 RtlSecondsSince1970ToTime(
1659 IN ULONG ElapsedSeconds
,
1660 OUT PLARGE_INTEGER Time
);
1685 RtlLengthRequiredSid(
1686 IN ULONG SubAuthorityCount
);
1697 RtlAllocateAndInitializeSid(
1698 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1699 IN UCHAR SubAuthorityCount
,
1700 IN ULONG SubAuthority0
,
1701 IN ULONG SubAuthority1
,
1702 IN ULONG SubAuthority2
,
1703 IN ULONG SubAuthority3
,
1704 IN ULONG SubAuthority4
,
1705 IN ULONG SubAuthority5
,
1706 IN ULONG SubAuthority6
,
1707 IN ULONG SubAuthority7
,
1715 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority
,
1716 IN UCHAR SubAuthorityCount
);
1723 IN ULONG SubAuthority
);
1736 IN PSID Destination
,
1742 RtlConvertSidToUnicodeString(
1743 IN OUT PUNICODE_STRING UnicodeString
,
1745 IN BOOLEAN AllocateDestinationString
);
1751 OUT PLUID DestinationLuid
,
1752 IN PLUID SourceLuid
);
1760 IN ULONG AclRevision
);
1767 IN ULONG AceRevision
,
1768 IN ULONG StartingAceIndex
,
1770 IN ULONG AceListLength
);
1790 RtlAddAccessAllowedAce(
1792 IN ULONG AceRevision
,
1793 IN ACCESS_MASK AccessMask
,
1799 RtlAddAccessAllowedAceEx(
1801 IN ULONG AceRevision
,
1803 IN ACCESS_MASK AccessMask
,
1809 RtlCreateSecurityDescriptorRelative(
1810 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor
,
1816 RtlGetDaclSecurityDescriptor(
1817 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1818 OUT PBOOLEAN DaclPresent
,
1820 OUT PBOOLEAN DaclDefaulted
);
1825 RtlSetOwnerSecurityDescriptor(
1826 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1827 IN PSID Owner OPTIONAL
,
1828 IN BOOLEAN OwnerDefaulted
);
1833 RtlGetOwnerSecurityDescriptor(
1834 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
1836 OUT PBOOLEAN OwnerDefaulted
);
1841 RtlNtStatusToDosError(
1842 IN NTSTATUS Status
);
1847 RtlCustomCPToUnicodeN(
1848 IN PCPTABLEINFO CustomCP
,
1849 OUT PWCH UnicodeString
,
1850 IN ULONG MaxBytesInUnicodeString
,
1851 OUT PULONG BytesInUnicodeString OPTIONAL
,
1852 IN PCH CustomCPString
,
1853 IN ULONG BytesInCustomCPString
);
1858 RtlUnicodeToCustomCPN(
1859 IN PCPTABLEINFO CustomCP
,
1860 OUT PCH CustomCPString
,
1861 IN ULONG MaxBytesInCustomCPString
,
1862 OUT PULONG BytesInCustomCPString OPTIONAL
,
1863 IN PWCH UnicodeString
,
1864 IN ULONG BytesInUnicodeString
);
1869 RtlUpcaseUnicodeToCustomCPN(
1870 IN PCPTABLEINFO CustomCP
,
1871 OUT PCH CustomCPString
,
1872 IN ULONG MaxBytesInCustomCPString
,
1873 OUT PULONG BytesInCustomCPString OPTIONAL
,
1874 IN PWCH UnicodeString
,
1875 IN ULONG BytesInUnicodeString
);
1880 RtlInitCodePageTable(
1881 IN PUSHORT TableBase
,
1882 IN OUT PCPTABLEINFO CodePageTable
);
1886 #if (NTDDI_VERSION >= NTDDI_WINXP)
1893 IN PVOID HeapBase OPTIONAL
,
1894 IN SIZE_T ReserveSize OPTIONAL
,
1895 IN SIZE_T CommitSize OPTIONAL
,
1896 IN PVOID Lock OPTIONAL
,
1897 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
);
1903 IN PVOID HeapHandle
);
1908 RtlCaptureStackBackTrace(
1909 IN ULONG FramesToSkip
,
1910 IN ULONG FramesToCapture
,
1911 OUT PVOID
*BackTrace
,
1912 OUT PULONG BackTraceHash OPTIONAL
);
1918 IN OUT PULONG Seed
);
1923 RtlInitUnicodeStringEx(
1924 OUT PUNICODE_STRING DestinationString
,
1925 IN PCWSTR SourceString OPTIONAL
);
1930 RtlValidateUnicodeString(
1932 IN PCUNICODE_STRING String
);
1937 RtlDuplicateUnicodeString(
1939 IN PCUNICODE_STRING SourceString
,
1940 OUT PUNICODE_STRING DestinationString
);
1945 RtlGetCompressionWorkSpaceSize(
1946 IN USHORT CompressionFormatAndEngine
,
1947 OUT PULONG CompressBufferWorkSpaceSize
,
1948 OUT PULONG CompressFragmentWorkSpaceSize
);
1954 IN USHORT CompressionFormatAndEngine
,
1955 IN PUCHAR UncompressedBuffer
,
1956 IN ULONG UncompressedBufferSize
,
1957 OUT PUCHAR CompressedBuffer
,
1958 IN ULONG CompressedBufferSize
,
1959 IN ULONG UncompressedChunkSize
,
1960 OUT PULONG FinalCompressedSize
,
1961 IN PVOID WorkSpace
);
1966 RtlDecompressBuffer(
1967 IN USHORT CompressionFormat
,
1968 OUT PUCHAR UncompressedBuffer
,
1969 IN ULONG UncompressedBufferSize
,
1970 IN PUCHAR CompressedBuffer
,
1971 IN ULONG CompressedBufferSize
,
1972 OUT PULONG FinalUncompressedSize
);
1977 RtlDecompressFragment(
1978 IN USHORT CompressionFormat
,
1979 OUT PUCHAR UncompressedFragment
,
1980 IN ULONG UncompressedFragmentSize
,
1981 IN PUCHAR CompressedBuffer
,
1982 IN ULONG CompressedBufferSize
,
1983 IN ULONG FragmentOffset
,
1984 OUT PULONG FinalUncompressedSize
,
1985 IN PVOID WorkSpace
);
1991 IN USHORT CompressionFormat
,
1992 IN OUT PUCHAR
*CompressedBuffer
,
1993 IN PUCHAR EndOfCompressedBufferPlus1
,
1994 OUT PUCHAR
*ChunkBuffer
,
1995 OUT PULONG ChunkSize
);
2001 IN USHORT CompressionFormat
,
2002 IN OUT PUCHAR
*CompressedBuffer
,
2003 IN PUCHAR EndOfCompressedBufferPlus1
,
2004 OUT PUCHAR
*ChunkBuffer
,
2005 IN ULONG ChunkSize
);
2007 typedef struct _COMPRESSED_DATA_INFO
{
2008 USHORT CompressionFormatAndEngine
;
2009 UCHAR CompressionUnitShift
;
2013 USHORT NumberOfChunks
;
2014 ULONG CompressedChunkSizes
[ANYSIZE_ARRAY
];
2015 } COMPRESSED_DATA_INFO
, *PCOMPRESSED_DATA_INFO
;
2020 RtlDecompressChunks(
2021 OUT PUCHAR UncompressedBuffer
,
2022 IN ULONG UncompressedBufferSize
,
2023 IN PUCHAR CompressedBuffer
,
2024 IN ULONG CompressedBufferSize
,
2025 IN PUCHAR CompressedTail
,
2026 IN ULONG CompressedTailSize
,
2027 IN PCOMPRESSED_DATA_INFO CompressedDataInfo
);
2033 IN PUCHAR UncompressedBuffer
,
2034 IN ULONG UncompressedBufferSize
,
2035 OUT PUCHAR CompressedBuffer
,
2036 IN ULONG CompressedBufferSize
,
2037 IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo
,
2038 IN ULONG CompressedDataInfoLength
,
2039 IN PVOID WorkSpace
);
2042 PSID_IDENTIFIER_AUTHORITY
2044 RtlIdentifierAuthoritySid(
2050 RtlSubAuthorityCountSid(
2056 RtlNtStatusToDosErrorNoTeb(
2057 IN NTSTATUS Status
);
2062 RtlCreateSystemVolumeInformationFolder(
2063 IN PCUNICODE_STRING VolumeRootPath
);
2067 #if defined(_M_AMD64)
2071 RtlFillMemoryUlong (
2072 OUT PVOID Destination
,
2076 PULONG Address
= (PULONG
)Destination
;
2077 if ((Length
/= 4) != 0) {
2078 if (((ULONG64
)Address
& 4) != 0) {
2080 if ((Length
-= 1) == 0) {
2085 __stosq((PULONG64
)(Address
), Pattern
| ((ULONG64
)Pattern
<< 32), Length
/ 2);
2086 if ((Length
& 1) != 0) Address
[Length
- 1] = Pattern
;
2091 #define RtlFillMemoryUlonglong(Destination, Length, Pattern) \
2092 __stosq((PULONG64)(Destination), Pattern, (Length) / 8)
2096 #if (NTDDI_VERSION >= NTDDI_WINXP)
2102 OUT PVOID Destination
,
2109 RtlFillMemoryUlonglong(
2110 OUT PVOID Destination
,
2112 IN ULONGLONG Pattern
);
2116 #endif // defined(_M_AMD64)
2118 #if (NTDDI_VERSION >= NTDDI_WS03)
2123 RtlInitAnsiStringEx(
2124 OUT PANSI_STRING DestinationString
,
2125 IN PCSZ SourceString OPTIONAL
);
2129 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
2134 RtlGetSaclSecurityDescriptor(
2135 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
2136 OUT PBOOLEAN SaclPresent
,
2138 OUT PBOOLEAN SaclDefaulted
);
2143 RtlSetGroupSecurityDescriptor(
2144 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
2145 IN PSID Group OPTIONAL
,
2146 IN BOOLEAN GroupDefaulted OPTIONAL
);
2151 RtlGetGroupSecurityDescriptor(
2152 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
2154 OUT PBOOLEAN GroupDefaulted
);
2159 RtlAbsoluteToSelfRelativeSD(
2160 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor
,
2161 OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor OPTIONAL
,
2162 IN OUT PULONG BufferLength
);
2167 RtlSelfRelativeToAbsoluteSD(
2168 IN PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor
,
2169 OUT PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor OPTIONAL
,
2170 IN OUT PULONG AbsoluteSecurityDescriptorSize
,
2171 OUT PACL Dacl OPTIONAL
,
2172 IN OUT PULONG DaclSize
,
2173 OUT PACL Sacl OPTIONAL
,
2174 IN OUT PULONG SaclSize
,
2175 OUT PSID Owner OPTIONAL
,
2176 IN OUT PULONG OwnerSize
,
2177 OUT PSID PrimaryGroup OPTIONAL
,
2178 IN OUT PULONG PrimaryGroupSize
);
2182 #if (NTDDI_VERSION >= NTDDI_VISTA)
2189 IN PCWSTR SourceString
,
2190 IN LONG SourceStringLength
,
2191 OUT PWSTR DestinationString
,
2192 IN OUT PLONG DestinationStringLength
);
2197 RtlIsNormalizedString(
2199 IN PCWSTR SourceString
,
2200 IN LONG SourceStringLength
,
2201 OUT PBOOLEAN Normalized
);
2208 IN PCWSTR SourceString
,
2209 IN LONG SourceStringLength
,
2210 OUT PWSTR DestinationString
,
2211 IN OUT PLONG DestinationStringLength
);
2218 IN PCWSTR SourceString
,
2219 IN LONG SourceStringLength
,
2220 OUT PWSTR DestinationString
,
2221 IN OUT PLONG DestinationStringLength
);
2226 RtlIdnToNameprepUnicode(
2228 IN PCWSTR SourceString
,
2229 IN LONG SourceStringLength
,
2230 OUT PWSTR DestinationString
,
2231 IN OUT PLONG DestinationStringLength
);
2236 RtlCreateServiceSid(
2237 IN PUNICODE_STRING ServiceName
,
2238 OUT PSID ServiceSid
,
2239 IN OUT PULONG ServiceSidLength
);
2244 RtlCompareAltitudes(
2245 IN PCUNICODE_STRING Altitude1
,
2246 IN PCUNICODE_STRING Altitude2
);
2250 #if (NTDDI_VERSION >= NTDDI_WIN7)
2256 OUT PCHAR UTF8StringDestination
,
2257 IN ULONG UTF8StringMaxByteCount
,
2258 OUT PULONG UTF8StringActualByteCount
,
2259 IN PCWCH UnicodeStringSource
,
2260 IN ULONG UnicodeStringByteCount
);
2266 OUT PWSTR UnicodeStringDestination
,
2267 IN ULONG UnicodeStringMaxByteCount
,
2268 OUT PULONG UnicodeStringActualByteCount
,
2269 IN PCCH UTF8StringSource
,
2270 IN ULONG UTF8StringByteCount
);
2276 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
2279 OUT ULONG
*NumChanges
);
2284 RtlCreateVirtualAccountSid(
2285 IN PCUNICODE_STRING Name
,
2286 IN ULONG BaseSubAuthority
,
2288 IN OUT PULONG SidLength
);
2292 #define HEAP_NO_SERIALIZE 0x00000001
2293 #define HEAP_GROWABLE 0x00000002
2294 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
2295 #define HEAP_ZERO_MEMORY 0x00000008
2296 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
2297 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
2298 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
2299 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
2301 #define HEAP_CREATE_ALIGN_16 0x00010000
2302 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
2303 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
2305 #define HEAP_SETTABLE_USER_VALUE 0x00000100
2306 #define HEAP_SETTABLE_USER_FLAG1 0x00000200
2307 #define HEAP_SETTABLE_USER_FLAG2 0x00000400
2308 #define HEAP_SETTABLE_USER_FLAG3 0x00000800
2309 #define HEAP_SETTABLE_USER_FLAGS 0x00000E00
2311 #define HEAP_CLASS_0 0x00000000
2312 #define HEAP_CLASS_1 0x00001000
2313 #define HEAP_CLASS_2 0x00002000
2314 #define HEAP_CLASS_3 0x00003000
2315 #define HEAP_CLASS_4 0x00004000
2316 #define HEAP_CLASS_5 0x00005000
2317 #define HEAP_CLASS_6 0x00006000
2318 #define HEAP_CLASS_7 0x00007000
2319 #define HEAP_CLASS_8 0x00008000
2320 #define HEAP_CLASS_MASK 0x0000F000
2322 #define HEAP_MAXIMUM_TAG 0x0FFF
2323 #define HEAP_GLOBAL_TAG 0x0800
2324 #define HEAP_PSEUDO_TAG_FLAG 0x8000
2325 #define HEAP_TAG_SHIFT 18
2326 #define HEAP_TAG_MASK (HEAP_MAXIMUM_TAG << HEAP_TAG_SHIFT)
2328 #define HEAP_CREATE_VALID_MASK (HEAP_NO_SERIALIZE | \
2330 HEAP_GENERATE_EXCEPTIONS | \
2331 HEAP_ZERO_MEMORY | \
2332 HEAP_REALLOC_IN_PLACE_ONLY | \
2333 HEAP_TAIL_CHECKING_ENABLED | \
2334 HEAP_FREE_CHECKING_ENABLED | \
2335 HEAP_DISABLE_COALESCE_ON_FREE | \
2337 HEAP_CREATE_ALIGN_16 | \
2338 HEAP_CREATE_ENABLE_TRACING | \
2339 HEAP_CREATE_ENABLE_EXECUTE)
2343 HEAP_MAKE_TAG_FLAGS(
2347 //__assume_bound(TagBase); // FIXME
2348 return ((ULONG
)((TagBase
) + ((Tag
) << HEAP_TAG_SHIFT
)));
2351 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
2352 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
2354 #define RtlUnicodeStringToOemSize(STRING) (NLS_MB_OEM_CODE_PAGE_TAG ? \
2355 RtlxUnicodeStringToOemSize(STRING) : \
2356 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
2359 #define RtlOemStringToUnicodeSize(STRING) ( \
2360 NLS_MB_OEM_CODE_PAGE_TAG ? \
2361 RtlxOemStringToUnicodeSize(STRING) : \
2362 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
2365 #define RtlOemStringToCountedUnicodeSize(STRING) ( \
2366 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
2370 (NTAPI
*PRTL_ALLOCATE_STRING_ROUTINE
)(
2371 IN SIZE_T NumberOfBytes
);
2373 #if _WIN32_WINNT >= 0x0600
2376 (NTAPI
*PRTL_REALLOCATE_STRING_ROUTINE
)(
2377 IN SIZE_T NumberOfBytes
,
2383 (NTAPI
*PRTL_FREE_STRING_ROUTINE
)(
2386 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine
;
2387 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine
;
2389 #if _WIN32_WINNT >= 0x0600
2390 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine
;
2393 #define COMPRESSION_FORMAT_NONE (0x0000)
2394 #define COMPRESSION_FORMAT_DEFAULT (0x0001)
2395 #define COMPRESSION_FORMAT_LZNT1 (0x0002)
2396 #define COMPRESSION_ENGINE_STANDARD (0x0000)
2397 #define COMPRESSION_ENGINE_MAXIMUM (0x0100)
2398 #define COMPRESSION_ENGINE_HIBER (0x0200)
2400 #define RtlOffsetToPointer(B,O) ((PCHAR)( ((PCHAR)(B)) + ((ULONG_PTR)(O)) ))
2401 #define RtlPointerToOffset(B,P) ((ULONG)( ((PCHAR)(P)) - ((PCHAR)(B)) ))
2403 #define MAX_UNICODE_STACK_BUFFER_LENGTH 256
2405 #define RTL_SYSTEM_VOLUME_INFORMATION_FOLDER L"System Volume Information"
2407 #define DEVICE_TYPE ULONG
2409 #define FILE_DEVICE_BEEP 0x00000001
2410 #define FILE_DEVICE_CD_ROM 0x00000002
2411 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
2412 #define FILE_DEVICE_CONTROLLER 0x00000004
2413 #define FILE_DEVICE_DATALINK 0x00000005
2414 #define FILE_DEVICE_DFS 0x00000006
2415 #define FILE_DEVICE_DISK 0x00000007
2416 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
2417 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
2418 #define FILE_DEVICE_INPORT_PORT 0x0000000a
2419 #define FILE_DEVICE_KEYBOARD 0x0000000b
2420 #define FILE_DEVICE_MAILSLOT 0x0000000c
2421 #define FILE_DEVICE_MIDI_IN 0x0000000d
2422 #define FILE_DEVICE_MIDI_OUT 0x0000000e
2423 #define FILE_DEVICE_MOUSE 0x0000000f
2424 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
2425 #define FILE_DEVICE_NAMED_PIPE 0x00000011
2426 #define FILE_DEVICE_NETWORK 0x00000012
2427 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
2428 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
2429 #define FILE_DEVICE_NULL 0x00000015
2430 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
2431 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
2432 #define FILE_DEVICE_PRINTER 0x00000018
2433 #define FILE_DEVICE_SCANNER 0x00000019
2434 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
2435 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
2436 #define FILE_DEVICE_SCREEN 0x0000001c
2437 #define FILE_DEVICE_SOUND 0x0000001d
2438 #define FILE_DEVICE_STREAMS 0x0000001e
2439 #define FILE_DEVICE_TAPE 0x0000001f
2440 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
2441 #define FILE_DEVICE_TRANSPORT 0x00000021
2442 #define FILE_DEVICE_UNKNOWN 0x00000022
2443 #define FILE_DEVICE_VIDEO 0x00000023
2444 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
2445 #define FILE_DEVICE_WAVE_IN 0x00000025
2446 #define FILE_DEVICE_WAVE_OUT 0x00000026
2447 #define FILE_DEVICE_8042_PORT 0x00000027
2448 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
2449 #define FILE_DEVICE_BATTERY 0x00000029
2450 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
2451 #define FILE_DEVICE_MODEM 0x0000002b
2452 #define FILE_DEVICE_VDM 0x0000002c
2453 #define FILE_DEVICE_MASS_STORAGE 0x0000002d
2454 #define FILE_DEVICE_SMB 0x0000002e
2455 #define FILE_DEVICE_KS 0x0000002f
2456 #define FILE_DEVICE_CHANGER 0x00000030
2457 #define FILE_DEVICE_SMARTCARD 0x00000031
2458 #define FILE_DEVICE_ACPI 0x00000032
2459 #define FILE_DEVICE_DVD 0x00000033
2460 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
2461 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
2462 #define FILE_DEVICE_DFS_VOLUME 0x00000036
2463 #define FILE_DEVICE_SERENUM 0x00000037
2464 #define FILE_DEVICE_TERMSRV 0x00000038
2465 #define FILE_DEVICE_KSEC 0x00000039
2466 #define FILE_DEVICE_FIPS 0x0000003A
2467 #define FILE_DEVICE_INFINIBAND 0x0000003B
2468 #define FILE_DEVICE_VMBUS 0x0000003E
2469 #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F
2470 #define FILE_DEVICE_WPD 0x00000040
2471 #define FILE_DEVICE_BLUETOOTH 0x00000041
2472 #define FILE_DEVICE_MT_COMPOSITE 0x00000042
2473 #define FILE_DEVICE_MT_TRANSPORT 0x00000043
2474 #define FILE_DEVICE_BIOMETRIC 0x00000044
2475 #define FILE_DEVICE_PMI 0x00000045
2477 #define CTL_CODE(DeviceType, Function, Method, Access) \
2478 (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
2480 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
2482 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
2484 #define METHOD_BUFFERED 0
2485 #define METHOD_IN_DIRECT 1
2486 #define METHOD_OUT_DIRECT 2
2487 #define METHOD_NEITHER 3
2488 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
2489 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
2491 #define FILE_ANY_ACCESS 0x00000000
2492 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
2493 #define FILE_READ_ACCESS 0x00000001
2494 #define FILE_WRITE_ACCESS 0x00000002
2496 typedef ULONG LSA_OPERATIONAL_MODE
, *PLSA_OPERATIONAL_MODE
;
2498 typedef enum _SECURITY_LOGON_TYPE
{
2499 UndefinedLogonType
= 0,
2508 #if (_WIN32_WINNT >= 0x0501)
2512 #if (_WIN32_WINNT >= 0x0502)
2513 CachedRemoteInteractive
,
2516 } SECURITY_LOGON_TYPE
, *PSECURITY_LOGON_TYPE
;
2518 #ifndef _NTLSA_AUDIT_
2519 #define _NTLSA_AUDIT_
2521 typedef enum _SE_ADT_PARAMETER_TYPE
{
2522 SeAdtParmTypeNone
= 0,
2523 SeAdtParmTypeString
,
2524 SeAdtParmTypeFileSpec
,
2527 SeAdtParmTypeLogonId
,
2528 SeAdtParmTypeNoLogonId
,
2529 SeAdtParmTypeAccessMask
,
2531 SeAdtParmTypeObjectTypes
,
2532 SeAdtParmTypeHexUlong
,
2537 SeAdtParmTypeHexInt64
,
2538 SeAdtParmTypeStringList
,
2539 SeAdtParmTypeSidList
,
2540 SeAdtParmTypeDuration
,
2541 SeAdtParmTypeUserAccountControl
,
2543 SeAdtParmTypeMessage
,
2544 SeAdtParmTypeDateTime
,
2545 SeAdtParmTypeSockAddr
,
2547 SeAdtParmTypeLogonHours
,
2548 SeAdtParmTypeLogonIdNoSid
,
2549 SeAdtParmTypeUlongNoConv
,
2550 SeAdtParmTypeSockAddrNoPort
,
2551 SeAdtParmTypeAccessReason
2552 } SE_ADT_PARAMETER_TYPE
, *PSE_ADT_PARAMETER_TYPE
;
2554 #ifndef GUID_DEFINED
2555 #include <guiddef.h>
2558 typedef struct _SE_ADT_OBJECT_TYPE
{
2561 #define SE_ADT_OBJECT_ONLY 0x1
2563 ACCESS_MASK AccessMask
;
2564 } SE_ADT_OBJECT_TYPE
, *PSE_ADT_OBJECT_TYPE
;
2566 typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY
{
2567 SE_ADT_PARAMETER_TYPE Type
;
2571 } SE_ADT_PARAMETER_ARRAY_ENTRY
, *PSE_ADT_PARAMETER_ARRAY_ENTRY
;
2573 typedef struct _SE_ADT_ACCESS_REASON
{
2574 ACCESS_MASK AccessMask
;
2575 ULONG AccessReasons
[32];
2576 ULONG ObjectTypeIndex
;
2577 ULONG AccessGranted
;
2578 PSECURITY_DESCRIPTOR SecurityDescriptor
;
2579 } SE_ADT_ACCESS_REASON
, *PSE_ADT_ACCESS_REASON
;
2581 #define SE_MAX_AUDIT_PARAMETERS 32
2582 #define SE_MAX_GENERIC_AUDIT_PARAMETERS 28
2584 typedef struct _SE_ADT_PARAMETER_ARRAY
{
2587 ULONG ParameterCount
;
2589 USHORT FlatSubCategoryId
;
2592 SE_ADT_PARAMETER_ARRAY_ENTRY Parameters
[ SE_MAX_AUDIT_PARAMETERS
];
2593 } SE_ADT_PARAMETER_ARRAY
, *PSE_ADT_PARAMETER_ARRAY
;
2595 #define SE_ADT_PARAMETERS_SELF_RELATIVE 0x00000001
2596 #define SE_ADT_PARAMETERS_SEND_TO_LSA 0x00000002
2597 #define SE_ADT_PARAMETER_EXTENSIBLE_AUDIT 0x00000004
2598 #define SE_ADT_PARAMETER_GENERIC_AUDIT 0x00000008
2599 #define SE_ADT_PARAMETER_WRITE_SYNCHRONOUS 0x00000010
2601 #define LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(AuditParameters) \
2602 ( sizeof(SE_ADT_PARAMETER_ARRAY) - \
2603 sizeof(SE_ADT_PARAMETER_ARRAY_ENTRY) * \
2604 (SE_MAX_AUDIT_PARAMETERS - AuditParameters->ParameterCount) )
2606 #endif /* _NTLSA_AUDIT_ */
2610 LsaRegisterLogonProcess(
2611 IN PLSA_STRING LogonProcessName
,
2612 OUT PHANDLE LsaHandle
,
2613 OUT PLSA_OPERATIONAL_MODE SecurityMode
);
2618 IN HANDLE LsaHandle
,
2619 IN PLSA_STRING OriginName
,
2620 IN SECURITY_LOGON_TYPE LogonType
,
2621 IN ULONG AuthenticationPackage
,
2622 IN PVOID AuthenticationInformation
,
2623 IN ULONG AuthenticationInformationLength
,
2624 IN PTOKEN_GROUPS LocalGroups OPTIONAL
,
2625 IN PTOKEN_SOURCE SourceContext
,
2626 OUT PVOID
*ProfileBuffer
,
2627 OUT PULONG ProfileBufferLength
,
2630 OUT PQUOTA_LIMITS Quotas
,
2631 OUT PNTSTATUS SubStatus
);
2635 LsaFreeReturnBuffer(
2642 #define MSV1_0_PACKAGE_NAME "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
2643 #define MSV1_0_PACKAGE_NAMEW L"MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
2644 #define MSV1_0_PACKAGE_NAMEW_LENGTH sizeof(MSV1_0_PACKAGE_NAMEW) - sizeof(WCHAR)
2646 #define MSV1_0_SUBAUTHENTICATION_KEY "SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1_0"
2647 #define MSV1_0_SUBAUTHENTICATION_VALUE "Auth"
2649 #define MSV1_0_CHALLENGE_LENGTH 8
2650 #define MSV1_0_USER_SESSION_KEY_LENGTH 16
2651 #define MSV1_0_LANMAN_SESSION_KEY_LENGTH 8
2653 #define MSV1_0_CLEARTEXT_PASSWORD_ALLOWED 0x02
2654 #define MSV1_0_UPDATE_LOGON_STATISTICS 0x04
2655 #define MSV1_0_RETURN_USER_PARAMETERS 0x08
2656 #define MSV1_0_DONT_TRY_GUEST_ACCOUNT 0x10
2657 #define MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT 0x20
2658 #define MSV1_0_RETURN_PASSWORD_EXPIRY 0x40
2659 #define MSV1_0_USE_CLIENT_CHALLENGE 0x80
2660 #define MSV1_0_TRY_GUEST_ACCOUNT_ONLY 0x100
2661 #define MSV1_0_RETURN_PROFILE_PATH 0x200
2662 #define MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY 0x400
2663 #define MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT 0x800
2665 #define MSV1_0_DISABLE_PERSONAL_FALLBACK 0x00001000
2666 #define MSV1_0_ALLOW_FORCE_GUEST 0x00002000
2668 #if (_WIN32_WINNT >= 0x0502)
2669 #define MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED 0x00004000
2670 #define MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY 0x00008000
2673 #define MSV1_0_SUBAUTHENTICATION_DLL_EX 0x00100000
2674 #define MSV1_0_ALLOW_MSVCHAPV2 0x00010000
2676 #if (_WIN32_WINNT >= 0x0600)
2677 #define MSV1_0_S4U2SELF 0x00020000
2678 #define MSV1_0_CHECK_LOGONHOURS_FOR_S4U 0x00040000
2681 #define MSV1_0_SUBAUTHENTICATION_DLL 0xFF000000
2682 #define MSV1_0_SUBAUTHENTICATION_DLL_SHIFT 24
2683 #define MSV1_0_MNS_LOGON 0x01000000
2685 #define MSV1_0_SUBAUTHENTICATION_DLL_RAS 2
2686 #define MSV1_0_SUBAUTHENTICATION_DLL_IIS 132
2688 #define LOGON_GUEST 0x01
2689 #define LOGON_NOENCRYPTION 0x02
2690 #define LOGON_CACHED_ACCOUNT 0x04
2691 #define LOGON_USED_LM_PASSWORD 0x08
2692 #define LOGON_EXTRA_SIDS 0x20
2693 #define LOGON_SUBAUTH_SESSION_KEY 0x40
2694 #define LOGON_SERVER_TRUST_ACCOUNT 0x80
2695 #define LOGON_NTLMV2_ENABLED 0x100
2696 #define LOGON_RESOURCE_GROUPS 0x200
2697 #define LOGON_PROFILE_PATH_RETURNED 0x400
2698 #define LOGON_NT_V2 0x800
2699 #define LOGON_LM_V2 0x1000
2700 #define LOGON_NTLM_V2 0x2000
2702 #if (_WIN32_WINNT >= 0x0600)
2704 #define LOGON_OPTIMIZED 0x4000
2705 #define LOGON_WINLOGON 0x8000
2706 #define LOGON_PKINIT 0x10000
2707 #define LOGON_NO_OPTIMIZED 0x20000
2711 #define MSV1_0_SUBAUTHENTICATION_FLAGS 0xFF000000
2713 #define LOGON_GRACE_LOGON 0x01000000
2715 #define MSV1_0_OWF_PASSWORD_LENGTH 16
2716 #define MSV1_0_CRED_LM_PRESENT 0x1
2717 #define MSV1_0_CRED_NT_PRESENT 0x2
2718 #define MSV1_0_CRED_VERSION 0
2720 #define MSV1_0_NTLM3_RESPONSE_LENGTH 16
2721 #define MSV1_0_NTLM3_OWF_LENGTH 16
2723 #if (_WIN32_WINNT == 0x0500)
2724 #define MSV1_0_MAX_NTLM3_LIFE 1800
2726 #define MSV1_0_MAX_NTLM3_LIFE 129600
2728 #define MSV1_0_MAX_AVL_SIZE 64000
2730 #if (_WIN32_WINNT >= 0x0501)
2732 #define MSV1_0_AV_FLAG_FORCE_GUEST 0x00000001
2734 #if (_WIN32_WINNT >= 0x0600)
2735 #define MSV1_0_AV_FLAG_MIC_HANDSHAKE_MESSAGES 0x00000002
2740 #define MSV1_0_NTLM3_INPUT_LENGTH (sizeof(MSV1_0_NTLM3_RESPONSE) - MSV1_0_NTLM3_RESPONSE_LENGTH)
2742 #if(_WIN32_WINNT >= 0x0502)
2743 #define MSV1_0_NTLM3_MIN_NT_RESPONSE_LENGTH RTL_SIZEOF_THROUGH_FIELD(MSV1_0_NTLM3_RESPONSE, AvPairsOff)
2746 #define USE_PRIMARY_PASSWORD 0x01
2747 #define RETURN_PRIMARY_USERNAME 0x02
2748 #define RETURN_PRIMARY_LOGON_DOMAINNAME 0x04
2749 #define RETURN_NON_NT_USER_SESSION_KEY 0x08
2750 #define GENERATE_CLIENT_CHALLENGE 0x10
2751 #define GCR_NTLM3_PARMS 0x20
2752 #define GCR_TARGET_INFO 0x40
2753 #define RETURN_RESERVED_PARAMETER 0x80
2754 #define GCR_ALLOW_NTLM 0x100
2755 #define GCR_USE_OEM_SET 0x200
2756 #define GCR_MACHINE_CREDENTIAL 0x400
2757 #define GCR_USE_OWF_PASSWORD 0x800
2758 #define GCR_ALLOW_LM 0x1000
2759 #define GCR_ALLOW_NO_TARGET 0x2000
2761 typedef enum _MSV1_0_LOGON_SUBMIT_TYPE
{
2762 MsV1_0InteractiveLogon
= 2,
2766 MsV1_0WorkstationUnlockLogon
= 7,
2767 MsV1_0S4ULogon
= 12,
2768 MsV1_0VirtualLogon
= 82
2769 } MSV1_0_LOGON_SUBMIT_TYPE
, *PMSV1_0_LOGON_SUBMIT_TYPE
;
2771 typedef enum _MSV1_0_PROFILE_BUFFER_TYPE
{
2772 MsV1_0InteractiveProfile
= 2,
2773 MsV1_0Lm20LogonProfile
,
2774 MsV1_0SmartCardProfile
2775 } MSV1_0_PROFILE_BUFFER_TYPE
, *PMSV1_0_PROFILE_BUFFER_TYPE
;
2777 typedef struct _MSV1_0_INTERACTIVE_LOGON
{
2778 MSV1_0_LOGON_SUBMIT_TYPE MessageType
;
2779 UNICODE_STRING LogonDomainName
;
2780 UNICODE_STRING UserName
;
2781 UNICODE_STRING Password
;
2782 } MSV1_0_INTERACTIVE_LOGON
, *PMSV1_0_INTERACTIVE_LOGON
;
2784 typedef struct _MSV1_0_INTERACTIVE_PROFILE
{
2785 MSV1_0_PROFILE_BUFFER_TYPE MessageType
;
2787 USHORT BadPasswordCount
;
2788 LARGE_INTEGER LogonTime
;
2789 LARGE_INTEGER LogoffTime
;
2790 LARGE_INTEGER KickOffTime
;
2791 LARGE_INTEGER PasswordLastSet
;
2792 LARGE_INTEGER PasswordCanChange
;
2793 LARGE_INTEGER PasswordMustChange
;
2794 UNICODE_STRING LogonScript
;
2795 UNICODE_STRING HomeDirectory
;
2796 UNICODE_STRING FullName
;
2797 UNICODE_STRING ProfilePath
;
2798 UNICODE_STRING HomeDirectoryDrive
;
2799 UNICODE_STRING LogonServer
;
2801 } MSV1_0_INTERACTIVE_PROFILE
, *PMSV1_0_INTERACTIVE_PROFILE
;
2803 typedef struct _MSV1_0_LM20_LOGON
{
2804 MSV1_0_LOGON_SUBMIT_TYPE MessageType
;
2805 UNICODE_STRING LogonDomainName
;
2806 UNICODE_STRING UserName
;
2807 UNICODE_STRING Workstation
;
2808 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
2809 STRING CaseSensitiveChallengeResponse
;
2810 STRING CaseInsensitiveChallengeResponse
;
2811 ULONG ParameterControl
;
2812 } MSV1_0_LM20_LOGON
, * PMSV1_0_LM20_LOGON
;
2814 typedef struct _MSV1_0_SUBAUTH_LOGON
{
2815 MSV1_0_LOGON_SUBMIT_TYPE MessageType
;
2816 UNICODE_STRING LogonDomainName
;
2817 UNICODE_STRING UserName
;
2818 UNICODE_STRING Workstation
;
2819 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
2820 STRING AuthenticationInfo1
;
2821 STRING AuthenticationInfo2
;
2822 ULONG ParameterControl
;
2823 ULONG SubAuthPackageId
;
2824 } MSV1_0_SUBAUTH_LOGON
, * PMSV1_0_SUBAUTH_LOGON
;
2826 #if (_WIN32_WINNT >= 0x0600)
2828 #define MSV1_0_S4U_LOGON_FLAG_CHECK_LOGONHOURS 0x2
2830 typedef struct _MSV1_0_S4U_LOGON
{
2831 MSV1_0_LOGON_SUBMIT_TYPE MessageType
;
2833 UNICODE_STRING UserPrincipalName
;
2834 UNICODE_STRING DomainName
;
2835 } MSV1_0_S4U_LOGON
, *PMSV1_0_S4U_LOGON
;
2839 typedef struct _MSV1_0_LM20_LOGON_PROFILE
{
2840 MSV1_0_PROFILE_BUFFER_TYPE MessageType
;
2841 LARGE_INTEGER KickOffTime
;
2842 LARGE_INTEGER LogoffTime
;
2844 UCHAR UserSessionKey
[MSV1_0_USER_SESSION_KEY_LENGTH
];
2845 UNICODE_STRING LogonDomainName
;
2846 UCHAR LanmanSessionKey
[MSV1_0_LANMAN_SESSION_KEY_LENGTH
];
2847 UNICODE_STRING LogonServer
;
2848 UNICODE_STRING UserParameters
;
2849 } MSV1_0_LM20_LOGON_PROFILE
, * PMSV1_0_LM20_LOGON_PROFILE
;
2851 typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL
{
2854 UCHAR LmPassword
[MSV1_0_OWF_PASSWORD_LENGTH
];
2855 UCHAR NtPassword
[MSV1_0_OWF_PASSWORD_LENGTH
];
2856 } MSV1_0_SUPPLEMENTAL_CREDENTIAL
, *PMSV1_0_SUPPLEMENTAL_CREDENTIAL
;
2858 typedef struct _MSV1_0_NTLM3_RESPONSE
{
2859 UCHAR Response
[MSV1_0_NTLM3_RESPONSE_LENGTH
];
2864 ULONGLONG TimeStamp
;
2865 UCHAR ChallengeFromClient
[MSV1_0_CHALLENGE_LENGTH
];
2868 } MSV1_0_NTLM3_RESPONSE
, *PMSV1_0_NTLM3_RESPONSE
;
2870 typedef enum _MSV1_0_AVID
{
2872 MsvAvNbComputerName
,
2874 MsvAvDnsComputerName
,
2876 #if (_WIN32_WINNT >= 0x0501)
2879 #if (_WIN32_WINNT >= 0x0600)
2883 MsvAvChannelBindings
,
2888 typedef struct _MSV1_0_AV_PAIR
{
2891 } MSV1_0_AV_PAIR
, *PMSV1_0_AV_PAIR
;
2893 typedef enum _MSV1_0_PROTOCOL_MESSAGE_TYPE
{
2894 MsV1_0Lm20ChallengeRequest
= 0,
2895 MsV1_0Lm20GetChallengeResponse
,
2896 MsV1_0EnumerateUsers
,
2899 MsV1_0ChangePassword
,
2900 MsV1_0ChangeCachedPassword
,
2901 MsV1_0GenericPassthrough
,
2904 MsV1_0DeriveCredential
,
2906 #if (_WIN32_WINNT >= 0x0501)
2907 MsV1_0SetProcessOption
,
2909 #if (_WIN32_WINNT >= 0x0600)
2910 MsV1_0ConfigLocalAliases
,
2911 MsV1_0ClearCachedCredentials
,
2913 } MSV1_0_PROTOCOL_MESSAGE_TYPE
, *PMSV1_0_PROTOCOL_MESSAGE_TYPE
;
2915 typedef struct _MSV1_0_LM20_CHALLENGE_REQUEST
{
2916 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2917 } MSV1_0_LM20_CHALLENGE_REQUEST
, *PMSV1_0_LM20_CHALLENGE_REQUEST
;
2919 typedef struct _MSV1_0_LM20_CHALLENGE_RESPONSE
{
2920 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2921 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
2922 } MSV1_0_LM20_CHALLENGE_RESPONSE
, *PMSV1_0_LM20_CHALLENGE_RESPONSE
;
2924 typedef struct _MSV1_0_GETCHALLENRESP_REQUEST_V1
{
2925 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2926 ULONG ParameterControl
;
2928 UNICODE_STRING Password
;
2929 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
2930 } MSV1_0_GETCHALLENRESP_REQUEST_V1
, *PMSV1_0_GETCHALLENRESP_REQUEST_V1
;
2932 typedef struct _MSV1_0_GETCHALLENRESP_REQUEST
{
2933 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2934 ULONG ParameterControl
;
2936 UNICODE_STRING Password
;
2937 UCHAR ChallengeToClient
[MSV1_0_CHALLENGE_LENGTH
];
2938 UNICODE_STRING UserName
;
2939 UNICODE_STRING LogonDomainName
;
2940 UNICODE_STRING ServerName
;
2941 } MSV1_0_GETCHALLENRESP_REQUEST
, *PMSV1_0_GETCHALLENRESP_REQUEST
;
2943 typedef struct _MSV1_0_GETCHALLENRESP_RESPONSE
{
2944 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2945 STRING CaseSensitiveChallengeResponse
;
2946 STRING CaseInsensitiveChallengeResponse
;
2947 UNICODE_STRING UserName
;
2948 UNICODE_STRING LogonDomainName
;
2949 UCHAR UserSessionKey
[MSV1_0_USER_SESSION_KEY_LENGTH
];
2950 UCHAR LanmanSessionKey
[MSV1_0_LANMAN_SESSION_KEY_LENGTH
];
2951 } MSV1_0_GETCHALLENRESP_RESPONSE
, *PMSV1_0_GETCHALLENRESP_RESPONSE
;
2953 typedef struct _MSV1_0_ENUMUSERS_REQUEST
{
2954 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2955 } MSV1_0_ENUMUSERS_REQUEST
, *PMSV1_0_ENUMUSERS_REQUEST
;
2957 typedef struct _MSV1_0_ENUMUSERS_RESPONSE
{
2958 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2959 ULONG NumberOfLoggedOnUsers
;
2962 } MSV1_0_ENUMUSERS_RESPONSE
, *PMSV1_0_ENUMUSERS_RESPONSE
;
2964 typedef struct _MSV1_0_GETUSERINFO_REQUEST
{
2965 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2967 } MSV1_0_GETUSERINFO_REQUEST
, *PMSV1_0_GETUSERINFO_REQUEST
;
2969 typedef struct _MSV1_0_GETUSERINFO_RESPONSE
{
2970 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType
;
2972 UNICODE_STRING UserName
;
2973 UNICODE_STRING LogonDomainName
;
2974 UNICODE_STRING LogonServer
;
2975 SECURITY_LOGON_TYPE LogonType
;
2976 } MSV1_0_GETUSERINFO_RESPONSE
, *PMSV1_0_GETUSERINFO_RESPONSE
;
2978 #define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007
2979 #define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008
2980 #define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009
2982 /* also in winnt.h */
2983 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
2984 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
2985 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
2986 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
2987 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
2988 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
2989 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
2990 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
2991 #define FILE_NOTIFY_CHANGE_EA 0x00000080
2992 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
2993 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
2994 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
2995 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
2996 #define FILE_NOTIFY_VALID_MASK 0x00000fff
2998 #define FILE_ACTION_ADDED 0x00000001
2999 #define FILE_ACTION_REMOVED 0x00000002
3000 #define FILE_ACTION_MODIFIED 0x00000003
3001 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
3002 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
3003 #define FILE_ACTION_ADDED_STREAM 0x00000006
3004 #define FILE_ACTION_REMOVED_STREAM 0x00000007
3005 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
3006 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
3007 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
3008 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
3011 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
3012 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
3014 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000
3015 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002
3017 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000
3018 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002
3019 #define FILE_PIPE_TYPE_VALID_MASK 0x00000003
3021 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
3022 #define FILE_PIPE_MESSAGE_MODE 0x00000001
3024 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
3025 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
3027 #define FILE_PIPE_INBOUND 0x00000000
3028 #define FILE_PIPE_OUTBOUND 0x00000001
3029 #define FILE_PIPE_FULL_DUPLEX 0x00000002
3031 #define FILE_PIPE_DISCONNECTED_STATE 0x00000001
3032 #define FILE_PIPE_LISTENING_STATE 0x00000002
3033 #define FILE_PIPE_CONNECTED_STATE 0x00000003
3034 #define FILE_PIPE_CLOSING_STATE 0x00000004
3036 #define FILE_PIPE_CLIENT_END 0x00000000
3037 #define FILE_PIPE_SERVER_END 0x00000001
3039 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
3040 #define FILE_CASE_PRESERVED_NAMES 0x00000002
3041 #define FILE_UNICODE_ON_DISK 0x00000004
3042 #define FILE_PERSISTENT_ACLS 0x00000008
3043 #define FILE_FILE_COMPRESSION 0x00000010
3044 #define FILE_VOLUME_QUOTAS 0x00000020
3045 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
3046 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
3047 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
3048 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
3049 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
3050 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
3051 #define FILE_NAMED_STREAMS 0x00040000
3052 #define FILE_READ_ONLY_VOLUME 0x00080000
3053 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
3054 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
3055 #define FILE_SUPPORTS_HARD_LINKS 0x00400000
3056 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
3057 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
3058 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000
3060 #define FILE_NEED_EA 0x00000080
3062 #define FILE_EA_TYPE_BINARY 0xfffe
3063 #define FILE_EA_TYPE_ASCII 0xfffd
3064 #define FILE_EA_TYPE_BITMAP 0xfffb
3065 #define FILE_EA_TYPE_METAFILE 0xfffa
3066 #define FILE_EA_TYPE_ICON 0xfff9
3067 #define FILE_EA_TYPE_EA 0xffee
3068 #define FILE_EA_TYPE_MVMT 0xffdf
3069 #define FILE_EA_TYPE_MVST 0xffde
3070 #define FILE_EA_TYPE_ASN1 0xffdd
3071 #define FILE_EA_TYPE_FAMILY_IDS 0xff01
3073 typedef struct _FILE_NOTIFY_INFORMATION
{
3074 ULONG NextEntryOffset
;
3076 ULONG FileNameLength
;
3078 } FILE_NOTIFY_INFORMATION
, *PFILE_NOTIFY_INFORMATION
;
3080 typedef struct _FILE_DIRECTORY_INFORMATION
{
3081 ULONG NextEntryOffset
;
3083 LARGE_INTEGER CreationTime
;
3084 LARGE_INTEGER LastAccessTime
;
3085 LARGE_INTEGER LastWriteTime
;
3086 LARGE_INTEGER ChangeTime
;
3087 LARGE_INTEGER EndOfFile
;
3088 LARGE_INTEGER AllocationSize
;
3089 ULONG FileAttributes
;
3090 ULONG FileNameLength
;
3092 } FILE_DIRECTORY_INFORMATION
, *PFILE_DIRECTORY_INFORMATION
;
3094 typedef struct _FILE_FULL_DIR_INFORMATION
{
3095 ULONG NextEntryOffset
;
3097 LARGE_INTEGER CreationTime
;
3098 LARGE_INTEGER LastAccessTime
;
3099 LARGE_INTEGER LastWriteTime
;
3100 LARGE_INTEGER ChangeTime
;
3101 LARGE_INTEGER EndOfFile
;
3102 LARGE_INTEGER AllocationSize
;
3103 ULONG FileAttributes
;
3104 ULONG FileNameLength
;
3107 } FILE_FULL_DIR_INFORMATION
, *PFILE_FULL_DIR_INFORMATION
;
3109 typedef struct _FILE_ID_FULL_DIR_INFORMATION
{
3110 ULONG NextEntryOffset
;
3112 LARGE_INTEGER CreationTime
;
3113 LARGE_INTEGER LastAccessTime
;
3114 LARGE_INTEGER LastWriteTime
;
3115 LARGE_INTEGER ChangeTime
;
3116 LARGE_INTEGER EndOfFile
;
3117 LARGE_INTEGER AllocationSize
;
3118 ULONG FileAttributes
;
3119 ULONG FileNameLength
;
3121 LARGE_INTEGER FileId
;
3123 } FILE_ID_FULL_DIR_INFORMATION
, *PFILE_ID_FULL_DIR_INFORMATION
;
3125 typedef struct _FILE_BOTH_DIR_INFORMATION
{
3126 ULONG NextEntryOffset
;
3128 LARGE_INTEGER CreationTime
;
3129 LARGE_INTEGER LastAccessTime
;
3130 LARGE_INTEGER LastWriteTime
;
3131 LARGE_INTEGER ChangeTime
;
3132 LARGE_INTEGER EndOfFile
;
3133 LARGE_INTEGER AllocationSize
;
3134 ULONG FileAttributes
;
3135 ULONG FileNameLength
;
3137 CCHAR ShortNameLength
;
3138 WCHAR ShortName
[12];
3140 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
3142 typedef struct _FILE_ID_BOTH_DIR_INFORMATION
{
3143 ULONG NextEntryOffset
;
3145 LARGE_INTEGER CreationTime
;
3146 LARGE_INTEGER LastAccessTime
;
3147 LARGE_INTEGER LastWriteTime
;
3148 LARGE_INTEGER ChangeTime
;
3149 LARGE_INTEGER EndOfFile
;
3150 LARGE_INTEGER AllocationSize
;
3151 ULONG FileAttributes
;
3152 ULONG FileNameLength
;
3154 CCHAR ShortNameLength
;
3155 WCHAR ShortName
[12];
3156 LARGE_INTEGER FileId
;
3158 } FILE_ID_BOTH_DIR_INFORMATION
, *PFILE_ID_BOTH_DIR_INFORMATION
;
3160 typedef struct _FILE_NAMES_INFORMATION
{
3161 ULONG NextEntryOffset
;
3163 ULONG FileNameLength
;
3165 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
3167 typedef struct _FILE_ID_GLOBAL_TX_DIR_INFORMATION
{
3168 ULONG NextEntryOffset
;
3170 LARGE_INTEGER CreationTime
;
3171 LARGE_INTEGER LastAccessTime
;
3172 LARGE_INTEGER LastWriteTime
;
3173 LARGE_INTEGER ChangeTime
;
3174 LARGE_INTEGER EndOfFile
;
3175 LARGE_INTEGER AllocationSize
;
3176 ULONG FileAttributes
;
3177 ULONG FileNameLength
;
3178 LARGE_INTEGER FileId
;
3179 GUID LockingTransactionId
;
3182 } FILE_ID_GLOBAL_TX_DIR_INFORMATION
, *PFILE_ID_GLOBAL_TX_DIR_INFORMATION
;
3184 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_WRITELOCKED 0x00000001
3185 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_TO_TX 0x00000002
3186 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_OUTSIDE_TX 0x00000004
3188 typedef struct _FILE_OBJECTID_INFORMATION
{
3189 LONGLONG FileReference
;
3191 _ANONYMOUS_UNION
union {
3192 __GNU_EXTENSION
struct {
3193 UCHAR BirthVolumeId
[16];
3194 UCHAR BirthObjectId
[16];
3197 UCHAR ExtendedInfo
[48];
3199 } FILE_OBJECTID_INFORMATION
, *PFILE_OBJECTID_INFORMATION
;
3201 #define ANSI_DOS_STAR ('<')
3202 #define ANSI_DOS_QM ('>')
3203 #define ANSI_DOS_DOT ('"')
3205 #define DOS_STAR (L'<')
3206 #define DOS_QM (L'>')
3207 #define DOS_DOT (L'"')
3209 typedef struct _FILE_INTERNAL_INFORMATION
{
3210 LARGE_INTEGER IndexNumber
;
3211 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;
3213 typedef struct _FILE_EA_INFORMATION
{
3215 } FILE_EA_INFORMATION
, *PFILE_EA_INFORMATION
;
3217 typedef struct _FILE_ACCESS_INFORMATION
{
3218 ACCESS_MASK AccessFlags
;
3219 } FILE_ACCESS_INFORMATION
, *PFILE_ACCESS_INFORMATION
;
3221 typedef struct _FILE_MODE_INFORMATION
{
3223 } FILE_MODE_INFORMATION
, *PFILE_MODE_INFORMATION
;
3225 typedef struct _FILE_ALL_INFORMATION
{
3226 FILE_BASIC_INFORMATION BasicInformation
;
3227 FILE_STANDARD_INFORMATION StandardInformation
;
3228 FILE_INTERNAL_INFORMATION InternalInformation
;
3229 FILE_EA_INFORMATION EaInformation
;
3230 FILE_ACCESS_INFORMATION AccessInformation
;
3231 FILE_POSITION_INFORMATION PositionInformation
;
3232 FILE_MODE_INFORMATION ModeInformation
;
3233 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
3234 FILE_NAME_INFORMATION NameInformation
;
3235 } FILE_ALL_INFORMATION
, *PFILE_ALL_INFORMATION
;
3237 typedef struct _FILE_ALLOCATION_INFORMATION
{
3238 LARGE_INTEGER AllocationSize
;
3239 } FILE_ALLOCATION_INFORMATION
, *PFILE_ALLOCATION_INFORMATION
;
3241 typedef struct _FILE_COMPRESSION_INFORMATION
{
3242 LARGE_INTEGER CompressedFileSize
;
3243 USHORT CompressionFormat
;
3244 UCHAR CompressionUnitShift
;
3248 } FILE_COMPRESSION_INFORMATION
, *PFILE_COMPRESSION_INFORMATION
;
3250 typedef struct _FILE_LINK_INFORMATION
{
3251 BOOLEAN ReplaceIfExists
;
3252 HANDLE RootDirectory
;
3253 ULONG FileNameLength
;
3255 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
3257 typedef struct _FILE_MOVE_CLUSTER_INFORMATION
{
3259 HANDLE RootDirectory
;
3260 ULONG FileNameLength
;
3262 } FILE_MOVE_CLUSTER_INFORMATION
, *PFILE_MOVE_CLUSTER_INFORMATION
;
3264 typedef struct _FILE_RENAME_INFORMATION
{
3265 BOOLEAN ReplaceIfExists
;
3266 HANDLE RootDirectory
;
3267 ULONG FileNameLength
;
3269 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
3271 typedef struct _FILE_STREAM_INFORMATION
{
3272 ULONG NextEntryOffset
;
3273 ULONG StreamNameLength
;
3274 LARGE_INTEGER StreamSize
;
3275 LARGE_INTEGER StreamAllocationSize
;
3276 WCHAR StreamName
[1];
3277 } FILE_STREAM_INFORMATION
, *PFILE_STREAM_INFORMATION
;
3279 typedef struct _FILE_TRACKING_INFORMATION
{
3280 HANDLE DestinationFile
;
3281 ULONG ObjectInformationLength
;
3282 CHAR ObjectInformation
[1];
3283 } FILE_TRACKING_INFORMATION
, *PFILE_TRACKING_INFORMATION
;
3285 typedef struct _FILE_COMPLETION_INFORMATION
{
3288 } FILE_COMPLETION_INFORMATION
, *PFILE_COMPLETION_INFORMATION
;
3290 typedef struct _FILE_PIPE_INFORMATION
{
3292 ULONG CompletionMode
;
3293 } FILE_PIPE_INFORMATION
, *PFILE_PIPE_INFORMATION
;
3295 typedef struct _FILE_PIPE_LOCAL_INFORMATION
{
3296 ULONG NamedPipeType
;
3297 ULONG NamedPipeConfiguration
;
3298 ULONG MaximumInstances
;
3299 ULONG CurrentInstances
;
3301 ULONG ReadDataAvailable
;
3302 ULONG OutboundQuota
;
3303 ULONG WriteQuotaAvailable
;
3304 ULONG NamedPipeState
;
3306 } FILE_PIPE_LOCAL_INFORMATION
, *PFILE_PIPE_LOCAL_INFORMATION
;
3308 typedef struct _FILE_PIPE_REMOTE_INFORMATION
{
3309 LARGE_INTEGER CollectDataTime
;
3310 ULONG MaximumCollectionCount
;
3311 } FILE_PIPE_REMOTE_INFORMATION
, *PFILE_PIPE_REMOTE_INFORMATION
;
3313 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
{
3314 ULONG MaximumMessageSize
;
3315 ULONG MailslotQuota
;
3316 ULONG NextMessageSize
;
3317 ULONG MessagesAvailable
;
3318 LARGE_INTEGER ReadTimeout
;
3319 } FILE_MAILSLOT_QUERY_INFORMATION
, *PFILE_MAILSLOT_QUERY_INFORMATION
;
3321 typedef struct _FILE_MAILSLOT_SET_INFORMATION
{
3322 PLARGE_INTEGER ReadTimeout
;
3323 } FILE_MAILSLOT_SET_INFORMATION
, *PFILE_MAILSLOT_SET_INFORMATION
;
3325 typedef struct _FILE_REPARSE_POINT_INFORMATION
{
3326 LONGLONG FileReference
;
3328 } FILE_REPARSE_POINT_INFORMATION
, *PFILE_REPARSE_POINT_INFORMATION
;
3330 typedef struct _FILE_LINK_ENTRY_INFORMATION
{
3331 ULONG NextEntryOffset
;
3332 LONGLONG ParentFileId
;
3333 ULONG FileNameLength
;
3335 } FILE_LINK_ENTRY_INFORMATION
, *PFILE_LINK_ENTRY_INFORMATION
;
3337 typedef struct _FILE_LINKS_INFORMATION
{
3339 ULONG EntriesReturned
;
3340 FILE_LINK_ENTRY_INFORMATION Entry
;
3341 } FILE_LINKS_INFORMATION
, *PFILE_LINKS_INFORMATION
;
3343 typedef struct _FILE_NETWORK_PHYSICAL_NAME_INFORMATION
{
3344 ULONG FileNameLength
;
3346 } FILE_NETWORK_PHYSICAL_NAME_INFORMATION
, *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION
;
3348 typedef struct _FILE_STANDARD_LINK_INFORMATION
{
3349 ULONG NumberOfAccessibleLinks
;
3350 ULONG TotalNumberOfLinks
;
3351 BOOLEAN DeletePending
;
3353 } FILE_STANDARD_LINK_INFORMATION
, *PFILE_STANDARD_LINK_INFORMATION
;
3355 typedef struct _FILE_GET_EA_INFORMATION
{
3356 ULONG NextEntryOffset
;
3359 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
3361 #define REMOTE_PROTOCOL_FLAG_LOOPBACK 0x00000001
3362 #define REMOTE_PROTOCOL_FLAG_OFFLINE 0x00000002
3364 typedef struct _FILE_REMOTE_PROTOCOL_INFORMATION
{
3365 USHORT StructureVersion
;
3366 USHORT StructureSize
;
3368 USHORT ProtocolMajorVersion
;
3369 USHORT ProtocolMinorVersion
;
3370 USHORT ProtocolRevision
;
3378 } ProtocolSpecificReserved
;
3379 } FILE_REMOTE_PROTOCOL_INFORMATION
, *PFILE_REMOTE_PROTOCOL_INFORMATION
;
3381 typedef struct _FILE_GET_QUOTA_INFORMATION
{
3382 ULONG NextEntryOffset
;
3385 } FILE_GET_QUOTA_INFORMATION
, *PFILE_GET_QUOTA_INFORMATION
;
3387 typedef struct _FILE_QUOTA_INFORMATION
{
3388 ULONG NextEntryOffset
;
3390 LARGE_INTEGER ChangeTime
;
3391 LARGE_INTEGER QuotaUsed
;
3392 LARGE_INTEGER QuotaThreshold
;
3393 LARGE_INTEGER QuotaLimit
;
3395 } FILE_QUOTA_INFORMATION
, *PFILE_QUOTA_INFORMATION
;
3397 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
3398 ULONG FileSystemAttributes
;
3399 ULONG MaximumComponentNameLength
;
3400 ULONG FileSystemNameLength
;
3401 WCHAR FileSystemName
[1];
3402 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
3404 typedef struct _FILE_FS_DRIVER_PATH_INFORMATION
{
3405 BOOLEAN DriverInPath
;
3406 ULONG DriverNameLength
;
3407 WCHAR DriverName
[1];
3408 } FILE_FS_DRIVER_PATH_INFORMATION
, *PFILE_FS_DRIVER_PATH_INFORMATION
;
3410 typedef struct _FILE_FS_VOLUME_FLAGS_INFORMATION
{
3412 } FILE_FS_VOLUME_FLAGS_INFORMATION
, *PFILE_FS_VOLUME_FLAGS_INFORMATION
;
3414 #define FILE_VC_QUOTA_NONE 0x00000000
3415 #define FILE_VC_QUOTA_TRACK 0x00000001
3416 #define FILE_VC_QUOTA_ENFORCE 0x00000002
3417 #define FILE_VC_QUOTA_MASK 0x00000003
3418 #define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008
3419 #define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010
3420 #define FILE_VC_LOG_QUOTA_LIMIT 0x00000020
3421 #define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040
3422 #define FILE_VC_LOG_VOLUME_LIMIT 0x00000080
3423 #define FILE_VC_QUOTAS_INCOMPLETE 0x00000100
3424 #define FILE_VC_QUOTAS_REBUILDING 0x00000200
3425 #define FILE_VC_VALID_MASK 0x000003ff
3427 typedef struct _FILE_FS_CONTROL_INFORMATION
{
3428 LARGE_INTEGER FreeSpaceStartFiltering
;
3429 LARGE_INTEGER FreeSpaceThreshold
;
3430 LARGE_INTEGER FreeSpaceStopFiltering
;
3431 LARGE_INTEGER DefaultQuotaThreshold
;
3432 LARGE_INTEGER DefaultQuotaLimit
;
3433 ULONG FileSystemControlFlags
;
3434 } FILE_FS_CONTROL_INFORMATION
, *PFILE_FS_CONTROL_INFORMATION
;
3436 #ifndef _FILESYSTEMFSCTL_
3437 #define _FILESYSTEMFSCTL_
3439 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
3440 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
3441 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
3442 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
3443 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
3444 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
3445 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
3446 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
3447 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
3448 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
3449 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
3450 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
3451 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
3452 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
3453 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
3454 #define FSCTL_SET_BOOTLOADER_ACCESSED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
3456 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
3457 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
3458 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
3459 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
3460 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
3462 #if (_WIN32_WINNT >= 0x0400)
3464 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
3465 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
3466 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS)
3467 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
3468 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
3469 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
3470 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
3474 #if (_WIN32_WINNT >= 0x0500)
3476 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
3477 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA)
3478 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
3479 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA)
3480 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA)
3481 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
3482 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA)
3483 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_READ_DATA)
3484 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA)
3485 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_READ_DATA)
3486 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA)
3487 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
3488 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA)
3489 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
3490 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
3491 #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
3492 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
3493 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
3494 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_ANY_ACCESS)
3495 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_ANY_ACCESS)
3496 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_READ_DATA)
3497 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_READ_DATA)
3498 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_READ_DATA)
3499 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
3500 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
3501 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
3502 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
3503 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
3504 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
3505 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
3506 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
3507 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3511 #if (_WIN32_WINNT >= 0x0600)
3513 #define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA)
3514 #define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA)
3515 #define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS)
3516 #define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS)
3517 #define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3518 #define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA)
3519 #define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA)
3520 #define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA)
3521 #define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA)
3522 #define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA)
3523 #define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA)
3524 #define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA)
3525 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA)
3526 #define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA)
3527 #define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA)
3528 #define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA)
3529 #define FSCTL_TXFS_SAVEPOINT_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 94, METHOD_BUFFERED, FILE_WRITE_DATA)
3530 #define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA)
3531 #define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA)
3532 #define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3533 #define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS)
3534 #define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS)
3535 #define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS)
3536 #define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS)
3537 #define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS)
3538 #define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
3539 #define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS)
3540 #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS)
3542 #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES \
3543 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA)
3544 #define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA)
3545 #define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS)
3546 #define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS)
3547 #define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS)
3551 #if (_WIN32_WINNT >= 0x0601)
3553 #define FSCTL_QUERY_DEPENDENT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 124, METHOD_BUFFERED, FILE_ANY_ACCESS)
3554 #define FSCTL_SD_GLOBAL_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 125, METHOD_BUFFERED, FILE_ANY_ACCESS)
3555 #define FSCTL_LOOKUP_STREAM_FROM_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 127, METHOD_BUFFERED, FILE_ANY_ACCESS)
3556 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS)
3557 #define FSCTL_FILE_TYPE_NOTIFICATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS)
3558 #define FSCTL_GET_BOOT_AREA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 140, METHOD_BUFFERED, FILE_ANY_ACCESS)
3559 #define FSCTL_GET_RETRIEVAL_POINTER_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 141, METHOD_BUFFERED, FILE_ANY_ACCESS)
3560 #define FSCTL_SET_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS)
3561 #define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS)
3563 #define FSCTL_REQUEST_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS)
3565 #define FSCTL_CSV_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS)
3566 #define FSCTL_IS_CSV_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS)
3568 #define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 147, METHOD_BUFFERED, FILE_ANY_ACCESS)
3569 #define FSCTL_CSV_GET_VOLUME_PATH_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 148, METHOD_BUFFERED, FILE_ANY_ACCESS)
3570 #define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS)
3571 #define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS)
3572 #define FSCTL_IS_FILE_ON_CSV_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS)
3574 typedef struct _CSV_NAMESPACE_INFO
{
3577 LARGE_INTEGER StartingOffset
;
3579 } CSV_NAMESPACE_INFO
, *PCSV_NAMESPACE_INFO
;
3581 #define CSV_NAMESPACE_INFO_V1 (sizeof(CSV_NAMESPACE_INFO))
3582 #define CSV_INVALID_DEVICE_NUMBER 0xFFFFFFFF
3586 #define FSCTL_MARK_AS_SYSTEM_HIVE FSCTL_SET_BOOTLOADER_ACCESSED
3588 typedef struct _PATHNAME_BUFFER
{
3589 ULONG PathNameLength
;
3591 } PATHNAME_BUFFER
, *PPATHNAME_BUFFER
;
3593 typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER
{
3594 UCHAR First0x24BytesOfBootSector
[0x24];
3595 } FSCTL_QUERY_FAT_BPB_BUFFER
, *PFSCTL_QUERY_FAT_BPB_BUFFER
;
3597 #if (_WIN32_WINNT >= 0x0400)
3599 typedef struct _NTFS_VOLUME_DATA_BUFFER
{
3600 LARGE_INTEGER VolumeSerialNumber
;
3601 LARGE_INTEGER NumberSectors
;
3602 LARGE_INTEGER TotalClusters
;
3603 LARGE_INTEGER FreeClusters
;
3604 LARGE_INTEGER TotalReserved
;
3605 ULONG BytesPerSector
;
3606 ULONG BytesPerCluster
;
3607 ULONG BytesPerFileRecordSegment
;
3608 ULONG ClustersPerFileRecordSegment
;
3609 LARGE_INTEGER MftValidDataLength
;
3610 LARGE_INTEGER MftStartLcn
;
3611 LARGE_INTEGER Mft2StartLcn
;
3612 LARGE_INTEGER MftZoneStart
;
3613 LARGE_INTEGER MftZoneEnd
;
3614 } NTFS_VOLUME_DATA_BUFFER
, *PNTFS_VOLUME_DATA_BUFFER
;
3616 typedef struct _NTFS_EXTENDED_VOLUME_DATA
{
3618 USHORT MajorVersion
;
3619 USHORT MinorVersion
;
3620 } NTFS_EXTENDED_VOLUME_DATA
, *PNTFS_EXTENDED_VOLUME_DATA
;
3622 typedef struct _STARTING_LCN_INPUT_BUFFER
{
3623 LARGE_INTEGER StartingLcn
;
3624 } STARTING_LCN_INPUT_BUFFER
, *PSTARTING_LCN_INPUT_BUFFER
;
3626 typedef struct _VOLUME_BITMAP_BUFFER
{
3627 LARGE_INTEGER StartingLcn
;
3628 LARGE_INTEGER BitmapSize
;
3630 } VOLUME_BITMAP_BUFFER
, *PVOLUME_BITMAP_BUFFER
;
3632 typedef struct _STARTING_VCN_INPUT_BUFFER
{
3633 LARGE_INTEGER StartingVcn
;
3634 } STARTING_VCN_INPUT_BUFFER
, *PSTARTING_VCN_INPUT_BUFFER
;
3636 typedef struct _RETRIEVAL_POINTERS_BUFFER
{
3638 LARGE_INTEGER StartingVcn
;
3640 LARGE_INTEGER NextVcn
;
3643 } RETRIEVAL_POINTERS_BUFFER
, *PRETRIEVAL_POINTERS_BUFFER
;
3645 typedef struct _NTFS_FILE_RECORD_INPUT_BUFFER
{
3646 LARGE_INTEGER FileReferenceNumber
;
3647 } NTFS_FILE_RECORD_INPUT_BUFFER
, *PNTFS_FILE_RECORD_INPUT_BUFFER
;
3649 typedef struct _NTFS_FILE_RECORD_OUTPUT_BUFFER
{
3650 LARGE_INTEGER FileReferenceNumber
;
3651 ULONG FileRecordLength
;
3652 UCHAR FileRecordBuffer
[1];
3653 } NTFS_FILE_RECORD_OUTPUT_BUFFER
, *PNTFS_FILE_RECORD_OUTPUT_BUFFER
;
3655 typedef struct _MOVE_FILE_DATA
{
3657 LARGE_INTEGER StartingVcn
;
3658 LARGE_INTEGER StartingLcn
;
3660 } MOVE_FILE_DATA
, *PMOVE_FILE_DATA
;
3662 typedef struct _MOVE_FILE_RECORD_DATA
{
3664 LARGE_INTEGER SourceFileRecord
;
3665 LARGE_INTEGER TargetFileRecord
;
3666 } MOVE_FILE_RECORD_DATA
, *PMOVE_FILE_RECORD_DATA
;
3669 typedef struct _MOVE_FILE_DATA32
{
3671 LARGE_INTEGER StartingVcn
;
3672 LARGE_INTEGER StartingLcn
;
3674 } MOVE_FILE_DATA32
, *PMOVE_FILE_DATA32
;
3677 #endif /* (_WIN32_WINNT >= 0x0400) */
3679 #if (_WIN32_WINNT >= 0x0500)
3681 typedef struct _FIND_BY_SID_DATA
{
3684 } FIND_BY_SID_DATA
, *PFIND_BY_SID_DATA
;
3686 typedef struct _FIND_BY_SID_OUTPUT
{
3687 ULONG NextEntryOffset
;
3689 ULONG FileNameLength
;
3691 } FIND_BY_SID_OUTPUT
, *PFIND_BY_SID_OUTPUT
;
3693 typedef struct _MFT_ENUM_DATA
{
3694 ULONGLONG StartFileReferenceNumber
;
3697 } MFT_ENUM_DATA
, *PMFT_ENUM_DATA
;
3699 typedef struct _CREATE_USN_JOURNAL_DATA
{
3700 ULONGLONG MaximumSize
;
3701 ULONGLONG AllocationDelta
;
3702 } CREATE_USN_JOURNAL_DATA
, *PCREATE_USN_JOURNAL_DATA
;
3704 typedef struct _READ_USN_JOURNAL_DATA
{
3707 ULONG ReturnOnlyOnClose
;
3709 ULONGLONG BytesToWaitFor
;
3710 ULONGLONG UsnJournalID
;
3711 } READ_USN_JOURNAL_DATA
, *PREAD_USN_JOURNAL_DATA
;
3713 typedef struct _USN_RECORD
{
3715 USHORT MajorVersion
;
3716 USHORT MinorVersion
;
3717 ULONGLONG FileReferenceNumber
;
3718 ULONGLONG ParentFileReferenceNumber
;
3720 LARGE_INTEGER TimeStamp
;
3724 ULONG FileAttributes
;
3725 USHORT FileNameLength
;
3726 USHORT FileNameOffset
;
3728 } USN_RECORD
, *PUSN_RECORD
;
3730 #define USN_PAGE_SIZE (0x1000)
3732 #define USN_REASON_DATA_OVERWRITE (0x00000001)
3733 #define USN_REASON_DATA_EXTEND (0x00000002)
3734 #define USN_REASON_DATA_TRUNCATION (0x00000004)
3735 #define USN_REASON_NAMED_DATA_OVERWRITE (0x00000010)
3736 #define USN_REASON_NAMED_DATA_EXTEND (0x00000020)
3737 #define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040)
3738 #define USN_REASON_FILE_CREATE (0x00000100)
3739 #define USN_REASON_FILE_DELETE (0x00000200)
3740 #define USN_REASON_EA_CHANGE (0x00000400)
3741 #define USN_REASON_SECURITY_CHANGE (0x00000800)
3742 #define USN_REASON_RENAME_OLD_NAME (0x00001000)
3743 #define USN_REASON_RENAME_NEW_NAME (0x00002000)
3744 #define USN_REASON_INDEXABLE_CHANGE (0x00004000)
3745 #define USN_REASON_BASIC_INFO_CHANGE (0x00008000)
3746 #define USN_REASON_HARD_LINK_CHANGE (0x00010000)
3747 #define USN_REASON_COMPRESSION_CHANGE (0x00020000)
3748 #define USN_REASON_ENCRYPTION_CHANGE (0x00040000)
3749 #define USN_REASON_OBJECT_ID_CHANGE (0x00080000)
3750 #define USN_REASON_REPARSE_POINT_CHANGE (0x00100000)
3751 #define USN_REASON_STREAM_CHANGE (0x00200000)
3752 #define USN_REASON_TRANSACTED_CHANGE (0x00400000)
3753 #define USN_REASON_CLOSE (0x80000000)
3755 typedef struct _USN_JOURNAL_DATA
{
3756 ULONGLONG UsnJournalID
;
3761 ULONGLONG MaximumSize
;
3762 ULONGLONG AllocationDelta
;
3763 } USN_JOURNAL_DATA
, *PUSN_JOURNAL_DATA
;
3765 typedef struct _DELETE_USN_JOURNAL_DATA
{
3766 ULONGLONG UsnJournalID
;
3768 } DELETE_USN_JOURNAL_DATA
, *PDELETE_USN_JOURNAL_DATA
;
3770 #define USN_DELETE_FLAG_DELETE (0x00000001)
3771 #define USN_DELETE_FLAG_NOTIFY (0x00000002)
3772 #define USN_DELETE_VALID_FLAGS (0x00000003)
3774 typedef struct _MARK_HANDLE_INFO
{
3775 ULONG UsnSourceInfo
;
3776 HANDLE VolumeHandle
;
3778 } MARK_HANDLE_INFO
, *PMARK_HANDLE_INFO
;
3781 typedef struct _MARK_HANDLE_INFO32
{
3782 ULONG UsnSourceInfo
;
3783 UINT32 VolumeHandle
;
3785 } MARK_HANDLE_INFO32
, *PMARK_HANDLE_INFO32
;
3788 #define USN_SOURCE_DATA_MANAGEMENT (0x00000001)
3789 #define USN_SOURCE_AUXILIARY_DATA (0x00000002)
3790 #define USN_SOURCE_REPLICATION_MANAGEMENT (0x00000004)
3792 #define MARK_HANDLE_PROTECT_CLUSTERS (0x00000001)
3793 #define MARK_HANDLE_TXF_SYSTEM_LOG (0x00000004)
3794 #define MARK_HANDLE_NOT_TXF_SYSTEM_LOG (0x00000008)
3796 typedef struct _BULK_SECURITY_TEST_DATA
{
3797 ACCESS_MASK DesiredAccess
;
3798 ULONG SecurityIds
[1];
3799 } BULK_SECURITY_TEST_DATA
, *PBULK_SECURITY_TEST_DATA
;
3801 #define VOLUME_IS_DIRTY (0x00000001)
3802 #define VOLUME_UPGRADE_SCHEDULED (0x00000002)
3803 #define VOLUME_SESSION_OPEN (0x00000004)
3805 typedef struct _FILE_PREFETCH
{
3808 ULONGLONG Prefetch
[1];
3809 } FILE_PREFETCH
, *PFILE_PREFETCH
;
3811 typedef struct _FILE_PREFETCH_EX
{
3815 ULONGLONG Prefetch
[1];
3816 } FILE_PREFETCH_EX
, *PFILE_PREFETCH_EX
;
3818 #define FILE_PREFETCH_TYPE_FOR_CREATE 0x1
3819 #define FILE_PREFETCH_TYPE_FOR_DIRENUM 0x2
3820 #define FILE_PREFETCH_TYPE_FOR_CREATE_EX 0x3
3821 #define FILE_PREFETCH_TYPE_FOR_DIRENUM_EX 0x4
3823 #define FILE_PREFETCH_TYPE_MAX 0x4
3825 typedef struct _FILE_OBJECTID_BUFFER
{
3829 UCHAR BirthVolumeId
[16];
3830 UCHAR BirthObjectId
[16];
3833 UCHAR ExtendedInfo
[48];
3835 } FILE_OBJECTID_BUFFER
, *PFILE_OBJECTID_BUFFER
;
3837 typedef struct _FILE_SET_SPARSE_BUFFER
{
3839 } FILE_SET_SPARSE_BUFFER
, *PFILE_SET_SPARSE_BUFFER
;
3841 typedef struct _FILE_ZERO_DATA_INFORMATION
{
3842 LARGE_INTEGER FileOffset
;
3843 LARGE_INTEGER BeyondFinalZero
;
3844 } FILE_ZERO_DATA_INFORMATION
, *PFILE_ZERO_DATA_INFORMATION
;
3846 typedef struct _FILE_ALLOCATED_RANGE_BUFFER
{
3847 LARGE_INTEGER FileOffset
;
3848 LARGE_INTEGER Length
;
3849 } FILE_ALLOCATED_RANGE_BUFFER
, *PFILE_ALLOCATED_RANGE_BUFFER
;
3851 typedef struct _ENCRYPTION_BUFFER
{
3852 ULONG EncryptionOperation
;
3854 } ENCRYPTION_BUFFER
, *PENCRYPTION_BUFFER
;
3856 #define FILE_SET_ENCRYPTION 0x00000001
3857 #define FILE_CLEAR_ENCRYPTION 0x00000002
3858 #define STREAM_SET_ENCRYPTION 0x00000003
3859 #define STREAM_CLEAR_ENCRYPTION 0x00000004
3861 #define MAXIMUM_ENCRYPTION_VALUE 0x00000004
3863 typedef struct _DECRYPTION_STATUS_BUFFER
{
3864 BOOLEAN NoEncryptedStreams
;
3865 } DECRYPTION_STATUS_BUFFER
, *PDECRYPTION_STATUS_BUFFER
;
3867 #define ENCRYPTION_FORMAT_DEFAULT (0x01)
3869 #define COMPRESSION_FORMAT_SPARSE (0x4000)
3871 typedef struct _REQUEST_RAW_ENCRYPTED_DATA
{
3872 LONGLONG FileOffset
;
3874 } REQUEST_RAW_ENCRYPTED_DATA
, *PREQUEST_RAW_ENCRYPTED_DATA
;
3876 typedef struct _ENCRYPTED_DATA_INFO
{
3877 ULONGLONG StartingFileOffset
;
3878 ULONG OutputBufferOffset
;
3879 ULONG BytesWithinFileSize
;
3880 ULONG BytesWithinValidDataLength
;
3881 USHORT CompressionFormat
;
3882 UCHAR DataUnitShift
;
3885 UCHAR EncryptionFormat
;
3886 USHORT NumberOfDataBlocks
;
3887 ULONG DataBlockSize
[ANYSIZE_ARRAY
];
3888 } ENCRYPTED_DATA_INFO
, *PENCRYPTED_DATA_INFO
;
3890 typedef struct _PLEX_READ_DATA_REQUEST
{
3891 LARGE_INTEGER ByteOffset
;
3894 } PLEX_READ_DATA_REQUEST
, *PPLEX_READ_DATA_REQUEST
;
3896 typedef struct _SI_COPYFILE
{
3897 ULONG SourceFileNameLength
;
3898 ULONG DestinationFileNameLength
;
3900 WCHAR FileNameBuffer
[1];
3901 } SI_COPYFILE
, *PSI_COPYFILE
;
3903 #define COPYFILE_SIS_LINK 0x0001
3904 #define COPYFILE_SIS_REPLACE 0x0002
3905 #define COPYFILE_SIS_FLAGS 0x0003
3907 #endif /* (_WIN32_WINNT >= 0x0500) */
3909 #if (_WIN32_WINNT >= 0x0600)
3911 typedef struct _FILE_MAKE_COMPATIBLE_BUFFER
{
3913 } FILE_MAKE_COMPATIBLE_BUFFER
, *PFILE_MAKE_COMPATIBLE_BUFFER
;
3915 typedef struct _FILE_SET_DEFECT_MGMT_BUFFER
{
3917 } FILE_SET_DEFECT_MGMT_BUFFER
, *PFILE_SET_DEFECT_MGMT_BUFFER
;
3919 typedef struct _FILE_QUERY_SPARING_BUFFER
{
3920 ULONG SparingUnitBytes
;
3921 BOOLEAN SoftwareSparing
;
3922 ULONG TotalSpareBlocks
;
3923 ULONG FreeSpareBlocks
;
3924 } FILE_QUERY_SPARING_BUFFER
, *PFILE_QUERY_SPARING_BUFFER
;
3926 typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER
{
3927 LARGE_INTEGER DirectoryCount
;
3928 LARGE_INTEGER FileCount
;
3929 USHORT FsFormatMajVersion
;
3930 USHORT FsFormatMinVersion
;
3931 WCHAR FsFormatName
[12];
3932 LARGE_INTEGER FormatTime
;
3933 LARGE_INTEGER LastUpdateTime
;
3934 WCHAR CopyrightInfo
[34];
3935 WCHAR AbstractInfo
[34];
3936 WCHAR FormattingImplementationInfo
[34];
3937 WCHAR LastModifyingImplementationInfo
[34];
3938 } FILE_QUERY_ON_DISK_VOL_INFO_BUFFER
, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER
;
3940 #define SET_REPAIR_ENABLED (0x00000001)
3941 #define SET_REPAIR_VOLUME_BITMAP_SCAN (0x00000002)
3942 #define SET_REPAIR_DELETE_CROSSLINK (0x00000004)
3943 #define SET_REPAIR_WARN_ABOUT_DATA_LOSS (0x00000008)
3944 #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT (0x00000010)
3945 #define SET_REPAIR_VALID_MASK (0x0000001F)
3947 typedef enum _SHRINK_VOLUME_REQUEST_TYPES
{
3951 } SHRINK_VOLUME_REQUEST_TYPES
, *PSHRINK_VOLUME_REQUEST_TYPES
;
3953 typedef struct _SHRINK_VOLUME_INFORMATION
{
3954 SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType
;
3956 LONGLONG NewNumberOfSectors
;
3957 } SHRINK_VOLUME_INFORMATION
, *PSHRINK_VOLUME_INFORMATION
;
3959 #define TXFS_RM_FLAG_LOGGING_MODE 0x00000001
3960 #define TXFS_RM_FLAG_RENAME_RM 0x00000002
3961 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004
3962 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008
3963 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010
3964 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020
3965 #define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040
3966 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080
3967 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100
3968 #define TXFS_RM_FLAG_GROW_LOG 0x00000400
3969 #define TXFS_RM_FLAG_SHRINK_LOG 0x00000800
3970 #define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000
3971 #define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000
3972 #define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000
3973 #define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000
3974 #define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000
3975 #define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000
3977 #define TXFS_LOGGING_MODE_SIMPLE (0x0001)
3978 #define TXFS_LOGGING_MODE_FULL (0x0002)
3980 #define TXFS_TRANSACTION_STATE_NONE 0x00
3981 #define TXFS_TRANSACTION_STATE_ACTIVE 0x01
3982 #define TXFS_TRANSACTION_STATE_PREPARED 0x02
3983 #define TXFS_TRANSACTION_STATE_NOTACTIVE 0x03
3985 #define TXFS_MODIFY_RM_VALID_FLAGS \
3986 (TXFS_RM_FLAG_LOGGING_MODE | \
3987 TXFS_RM_FLAG_RENAME_RM | \
3988 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
3989 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
3990 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
3991 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
3992 TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
3993 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
3994 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
3995 TXFS_RM_FLAG_SHRINK_LOG | \
3996 TXFS_RM_FLAG_GROW_LOG | \
3997 TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE | \
3998 TXFS_RM_FLAG_PRESERVE_CHANGES | \
3999 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
4000 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
4001 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
4002 TXFS_RM_FLAG_PREFER_AVAILABILITY)
4004 typedef struct _TXFS_MODIFY_RM
{
4006 ULONG LogContainerCountMax
;
4007 ULONG LogContainerCountMin
;
4008 ULONG LogContainerCount
;
4009 ULONG LogGrowthIncrement
;
4010 ULONG LogAutoShrinkPercentage
;
4013 } TXFS_MODIFY_RM
, *PTXFS_MODIFY_RM
;
4015 #define TXFS_RM_STATE_NOT_STARTED 0
4016 #define TXFS_RM_STATE_STARTING 1
4017 #define TXFS_RM_STATE_ACTIVE 2
4018 #define TXFS_RM_STATE_SHUTTING_DOWN 3
4020 #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS \
4021 (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
4022 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
4023 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
4024 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
4025 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
4026 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
4027 TXFS_RM_FLAG_PREFER_CONSISTENCY | \
4028 TXFS_RM_FLAG_PREFER_AVAILABILITY)
4030 typedef struct _TXFS_QUERY_RM_INFORMATION
{
4031 ULONG BytesRequired
;
4033 ULONGLONG CurrentLsn
;
4034 ULONGLONG ArchiveTailLsn
;
4035 ULONGLONG LogContainerSize
;
4036 LARGE_INTEGER HighestVirtualClock
;
4037 ULONG LogContainerCount
;
4038 ULONG LogContainerCountMax
;
4039 ULONG LogContainerCountMin
;
4040 ULONG LogGrowthIncrement
;
4041 ULONG LogAutoShrinkPercentage
;
4046 ULONGLONG LogCapacity
;
4050 ULONGLONG TransactionCount
;
4051 ULONGLONG OnePCCount
;
4052 ULONGLONG TwoPCCount
;
4053 ULONGLONG NumberLogFileFull
;
4054 ULONGLONG OldestTransactionAge
;
4056 ULONG TmLogPathOffset
;
4057 } TXFS_QUERY_RM_INFORMATION
, *PTXFS_QUERY_RM_INFORMATION
;
4059 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x01
4060 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x02
4062 #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS \
4063 (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN | \
4064 TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK)
4066 typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION
{
4067 LARGE_INTEGER LastVirtualClock
;
4068 ULONGLONG LastRedoLsn
;
4069 ULONGLONG HighestRecoveryLsn
;
4071 } TXFS_ROLLFORWARD_REDO_INFORMATION
, *PTXFS_ROLLFORWARD_REDO_INFORMATION
;
4073 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001
4074 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002
4075 #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004
4076 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008
4077 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010
4078 #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020
4079 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040
4080 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080
4082 #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200
4083 #define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400
4084 #define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800
4086 #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000
4087 #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000
4089 #define TXFS_START_RM_VALID_FLAGS \
4090 (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
4091 TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
4092 TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE | \
4093 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
4094 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
4095 TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
4096 TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT | \
4097 TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
4098 TXFS_START_RM_FLAG_LOGGING_MODE | \
4099 TXFS_START_RM_FLAG_PRESERVE_CHANGES | \
4100 TXFS_START_RM_FLAG_PREFER_CONSISTENCY | \
4101 TXFS_START_RM_FLAG_PREFER_AVAILABILITY)
4103 typedef struct _TXFS_START_RM_INFORMATION
{
4105 ULONGLONG LogContainerSize
;
4106 ULONG LogContainerCountMin
;
4107 ULONG LogContainerCountMax
;
4108 ULONG LogGrowthIncrement
;
4109 ULONG LogAutoShrinkPercentage
;
4110 ULONG TmLogPathOffset
;
4111 USHORT TmLogPathLength
;
4113 USHORT LogPathLength
;
4116 } TXFS_START_RM_INFORMATION
, *PTXFS_START_RM_INFORMATION
;
4118 typedef struct _TXFS_GET_METADATA_INFO_OUT
{
4123 GUID LockingTransaction
;
4125 ULONG TransactionState
;
4126 } TXFS_GET_METADATA_INFO_OUT
, *PTXFS_GET_METADATA_INFO_OUT
;
4128 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001
4129 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x00000002
4131 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
{
4139 } TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY
;
4141 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES
{
4142 GUID KtmTransaction
;
4143 ULONGLONG NumberOfFiles
;
4144 ULONGLONG BufferSizeRequired
;
4146 } TXFS_LIST_TRANSACTION_LOCKED_FILES
, *PTXFS_LIST_TRANSACTION_LOCKED_FILES
;
4148 typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY
{
4150 ULONG TransactionState
;
4154 } TXFS_LIST_TRANSACTIONS_ENTRY
, *PTXFS_LIST_TRANSACTIONS_ENTRY
;
4156 typedef struct _TXFS_LIST_TRANSACTIONS
{
4157 ULONGLONG NumberOfTransactions
;
4158 ULONGLONG BufferSizeRequired
;
4159 } TXFS_LIST_TRANSACTIONS
, *PTXFS_LIST_TRANSACTIONS
;
4161 typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT
{
4166 } TXFS_READ_BACKUP_INFORMATION_OUT
, *PTXFS_READ_BACKUP_INFORMATION_OUT
;
4168 typedef struct _TXFS_WRITE_BACKUP_INFORMATION
{
4170 } TXFS_WRITE_BACKUP_INFORMATION
, *PTXFS_WRITE_BACKUP_INFORMATION
;
4172 #define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFE
4173 #define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFF
4175 typedef struct _TXFS_GET_TRANSACTED_VERSION
{
4176 ULONG ThisBaseVersion
;
4177 ULONG LatestVersion
;
4178 USHORT ThisMiniVersion
;
4179 USHORT FirstMiniVersion
;
4180 USHORT LatestMiniVersion
;
4181 } TXFS_GET_TRANSACTED_VERSION
, *PTXFS_GET_TRANSACTED_VERSION
;
4183 #define TXFS_SAVEPOINT_SET 0x00000001
4184 #define TXFS_SAVEPOINT_ROLLBACK 0x00000002
4185 #define TXFS_SAVEPOINT_CLEAR 0x00000004
4186 #define TXFS_SAVEPOINT_CLEAR_ALL 0x00000010
4188 typedef struct _TXFS_SAVEPOINT_INFORMATION
{
4189 HANDLE KtmTransaction
;
4192 } TXFS_SAVEPOINT_INFORMATION
, *PTXFS_SAVEPOINT_INFORMATION
;
4194 typedef struct _TXFS_CREATE_MINIVERSION_INFO
{
4195 USHORT StructureVersion
;
4196 USHORT StructureLength
;
4199 } TXFS_CREATE_MINIVERSION_INFO
, *PTXFS_CREATE_MINIVERSION_INFO
;
4201 typedef struct _TXFS_TRANSACTION_ACTIVE_INFO
{
4202 BOOLEAN TransactionsActiveAtSnapshot
;
4203 } TXFS_TRANSACTION_ACTIVE_INFO
, *PTXFS_TRANSACTION_ACTIVE_INFO
;
4205 #endif /* (_WIN32_WINNT >= 0x0600) */
4207 #if (_WIN32_WINNT >= 0x0601)
4209 #define MARK_HANDLE_REALTIME (0x00000020)
4210 #define MARK_HANDLE_NOT_REALTIME (0x00000040)
4212 #define NO_8DOT3_NAME_PRESENT (0x00000001)
4213 #define REMOVED_8DOT3_NAME (0x00000002)
4215 #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED (0x00000001)
4217 typedef struct _BOOT_AREA_INFO
{
4218 ULONG BootSectorCount
;
4220 LARGE_INTEGER Offset
;
4222 } BOOT_AREA_INFO
, *PBOOT_AREA_INFO
;
4224 typedef struct _RETRIEVAL_POINTER_BASE
{
4225 LARGE_INTEGER FileAreaOffset
;
4226 } RETRIEVAL_POINTER_BASE
, *PRETRIEVAL_POINTER_BASE
;
4228 typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION
{
4233 } FILE_FS_PERSISTENT_VOLUME_INFORMATION
, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION
;
4235 typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION
{
4237 } FILE_SYSTEM_RECOGNITION_INFORMATION
, *PFILE_SYSTEM_RECOGNITION_INFORMATION
;
4239 #define OPLOCK_LEVEL_CACHE_READ (0x00000001)
4240 #define OPLOCK_LEVEL_CACHE_HANDLE (0x00000002)
4241 #define OPLOCK_LEVEL_CACHE_WRITE (0x00000004)
4243 #define REQUEST_OPLOCK_INPUT_FLAG_REQUEST (0x00000001)
4244 #define REQUEST_OPLOCK_INPUT_FLAG_ACK (0x00000002)
4245 #define REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE (0x00000004)
4247 #define REQUEST_OPLOCK_CURRENT_VERSION 1
4249 typedef struct _REQUEST_OPLOCK_INPUT_BUFFER
{
4250 USHORT StructureVersion
;
4251 USHORT StructureLength
;
4252 ULONG RequestedOplockLevel
;
4254 } REQUEST_OPLOCK_INPUT_BUFFER
, *PREQUEST_OPLOCK_INPUT_BUFFER
;
4256 #define REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED (0x00000001)
4257 #define REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED (0x00000002)
4259 typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER
{
4260 USHORT StructureVersion
;
4261 USHORT StructureLength
;
4262 ULONG OriginalOplockLevel
;
4263 ULONG NewOplockLevel
;
4265 ACCESS_MASK AccessMode
;
4267 } REQUEST_OPLOCK_OUTPUT_BUFFER
, *PREQUEST_OPLOCK_OUTPUT_BUFFER
;
4269 #define SD_GLOBAL_CHANGE_TYPE_MACHINE_SID 1
4271 typedef struct _SD_CHANGE_MACHINE_SID_INPUT
{
4272 USHORT CurrentMachineSIDOffset
;
4273 USHORT CurrentMachineSIDLength
;
4274 USHORT NewMachineSIDOffset
;
4275 USHORT NewMachineSIDLength
;
4276 } SD_CHANGE_MACHINE_SID_INPUT
, *PSD_CHANGE_MACHINE_SID_INPUT
;
4278 typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT
{
4279 ULONGLONG NumSDChangedSuccess
;
4280 ULONGLONG NumSDChangedFail
;
4281 ULONGLONG NumSDUnused
;
4282 ULONGLONG NumSDTotal
;
4283 ULONGLONG NumMftSDChangedSuccess
;
4284 ULONGLONG NumMftSDChangedFail
;
4285 ULONGLONG NumMftSDTotal
;
4286 } SD_CHANGE_MACHINE_SID_OUTPUT
, *PSD_CHANGE_MACHINE_SID_OUTPUT
;
4288 typedef struct _SD_GLOBAL_CHANGE_INPUT
{
4292 SD_CHANGE_MACHINE_SID_INPUT SdChange
;
4294 } SD_GLOBAL_CHANGE_INPUT
, *PSD_GLOBAL_CHANGE_INPUT
;
4296 typedef struct _SD_GLOBAL_CHANGE_OUTPUT
{
4300 SD_CHANGE_MACHINE_SID_OUTPUT SdChange
;
4302 } SD_GLOBAL_CHANGE_OUTPUT
, *PSD_GLOBAL_CHANGE_OUTPUT
;
4304 #define ENCRYPTED_DATA_INFO_SPARSE_FILE 1
4306 typedef struct _EXTENDED_ENCRYPTED_DATA_INFO
{
4311 } EXTENDED_ENCRYPTED_DATA_INFO
, *PEXTENDED_ENCRYPTED_DATA_INFO
;
4313 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT
{
4315 ULONG NumberOfClusters
;
4316 LARGE_INTEGER Cluster
[1];
4317 } LOOKUP_STREAM_FROM_CLUSTER_INPUT
, *PLOOKUP_STREAM_FROM_CLUSTER_INPUT
;
4319 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT
{
4321 ULONG NumberOfMatches
;
4322 ULONG BufferSizeRequired
;
4323 } LOOKUP_STREAM_FROM_CLUSTER_OUTPUT
, *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT
;
4325 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE 0x00000001
4326 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET 0x00000002
4327 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE 0x00000004
4328 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE 0x00000008
4330 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK 0xff000000
4331 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA 0x01000000
4332 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX 0x02000000
4333 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM 0x03000000
4335 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY
{
4338 LARGE_INTEGER Reserved
;
4339 LARGE_INTEGER Cluster
;
4341 } LOOKUP_STREAM_FROM_CLUSTER_ENTRY
, *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY
;
4343 typedef struct _FILE_TYPE_NOTIFICATION_INPUT
{
4345 ULONG NumFileTypeIDs
;
4347 } FILE_TYPE_NOTIFICATION_INPUT
, *PFILE_TYPE_NOTIFICATION_INPUT
;
4349 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_BEGIN 0x00000001
4350 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_END 0x00000002
4352 DEFINE_GUID( FILE_TYPE_NOTIFICATION_GUID_PAGE_FILE
, 0x0d0a64a1, 0x38fc, 0x4db8, 0x9f, 0xe7, 0x3f, 0x43, 0x52, 0xcd, 0x7c, 0x5c );
4353 DEFINE_GUID( FILE_TYPE_NOTIFICATION_GUID_HIBERNATION_FILE
, 0xb7624d64, 0xb9a3, 0x4cf8, 0x80, 0x11, 0x5b, 0x86, 0xc9, 0x40, 0xe7, 0xb7 );
4354 DEFINE_GUID( FILE_TYPE_NOTIFICATION_GUID_CRASHDUMP_FILE
, 0x9d453eb7, 0xd2a6, 0x4dbd, 0xa2, 0xe3, 0xfb, 0xd0, 0xed, 0x91, 0x09, 0xa9 );
4356 #ifndef _VIRTUAL_STORAGE_TYPE_DEFINED
4357 #define _VIRTUAL_STORAGE_TYPE_DEFINED
4358 typedef struct _VIRTUAL_STORAGE_TYPE
{
4361 } VIRTUAL_STORAGE_TYPE
, *PVIRTUAL_STORAGE_TYPE
;
4364 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
{
4367 } STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_REQUEST
;
4369 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_HOST_VOLUMES 0x1
4370 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_GUEST_VOLUMES 0x2
4372 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
{
4374 ULONG DependencyTypeFlags
;
4375 ULONG ProviderSpecificFlags
;
4376 VIRTUAL_STORAGE_TYPE VirtualStorageType
;
4377 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY
;
4379 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
{
4381 ULONG DependencyTypeFlags
;
4382 ULONG ProviderSpecificFlags
;
4383 VIRTUAL_STORAGE_TYPE VirtualStorageType
;
4384 ULONG AncestorLevel
;
4385 ULONG HostVolumeNameOffset
;
4386 ULONG HostVolumeNameSize
;
4387 ULONG DependentVolumeNameOffset
;
4388 ULONG DependentVolumeNameSize
;
4389 ULONG RelativePathOffset
;
4390 ULONG RelativePathSize
;
4391 ULONG DependentDeviceNameOffset
;
4392 ULONG DependentDeviceNameSize
;
4393 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY
;
4395 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
{
4396 ULONG ResponseLevel
;
4397 ULONG NumberEntries
;
4399 STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY Lev1Depends
[];
4400 STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY Lev2Depends
[];
4402 } STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
, *PSTORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE
;
4404 #endif /* (_WIN32_WINNT >= 0x0601) */
4406 typedef struct _FILESYSTEM_STATISTICS
{
4407 USHORT FileSystemType
;
4409 ULONG SizeOfCompleteStructure
;
4410 ULONG UserFileReads
;
4411 ULONG UserFileReadBytes
;
4412 ULONG UserDiskReads
;
4413 ULONG UserFileWrites
;
4414 ULONG UserFileWriteBytes
;
4415 ULONG UserDiskWrites
;
4416 ULONG MetaDataReads
;
4417 ULONG MetaDataReadBytes
;
4418 ULONG MetaDataDiskReads
;
4419 ULONG MetaDataWrites
;
4420 ULONG MetaDataWriteBytes
;
4421 ULONG MetaDataDiskWrites
;
4422 } FILESYSTEM_STATISTICS
, *PFILESYSTEM_STATISTICS
;
4424 #define FILESYSTEM_STATISTICS_TYPE_NTFS 1
4425 #define FILESYSTEM_STATISTICS_TYPE_FAT 2
4426 #define FILESYSTEM_STATISTICS_TYPE_EXFAT 3
4428 typedef struct _FAT_STATISTICS
{
4430 ULONG SuccessfulCreates
;
4431 ULONG FailedCreates
;
4432 ULONG NonCachedReads
;
4433 ULONG NonCachedReadBytes
;
4434 ULONG NonCachedWrites
;
4435 ULONG NonCachedWriteBytes
;
4436 ULONG NonCachedDiskReads
;
4437 ULONG NonCachedDiskWrites
;
4438 } FAT_STATISTICS
, *PFAT_STATISTICS
;
4440 typedef struct _EXFAT_STATISTICS
{
4442 ULONG SuccessfulCreates
;
4443 ULONG FailedCreates
;
4444 ULONG NonCachedReads
;
4445 ULONG NonCachedReadBytes
;
4446 ULONG NonCachedWrites
;
4447 ULONG NonCachedWriteBytes
;
4448 ULONG NonCachedDiskReads
;
4449 ULONG NonCachedDiskWrites
;
4450 } EXFAT_STATISTICS
, *PEXFAT_STATISTICS
;
4452 typedef struct _NTFS_STATISTICS
{
4453 ULONG LogFileFullExceptions
;
4454 ULONG OtherExceptions
;
4458 ULONG MftWriteBytes
;
4464 } MftWritesUserLevel
;
4465 USHORT MftWritesFlushForLogFileFull
;
4466 USHORT MftWritesLazyWriter
;
4467 USHORT MftWritesUserRequest
;
4469 ULONG Mft2WriteBytes
;
4475 } Mft2WritesUserLevel
;
4476 USHORT Mft2WritesFlushForLogFileFull
;
4477 USHORT Mft2WritesLazyWriter
;
4478 USHORT Mft2WritesUserRequest
;
4479 ULONG RootIndexReads
;
4480 ULONG RootIndexReadBytes
;
4481 ULONG RootIndexWrites
;
4482 ULONG RootIndexWriteBytes
;
4484 ULONG BitmapReadBytes
;
4486 ULONG BitmapWriteBytes
;
4487 USHORT BitmapWritesFlushForLogFileFull
;
4488 USHORT BitmapWritesLazyWriter
;
4489 USHORT BitmapWritesUserRequest
;
4494 } BitmapWritesUserLevel
;
4495 ULONG MftBitmapReads
;
4496 ULONG MftBitmapReadBytes
;
4497 ULONG MftBitmapWrites
;
4498 ULONG MftBitmapWriteBytes
;
4499 USHORT MftBitmapWritesFlushForLogFileFull
;
4500 USHORT MftBitmapWritesLazyWriter
;
4501 USHORT MftBitmapWritesUserRequest
;
4507 } MftBitmapWritesUserLevel
;
4508 ULONG UserIndexReads
;
4509 ULONG UserIndexReadBytes
;
4510 ULONG UserIndexWrites
;
4511 ULONG UserIndexWriteBytes
;
4513 ULONG LogFileReadBytes
;
4514 ULONG LogFileWrites
;
4515 ULONG LogFileWriteBytes
;
4522 ULONG HintsClusters
;
4524 ULONG CacheClusters
;
4526 ULONG CacheMissClusters
;
4528 } NTFS_STATISTICS
, *PNTFS_STATISTICS
;
4530 #endif // _FILESYSTEMFSCTL_
4532 #define SYMLINK_FLAG_RELATIVE 1
4534 typedef struct _REPARSE_DATA_BUFFER
{
4536 USHORT ReparseDataLength
;
4538 __GNU_EXTENSION
union {
4540 USHORT SubstituteNameOffset
;
4541 USHORT SubstituteNameLength
;
4542 USHORT PrintNameOffset
;
4543 USHORT PrintNameLength
;
4545 WCHAR PathBuffer
[1];
4546 } SymbolicLinkReparseBuffer
;
4548 USHORT SubstituteNameOffset
;
4549 USHORT SubstituteNameLength
;
4550 USHORT PrintNameOffset
;
4551 USHORT PrintNameLength
;
4552 WCHAR PathBuffer
[1];
4553 } MountPointReparseBuffer
;
4555 UCHAR DataBuffer
[1];
4556 } GenericReparseBuffer
;
4558 } REPARSE_DATA_BUFFER
, *PREPARSE_DATA_BUFFER
;
4560 #define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
4562 typedef struct _REPARSE_GUID_DATA_BUFFER
{
4564 USHORT ReparseDataLength
;
4568 UCHAR DataBuffer
[1];
4569 } GenericReparseBuffer
;
4570 } REPARSE_GUID_DATA_BUFFER
, *PREPARSE_GUID_DATA_BUFFER
;
4572 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
4574 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 )
4576 /* Reserved reparse tags */
4577 #define IO_REPARSE_TAG_RESERVED_ZERO (0)
4578 #define IO_REPARSE_TAG_RESERVED_ONE (1)
4579 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
4581 #define IsReparseTagMicrosoft(_tag) (((_tag) & 0x80000000))
4582 #define IsReparseTagNameSurrogate(_tag) (((_tag) & 0x20000000))
4584 #define IO_REPARSE_TAG_VALID_VALUES (0xF000FFFF)
4586 #define IsReparseTagValid(tag) ( \
4587 !((tag) & ~IO_REPARSE_TAG_VALID_VALUES) && \
4588 ((tag) > IO_REPARSE_TAG_RESERVED_RANGE) \
4591 /* MicroSoft reparse point tags */
4592 #define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
4593 #define IO_REPARSE_TAG_HSM (0xC0000004L)
4594 #define IO_REPARSE_TAG_DRIVE_EXTENDER (0x80000005L)
4595 #define IO_REPARSE_TAG_HSM2 (0x80000006L)
4596 #define IO_REPARSE_TAG_SIS (0x80000007L)
4597 #define IO_REPARSE_TAG_WIM (0x80000008L)
4598 #define IO_REPARSE_TAG_CSV (0x80000009L)
4599 #define IO_REPARSE_TAG_DFS (0x8000000AL)
4600 #define IO_REPARSE_TAG_FILTER_MANAGER (0x8000000BL)
4601 #define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
4602 #define IO_REPARSE_TAG_IIS_CACHE (0xA0000010L)
4603 #define IO_REPARSE_TAG_DFSR (0x80000012L)
4606 typedef struct _REPARSE_INDEX_KEY
{
4607 ULONG FileReparseTag
;
4608 LARGE_INTEGER FileId
;
4609 } REPARSE_INDEX_KEY
, *PREPARSE_INDEX_KEY
;
4612 #define FSCTL_LMR_GET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,58,METHOD_BUFFERED,FILE_ANY_ACCESS)
4613 #define FSCTL_LMR_SET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,59,METHOD_BUFFERED,FILE_ANY_ACCESS)
4614 #define IOCTL_LMR_ARE_FILE_OBJECTS_ON_SAME_SERVER CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS)
4616 #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
4617 #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
4618 #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
4619 #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
4620 #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
4621 #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
4622 #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
4623 #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
4624 #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
4625 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
4626 #define FSCTL_PIPE_GET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
4627 #define FSCTL_PIPE_SET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
4628 #define FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
4629 #define FSCTL_PIPE_SET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
4630 #define FSCTL_PIPE_GET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
4631 #define FSCTL_PIPE_SET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
4632 #define FSCTL_PIPE_FLUSH CTL_CODE(FILE_DEVICE_NAMED_PIPE, 16, METHOD_BUFFERED, FILE_WRITE_DATA)
4634 #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
4635 #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
4636 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
4637 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
4639 #define FILE_PIPE_READ_DATA 0x00000000
4640 #define FILE_PIPE_WRITE_SPACE 0x00000001
4642 typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER
{
4645 } FILE_PIPE_ASSIGN_EVENT_BUFFER
, *PFILE_PIPE_ASSIGN_EVENT_BUFFER
;
4647 typedef struct _FILE_PIPE_EVENT_BUFFER
{
4648 ULONG NamedPipeState
;
4652 ULONG NumberRequests
;
4653 } FILE_PIPE_EVENT_BUFFER
, *PFILE_PIPE_EVENT_BUFFER
;
4655 typedef struct _FILE_PIPE_PEEK_BUFFER
{
4656 ULONG NamedPipeState
;
4657 ULONG ReadDataAvailable
;
4658 ULONG NumberOfMessages
;
4659 ULONG MessageLength
;
4661 } FILE_PIPE_PEEK_BUFFER
, *PFILE_PIPE_PEEK_BUFFER
;
4663 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
{
4664 LARGE_INTEGER Timeout
;
4666 BOOLEAN TimeoutSpecified
;
4668 } FILE_PIPE_WAIT_FOR_BUFFER
, *PFILE_PIPE_WAIT_FOR_BUFFER
;
4670 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER
{
4671 #if !defined(BUILD_WOW6432)
4672 PVOID ClientSession
;
4673 PVOID ClientProcess
;
4675 ULONGLONG ClientSession
;
4676 ULONGLONG ClientProcess
;
4678 } FILE_PIPE_CLIENT_PROCESS_BUFFER
, *PFILE_PIPE_CLIENT_PROCESS_BUFFER
;
4680 #define FILE_PIPE_COMPUTER_NAME_LENGTH 15
4682 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER_EX
{
4683 #if !defined(BUILD_WOW6432)
4684 PVOID ClientSession
;
4685 PVOID ClientProcess
;
4687 ULONGLONG ClientSession
;
4688 ULONGLONG ClientProcess
;
4690 USHORT ClientComputerNameLength
;
4691 WCHAR ClientComputerBuffer
[FILE_PIPE_COMPUTER_NAME_LENGTH
+1];
4692 } FILE_PIPE_CLIENT_PROCESS_BUFFER_EX
, *PFILE_PIPE_CLIENT_PROCESS_BUFFER_EX
;
4694 #define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
4696 typedef enum _LINK_TRACKING_INFORMATION_TYPE
{
4697 NtfsLinkTrackingInformation
,
4698 DfsLinkTrackingInformation
4699 } LINK_TRACKING_INFORMATION_TYPE
, *PLINK_TRACKING_INFORMATION_TYPE
;
4701 typedef struct _LINK_TRACKING_INFORMATION
{
4702 LINK_TRACKING_INFORMATION_TYPE Type
;
4704 } LINK_TRACKING_INFORMATION
, *PLINK_TRACKING_INFORMATION
;
4706 typedef struct _REMOTE_LINK_TRACKING_INFORMATION
{
4707 PVOID TargetFileObject
;
4708 ULONG TargetLinkTrackingInformationLength
;
4709 UCHAR TargetLinkTrackingInformationBuffer
[1];
4710 } REMOTE_LINK_TRACKING_INFORMATION
, *PREMOTE_LINK_TRACKING_INFORMATION
;
4712 typedef enum _OBJECT_INFORMATION_CLASS
{
4713 ObjectBasicInformation
= 0,
4714 ObjectTypeInformation
= 2
4715 } OBJECT_INFORMATION_CLASS
;
4717 typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION
{
4719 ACCESS_MASK GrantedAccess
;
4723 } PUBLIC_OBJECT_BASIC_INFORMATION
, *PPUBLIC_OBJECT_BASIC_INFORMATION
;
4725 typedef struct _PUBLIC_OBJECT_TYPE_INFORMATION
{
4726 UNICODE_STRING TypeName
;
4727 ULONG Reserved
[22];
4728 } PUBLIC_OBJECT_TYPE_INFORMATION
, *PPUBLIC_OBJECT_TYPE_INFORMATION
;
4730 typedef struct _SECURITY_CLIENT_CONTEXT
{
4731 SECURITY_QUALITY_OF_SERVICE SecurityQos
;
4732 PACCESS_TOKEN ClientToken
;
4733 BOOLEAN DirectlyAccessClientToken
;
4734 BOOLEAN DirectAccessEffectiveOnly
;
4735 BOOLEAN ServerIsRemote
;
4736 TOKEN_CONTROL ClientTokenControl
;
4737 } SECURITY_CLIENT_CONTEXT
, *PSECURITY_CLIENT_CONTEXT
;
4739 #define EVENT_INCREMENT 1
4740 #define IO_NO_INCREMENT 0
4741 #define IO_CD_ROM_INCREMENT 1
4742 #define IO_DISK_INCREMENT 1
4743 #define IO_MAILSLOT_INCREMENT 2
4744 #define IO_NAMED_PIPE_INCREMENT 2
4745 #define IO_NETWORK_INCREMENT 2
4746 #define SEMAPHORE_INCREMENT 1
4748 #define SYSTEM_PAGE_PRIORITY_BITS 3
4749 #define SYSTEM_PAGE_PRIORITY_LEVELS (1 << SYSTEM_PAGE_PRIORITY_BITS)
4751 typedef struct _KAPC_STATE
{
4752 LIST_ENTRY ApcListHead
[MaximumMode
];
4754 BOOLEAN KernelApcInProgress
;
4755 BOOLEAN KernelApcPending
;
4756 BOOLEAN UserApcPending
;
4757 } KAPC_STATE
, *PKAPC_STATE
, *RESTRICTED_POINTER PRKAPC_STATE
;
4759 #define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
4761 typedef struct _KQUEUE
{
4762 DISPATCHER_HEADER Header
;
4763 LIST_ENTRY EntryListHead
;
4764 volatile ULONG CurrentCount
;
4766 LIST_ENTRY ThreadListHead
;
4767 } KQUEUE
, *PKQUEUE
, *RESTRICTED_POINTER PRKQUEUE
;
4769 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4775 OUT PRKMUTANT Mutant
,
4776 IN BOOLEAN InitialOwner
);
4782 IN PRKMUTANT Mutant
);
4788 IN OUT PRKMUTANT Mutant
,
4789 IN KPRIORITY Increment
,
4790 IN BOOLEAN Abandoned
,
4810 IN OUT PRKQUEUE Queue
,
4811 IN OUT PLIST_ENTRY Entry
);
4817 IN OUT PRKQUEUE Queue
,
4818 IN OUT PLIST_ENTRY Entry
);
4824 IN OUT PRKQUEUE Queue
,
4825 IN KPROCESSOR_MODE WaitMode
,
4826 IN PLARGE_INTEGER Timeout OPTIONAL
);
4832 IN OUT PKPROCESS Process
);
4844 IN OUT PRKQUEUE Queue
);
4849 KeStackAttachProcess(
4850 IN OUT PKPROCESS Process
,
4851 OUT PKAPC_STATE ApcState
);
4856 KeUnstackDetachProcess(
4857 IN PKAPC_STATE ApcState
);
4862 KeSetIdealProcessorThread(
4863 IN OUT PKTHREAD Thread
,
4864 IN UCHAR Processor
);
4869 KeSetKernelStackSwapEnable(
4876 KeAcquireSpinLockRaiseToSynch(
4877 IN OUT PKSPIN_LOCK SpinLock
);
4881 KeAcquireSpinLockRaiseToSynch(
4882 IN OUT PKSPIN_LOCK SpinLock
);
4885 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4887 #if (NTDDI_VERSION >= NTDDI_WINXP)
4892 KeAcquireQueuedSpinLock(
4893 IN OUT KSPIN_LOCK_QUEUE_NUMBER Number
);
4898 KeReleaseQueuedSpinLock(
4899 IN OUT KSPIN_LOCK_QUEUE_NUMBER Number
,
4905 KeTryToAcquireQueuedSpinLock(
4906 IN KSPIN_LOCK_QUEUE_NUMBER Number
,
4907 OUT PKIRQL OldIrql
);
4909 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4911 #if (NTDDI_VERSION >= NTDDI_VISTA)
4917 OUT PCLIENT_ID ClientId
);
4922 IN OUT PKQUEUE Queue
,
4923 IN KPROCESSOR_MODE WaitMode
,
4924 IN BOOLEAN Alertable
,
4925 IN PLARGE_INTEGER Timeout OPTIONAL
,
4926 OUT PLIST_ENTRY
*EntryArray
,
4929 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4931 #define INVALID_PROCESSOR_INDEX 0xffffffff
4935 KeGetProcessorNumberFromIndex(
4937 OUT PPROCESSOR_NUMBER ProcNumber
);
4941 KeGetProcessorIndexFromNumber(
4942 IN PPROCESSOR_NUMBER ProcNumber
);
4944 #pragma pack(push,4)
4946 #ifndef VER_PRODUCTBUILD
4947 #define VER_PRODUCTBUILD 10000
4950 #define EX_PUSH_LOCK ULONG_PTR
4951 #define PEX_PUSH_LOCK PULONG_PTR
4956 extern PUCHAR FsRtlLegalAnsiCharacterArray
;
4958 extern DECLSPEC_IMPORT PUCHAR FsRtlLegalAnsiCharacterArray
;
4960 extern PACL SePublicDefaultDacl
;
4961 extern PACL SeSystemDefaultDacl
;
4963 extern KSPIN_LOCK IoStatisticsLock
;
4964 extern ULONG IoReadOperationCount
;
4965 extern ULONG IoWriteOperationCount
;
4966 extern ULONG IoOtherOperationCount
;
4967 extern LARGE_INTEGER IoReadTransferCount
;
4968 extern LARGE_INTEGER IoWriteTransferCount
;
4969 extern LARGE_INTEGER IoOtherTransferCount
;
4971 #define FS_LFN_APIS 0x00004000
4973 #define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
4974 #define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
4975 #define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
4976 #define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
4977 #define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
4978 #define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
4979 #define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
4980 #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
4981 #define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
4982 #define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
4983 #define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
4984 #define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
4985 #define FILE_STORAGE_TYPE_MASK 0x000f0000
4986 #define FILE_STORAGE_TYPE_SHIFT 16
4988 #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
4990 #define FSRTL_FLAG_FILE_MODIFIED (0x01)
4991 #define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
4992 #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
4993 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
4994 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
4995 #define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
4996 #define FSRTL_FLAG_ADVANCED_HEADER (0x40)
4997 #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
4999 #define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
5000 #define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02)
5001 #define FSRTL_FLAG2_PURGE_WHEN_MAPPED (0x04)
5002 #define FSRTL_FLAG2_IS_PAGING_FILE (0x08)
5004 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
5005 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
5006 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
5007 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
5008 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG (0x04)
5010 #define FSRTL_VOLUME_DISMOUNT 1
5011 #define FSRTL_VOLUME_DISMOUNT_FAILED 2
5012 #define FSRTL_VOLUME_LOCK 3
5013 #define FSRTL_VOLUME_LOCK_FAILED 4
5014 #define FSRTL_VOLUME_UNLOCK 5
5015 #define FSRTL_VOLUME_MOUNT 6
5017 #define FSRTL_WILD_CHARACTER 0x08
5019 #define FSRTL_FAT_LEGAL 0x01
5020 #define FSRTL_HPFS_LEGAL 0x02
5021 #define FSRTL_NTFS_LEGAL 0x04
5022 #define FSRTL_WILD_CHARACTER 0x08
5023 #define FSRTL_OLE_LEGAL 0x10
5024 #define FSRTL_NTFS_STREAM_LEGAL 0x14
5027 #define HARDWARE_PTE HARDWARE_PTE_X86
5028 #define PHARDWARE_PTE PHARDWARE_PTE_X86
5031 #define IO_CHECK_CREATE_PARAMETERS 0x0200
5032 #define IO_ATTACH_DEVICE 0x0400
5034 #define IO_ATTACH_DEVICE_API 0x80000000
5036 #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64
5037 #define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024
5039 #define IO_TYPE_APC 18
5040 #define IO_TYPE_DPC 19
5041 #define IO_TYPE_DEVICE_QUEUE 20
5042 #define IO_TYPE_EVENT_PAIR 21
5043 #define IO_TYPE_INTERRUPT 22
5044 #define IO_TYPE_PROFILE 23
5046 #define IRP_BEING_VERIFIED 0x10
5048 #define MAILSLOT_CLASS_FIRSTCLASS 1
5049 #define MAILSLOT_CLASS_SECONDCLASS 2
5051 #define MAILSLOT_SIZE_AUTO 0
5053 #define MEM_DOS_LIM 0x40000000
5055 #define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
5057 #define OB_TYPE_TYPE 1
5058 #define OB_TYPE_DIRECTORY 2
5059 #define OB_TYPE_SYMBOLIC_LINK 3
5060 #define OB_TYPE_TOKEN 4
5061 #define OB_TYPE_PROCESS 5
5062 #define OB_TYPE_THREAD 6
5063 #define OB_TYPE_EVENT 7
5064 #define OB_TYPE_EVENT_PAIR 8
5065 #define OB_TYPE_MUTANT 9
5066 #define OB_TYPE_SEMAPHORE 10
5067 #define OB_TYPE_TIMER 11
5068 #define OB_TYPE_PROFILE 12
5069 #define OB_TYPE_WINDOW_STATION 13
5070 #define OB_TYPE_DESKTOP 14
5071 #define OB_TYPE_SECTION 15
5072 #define OB_TYPE_KEY 16
5073 #define OB_TYPE_PORT 17
5074 #define OB_TYPE_ADAPTER 18
5075 #define OB_TYPE_CONTROLLER 19
5076 #define OB_TYPE_DEVICE 20
5077 #define OB_TYPE_DRIVER 21
5078 #define OB_TYPE_IO_COMPLETION 22
5079 #define OB_TYPE_FILE 23
5081 #define PIN_WAIT (1)
5082 #define PIN_EXCLUSIVE (2)
5083 #define PIN_NO_READ (4)
5084 #define PIN_IF_BCB (8)
5086 #define SEC_BASED 0x00200000
5088 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
5089 #define SECURITY_WORLD_RID (0x00000000L)
5093 #define TOKEN_HAS_TRAVERSE_PRIVILEGE 0x01
5094 #define TOKEN_HAS_BACKUP_PRIVILEGE 0x02
5095 #define TOKEN_HAS_RESTORE_PRIVILEGE 0x04
5096 #define TOKEN_HAS_ADMIN_GROUP 0x08
5097 #define TOKEN_WRITE_RESTRICTED 0x08
5098 #define TOKEN_IS_RESTRICTED 0x10
5099 #define SE_BACKUP_PRIVILEGES_CHECKED 0x0100
5101 #define VACB_MAPPING_GRANULARITY (0x40000)
5102 #define VACB_OFFSET_SHIFT (18)
5104 #if (VER_PRODUCTBUILD >= 1381)
5105 #define FSCTL_MARK_AS_SYSTEM_HIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
5106 #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
5107 #endif /* (VER_PRODUCTBUILD >= 1381) */
5109 #if (VER_PRODUCTBUILD >= 2195)
5111 #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
5112 #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
5114 #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
5116 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
5117 #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
5118 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
5119 #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
5120 #endif /* (VER_PRODUCTBUILD >= 2195) */
5122 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
5123 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
5124 #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
5125 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
5126 #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
5127 #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
5128 #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
5129 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
5131 #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
5133 typedef PVOID OPLOCK
, *POPLOCK
;
5138 struct _RTL_AVL_TABLE
;
5139 struct _RTL_GENERIC_TABLE
;
5147 typedef PVOID PNOTIFY_SYNC
;
5149 typedef enum _FAST_IO_POSSIBLE
{
5150 FastIoIsNotPossible
,
5152 FastIoIsQuestionable
5155 typedef enum _FILE_STORAGE_TYPE
{
5156 StorageTypeDefault
= 1,
5157 StorageTypeDirectory
,
5159 StorageTypeJunctionPoint
,
5161 StorageTypeStructuredStorage
,
5162 StorageTypeEmbedding
,
5164 } FILE_STORAGE_TYPE
;
5166 typedef struct _OBJECT_BASIC_INFORMATION
5169 ACCESS_MASK GrantedAccess
;
5172 ULONG PagedPoolCharge
;
5173 ULONG NonPagedPoolCharge
;
5174 ULONG Reserved
[ 3 ];
5177 ULONG SecurityDescriptorSize
;
5178 LARGE_INTEGER CreationTime
;
5179 } OBJECT_BASIC_INFORMATION
, *POBJECT_BASIC_INFORMATION
;
5181 typedef struct _BITMAP_RANGE
{
5184 ULONG FirstDirtyPage
;
5185 ULONG LastDirtyPage
;
5188 } BITMAP_RANGE
, *PBITMAP_RANGE
;
5190 typedef struct _CACHE_UNINITIALIZE_EVENT
{
5191 struct _CACHE_UNINITIALIZE_EVENT
*Next
;
5193 } CACHE_UNINITIALIZE_EVENT
, *PCACHE_UNINITIALIZE_EVENT
;
5195 typedef struct _CC_FILE_SIZES
{
5196 LARGE_INTEGER AllocationSize
;
5197 LARGE_INTEGER FileSize
;
5198 LARGE_INTEGER ValidDataLength
;
5199 } CC_FILE_SIZES
, *PCC_FILE_SIZES
;
5201 typedef struct _FILE_COPY_ON_WRITE_INFORMATION
{
5202 BOOLEAN ReplaceIfExists
;
5203 HANDLE RootDirectory
;
5204 ULONG FileNameLength
;
5206 } FILE_COPY_ON_WRITE_INFORMATION
, *PFILE_COPY_ON_WRITE_INFORMATION
;
5208 typedef struct _FILE_FULL_DIRECTORY_INFORMATION
{
5209 ULONG NextEntryOffset
;
5211 LARGE_INTEGER CreationTime
;
5212 LARGE_INTEGER LastAccessTime
;
5213 LARGE_INTEGER LastWriteTime
;
5214 LARGE_INTEGER ChangeTime
;
5215 LARGE_INTEGER EndOfFile
;
5216 LARGE_INTEGER AllocationSize
;
5217 ULONG FileAttributes
;
5218 ULONG FileNameLength
;
5220 WCHAR FileName
[ANYSIZE_ARRAY
];
5221 } FILE_FULL_DIRECTORY_INFORMATION
, *PFILE_FULL_DIRECTORY_INFORMATION
;
5223 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
5224 LARGE_INTEGER TotalAllocationUnits
;
5225 LARGE_INTEGER CallerAvailableAllocationUnits
;
5226 LARGE_INTEGER ActualAvailableAllocationUnits
;
5227 ULONG SectorsPerAllocationUnit
;
5228 ULONG BytesPerSector
;
5229 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
5231 typedef struct _FILE_FS_LABEL_INFORMATION
{
5232 ULONG VolumeLabelLength
;
5233 WCHAR VolumeLabel
[1];
5234 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
5236 #if (VER_PRODUCTBUILD >= 2195)
5238 typedef struct _FILE_FS_OBJECT_ID_INFORMATION
{
5240 UCHAR ExtendedInfo
[48];
5241 } FILE_FS_OBJECT_ID_INFORMATION
, *PFILE_FS_OBJECT_ID_INFORMATION
;
5243 #endif /* (VER_PRODUCTBUILD >= 2195) */
5245 typedef struct _FILE_FS_SIZE_INFORMATION
{
5246 LARGE_INTEGER TotalAllocationUnits
;
5247 LARGE_INTEGER AvailableAllocationUnits
;
5248 ULONG SectorsPerAllocationUnit
;
5249 ULONG BytesPerSector
;
5250 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
5252 typedef struct _FILE_FS_VOLUME_INFORMATION
{
5253 LARGE_INTEGER VolumeCreationTime
;
5254 ULONG VolumeSerialNumber
;
5255 ULONG VolumeLabelLength
;
5256 BOOLEAN SupportsObjects
;
5257 WCHAR VolumeLabel
[1];
5258 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
5260 typedef struct _FILE_FS_OBJECTID_INFORMATION
5263 UCHAR ExtendedInfo
[48];
5264 } FILE_FS_OBJECTID_INFORMATION
, *PFILE_FS_OBJECTID_INFORMATION
;
5266 typedef struct _FILE_LOCK_INFO
5268 LARGE_INTEGER StartingByte
;
5269 LARGE_INTEGER Length
;
5270 BOOLEAN ExclusiveLock
;
5272 PFILE_OBJECT FileObject
;
5274 LARGE_INTEGER EndingByte
;
5275 } FILE_LOCK_INFO
, *PFILE_LOCK_INFO
;
5277 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
5278 typedef struct _FILE_SHARED_LOCK_ENTRY
{
5281 FILE_LOCK_INFO FileLock
;
5282 } FILE_SHARED_LOCK_ENTRY
, *PFILE_SHARED_LOCK_ENTRY
;
5284 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
5285 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY
{
5286 LIST_ENTRY ListEntry
;
5289 FILE_LOCK_INFO FileLock
;
5290 } FILE_EXCLUSIVE_LOCK_ENTRY
, *PFILE_EXCLUSIVE_LOCK_ENTRY
;
5292 typedef NTSTATUS (NTAPI
*PCOMPLETE_LOCK_IRP_ROUTINE
) (
5297 typedef VOID (NTAPI
*PUNLOCK_ROUTINE
) (
5299 IN PFILE_LOCK_INFO FileLockInfo
5302 typedef struct _FILE_LOCK
{
5303 PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine
;
5304 PUNLOCK_ROUTINE UnlockRoutine
;
5305 BOOLEAN FastIoIsQuestionable
;
5307 PVOID LockInformation
;
5308 FILE_LOCK_INFO LastReturnedLockInfo
;
5309 PVOID LastReturnedLock
;
5310 } FILE_LOCK
, *PFILE_LOCK
;
5312 typedef struct _FILE_MAILSLOT_PEEK_BUFFER
{
5313 ULONG ReadDataAvailable
;
5314 ULONG NumberOfMessages
;
5315 ULONG MessageLength
;
5316 } FILE_MAILSLOT_PEEK_BUFFER
, *PFILE_MAILSLOT_PEEK_BUFFER
;
5318 typedef struct _FILE_OLE_CLASSID_INFORMATION
{
5320 } FILE_OLE_CLASSID_INFORMATION
, *PFILE_OLE_CLASSID_INFORMATION
;
5322 typedef struct _FILE_OLE_ALL_INFORMATION
{
5323 FILE_BASIC_INFORMATION BasicInformation
;
5324 FILE_STANDARD_INFORMATION StandardInformation
;
5325 FILE_INTERNAL_INFORMATION InternalInformation
;
5326 FILE_EA_INFORMATION EaInformation
;
5327 FILE_ACCESS_INFORMATION AccessInformation
;
5328 FILE_POSITION_INFORMATION PositionInformation
;
5329 FILE_MODE_INFORMATION ModeInformation
;
5330 FILE_ALIGNMENT_INFORMATION AlignmentInformation
;
5333 LARGE_INTEGER SecurityChangeTime
;
5334 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation
;
5335 FILE_OBJECTID_INFORMATION ObjectIdInformation
;
5336 FILE_STORAGE_TYPE StorageType
;
5339 ULONG NumberOfStreamReferences
;
5342 BOOLEAN ContentIndexDisable
;
5343 BOOLEAN InheritContentIndexDisable
;
5344 FILE_NAME_INFORMATION NameInformation
;
5345 } FILE_OLE_ALL_INFORMATION
, *PFILE_OLE_ALL_INFORMATION
;
5347 typedef struct _FILE_OLE_DIR_INFORMATION
{
5348 ULONG NextEntryOffset
;
5350 LARGE_INTEGER CreationTime
;
5351 LARGE_INTEGER LastAccessTime
;
5352 LARGE_INTEGER LastWriteTime
;
5353 LARGE_INTEGER ChangeTime
;
5354 LARGE_INTEGER EndOfFile
;
5355 LARGE_INTEGER AllocationSize
;
5356 ULONG FileAttributes
;
5357 ULONG FileNameLength
;
5358 FILE_STORAGE_TYPE StorageType
;
5361 BOOLEAN ContentIndexDisable
;
5362 BOOLEAN InheritContentIndexDisable
;
5364 } FILE_OLE_DIR_INFORMATION
, *PFILE_OLE_DIR_INFORMATION
;
5366 typedef struct _FILE_OLE_INFORMATION
{
5367 LARGE_INTEGER SecurityChangeTime
;
5368 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation
;
5369 FILE_OBJECTID_INFORMATION ObjectIdInformation
;
5370 FILE_STORAGE_TYPE StorageType
;
5372 BOOLEAN ContentIndexDisable
;
5373 BOOLEAN InheritContentIndexDisable
;
5374 } FILE_OLE_INFORMATION
, *PFILE_OLE_INFORMATION
;
5376 typedef struct _FILE_OLE_STATE_BITS_INFORMATION
{
5378 ULONG StateBitsMask
;
5379 } FILE_OLE_STATE_BITS_INFORMATION
, *PFILE_OLE_STATE_BITS_INFORMATION
;
5381 #if (VER_PRODUCTBUILD >= 2195)
5382 typedef struct FILE_ALLOCATED_RANGE_BUFFER
{
5383 LARGE_INTEGER FileOffset
;
5384 LARGE_INTEGER Length
;
5385 } FILE_ALLOCATED_RANGE_BUFFER
, *PFILE_ALLOCATED_RANGE_BUFFER
;
5386 #endif /* (VER_PRODUCTBUILD >= 2195) */
5388 #define FSRTL_FCB_HEADER_V0 (0x00)
5389 #define FSRTL_FCB_HEADER_V1 (0x01)
5392 typedef struct _FSRTL_COMMON_FCB_HEADER
{
5393 CSHORT NodeTypeCode
;
5394 CSHORT NodeByteSize
;
5396 UCHAR IsFastIoPossible
;
5397 #if (VER_PRODUCTBUILD >= 1381)
5400 #endif /* (VER_PRODUCTBUILD >= 1381) */
5401 PERESOURCE Resource
;
5402 PERESOURCE PagingIoResource
;
5403 LARGE_INTEGER AllocationSize
;
5404 LARGE_INTEGER FileSize
;
5405 LARGE_INTEGER ValidDataLength
;
5406 } FSRTL_COMMON_FCB_HEADER
, *PFSRTL_COMMON_FCB_HEADER
;
5408 typedef enum _FSRTL_COMPARISON_RESULT
5413 } FSRTL_COMPARISON_RESULT
;
5415 #if (VER_PRODUCTBUILD >= 2600)
5417 typedef struct _FSRTL_ADVANCED_FCB_HEADER
{
5418 CSHORT NodeTypeCode
;
5419 CSHORT NodeByteSize
;
5421 UCHAR IsFastIoPossible
;
5425 PERESOURCE Resource
;
5426 PERESOURCE PagingIoResource
;
5427 LARGE_INTEGER AllocationSize
;
5428 LARGE_INTEGER FileSize
;
5429 LARGE_INTEGER ValidDataLength
;
5430 PFAST_MUTEX FastMutex
;
5431 LIST_ENTRY FilterContexts
;
5432 EX_PUSH_LOCK PushLock
;
5433 PVOID
*FileContextSupportPointer
;
5434 } FSRTL_ADVANCED_FCB_HEADER
, *PFSRTL_ADVANCED_FCB_HEADER
;
5436 typedef struct _FSRTL_PER_STREAM_CONTEXT
{
5440 PFREE_FUNCTION FreeCallback
;
5441 } FSRTL_PER_STREAM_CONTEXT
, *PFSRTL_PER_STREAM_CONTEXT
;
5443 typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT
5448 } FSRTL_PER_FILEOBJECT_CONTEXT
, *PFSRTL_PER_FILEOBJECT_CONTEXT
;
5450 #endif /* (VER_PRODUCTBUILD >= 2600) */
5452 typedef struct _BASE_MCB
5454 ULONG MaximumPairCount
;
5459 } BASE_MCB
, *PBASE_MCB
;
5461 typedef struct _LARGE_MCB
5463 PKGUARDED_MUTEX GuardedMutex
;
5465 } LARGE_MCB
, *PLARGE_MCB
;
5469 LARGE_MCB DummyFieldThatSizesThisStructureCorrectly
;
5472 typedef struct _MAPPING_PAIR
{
5475 } MAPPING_PAIR
, *PMAPPING_PAIR
;
5477 typedef struct _GET_RETRIEVAL_DESCRIPTOR
{
5478 ULONG NumberOfPairs
;
5480 MAPPING_PAIR Pair
[1];
5481 } GET_RETRIEVAL_DESCRIPTOR
, *PGET_RETRIEVAL_DESCRIPTOR
;
5483 #define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
5485 typedef struct _MBCB
{
5486 CSHORT NodeTypeCode
;
5487 CSHORT NodeIsInZone
;
5491 LIST_ENTRY BitmapRanges
;
5492 LONGLONG ResumeWritePage
;
5493 BITMAP_RANGE BitmapRange1
;
5494 BITMAP_RANGE BitmapRange2
;
5495 BITMAP_RANGE BitmapRange3
;
5498 typedef enum _MMFLUSH_TYPE
{
5503 typedef struct _MOVEFILE_DESCRIPTOR
{
5506 LARGE_INTEGER StartVcn
;
5507 LARGE_INTEGER TargetLcn
;
5510 } MOVEFILE_DESCRIPTOR
, *PMOVEFILE_DESCRIPTOR
;
5512 typedef struct _OBJECT_BASIC_INFO
{
5514 ACCESS_MASK GrantedAccess
;
5516 ULONG ReferenceCount
;
5517 ULONG PagedPoolUsage
;
5518 ULONG NonPagedPoolUsage
;
5520 ULONG NameInformationLength
;
5521 ULONG TypeInformationLength
;
5522 ULONG SecurityDescriptorLength
;
5523 LARGE_INTEGER CreateTime
;
5524 } OBJECT_BASIC_INFO
, *POBJECT_BASIC_INFO
;
5526 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO
{
5528 BOOLEAN ProtectFromClose
;
5529 } OBJECT_HANDLE_ATTRIBUTE_INFO
, *POBJECT_HANDLE_ATTRIBUTE_INFO
;
5531 typedef struct _OBJECT_NAME_INFO
{
5532 UNICODE_STRING ObjectName
;
5533 WCHAR ObjectNameBuffer
[1];
5534 } OBJECT_NAME_INFO
, *POBJECT_NAME_INFO
;
5536 typedef struct _OBJECT_PROTECTION_INFO
{
5538 BOOLEAN ProtectHandle
;
5539 } OBJECT_PROTECTION_INFO
, *POBJECT_PROTECTION_INFO
;
5541 typedef struct _OBJECT_TYPE_INFO
{
5542 UNICODE_STRING ObjectTypeName
;
5543 UCHAR Unknown
[0x58];
5544 WCHAR ObjectTypeNameBuffer
[1];
5545 } OBJECT_TYPE_INFO
, *POBJECT_TYPE_INFO
;
5547 typedef struct _OBJECT_ALL_TYPES_INFO
{
5548 ULONG NumberOfObjectTypes
;
5549 OBJECT_TYPE_INFO ObjectsTypeInfo
[1];
5550 } OBJECT_ALL_TYPES_INFO
, *POBJECT_ALL_TYPES_INFO
;
5552 typedef enum _RTL_GENERIC_COMPARE_RESULTS
5557 } RTL_GENERIC_COMPARE_RESULTS
;
5559 typedef enum _TABLE_SEARCH_RESULT
5565 } TABLE_SEARCH_RESULT
;
5568 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
)(
5569 struct _RTL_AVL_TABLE
*Table
,
5574 typedef RTL_GENERIC_COMPARE_RESULTS
5575 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
5576 struct _RTL_AVL_TABLE
*Table
,
5581 typedef RTL_GENERIC_COMPARE_RESULTS
5582 (NTAPI
*PRTL_GENERIC_COMPARE_ROUTINE
) (
5583 struct _RTL_GENERIC_TABLE
*Table
,
5589 (NTAPI
*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
5590 struct _RTL_GENERIC_TABLE
*Table
,
5595 (NTAPI
*PRTL_GENERIC_FREE_ROUTINE
) (
5596 struct _RTL_GENERIC_TABLE
*Table
,
5601 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
5602 struct _RTL_AVL_TABLE
*Table
,
5607 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
5608 struct _RTL_AVL_TABLE
*Table
,
5612 typedef struct _PUBLIC_BCB
{
5613 CSHORT NodeTypeCode
;
5614 CSHORT NodeByteSize
;
5616 LARGE_INTEGER MappedFileOffset
;
5617 } PUBLIC_BCB
, *PPUBLIC_BCB
;
5619 typedef struct _QUERY_PATH_REQUEST
{
5620 ULONG PathNameLength
;
5621 PIO_SECURITY_CONTEXT SecurityContext
;
5622 WCHAR FilePathName
[1];
5623 } QUERY_PATH_REQUEST
, *PQUERY_PATH_REQUEST
;
5625 typedef struct _QUERY_PATH_RESPONSE
{
5626 ULONG LengthAccepted
;
5627 } QUERY_PATH_RESPONSE
, *PQUERY_PATH_RESPONSE
;
5629 typedef struct _RTL_BALANCED_LINKS
5631 struct _RTL_BALANCED_LINKS
*Parent
;
5632 struct _RTL_BALANCED_LINKS
*LeftChild
;
5633 struct _RTL_BALANCED_LINKS
*RightChild
;
5636 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
5638 typedef struct _RTL_GENERIC_TABLE
5640 PRTL_SPLAY_LINKS TableRoot
;
5641 LIST_ENTRY InsertOrderList
;
5642 PLIST_ENTRY OrderedPointer
;
5643 ULONG WhichOrderedElement
;
5644 ULONG NumberGenericTableElements
;
5645 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
5646 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
5647 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
5649 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
5651 #undef PRTL_GENERIC_COMPARE_ROUTINE
5652 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
5653 #undef PRTL_GENERIC_FREE_ROUTINE
5654 #undef RTL_GENERIC_TABLE
5655 #undef PRTL_GENERIC_TABLE
5657 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
5658 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
5659 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
5660 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
5661 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
5663 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
5664 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
5665 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
5666 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
5667 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
5668 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
5669 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
5670 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
5671 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
5672 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
5673 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
5675 typedef struct _RTL_AVL_TABLE
5677 RTL_BALANCED_LINKS BalancedRoot
;
5678 PVOID OrderedPointer
;
5679 ULONG WhichOrderedElement
;
5680 ULONG NumberGenericTableElements
;
5682 PRTL_BALANCED_LINKS RestartKey
;
5684 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
5685 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
5686 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
5688 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
5693 RtlInitializeGenericTableAvl(
5694 PRTL_AVL_TABLE Table
,
5695 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
5696 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
5697 PRTL_AVL_FREE_ROUTINE FreeRoutine
,
5704 RtlInsertElementGenericTableAvl (
5705 PRTL_AVL_TABLE Table
,
5708 PBOOLEAN NewElement OPTIONAL
5714 RtlDeleteElementGenericTableAvl (
5715 PRTL_AVL_TABLE Table
,
5722 RtlLookupElementGenericTableAvl (
5723 PRTL_AVL_TABLE Table
,
5730 RtlEnumerateGenericTableWithoutSplayingAvl (
5731 PRTL_AVL_TABLE Table
,
5735 #if defined(USE_LPC6432)
5736 #define LPC_CLIENT_ID CLIENT_ID64
5737 #define LPC_SIZE_T ULONGLONG
5738 #define LPC_PVOID ULONGLONG
5739 #define LPC_HANDLE ULONGLONG
5741 #define LPC_CLIENT_ID CLIENT_ID
5742 #define LPC_SIZE_T SIZE_T
5743 #define LPC_PVOID PVOID
5744 #define LPC_HANDLE HANDLE
5747 typedef struct _PORT_MESSAGE
5763 CSHORT DataInfoOffset
;
5767 __GNU_EXTENSION
union
5769 LPC_CLIENT_ID ClientId
;
5770 double DoNotUseThisField
;
5773 __GNU_EXTENSION
union
5775 LPC_SIZE_T ClientViewSize
;
5778 } PORT_MESSAGE
, *PPORT_MESSAGE
;
5780 #define LPC_KERNELMODE_MESSAGE (CSHORT)((USHORT)0x8000)
5782 typedef struct _PORT_VIEW
5785 LPC_HANDLE SectionHandle
;
5786 ULONG SectionOffset
;
5787 LPC_SIZE_T ViewSize
;
5789 LPC_PVOID ViewRemoteBase
;
5790 } PORT_VIEW
, *PPORT_VIEW
;
5792 typedef struct _REMOTE_PORT_VIEW
5795 LPC_SIZE_T ViewSize
;
5797 } REMOTE_PORT_VIEW
, *PREMOTE_PORT_VIEW
;
5799 typedef struct _SE_EXPORTS
{
5801 LUID SeCreateTokenPrivilege
;
5802 LUID SeAssignPrimaryTokenPrivilege
;
5803 LUID SeLockMemoryPrivilege
;
5804 LUID SeIncreaseQuotaPrivilege
;
5805 LUID SeUnsolicitedInputPrivilege
;
5806 LUID SeTcbPrivilege
;
5807 LUID SeSecurityPrivilege
;
5808 LUID SeTakeOwnershipPrivilege
;
5809 LUID SeLoadDriverPrivilege
;
5810 LUID SeCreatePagefilePrivilege
;
5811 LUID SeIncreaseBasePriorityPrivilege
;
5812 LUID SeSystemProfilePrivilege
;
5813 LUID SeSystemtimePrivilege
;
5814 LUID SeProfileSingleProcessPrivilege
;
5815 LUID SeCreatePermanentPrivilege
;
5816 LUID SeBackupPrivilege
;
5817 LUID SeRestorePrivilege
;
5818 LUID SeShutdownPrivilege
;
5819 LUID SeDebugPrivilege
;
5820 LUID SeAuditPrivilege
;
5821 LUID SeSystemEnvironmentPrivilege
;
5822 LUID SeChangeNotifyPrivilege
;
5823 LUID SeRemoteShutdownPrivilege
;
5828 PSID SeCreatorOwnerSid
;
5829 PSID SeCreatorGroupSid
;
5831 PSID SeNtAuthoritySid
;
5835 PSID SeInteractiveSid
;
5836 PSID SeLocalSystemSid
;
5837 PSID SeAliasAdminsSid
;
5838 PSID SeAliasUsersSid
;
5839 PSID SeAliasGuestsSid
;
5840 PSID SeAliasPowerUsersSid
;
5841 PSID SeAliasAccountOpsSid
;
5842 PSID SeAliasSystemOpsSid
;
5843 PSID SeAliasPrintOpsSid
;
5844 PSID SeAliasBackupOpsSid
;
5846 PSID SeAuthenticatedUsersSid
;
5848 PSID SeRestrictedSid
;
5849 PSID SeAnonymousLogonSid
;
5851 LUID SeUndockPrivilege
;
5852 LUID SeSyncAgentPrivilege
;
5853 LUID SeEnableDelegationPrivilege
;
5855 } SE_EXPORTS
, *PSE_EXPORTS
;
5857 extern PSE_EXPORTS SeExports
;
5859 typedef struct _TUNNEL
{
5861 PRTL_SPLAY_LINKS Cache
;
5862 LIST_ENTRY TimerQueue
;
5866 typedef struct _VAD_HEADER
{
5869 struct _VAD_HEADER
* ParentLink
;
5870 struct _VAD_HEADER
* LeftLink
;
5871 struct _VAD_HEADER
* RightLink
;
5872 ULONG Flags
; /* LSB = CommitCharge */
5874 PVOID FirstProtoPte
;
5878 } VAD_HEADER
, *PVAD_HEADER
;
5880 #if (VER_PRODUCTBUILD >= 2600)
5883 (NTAPI
*PFILTER_REPORT_CHANGE
) (
5884 IN PVOID NotifyContext
,
5885 IN PVOID FilterContext
5888 typedef enum _FS_FILTER_SECTION_SYNC_TYPE
{
5890 SyncTypeCreateSection
5891 } FS_FILTER_SECTION_SYNC_TYPE
, *PFS_FILTER_SECTION_SYNC_TYPE
;
5893 typedef enum _FS_FILTER_STREAM_FO_NOTIFICATION_TYPE
{
5894 NotifyTypeCreate
= 0,
5896 } FS_FILTER_STREAM_FO_NOTIFICATION_TYPE
, *PFS_FILTER_STREAM_FO_NOTIFICATION_TYPE
;
5898 typedef union _FS_FILTER_PARAMETERS
{
5900 PLARGE_INTEGER EndingOffset
;
5901 PERESOURCE
*ResourceToRelease
;
5902 } AcquireForModifiedPageWriter
;
5905 PERESOURCE ResourceToRelease
;
5906 } ReleaseForModifiedPageWriter
;
5909 FS_FILTER_SECTION_SYNC_TYPE SyncType
;
5910 ULONG PageProtection
;
5911 } AcquireForSectionSynchronization
;
5914 FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType
;
5915 BOOLEAN POINTER_ALIGNMENT SafeToRecurse
;
5916 } NotifyStreamFileObject
;
5925 } FS_FILTER_PARAMETERS
, *PFS_FILTER_PARAMETERS
;
5927 typedef struct _FS_FILTER_CALLBACK_DATA
{
5928 ULONG SizeOfFsFilterCallbackData
;
5931 struct _DEVICE_OBJECT
*DeviceObject
;
5932 struct _FILE_OBJECT
*FileObject
;
5933 FS_FILTER_PARAMETERS Parameters
;
5934 } FS_FILTER_CALLBACK_DATA
, *PFS_FILTER_CALLBACK_DATA
;
5937 (NTAPI
*PFS_FILTER_CALLBACK
) (
5938 IN PFS_FILTER_CALLBACK_DATA Data
,
5939 OUT PVOID
*CompletionContext
5943 (NTAPI
*PFS_FILTER_COMPLETION_CALLBACK
) (
5944 IN PFS_FILTER_CALLBACK_DATA Data
,
5945 IN NTSTATUS OperationStatus
,
5946 IN PVOID CompletionContext
5949 typedef struct _FS_FILTER_CALLBACKS
{
5950 ULONG SizeOfFsFilterCallbacks
;
5952 PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization
;
5953 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization
;
5954 PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization
;
5955 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization
;
5956 PFS_FILTER_CALLBACK PreAcquireForCcFlush
;
5957 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush
;
5958 PFS_FILTER_CALLBACK PreReleaseForCcFlush
;
5959 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush
;
5960 PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter
;
5961 PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter
;
5962 PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter
;
5963 PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter
;
5964 } FS_FILTER_CALLBACKS
, *PFS_FILTER_CALLBACKS
;
5966 typedef struct _READ_LIST
{
5967 PFILE_OBJECT FileObject
;
5968 ULONG NumberOfEntries
;
5970 FILE_SEGMENT_ELEMENT List
[ANYSIZE_ARRAY
];
5971 } READ_LIST
, *PREAD_LIST
;
5979 IN PFILE_OBJECT FileObject
,
5980 IN ULONG BytesToWrite
,
5989 IN PFILE_OBJECT FileObject
,
5990 IN PLARGE_INTEGER FileOffset
,
5994 OUT PIO_STATUS_BLOCK IoStatus
6001 IN PFILE_OBJECT FileObject
,
6002 IN PLARGE_INTEGER FileOffset
,
6008 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
6010 typedef VOID (NTAPI
*PCC_POST_DEFERRED_WRITE
) (
6019 IN PFILE_OBJECT FileObject
,
6020 IN PCC_POST_DEFERRED_WRITE PostRoutine
,
6023 IN ULONG BytesToWrite
,
6031 IN PFILE_OBJECT FileObject
,
6032 IN ULONG FileOffset
,
6036 OUT PIO_STATUS_BLOCK IoStatus
6043 IN PFILE_OBJECT FileObject
,
6044 IN ULONG FileOffset
,
6053 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
6054 IN PLARGE_INTEGER FileOffset OPTIONAL
,
6056 OUT PIO_STATUS_BLOCK IoStatus OPTIONAL
6059 typedef VOID (NTAPI
*PDIRTY_PAGE_ROUTINE
) (
6060 IN PFILE_OBJECT FileObject
,
6061 IN PLARGE_INTEGER FileOffset
,
6063 IN PLARGE_INTEGER OldestLsn
,
6064 IN PLARGE_INTEGER NewestLsn
,
6074 IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine
,
6082 CcGetFileObjectFromBcb (
6089 CcGetFileObjectFromSectionPtrs (
6090 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
6093 #define CcGetFileSizePointer(FO) ( \
6094 ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
6097 #if (VER_PRODUCTBUILD >= 2195)
6102 CcGetFlushedValidData (
6103 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
6104 IN BOOLEAN BcbListHeld
6107 #endif /* (VER_PRODUCTBUILD >= 2195) */
6112 CcGetLsnForFileObject (
6113 IN PFILE_OBJECT FileObject
,
6114 OUT PLARGE_INTEGER OldestLsn OPTIONAL
6117 typedef BOOLEAN (NTAPI
*PACQUIRE_FOR_LAZY_WRITE
) (
6122 typedef VOID (NTAPI
*PRELEASE_FROM_LAZY_WRITE
) (
6126 typedef BOOLEAN (NTAPI
*PACQUIRE_FOR_READ_AHEAD
) (
6131 typedef VOID (NTAPI
*PRELEASE_FROM_READ_AHEAD
) (
6135 typedef struct _CACHE_MANAGER_CALLBACKS
{
6136 PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite
;
6137 PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite
;
6138 PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead
;
6139 PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead
;
6140 } CACHE_MANAGER_CALLBACKS
, *PCACHE_MANAGER_CALLBACKS
;
6145 CcInitializeCacheMap (
6146 IN PFILE_OBJECT FileObject
,
6147 IN PCC_FILE_SIZES FileSizes
,
6148 IN BOOLEAN PinAccess
,
6149 IN PCACHE_MANAGER_CALLBACKS Callbacks
,
6150 IN PVOID LazyWriteContext
6153 #define CcIsFileCached(FO) ( \
6154 ((FO)->SectionObjectPointer != NULL) && \
6155 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
6158 extern ULONG CcFastMdlReadWait
;
6163 CcIsThereDirtyData (
6171 IN PFILE_OBJECT FileObject
,
6172 IN PLARGE_INTEGER FileOffset
,
6183 IN PFILE_OBJECT FileObject
,
6184 IN PLARGE_INTEGER FileOffset
,
6187 OUT PIO_STATUS_BLOCK IoStatus
6194 IN PFILE_OBJECT FileObject
,
6201 CcMdlWriteComplete (
6202 IN PFILE_OBJECT FileObject
,
6203 IN PLARGE_INTEGER FileOffset
,
6213 IN PFILE_OBJECT FileObject
,
6214 IN PLARGE_INTEGER FileOffset
,
6224 IN PFILE_OBJECT FileObject
,
6225 IN PLARGE_INTEGER FileOffset
,
6236 IN PFILE_OBJECT FileObject
,
6237 IN PLARGE_INTEGER FileOffset
,
6240 OUT PIO_STATUS_BLOCK IoStatus
6247 IN PFILE_OBJECT FileObject
,
6248 IN PLARGE_INTEGER FileOffset
,
6259 CcPurgeCacheSection (
6260 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
6261 IN PLARGE_INTEGER FileOffset OPTIONAL
,
6263 IN BOOLEAN UninitializeCacheMaps
6266 #define CcReadAhead(FO, FOFF, LEN) ( \
6267 if ((LEN) >= 256) { \
6268 CcScheduleReadAhead((FO), (FOFF), (LEN)); \
6272 #if (VER_PRODUCTBUILD >= 2195)
6281 #endif /* (VER_PRODUCTBUILD >= 2195) */
6293 CcScheduleReadAhead (
6294 IN PFILE_OBJECT FileObject
,
6295 IN PLARGE_INTEGER FileOffset
,
6302 CcSetAdditionalCacheAttributes (
6303 IN PFILE_OBJECT FileObject
,
6304 IN BOOLEAN DisableReadAhead
,
6305 IN BOOLEAN DisableWriteBehind
6311 CcSetBcbOwnerPointer (
6313 IN PVOID OwnerPointer
6319 CcSetDirtyPageThreshold (
6320 IN PFILE_OBJECT FileObject
,
6321 IN ULONG DirtyPageThreshold
6327 CcSetDirtyPinnedData (
6329 IN PLARGE_INTEGER Lsn OPTIONAL
6336 IN PFILE_OBJECT FileObject
,
6337 IN PCC_FILE_SIZES FileSizes
6340 typedef VOID (NTAPI
*PFLUSH_TO_LSN
) (
6342 IN LARGE_INTEGER Lsn
6348 CcSetLogHandleForFile (
6349 IN PFILE_OBJECT FileObject
,
6351 IN PFLUSH_TO_LSN FlushToLsnRoutine
6357 CcSetReadAheadGranularity (
6358 IN PFILE_OBJECT FileObject
,
6359 IN ULONG Granularity
/* default: PAGE_SIZE */
6360 /* allowed: 2^n * PAGE_SIZE */
6366 CcUninitializeCacheMap (
6367 IN PFILE_OBJECT FileObject
,
6368 IN PLARGE_INTEGER TruncateSize OPTIONAL
,
6369 IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL
6382 CcUnpinDataForThread (
6384 IN ERESOURCE_THREAD ResourceThreadId
6390 CcUnpinRepinnedBcb (
6392 IN BOOLEAN WriteThrough
,
6393 OUT PIO_STATUS_BLOCK IoStatus
6396 #if (VER_PRODUCTBUILD >= 2195)
6401 CcWaitForCurrentLazyWriterActivity (
6405 #endif /* (VER_PRODUCTBUILD >= 2195) */
6411 IN PFILE_OBJECT FileObject
,
6412 IN PLARGE_INTEGER StartOffset
,
6413 IN PLARGE_INTEGER EndOffset
,
6420 ExDisableResourceBoostLite (
6421 IN PERESOURCE Resource
6427 ExQueryPoolBlockSize (
6429 OUT PBOOLEAN QuotaCharged
6432 #if (VER_PRODUCTBUILD >= 2600)
6434 #ifndef __NTOSKRNL__
6438 ExInitializeRundownProtection (
6439 IN PEX_RUNDOWN_REF RunRef
6445 ExReInitializeRundownProtection (
6446 IN PEX_RUNDOWN_REF RunRef
6452 ExAcquireRundownProtection (
6453 IN PEX_RUNDOWN_REF RunRef
6459 ExAcquireRundownProtectionEx (
6460 IN PEX_RUNDOWN_REF RunRef
,
6467 ExReleaseRundownProtection (
6468 IN PEX_RUNDOWN_REF RunRef
6474 ExReleaseRundownProtectionEx (
6475 IN PEX_RUNDOWN_REF RunRef
,
6482 ExRundownCompleted (
6483 IN PEX_RUNDOWN_REF RunRef
6489 ExWaitForRundownProtectionRelease (
6490 IN PEX_RUNDOWN_REF RunRef
6494 #endif /* (VER_PRODUCTBUILD >= 2600) */
6497 #define FsRtlSetupAdvancedHeader( _advhdr, _fmutx ) \
6499 SetFlag( (_advhdr)->Flags, FSRTL_FLAG_ADVANCED_HEADER ); \
6500 SetFlag( (_advhdr)->Flags2, FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS ); \
6501 (_advhdr)->Version = FSRTL_FCB_HEADER_V1; \
6502 InitializeListHead( &(_advhdr)->FilterContexts ); \
6503 if ((_fmutx) != NULL) { \
6504 (_advhdr)->FastMutex = (_fmutx); \
6506 *((PULONG_PTR)(&(_advhdr)->PushLock)) = 0; \
6507 /*ExInitializePushLock( &(_advhdr)->PushLock ); API Not avaliable downlevel*/\
6508 (_advhdr)->FileContextSupportPointer = NULL; \
6514 FsRtlAddBaseMcbEntry (
6518 IN LONGLONG SectorCount
6524 FsRtlAddLargeMcbEntry (
6528 IN LONGLONG SectorCount
6538 IN ULONG SectorCount
6544 FsRtlAddToTunnelCache (
6546 IN ULONGLONG DirectoryKey
,
6547 IN PUNICODE_STRING ShortName
,
6548 IN PUNICODE_STRING LongName
,
6549 IN BOOLEAN KeyByShortName
,
6550 IN ULONG DataLength
,
6554 #if (VER_PRODUCTBUILD >= 2195)
6558 FsRtlAllocateFileLock (
6559 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL
,
6560 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
6563 #endif /* (VER_PRODUCTBUILD >= 2195) */
6569 IN POOL_TYPE PoolType
,
6570 IN ULONG NumberOfBytes
6576 FsRtlAllocatePoolWithQuota (
6577 IN POOL_TYPE PoolType
,
6578 IN ULONG NumberOfBytes
6584 FsRtlAllocatePoolWithQuotaTag (
6585 IN POOL_TYPE PoolType
,
6586 IN ULONG NumberOfBytes
,
6593 FsRtlAllocatePoolWithTag (
6594 IN POOL_TYPE PoolType
,
6595 IN ULONG NumberOfBytes
,
6602 FsRtlAreNamesEqual (
6603 IN PCUNICODE_STRING Name1
,
6604 IN PCUNICODE_STRING Name2
,
6605 IN BOOLEAN IgnoreCase
,
6606 IN PCWCH UpcaseTable OPTIONAL
6609 #define FsRtlAreThereCurrentFileLocks(FL) ( \
6610 ((FL)->FastIoIsQuestionable) \
6614 FsRtlCheckLockForReadAccess:
6616 All this really does is pick out the lock parameters from the irp (io stack
6617 location?), get IoGetRequestorProcess, and pass values on to
6618 FsRtlFastCheckLockForRead.
6623 FsRtlCheckLockForReadAccess (
6624 IN PFILE_LOCK FileLock
,
6629 FsRtlCheckLockForWriteAccess:
6631 All this really does is pick out the lock parameters from the irp (io stack
6632 location?), get IoGetRequestorProcess, and pass values on to
6633 FsRtlFastCheckLockForWrite.
6638 FsRtlCheckLockForWriteAccess (
6639 IN PFILE_LOCK FileLock
,
6645 (NTAPI
*POPLOCK_WAIT_COMPLETE_ROUTINE
) (
6652 (NTAPI
*POPLOCK_FS_PREPOST_IRP
) (
6664 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL
,
6665 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL
6672 IN PFILE_OBJECT FileObject
,
6673 IN PLARGE_INTEGER FileOffset
,
6678 OUT PIO_STATUS_BLOCK IoStatus
,
6679 IN PDEVICE_OBJECT DeviceObject
6686 IN PFILE_OBJECT FileObject
,
6687 IN PLARGE_INTEGER FileOffset
,
6692 OUT PIO_STATUS_BLOCK IoStatus
,
6693 IN PDEVICE_OBJECT DeviceObject
6699 FsRtlCurrentBatchOplock (
6706 FsRtlDeleteKeyFromTunnelCache (
6708 IN ULONGLONG DirectoryKey
6714 FsRtlDeleteTunnelCache (
6721 FsRtlDeregisterUncProvider (
6729 IN ANSI_STRING Name
,
6730 OUT PANSI_STRING FirstPart
,
6731 OUT PANSI_STRING RemainingPart
6738 IN UNICODE_STRING Name
,
6739 OUT PUNICODE_STRING FirstPart
,
6740 OUT PUNICODE_STRING RemainingPart
6746 FsRtlDoesDbcsContainWildCards (
6747 IN PANSI_STRING Name
6753 FsRtlDoesNameContainWildCards (
6754 IN PUNICODE_STRING Name
6760 FsRtlIsFatDbcsLegal (
6761 IN ANSI_STRING DbcsName
,
6762 IN BOOLEAN WildCardsPermissible
,
6763 IN BOOLEAN PathNamePermissible
,
6764 IN BOOLEAN LeadingBackslashPermissible
6768 #define FsRtlCompleteRequest(IRP,STATUS) { \
6769 (IRP)->IoStatus.Status = (STATUS); \
6770 IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
6773 #define FsRtlEnterFileSystem KeEnterCriticalRegion
6775 #define FsRtlExitFileSystem KeLeaveCriticalRegion
6780 FsRtlFastCheckLockForRead (
6781 IN PFILE_LOCK FileLock
,
6782 IN PLARGE_INTEGER FileOffset
,
6783 IN PLARGE_INTEGER Length
,
6785 IN PFILE_OBJECT FileObject
,
6792 FsRtlFastCheckLockForWrite (
6793 IN PFILE_LOCK FileLock
,
6794 IN PLARGE_INTEGER FileOffset
,
6795 IN PLARGE_INTEGER Length
,
6797 IN PFILE_OBJECT FileObject
,
6801 #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
6802 FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
6808 FsRtlFastUnlockAll (
6809 IN PFILE_LOCK FileLock
,
6810 IN PFILE_OBJECT FileObject
,
6811 IN PEPROCESS Process
,
6812 IN PVOID Context OPTIONAL
6814 /* ret: STATUS_RANGE_NOT_LOCKED */
6819 FsRtlFastUnlockAllByKey (
6820 IN PFILE_LOCK FileLock
,
6821 IN PFILE_OBJECT FileObject
,
6822 IN PEPROCESS Process
,
6824 IN PVOID Context OPTIONAL
6826 /* ret: STATUS_RANGE_NOT_LOCKED */
6831 FsRtlFastUnlockSingle (
6832 IN PFILE_LOCK FileLock
,
6833 IN PFILE_OBJECT FileObject
,
6834 IN PLARGE_INTEGER FileOffset
,
6835 IN PLARGE_INTEGER Length
,
6836 IN PEPROCESS Process
,
6838 IN PVOID Context OPTIONAL
,
6839 IN BOOLEAN AlreadySynchronized
6841 /* ret: STATUS_RANGE_NOT_LOCKED */
6846 FsRtlFindInTunnelCache (
6848 IN ULONGLONG DirectoryKey
,
6849 IN PUNICODE_STRING Name
,
6850 OUT PUNICODE_STRING ShortName
,
6851 OUT PUNICODE_STRING LongName
,
6852 IN OUT PULONG DataLength
,
6856 #if (VER_PRODUCTBUILD >= 2195)
6862 IN PFILE_LOCK FileLock
6865 #endif /* (VER_PRODUCTBUILD >= 2195) */
6871 IN PFILE_OBJECT FileObject
,
6872 IN OUT PLARGE_INTEGER FileSize
6878 FsRtlGetNextBaseMcbEntry (
6883 OUT PLONGLONG SectorCount
6887 FsRtlGetNextFileLock:
6889 ret: NULL if no more locks
6892 FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
6893 FileLock->LastReturnedLock as storage.
6894 LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
6895 list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
6896 calls with Restart = FALSE.
6901 FsRtlGetNextFileLock (
6902 IN PFILE_LOCK FileLock
,
6909 FsRtlGetNextLargeMcbEntry (
6914 OUT PLONGLONG SectorCount
6920 FsRtlGetNextMcbEntry (
6925 OUT PULONG SectorCount
6928 #define FsRtlGetPerStreamContextPointer(FO) ( \
6929 (PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext \
6935 FsRtlInitializeBaseMcb (
6937 IN POOL_TYPE PoolType
6943 FsRtlInitializeFileLock (
6944 IN PFILE_LOCK FileLock
,
6945 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL
,
6946 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
6952 FsRtlInitializeLargeMcb (
6954 IN POOL_TYPE PoolType
6960 FsRtlInitializeMcb (
6962 IN POOL_TYPE PoolType
6968 FsRtlInitializeOplock (
6969 IN OUT POPLOCK Oplock
6975 FsRtlInitializeTunnelCache (
6979 #define FsRtlInitPerStreamContext(PSC, O, I, FC) ( \
6980 (PSC)->OwnerId = (O), \
6981 (PSC)->InstanceId = (I), \
6982 (PSC)->FreeCallback = (FC) \
6988 FsRtlInsertPerStreamContext (
6989 IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext
,
6990 IN PFSRTL_PER_STREAM_CONTEXT Ptr
6993 #define FsRtlIsAnsiCharacterLegalFat(C, WILD) ( \
6994 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_FAT_LEGAL) | \
6995 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
6998 #define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) ( \
6999 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) | \
7000 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7003 #define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) ( \
7004 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) | \
7005 ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
7008 #define FsRtlIsAnsiCharacterWild(C) ( \
7009 FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \
7015 FsRtlIsFatDbcsLegal (
7016 IN ANSI_STRING DbcsName
,
7017 IN BOOLEAN WildCardsPermissible
,
7018 IN BOOLEAN PathNamePermissible
,
7019 IN BOOLEAN LeadingBackslashPermissible
7025 FsRtlIsHpfsDbcsLegal (
7026 IN ANSI_STRING DbcsName
,
7027 IN BOOLEAN WildCardsPermissible
,
7028 IN BOOLEAN PathNamePermissible
,
7029 IN BOOLEAN LeadingBackslashPermissible
7035 FsRtlIsNameInExpression (
7036 IN PUNICODE_STRING Expression
,
7037 IN PUNICODE_STRING Name
,
7038 IN BOOLEAN IgnoreCase
,
7039 IN PWCHAR UpcaseTable OPTIONAL
7045 FsRtlIsNtstatusExpected (
7046 IN NTSTATUS Ntstatus
7049 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
7051 extern PUSHORT NlsOemLeadByteInfo
;
7053 #define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \
7054 (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \
7055 (NLS_MB_CODE_PAGE_TAG && \
7056 (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \
7059 #define FsRtlIsUnicodeCharacterWild(C) ( \
7062 FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER )) \
7068 FsRtlLookupBaseMcbEntry (
7071 OUT PLONGLONG Lbn OPTIONAL
,
7072 OUT PLONGLONG SectorCountFromLbn OPTIONAL
,
7073 OUT PLONGLONG StartingLbn OPTIONAL
,
7074 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL
,
7075 OUT PULONG Index OPTIONAL
7081 FsRtlLookupLargeMcbEntry (
7084 OUT PLONGLONG Lbn OPTIONAL
,
7085 OUT PLONGLONG SectorCountFromLbn OPTIONAL
,
7086 OUT PLONGLONG StartingLbn OPTIONAL
,
7087 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL
,
7088 OUT PULONG Index OPTIONAL
7094 FsRtlLookupLastBaseMcbEntry (
7103 FsRtlLookupLastLargeMcbEntry (
7112 FsRtlLookupLastMcbEntry (
7121 FsRtlLookupLastBaseMcbEntryAndIndex (
7122 IN PBASE_MCB OpaqueMcb
,
7123 IN OUT PLONGLONG LargeVbn
,
7124 IN OUT PLONGLONG LargeLbn
,
7131 FsRtlLookupLastLargeMcbEntryAndIndex (
7132 IN PLARGE_MCB OpaqueMcb
,
7133 OUT PLONGLONG LargeVbn
,
7134 OUT PLONGLONG LargeLbn
,
7141 FsRtlLookupMcbEntry (
7145 OUT PULONG SectorCount OPTIONAL
,
7150 PFSRTL_PER_STREAM_CONTEXT
7152 FsRtlLookupPerStreamContextInternal (
7153 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext
,
7154 IN PVOID OwnerId OPTIONAL
,
7155 IN PVOID InstanceId OPTIONAL
7162 IN PFILE_OBJECT FileObject
,
7163 IN PLARGE_INTEGER FileOffset
,
7167 OUT PIO_STATUS_BLOCK IoStatus
,
7168 IN PDEVICE_OBJECT DeviceObject
7174 FsRtlMdlReadComplete (
7175 IN PFILE_OBJECT FileObject
,
7182 FsRtlMdlReadCompleteDev (
7183 IN PFILE_OBJECT FileObject
,
7185 IN PDEVICE_OBJECT DeviceObject
7191 FsRtlPrepareMdlWriteDev (
7192 IN PFILE_OBJECT FileObject
,
7193 IN PLARGE_INTEGER FileOffset
,
7197 OUT PIO_STATUS_BLOCK IoStatus
,
7198 IN PDEVICE_OBJECT DeviceObject
7204 FsRtlMdlWriteComplete (
7205 IN PFILE_OBJECT FileObject
,
7206 IN PLARGE_INTEGER FileOffset
,
7213 FsRtlMdlWriteCompleteDev (
7214 IN PFILE_OBJECT FileObject
,
7215 IN PLARGE_INTEGER FileOffset
,
7217 IN PDEVICE_OBJECT DeviceObject
7223 FsRtlNormalizeNtstatus (
7224 IN NTSTATUS Exception
,
7225 IN NTSTATUS GenericException
7231 FsRtlNotifyChangeDirectory (
7232 IN PNOTIFY_SYNC NotifySync
,
7234 IN PSTRING FullDirectoryName
,
7235 IN PLIST_ENTRY NotifyList
,
7236 IN BOOLEAN WatchTree
,
7237 IN ULONG CompletionFilter
,
7244 FsRtlNotifyCleanup (
7245 IN PNOTIFY_SYNC NotifySync
,
7246 IN PLIST_ENTRY NotifyList
,
7250 typedef BOOLEAN (NTAPI
*PCHECK_FOR_TRAVERSE_ACCESS
) (
7251 IN PVOID NotifyContext
,
7252 IN PVOID TargetContext
,
7253 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
7259 FsRtlNotifyFilterChangeDirectory (
7260 IN PNOTIFY_SYNC NotifySync
,
7261 IN PLIST_ENTRY NotifyList
,
7263 IN PSTRING FullDirectoryName
,
7264 IN BOOLEAN WatchTree
,
7265 IN BOOLEAN IgnoreBuffer
,
7266 IN ULONG CompletionFilter
,
7268 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL
,
7269 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
,
7270 IN PFILTER_REPORT_CHANGE FilterCallback OPTIONAL
);
7275 FsRtlNotifyFilterReportChange (
7276 IN PNOTIFY_SYNC NotifySync
,
7277 IN PLIST_ENTRY NotifyList
,
7278 IN PSTRING FullTargetName
,
7279 IN USHORT TargetNameOffset
,
7280 IN PSTRING StreamName OPTIONAL
,
7281 IN PSTRING NormalizedParentName OPTIONAL
,
7282 IN ULONG FilterMatch
,
7284 IN PVOID TargetContext
,
7285 IN PVOID FilterContext
);
7290 FsRtlNotifyFullChangeDirectory (
7291 IN PNOTIFY_SYNC NotifySync
,
7292 IN PLIST_ENTRY NotifyList
,
7294 IN PSTRING FullDirectoryName
,
7295 IN BOOLEAN WatchTree
,
7296 IN BOOLEAN IgnoreBuffer
,
7297 IN ULONG CompletionFilter
,
7299 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL
,
7300 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
7306 FsRtlNotifyFullReportChange (
7307 IN PNOTIFY_SYNC NotifySync
,
7308 IN PLIST_ENTRY NotifyList
,
7309 IN PSTRING FullTargetName
,
7310 IN USHORT TargetNameOffset
,
7311 IN PSTRING StreamName OPTIONAL
,
7312 IN PSTRING NormalizedParentName OPTIONAL
,
7313 IN ULONG FilterMatch
,
7315 IN PVOID TargetContext
7321 FsRtlNotifyInitializeSync (
7322 IN PNOTIFY_SYNC
*NotifySync
7328 FsRtlNotifyUninitializeSync (
7329 IN PNOTIFY_SYNC
*NotifySync
7332 #if (VER_PRODUCTBUILD >= 2195)
7337 FsRtlNotifyVolumeEvent (
7338 IN PFILE_OBJECT FileObject
,
7342 #endif /* (VER_PRODUCTBUILD >= 2195) */
7347 FsRtlNumberOfRunsInBaseMcb (
7354 FsRtlNumberOfRunsInLargeMcb (
7361 FsRtlNumberOfRunsInMcb (
7377 FsRtlOplockIsFastIoPossible (
7382 (NTAPI
*PFSRTL_STACK_OVERFLOW_ROUTINE
) (
7390 FsRtlPostPagingFileStackOverflow (
7393 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
7399 FsRtlPostStackOverflow (
7402 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine
7408 ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
7411 -Calls IoCompleteRequest if Irp
7412 -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
7418 IN PFILE_LOCK FileLock
,
7419 IN PFILE_OBJECT FileObject
,
7420 IN PLARGE_INTEGER FileOffset
,
7421 IN PLARGE_INTEGER Length
,
7422 IN PEPROCESS Process
,
7424 IN BOOLEAN FailImmediately
,
7425 IN BOOLEAN ExclusiveLock
,
7426 OUT PIO_STATUS_BLOCK IoStatus
,
7427 IN PIRP Irp OPTIONAL
,
7429 IN BOOLEAN AlreadySynchronized
7433 FsRtlProcessFileLock:
7436 -STATUS_INVALID_DEVICE_REQUEST
7437 -STATUS_RANGE_NOT_LOCKED from unlock routines.
7438 -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
7439 (redirected IoStatus->Status).
7442 -switch ( Irp->CurrentStackLocation->MinorFunction )
7443 lock: return FsRtlPrivateLock;
7444 unlocksingle: return FsRtlFastUnlockSingle;
7445 unlockall: return FsRtlFastUnlockAll;
7446 unlockallbykey: return FsRtlFastUnlockAllByKey;
7447 default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
7448 return STATUS_INVALID_DEVICE_REQUEST;
7450 -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
7451 -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
7456 FsRtlProcessFileLock (
7457 IN PFILE_LOCK FileLock
,
7459 IN PVOID Context OPTIONAL
7465 FsRtlRegisterUncProvider (
7466 IN OUT PHANDLE MupHandle
,
7467 IN PUNICODE_STRING RedirectorDeviceName
,
7468 IN BOOLEAN MailslotsSupported
7474 FsRtlRemoveBaseMcbEntry (
7477 IN LONGLONG SectorCount
7483 FsRtlRemoveLargeMcbEntry (
7486 IN LONGLONG SectorCount
7492 FsRtlRemoveMcbEntry (
7495 IN ULONG SectorCount
7499 PFSRTL_PER_STREAM_CONTEXT
7501 FsRtlRemovePerStreamContext (
7502 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext
,
7503 IN PVOID OwnerId OPTIONAL
,
7504 IN PVOID InstanceId OPTIONAL
7517 FsRtlResetLargeMcb (
7519 IN BOOLEAN SelfSynchronized
7534 FsRtlSplitLargeMcb (
7540 #define FsRtlSupportsPerStreamContexts(FO) ( \
7541 (BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) && \
7542 FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \
7543 FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS)) \
7549 FsRtlTruncateBaseMcb (
7557 FsRtlTruncateLargeMcb (
7573 FsRtlUninitializeBaseMcb (
7580 FsRtlUninitializeFileLock (
7581 IN PFILE_LOCK FileLock
7587 FsRtlUninitializeLargeMcb (
7594 FsRtlUninitializeMcb (
7601 FsRtlUninitializeOplock (
7602 IN OUT POPLOCK Oplock
7608 IoAttachDeviceToDeviceStackSafe(
7609 IN PDEVICE_OBJECT SourceDevice
,
7610 IN PDEVICE_OBJECT TargetDevice
,
7611 OUT PDEVICE_OBJECT
*AttachedToDeviceObject
7617 IoAcquireVpbSpinLock (
7624 IoCheckDesiredAccess (
7625 IN OUT PACCESS_MASK DesiredAccess
,
7626 IN ACCESS_MASK GrantedAccess
7632 IoCheckEaBufferValidity (
7633 IN PFILE_FULL_EA_INFORMATION EaBuffer
,
7635 OUT PULONG ErrorOffset
7641 IoCheckFunctionAccess (
7642 IN ACCESS_MASK GrantedAccess
,
7643 IN UCHAR MajorFunction
,
7644 IN UCHAR MinorFunction
,
7645 IN ULONG IoControlCode
,
7646 IN PVOID Argument1 OPTIONAL
,
7647 IN PVOID Argument2 OPTIONAL
7650 #if (VER_PRODUCTBUILD >= 2195)
7655 IoCheckQuotaBufferValidity (
7656 IN PFILE_QUOTA_INFORMATION QuotaBuffer
,
7657 IN ULONG QuotaLength
,
7658 OUT PULONG ErrorOffset
7661 #endif /* (VER_PRODUCTBUILD >= 2195) */
7666 IoCreateStreamFileObject (
7667 IN PFILE_OBJECT FileObject OPTIONAL
,
7668 IN PDEVICE_OBJECT DeviceObject OPTIONAL
7671 #if (VER_PRODUCTBUILD >= 2195)
7676 IoCreateStreamFileObjectLite (
7677 IN PFILE_OBJECT FileObject OPTIONAL
,
7678 IN PDEVICE_OBJECT DeviceObject OPTIONAL
7681 #endif /* (VER_PRODUCTBUILD >= 2195) */
7686 IoFastQueryNetworkAttributes (
7687 IN POBJECT_ATTRIBUTES ObjectAttributes
,
7688 IN ACCESS_MASK DesiredAccess
,
7689 IN ULONG OpenOptions
,
7690 OUT PIO_STATUS_BLOCK IoStatus
,
7691 OUT PFILE_NETWORK_OPEN_INFORMATION Buffer
7697 IoGetAttachedDevice (
7698 IN PDEVICE_OBJECT DeviceObject
7704 IoGetBaseFileSystemDeviceObject (
7705 IN PFILE_OBJECT FileObject
7708 #if (VER_PRODUCTBUILD >= 2600)
7713 IoGetDeviceAttachmentBaseRef (
7714 IN PDEVICE_OBJECT DeviceObject
7720 IoGetDiskDeviceObject (
7721 IN PDEVICE_OBJECT FileSystemDeviceObject
,
7722 OUT PDEVICE_OBJECT
*DiskDeviceObject
7728 IoGetLowerDeviceObject (
7729 IN PDEVICE_OBJECT DeviceObject
7732 #endif /* (VER_PRODUCTBUILD >= 2600) */
7737 IoGetRequestorProcess (
7741 #if (VER_PRODUCTBUILD >= 2195)
7746 IoGetRequestorProcessId (
7750 #endif /* (VER_PRODUCTBUILD >= 2195) */
7759 #define IoIsFileOpenedExclusively(FileObject) ( \
7761 (FileObject)->SharedRead || \
7762 (FileObject)->SharedWrite || \
7763 (FileObject)->SharedDelete \
7770 IoIsOperationSynchronous (
7781 #if (VER_PRODUCTBUILD >= 2195)
7786 IoIsValidNameGraftingBuffer (
7788 IN PREPARSE_DATA_BUFFER ReparseBuffer
7791 #endif /* (VER_PRODUCTBUILD >= 2195) */
7797 IN PFILE_OBJECT FileObject
,
7799 IN PLARGE_INTEGER Offset
,
7801 OUT PIO_STATUS_BLOCK IoStatusBlock
7807 IoQueryFileInformation (
7808 IN PFILE_OBJECT FileObject
,
7809 IN FILE_INFORMATION_CLASS FileInformationClass
,
7811 OUT PVOID FileInformation
,
7812 OUT PULONG ReturnedLength
7818 IoQueryVolumeInformation (
7819 IN PFILE_OBJECT FileObject
,
7820 IN FS_INFORMATION_CLASS FsInformationClass
,
7822 OUT PVOID FsInformation
,
7823 OUT PULONG ReturnedLength
7836 IoRegisterFileSystem (
7837 IN OUT PDEVICE_OBJECT DeviceObject
7840 #if (VER_PRODUCTBUILD >= 1381)
7842 typedef VOID (NTAPI
*PDRIVER_FS_NOTIFICATION
) (
7843 IN PDEVICE_OBJECT DeviceObject
,
7844 IN BOOLEAN DriverActive
7850 IoRegisterFsRegistrationChange (
7851 IN PDRIVER_OBJECT DriverObject
,
7852 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
7855 #endif /* (VER_PRODUCTBUILD >= 1381) */
7860 IoReleaseVpbSpinLock (
7867 IoSetDeviceToVerify (
7869 IN PDEVICE_OBJECT DeviceObject
7876 IN PFILE_OBJECT FileObject
,
7877 IN FILE_INFORMATION_CLASS FileInformationClass
,
7879 IN PVOID FileInformation
7892 IoSynchronousPageWrite (
7893 IN PFILE_OBJECT FileObject
,
7895 IN PLARGE_INTEGER FileOffset
,
7897 OUT PIO_STATUS_BLOCK IoStatusBlock
7910 IoUnregisterFileSystem (
7911 IN OUT PDEVICE_OBJECT DeviceObject
7914 #if (VER_PRODUCTBUILD >= 1381)
7919 IoUnregisterFsRegistrationChange (
7920 IN PDRIVER_OBJECT DriverObject
,
7921 IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
7924 #endif /* (VER_PRODUCTBUILD >= 1381) */
7930 IN PDEVICE_OBJECT DeviceObject
,
7931 IN BOOLEAN AllowRawMount
7937 KeAcquireQueuedSpinLock (
7938 IN KSPIN_LOCK_QUEUE_NUMBER Number
7944 KeReleaseQueuedSpinLock (
7945 IN KSPIN_LOCK_QUEUE_NUMBER Number
,
7951 KeTryToAcquireQueuedSpinLock(
7952 KSPIN_LOCK_QUEUE_NUMBER Number
,
7958 MmCanFileBeTruncated (
7959 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
7960 IN PLARGE_INTEGER NewFileSize
7966 MmFlushImageSection (
7967 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
7968 IN MMFLUSH_TYPE FlushType
7974 MmForceSectionClosed (
7975 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
7976 IN BOOLEAN DelayClose
7979 #if (VER_PRODUCTBUILD >= 1381)
7984 MmIsRecursiveIoFault (
7990 #define MmIsRecursiveIoFault() ( \
7991 (PsGetCurrentThread()->DisablePageFaultClustering) | \
7992 (PsGetCurrentThread()->ForwardClusterOnly) \
8001 MmSetAddressRangeModified (
8010 IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL
,
8011 IN POBJECT_TYPE ObjectType
,
8012 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
8013 IN KPROCESSOR_MODE AccessMode
,
8014 IN OUT PVOID ParseContext OPTIONAL
,
8015 IN ULONG ObjectSize
,
8016 IN ULONG PagedPoolCharge OPTIONAL
,
8017 IN ULONG NonPagedPoolCharge OPTIONAL
,
8024 ObGetObjectPointerCount (
8028 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8035 IN PACCESS_STATE PassedAccessState OPTIONAL
,
8036 IN ACCESS_MASK DesiredAccess OPTIONAL
,
8037 IN ULONG ObjectPointerBias
,
8038 OUT PVOID
*NewObject OPTIONAL
,
8039 OUT PHANDLE Handle OPTIONAL
);
8044 ObOpenObjectByPointer (
8046 IN ULONG HandleAttributes
,
8047 IN PACCESS_STATE PassedAccessState OPTIONAL
,
8048 IN ACCESS_MASK DesiredAccess OPTIONAL
,
8049 IN POBJECT_TYPE ObjectType OPTIONAL
,
8050 IN KPROCESSOR_MODE AccessMode
,
8051 OUT PHANDLE Handle
);
8056 ObMakeTemporaryObject (
8062 ObQueryObjectAuditingByHandle (
8064 OUT PBOOLEAN GenerateOnClose
);
8073 OUT POBJECT_NAME_INFORMATION ObjectNameInfo
,
8075 OUT PULONG ReturnLength
8081 ObReferenceObjectByName (
8082 IN PUNICODE_STRING ObjectName
,
8083 IN ULONG Attributes
,
8084 IN PACCESS_STATE PassedAccessState OPTIONAL
,
8085 IN ACCESS_MASK DesiredAccess OPTIONAL
,
8086 IN POBJECT_TYPE ObjectType
,
8087 IN KPROCESSOR_MODE AccessMode
,
8088 IN OUT PVOID ParseContext OPTIONAL
,
8095 PsAssignImpersonationToken (
8104 IN PEPROCESS Process
,
8105 IN POOL_TYPE PoolType
,
8112 PsChargeProcessPoolQuota (
8113 IN PEPROCESS Process
,
8114 IN POOL_TYPE PoolType
,
8118 #define PsDereferenceImpersonationToken(T) \
8119 {if (ARGUMENT_PRESENT(T)) { \
8120 (ObDereferenceObject((T))); \
8126 #define PsDereferencePrimaryToken(T) (ObDereferenceObject((T)))
8131 PsDisableImpersonation(
8133 IN PSE_IMPERSONATION_STATE ImpersonationState
8139 PsGetProcessExitTime (
8146 PsImpersonateClient(
8148 IN PACCESS_TOKEN Token
,
8149 IN BOOLEAN CopyOnOpen
,
8150 IN BOOLEAN EffectiveOnly
,
8151 IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
8164 PsIsThreadTerminating (
8171 PsLookupProcessByProcessId (
8172 IN HANDLE ProcessId
,
8173 OUT PEPROCESS
*Process
8179 PsLookupProcessThreadByCid (
8181 OUT PEPROCESS
*Process OPTIONAL
,
8182 OUT PETHREAD
*Thread
8188 PsLookupThreadByThreadId (
8189 IN HANDLE UniqueThreadId
,
8190 OUT PETHREAD
*Thread
8196 PsReferenceImpersonationToken (
8198 OUT PBOOLEAN CopyOnUse
,
8199 OUT PBOOLEAN EffectiveOnly
,
8200 OUT PSECURITY_IMPERSONATION_LEVEL Level
8206 PsReferencePrimaryToken (
8207 IN PEPROCESS Process
8213 PsRestoreImpersonation(
8215 IN PSE_IMPERSONATION_STATE ImpersonationState
8222 IN PEPROCESS Process
,
8223 IN POOL_TYPE PoolType
,
8237 RtlSecondsSince1970ToTime (
8238 IN ULONG SecondsSince1970
,
8239 OUT PLARGE_INTEGER Time
8245 RtlSetSaclSecurityDescriptor (
8246 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
8247 IN BOOLEAN SaclPresent
,
8249 IN BOOLEAN SaclDefaulted
8255 RtlUnicodeStringToCountedOemString (
8256 IN OUT POEM_STRING DestinationString
,
8257 IN PCUNICODE_STRING SourceString
,
8258 IN BOOLEAN AllocateDestinationString
8261 /* RTL Splay Tree Functions */
8265 RtlSplay(PRTL_SPLAY_LINKS Links
);
8270 RtlDelete(PRTL_SPLAY_LINKS Links
);
8276 PRTL_SPLAY_LINKS Links
,
8277 PRTL_SPLAY_LINKS
*Root
8283 RtlSubtreeSuccessor(PRTL_SPLAY_LINKS Links
);
8288 RtlSubtreePredecessor(PRTL_SPLAY_LINKS Links
);
8293 RtlRealSuccessor(PRTL_SPLAY_LINKS Links
);
8298 RtlRealPredecessor(PRTL_SPLAY_LINKS Links
);
8300 #define RtlIsLeftChild(Links) \
8301 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
8303 #define RtlIsRightChild(Links) \
8304 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
8306 #define RtlRightChild(Links) \
8307 ((PRTL_SPLAY_LINKS)(Links))->RightChild
8309 #define RtlIsRoot(Links) \
8310 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
8312 #define RtlLeftChild(Links) \
8313 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
8315 #define RtlParent(Links) \
8316 ((PRTL_SPLAY_LINKS)(Links))->Parent
8318 #define RtlInitializeSplayLinks(Links) \
8320 PRTL_SPLAY_LINKS _SplayLinks; \
8321 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
8322 _SplayLinks->Parent = _SplayLinks; \
8323 _SplayLinks->LeftChild = NULL; \
8324 _SplayLinks->RightChild = NULL; \
8327 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
8329 PRTL_SPLAY_LINKS _SplayParent; \
8330 PRTL_SPLAY_LINKS _SplayChild; \
8331 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
8332 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
8333 _SplayParent->LeftChild = _SplayChild; \
8334 _SplayChild->Parent = _SplayParent; \
8337 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
8339 PRTL_SPLAY_LINKS _SplayParent; \
8340 PRTL_SPLAY_LINKS _SplayChild; \
8341 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
8342 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
8343 _SplayParent->RightChild = _SplayChild; \
8344 _SplayChild->Parent = _SplayParent; \
8348 // RTL time functions
8354 SeAppendPrivileges (
8355 PACCESS_STATE AccessState
,
8356 PPRIVILEGE_SET Privileges
8362 SeAuditingFileEvents (
8363 IN BOOLEAN AccessGranted
,
8364 IN PSECURITY_DESCRIPTOR SecurityDescriptor
8370 SeAuditingFileOrGlobalEvents (
8371 IN BOOLEAN AccessGranted
,
8372 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
8373 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
8379 SeCaptureSubjectContext (
8380 OUT PSECURITY_SUBJECT_CONTEXT SubjectContext
8386 SeCreateClientSecurity (
8388 IN PSECURITY_QUALITY_OF_SERVICE QualityOfService
,
8389 IN BOOLEAN RemoteClient
,
8390 OUT PSECURITY_CLIENT_CONTEXT ClientContext
8393 #if (VER_PRODUCTBUILD >= 2195)
8398 SeCreateClientSecurityFromSubjectContext (
8399 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
8400 IN PSECURITY_QUALITY_OF_SERVICE QualityOfService
,
8401 IN BOOLEAN ServerIsRemote
,
8402 OUT PSECURITY_CLIENT_CONTEXT ClientContext
8405 #endif /* (VER_PRODUCTBUILD >= 2195) */
8408 #define SeLengthSid( Sid ) \
8409 (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
8411 #define SeDeleteClientSecurity(C) { \
8412 if (SeTokenType((C)->ClientToken) == TokenPrimary) { \
8413 PsDereferencePrimaryToken( (C)->ClientToken ); \
8415 PsDereferenceImpersonationToken( (C)->ClientToken ); \
8422 SeDeleteObjectAuditAlarm (
8427 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
8433 IN PPRIVILEGE_SET Privileges
8439 SeImpersonateClient (
8440 IN PSECURITY_CLIENT_CONTEXT ClientContext
,
8441 IN PETHREAD ServerThread OPTIONAL
8444 #if (VER_PRODUCTBUILD >= 2195)
8449 SeImpersonateClientEx (
8450 IN PSECURITY_CLIENT_CONTEXT ClientContext
,
8451 IN PETHREAD ServerThread OPTIONAL
8454 #endif /* (VER_PRODUCTBUILD >= 2195) */
8459 SeLockSubjectContext (
8460 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
8466 SeMarkLogonSessionForTerminationNotification (
8473 SeOpenObjectAuditAlarm (
8474 IN PUNICODE_STRING ObjectTypeName
,
8475 IN PVOID Object OPTIONAL
,
8476 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL
,
8477 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
8478 IN PACCESS_STATE AccessState
,
8479 IN BOOLEAN ObjectCreated
,
8480 IN BOOLEAN AccessGranted
,
8481 IN KPROCESSOR_MODE AccessMode
,
8482 OUT PBOOLEAN GenerateOnClose
8488 SeOpenObjectForDeleteAuditAlarm (
8489 IN PUNICODE_STRING ObjectTypeName
,
8490 IN PVOID Object OPTIONAL
,
8491 IN PUNICODE_STRING AbsoluteObjectName OPTIONAL
,
8492 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
8493 IN PACCESS_STATE AccessState
,
8494 IN BOOLEAN ObjectCreated
,
8495 IN BOOLEAN AccessGranted
,
8496 IN KPROCESSOR_MODE AccessMode
,
8497 OUT PBOOLEAN GenerateOnClose
8504 IN OUT PPRIVILEGE_SET RequiredPrivileges
,
8505 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
,
8506 IN KPROCESSOR_MODE AccessMode
8512 SeQueryAuthenticationIdToken (
8513 IN PACCESS_TOKEN Token
,
8517 #if (VER_PRODUCTBUILD >= 2195)
8522 SeQueryInformationToken (
8523 IN PACCESS_TOKEN Token
,
8524 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
8525 OUT PVOID
*TokenInformation
8528 #endif /* (VER_PRODUCTBUILD >= 2195) */
8533 SeQuerySecurityDescriptorInfo (
8534 IN PSECURITY_INFORMATION SecurityInformation
,
8535 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
8536 IN OUT PULONG Length
,
8537 IN PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
8540 #if (VER_PRODUCTBUILD >= 2195)
8545 SeQuerySessionIdToken (
8546 IN PACCESS_TOKEN Token
,
8550 #endif /* (VER_PRODUCTBUILD >= 2195) */
8552 #define SeQuerySubjectContextToken( SubjectContext ) \
8553 ( ARGUMENT_PRESENT( \
8554 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken \
8556 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken : \
8557 ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
8559 typedef NTSTATUS (NTAPI
*PSE_LOGON_SESSION_TERMINATED_ROUTINE
) (
8566 SeRegisterLogonSessionTerminatedRoutine (
8567 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
8573 SeReleaseSubjectContext (
8574 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
8580 SeSetAccessStateGenericMapping (
8581 PACCESS_STATE AccessState
,
8582 PGENERIC_MAPPING GenericMapping
8588 SeSetSecurityDescriptorInfo (
8589 IN PVOID Object OPTIONAL
,
8590 IN PSECURITY_INFORMATION SecurityInformation
,
8591 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
8592 IN OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
8593 IN POOL_TYPE PoolType
,
8594 IN PGENERIC_MAPPING GenericMapping
8597 #if (VER_PRODUCTBUILD >= 2195)
8602 SeSetSecurityDescriptorInfoEx (
8603 IN PVOID Object OPTIONAL
,
8604 IN PSECURITY_INFORMATION SecurityInformation
,
8605 IN PSECURITY_DESCRIPTOR ModificationDescriptor
,
8606 IN OUT PSECURITY_DESCRIPTOR
*ObjectsSecurityDescriptor
,
8607 IN ULONG AutoInheritFlags
,
8608 IN POOL_TYPE PoolType
,
8609 IN PGENERIC_MAPPING GenericMapping
8616 IN PACCESS_TOKEN Token
8622 SeTokenIsRestricted (
8623 IN PACCESS_TOKEN Token
8629 SeLocateProcessImageName(
8630 IN PEPROCESS Process
,
8631 OUT PUNICODE_STRING
*pImageFileName
8634 #endif /* (VER_PRODUCTBUILD >= 2195) */
8640 IN PACCESS_TOKEN Token
8646 SeUnlockSubjectContext (
8647 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
8653 SeUnregisterLogonSessionTerminatedRoutine (
8654 IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
8657 #if (VER_PRODUCTBUILD >= 2195)
8662 ZwAdjustPrivilegesToken (
8663 IN HANDLE TokenHandle
,
8664 IN BOOLEAN DisableAllPrivileges
,
8665 IN PTOKEN_PRIVILEGES NewState
,
8666 IN ULONG BufferLength
,
8667 OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL
,
8668 OUT PULONG ReturnLength
8671 #endif /* (VER_PRODUCTBUILD >= 2195) */
8677 IN HANDLE ThreadHandle
8683 ZwAllocateVirtualMemory (
8684 IN HANDLE ProcessHandle
,
8685 IN OUT PVOID
*BaseAddress
,
8686 IN ULONG_PTR ZeroBits
,
8687 IN OUT PSIZE_T RegionSize
,
8688 IN ULONG AllocationType
,
8695 ZwAccessCheckAndAuditAlarm (
8696 IN PUNICODE_STRING SubsystemName
,
8698 IN PUNICODE_STRING ObjectTypeName
,
8699 IN PUNICODE_STRING ObjectName
,
8700 IN PSECURITY_DESCRIPTOR SecurityDescriptor
,
8701 IN ACCESS_MASK DesiredAccess
,
8702 IN PGENERIC_MAPPING GenericMapping
,
8703 IN BOOLEAN ObjectCreation
,
8704 OUT PACCESS_MASK GrantedAccess
,
8705 OUT PBOOLEAN AccessStatus
,
8706 OUT PBOOLEAN GenerateOnClose
8709 #if (VER_PRODUCTBUILD >= 2195)
8715 IN HANDLE FileHandle
,
8716 OUT PIO_STATUS_BLOCK IoStatusBlock
8719 #endif /* (VER_PRODUCTBUILD >= 2195) */
8725 IN HANDLE EventHandle
8731 ZwCloseObjectAuditAlarm (
8732 IN PUNICODE_STRING SubsystemName
,
8734 IN BOOLEAN GenerateOnClose
8741 OUT PHANDLE SectionHandle
,
8742 IN ACCESS_MASK DesiredAccess
,
8743 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
8744 IN PLARGE_INTEGER MaximumSize OPTIONAL
,
8745 IN ULONG SectionPageProtection
,
8746 IN ULONG AllocationAttributes
,
8747 IN HANDLE FileHandle OPTIONAL
8753 ZwCreateSymbolicLinkObject (
8754 OUT PHANDLE SymbolicLinkHandle
,
8755 IN ACCESS_MASK DesiredAccess
,
8756 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8757 IN PUNICODE_STRING TargetName
8764 IN POBJECT_ATTRIBUTES ObjectAttributes
8772 IN PUNICODE_STRING Name
8776 #if (NTDDI_VERSION >= NTDDI_WIN2K)
8780 ZwDeviceIoControlFile (
8781 IN HANDLE FileHandle
,
8782 IN HANDLE Event OPTIONAL
,
8783 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8784 IN PVOID ApcContext OPTIONAL
,
8785 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8786 IN ULONG IoControlCode
,
8787 IN PVOID InputBuffer OPTIONAL
,
8788 IN ULONG InputBufferLength
,
8789 OUT PVOID OutputBuffer OPTIONAL
,
8790 IN ULONG OutputBufferLength
);
8797 IN PUNICODE_STRING String
8804 IN HANDLE SourceProcessHandle
,
8805 IN HANDLE SourceHandle
,
8806 IN HANDLE TargetProcessHandle OPTIONAL
,
8807 OUT PHANDLE TargetHandle OPTIONAL
,
8808 IN ACCESS_MASK DesiredAccess
,
8809 IN ULONG HandleAttributes
,
8817 IN HANDLE ExistingTokenHandle
,
8818 IN ACCESS_MASK DesiredAccess
,
8819 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8820 IN BOOLEAN EffectiveOnly
,
8821 IN TOKEN_TYPE TokenType
,
8822 OUT PHANDLE NewTokenHandle
8828 ZwFlushInstructionCache (
8829 IN HANDLE ProcessHandle
,
8830 IN PVOID BaseAddress OPTIONAL
,
8838 IN HANDLE FileHandle
,
8839 OUT PIO_STATUS_BLOCK IoStatusBlock
8842 #if (VER_PRODUCTBUILD >= 2195)
8847 ZwFlushVirtualMemory (
8848 IN HANDLE ProcessHandle
,
8849 IN OUT PVOID
*BaseAddress
,
8850 IN OUT PULONG FlushSize
,
8851 OUT PIO_STATUS_BLOCK IoStatusBlock
8854 #endif /* (VER_PRODUCTBUILD >= 2195) */
8859 ZwFreeVirtualMemory (
8860 IN HANDLE ProcessHandle
,
8861 IN OUT PVOID
*BaseAddress
,
8862 IN OUT PSIZE_T RegionSize
,
8870 IN HANDLE FileHandle
,
8871 IN HANDLE Event OPTIONAL
,
8872 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8873 IN PVOID ApcContext OPTIONAL
,
8874 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8875 IN ULONG FsControlCode
,
8876 IN PVOID InputBuffer OPTIONAL
,
8877 IN ULONG InputBufferLength
,
8878 OUT PVOID OutputBuffer OPTIONAL
,
8879 IN ULONG OutputBufferLength
8882 #if (VER_PRODUCTBUILD >= 2195)
8887 ZwInitiatePowerAction (
8888 IN POWER_ACTION SystemAction
,
8889 IN SYSTEM_POWER_STATE MinSystemState
,
8891 IN BOOLEAN Asynchronous
8894 #endif /* (VER_PRODUCTBUILD >= 2195) */
8900 /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
8901 IN PUNICODE_STRING RegistryPath
8908 IN POBJECT_ATTRIBUTES KeyObjectAttributes
,
8909 IN POBJECT_ATTRIBUTES FileObjectAttributes
8916 IN HANDLE KeyHandle
,
8917 IN HANDLE EventHandle OPTIONAL
,
8918 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
8919 IN PVOID ApcContext OPTIONAL
,
8920 OUT PIO_STATUS_BLOCK IoStatusBlock
,
8921 IN ULONG NotifyFilter
,
8922 IN BOOLEAN WatchSubtree
,
8924 IN ULONG BufferLength
,
8925 IN BOOLEAN Asynchronous
8931 ZwOpenDirectoryObject (
8932 OUT PHANDLE DirectoryHandle
,
8933 IN ACCESS_MASK DesiredAccess
,
8934 IN POBJECT_ATTRIBUTES ObjectAttributes
8941 OUT PHANDLE ProcessHandle
,
8942 IN ACCESS_MASK DesiredAccess
,
8943 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8944 IN PCLIENT_ID ClientId OPTIONAL
8950 ZwOpenProcessToken (
8951 IN HANDLE ProcessHandle
,
8952 IN ACCESS_MASK DesiredAccess
,
8953 OUT PHANDLE TokenHandle
8960 OUT PHANDLE ThreadHandle
,
8961 IN ACCESS_MASK DesiredAccess
,
8962 IN POBJECT_ATTRIBUTES ObjectAttributes
,
8963 IN PCLIENT_ID ClientId
8970 IN HANDLE ThreadHandle
,
8971 IN ACCESS_MASK DesiredAccess
,
8972 IN BOOLEAN OpenAsSelf
,
8973 OUT PHANDLE TokenHandle
8976 #if (VER_PRODUCTBUILD >= 2195)
8981 ZwPowerInformation (
8982 IN POWER_INFORMATION_LEVEL PowerInformationLevel
,
8983 IN PVOID InputBuffer OPTIONAL
,
8984 IN ULONG InputBufferLength
,
8985 OUT PVOID OutputBuffer OPTIONAL
,
8986 IN ULONG OutputBufferLength
8989 #endif /* (VER_PRODUCTBUILD >= 2195) */
8995 IN HANDLE EventHandle
,
8996 OUT PLONG PreviousState OPTIONAL
9002 ZwQueryDefaultLocale (
9003 IN BOOLEAN ThreadOrSystem
,
9010 ZwQueryDirectoryFile (
9011 IN HANDLE FileHandle
,
9012 IN HANDLE Event OPTIONAL
,
9013 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
9014 IN PVOID ApcContext OPTIONAL
,
9015 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9016 OUT PVOID FileInformation
,
9018 IN FILE_INFORMATION_CLASS FileInformationClass
,
9019 IN BOOLEAN ReturnSingleEntry
,
9020 IN PUNICODE_STRING FileName OPTIONAL
,
9021 IN BOOLEAN RestartScan
9024 #if (VER_PRODUCTBUILD >= 2195)
9029 ZwQueryDirectoryObject (
9030 IN HANDLE DirectoryHandle
,
9033 IN BOOLEAN ReturnSingleEntry
,
9034 IN BOOLEAN RestartScan
,
9035 IN OUT PULONG Context
,
9036 OUT PULONG ReturnLength OPTIONAL
9043 IN HANDLE FileHandle
,
9044 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9047 IN BOOLEAN ReturnSingleEntry
,
9048 IN PVOID EaList OPTIONAL
,
9049 IN ULONG EaListLength
,
9050 IN PULONG EaIndex OPTIONAL
,
9051 IN BOOLEAN RestartScan
9054 #endif /* (VER_PRODUCTBUILD >= 2195) */
9059 ZwQueryInformationProcess (
9060 IN HANDLE ProcessHandle
,
9061 IN PROCESSINFOCLASS ProcessInformationClass
,
9062 OUT PVOID ProcessInformation
,
9063 IN ULONG ProcessInformationLength
,
9064 OUT PULONG ReturnLength OPTIONAL
9070 ZwQueryInformationToken (
9071 IN HANDLE TokenHandle
,
9072 IN TOKEN_INFORMATION_CLASS TokenInformationClass
,
9073 OUT PVOID TokenInformation
,
9075 OUT PULONG ResultLength
9081 ZwQuerySecurityObject (
9082 IN HANDLE FileHandle
,
9083 IN SECURITY_INFORMATION SecurityInformation
,
9084 OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
9086 OUT PULONG ResultLength
9092 ZwQueryVolumeInformationFile (
9093 IN HANDLE FileHandle
,
9094 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9095 OUT PVOID FsInformation
,
9097 IN FS_INFORMATION_CLASS FsInformationClass
9104 IN POBJECT_ATTRIBUTES NewFileObjectAttributes
,
9105 IN HANDLE KeyHandle
,
9106 IN POBJECT_ATTRIBUTES OldFileObjectAttributes
9113 IN HANDLE EventHandle
,
9114 OUT PLONG PreviousState OPTIONAL
9117 #if (VER_PRODUCTBUILD >= 2195)
9123 IN HANDLE KeyHandle
,
9124 IN HANDLE FileHandle
,
9128 #endif /* (VER_PRODUCTBUILD >= 2195) */
9134 IN HANDLE KeyHandle
,
9135 IN HANDLE FileHandle
9141 ZwSetDefaultLocale (
9142 IN BOOLEAN ThreadOrSystem
,
9146 #if (VER_PRODUCTBUILD >= 2195)
9151 ZwSetDefaultUILanguage (
9152 IN LANGID LanguageId
9159 IN HANDLE FileHandle
,
9160 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9165 #endif /* (VER_PRODUCTBUILD >= 2195) */
9171 IN HANDLE EventHandle
,
9172 OUT PLONG PreviousState OPTIONAL
9178 ZwSetInformationProcess (
9179 IN HANDLE ProcessHandle
,
9180 IN PROCESSINFOCLASS ProcessInformationClass
,
9181 IN PVOID ProcessInformation
,
9182 IN ULONG ProcessInformationLength
9185 #if (VER_PRODUCTBUILD >= 2195)
9190 ZwSetSecurityObject (
9192 IN SECURITY_INFORMATION SecurityInformation
,
9193 IN PSECURITY_DESCRIPTOR SecurityDescriptor
9196 #endif /* (VER_PRODUCTBUILD >= 2195) */
9202 IN PLARGE_INTEGER NewTime
,
9203 OUT PLARGE_INTEGER OldTime OPTIONAL
9206 #if (VER_PRODUCTBUILD >= 2195)
9211 ZwSetVolumeInformationFile (
9212 IN HANDLE FileHandle
,
9213 OUT PIO_STATUS_BLOCK IoStatusBlock
,
9214 IN PVOID FsInformation
,
9216 IN FS_INFORMATION_CLASS FsInformationClass
9219 #endif /* (VER_PRODUCTBUILD >= 2195) */
9224 ZwTerminateProcess (
9225 IN HANDLE ProcessHandle OPTIONAL
,
9226 IN NTSTATUS ExitStatus
9233 /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
9234 IN PUNICODE_STRING RegistryPath
9241 IN POBJECT_ATTRIBUTES KeyObjectAttributes
9244 #if (NTDDI_VERSION >= NTDDI_WIN2K)
9248 ZwWaitForSingleObject (
9250 IN BOOLEAN Alertable
,
9251 IN PLARGE_INTEGER Timeout OPTIONAL
);
9257 ZwWaitForMultipleObjects (
9258 IN ULONG HandleCount
,
9260 IN WAIT_TYPE WaitType
,
9261 IN BOOLEAN Alertable
,
9262 IN PLARGE_INTEGER Timeout OPTIONAL