1 /* 2 * ntifs.h 3 * 4 * Windows NT Filesystem Driver Developer Kit 5 * 6 * This file is part of the ReactOS DDK package. 7 * 8 * Contributors: 9 * Amine Khaldi 10 * Timo Kreuzer (timo.kreuzer (at) reactos.org) 11 * 12 * THIS SOFTWARE IS NOT COPYRIGHTED 13 * 14 * This source code is offered for use in the public domain. You may 15 * use, modify or distribute it freely. 16 * 17 * This code is distributed in the hope that it will be useful but 18 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 19 * DISCLAIMED. This includes but is not limited to warranties of 20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 21 * 22 */ 23 24 #pragma once 25 26 #define _NTIFS_INCLUDED_ 27 #define _GNU_NTIFS_ 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 /* Dependencies */ 34 #include <ntddk.h> 35 #include <excpt.h> 36 #include <ntdef.h> 37 #include <ntnls.h> 38 #include <ntstatus.h> 39 #include <bugcodes.h> 40 #include <ntiologc.h> 41 42 43 #ifndef FlagOn 44 #define FlagOn(_F,_SF) ((_F) & (_SF)) 45 #endif 46 47 #ifndef BooleanFlagOn 48 #define BooleanFlagOn(F,SF) ((BOOLEAN)(((F) & (SF)) != 0)) 49 #endif 50 51 #ifndef SetFlag 52 #define SetFlag(_F,_SF) ((_F) |= (_SF)) 53 #endif 54 55 #ifndef ClearFlag 56 #define ClearFlag(_F,_SF) ((_F) &= ~(_SF)) 57 #endif 58 59 typedef UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING; 60 typedef STRING LSA_STRING, *PLSA_STRING; 61 typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES; 62 63 /****************************************************************************** 64 * Security Manager Types * 65 ******************************************************************************/ 66 #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED 67 #define SID_IDENTIFIER_AUTHORITY_DEFINED 68 typedef struct _SID_IDENTIFIER_AUTHORITY { 69 UCHAR Value[6]; 70 } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY; 71 #endif 72 73 #ifndef SID_DEFINED 74 #define SID_DEFINED 75 typedef struct _SID { 76 UCHAR Revision; 77 UCHAR SubAuthorityCount; 78 SID_IDENTIFIER_AUTHORITY IdentifierAuthority; 79 ULONG SubAuthority[ANYSIZE_ARRAY]; 80 } SID, *PISID; 81 #endif 82 83 #define SID_REVISION 1 84 #define SID_MAX_SUB_AUTHORITIES 15 85 #define SID_RECOMMENDED_SUB_AUTHORITIES 1 86 87 typedef enum _SID_NAME_USE { 88 SidTypeUser = 1, 89 SidTypeGroup, 90 SidTypeDomain, 91 SidTypeAlias, 92 SidTypeWellKnownGroup, 93 SidTypeDeletedAccount, 94 SidTypeInvalid, 95 SidTypeUnknown, 96 SidTypeComputer, 97 SidTypeLabel 98 } SID_NAME_USE, *PSID_NAME_USE; 99 100 typedef struct _SID_AND_ATTRIBUTES { 101 PSID Sid; 102 ULONG Attributes; 103 } SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES; 104 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY]; 105 typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY; 106 107 #define SID_HASH_SIZE 32 108 typedef ULONG_PTR SID_HASH_ENTRY, *PSID_HASH_ENTRY; 109 110 typedef struct _SID_AND_ATTRIBUTES_HASH { 111 ULONG SidCount; 112 PSID_AND_ATTRIBUTES SidAttr; 113 SID_HASH_ENTRY Hash[SID_HASH_SIZE]; 114 } SID_AND_ATTRIBUTES_HASH, *PSID_AND_ATTRIBUTES_HASH; 115 116 /* Universal well-known SIDs */ 117 118 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0} 119 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1} 120 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2} 121 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3} 122 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4} 123 #define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9} 124 125 #define SECURITY_NULL_RID (0x00000000L) 126 #define SECURITY_WORLD_RID (0x00000000L) 127 #define SECURITY_LOCAL_RID (0x00000000L) 128 #define SECURITY_LOCAL_LOGON_RID (0x00000001L) 129 130 #define SECURITY_CREATOR_OWNER_RID (0x00000000L) 131 #define SECURITY_CREATOR_GROUP_RID (0x00000001L) 132 #define SECURITY_CREATOR_OWNER_SERVER_RID (0x00000002L) 133 #define SECURITY_CREATOR_GROUP_SERVER_RID (0x00000003L) 134 #define SECURITY_CREATOR_OWNER_RIGHTS_RID (0x00000004L) 135 136 /* NT well-known SIDs */ 137 138 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5} 139 140 #define SECURITY_DIALUP_RID (0x00000001L) 141 #define SECURITY_NETWORK_RID (0x00000002L) 142 #define SECURITY_BATCH_RID (0x00000003L) 143 #define SECURITY_INTERACTIVE_RID (0x00000004L) 144 #define SECURITY_LOGON_IDS_RID (0x00000005L) 145 #define SECURITY_LOGON_IDS_RID_COUNT (3L) 146 #define SECURITY_SERVICE_RID (0x00000006L) 147 #define SECURITY_ANONYMOUS_LOGON_RID (0x00000007L) 148 #define SECURITY_PROXY_RID (0x00000008L) 149 #define SECURITY_ENTERPRISE_CONTROLLERS_RID (0x00000009L) 150 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID 151 #define SECURITY_PRINCIPAL_SELF_RID (0x0000000AL) 152 #define SECURITY_AUTHENTICATED_USER_RID (0x0000000BL) 153 #define SECURITY_RESTRICTED_CODE_RID (0x0000000CL) 154 #define SECURITY_TERMINAL_SERVER_RID (0x0000000DL) 155 #define SECURITY_REMOTE_LOGON_RID (0x0000000EL) 156 #define SECURITY_THIS_ORGANIZATION_RID (0x0000000FL) 157 #define SECURITY_IUSER_RID (0x00000011L) 158 #define SECURITY_LOCAL_SYSTEM_RID (0x00000012L) 159 #define SECURITY_LOCAL_SERVICE_RID (0x00000013L) 160 #define SECURITY_NETWORK_SERVICE_RID (0x00000014L) 161 #define SECURITY_NT_NON_UNIQUE (0x00000015L) 162 #define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT (3L) 163 #define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID (0x00000016L) 164 165 #define SECURITY_BUILTIN_DOMAIN_RID (0x00000020L) 166 #define SECURITY_WRITE_RESTRICTED_CODE_RID (0x00000021L) 167 168 169 #define SECURITY_PACKAGE_BASE_RID (0x00000040L) 170 #define SECURITY_PACKAGE_RID_COUNT (2L) 171 #define SECURITY_PACKAGE_NTLM_RID (0x0000000AL) 172 #define SECURITY_PACKAGE_SCHANNEL_RID (0x0000000EL) 173 #define SECURITY_PACKAGE_DIGEST_RID (0x00000015L) 174 175 #define SECURITY_CRED_TYPE_BASE_RID (0x00000041L) 176 #define SECURITY_CRED_TYPE_RID_COUNT (2L) 177 #define SECURITY_CRED_TYPE_THIS_ORG_CERT_RID (0x00000001L) 178 179 #define SECURITY_MIN_BASE_RID (0x00000050L) 180 #define SECURITY_SERVICE_ID_BASE_RID (0x00000050L) 181 #define SECURITY_SERVICE_ID_RID_COUNT (6L) 182 #define SECURITY_RESERVED_ID_BASE_RID (0x00000051L) 183 #define SECURITY_APPPOOL_ID_BASE_RID (0x00000052L) 184 #define SECURITY_APPPOOL_ID_RID_COUNT (6L) 185 #define SECURITY_VIRTUALSERVER_ID_BASE_RID (0x00000053L) 186 #define SECURITY_VIRTUALSERVER_ID_RID_COUNT (6L) 187 #define SECURITY_USERMODEDRIVERHOST_ID_BASE_RID (0x00000054L) 188 #define SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT (6L) 189 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID (0x00000055L) 190 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT (6L) 191 #define SECURITY_WMIHOST_ID_BASE_RID (0x00000056L) 192 #define SECURITY_WMIHOST_ID_RID_COUNT (6L) 193 #define SECURITY_TASK_ID_BASE_RID (0x00000057L) 194 #define SECURITY_NFS_ID_BASE_RID (0x00000058L) 195 #define SECURITY_COM_ID_BASE_RID (0x00000059L) 196 #define SECURITY_VIRTUALACCOUNT_ID_RID_COUNT (6L) 197 198 #define SECURITY_MAX_BASE_RID (0x0000006FL) 199 200 #define SECURITY_MAX_ALWAYS_FILTERED (0x000003E7L) 201 #define SECURITY_MIN_NEVER_FILTERED (0x000003E8L) 202 203 #define SECURITY_OTHER_ORGANIZATION_RID (0x000003E8L) 204 205 #define SECURITY_WINDOWSMOBILE_ID_BASE_RID (0x00000070L) 206 207 /* Well-known domain relative sub-authority values (RIDs) */ 208 209 #define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS (0x000001F2L) 210 211 #define FOREST_USER_RID_MAX (0x000001F3L) 212 213 /* Well-known users */ 214 215 #define DOMAIN_USER_RID_ADMIN (0x000001F4L) 216 #define DOMAIN_USER_RID_GUEST (0x000001F5L) 217 #define DOMAIN_USER_RID_KRBTGT (0x000001F6L) 218 219 #define DOMAIN_USER_RID_MAX (0x000003E7L) 220 221 /* Well-known groups */ 222 223 #define DOMAIN_GROUP_RID_ADMINS (0x00000200L) 224 #define DOMAIN_GROUP_RID_USERS (0x00000201L) 225 #define DOMAIN_GROUP_RID_GUESTS (0x00000202L) 226 #define DOMAIN_GROUP_RID_COMPUTERS (0x00000203L) 227 #define DOMAIN_GROUP_RID_CONTROLLERS (0x00000204L) 228 #define DOMAIN_GROUP_RID_CERT_ADMINS (0x00000205L) 229 #define DOMAIN_GROUP_RID_SCHEMA_ADMINS (0x00000206L) 230 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (0x00000207L) 231 #define DOMAIN_GROUP_RID_POLICY_ADMINS (0x00000208L) 232 #define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (0x00000209L) 233 234 /* Well-known aliases */ 235 236 #define DOMAIN_ALIAS_RID_ADMINS (0x00000220L) 237 #define DOMAIN_ALIAS_RID_USERS (0x00000221L) 238 #define DOMAIN_ALIAS_RID_GUESTS (0x00000222L) 239 #define DOMAIN_ALIAS_RID_POWER_USERS (0x00000223L) 240 241 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS (0x00000224L) 242 #define DOMAIN_ALIAS_RID_SYSTEM_OPS (0x00000225L) 243 #define DOMAIN_ALIAS_RID_PRINT_OPS (0x00000226L) 244 #define DOMAIN_ALIAS_RID_BACKUP_OPS (0x00000227L) 245 246 #define DOMAIN_ALIAS_RID_REPLICATOR (0x00000228L) 247 #define DOMAIN_ALIAS_RID_RAS_SERVERS (0x00000229L) 248 #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS (0x0000022AL) 249 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS (0x0000022BL) 250 #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS (0x0000022CL) 251 #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS (0x0000022DL) 252 253 #define DOMAIN_ALIAS_RID_MONITORING_USERS (0x0000022EL) 254 #define DOMAIN_ALIAS_RID_LOGGING_USERS (0x0000022FL) 255 #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS (0x00000230L) 256 #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS (0x00000231L) 257 #define DOMAIN_ALIAS_RID_DCOM_USERS (0x00000232L) 258 #define DOMAIN_ALIAS_RID_IUSERS (0x00000238L) 259 #define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS (0x00000239L) 260 #define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP (0x0000023BL) 261 #define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (0x0000023CL) 262 #define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP (0x0000023DL) 263 #define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP (0x0000023EL) 264 265 #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16} 266 #define SECURITY_MANDATORY_UNTRUSTED_RID (0x00000000L) 267 #define SECURITY_MANDATORY_LOW_RID (0x00001000L) 268 #define SECURITY_MANDATORY_MEDIUM_RID (0x00002000L) 269 #define SECURITY_MANDATORY_HIGH_RID (0x00003000L) 270 #define SECURITY_MANDATORY_SYSTEM_RID (0x00004000L) 271 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID (0x00005000L) 272 273 /* SECURITY_MANDATORY_MAXIMUM_USER_RID is the highest RID that 274 can be set by a usermode caller.*/ 275 276 #define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID 277 278 #define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000) 279 280 /* Allocate the System Luid. The first 1000 LUIDs are reserved. 281 Use #999 here (0x3e7 = 999) */ 282 283 #define SYSTEM_LUID {0x3e7, 0x0} 284 #define ANONYMOUS_LOGON_LUID {0x3e6, 0x0} 285 #define LOCALSERVICE_LUID {0x3e5, 0x0} 286 #define NETWORKSERVICE_LUID {0x3e4, 0x0} 287 #define IUSER_LUID {0x3e3, 0x0} 288 289 typedef struct _ACE_HEADER { 290 UCHAR AceType; 291 UCHAR AceFlags; 292 USHORT AceSize; 293 } ACE_HEADER, *PACE_HEADER; 294 295 /* also in winnt.h */ 296 #define ACCESS_MIN_MS_ACE_TYPE (0x0) 297 #define ACCESS_ALLOWED_ACE_TYPE (0x0) 298 #define ACCESS_DENIED_ACE_TYPE (0x1) 299 #define SYSTEM_AUDIT_ACE_TYPE (0x2) 300 #define SYSTEM_ALARM_ACE_TYPE (0x3) 301 #define ACCESS_MAX_MS_V2_ACE_TYPE (0x3) 302 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4) 303 #define ACCESS_MAX_MS_V3_ACE_TYPE (0x4) 304 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5) 305 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5) 306 #define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6) 307 #define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7) 308 #define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8) 309 #define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8) 310 #define ACCESS_MAX_MS_V4_ACE_TYPE (0x8) 311 #define ACCESS_MAX_MS_ACE_TYPE (0x8) 312 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9) 313 #define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA) 314 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB) 315 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC) 316 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD) 317 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE) 318 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF) 319 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10) 320 #define ACCESS_MAX_MS_V5_ACE_TYPE (0x11) 321 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE (0x11) 322 323 /* The following are the inherit flags that go into the AceFlags field 324 of an Ace header. */ 325 326 #define OBJECT_INHERIT_ACE (0x1) 327 #define CONTAINER_INHERIT_ACE (0x2) 328 #define NO_PROPAGATE_INHERIT_ACE (0x4) 329 #define INHERIT_ONLY_ACE (0x8) 330 #define INHERITED_ACE (0x10) 331 #define VALID_INHERIT_FLAGS (0x1F) 332 333 #define SUCCESSFUL_ACCESS_ACE_FLAG (0x40) 334 #define FAILED_ACCESS_ACE_FLAG (0x80) 335 336 typedef struct _ACCESS_ALLOWED_ACE { 337 ACE_HEADER Header; 338 ACCESS_MASK Mask; 339 ULONG SidStart; 340 } ACCESS_ALLOWED_ACE, *PACCESS_ALLOWED_ACE; 341 342 typedef struct _ACCESS_DENIED_ACE { 343 ACE_HEADER Header; 344 ACCESS_MASK Mask; 345 ULONG SidStart; 346 } ACCESS_DENIED_ACE, *PACCESS_DENIED_ACE; 347 348 typedef struct _SYSTEM_AUDIT_ACE { 349 ACE_HEADER Header; 350 ACCESS_MASK Mask; 351 ULONG SidStart; 352 } SYSTEM_AUDIT_ACE, *PSYSTEM_AUDIT_ACE; 353 354 typedef struct _SYSTEM_ALARM_ACE { 355 ACE_HEADER Header; 356 ACCESS_MASK Mask; 357 ULONG SidStart; 358 } SYSTEM_ALARM_ACE, *PSYSTEM_ALARM_ACE; 359 360 typedef struct _SYSTEM_MANDATORY_LABEL_ACE { 361 ACE_HEADER Header; 362 ACCESS_MASK Mask; 363 ULONG SidStart; 364 } SYSTEM_MANDATORY_LABEL_ACE, *PSYSTEM_MANDATORY_LABEL_ACE; 365 366 #define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1 367 #define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2 368 #define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4 369 #define SYSTEM_MANDATORY_LABEL_VALID_MASK (SYSTEM_MANDATORY_LABEL_NO_WRITE_UP | \ 370 SYSTEM_MANDATORY_LABEL_NO_READ_UP | \ 371 SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP) 372 373 #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR)) 374 375 typedef USHORT SECURITY_DESCRIPTOR_CONTROL,*PSECURITY_DESCRIPTOR_CONTROL; 376 377 #define SE_OWNER_DEFAULTED 0x0001 378 #define SE_GROUP_DEFAULTED 0x0002 379 #define SE_DACL_PRESENT 0x0004 380 #define SE_DACL_DEFAULTED 0x0008 381 #define SE_SACL_PRESENT 0x0010 382 #define SE_SACL_DEFAULTED 0x0020 383 #define SE_DACL_UNTRUSTED 0x0040 384 #define SE_SERVER_SECURITY 0x0080 385 #define SE_DACL_AUTO_INHERIT_REQ 0x0100 386 #define SE_SACL_AUTO_INHERIT_REQ 0x0200 387 #define SE_DACL_AUTO_INHERITED 0x0400 388 #define SE_SACL_AUTO_INHERITED 0x0800 389 #define SE_DACL_PROTECTED 0x1000 390 #define SE_SACL_PROTECTED 0x2000 391 #define SE_RM_CONTROL_VALID 0x4000 392 #define SE_SELF_RELATIVE 0x8000 393 394 typedef struct _SECURITY_DESCRIPTOR_RELATIVE { 395 UCHAR Revision; 396 UCHAR Sbz1; 397 SECURITY_DESCRIPTOR_CONTROL Control; 398 ULONG Owner; 399 ULONG Group; 400 ULONG Sacl; 401 ULONG Dacl; 402 } SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE; 403 404 typedef struct _SECURITY_DESCRIPTOR { 405 UCHAR Revision; 406 UCHAR Sbz1; 407 SECURITY_DESCRIPTOR_CONTROL Control; 408 PSID Owner; 409 PSID Group; 410 PACL Sacl; 411 PACL Dacl; 412 } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR; 413 414 typedef struct _OBJECT_TYPE_LIST { 415 USHORT Level; 416 USHORT Sbz; 417 GUID *ObjectType; 418 } OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST; 419 420 #define ACCESS_OBJECT_GUID 0 421 #define ACCESS_PROPERTY_SET_GUID 1 422 #define ACCESS_PROPERTY_GUID 2 423 #define ACCESS_MAX_LEVEL 4 424 425 typedef enum _AUDIT_EVENT_TYPE { 426 AuditEventObjectAccess, 427 AuditEventDirectoryServiceAccess 428 } AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE; 429 430 #define AUDIT_ALLOW_NO_PRIVILEGE 0x1 431 432 #define ACCESS_DS_SOURCE_A "DS" 433 #define ACCESS_DS_SOURCE_W L"DS" 434 #define ACCESS_DS_OBJECT_TYPE_NAME_A "Directory Service Object" 435 #define ACCESS_DS_OBJECT_TYPE_NAME_W L"Directory Service Object" 436 437 #define ACCESS_REASON_TYPE_MASK 0xffff0000 438 #define ACCESS_REASON_DATA_MASK 0x0000ffff 439 440 typedef enum _ACCESS_REASON_TYPE { 441 AccessReasonNone = 0x00000000, 442 AccessReasonAllowedAce = 0x00010000, 443 AccessReasonDeniedAce = 0x00020000, 444 AccessReasonAllowedParentAce = 0x00030000, 445 AccessReasonDeniedParentAce = 0x00040000, 446 AccessReasonMissingPrivilege = 0x00100000, 447 AccessReasonFromPrivilege = 0x00200000, 448 AccessReasonIntegrityLevel = 0x00300000, 449 AccessReasonOwnership = 0x00400000, 450 AccessReasonNullDacl = 0x00500000, 451 AccessReasonEmptyDacl = 0x00600000, 452 AccessReasonNoSD = 0x00700000, 453 AccessReasonNoGrant = 0x00800000 454 } ACCESS_REASON_TYPE; 455 456 typedef ULONG ACCESS_REASON; 457 458 typedef struct _ACCESS_REASONS { 459 ACCESS_REASON Data[32]; 460 } ACCESS_REASONS, *PACCESS_REASONS; 461 462 #define SE_SECURITY_DESCRIPTOR_FLAG_NO_OWNER_ACE 0x00000001 463 #define SE_SECURITY_DESCRIPTOR_FLAG_NO_LABEL_ACE 0x00000002 464 #define SE_SECURITY_DESCRIPTOR_VALID_FLAGS 0x00000003 465 466 typedef struct _SE_SECURITY_DESCRIPTOR { 467 ULONG Size; 468 ULONG Flags; 469 PSECURITY_DESCRIPTOR SecurityDescriptor; 470 } SE_SECURITY_DESCRIPTOR, *PSE_SECURITY_DESCRIPTOR; 471 472 typedef struct _SE_ACCESS_REQUEST { 473 ULONG Size; 474 PSE_SECURITY_DESCRIPTOR SeSecurityDescriptor; 475 ACCESS_MASK DesiredAccess; 476 ACCESS_MASK PreviouslyGrantedAccess; 477 PSID PrincipalSelfSid; 478 PGENERIC_MAPPING GenericMapping; 479 ULONG ObjectTypeListCount; 480 POBJECT_TYPE_LIST ObjectTypeList; 481 } SE_ACCESS_REQUEST, *PSE_ACCESS_REQUEST; 482 483 typedef struct _SE_ACCESS_REPLY { 484 ULONG Size; 485 ULONG ResultListCount; 486 PACCESS_MASK GrantedAccess; 487 PNTSTATUS AccessStatus; 488 PACCESS_REASONS AccessReason; 489 PPRIVILEGE_SET* Privileges; 490 } SE_ACCESS_REPLY, *PSE_ACCESS_REPLY; 491 492 typedef enum _SE_AUDIT_OPERATION { 493 AuditPrivilegeObject, 494 AuditPrivilegeService, 495 AuditAccessCheck, 496 AuditOpenObject, 497 AuditOpenObjectWithTransaction, 498 AuditCloseObject, 499 AuditDeleteObject, 500 AuditOpenObjectForDelete, 501 AuditOpenObjectForDeleteWithTransaction, 502 AuditCloseNonObject, 503 AuditOpenNonObject, 504 AuditObjectReference, 505 AuditHandleCreation, 506 } SE_AUDIT_OPERATION, *PSE_AUDIT_OPERATION; 507 508 typedef struct _SE_AUDIT_INFO { 509 ULONG Size; 510 AUDIT_EVENT_TYPE AuditType; 511 SE_AUDIT_OPERATION AuditOperation; 512 ULONG AuditFlags; 513 UNICODE_STRING SubsystemName; 514 UNICODE_STRING ObjectTypeName; 515 UNICODE_STRING ObjectName; 516 PVOID HandleId; 517 GUID* TransactionId; 518 LUID* OperationId; 519 BOOLEAN ObjectCreation; 520 BOOLEAN GenerateOnClose; 521 } SE_AUDIT_INFO, *PSE_AUDIT_INFO; 522 523 #define TOKEN_ASSIGN_PRIMARY (0x0001) 524 #define TOKEN_DUPLICATE (0x0002) 525 #define TOKEN_IMPERSONATE (0x0004) 526 #define TOKEN_QUERY (0x0008) 527 #define TOKEN_QUERY_SOURCE (0x0010) 528 #define TOKEN_ADJUST_PRIVILEGES (0x0020) 529 #define TOKEN_ADJUST_GROUPS (0x0040) 530 #define TOKEN_ADJUST_DEFAULT (0x0080) 531 #define TOKEN_ADJUST_SESSIONID (0x0100) 532 533 #define TOKEN_ALL_ACCESS_P (STANDARD_RIGHTS_REQUIRED |\ 534 TOKEN_ASSIGN_PRIMARY |\ 535 TOKEN_DUPLICATE |\ 536 TOKEN_IMPERSONATE |\ 537 TOKEN_QUERY |\ 538 TOKEN_QUERY_SOURCE |\ 539 TOKEN_ADJUST_PRIVILEGES |\ 540 TOKEN_ADJUST_GROUPS |\ 541 TOKEN_ADJUST_DEFAULT ) 542 543 #if ((defined(_WIN32_WINNT) && (_WIN32_WINNT > 0x0400)) || (!defined(_WIN32_WINNT))) 544 #define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P |\ 545 TOKEN_ADJUST_SESSIONID ) 546 #else 547 #define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P) 548 #endif 549 550 #define TOKEN_READ (STANDARD_RIGHTS_READ |\ 551 TOKEN_QUERY) 552 553 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\ 554 TOKEN_ADJUST_PRIVILEGES |\ 555 TOKEN_ADJUST_GROUPS |\ 556 TOKEN_ADJUST_DEFAULT) 557 558 #define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE) 559 560 typedef enum _TOKEN_TYPE { 561 TokenPrimary = 1, 562 TokenImpersonation 563 } TOKEN_TYPE,*PTOKEN_TYPE; 564 565 typedef enum _TOKEN_INFORMATION_CLASS { 566 TokenUser = 1, 567 TokenGroups, 568 TokenPrivileges, 569 TokenOwner, 570 TokenPrimaryGroup, 571 TokenDefaultDacl, 572 TokenSource, 573 TokenType, 574 TokenImpersonationLevel, 575 TokenStatistics, 576 TokenRestrictedSids, 577 TokenSessionId, 578 TokenGroupsAndPrivileges, 579 TokenSessionReference, 580 TokenSandBoxInert, 581 TokenAuditPolicy, 582 TokenOrigin, 583 TokenElevationType, 584 TokenLinkedToken, 585 TokenElevation, 586 TokenHasRestrictions, 587 TokenAccessInformation, 588 TokenVirtualizationAllowed, 589 TokenVirtualizationEnabled, 590 TokenIntegrityLevel, 591 TokenUIAccess, 592 TokenMandatoryPolicy, 593 TokenLogonSid, 594 MaxTokenInfoClass 595 } TOKEN_INFORMATION_CLASS, *PTOKEN_INFORMATION_CLASS; 596 597 typedef struct _TOKEN_USER { 598 SID_AND_ATTRIBUTES User; 599 } TOKEN_USER, *PTOKEN_USER; 600 601 typedef struct _TOKEN_GROUPS { 602 ULONG GroupCount; 603 SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY]; 604 } TOKEN_GROUPS,*PTOKEN_GROUPS,*LPTOKEN_GROUPS; 605 606 typedef struct _TOKEN_PRIVILEGES { 607 ULONG PrivilegeCount; 608 LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY]; 609 } TOKEN_PRIVILEGES,*PTOKEN_PRIVILEGES,*LPTOKEN_PRIVILEGES; 610 611 typedef struct _TOKEN_OWNER { 612 PSID Owner; 613 } TOKEN_OWNER,*PTOKEN_OWNER; 614 615 typedef struct _TOKEN_PRIMARY_GROUP { 616 PSID PrimaryGroup; 617 } TOKEN_PRIMARY_GROUP,*PTOKEN_PRIMARY_GROUP; 618 619 typedef struct _TOKEN_DEFAULT_DACL { 620 PACL DefaultDacl; 621 } TOKEN_DEFAULT_DACL,*PTOKEN_DEFAULT_DACL; 622 623 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES { 624 ULONG SidCount; 625 ULONG SidLength; 626 PSID_AND_ATTRIBUTES Sids; 627 ULONG RestrictedSidCount; 628 ULONG RestrictedSidLength; 629 PSID_AND_ATTRIBUTES RestrictedSids; 630 ULONG PrivilegeCount; 631 ULONG PrivilegeLength; 632 PLUID_AND_ATTRIBUTES Privileges; 633 LUID AuthenticationId; 634 } TOKEN_GROUPS_AND_PRIVILEGES, *PTOKEN_GROUPS_AND_PRIVILEGES; 635 636 typedef struct _TOKEN_LINKED_TOKEN { 637 HANDLE LinkedToken; 638 } TOKEN_LINKED_TOKEN, *PTOKEN_LINKED_TOKEN; 639 640 typedef struct _TOKEN_ELEVATION { 641 ULONG TokenIsElevated; 642 } TOKEN_ELEVATION, *PTOKEN_ELEVATION; 643 644 typedef struct _TOKEN_MANDATORY_LABEL { 645 SID_AND_ATTRIBUTES Label; 646 } TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL; 647 648 #define TOKEN_MANDATORY_POLICY_OFF 0x0 649 #define TOKEN_MANDATORY_POLICY_NO_WRITE_UP 0x1 650 #define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2 651 652 #define TOKEN_MANDATORY_POLICY_VALID_MASK (TOKEN_MANDATORY_POLICY_NO_WRITE_UP | \ 653 TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN) 654 655 typedef struct _TOKEN_MANDATORY_POLICY { 656 ULONG Policy; 657 } TOKEN_MANDATORY_POLICY, *PTOKEN_MANDATORY_POLICY; 658 659 typedef struct _TOKEN_ACCESS_INFORMATION { 660 PSID_AND_ATTRIBUTES_HASH SidHash; 661 PSID_AND_ATTRIBUTES_HASH RestrictedSidHash; 662 PTOKEN_PRIVILEGES Privileges; 663 LUID AuthenticationId; 664 TOKEN_TYPE TokenType; 665 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; 666 TOKEN_MANDATORY_POLICY MandatoryPolicy; 667 ULONG Flags; 668 } TOKEN_ACCESS_INFORMATION, *PTOKEN_ACCESS_INFORMATION; 669 670 #define POLICY_AUDIT_SUBCATEGORY_COUNT (53) 671 672 typedef struct _TOKEN_AUDIT_POLICY { 673 UCHAR PerUserPolicy[((POLICY_AUDIT_SUBCATEGORY_COUNT) >> 1) + 1]; 674 } TOKEN_AUDIT_POLICY, *PTOKEN_AUDIT_POLICY; 675 676 #define TOKEN_SOURCE_LENGTH 8 677 678 typedef struct _TOKEN_SOURCE { 679 CHAR SourceName[TOKEN_SOURCE_LENGTH]; 680 LUID SourceIdentifier; 681 } TOKEN_SOURCE,*PTOKEN_SOURCE; 682 683 typedef struct _TOKEN_STATISTICS { 684 LUID TokenId; 685 LUID AuthenticationId; 686 LARGE_INTEGER ExpirationTime; 687 TOKEN_TYPE TokenType; 688 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; 689 ULONG DynamicCharged; 690 ULONG DynamicAvailable; 691 ULONG GroupCount; 692 ULONG PrivilegeCount; 693 LUID ModifiedId; 694 } TOKEN_STATISTICS, *PTOKEN_STATISTICS; 695 696 typedef struct _TOKEN_CONTROL { 697 LUID TokenId; 698 LUID AuthenticationId; 699 LUID ModifiedId; 700 TOKEN_SOURCE TokenSource; 701 } TOKEN_CONTROL,*PTOKEN_CONTROL; 702 703 typedef struct _TOKEN_ORIGIN { 704 LUID OriginatingLogonSession; 705 } TOKEN_ORIGIN, *PTOKEN_ORIGIN; 706 707 typedef enum _MANDATORY_LEVEL { 708 MandatoryLevelUntrusted = 0, 709 MandatoryLevelLow, 710 MandatoryLevelMedium, 711 MandatoryLevelHigh, 712 MandatoryLevelSystem, 713 MandatoryLevelSecureProcess, 714 MandatoryLevelCount 715 } MANDATORY_LEVEL, *PMANDATORY_LEVEL; 716 717 #define TOKEN_HAS_TRAVERSE_PRIVILEGE 0x0001 718 #define TOKEN_HAS_BACKUP_PRIVILEGE 0x0002 719 #define TOKEN_HAS_RESTORE_PRIVILEGE 0x0004 720 #define TOKEN_WRITE_RESTRICTED 0x0008 721 #define TOKEN_IS_RESTRICTED 0x0010 722 #define TOKEN_SESSION_NOT_REFERENCED 0x0020 723 #define TOKEN_SANDBOX_INERT 0x0040 724 #define TOKEN_HAS_IMPERSONATE_PRIVILEGE 0x0080 725 #define SE_BACKUP_PRIVILEGES_CHECKED 0x0100 726 #define TOKEN_VIRTUALIZE_ALLOWED 0x0200 727 #define TOKEN_VIRTUALIZE_ENABLED 0x0400 728 #define TOKEN_IS_FILTERED 0x0800 729 #define TOKEN_UIACCESS 0x1000 730 #define TOKEN_NOT_LOW 0x2000 731 732 typedef struct _SE_EXPORTS { 733 LUID SeCreateTokenPrivilege; 734 LUID SeAssignPrimaryTokenPrivilege; 735 LUID SeLockMemoryPrivilege; 736 LUID SeIncreaseQuotaPrivilege; 737 LUID SeUnsolicitedInputPrivilege; 738 LUID SeTcbPrivilege; 739 LUID SeSecurityPrivilege; 740 LUID SeTakeOwnershipPrivilege; 741 LUID SeLoadDriverPrivilege; 742 LUID SeCreatePagefilePrivilege; 743 LUID SeIncreaseBasePriorityPrivilege; 744 LUID SeSystemProfilePrivilege; 745 LUID SeSystemtimePrivilege; 746 LUID SeProfileSingleProcessPrivilege; 747 LUID SeCreatePermanentPrivilege; 748 LUID SeBackupPrivilege; 749 LUID SeRestorePrivilege; 750 LUID SeShutdownPrivilege; 751 LUID SeDebugPrivilege; 752 LUID SeAuditPrivilege; 753 LUID SeSystemEnvironmentPrivilege; 754 LUID SeChangeNotifyPrivilege; 755 LUID SeRemoteShutdownPrivilege; 756 PSID SeNullSid; 757 PSID SeWorldSid; 758 PSID SeLocalSid; 759 PSID SeCreatorOwnerSid; 760 PSID SeCreatorGroupSid; 761 PSID SeNtAuthoritySid; 762 PSID SeDialupSid; 763 PSID SeNetworkSid; 764 PSID SeBatchSid; 765 PSID SeInteractiveSid; 766 PSID SeLocalSystemSid; 767 PSID SeAliasAdminsSid; 768 PSID SeAliasUsersSid; 769 PSID SeAliasGuestsSid; 770 PSID SeAliasPowerUsersSid; 771 PSID SeAliasAccountOpsSid; 772 PSID SeAliasSystemOpsSid; 773 PSID SeAliasPrintOpsSid; 774 PSID SeAliasBackupOpsSid; 775 PSID SeAuthenticatedUsersSid; 776 PSID SeRestrictedSid; 777 PSID SeAnonymousLogonSid; 778 LUID SeUndockPrivilege; 779 LUID SeSyncAgentPrivilege; 780 LUID SeEnableDelegationPrivilege; 781 PSID SeLocalServiceSid; 782 PSID SeNetworkServiceSid; 783 LUID SeManageVolumePrivilege; 784 LUID SeImpersonatePrivilege; 785 LUID SeCreateGlobalPrivilege; 786 LUID SeTrustedCredManAccessPrivilege; 787 LUID SeRelabelPrivilege; 788 LUID SeIncreaseWorkingSetPrivilege; 789 LUID SeTimeZonePrivilege; 790 LUID SeCreateSymbolicLinkPrivilege; 791 PSID SeIUserSid; 792 PSID SeUntrustedMandatorySid; 793 PSID SeLowMandatorySid; 794 PSID SeMediumMandatorySid; 795 PSID SeHighMandatorySid; 796 PSID SeSystemMandatorySid; 797 PSID SeOwnerRightsSid; 798 } SE_EXPORTS, *PSE_EXPORTS; 799 800 typedef NTSTATUS 801 (NTAPI *PSE_LOGON_SESSION_TERMINATED_ROUTINE)( 802 IN PLUID LogonId); 803 /****************************************************************************** 804 * Runtime Library Types * 805 ******************************************************************************/ 806 807 808 #define RTL_SYSTEM_VOLUME_INFORMATION_FOLDER L"System Volume Information" 809 810 typedef PVOID 811 (NTAPI *PRTL_ALLOCATE_STRING_ROUTINE)( 812 IN SIZE_T NumberOfBytes); 813 814 #if _WIN32_WINNT >= 0x0600 815 typedef PVOID 816 (NTAPI *PRTL_REALLOCATE_STRING_ROUTINE)( 817 IN SIZE_T NumberOfBytes, 818 IN PVOID Buffer); 819 #endif 820 821 typedef VOID 822 (NTAPI *PRTL_FREE_STRING_ROUTINE)( 823 IN PVOID Buffer); 824 825 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine; 826 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine; 827 828 #if _WIN32_WINNT >= 0x0600 829 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine; 830 #endif 831 832 typedef NTSTATUS 833 (NTAPI * PRTL_HEAP_COMMIT_ROUTINE) ( 834 IN PVOID Base, 835 IN OUT PVOID *CommitAddress, 836 IN OUT PSIZE_T CommitSize); 837 838 typedef struct _RTL_HEAP_PARAMETERS { 839 ULONG Length; 840 SIZE_T SegmentReserve; 841 SIZE_T SegmentCommit; 842 SIZE_T DeCommitFreeBlockThreshold; 843 SIZE_T DeCommitTotalFreeThreshold; 844 SIZE_T MaximumAllocationSize; 845 SIZE_T VirtualMemoryThreshold; 846 SIZE_T InitialCommit; 847 SIZE_T InitialReserve; 848 PRTL_HEAP_COMMIT_ROUTINE CommitRoutine; 849 SIZE_T Reserved[2]; 850 } RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS; 851 852 #if (NTDDI_VERSION >= NTDDI_WIN2K) 853 854 typedef struct _GENERATE_NAME_CONTEXT { 855 USHORT Checksum; 856 BOOLEAN CheckSumInserted; 857 UCHAR NameLength; 858 WCHAR NameBuffer[8]; 859 ULONG ExtensionLength; 860 WCHAR ExtensionBuffer[4]; 861 ULONG LastIndexValue; 862 } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT; 863 864 typedef struct _PREFIX_TABLE_ENTRY { 865 CSHORT NodeTypeCode; 866 CSHORT NameLength; 867 struct _PREFIX_TABLE_ENTRY *NextPrefixTree; 868 RTL_SPLAY_LINKS Links; 869 PSTRING Prefix; 870 } PREFIX_TABLE_ENTRY, *PPREFIX_TABLE_ENTRY; 871 872 typedef struct _PREFIX_TABLE { 873 CSHORT NodeTypeCode; 874 CSHORT NameLength; 875 PPREFIX_TABLE_ENTRY NextPrefixTree; 876 } PREFIX_TABLE, *PPREFIX_TABLE; 877 878 typedef struct _UNICODE_PREFIX_TABLE_ENTRY { 879 CSHORT NodeTypeCode; 880 CSHORT NameLength; 881 struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree; 882 struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch; 883 RTL_SPLAY_LINKS Links; 884 PUNICODE_STRING Prefix; 885 } UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY; 886 887 typedef struct _UNICODE_PREFIX_TABLE { 888 CSHORT NodeTypeCode; 889 CSHORT NameLength; 890 PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree; 891 PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry; 892 } UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE; 893 894 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 895 896 #if (NTDDI_VERSION >= NTDDI_WINXP) 897 typedef struct _COMPRESSED_DATA_INFO { 898 USHORT CompressionFormatAndEngine; 899 UCHAR CompressionUnitShift; 900 UCHAR ChunkShift; 901 UCHAR ClusterShift; 902 UCHAR Reserved; 903 USHORT NumberOfChunks; 904 ULONG CompressedChunkSizes[ANYSIZE_ARRAY]; 905 } COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO; 906 #endif 907 908 /****************************************************************************** 909 * Runtime Library Functions * 910 ******************************************************************************/ 911 912 #if (NTDDI_VERSION >= NTDDI_WIN2K) 913 914 NTSYSAPI 915 PVOID 916 NTAPI 917 RtlAllocateHeap( 918 IN HANDLE HeapHandle, 919 IN ULONG Flags OPTIONAL, 920 IN SIZE_T Size); 921 922 NTSYSAPI 923 BOOLEAN 924 NTAPI 925 RtlFreeHeap( 926 IN PVOID HeapHandle, 927 IN ULONG Flags OPTIONAL, 928 IN PVOID BaseAddress); 929 930 NTSYSAPI 931 VOID 932 NTAPI 933 RtlCaptureContext( 934 OUT PCONTEXT ContextRecord); 935 936 NTSYSAPI 937 ULONG 938 NTAPI 939 RtlRandom( 940 IN OUT PULONG Seed); 941 942 NTSYSAPI 943 BOOLEAN 944 NTAPI 945 RtlCreateUnicodeString( 946 OUT PUNICODE_STRING DestinationString, 947 IN PCWSTR SourceString); 948 949 NTSYSAPI 950 NTSTATUS 951 NTAPI 952 RtlAppendStringToString( 953 IN OUT PSTRING Destination, 954 IN const STRING *Source); 955 956 NTSYSAPI 957 NTSTATUS 958 NTAPI 959 RtlOemStringToUnicodeString( 960 IN OUT PUNICODE_STRING DestinationString, 961 IN PCOEM_STRING SourceString, 962 IN BOOLEAN AllocateDestinationString); 963 964 NTSYSAPI 965 NTSTATUS 966 NTAPI 967 RtlUnicodeStringToOemString( 968 IN OUT POEM_STRING DestinationString, 969 IN PCUNICODE_STRING SourceString, 970 IN BOOLEAN AllocateDestinationString); 971 972 NTSYSAPI 973 NTSTATUS 974 NTAPI 975 RtlUpcaseUnicodeStringToOemString( 976 IN OUT POEM_STRING DestinationString, 977 IN PCUNICODE_STRING SourceString, 978 IN BOOLEAN AllocateDestinationString); 979 980 NTSYSAPI 981 NTSTATUS 982 NTAPI 983 RtlOemStringToCountedUnicodeString( 984 IN OUT PUNICODE_STRING DestinationString, 985 IN PCOEM_STRING SourceString, 986 IN BOOLEAN AllocateDestinationString); 987 988 NTSYSAPI 989 NTSTATUS 990 NTAPI 991 RtlUnicodeStringToCountedOemString( 992 IN OUT POEM_STRING DestinationString, 993 IN PCUNICODE_STRING SourceString, 994 IN BOOLEAN AllocateDestinationString); 995 996 NTSYSAPI 997 NTSTATUS 998 NTAPI 999 RtlUpcaseUnicodeStringToCountedOemString( 1000 IN OUT POEM_STRING DestinationString, 1001 IN PCUNICODE_STRING SourceString, 1002 IN BOOLEAN AllocateDestinationString); 1003 1004 NTSYSAPI 1005 NTSTATUS 1006 NTAPI 1007 RtlDowncaseUnicodeString( 1008 IN OUT PUNICODE_STRING UniDest, 1009 IN PCUNICODE_STRING UniSource, 1010 IN BOOLEAN AllocateDestinationString); 1011 1012 NTSYSAPI 1013 VOID 1014 NTAPI 1015 RtlFreeOemString ( 1016 IN OUT POEM_STRING OemString); 1017 1018 NTSYSAPI 1019 ULONG 1020 NTAPI 1021 RtlxUnicodeStringToOemSize( 1022 IN PCUNICODE_STRING UnicodeString); 1023 1024 NTSYSAPI 1025 ULONG 1026 NTAPI 1027 RtlxOemStringToUnicodeSize( 1028 IN PCOEM_STRING OemString); 1029 1030 NTSYSAPI 1031 NTSTATUS 1032 NTAPI 1033 RtlMultiByteToUnicodeN( 1034 OUT PWCH UnicodeString, 1035 IN ULONG MaxBytesInUnicodeString, 1036 OUT PULONG BytesInUnicodeString OPTIONAL, 1037 IN const CHAR *MultiByteString, 1038 IN ULONG BytesInMultiByteString); 1039 1040 NTSYSAPI 1041 NTSTATUS 1042 NTAPI 1043 RtlMultiByteToUnicodeSize( 1044 OUT PULONG BytesInUnicodeString, 1045 IN const CHAR *MultiByteString, 1046 IN ULONG BytesInMultiByteString); 1047 1048 NTSYSAPI 1049 NTSTATUS 1050 NTAPI 1051 RtlUnicodeToMultiByteSize( 1052 OUT PULONG BytesInMultiByteString, 1053 IN PCWCH UnicodeString, 1054 IN ULONG BytesInUnicodeString); 1055 1056 NTSYSAPI 1057 NTSTATUS 1058 NTAPI 1059 RtlUnicodeToMultiByteN( 1060 OUT PCHAR MultiByteString, 1061 IN ULONG MaxBytesInMultiByteString, 1062 OUT PULONG BytesInMultiByteString OPTIONAL, 1063 IN PWCH UnicodeString, 1064 IN ULONG BytesInUnicodeString); 1065 1066 NTSYSAPI 1067 NTSTATUS 1068 NTAPI 1069 RtlUpcaseUnicodeToMultiByteN( 1070 OUT PCHAR MultiByteString, 1071 IN ULONG MaxBytesInMultiByteString, 1072 OUT PULONG BytesInMultiByteString OPTIONAL, 1073 IN PCWCH UnicodeString, 1074 IN ULONG BytesInUnicodeString); 1075 1076 NTSYSAPI 1077 NTSTATUS 1078 NTAPI 1079 RtlOemToUnicodeN( 1080 OUT PWSTR UnicodeString, 1081 IN ULONG MaxBytesInUnicodeString, 1082 OUT PULONG BytesInUnicodeString OPTIONAL, 1083 IN PCCH OemString, 1084 IN ULONG BytesInOemString); 1085 1086 NTSYSAPI 1087 NTSTATUS 1088 NTAPI 1089 RtlUnicodeToOemN( 1090 OUT PCHAR OemString, 1091 IN ULONG MaxBytesInOemString, 1092 OUT PULONG BytesInOemString OPTIONAL, 1093 IN PCWCH UnicodeString, 1094 IN ULONG BytesInUnicodeString); 1095 1096 NTSYSAPI 1097 NTSTATUS 1098 NTAPI 1099 RtlUpcaseUnicodeToOemN( 1100 OUT PCHAR OemString, 1101 IN ULONG MaxBytesInOemString, 1102 OUT PULONG BytesInOemString OPTIONAL, 1103 IN PCWCH UnicodeString, 1104 IN ULONG BytesInUnicodeString); 1105 1106 #if (NTDDI_VERSION >= NTDDI_VISTASP1) 1107 NTSYSAPI 1108 NTSTATUS 1109 NTAPI 1110 RtlGenerate8dot3Name( 1111 IN PCUNICODE_STRING Name, 1112 IN BOOLEAN AllowExtendedCharacters, 1113 IN OUT PGENERATE_NAME_CONTEXT Context, 1114 IN OUT PUNICODE_STRING Name8dot3); 1115 #else 1116 NTSYSAPI 1117 VOID 1118 NTAPI 1119 RtlGenerate8dot3Name( 1120 IN PCUNICODE_STRING Name, 1121 IN BOOLEAN AllowExtendedCharacters, 1122 IN OUT PGENERATE_NAME_CONTEXT Context, 1123 IN OUT PUNICODE_STRING Name8dot3); 1124 #endif 1125 1126 NTSYSAPI 1127 BOOLEAN 1128 NTAPI 1129 RtlIsNameLegalDOS8Dot3( 1130 IN PCUNICODE_STRING Name, 1131 IN OUT POEM_STRING OemName OPTIONAL, 1132 IN OUT PBOOLEAN NameContainsSpaces OPTIONAL); 1133 1134 NTSYSAPI 1135 BOOLEAN 1136 NTAPI 1137 RtlIsValidOemCharacter( 1138 IN OUT PWCHAR Char); 1139 1140 NTSYSAPI 1141 VOID 1142 NTAPI 1143 PfxInitialize( 1144 OUT PPREFIX_TABLE PrefixTable); 1145 1146 NTSYSAPI 1147 BOOLEAN 1148 NTAPI 1149 PfxInsertPrefix( 1150 IN PPREFIX_TABLE PrefixTable, 1151 IN PSTRING Prefix, 1152 OUT PPREFIX_TABLE_ENTRY PrefixTableEntry); 1153 1154 NTSYSAPI 1155 VOID 1156 NTAPI 1157 PfxRemovePrefix( 1158 IN PPREFIX_TABLE PrefixTable, 1159 IN PPREFIX_TABLE_ENTRY PrefixTableEntry); 1160 1161 NTSYSAPI 1162 PPREFIX_TABLE_ENTRY 1163 NTAPI 1164 PfxFindPrefix( 1165 IN PPREFIX_TABLE PrefixTable, 1166 IN PSTRING FullName); 1167 1168 NTSYSAPI 1169 VOID 1170 NTAPI 1171 RtlInitializeUnicodePrefix( 1172 OUT PUNICODE_PREFIX_TABLE PrefixTable); 1173 1174 NTSYSAPI 1175 BOOLEAN 1176 NTAPI 1177 RtlInsertUnicodePrefix( 1178 IN PUNICODE_PREFIX_TABLE PrefixTable, 1179 IN PUNICODE_STRING Prefix, 1180 OUT PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry); 1181 1182 NTSYSAPI 1183 VOID 1184 NTAPI 1185 RtlRemoveUnicodePrefix( 1186 IN PUNICODE_PREFIX_TABLE PrefixTable, 1187 IN PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry); 1188 1189 NTSYSAPI 1190 PUNICODE_PREFIX_TABLE_ENTRY 1191 NTAPI 1192 RtlFindUnicodePrefix( 1193 IN PUNICODE_PREFIX_TABLE PrefixTable, 1194 IN PUNICODE_STRING FullName, 1195 IN ULONG CaseInsensitiveIndex); 1196 1197 NTSYSAPI 1198 PUNICODE_PREFIX_TABLE_ENTRY 1199 NTAPI 1200 RtlNextUnicodePrefix( 1201 IN PUNICODE_PREFIX_TABLE PrefixTable, 1202 IN BOOLEAN Restart); 1203 1204 NTSYSAPI 1205 SIZE_T 1206 NTAPI 1207 RtlCompareMemoryUlong( 1208 IN PVOID Source, 1209 IN SIZE_T Length, 1210 IN ULONG Pattern); 1211 1212 NTSYSAPI 1213 BOOLEAN 1214 NTAPI 1215 RtlTimeToSecondsSince1980( 1216 IN PLARGE_INTEGER Time, 1217 OUT PULONG ElapsedSeconds); 1218 1219 NTSYSAPI 1220 VOID 1221 NTAPI 1222 RtlSecondsSince1980ToTime( 1223 IN ULONG ElapsedSeconds, 1224 OUT PLARGE_INTEGER Time); 1225 1226 NTSYSAPI 1227 BOOLEAN 1228 NTAPI 1229 RtlTimeToSecondsSince1970( 1230 IN PLARGE_INTEGER Time, 1231 OUT PULONG ElapsedSeconds); 1232 1233 NTSYSAPI 1234 VOID 1235 NTAPI 1236 RtlSecondsSince1970ToTime( 1237 IN ULONG ElapsedSeconds, 1238 OUT PLARGE_INTEGER Time); 1239 1240 NTSYSAPI 1241 BOOLEAN 1242 NTAPI 1243 RtlValidSid( 1244 IN PSID Sid); 1245 1246 NTSYSAPI 1247 BOOLEAN 1248 NTAPI 1249 RtlEqualSid( 1250 IN PSID Sid1, 1251 IN PSID Sid2); 1252 1253 NTSYSAPI 1254 BOOLEAN 1255 NTAPI 1256 RtlEqualPrefixSid( 1257 IN PSID Sid1, 1258 IN PSID Sid2); 1259 1260 NTSYSAPI 1261 ULONG 1262 NTAPI 1263 RtlLengthRequiredSid( 1264 IN ULONG SubAuthorityCount); 1265 1266 NTSYSAPI 1267 PVOID 1268 NTAPI 1269 RtlFreeSid( 1270 IN PSID Sid); 1271 1272 NTSYSAPI 1273 NTSTATUS 1274 NTAPI 1275 RtlAllocateAndInitializeSid( 1276 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, 1277 IN UCHAR SubAuthorityCount, 1278 IN ULONG SubAuthority0, 1279 IN ULONG SubAuthority1, 1280 IN ULONG SubAuthority2, 1281 IN ULONG SubAuthority3, 1282 IN ULONG SubAuthority4, 1283 IN ULONG SubAuthority5, 1284 IN ULONG SubAuthority6, 1285 IN ULONG SubAuthority7, 1286 OUT PSID *Sid); 1287 1288 NTSYSAPI 1289 NTSTATUS 1290 NTAPI 1291 RtlInitializeSid( 1292 OUT PSID Sid, 1293 IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, 1294 IN UCHAR SubAuthorityCount); 1295 1296 NTSYSAPI 1297 PULONG 1298 NTAPI 1299 RtlSubAuthoritySid( 1300 IN PSID Sid, 1301 IN ULONG SubAuthority); 1302 1303 NTSYSAPI 1304 ULONG 1305 NTAPI 1306 RtlLengthSid( 1307 IN PSID Sid); 1308 1309 NTSYSAPI 1310 NTSTATUS 1311 NTAPI 1312 RtlCopySid( 1313 IN ULONG Length, 1314 IN PSID Destination, 1315 IN PSID Source); 1316 1317 NTSYSAPI 1318 NTSTATUS 1319 NTAPI 1320 RtlConvertSidToUnicodeString( 1321 IN OUT PUNICODE_STRING UnicodeString, 1322 IN PSID Sid, 1323 IN BOOLEAN AllocateDestinationString); 1324 1325 NTSYSAPI 1326 VOID 1327 NTAPI 1328 RtlCopyLuid( 1329 OUT PLUID DestinationLuid, 1330 IN PLUID SourceLuid); 1331 1332 NTSYSAPI 1333 NTSTATUS 1334 NTAPI 1335 RtlCreateAcl( 1336 OUT PACL Acl, 1337 IN ULONG AclLength, 1338 IN ULONG AclRevision); 1339 1340 NTSYSAPI 1341 NTSTATUS 1342 NTAPI 1343 RtlAddAce( 1344 IN OUT PACL Acl, 1345 IN ULONG AceRevision, 1346 IN ULONG StartingAceIndex, 1347 IN PVOID AceList, 1348 IN ULONG AceListLength); 1349 1350 NTSYSAPI 1351 NTSTATUS 1352 NTAPI 1353 RtlDeleteAce( 1354 IN OUT PACL Acl, 1355 IN ULONG AceIndex); 1356 1357 NTSYSAPI 1358 NTSTATUS 1359 NTAPI 1360 RtlGetAce( 1361 IN PACL Acl, 1362 IN ULONG AceIndex, 1363 OUT PVOID *Ace); 1364 1365 NTSYSAPI 1366 NTSTATUS 1367 NTAPI 1368 RtlAddAccessAllowedAce( 1369 IN OUT PACL Acl, 1370 IN ULONG AceRevision, 1371 IN ACCESS_MASK AccessMask, 1372 IN PSID Sid); 1373 1374 NTSYSAPI 1375 NTSTATUS 1376 NTAPI 1377 RtlAddAccessAllowedAceEx( 1378 IN OUT PACL Acl, 1379 IN ULONG AceRevision, 1380 IN ULONG AceFlags, 1381 IN ACCESS_MASK AccessMask, 1382 IN PSID Sid); 1383 1384 NTSYSAPI 1385 NTSTATUS 1386 NTAPI 1387 RtlCreateSecurityDescriptorRelative( 1388 OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor, 1389 IN ULONG Revision); 1390 1391 NTSYSAPI 1392 NTSTATUS 1393 NTAPI 1394 RtlGetDaclSecurityDescriptor( 1395 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 1396 OUT PBOOLEAN DaclPresent, 1397 OUT PACL *Dacl, 1398 OUT PBOOLEAN DaclDefaulted); 1399 1400 NTSYSAPI 1401 NTSTATUS 1402 NTAPI 1403 RtlSetOwnerSecurityDescriptor( 1404 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, 1405 IN PSID Owner OPTIONAL, 1406 IN BOOLEAN OwnerDefaulted); 1407 1408 NTSYSAPI 1409 NTSTATUS 1410 NTAPI 1411 RtlGetOwnerSecurityDescriptor( 1412 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 1413 OUT PSID *Owner, 1414 OUT PBOOLEAN OwnerDefaulted); 1415 1416 NTSYSAPI 1417 ULONG 1418 NTAPI 1419 RtlNtStatusToDosError( 1420 IN NTSTATUS Status); 1421 1422 NTSYSAPI 1423 NTSTATUS 1424 NTAPI 1425 RtlCustomCPToUnicodeN( 1426 IN PCPTABLEINFO CustomCP, 1427 OUT PWCH UnicodeString, 1428 IN ULONG MaxBytesInUnicodeString, 1429 OUT PULONG BytesInUnicodeString OPTIONAL, 1430 IN PCH CustomCPString, 1431 IN ULONG BytesInCustomCPString); 1432 1433 NTSYSAPI 1434 NTSTATUS 1435 NTAPI 1436 RtlUnicodeToCustomCPN( 1437 IN PCPTABLEINFO CustomCP, 1438 OUT PCH CustomCPString, 1439 IN ULONG MaxBytesInCustomCPString, 1440 OUT PULONG BytesInCustomCPString OPTIONAL, 1441 IN PWCH UnicodeString, 1442 IN ULONG BytesInUnicodeString); 1443 1444 NTSYSAPI 1445 NTSTATUS 1446 NTAPI 1447 RtlUpcaseUnicodeToCustomCPN( 1448 IN PCPTABLEINFO CustomCP, 1449 OUT PCH CustomCPString, 1450 IN ULONG MaxBytesInCustomCPString, 1451 OUT PULONG BytesInCustomCPString OPTIONAL, 1452 IN PWCH UnicodeString, 1453 IN ULONG BytesInUnicodeString); 1454 1455 NTSYSAPI 1456 VOID 1457 NTAPI 1458 RtlInitCodePageTable( 1459 IN PUSHORT TableBase, 1460 IN OUT PCPTABLEINFO CodePageTable); 1461 1462 1463 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 1464 1465 1466 #if (NTDDI_VERSION >= NTDDI_WINXP) 1467 1468 NTSYSAPI 1469 PVOID 1470 NTAPI 1471 RtlCreateHeap( 1472 IN ULONG Flags, 1473 IN PVOID HeapBase OPTIONAL, 1474 IN SIZE_T ReserveSize OPTIONAL, 1475 IN SIZE_T CommitSize OPTIONAL, 1476 IN PVOID Lock OPTIONAL, 1477 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL); 1478 1479 NTSYSAPI 1480 PVOID 1481 NTAPI 1482 RtlDestroyHeap( 1483 IN PVOID HeapHandle); 1484 1485 NTSYSAPI 1486 USHORT 1487 NTAPI 1488 RtlCaptureStackBackTrace( 1489 IN ULONG FramesToSkip, 1490 IN ULONG FramesToCapture, 1491 OUT PVOID *BackTrace, 1492 OUT PULONG BackTraceHash OPTIONAL); 1493 1494 NTSYSAPI 1495 ULONG 1496 NTAPI 1497 RtlRandomEx( 1498 IN OUT PULONG Seed); 1499 1500 NTSYSAPI 1501 NTSTATUS 1502 NTAPI 1503 RtlInitUnicodeStringEx( 1504 OUT PUNICODE_STRING DestinationString, 1505 IN PCWSTR SourceString OPTIONAL); 1506 1507 NTSYSAPI 1508 NTSTATUS 1509 NTAPI 1510 RtlValidateUnicodeString( 1511 IN ULONG Flags, 1512 IN PCUNICODE_STRING String); 1513 1514 NTSYSAPI 1515 NTSTATUS 1516 NTAPI 1517 RtlDuplicateUnicodeString( 1518 IN ULONG Flags, 1519 IN PCUNICODE_STRING SourceString, 1520 OUT PUNICODE_STRING DestinationString); 1521 1522 NTSYSAPI 1523 NTSTATUS 1524 NTAPI 1525 RtlGetCompressionWorkSpaceSize( 1526 IN USHORT CompressionFormatAndEngine, 1527 OUT PULONG CompressBufferWorkSpaceSize, 1528 OUT PULONG CompressFragmentWorkSpaceSize); 1529 1530 NTSYSAPI 1531 NTSTATUS 1532 NTAPI 1533 RtlCompressBuffer( 1534 IN USHORT CompressionFormatAndEngine, 1535 IN PUCHAR UncompressedBuffer, 1536 IN ULONG UncompressedBufferSize, 1537 OUT PUCHAR CompressedBuffer, 1538 IN ULONG CompressedBufferSize, 1539 IN ULONG UncompressedChunkSize, 1540 OUT PULONG FinalCompressedSize, 1541 IN PVOID WorkSpace); 1542 1543 NTSYSAPI 1544 NTSTATUS 1545 NTAPI 1546 RtlDecompressBuffer( 1547 IN USHORT CompressionFormat, 1548 OUT PUCHAR UncompressedBuffer, 1549 IN ULONG UncompressedBufferSize, 1550 IN PUCHAR CompressedBuffer, 1551 IN ULONG CompressedBufferSize, 1552 OUT PULONG FinalUncompressedSize); 1553 1554 NTSYSAPI 1555 NTSTATUS 1556 NTAPI 1557 RtlDecompressFragment( 1558 IN USHORT CompressionFormat, 1559 OUT PUCHAR UncompressedFragment, 1560 IN ULONG UncompressedFragmentSize, 1561 IN PUCHAR CompressedBuffer, 1562 IN ULONG CompressedBufferSize, 1563 IN ULONG FragmentOffset, 1564 OUT PULONG FinalUncompressedSize, 1565 IN PVOID WorkSpace); 1566 1567 NTSYSAPI 1568 NTSTATUS 1569 NTAPI 1570 RtlDescribeChunk( 1571 IN USHORT CompressionFormat, 1572 IN OUT PUCHAR *CompressedBuffer, 1573 IN PUCHAR EndOfCompressedBufferPlus1, 1574 OUT PUCHAR *ChunkBuffer, 1575 OUT PULONG ChunkSize); 1576 1577 NTSYSAPI 1578 NTSTATUS 1579 NTAPI 1580 RtlReserveChunk( 1581 IN USHORT CompressionFormat, 1582 IN OUT PUCHAR *CompressedBuffer, 1583 IN PUCHAR EndOfCompressedBufferPlus1, 1584 OUT PUCHAR *ChunkBuffer, 1585 IN ULONG ChunkSize); 1586 1587 NTSYSAPI 1588 NTSTATUS 1589 NTAPI 1590 RtlDecompressChunks( 1591 OUT PUCHAR UncompressedBuffer, 1592 IN ULONG UncompressedBufferSize, 1593 IN PUCHAR CompressedBuffer, 1594 IN ULONG CompressedBufferSize, 1595 IN PUCHAR CompressedTail, 1596 IN ULONG CompressedTailSize, 1597 IN PCOMPRESSED_DATA_INFO CompressedDataInfo); 1598 1599 NTSYSAPI 1600 NTSTATUS 1601 NTAPI 1602 RtlCompressChunks( 1603 IN PUCHAR UncompressedBuffer, 1604 IN ULONG UncompressedBufferSize, 1605 OUT PUCHAR CompressedBuffer, 1606 IN ULONG CompressedBufferSize, 1607 IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo, 1608 IN ULONG CompressedDataInfoLength, 1609 IN PVOID WorkSpace); 1610 1611 NTSYSAPI 1612 PSID_IDENTIFIER_AUTHORITY 1613 NTAPI 1614 RtlIdentifierAuthoritySid( 1615 IN PSID Sid); 1616 1617 NTSYSAPI 1618 PUCHAR 1619 NTAPI 1620 RtlSubAuthorityCountSid( 1621 IN PSID Sid); 1622 1623 NTSYSAPI 1624 ULONG 1625 NTAPI 1626 RtlNtStatusToDosErrorNoTeb( 1627 IN NTSTATUS Status); 1628 1629 NTSYSAPI 1630 NTSTATUS 1631 NTAPI 1632 RtlCreateSystemVolumeInformationFolder( 1633 IN PCUNICODE_STRING VolumeRootPath); 1634 1635 #if defined(_M_AMD64) 1636 1637 FORCEINLINE 1638 VOID 1639 RtlFillMemoryUlong ( 1640 OUT PVOID Destination, 1641 IN SIZE_T Length, 1642 IN ULONG Pattern) 1643 { 1644 PULONG Address = (PULONG)Destination; 1645 if ((Length /= 4) != 0) { 1646 if (((ULONG64)Address & 4) != 0) { 1647 *Address = Pattern; 1648 if ((Length -= 1) == 0) { 1649 return; 1650 } 1651 Address += 1; 1652 } 1653 __stosq((PULONG64)(Address), Pattern | ((ULONG64)Pattern << 32), Length / 2); 1654 if ((Length & 1) != 0) Address[Length - 1] = Pattern; 1655 } 1656 return; 1657 } 1658 1659 #define RtlFillMemoryUlonglong(Destination, Length, Pattern) \ 1660 __stosq((PULONG64)(Destination), Pattern, (Length) / 8) 1661 1662 #else 1663 1664 NTSYSAPI 1665 VOID 1666 NTAPI 1667 RtlFillMemoryUlong( 1668 OUT PVOID Destination, 1669 IN SIZE_T Length, 1670 IN ULONG Pattern); 1671 1672 NTSYSAPI 1673 VOID 1674 NTAPI 1675 RtlFillMemoryUlonglong( 1676 OUT PVOID Destination, 1677 IN SIZE_T Length, 1678 IN ULONGLONG Pattern); 1679 1680 #endif /* defined(_M_AMD64) */ 1681 1682 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 1683 1684 #if (NTDDI_VERSION >= NTDDI_WS03) 1685 NTSYSAPI 1686 NTSTATUS 1687 NTAPI 1688 RtlInitAnsiStringEx( 1689 OUT PANSI_STRING DestinationString, 1690 IN PCSZ SourceString OPTIONAL); 1691 #endif 1692 1693 #if (NTDDI_VERSION >= NTDDI_WS03SP1) 1694 1695 NTSYSAPI 1696 NTSTATUS 1697 NTAPI 1698 RtlGetSaclSecurityDescriptor( 1699 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 1700 OUT PBOOLEAN SaclPresent, 1701 OUT PACL *Sacl, 1702 OUT PBOOLEAN SaclDefaulted); 1703 1704 NTSYSAPI 1705 NTSTATUS 1706 NTAPI 1707 RtlSetGroupSecurityDescriptor( 1708 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, 1709 IN PSID Group OPTIONAL, 1710 IN BOOLEAN GroupDefaulted OPTIONAL); 1711 1712 NTSYSAPI 1713 NTSTATUS 1714 NTAPI 1715 RtlGetGroupSecurityDescriptor( 1716 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 1717 OUT PSID *Group, 1718 OUT PBOOLEAN GroupDefaulted); 1719 1720 NTSYSAPI 1721 NTSTATUS 1722 NTAPI 1723 RtlAbsoluteToSelfRelativeSD( 1724 IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor, 1725 OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor OPTIONAL, 1726 IN OUT PULONG BufferLength); 1727 1728 NTSYSAPI 1729 NTSTATUS 1730 NTAPI 1731 RtlSelfRelativeToAbsoluteSD( 1732 IN PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor, 1733 OUT PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor OPTIONAL, 1734 IN OUT PULONG AbsoluteSecurityDescriptorSize, 1735 OUT PACL Dacl OPTIONAL, 1736 IN OUT PULONG DaclSize, 1737 OUT PACL Sacl OPTIONAL, 1738 IN OUT PULONG SaclSize, 1739 OUT PSID Owner OPTIONAL, 1740 IN OUT PULONG OwnerSize, 1741 OUT PSID PrimaryGroup OPTIONAL, 1742 IN OUT PULONG PrimaryGroupSize); 1743 1744 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */ 1745 1746 #if (NTDDI_VERSION >= NTDDI_VISTA) 1747 1748 NTSYSAPI 1749 NTSTATUS 1750 NTAPI 1751 RtlNormalizeString( 1752 IN ULONG NormForm, 1753 IN PCWSTR SourceString, 1754 IN LONG SourceStringLength, 1755 OUT PWSTR DestinationString, 1756 IN OUT PLONG DestinationStringLength); 1757 1758 NTSYSAPI 1759 NTSTATUS 1760 NTAPI 1761 RtlIsNormalizedString( 1762 IN ULONG NormForm, 1763 IN PCWSTR SourceString, 1764 IN LONG SourceStringLength, 1765 OUT PBOOLEAN Normalized); 1766 1767 NTSYSAPI 1768 NTSTATUS 1769 NTAPI 1770 RtlIdnToAscii( 1771 IN ULONG Flags, 1772 IN PCWSTR SourceString, 1773 IN LONG SourceStringLength, 1774 OUT PWSTR DestinationString, 1775 IN OUT PLONG DestinationStringLength); 1776 1777 NTSYSAPI 1778 NTSTATUS 1779 NTAPI 1780 RtlIdnToUnicode( 1781 IN ULONG Flags, 1782 IN PCWSTR SourceString, 1783 IN LONG SourceStringLength, 1784 OUT PWSTR DestinationString, 1785 IN OUT PLONG DestinationStringLength); 1786 1787 NTSYSAPI 1788 NTSTATUS 1789 NTAPI 1790 RtlIdnToNameprepUnicode( 1791 IN ULONG Flags, 1792 IN PCWSTR SourceString, 1793 IN LONG SourceStringLength, 1794 OUT PWSTR DestinationString, 1795 IN OUT PLONG DestinationStringLength); 1796 1797 NTSYSAPI 1798 NTSTATUS 1799 NTAPI 1800 RtlCreateServiceSid( 1801 IN PUNICODE_STRING ServiceName, 1802 OUT PSID ServiceSid, 1803 IN OUT PULONG ServiceSidLength); 1804 1805 NTSYSAPI 1806 LONG 1807 NTAPI 1808 RtlCompareAltitudes( 1809 IN PCUNICODE_STRING Altitude1, 1810 IN PCUNICODE_STRING Altitude2); 1811 1812 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 1813 1814 #if (NTDDI_VERSION >= NTDDI_WIN7) 1815 1816 NTSYSAPI 1817 NTSTATUS 1818 NTAPI 1819 RtlUnicodeToUTF8N( 1820 OUT PCHAR UTF8StringDestination, 1821 IN ULONG UTF8StringMaxByteCount, 1822 OUT PULONG UTF8StringActualByteCount, 1823 IN PCWCH UnicodeStringSource, 1824 IN ULONG UnicodeStringByteCount); 1825 1826 NTSYSAPI 1827 NTSTATUS 1828 NTAPI 1829 RtlUTF8ToUnicodeN( 1830 OUT PWSTR UnicodeStringDestination, 1831 IN ULONG UnicodeStringMaxByteCount, 1832 OUT PULONG UnicodeStringActualByteCount, 1833 IN PCCH UTF8StringSource, 1834 IN ULONG UTF8StringByteCount); 1835 1836 NTSYSAPI 1837 NTSTATUS 1838 NTAPI 1839 RtlReplaceSidInSd( 1840 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, 1841 IN PSID OldSid, 1842 IN PSID NewSid, 1843 OUT ULONG *NumChanges); 1844 1845 NTSYSAPI 1846 NTSTATUS 1847 NTAPI 1848 RtlCreateVirtualAccountSid( 1849 IN PCUNICODE_STRING Name, 1850 IN ULONG BaseSubAuthority, 1851 OUT PSID Sid, 1852 IN OUT PULONG SidLength); 1853 1854 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 1855 1856 1857 #if defined(_AMD64_) || defined(_IA64_) 1858 1859 1860 #endif /* defined(_AMD64_) || defined(_IA64_) */ 1861 1862 1863 1864 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1 1865 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2 1866 1867 #define RtlUnicodeStringToOemSize(STRING) (NLS_MB_OEM_CODE_PAGE_TAG ? \ 1868 RtlxUnicodeStringToOemSize(STRING) : \ 1869 ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \ 1870 ) 1871 1872 #define RtlOemStringToUnicodeSize(STRING) ( \ 1873 NLS_MB_OEM_CODE_PAGE_TAG ? \ 1874 RtlxOemStringToUnicodeSize(STRING) : \ 1875 ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \ 1876 ) 1877 1878 #define RtlOemStringToCountedUnicodeSize(STRING) ( \ 1879 (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \ 1880 ) 1881 1882 #define RtlOffsetToPointer(B,O) ((PCHAR)(((PCHAR)(B)) + ((ULONG_PTR)(O)))) 1883 #define RtlPointerToOffset(B,P) ((ULONG)(((PCHAR)(P)) - ((PCHAR)(B)))) 1884 1885 typedef enum _OBJECT_INFORMATION_CLASS { 1886 ObjectBasicInformation = 0, 1887 ObjectNameInformation = 1, /* FIXME, not in WDK */ 1888 ObjectTypeInformation = 2, 1889 ObjectTypesInformation = 3, /* FIXME, not in WDK */ 1890 ObjectHandleFlagInformation = 4, /* FIXME, not in WDK */ 1891 ObjectSessionInformation = 5, /* FIXME, not in WDK */ 1892 MaxObjectInfoClass /* FIXME, not in WDK */ 1893 } OBJECT_INFORMATION_CLASS; 1894 1895 NTSYSCALLAPI 1896 NTSTATUS 1897 NTAPI 1898 NtQueryObject( 1899 IN HANDLE Handle OPTIONAL, 1900 IN OBJECT_INFORMATION_CLASS ObjectInformationClass, 1901 OUT PVOID ObjectInformation OPTIONAL, 1902 IN ULONG ObjectInformationLength, 1903 OUT PULONG ReturnLength OPTIONAL); 1904 1905 #if (NTDDI_VERSION >= NTDDI_WIN2K) 1906 1907 NTSYSCALLAPI 1908 NTSTATUS 1909 NTAPI 1910 NtOpenThreadToken( 1911 IN HANDLE ThreadHandle, 1912 IN ACCESS_MASK DesiredAccess, 1913 IN BOOLEAN OpenAsSelf, 1914 OUT PHANDLE TokenHandle); 1915 1916 NTSYSCALLAPI 1917 NTSTATUS 1918 NTAPI 1919 NtOpenProcessToken( 1920 IN HANDLE ProcessHandle, 1921 IN ACCESS_MASK DesiredAccess, 1922 OUT PHANDLE TokenHandle); 1923 1924 NTSYSCALLAPI 1925 NTSTATUS 1926 NTAPI 1927 NtQueryInformationToken( 1928 IN HANDLE TokenHandle, 1929 IN TOKEN_INFORMATION_CLASS TokenInformationClass, 1930 OUT PVOID TokenInformation OPTIONAL, 1931 IN ULONG TokenInformationLength, 1932 OUT PULONG ReturnLength); 1933 1934 NTSYSCALLAPI 1935 NTSTATUS 1936 NTAPI 1937 NtAdjustPrivilegesToken( 1938 IN HANDLE TokenHandle, 1939 IN BOOLEAN DisableAllPrivileges, 1940 IN PTOKEN_PRIVILEGES NewState OPTIONAL, 1941 IN ULONG BufferLength, 1942 OUT PTOKEN_PRIVILEGES PreviousState, 1943 OUT PULONG ReturnLength OPTIONAL); 1944 1945 NTSYSCALLAPI 1946 NTSTATUS 1947 NTAPI 1948 NtCreateFile( 1949 OUT PHANDLE FileHandle, 1950 IN ACCESS_MASK DesiredAccess, 1951 IN POBJECT_ATTRIBUTES ObjectAttributes, 1952 OUT PIO_STATUS_BLOCK IoStatusBlock, 1953 IN PLARGE_INTEGER AllocationSize OPTIONAL, 1954 IN ULONG FileAttributes, 1955 IN ULONG ShareAccess, 1956 IN ULONG CreateDisposition, 1957 IN ULONG CreateOptions, 1958 IN PVOID EaBuffer, 1959 IN ULONG EaLength); 1960 1961 NTSYSCALLAPI 1962 NTSTATUS 1963 NTAPI 1964 NtDeviceIoControlFile( 1965 IN HANDLE FileHandle, 1966 IN HANDLE Event OPTIONAL, 1967 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, 1968 IN PVOID ApcContext OPTIONAL, 1969 OUT PIO_STATUS_BLOCK IoStatusBlock, 1970 IN ULONG IoControlCode, 1971 IN PVOID InputBuffer OPTIONAL, 1972 IN ULONG InputBufferLength, 1973 OUT PVOID OutputBuffer OPTIONAL, 1974 IN ULONG OutputBufferLength); 1975 1976 NTSYSCALLAPI 1977 NTSTATUS 1978 NTAPI 1979 NtFsControlFile( 1980 IN HANDLE FileHandle, 1981 IN HANDLE Event OPTIONAL, 1982 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, 1983 IN PVOID ApcContext OPTIONAL, 1984 OUT PIO_STATUS_BLOCK IoStatusBlock, 1985 IN ULONG FsControlCode, 1986 IN PVOID InputBuffer OPTIONAL, 1987 IN ULONG InputBufferLength, 1988 OUT PVOID OutputBuffer OPTIONAL, 1989 IN ULONG OutputBufferLength); 1990 1991 NTSYSCALLAPI 1992 NTSTATUS 1993 NTAPI 1994 NtLockFile( 1995 IN HANDLE FileHandle, 1996 IN HANDLE Event OPTIONAL, 1997 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, 1998 IN PVOID ApcContext OPTIONAL, 1999 OUT PIO_STATUS_BLOCK IoStatusBlock, 2000 IN PLARGE_INTEGER ByteOffset, 2001 IN PLARGE_INTEGER Length, 2002 IN ULONG Key, 2003 IN BOOLEAN FailImmediately, 2004 IN BOOLEAN ExclusiveLock); 2005 2006 NTSYSCALLAPI 2007 NTSTATUS 2008 NTAPI 2009 NtOpenFile( 2010 OUT PHANDLE FileHandle, 2011 IN ACCESS_MASK DesiredAccess, 2012 IN POBJECT_ATTRIBUTES ObjectAttributes, 2013 OUT PIO_STATUS_BLOCK IoStatusBlock, 2014 IN ULONG ShareAccess, 2015 IN ULONG OpenOptions); 2016 2017 NTSYSCALLAPI 2018 NTSTATUS 2019 NTAPI 2020 NtQueryDirectoryFile( 2021 IN HANDLE FileHandle, 2022 IN HANDLE Event OPTIONAL, 2023 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, 2024 IN PVOID ApcContext OPTIONAL, 2025 OUT PIO_STATUS_BLOCK IoStatusBlock, 2026 OUT PVOID FileInformation, 2027 IN ULONG Length, 2028 IN FILE_INFORMATION_CLASS FileInformationClass, 2029 IN BOOLEAN ReturnSingleEntry, 2030 IN PUNICODE_STRING FileName OPTIONAL, 2031 IN BOOLEAN RestartScan); 2032 2033 NTSYSCALLAPI 2034 NTSTATUS 2035 NTAPI 2036 NtQueryInformationFile( 2037 IN HANDLE FileHandle, 2038 OUT PIO_STATUS_BLOCK IoStatusBlock, 2039 OUT PVOID FileInformation, 2040 IN ULONG Length, 2041 IN FILE_INFORMATION_CLASS FileInformationClass); 2042 2043 NTSYSCALLAPI 2044 NTSTATUS 2045 NTAPI 2046 NtQueryQuotaInformationFile( 2047 IN HANDLE FileHandle, 2048 OUT PIO_STATUS_BLOCK IoStatusBlock, 2049 OUT PVOID Buffer, 2050 IN ULONG Length, 2051 IN BOOLEAN ReturnSingleEntry, 2052 IN PVOID SidList, 2053 IN ULONG SidListLength, 2054 IN PSID StartSid OPTIONAL, 2055 IN BOOLEAN RestartScan); 2056 2057 NTSYSCALLAPI 2058 NTSTATUS 2059 NTAPI 2060 NtQueryVolumeInformationFile( 2061 IN HANDLE FileHandle, 2062 OUT PIO_STATUS_BLOCK IoStatusBlock, 2063 OUT PVOID FsInformation, 2064 IN ULONG Length, 2065 IN FS_INFORMATION_CLASS FsInformationClass); 2066 2067 NTSYSCALLAPI 2068 NTSTATUS 2069 NTAPI 2070 NtReadFile( 2071 IN HANDLE FileHandle, 2072 IN HANDLE Event OPTIONAL, 2073 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, 2074 IN PVOID ApcContext OPTIONAL, 2075 OUT PIO_STATUS_BLOCK IoStatusBlock, 2076 OUT PVOID Buffer, 2077 IN ULONG Length, 2078 IN PLARGE_INTEGER ByteOffset OPTIONAL, 2079 IN PULONG Key OPTIONAL); 2080 2081 NTSYSCALLAPI 2082 NTSTATUS 2083 NTAPI 2084 NtSetInformationFile( 2085 IN HANDLE FileHandle, 2086 OUT PIO_STATUS_BLOCK IoStatusBlock, 2087 IN PVOID FileInformation, 2088 IN ULONG Length, 2089 IN FILE_INFORMATION_CLASS FileInformationClass); 2090 2091 NTSYSCALLAPI 2092 NTSTATUS 2093 NTAPI 2094 NtSetQuotaInformationFile( 2095 IN HANDLE FileHandle, 2096 OUT PIO_STATUS_BLOCK IoStatusBlock, 2097 IN PVOID Buffer, 2098 IN ULONG Length); 2099 2100 NTSYSCALLAPI 2101 NTSTATUS 2102 NTAPI 2103 NtSetVolumeInformationFile( 2104 IN HANDLE FileHandle, 2105 OUT PIO_STATUS_BLOCK IoStatusBlock, 2106 IN PVOID FsInformation, 2107 IN ULONG Length, 2108 IN FS_INFORMATION_CLASS FsInformationClass); 2109 2110 NTSYSCALLAPI 2111 NTSTATUS 2112 NTAPI 2113 NtWriteFile( 2114 IN HANDLE FileHandle, 2115 IN HANDLE Event OPTIONAL, 2116 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, 2117 IN PVOID ApcContext OPTIONAL, 2118 OUT PIO_STATUS_BLOCK IoStatusBlock, 2119 IN PVOID Buffer, 2120 IN ULONG Length, 2121 IN PLARGE_INTEGER ByteOffset OPTIONAL, 2122 IN PULONG Key OPTIONAL); 2123 2124 NTSYSCALLAPI 2125 NTSTATUS 2126 NTAPI 2127 NtUnlockFile( 2128 IN HANDLE FileHandle, 2129 OUT PIO_STATUS_BLOCK IoStatusBlock, 2130 IN PLARGE_INTEGER ByteOffset, 2131 IN PLARGE_INTEGER Length, 2132 IN ULONG Key); 2133 2134 NTSYSCALLAPI 2135 NTSTATUS 2136 NTAPI 2137 NtSetSecurityObject( 2138 IN HANDLE Handle, 2139 IN SECURITY_INFORMATION SecurityInformation, 2140 IN PSECURITY_DESCRIPTOR SecurityDescriptor); 2141 2142 NTSYSCALLAPI 2143 NTSTATUS 2144 NTAPI 2145 NtQuerySecurityObject( 2146 IN HANDLE Handle, 2147 IN SECURITY_INFORMATION SecurityInformation, 2148 OUT PSECURITY_DESCRIPTOR SecurityDescriptor, 2149 IN ULONG Length, 2150 OUT PULONG LengthNeeded); 2151 2152 NTSYSCALLAPI 2153 NTSTATUS 2154 NTAPI 2155 NtClose( 2156 IN HANDLE Handle); 2157 2158 NTSYSCALLAPI 2159 NTSTATUS 2160 NTAPI 2161 NtAllocateVirtualMemory( 2162 IN HANDLE ProcessHandle, 2163 IN OUT PVOID *BaseAddress, 2164 IN ULONG_PTR ZeroBits, 2165 IN OUT PSIZE_T RegionSize, 2166 IN ULONG AllocationType, 2167 IN ULONG Protect); 2168 2169 NTSYSCALLAPI 2170 NTSTATUS 2171 NTAPI 2172 NtFreeVirtualMemory( 2173 IN HANDLE ProcessHandle, 2174 IN OUT PVOID *BaseAddress, 2175 IN OUT PSIZE_T RegionSize, 2176 IN ULONG FreeType); 2177 2178 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */ 2179 2180 #if (NTDDI_VERSION >= NTDDI_WINXP) 2181 2182 NTSYSCALLAPI 2183 NTSTATUS 2184 NTAPI 2185 NtOpenThreadTokenEx( 2186 IN HANDLE ThreadHandle, 2187 IN ACCESS_MASK DesiredAccess, 2188 IN BOOLEAN OpenAsSelf, 2189 IN ULONG HandleAttributes, 2190 OUT PHANDLE TokenHandle); 2191 2192 NTSYSCALLAPI 2193 NTSTATUS 2194 NTAPI 2195 NtOpenProcessTokenEx( 2196 IN HANDLE ProcessHandle, 2197 IN ACCESS_MASK DesiredAccess, 2198 IN ULONG HandleAttributes, 2199 OUT PHANDLE TokenHandle); 2200 2201 NTSYSAPI 2202 NTSTATUS 2203 NTAPI 2204 NtOpenJobObjectToken( 2205 IN HANDLE JobHandle, 2206 IN ACCESS_MASK DesiredAccess, 2207 OUT PHANDLE TokenHandle); 2208 2209 NTSYSCALLAPI 2210 NTSTATUS 2211 NTAPI 2212 NtDuplicateToken( 2213 IN HANDLE ExistingTokenHandle, 2214 IN ACCESS_MASK DesiredAccess, 2215 IN POBJECT_ATTRIBUTES ObjectAttributes, 2216 IN BOOLEAN EffectiveOnly, 2217 IN TOKEN_TYPE TokenType, 2218 OUT PHANDLE NewTokenHandle); 2219 2220 NTSYSCALLAPI 2221 NTSTATUS 2222 NTAPI 2223 NtFilterToken( 2224 IN HANDLE ExistingTokenHandle, 2225 IN ULONG Flags, 2226 IN PTOKEN_GROUPS SidsToDisable OPTIONAL, 2227 IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL, 2228 IN PTOKEN_GROUPS RestrictedSids OPTIONAL, 2229 OUT PHANDLE NewTokenHandle); 2230 2231 NTSYSCALLAPI 2232 NTSTATUS 2233 NTAPI 2234 NtImpersonateAnonymousToken( 2235 IN HANDLE ThreadHandle); 2236 2237 NTSYSCALLAPI 2238 NTSTATUS 2239 NTAPI 2240 NtSetInformationToken( 2241 IN HANDLE TokenHandle, 2242 IN TOKEN_INFORMATION_CLASS TokenInformationClass, 2243 IN PVOID TokenInformation, 2244 IN ULONG TokenInformationLength); 2245 2246 NTSYSCALLAPI 2247 NTSTATUS 2248 NTAPI 2249 NtAdjustGroupsToken( 2250 IN HANDLE TokenHandle, 2251 IN BOOLEAN ResetToDefault, 2252 IN PTOKEN_GROUPS NewState OPTIONAL, 2253 IN ULONG BufferLength OPTIONAL, 2254 OUT PTOKEN_GROUPS PreviousState, 2255 OUT PULONG ReturnLength); 2256 2257 NTSYSCALLAPI 2258 NTSTATUS 2259 NTAPI 2260 NtPrivilegeCheck( 2261 IN HANDLE ClientToken, 2262 IN OUT PPRIVILEGE_SET RequiredPrivileges, 2263 OUT PBOOLEAN Result); 2264 2265 NTSYSCALLAPI 2266 NTSTATUS 2267 NTAPI 2268 NtAccessCheckAndAuditAlarm( 2269 IN PUNICODE_STRING SubsystemName, 2270 IN PVOID HandleId OPTIONAL, 2271 IN PUNICODE_STRING ObjectTypeName, 2272 IN PUNICODE_STRING ObjectName, 2273 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 2274 IN ACCESS_MASK DesiredAccess, 2275 IN PGENERIC_MAPPING GenericMapping, 2276 IN BOOLEAN ObjectCreation, 2277 OUT PACCESS_MASK GrantedAccess, 2278 OUT PNTSTATUS AccessStatus, 2279 OUT PBOOLEAN GenerateOnClose); 2280 2281 NTSYSCALLAPI 2282 NTSTATUS 2283 NTAPI 2284 NtAccessCheckByTypeAndAuditAlarm( 2285 IN PUNICODE_STRING SubsystemName, 2286 IN PVOID HandleId, 2287 IN PUNICODE_STRING ObjectTypeName, 2288 IN PUNICODE_STRING ObjectName, 2289 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 2290 IN PSID PrincipalSelfSid OPTIONAL, 2291 IN ACCESS_MASK DesiredAccess, 2292 IN AUDIT_EVENT_TYPE AuditType, 2293 IN ULONG Flags, 2294 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL, 2295 IN ULONG ObjectTypeLength, 2296 IN PGENERIC_MAPPING GenericMapping, 2297 IN BOOLEAN ObjectCreation, 2298 OUT PACCESS_MASK GrantedAccess, 2299 OUT PNTSTATUS AccessStatus, 2300 OUT PBOOLEAN GenerateOnClose); 2301 2302 NTSYSCALLAPI 2303 NTSTATUS 2304 NTAPI 2305 NtAccessCheckByTypeResultListAndAuditAlarm( 2306 IN PUNICODE_STRING SubsystemName, 2307 IN PVOID HandleId OPTIONAL, 2308 IN PUNICODE_STRING ObjectTypeName, 2309 IN PUNICODE_STRING ObjectName, 2310 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 2311 IN PSID PrincipalSelfSid OPTIONAL, 2312 IN ACCESS_MASK DesiredAccess, 2313 IN AUDIT_EVENT_TYPE AuditType, 2314 IN ULONG Flags, 2315 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL, 2316 IN ULONG ObjectTypeLength, 2317 IN PGENERIC_MAPPING GenericMapping, 2318 IN BOOLEAN ObjectCreation, 2319 OUT PACCESS_MASK GrantedAccess, 2320 OUT PNTSTATUS AccessStatus, 2321 OUT PBOOLEAN GenerateOnClose); 2322 2323 NTSTATUS 2324 NTAPI 2325 NtAccessCheckByTypeResultListAndAuditAlarmByHandle( 2326 IN PUNICODE_STRING SubsystemName, 2327 IN PVOID HandleId OPTIONAL, 2328 IN HANDLE ClientToken, 2329 IN PUNICODE_STRING ObjectTypeName, 2330 IN PUNICODE_STRING ObjectName, 2331 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 2332 IN PSID PrincipalSelfSid OPTIONAL, 2333 IN ACCESS_MASK DesiredAccess, 2334 IN AUDIT_EVENT_TYPE AuditType, 2335 IN ULONG Flags, 2336 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL, 2337 IN ULONG ObjectTypeLength, 2338 IN PGENERIC_MAPPING GenericMapping, 2339 IN BOOLEAN ObjectCreation, 2340 OUT PACCESS_MASK GrantedAccess, 2341 OUT PNTSTATUS AccessStatus, 2342 OUT PBOOLEAN GenerateOnClose); 2343 2344 NTSYSCALLAPI 2345 NTSTATUS 2346 NTAPI 2347 NtOpenObjectAuditAlarm( 2348 IN PUNICODE_STRING SubsystemName, 2349 IN PVOID HandleId OPTIONAL, 2350 IN PUNICODE_STRING ObjectTypeName, 2351 IN PUNICODE_STRING ObjectName, 2352 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL, 2353 IN HANDLE ClientToken, 2354 IN ACCESS_MASK DesiredAccess, 2355 IN ACCESS_MASK GrantedAccess, 2356 IN PPRIVILEGE_SET Privileges OPTIONAL, 2357 IN BOOLEAN ObjectCreation, 2358 IN BOOLEAN AccessGranted, 2359 OUT PBOOLEAN GenerateOnClose); 2360 2361 NTSYSCALLAPI 2362 NTSTATUS 2363 NTAPI 2364 NtPrivilegeObjectAuditAlarm( 2365 IN PUNICODE_STRING SubsystemName, 2366 IN PVOID HandleId OPTIONAL, 2367 IN HANDLE ClientToken, 2368 IN ACCESS_MASK DesiredAccess, 2369 IN PPRIVILEGE_SET Privileges, 2370 IN BOOLEAN AccessGranted); 2371 2372 NTSYSCALLAPI 2373 NTSTATUS 2374 NTAPI 2375 NtCloseObjectAuditAlarm( 2376 IN PUNICODE_STRING SubsystemName, 2377 IN PVOID HandleId OPTIONAL, 2378 IN BOOLEAN GenerateOnClose); 2379 2380 NTSYSCALLAPI 2381 NTSTATUS 2382 NTAPI 2383 NtDeleteObjectAuditAlarm( 2384 IN PUNICODE_STRING SubsystemName, 2385 IN PVOID HandleId OPTIONAL, 2386 IN BOOLEAN GenerateOnClose); 2387 2388 NTSYSCALLAPI 2389 NTSTATUS 2390 NTAPI 2391 NtPrivilegedServiceAuditAlarm( 2392 IN PUNICODE_STRING SubsystemName, 2393 IN PUNICODE_STRING ServiceName, 2394 IN HANDLE ClientToken, 2395 IN PPRIVILEGE_SET Privileges, 2396 IN BOOLEAN AccessGranted); 2397 2398 NTSYSCALLAPI 2399 NTSTATUS 2400 NTAPI 2401 NtSetInformationThread( 2402 IN HANDLE ThreadHandle, 2403 IN THREADINFOCLASS ThreadInformationClass, 2404 IN PVOID ThreadInformation, 2405 IN ULONG ThreadInformationLength); 2406 2407 NTSYSCALLAPI 2408 NTSTATUS 2409 NTAPI 2410 NtCreateSection( 2411 OUT PHANDLE SectionHandle, 2412 IN ACCESS_MASK DesiredAccess, 2413 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, 2414 IN PLARGE_INTEGER MaximumSize OPTIONAL, 2415 IN ULONG SectionPageProtection, 2416 IN ULONG AllocationAttributes, 2417 IN HANDLE FileHandle OPTIONAL); 2418 2419 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */ 2420 2421 #define COMPRESSION_FORMAT_NONE (0x0000) 2422 #define COMPRESSION_FORMAT_DEFAULT (0x0001) 2423 #define COMPRESSION_FORMAT_LZNT1 (0x0002) 2424 #define COMPRESSION_ENGINE_STANDARD (0x0000) 2425 #define COMPRESSION_ENGINE_MAXIMUM (0x0100) 2426 #define COMPRESSION_ENGINE_HIBER (0x0200) 2427 2428 #define MAX_UNICODE_STACK_BUFFER_LENGTH 256 2429 2430 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3)) 2431 2432 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT 2433 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT 2434 2435 typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE; 2436 2437 typedef enum _SECURITY_LOGON_TYPE { 2438 UndefinedLogonType = 0, 2439 Interactive = 2, 2440 Network, 2441 Batch, 2442 Service, 2443 Proxy, 2444 Unlock, 2445 NetworkCleartext, 2446 NewCredentials, 2447 #if (_WIN32_WINNT >= 0x0501) 2448 RemoteInteractive, 2449 CachedInteractive, 2450 #endif 2451 #if (_WIN32_WINNT >= 0x0502) 2452 CachedRemoteInteractive, 2453 CachedUnlock 2454 #endif 2455 } SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE; 2456 2457 #ifndef _NTLSA_AUDIT_ 2458 #define _NTLSA_AUDIT_ 2459 2460 #ifndef GUID_DEFINED 2461 #include <guiddef.h> 2462 #endif 2463 2464 #endif /* _NTLSA_AUDIT_ */ 2465 2466 NTSTATUS 2467 NTAPI 2468 LsaRegisterLogonProcess( 2469 IN PLSA_STRING LogonProcessName, 2470 OUT PHANDLE LsaHandle, 2471 OUT PLSA_OPERATIONAL_MODE SecurityMode); 2472 2473 NTSTATUS 2474 NTAPI 2475 LsaLogonUser( 2476 IN HANDLE LsaHandle, 2477 IN PLSA_STRING OriginName, 2478 IN SECURITY_LOGON_TYPE LogonType, 2479 IN ULONG AuthenticationPackage, 2480 IN PVOID AuthenticationInformation, 2481 IN ULONG AuthenticationInformationLength, 2482 IN PTOKEN_GROUPS LocalGroups OPTIONAL, 2483 IN PTOKEN_SOURCE SourceContext, 2484 OUT PVOID *ProfileBuffer, 2485 OUT PULONG ProfileBufferLength, 2486 OUT PLUID LogonId, 2487 OUT PHANDLE Token, 2488 OUT PQUOTA_LIMITS Quotas, 2489 OUT PNTSTATUS SubStatus); 2490 2491 NTSTATUS 2492 NTAPI 2493 LsaFreeReturnBuffer( 2494 IN PVOID Buffer); 2495 2496 #ifndef _NTLSA_IFS_ 2497 #define _NTLSA_IFS_ 2498 #endif 2499 2500 #define MSV1_0_PACKAGE_NAME "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0" 2501 #define MSV1_0_PACKAGE_NAMEW L"MICROSOFT_AUTHENTICATION_PACKAGE_V1_0" 2502 #define MSV1_0_PACKAGE_NAMEW_LENGTH sizeof(MSV1_0_PACKAGE_NAMEW) - sizeof(WCHAR) 2503 2504 #define MSV1_0_SUBAUTHENTICATION_KEY "SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1_0" 2505 #define MSV1_0_SUBAUTHENTICATION_VALUE "Auth" 2506 2507 #define MSV1_0_CHALLENGE_LENGTH 8 2508 #define MSV1_0_USER_SESSION_KEY_LENGTH 16 2509 #define MSV1_0_LANMAN_SESSION_KEY_LENGTH 8 2510 2511 #define MSV1_0_CLEARTEXT_PASSWORD_ALLOWED 0x02 2512 #define MSV1_0_UPDATE_LOGON_STATISTICS 0x04 2513 #define MSV1_0_RETURN_USER_PARAMETERS 0x08 2514 #define MSV1_0_DONT_TRY_GUEST_ACCOUNT 0x10 2515 #define MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT 0x20 2516 #define MSV1_0_RETURN_PASSWORD_EXPIRY 0x40 2517 #define MSV1_0_USE_CLIENT_CHALLENGE 0x80 2518 #define MSV1_0_TRY_GUEST_ACCOUNT_ONLY 0x100 2519 #define MSV1_0_RETURN_PROFILE_PATH 0x200 2520 #define MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY 0x400 2521 #define MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT 0x800 2522 2523 #define MSV1_0_DISABLE_PERSONAL_FALLBACK 0x00001000 2524 #define MSV1_0_ALLOW_FORCE_GUEST 0x00002000 2525 2526 #if (_WIN32_WINNT >= 0x0502) 2527 #define MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED 0x00004000 2528 #define MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY 0x00008000 2529 #endif 2530 2531 #define MSV1_0_SUBAUTHENTICATION_DLL_EX 0x00100000 2532 #define MSV1_0_ALLOW_MSVCHAPV2 0x00010000 2533 2534 #if (_WIN32_WINNT >= 0x0600) 2535 #define MSV1_0_S4U2SELF 0x00020000 2536 #define MSV1_0_CHECK_LOGONHOURS_FOR_S4U 0x00040000 2537 #endif 2538 2539 #define MSV1_0_SUBAUTHENTICATION_DLL 0xFF000000 2540 #define MSV1_0_SUBAUTHENTICATION_DLL_SHIFT 24 2541 #define MSV1_0_MNS_LOGON 0x01000000 2542 2543 #define MSV1_0_SUBAUTHENTICATION_DLL_RAS 2 2544 #define MSV1_0_SUBAUTHENTICATION_DLL_IIS 132 2545 2546 #define LOGON_GUEST 0x01 2547 #define LOGON_NOENCRYPTION 0x02 2548 #define LOGON_CACHED_ACCOUNT 0x04 2549 #define LOGON_USED_LM_PASSWORD 0x08 2550 #define LOGON_EXTRA_SIDS 0x20 2551 #define LOGON_SUBAUTH_SESSION_KEY 0x40 2552 #define LOGON_SERVER_TRUST_ACCOUNT 0x80 2553 #define LOGON_NTLMV2_ENABLED 0x100 2554 #define LOGON_RESOURCE_GROUPS 0x200 2555 #define LOGON_PROFILE_PATH_RETURNED 0x400 2556 #define LOGON_NT_V2 0x800 2557 #define LOGON_LM_V2 0x1000 2558 #define LOGON_NTLM_V2 0x2000 2559 2560 #if (_WIN32_WINNT >= 0x0600) 2561 2562 #define LOGON_OPTIMIZED 0x4000 2563 #define LOGON_WINLOGON 0x8000 2564 #define LOGON_PKINIT 0x10000 2565 #define LOGON_NO_OPTIMIZED 0x20000 2566 2567 #endif 2568 2569 #define MSV1_0_SUBAUTHENTICATION_FLAGS 0xFF000000 2570 2571 #define LOGON_GRACE_LOGON 0x01000000 2572 2573 #define MSV1_0_OWF_PASSWORD_LENGTH 16 2574 #define MSV1_0_CRED_LM_PRESENT 0x1 2575 #define MSV1_0_CRED_NT_PRESENT 0x2 2576 #define MSV1_0_CRED_VERSION 0 2577 2578 #define MSV1_0_NTLM3_RESPONSE_LENGTH 16 2579 #define MSV1_0_NTLM3_OWF_LENGTH 16 2580 2581 #if (_WIN32_WINNT == 0x0500) 2582 #define MSV1_0_MAX_NTLM3_LIFE 1800 2583 #else 2584 #define MSV1_0_MAX_NTLM3_LIFE 129600 2585 #endif 2586 #define MSV1_0_MAX_AVL_SIZE 64000 2587 2588 #if (_WIN32_WINNT >= 0x0501) 2589 2590 #define MSV1_0_AV_FLAG_FORCE_GUEST 0x00000001 2591 2592 #if (_WIN32_WINNT >= 0x0600) 2593 #define MSV1_0_AV_FLAG_MIC_HANDSHAKE_MESSAGES 0x00000002 2594 #endif 2595 2596 #endif 2597 2598 #define MSV1_0_NTLM3_INPUT_LENGTH (sizeof(MSV1_0_NTLM3_RESPONSE) - MSV1_0_NTLM3_RESPONSE_LENGTH) 2599 2600 #if(_WIN32_WINNT >= 0x0502) 2601 #define MSV1_0_NTLM3_MIN_NT_RESPONSE_LENGTH RTL_SIZEOF_THROUGH_FIELD(MSV1_0_NTLM3_RESPONSE, AvPairsOff) 2602 #endif 2603 2604 #define USE_PRIMARY_PASSWORD 0x01 2605 #define RETURN_PRIMARY_USERNAME 0x02 2606 #define RETURN_PRIMARY_LOGON_DOMAINNAME 0x04 2607 #define RETURN_NON_NT_USER_SESSION_KEY 0x08 2608 #define GENERATE_CLIENT_CHALLENGE 0x10 2609 #define GCR_NTLM3_PARMS 0x20 2610 #define GCR_TARGET_INFO 0x40 2611 #define RETURN_RESERVED_PARAMETER 0x80 2612 #define GCR_ALLOW_NTLM 0x100 2613 #define GCR_USE_OEM_SET 0x200 2614 #define GCR_MACHINE_CREDENTIAL 0x400 2615 #define GCR_USE_OWF_PASSWORD 0x800 2616 #define GCR_ALLOW_LM 0x1000 2617 #define GCR_ALLOW_NO_TARGET 0x2000 2618 2619 typedef enum _MSV1_0_LOGON_SUBMIT_TYPE { 2620 MsV1_0InteractiveLogon = 2, 2621 MsV1_0Lm20Logon, 2622 MsV1_0NetworkLogon, 2623 MsV1_0SubAuthLogon, 2624 MsV1_0WorkstationUnlockLogon = 7, 2625 MsV1_0S4ULogon = 12, 2626 MsV1_0VirtualLogon = 82 2627 } MSV1_0_LOGON_SUBMIT_TYPE, *PMSV1_0_LOGON_SUBMIT_TYPE; 2628 2629 typedef enum _MSV1_0_PROFILE_BUFFER_TYPE { 2630 MsV1_0InteractiveProfile = 2, 2631 MsV1_0Lm20LogonProfile, 2632 MsV1_0SmartCardProfile 2633 } MSV1_0_PROFILE_BUFFER_TYPE, *PMSV1_0_PROFILE_BUFFER_TYPE; 2634 2635 typedef struct _MSV1_0_INTERACTIVE_LOGON { 2636 MSV1_0_LOGON_SUBMIT_TYPE MessageType; 2637 UNICODE_STRING LogonDomainName; 2638 UNICODE_STRING UserName; 2639 UNICODE_STRING Password; 2640 } MSV1_0_INTERACTIVE_LOGON, *PMSV1_0_INTERACTIVE_LOGON; 2641 2642 typedef struct _MSV1_0_INTERACTIVE_PROFILE { 2643 MSV1_0_PROFILE_BUFFER_TYPE MessageType; 2644 USHORT LogonCount; 2645 USHORT BadPasswordCount; 2646 LARGE_INTEGER LogonTime; 2647 LARGE_INTEGER LogoffTime; 2648 LARGE_INTEGER KickOffTime; 2649 LARGE_INTEGER PasswordLastSet; 2650 LARGE_INTEGER PasswordCanChange; 2651 LARGE_INTEGER PasswordMustChange; 2652 UNICODE_STRING LogonScript; 2653 UNICODE_STRING HomeDirectory; 2654 UNICODE_STRING FullName; 2655 UNICODE_STRING ProfilePath; 2656 UNICODE_STRING HomeDirectoryDrive; 2657 UNICODE_STRING LogonServer; 2658 ULONG UserFlags; 2659 } MSV1_0_INTERACTIVE_PROFILE, *PMSV1_0_INTERACTIVE_PROFILE; 2660 2661 typedef struct _MSV1_0_LM20_LOGON { 2662 MSV1_0_LOGON_SUBMIT_TYPE MessageType; 2663 UNICODE_STRING LogonDomainName; 2664 UNICODE_STRING UserName; 2665 UNICODE_STRING Workstation; 2666 UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH]; 2667 STRING CaseSensitiveChallengeResponse; 2668 STRING CaseInsensitiveChallengeResponse; 2669 ULONG ParameterControl; 2670 } MSV1_0_LM20_LOGON, * PMSV1_0_LM20_LOGON; 2671 2672 typedef struct _MSV1_0_SUBAUTH_LOGON { 2673 MSV1_0_LOGON_SUBMIT_TYPE MessageType; 2674 UNICODE_STRING LogonDomainName; 2675 UNICODE_STRING UserName; 2676 UNICODE_STRING Workstation; 2677 UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH]; 2678 STRING AuthenticationInfo1; 2679 STRING AuthenticationInfo2; 2680 ULONG ParameterControl; 2681 ULONG SubAuthPackageId; 2682 } MSV1_0_SUBAUTH_LOGON, * PMSV1_0_SUBAUTH_LOGON; 2683 2684 #if (_WIN32_WINNT >= 0x0600) 2685 2686 #define MSV1_0_S4U_LOGON_FLAG_CHECK_LOGONHOURS 0x2 2687 2688 typedef struct _MSV1_0_S4U_LOGON { 2689 MSV1_0_LOGON_SUBMIT_TYPE MessageType; 2690 ULONG Flags; 2691 UNICODE_STRING UserPrincipalName; 2692 UNICODE_STRING DomainName; 2693 } MSV1_0_S4U_LOGON, *PMSV1_0_S4U_LOGON; 2694 2695 #endif 2696 2697 typedef struct _MSV1_0_LM20_LOGON_PROFILE { 2698 MSV1_0_PROFILE_BUFFER_TYPE MessageType; 2699 LARGE_INTEGER KickOffTime; 2700 LARGE_INTEGER LogoffTime; 2701 ULONG UserFlags; 2702 UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH]; 2703 UNICODE_STRING LogonDomainName; 2704 UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH]; 2705 UNICODE_STRING LogonServer; 2706 UNICODE_STRING UserParameters; 2707 } MSV1_0_LM20_LOGON_PROFILE, * PMSV1_0_LM20_LOGON_PROFILE; 2708 2709 typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL { 2710 ULONG Version; 2711 ULONG Flags; 2712 UCHAR LmPassword[MSV1_0_OWF_PASSWORD_LENGTH]; 2713 UCHAR NtPassword[MSV1_0_OWF_PASSWORD_LENGTH]; 2714 } MSV1_0_SUPPLEMENTAL_CREDENTIAL, *PMSV1_0_SUPPLEMENTAL_CREDENTIAL; 2715 2716 typedef struct _MSV1_0_NTLM3_RESPONSE { 2717 UCHAR Response[MSV1_0_NTLM3_RESPONSE_LENGTH]; 2718 UCHAR RespType; 2719 UCHAR HiRespType; 2720 USHORT Flags; 2721 ULONG MsgWord; 2722 ULONGLONG TimeStamp; 2723 UCHAR ChallengeFromClient[MSV1_0_CHALLENGE_LENGTH]; 2724 ULONG AvPairsOff; 2725 UCHAR Buffer[1]; 2726 } MSV1_0_NTLM3_RESPONSE, *PMSV1_0_NTLM3_RESPONSE; 2727 2728 typedef enum _MSV1_0_AVID { 2729 MsvAvEOL, 2730 MsvAvNbComputerName, 2731 MsvAvNbDomainName, 2732 MsvAvDnsComputerName, 2733 MsvAvDnsDomainName, 2734 #if (_WIN32_WINNT >= 0x0501) 2735 MsvAvDnsTreeName, 2736 MsvAvFlags, 2737 #if (_WIN32_WINNT >= 0x0600) 2738 MsvAvTimestamp, 2739 MsvAvRestrictions, 2740 MsvAvTargetName, 2741 MsvAvChannelBindings, 2742 #endif 2743 #endif 2744 } MSV1_0_AVID; 2745 2746 typedef struct _MSV1_0_AV_PAIR { 2747 USHORT AvId; 2748 USHORT AvLen; 2749 } MSV1_0_AV_PAIR, *PMSV1_0_AV_PAIR; 2750 2751 typedef enum _MSV1_0_PROTOCOL_MESSAGE_TYPE { 2752 MsV1_0Lm20ChallengeRequest = 0, 2753 MsV1_0Lm20GetChallengeResponse, 2754 MsV1_0EnumerateUsers, 2755 MsV1_0GetUserInfo, 2756 MsV1_0ReLogonUsers, 2757 MsV1_0ChangePassword, 2758 MsV1_0ChangeCachedPassword, 2759 MsV1_0GenericPassthrough, 2760 MsV1_0CacheLogon, 2761 MsV1_0SubAuth, 2762 MsV1_0DeriveCredential, 2763 MsV1_0CacheLookup, 2764 #if (_WIN32_WINNT >= 0x0501) 2765 MsV1_0SetProcessOption, 2766 #endif 2767 #if (_WIN32_WINNT >= 0x0600) 2768 MsV1_0ConfigLocalAliases, 2769 MsV1_0ClearCachedCredentials, 2770 #endif 2771 } MSV1_0_PROTOCOL_MESSAGE_TYPE, *PMSV1_0_PROTOCOL_MESSAGE_TYPE; 2772 2773 typedef struct _MSV1_0_LM20_CHALLENGE_REQUEST { 2774 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; 2775 } MSV1_0_LM20_CHALLENGE_REQUEST, *PMSV1_0_LM20_CHALLENGE_REQUEST; 2776 2777 typedef struct _MSV1_0_LM20_CHALLENGE_RESPONSE { 2778 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; 2779 UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH]; 2780 } MSV1_0_LM20_CHALLENGE_RESPONSE, *PMSV1_0_LM20_CHALLENGE_RESPONSE; 2781 2782 typedef struct _MSV1_0_GETCHALLENRESP_REQUEST_V1 { 2783 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; 2784 ULONG ParameterControl; 2785 LUID LogonId; 2786 UNICODE_STRING Password; 2787 UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH]; 2788 } MSV1_0_GETCHALLENRESP_REQUEST_V1, *PMSV1_0_GETCHALLENRESP_REQUEST_V1; 2789 2790 typedef struct _MSV1_0_GETCHALLENRESP_REQUEST { 2791 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; 2792 ULONG ParameterControl; 2793 LUID LogonId; 2794 UNICODE_STRING Password; 2795 UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH]; 2796 UNICODE_STRING UserName; 2797 UNICODE_STRING LogonDomainName; 2798 UNICODE_STRING ServerName; 2799 } MSV1_0_GETCHALLENRESP_REQUEST, *PMSV1_0_GETCHALLENRESP_REQUEST; 2800 2801 typedef struct _MSV1_0_GETCHALLENRESP_RESPONSE { 2802 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; 2803 STRING CaseSensitiveChallengeResponse; 2804 STRING CaseInsensitiveChallengeResponse; 2805 UNICODE_STRING UserName; 2806 UNICODE_STRING LogonDomainName; 2807 UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH]; 2808 UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH]; 2809 } MSV1_0_GETCHALLENRESP_RESPONSE, *PMSV1_0_GETCHALLENRESP_RESPONSE; 2810 2811 typedef struct _MSV1_0_ENUMUSERS_REQUEST { 2812 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; 2813 } MSV1_0_ENUMUSERS_REQUEST, *PMSV1_0_ENUMUSERS_REQUEST; 2814 2815 typedef struct _MSV1_0_ENUMUSERS_RESPONSE { 2816 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; 2817 ULONG NumberOfLoggedOnUsers; 2818 PLUID LogonIds; 2819 PULONG EnumHandles; 2820 } MSV1_0_ENUMUSERS_RESPONSE, *PMSV1_0_ENUMUSERS_RESPONSE; 2821 2822 typedef struct _MSV1_0_GETUSERINFO_REQUEST { 2823 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; 2824 LUID LogonId; 2825 } MSV1_0_GETUSERINFO_REQUEST, *PMSV1_0_GETUSERINFO_REQUEST; 2826 2827 typedef struct _MSV1_0_GETUSERINFO_RESPONSE { 2828 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; 2829 PSID UserSid; 2830 UNICODE_STRING UserName; 2831 UNICODE_STRING LogonDomainName; 2832 UNICODE_STRING LogonServer; 2833 SECURITY_LOGON_TYPE LogonType; 2834 } MSV1_0_GETUSERINFO_RESPONSE, *PMSV1_0_GETUSERINFO_RESPONSE; 2835 2836 2837 2838 #define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007 2839 #define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008 2840 #define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009 2841 2842 /* also in winnt.h */ 2843 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001 2844 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002 2845 #define FILE_NOTIFY_CHANGE_NAME 0x00000003 2846 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004 2847 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008 2848 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010 2849 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020 2850 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040 2851 #define FILE_NOTIFY_CHANGE_EA 0x00000080 2852 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100 2853 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200 2854 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400 2855 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800 2856 #define FILE_NOTIFY_VALID_MASK 0x00000fff 2857 2858 #define FILE_ACTION_ADDED 0x00000001 2859 #define FILE_ACTION_REMOVED 0x00000002 2860 #define FILE_ACTION_MODIFIED 0x00000003 2861 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004 2862 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005 2863 #define FILE_ACTION_ADDED_STREAM 0x00000006 2864 #define FILE_ACTION_REMOVED_STREAM 0x00000007 2865 #define FILE_ACTION_MODIFIED_STREAM 0x00000008 2866 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009 2867 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A 2868 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B 2869 /* end winnt.h */ 2870 2871 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000 2872 #define FILE_PIPE_MESSAGE_TYPE 0x00000001 2873 2874 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000 2875 #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002 2876 2877 #define FILE_PIPE_TYPE_VALID_MASK 0x00000003 2878 2879 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000 2880 #define FILE_PIPE_MESSAGE_MODE 0x00000001 2881 2882 #define FILE_PIPE_QUEUE_OPERATION 0x00000000 2883 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001 2884 2885 #define FILE_PIPE_INBOUND 0x00000000 2886 #define FILE_PIPE_OUTBOUND 0x00000001 2887 #define FILE_PIPE_FULL_DUPLEX 0x00000002 2888 2889 #define FILE_PIPE_DISCONNECTED_STATE 0x00000001 2890 #define FILE_PIPE_LISTENING_STATE 0x00000002 2891 #define FILE_PIPE_CONNECTED_STATE 0x00000003 2892 #define FILE_PIPE_CLOSING_STATE 0x00000004 2893 2894 #define FILE_PIPE_CLIENT_END 0x00000000 2895 #define FILE_PIPE_SERVER_END 0x00000001 2896 2897 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001 2898 #define FILE_CASE_PRESERVED_NAMES 0x00000002 2899 #define FILE_UNICODE_ON_DISK 0x00000004 2900 #define FILE_PERSISTENT_ACLS 0x00000008 2901 #define FILE_FILE_COMPRESSION 0x00000010 2902 #define FILE_VOLUME_QUOTAS 0x00000020 2903 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040 2904 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080 2905 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100 2906 #define FILE_VOLUME_IS_COMPRESSED 0x00008000 2907 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000 2908 #define FILE_SUPPORTS_ENCRYPTION 0x00020000 2909 #define FILE_NAMED_STREAMS 0x00040000 2910 #define FILE_READ_ONLY_VOLUME 0x00080000 2911 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000 2912 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000 2913 #define FILE_SUPPORTS_HARD_LINKS 0x00400000 2914 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000 2915 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000 2916 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000 2917 2918 #define FILE_NEED_EA 0x00000080 2919 2920 #define FILE_EA_TYPE_BINARY 0xfffe 2921 #define FILE_EA_TYPE_ASCII 0xfffd 2922 #define FILE_EA_TYPE_BITMAP 0xfffb 2923 #define FILE_EA_TYPE_METAFILE 0xfffa 2924 #define FILE_EA_TYPE_ICON 0xfff9 2925 #define FILE_EA_TYPE_EA 0xffee 2926 #define FILE_EA_TYPE_MVMT 0xffdf 2927 #define FILE_EA_TYPE_MVST 0xffde 2928 #define FILE_EA_TYPE_ASN1 0xffdd 2929 #define FILE_EA_TYPE_FAMILY_IDS 0xff01 2930 2931 typedef struct _FILE_NOTIFY_INFORMATION { 2932 ULONG NextEntryOffset; 2933 ULONG Action; 2934 ULONG FileNameLength; 2935 WCHAR FileName[1]; 2936 } FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION; 2937 2938 typedef struct _FILE_DIRECTORY_INFORMATION { 2939 ULONG NextEntryOffset; 2940 ULONG FileIndex; 2941 LARGE_INTEGER CreationTime; 2942 LARGE_INTEGER LastAccessTime; 2943 LARGE_INTEGER LastWriteTime; 2944 LARGE_INTEGER ChangeTime; 2945 LARGE_INTEGER EndOfFile; 2946 LARGE_INTEGER AllocationSize; 2947 ULONG FileAttributes; 2948 ULONG FileNameLength; 2949 WCHAR FileName[1]; 2950 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION; 2951 2952 typedef struct _FILE_FULL_DIR_INFORMATION { 2953 ULONG NextEntryOffset; 2954 ULONG FileIndex; 2955 LARGE_INTEGER CreationTime; 2956 LARGE_INTEGER LastAccessTime; 2957 LARGE_INTEGER LastWriteTime; 2958 LARGE_INTEGER ChangeTime; 2959 LARGE_INTEGER EndOfFile; 2960 LARGE_INTEGER AllocationSize; 2961 ULONG FileAttributes; 2962 ULONG FileNameLength; 2963 ULONG EaSize; 2964 WCHAR FileName[1]; 2965 } FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION; 2966 2967 typedef struct _FILE_ID_FULL_DIR_INFORMATION { 2968 ULONG NextEntryOffset; 2969 ULONG FileIndex; 2970 LARGE_INTEGER CreationTime; 2971 LARGE_INTEGER LastAccessTime; 2972 LARGE_INTEGER LastWriteTime; 2973 LARGE_INTEGER ChangeTime; 2974 LARGE_INTEGER EndOfFile; 2975 LARGE_INTEGER AllocationSize; 2976 ULONG FileAttributes; 2977 ULONG FileNameLength; 2978 ULONG EaSize; 2979 LARGE_INTEGER FileId; 2980 WCHAR FileName[1]; 2981 } FILE_ID_FULL_DIR_INFORMATION, *PFILE_ID_FULL_DIR_INFORMATION; 2982 2983 typedef struct _FILE_BOTH_DIR_INFORMATION { 2984 ULONG NextEntryOffset; 2985 ULONG FileIndex; 2986 LARGE_INTEGER CreationTime; 2987 LARGE_INTEGER LastAccessTime; 2988 LARGE_INTEGER LastWriteTime; 2989 LARGE_INTEGER ChangeTime; 2990 LARGE_INTEGER EndOfFile; 2991 LARGE_INTEGER AllocationSize; 2992 ULONG FileAttributes; 2993 ULONG FileNameLength; 2994 ULONG EaSize; 2995 CCHAR ShortNameLength; 2996 WCHAR ShortName[12]; 2997 WCHAR FileName[1]; 2998 } FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION; 2999 3000 typedef struct _FILE_ID_BOTH_DIR_INFORMATION { 3001 ULONG NextEntryOffset; 3002 ULONG FileIndex; 3003 LARGE_INTEGER CreationTime; 3004 LARGE_INTEGER LastAccessTime; 3005 LARGE_INTEGER LastWriteTime; 3006 LARGE_INTEGER ChangeTime; 3007 LARGE_INTEGER EndOfFile; 3008 LARGE_INTEGER AllocationSize; 3009 ULONG FileAttributes; 3010 ULONG FileNameLength; 3011 ULONG EaSize; 3012 CCHAR ShortNameLength; 3013 WCHAR ShortName[12]; 3014 LARGE_INTEGER FileId; 3015 WCHAR FileName[1]; 3016 } FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION; 3017 3018 typedef struct _FILE_NAMES_INFORMATION { 3019 ULONG NextEntryOffset; 3020 ULONG FileIndex; 3021 ULONG FileNameLength; 3022 WCHAR FileName[1]; 3023 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION; 3024 3025 typedef struct _FILE_ID_GLOBAL_TX_DIR_INFORMATION { 3026 ULONG NextEntryOffset; 3027 ULONG FileIndex; 3028 LARGE_INTEGER CreationTime; 3029 LARGE_INTEGER LastAccessTime; 3030 LARGE_INTEGER LastWriteTime; 3031 LARGE_INTEGER ChangeTime; 3032 LARGE_INTEGER EndOfFile; 3033 LARGE_INTEGER AllocationSize; 3034 ULONG FileAttributes; 3035 ULONG FileNameLength; 3036 LARGE_INTEGER FileId; 3037 GUID LockingTransactionId; 3038 ULONG TxInfoFlags; 3039 WCHAR FileName[1]; 3040 } FILE_ID_GLOBAL_TX_DIR_INFORMATION, *PFILE_ID_GLOBAL_TX_DIR_INFORMATION; 3041 3042 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_WRITELOCKED 0x00000001 3043 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_TO_TX 0x00000002 3044 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_OUTSIDE_TX 0x00000004 3045 3046 typedef struct _FILE_OBJECTID_INFORMATION { 3047 LONGLONG FileReference; 3048 UCHAR ObjectId[16]; 3049 _ANONYMOUS_UNION union { 3050 _ANONYMOUS_STRUCT struct { 3051 UCHAR BirthVolumeId[16]; 3052 UCHAR BirthObjectId[16]; 3053 UCHAR DomainId[16]; 3054 } DUMMYSTRUCTNAME; 3055 UCHAR ExtendedInfo[48]; 3056 } DUMMYUNIONNAME; 3057 } FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION; 3058 3059 #define ANSI_DOS_STAR ('<') 3060 #define ANSI_DOS_QM ('>') 3061 #define ANSI_DOS_DOT ('"') 3062 3063 #define DOS_STAR (L'<') 3064 #define DOS_QM (L'>') 3065 #define DOS_DOT (L'"') 3066 3067 typedef struct _FILE_INTERNAL_INFORMATION { 3068 LARGE_INTEGER IndexNumber; 3069 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION; 3070 3071 typedef struct _FILE_EA_INFORMATION { 3072 ULONG EaSize; 3073 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION; 3074 3075 typedef struct _FILE_ACCESS_INFORMATION { 3076 ACCESS_MASK AccessFlags; 3077 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION; 3078 3079 typedef struct _FILE_MODE_INFORMATION { 3080 ULONG Mode; 3081 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION; 3082 3083 typedef struct _FILE_ALL_INFORMATION { 3084 FILE_BASIC_INFORMATION BasicInformation; 3085 FILE_STANDARD_INFORMATION StandardInformation; 3086 FILE_INTERNAL_INFORMATION InternalInformation; 3087 FILE_EA_INFORMATION EaInformation; 3088 FILE_ACCESS_INFORMATION AccessInformation; 3089 FILE_POSITION_INFORMATION PositionInformation; 3090 FILE_MODE_INFORMATION ModeInformation; 3091 FILE_ALIGNMENT_INFORMATION AlignmentInformation; 3092 FILE_NAME_INFORMATION NameInformation; 3093 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION; 3094 3095 typedef struct _FILE_ALLOCATION_INFORMATION { 3096 LARGE_INTEGER AllocationSize; 3097 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION; 3098 3099 typedef struct _FILE_COMPRESSION_INFORMATION { 3100 LARGE_INTEGER CompressedFileSize; 3101 USHORT CompressionFormat; 3102 UCHAR CompressionUnitShift; 3103 UCHAR ChunkShift; 3104 UCHAR ClusterShift; 3105 UCHAR Reserved[3]; 3106 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION; 3107 3108 typedef struct _FILE_LINK_INFORMATION { 3109 BOOLEAN ReplaceIfExists; 3110 HANDLE RootDirectory; 3111 ULONG FileNameLength; 3112 WCHAR FileName[1]; 3113 } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION; 3114 3115 typedef struct _FILE_MOVE_CLUSTER_INFORMATION { 3116 ULONG ClusterCount; 3117 HANDLE RootDirectory; 3118 ULONG FileNameLength; 3119 WCHAR FileName[1]; 3120 } FILE_MOVE_CLUSTER_INFORMATION, *PFILE_MOVE_CLUSTER_INFORMATION; 3121 3122 typedef struct _FILE_RENAME_INFORMATION { 3123 BOOLEAN ReplaceIfExists; 3124 HANDLE RootDirectory; 3125 ULONG FileNameLength; 3126 WCHAR FileName[1]; 3127 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION; 3128 3129 typedef struct _FILE_STREAM_INFORMATION { 3130 ULONG NextEntryOffset; 3131 ULONG StreamNameLength; 3132 LARGE_INTEGER StreamSize; 3133 LARGE_INTEGER StreamAllocationSize; 3134 WCHAR StreamName[1]; 3135 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION; 3136 3137 typedef struct _FILE_TRACKING_INFORMATION { 3138 HANDLE DestinationFile; 3139 ULONG ObjectInformationLength; 3140 CHAR ObjectInformation[1]; 3141 } FILE_TRACKING_INFORMATION, *PFILE_TRACKING_INFORMATION; 3142 3143 typedef struct _FILE_COMPLETION_INFORMATION { 3144 HANDLE Port; 3145 PVOID Key; 3146 } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION; 3147 3148 typedef struct _FILE_PIPE_INFORMATION { 3149 ULONG ReadMode; 3150 ULONG CompletionMode; 3151 } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION; 3152 3153 typedef struct _FILE_PIPE_LOCAL_INFORMATION { 3154 ULONG NamedPipeType; 3155 ULONG NamedPipeConfiguration; 3156 ULONG MaximumInstances; 3157 ULONG CurrentInstances; 3158 ULONG InboundQuota; 3159 ULONG ReadDataAvailable; 3160 ULONG OutboundQuota; 3161 ULONG WriteQuotaAvailable; 3162 ULONG NamedPipeState; 3163 ULONG NamedPipeEnd; 3164 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; 3165 3166 typedef struct _FILE_PIPE_REMOTE_INFORMATION { 3167 LARGE_INTEGER CollectDataTime; 3168 ULONG MaximumCollectionCount; 3169 } FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION; 3170 3171 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION { 3172 ULONG MaximumMessageSize; 3173 ULONG MailslotQuota; 3174 ULONG NextMessageSize; 3175 ULONG MessagesAvailable; 3176 LARGE_INTEGER ReadTimeout; 3177 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION; 3178 3179 typedef struct _FILE_MAILSLOT_SET_INFORMATION { 3180 PLARGE_INTEGER ReadTimeout; 3181 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION; 3182 3183 typedef struct _FILE_REPARSE_POINT_INFORMATION { 3184 LONGLONG FileReference; 3185 ULONG Tag; 3186 } FILE_REPARSE_POINT_INFORMATION, *PFILE_REPARSE_POINT_INFORMATION; 3187 3188 typedef struct _FILE_LINK_ENTRY_INFORMATION { 3189 ULONG NextEntryOffset; 3190 LONGLONG ParentFileId; 3191 ULONG FileNameLength; 3192 WCHAR FileName[1]; 3193 } FILE_LINK_ENTRY_INFORMATION, *PFILE_LINK_ENTRY_INFORMATION; 3194 3195 typedef struct _FILE_LINKS_INFORMATION { 3196 ULONG BytesNeeded; 3197 ULONG EntriesReturned; 3198 FILE_LINK_ENTRY_INFORMATION Entry; 3199 } FILE_LINKS_INFORMATION, *PFILE_LINKS_INFORMATION; 3200 3201 typedef struct _FILE_NETWORK_PHYSICAL_NAME_INFORMATION { 3202 ULONG FileNameLength; 3203 WCHAR FileName[1]; 3204 } FILE_NETWORK_PHYSICAL_NAME_INFORMATION, *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION; 3205 3206 typedef struct _FILE_STANDARD_LINK_INFORMATION { 3207 ULONG NumberOfAccessibleLinks; 3208 ULONG TotalNumberOfLinks; 3209 BOOLEAN DeletePending; 3210 BOOLEAN Directory; 3211 } FILE_STANDARD_LINK_INFORMATION, *PFILE_STANDARD_LINK_INFORMATION; 3212 3213 typedef struct _FILE_GET_EA_INFORMATION { 3214 ULONG NextEntryOffset; 3215 UCHAR EaNameLength; 3216 CHAR EaName[1]; 3217 } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION; 3218 3219 #define REMOTE_PROTOCOL_FLAG_LOOPBACK 0x00000001 3220 #define REMOTE_PROTOCOL_FLAG_OFFLINE 0x00000002 3221 3222 typedef struct _FILE_REMOTE_PROTOCOL_INFORMATION { 3223 USHORT StructureVersion; 3224 USHORT StructureSize; 3225 ULONG Protocol; 3226 USHORT ProtocolMajorVersion; 3227 USHORT ProtocolMinorVersion; 3228 USHORT ProtocolRevision; 3229 USHORT Reserved; 3230 ULONG Flags; 3231 struct { 3232 ULONG Reserved[8]; 3233 } GenericReserved; 3234 struct { 3235 ULONG Reserved[16]; 3236 } ProtocolSpecificReserved; 3237 } FILE_REMOTE_PROTOCOL_INFORMATION, *PFILE_REMOTE_PROTOCOL_INFORMATION; 3238 3239 typedef struct _FILE_GET_QUOTA_INFORMATION { 3240 ULONG NextEntryOffset; 3241 ULONG SidLength; 3242 SID Sid; 3243 } FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION; 3244 3245 typedef struct _FILE_QUOTA_INFORMATION { 3246 ULONG NextEntryOffset; 3247 ULONG SidLength; 3248 LARGE_INTEGER ChangeTime; 3249 LARGE_INTEGER QuotaUsed; 3250 LARGE_INTEGER QuotaThreshold; 3251 LARGE_INTEGER QuotaLimit; 3252 SID Sid; 3253 } FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION; 3254 3255 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION { 3256 ULONG FileSystemAttributes; 3257 ULONG MaximumComponentNameLength; 3258 ULONG FileSystemNameLength; 3259 WCHAR FileSystemName[1]; 3260 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION; 3261 3262 typedef struct _FILE_FS_DRIVER_PATH_INFORMATION { 3263 BOOLEAN DriverInPath; 3264 ULONG DriverNameLength; 3265 WCHAR DriverName[1]; 3266 } FILE_FS_DRIVER_PATH_INFORMATION, *PFILE_FS_DRIVER_PATH_INFORMATION; 3267 3268 typedef struct _FILE_FS_VOLUME_FLAGS_INFORMATION { 3269 ULONG Flags; 3270 } FILE_FS_VOLUME_FLAGS_INFORMATION, *PFILE_FS_VOLUME_FLAGS_INFORMATION; 3271 3272 #define FILE_VC_QUOTA_NONE 0x00000000 3273 #define FILE_VC_QUOTA_TRACK 0x00000001 3274 #define FILE_VC_QUOTA_ENFORCE 0x00000002 3275 #define FILE_VC_QUOTA_MASK 0x00000003 3276 #define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008 3277 #define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010 3278 #define FILE_VC_LOG_QUOTA_LIMIT 0x00000020 3279 #define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040 3280 #define FILE_VC_LOG_VOLUME_LIMIT 0x00000080 3281 #define FILE_VC_QUOTAS_INCOMPLETE 0x00000100 3282 #define FILE_VC_QUOTAS_REBUILDING 0x00000200 3283 #define FILE_VC_VALID_MASK 0x000003ff 3284 3285 typedef struct _FILE_FS_CONTROL_INFORMATION { 3286 LARGE_INTEGER FreeSpaceStartFiltering; 3287 LARGE_INTEGER FreeSpaceThreshold; 3288 LARGE_INTEGER FreeSpaceStopFiltering; 3289 LARGE_INTEGER DefaultQuotaThreshold; 3290 LARGE_INTEGER DefaultQuotaLimit; 3291 ULONG FileSystemControlFlags; 3292 } FILE_FS_CONTROL_INFORMATION, *PFILE_FS_CONTROL_INFORMATION; 3293 3294 #ifndef _FILESYSTEMFSCTL_ 3295 #define _FILESYSTEMFSCTL_ 3296 3297 #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) 3298 #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS) 3299 #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS) 3300 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS) 3301 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS) 3302 #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS) 3303 #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS) 3304 #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS) 3305 #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) 3306 #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS) 3307 #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS) 3308 #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS) 3309 #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS) 3310 #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS) 3311 #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) 3312 #define FSCTL_SET_BOOTLOADER_ACCESSED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS) 3313 3314 #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS) 3315 #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS) 3316 #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS) 3317 #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS) 3318 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS) 3319 3320 #if (_WIN32_WINNT >= 0x0400) 3321 3322 #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS) 3323 #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS) 3324 #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS) 3325 #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS) 3326 #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS) 3327 #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS) 3328 #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS) 3329 3330 #endif 3331 3332 #if (_WIN32_WINNT >= 0x0500) 3333 3334 #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS) 3335 #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA) 3336 #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS) 3337 #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA) 3338 #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA) 3339 #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS) 3340 #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA) 3341 #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_READ_DATA) 3342 #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA) 3343 #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_READ_DATA) 3344 #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA) 3345 #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS) 3346 #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA) 3347 #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA) 3348 #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA) 3349 #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA) 3350 #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS) 3351 #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS) 3352 #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_ANY_ACCESS) 3353 #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_ANY_ACCESS) 3354 #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_READ_DATA) 3355 #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_READ_DATA) 3356 #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_READ_DATA) 3357 #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS) 3358 #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS) 3359 #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS) 3360 #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS) 3361 #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS) 3362 #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) 3363 #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS) 3364 #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA) 3365 #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 3366 3367 #endif 3368 3369 #if (_WIN32_WINNT >= 0x0600) 3370 3371 #define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA) 3372 #define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA) 3373 #define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS) 3374 #define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS) 3375 #define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 3376 #define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA) 3377 #define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA) 3378 #define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA) 3379 #define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA) 3380 #define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA) 3381 #define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA) 3382 #define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA) 3383 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA) 3384 #define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA) 3385 #define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA) 3386 #define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA) 3387 #define FSCTL_TXFS_SAVEPOINT_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 94, METHOD_BUFFERED, FILE_WRITE_DATA) 3388 #define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA) 3389 #define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA) 3390 #define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 3391 #define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS) 3392 #define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS) 3393 #define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS) 3394 #define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS) 3395 #define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS) 3396 #define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) 3397 #define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS) 3398 #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS) 3399 3400 #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES \ 3401 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA) 3402 #define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA) 3403 #define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS) 3404 #define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS) 3405 #define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS) 3406 3407 #endif 3408 3409 #if (_WIN32_WINNT >= 0x0601) 3410 3411 #define FSCTL_QUERY_DEPENDENT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 124, METHOD_BUFFERED, FILE_ANY_ACCESS) 3412 #define FSCTL_SD_GLOBAL_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 125, METHOD_BUFFERED, FILE_ANY_ACCESS) 3413 #define FSCTL_LOOKUP_STREAM_FROM_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 127, METHOD_BUFFERED, FILE_ANY_ACCESS) 3414 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS) 3415 #define FSCTL_FILE_TYPE_NOTIFICATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS) 3416 #define FSCTL_GET_BOOT_AREA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 140, METHOD_BUFFERED, FILE_ANY_ACCESS) 3417 #define FSCTL_GET_RETRIEVAL_POINTER_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 141, METHOD_BUFFERED, FILE_ANY_ACCESS) 3418 #define FSCTL_SET_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS) 3419 #define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS) 3420 3421 #define FSCTL_REQUEST_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS) 3422 3423 #define FSCTL_CSV_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS) 3424 #define FSCTL_IS_CSV_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS) 3425 3426 #define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 147, METHOD_BUFFERED, FILE_ANY_ACCESS) 3427 #define FSCTL_CSV_GET_VOLUME_PATH_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 148, METHOD_BUFFERED, FILE_ANY_ACCESS) 3428 #define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS) 3429 #define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS) 3430 #define FSCTL_IS_FILE_ON_CSV_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS) 3431 3432 typedef struct _CSV_NAMESPACE_INFO { 3433 ULONG Version; 3434 ULONG DeviceNumber; 3435 LARGE_INTEGER StartingOffset; 3436 ULONG SectorSize; 3437 } CSV_NAMESPACE_INFO, *PCSV_NAMESPACE_INFO; 3438 3439 #define CSV_NAMESPACE_INFO_V1 (sizeof(CSV_NAMESPACE_INFO)) 3440 #define CSV_INVALID_DEVICE_NUMBER 0xFFFFFFFF 3441 3442 #endif 3443 3444 #define FSCTL_MARK_AS_SYSTEM_HIVE FSCTL_SET_BOOTLOADER_ACCESSED 3445 3446 typedef struct _PATHNAME_BUFFER { 3447 ULONG PathNameLength; 3448 WCHAR Name[1]; 3449 } PATHNAME_BUFFER, *PPATHNAME_BUFFER; 3450 3451 typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER { 3452 UCHAR First0x24BytesOfBootSector[0x24]; 3453 } FSCTL_QUERY_FAT_BPB_BUFFER, *PFSCTL_QUERY_FAT_BPB_BUFFER; 3454 3455 #if (_WIN32_WINNT >= 0x0400) 3456 3457 typedef struct _NTFS_VOLUME_DATA_BUFFER { 3458 LARGE_INTEGER VolumeSerialNumber; 3459 LARGE_INTEGER NumberSectors; 3460 LARGE_INTEGER TotalClusters; 3461 LARGE_INTEGER FreeClusters; 3462 LARGE_INTEGER TotalReserved; 3463 ULONG BytesPerSector; 3464 ULONG BytesPerCluster; 3465 ULONG BytesPerFileRecordSegment; 3466 ULONG ClustersPerFileRecordSegment; 3467 LARGE_INTEGER MftValidDataLength; 3468 LARGE_INTEGER MftStartLcn; 3469 LARGE_INTEGER Mft2StartLcn; 3470 LARGE_INTEGER MftZoneStart; 3471 LARGE_INTEGER MftZoneEnd; 3472 } NTFS_VOLUME_DATA_BUFFER, *PNTFS_VOLUME_DATA_BUFFER; 3473 3474 typedef struct _NTFS_EXTENDED_VOLUME_DATA { 3475 ULONG ByteCount; 3476 USHORT MajorVersion; 3477 USHORT MinorVersion; 3478 } NTFS_EXTENDED_VOLUME_DATA, *PNTFS_EXTENDED_VOLUME_DATA; 3479 3480 typedef struct _STARTING_LCN_INPUT_BUFFER { 3481 LARGE_INTEGER StartingLcn; 3482 } STARTING_LCN_INPUT_BUFFER, *PSTARTING_LCN_INPUT_BUFFER; 3483 3484 typedef struct _VOLUME_BITMAP_BUFFER { 3485 LARGE_INTEGER StartingLcn; 3486 LARGE_INTEGER BitmapSize; 3487 UCHAR Buffer[1]; 3488 } VOLUME_BITMAP_BUFFER, *PVOLUME_BITMAP_BUFFER; 3489 3490 typedef struct _STARTING_VCN_INPUT_BUFFER { 3491 LARGE_INTEGER StartingVcn; 3492 } STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER; 3493 3494 typedef struct _RETRIEVAL_POINTERS_BUFFER { 3495 ULONG ExtentCount; 3496 LARGE_INTEGER StartingVcn; 3497 struct { 3498 LARGE_INTEGER NextVcn; 3499 LARGE_INTEGER Lcn; 3500 } Extents[1]; 3501 } RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER; 3502 3503 typedef struct _NTFS_FILE_RECORD_INPUT_BUFFER { 3504 LARGE_INTEGER FileReferenceNumber; 3505 } NTFS_FILE_RECORD_INPUT_BUFFER, *PNTFS_FILE_RECORD_INPUT_BUFFER; 3506 3507 typedef struct _NTFS_FILE_RECORD_OUTPUT_BUFFER { 3508 LARGE_INTEGER FileReferenceNumber; 3509 ULONG FileRecordLength; 3510 UCHAR FileRecordBuffer[1]; 3511 } NTFS_FILE_RECORD_OUTPUT_BUFFER, *PNTFS_FILE_RECORD_OUTPUT_BUFFER; 3512 3513 typedef struct _MOVE_FILE_DATA { 3514 HANDLE FileHandle; 3515 LARGE_INTEGER StartingVcn; 3516 LARGE_INTEGER StartingLcn; 3517 ULONG ClusterCount; 3518 } MOVE_FILE_DATA, *PMOVE_FILE_DATA; 3519 3520 typedef struct _MOVE_FILE_RECORD_DATA { 3521 HANDLE FileHandle; 3522 LARGE_INTEGER SourceFileRecord; 3523 LARGE_INTEGER TargetFileRecord; 3524 } MOVE_FILE_RECORD_DATA, *PMOVE_FILE_RECORD_DATA; 3525 3526 #if defined(_WIN64) 3527 typedef struct _MOVE_FILE_DATA32 { 3528 UINT32 FileHandle; 3529 LARGE_INTEGER StartingVcn; 3530 LARGE_INTEGER StartingLcn; 3531 ULONG ClusterCount; 3532 } MOVE_FILE_DATA32, *PMOVE_FILE_DATA32; 3533 #endif 3534 3535 #endif /* (_WIN32_WINNT >= 0x0400) */ 3536 3537 #if (_WIN32_WINNT >= 0x0500) 3538 3539 typedef struct _FIND_BY_SID_DATA { 3540 ULONG Restart; 3541 SID Sid; 3542 } FIND_BY_SID_DATA, *PFIND_BY_SID_DATA; 3543 3544 typedef struct _FIND_BY_SID_OUTPUT { 3545 ULONG NextEntryOffset; 3546 ULONG FileIndex; 3547 ULONG FileNameLength; 3548 WCHAR FileName[1]; 3549 } FIND_BY_SID_OUTPUT, *PFIND_BY_SID_OUTPUT; 3550 3551 typedef struct _MFT_ENUM_DATA { 3552 ULONGLONG StartFileReferenceNumber; 3553 USN LowUsn; 3554 USN HighUsn; 3555 } MFT_ENUM_DATA, *PMFT_ENUM_DATA; 3556 3557 typedef struct _CREATE_USN_JOURNAL_DATA { 3558 ULONGLONG MaximumSize; 3559 ULONGLONG AllocationDelta; 3560 } CREATE_USN_JOURNAL_DATA, *PCREATE_USN_JOURNAL_DATA; 3561 3562 typedef struct _READ_USN_JOURNAL_DATA { 3563 USN StartUsn; 3564 ULONG ReasonMask; 3565 ULONG ReturnOnlyOnClose; 3566 ULONGLONG Timeout; 3567 ULONGLONG BytesToWaitFor; 3568 ULONGLONG UsnJournalID; 3569 } READ_USN_JOURNAL_DATA, *PREAD_USN_JOURNAL_DATA; 3570 3571 typedef struct _USN_RECORD { 3572 ULONG RecordLength; 3573 USHORT MajorVersion; 3574 USHORT MinorVersion; 3575 ULONGLONG FileReferenceNumber; 3576 ULONGLONG ParentFileReferenceNumber; 3577 USN Usn; 3578 LARGE_INTEGER TimeStamp; 3579 ULONG Reason; 3580 ULONG SourceInfo; 3581 ULONG SecurityId; 3582 ULONG FileAttributes; 3583 USHORT FileNameLength; 3584 USHORT FileNameOffset; 3585 WCHAR FileName[1]; 3586 } USN_RECORD, *PUSN_RECORD; 3587 3588 #define USN_PAGE_SIZE (0x1000) 3589 3590 #define USN_REASON_DATA_OVERWRITE (0x00000001) 3591 #define USN_REASON_DATA_EXTEND (0x00000002) 3592 #define USN_REASON_DATA_TRUNCATION (0x00000004) 3593 #define USN_REASON_NAMED_DATA_OVERWRITE (0x00000010) 3594 #define USN_REASON_NAMED_DATA_EXTEND (0x00000020) 3595 #define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040) 3596 #define USN_REASON_FILE_CREATE (0x00000100) 3597 #define USN_REASON_FILE_DELETE (0x00000200) 3598 #define USN_REASON_EA_CHANGE (0x00000400) 3599 #define USN_REASON_SECURITY_CHANGE (0x00000800) 3600 #define USN_REASON_RENAME_OLD_NAME (0x00001000) 3601 #define USN_REASON_RENAME_NEW_NAME (0x00002000) 3602 #define USN_REASON_INDEXABLE_CHANGE (0x00004000) 3603 #define USN_REASON_BASIC_INFO_CHANGE (0x00008000) 3604 #define USN_REASON_HARD_LINK_CHANGE (0x00010000) 3605 #define USN_REASON_COMPRESSION_CHANGE (0x00020000) 3606 #define USN_REASON_ENCRYPTION_CHANGE (0x00040000) 3607 #define USN_REASON_OBJECT_ID_CHANGE (0x00080000) 3608 #define USN_REASON_REPARSE_POINT_CHANGE (0x00100000) 3609 #define USN_REASON_STREAM_CHANGE (0x00200000) 3610 #define USN_REASON_TRANSACTED_CHANGE (0x00400000) 3611 #define USN_REASON_CLOSE (0x80000000) 3612 3613 typedef struct _USN_JOURNAL_DATA { 3614 ULONGLONG UsnJournalID; 3615 USN FirstUsn; 3616 USN NextUsn; 3617 USN LowestValidUsn; 3618 USN MaxUsn; 3619 ULONGLONG MaximumSize; 3620 ULONGLONG AllocationDelta; 3621 } USN_JOURNAL_DATA, *PUSN_JOURNAL_DATA; 3622 3623 typedef struct _DELETE_USN_JOURNAL_DATA { 3624 ULONGLONG UsnJournalID; 3625 ULONG DeleteFlags; 3626 } DELETE_USN_JOURNAL_DATA, *PDELETE_USN_JOURNAL_DATA; 3627 3628 #define USN_DELETE_FLAG_DELETE (0x00000001) 3629 #define USN_DELETE_FLAG_NOTIFY (0x00000002) 3630 #define USN_DELETE_VALID_FLAGS (0x00000003) 3631 3632 typedef struct _MARK_HANDLE_INFO { 3633 ULONG UsnSourceInfo; 3634 HANDLE VolumeHandle; 3635 ULONG HandleInfo; 3636 } MARK_HANDLE_INFO, *PMARK_HANDLE_INFO; 3637 3638 #if defined(_WIN64) 3639 typedef struct _MARK_HANDLE_INFO32 { 3640 ULONG UsnSourceInfo; 3641 UINT32 VolumeHandle; 3642 ULONG HandleInfo; 3643 } MARK_HANDLE_INFO32, *PMARK_HANDLE_INFO32; 3644 #endif 3645 3646 #define USN_SOURCE_DATA_MANAGEMENT (0x00000001) 3647 #define USN_SOURCE_AUXILIARY_DATA (0x00000002) 3648 #define USN_SOURCE_REPLICATION_MANAGEMENT (0x00000004) 3649 3650 #define MARK_HANDLE_PROTECT_CLUSTERS (0x00000001) 3651 #define MARK_HANDLE_TXF_SYSTEM_LOG (0x00000004) 3652 #define MARK_HANDLE_NOT_TXF_SYSTEM_LOG (0x00000008) 3653 3654 typedef struct _BULK_SECURITY_TEST_DATA { 3655 ACCESS_MASK DesiredAccess; 3656 ULONG SecurityIds[1]; 3657 } BULK_SECURITY_TEST_DATA, *PBULK_SECURITY_TEST_DATA; 3658 3659 #define VOLUME_IS_DIRTY (0x00000001) 3660 #define VOLUME_UPGRADE_SCHEDULED (0x00000002) 3661 #define VOLUME_SESSION_OPEN (0x00000004) 3662 3663 typedef struct _FILE_PREFETCH { 3664 ULONG Type; 3665 ULONG Count; 3666 ULONGLONG Prefetch[1]; 3667 } FILE_PREFETCH, *PFILE_PREFETCH; 3668 3669 typedef struct _FILE_PREFETCH_EX { 3670 ULONG Type; 3671 ULONG Count; 3672 PVOID Context; 3673 ULONGLONG Prefetch[1]; 3674 } FILE_PREFETCH_EX, *PFILE_PREFETCH_EX; 3675 3676 #define FILE_PREFETCH_TYPE_FOR_CREATE 0x1 3677 #define FILE_PREFETCH_TYPE_FOR_DIRENUM 0x2 3678 #define FILE_PREFETCH_TYPE_FOR_CREATE_EX 0x3 3679 #define FILE_PREFETCH_TYPE_FOR_DIRENUM_EX 0x4 3680 3681 #define FILE_PREFETCH_TYPE_MAX 0x4 3682 3683 typedef struct _FILE_OBJECTID_BUFFER { 3684 UCHAR ObjectId[16]; 3685 _ANONYMOUS_UNION union { 3686 _ANONYMOUS_STRUCT struct { 3687 UCHAR BirthVolumeId[16]; 3688 UCHAR BirthObjectId[16]; 3689 UCHAR DomainId[16]; 3690 } DUMMYSTRUCTNAME; 3691 UCHAR ExtendedInfo[48]; 3692 } DUMMYUNIONNAME; 3693 } FILE_OBJECTID_BUFFER, *PFILE_OBJECTID_BUFFER; 3694 3695 typedef struct _FILE_SET_SPARSE_BUFFER { 3696 BOOLEAN SetSparse; 3697 } FILE_SET_SPARSE_BUFFER, *PFILE_SET_SPARSE_BUFFER; 3698 3699 typedef struct _FILE_ZERO_DATA_INFORMATION { 3700 LARGE_INTEGER FileOffset; 3701 LARGE_INTEGER BeyondFinalZero; 3702 } FILE_ZERO_DATA_INFORMATION, *PFILE_ZERO_DATA_INFORMATION; 3703 3704 typedef struct _FILE_ALLOCATED_RANGE_BUFFER { 3705 LARGE_INTEGER FileOffset; 3706 LARGE_INTEGER Length; 3707 } FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER; 3708 3709 typedef struct _ENCRYPTION_BUFFER { 3710 ULONG EncryptionOperation; 3711 UCHAR Private[1]; 3712 } ENCRYPTION_BUFFER, *PENCRYPTION_BUFFER; 3713 3714 #define FILE_SET_ENCRYPTION 0x00000001 3715 #define FILE_CLEAR_ENCRYPTION 0x00000002 3716 #define STREAM_SET_ENCRYPTION 0x00000003 3717 #define STREAM_CLEAR_ENCRYPTION 0x00000004 3718 3719 #define MAXIMUM_ENCRYPTION_VALUE 0x00000004 3720 3721 typedef struct _DECRYPTION_STATUS_BUFFER { 3722 BOOLEAN NoEncryptedStreams; 3723 } DECRYPTION_STATUS_BUFFER, *PDECRYPTION_STATUS_BUFFER; 3724 3725 #define ENCRYPTION_FORMAT_DEFAULT (0x01) 3726 3727 #define COMPRESSION_FORMAT_SPARSE (0x4000) 3728 3729 typedef struct _REQUEST_RAW_ENCRYPTED_DATA { 3730 LONGLONG FileOffset; 3731 ULONG Length; 3732 } REQUEST_RAW_ENCRYPTED_DATA, *PREQUEST_RAW_ENCRYPTED_DATA; 3733 3734 typedef struct _ENCRYPTED_DATA_INFO { 3735 ULONGLONG StartingFileOffset; 3736 ULONG OutputBufferOffset; 3737 ULONG BytesWithinFileSize; 3738 ULONG BytesWithinValidDataLength; 3739 USHORT CompressionFormat; 3740 UCHAR DataUnitShift; 3741 UCHAR ChunkShift; 3742 UCHAR ClusterShift; 3743 UCHAR EncryptionFormat; 3744 USHORT NumberOfDataBlocks; 3745 ULONG DataBlockSize[ANYSIZE_ARRAY]; 3746 } ENCRYPTED_DATA_INFO, *PENCRYPTED_DATA_INFO; 3747 3748 typedef struct _PLEX_READ_DATA_REQUEST { 3749 LARGE_INTEGER ByteOffset; 3750 ULONG ByteLength; 3751 ULONG PlexNumber; 3752 } PLEX_READ_DATA_REQUEST, *PPLEX_READ_DATA_REQUEST; 3753 3754 typedef struct _SI_COPYFILE { 3755 ULONG SourceFileNameLength; 3756 ULONG DestinationFileNameLength; 3757 ULONG Flags; 3758 WCHAR FileNameBuffer[1]; 3759 } SI_COPYFILE, *PSI_COPYFILE; 3760 3761 #define COPYFILE_SIS_LINK 0x0001 3762 #define COPYFILE_SIS_REPLACE 0x0002 3763 #define COPYFILE_SIS_FLAGS 0x0003 3764 3765 #endif /* (_WIN32_WINNT >= 0x0500) */ 3766 3767 #if (_WIN32_WINNT >= 0x0600) 3768 3769 typedef struct _FILE_MAKE_COMPATIBLE_BUFFER { 3770 BOOLEAN CloseDisc; 3771 } FILE_MAKE_COMPATIBLE_BUFFER, *PFILE_MAKE_COMPATIBLE_BUFFER; 3772 3773 typedef struct _FILE_SET_DEFECT_MGMT_BUFFER { 3774 BOOLEAN Disable; 3775 } FILE_SET_DEFECT_MGMT_BUFFER, *PFILE_SET_DEFECT_MGMT_BUFFER; 3776 3777 typedef struct _FILE_QUERY_SPARING_BUFFER { 3778 ULONG SparingUnitBytes; 3779 BOOLEAN SoftwareSparing; 3780 ULONG TotalSpareBlocks; 3781 ULONG FreeSpareBlocks; 3782 } FILE_QUERY_SPARING_BUFFER, *PFILE_QUERY_SPARING_BUFFER; 3783 3784 typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER { 3785 LARGE_INTEGER DirectoryCount; 3786 LARGE_INTEGER FileCount; 3787 USHORT FsFormatMajVersion; 3788 USHORT FsFormatMinVersion; 3789 WCHAR FsFormatName[12]; 3790 LARGE_INTEGER FormatTime; 3791 LARGE_INTEGER LastUpdateTime; 3792 WCHAR CopyrightInfo[34]; 3793 WCHAR AbstractInfo[34]; 3794 WCHAR FormattingImplementationInfo[34]; 3795 WCHAR LastModifyingImplementationInfo[34]; 3796 } FILE_QUERY_ON_DISK_VOL_INFO_BUFFER, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER; 3797 3798 #define SET_REPAIR_ENABLED (0x00000001) 3799 #define SET_REPAIR_VOLUME_BITMAP_SCAN (0x00000002) 3800 #define SET_REPAIR_DELETE_CROSSLINK (0x00000004) 3801 #define SET_REPAIR_WARN_ABOUT_DATA_LOSS (0x00000008) 3802 #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT (0x00000010) 3803 #define SET_REPAIR_VALID_MASK (0x0000001F) 3804 3805 typedef enum _SHRINK_VOLUME_REQUEST_TYPES { 3806 ShrinkPrepare = 1, 3807 ShrinkCommit, 3808 ShrinkAbort 3809 } SHRINK_VOLUME_REQUEST_TYPES, *PSHRINK_VOLUME_REQUEST_TYPES; 3810 3811 typedef struct _SHRINK_VOLUME_INFORMATION { 3812 SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType; 3813 ULONGLONG Flags; 3814 LONGLONG NewNumberOfSectors; 3815 } SHRINK_VOLUME_INFORMATION, *PSHRINK_VOLUME_INFORMATION; 3816 3817 #define TXFS_RM_FLAG_LOGGING_MODE 0x00000001 3818 #define TXFS_RM_FLAG_RENAME_RM 0x00000002 3819 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004 3820 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008 3821 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010 3822 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020 3823 #define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040 3824 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080 3825 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100 3826 #define TXFS_RM_FLAG_GROW_LOG 0x00000400 3827 #define TXFS_RM_FLAG_SHRINK_LOG 0x00000800 3828 #define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000 3829 #define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000 3830 #define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000 3831 #define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000 3832 #define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000 3833 #define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000 3834 3835 #define TXFS_LOGGING_MODE_SIMPLE (0x0001) 3836 #define TXFS_LOGGING_MODE_FULL (0x0002) 3837 3838 #define TXFS_TRANSACTION_STATE_NONE 0x00 3839 #define TXFS_TRANSACTION_STATE_ACTIVE 0x01 3840 #define TXFS_TRANSACTION_STATE_PREPARED 0x02 3841 #define TXFS_TRANSACTION_STATE_NOTACTIVE 0x03 3842 3843 #define TXFS_MODIFY_RM_VALID_FLAGS (TXFS_RM_FLAG_LOGGING_MODE | \ 3844 TXFS_RM_FLAG_RENAME_RM | \ 3845 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \ 3846 TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \ 3847 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \ 3848 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \ 3849 TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \ 3850 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \ 3851 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \ 3852 TXFS_RM_FLAG_SHRINK_LOG | \ 3853 TXFS_RM_FLAG_GROW_LOG | \ 3854 TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE | \ 3855 TXFS_RM_FLAG_PRESERVE_CHANGES | \ 3856 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \ 3857 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \ 3858 TXFS_RM_FLAG_PREFER_CONSISTENCY | \ 3859 TXFS_RM_FLAG_PREFER_AVAILABILITY) 3860 3861 typedef struct _TXFS_MODIFY_RM { 3862 ULONG Flags; 3863 ULONG LogContainerCountMax; 3864 ULONG LogContainerCountMin; 3865 ULONG LogContainerCount; 3866 ULONG LogGrowthIncrement; 3867 ULONG LogAutoShrinkPercentage; 3868 ULONGLONG Reserved; 3869 USHORT LoggingMode; 3870 } TXFS_MODIFY_RM, *PTXFS_MODIFY_RM; 3871 3872 #define TXFS_RM_STATE_NOT_STARTED 0 3873 #define TXFS_RM_STATE_STARTING 1 3874 #define TXFS_RM_STATE_ACTIVE 2 3875 #define TXFS_RM_STATE_SHUTTING_DOWN 3 3876 3877 #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS \ 3878 (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \ 3879 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \ 3880 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \ 3881 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \ 3882 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \ 3883 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \ 3884 TXFS_RM_FLAG_PREFER_CONSISTENCY | \ 3885 TXFS_RM_FLAG_PREFER_AVAILABILITY) 3886 3887 typedef struct _TXFS_QUERY_RM_INFORMATION { 3888 ULONG BytesRequired; 3889 ULONGLONG TailLsn; 3890 ULONGLONG CurrentLsn; 3891 ULONGLONG ArchiveTailLsn; 3892 ULONGLONG LogContainerSize; 3893 LARGE_INTEGER HighestVirtualClock; 3894 ULONG LogContainerCount; 3895 ULONG LogContainerCountMax; 3896 ULONG LogContainerCountMin; 3897 ULONG LogGrowthIncrement; 3898 ULONG LogAutoShrinkPercentage; 3899 ULONG Flags; 3900 USHORT LoggingMode; 3901 USHORT Reserved; 3902 ULONG RmState; 3903 ULONGLONG LogCapacity; 3904 ULONGLONG LogFree; 3905 ULONGLONG TopsSize; 3906 ULONGLONG TopsUsed; 3907 ULONGLONG TransactionCount; 3908 ULONGLONG OnePCCount; 3909 ULONGLONG TwoPCCount; 3910 ULONGLONG NumberLogFileFull; 3911 ULONGLONG OldestTransactionAge; 3912 GUID RMName; 3913 ULONG TmLogPathOffset; 3914 } TXFS_QUERY_RM_INFORMATION, *PTXFS_QUERY_RM_INFORMATION; 3915 3916 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x01 3917 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x02 3918 3919 #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS \ 3920 (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN | \ 3921 TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK) 3922 3923 typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION { 3924 LARGE_INTEGER LastVirtualClock; 3925 ULONGLONG LastRedoLsn; 3926 ULONGLONG HighestRecoveryLsn; 3927 ULONG Flags; 3928 } TXFS_ROLLFORWARD_REDO_INFORMATION, *PTXFS_ROLLFORWARD_REDO_INFORMATION; 3929 3930 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001 3931 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002 3932 #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004 3933 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008 3934 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010 3935 #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020 3936 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040 3937 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080 3938 3939 #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200 3940 #define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400 3941 #define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800 3942 3943 #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000 3944 #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000 3945 3946 #define TXFS_START_RM_VALID_FLAGS \ 3947 (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \ 3948 TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \ 3949 TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE | \ 3950 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \ 3951 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \ 3952 TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \ 3953 TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT | \ 3954 TXFS_START_RM_FLAG_LOG_NO_CONTAINER