ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ntifs.h
Go to the documentation of this file.
00001 /*
00002  * ntifs.h
00003  *
00004  * Windows NT Filesystem Driver Developer Kit
00005  *
00006  * This file is part of the ReactOS DDK package.
00007  *
00008  * Contributors:
00009  *   Amine Khaldi
00010  *   Timo Kreuzer (timo.kreuzer@reactos.org)
00011  *
00012  * THIS SOFTWARE IS NOT COPYRIGHTED
00013  *
00014  * This source code is offered for use in the public domain. You may
00015  * use, modify or distribute it freely.
00016  *
00017  * This code is distributed in the hope that it will be useful but
00018  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00019  * DISCLAIMED. This includes but is not limited to warranties of
00020  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00021  *
00022  */
00023 
00024 #pragma once
00025 
00026 #define _NTIFS_INCLUDED_
00027 #define _GNU_NTIFS_
00028 
00029 #ifdef __cplusplus
00030 extern "C" {
00031 #endif
00032 
00033 /* Dependencies */
00034 #include <ntddk.h>
00035 #include <excpt.h>
00036 #include <ntdef.h>
00037 #include <ntnls.h>
00038 #include <ntstatus.h>
00039 #include <bugcodes.h>
00040 #include <ntiologc.h>
00041 
00042 
00043 #ifndef FlagOn
00044 #define FlagOn(_F,_SF)        ((_F) & (_SF))
00045 #endif
00046 
00047 #ifndef BooleanFlagOn
00048 #define BooleanFlagOn(F,SF)   ((BOOLEAN)(((F) & (SF)) != 0))
00049 #endif
00050 
00051 #ifndef SetFlag
00052 #define SetFlag(_F,_SF)       ((_F) |= (_SF))
00053 #endif
00054 
00055 #ifndef ClearFlag
00056 #define ClearFlag(_F,_SF)     ((_F) &= ~(_SF))
00057 #endif
00058 
00059 typedef UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;
00060 typedef STRING LSA_STRING, *PLSA_STRING;
00061 typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES;
00062 
00063 /******************************************************************************
00064  *                            Security Manager Types                          *
00065  ******************************************************************************/
00066 #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
00067 #define SID_IDENTIFIER_AUTHORITY_DEFINED
00068 typedef struct _SID_IDENTIFIER_AUTHORITY {
00069   UCHAR Value[6];
00070 } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
00071 #endif
00072 
00073 #ifndef SID_DEFINED
00074 #define SID_DEFINED
00075 typedef struct _SID {
00076   UCHAR Revision;
00077   UCHAR SubAuthorityCount;
00078   SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
00079 #ifdef MIDL_PASS
00080   [size_is(SubAuthorityCount)] ULONG SubAuthority[*];
00081 #else
00082   ULONG SubAuthority[ANYSIZE_ARRAY];
00083 #endif
00084 } SID, *PISID;
00085 #endif
00086 
00087 #define SID_REVISION                    1
00088 #define SID_MAX_SUB_AUTHORITIES         15
00089 #define SID_RECOMMENDED_SUB_AUTHORITIES 1
00090 
00091 #ifndef MIDL_PASS
00092 #define SECURITY_MAX_SID_SIZE (sizeof(SID) - sizeof(ULONG) + (SID_MAX_SUB_AUTHORITIES * sizeof(ULONG)))
00093 #endif
00094 
00095 typedef enum _SID_NAME_USE {
00096   SidTypeUser = 1,
00097   SidTypeGroup,
00098   SidTypeDomain,
00099   SidTypeAlias,
00100   SidTypeWellKnownGroup,
00101   SidTypeDeletedAccount,
00102   SidTypeInvalid,
00103   SidTypeUnknown,
00104   SidTypeComputer,
00105   SidTypeLabel
00106 } SID_NAME_USE, *PSID_NAME_USE;
00107 
00108 typedef struct _SID_AND_ATTRIBUTES {
00109 #ifdef MIDL_PASS
00110   PISID Sid;
00111 #else
00112   PSID Sid;
00113 #endif
00114   ULONG Attributes;
00115 } SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;
00116 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
00117 typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
00118 
00119 #define SID_HASH_SIZE 32
00120 typedef ULONG_PTR SID_HASH_ENTRY, *PSID_HASH_ENTRY;
00121 
00122 typedef struct _SID_AND_ATTRIBUTES_HASH {
00123   ULONG SidCount;
00124   PSID_AND_ATTRIBUTES SidAttr;
00125   SID_HASH_ENTRY Hash[SID_HASH_SIZE];
00126 } SID_AND_ATTRIBUTES_HASH, *PSID_AND_ATTRIBUTES_HASH;
00127 
00128 /* Universal well-known SIDs */
00129 
00130 #define SECURITY_NULL_SID_AUTHORITY         {0,0,0,0,0,0}
00131 #define SECURITY_WORLD_SID_AUTHORITY        {0,0,0,0,0,1}
00132 #define SECURITY_LOCAL_SID_AUTHORITY        {0,0,0,0,0,2}
00133 #define SECURITY_CREATOR_SID_AUTHORITY      {0,0,0,0,0,3}
00134 #define SECURITY_NON_UNIQUE_AUTHORITY       {0,0,0,0,0,4}
00135 #define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
00136 
00137 #define SECURITY_NULL_RID                 (0x00000000L)
00138 #define SECURITY_WORLD_RID                (0x00000000L)
00139 #define SECURITY_LOCAL_RID                (0x00000000L)
00140 #define SECURITY_LOCAL_LOGON_RID          (0x00000001L)
00141 
00142 #define SECURITY_CREATOR_OWNER_RID        (0x00000000L)
00143 #define SECURITY_CREATOR_GROUP_RID        (0x00000001L)
00144 #define SECURITY_CREATOR_OWNER_SERVER_RID (0x00000002L)
00145 #define SECURITY_CREATOR_GROUP_SERVER_RID (0x00000003L)
00146 #define SECURITY_CREATOR_OWNER_RIGHTS_RID (0x00000004L)
00147 
00148 /* NT well-known SIDs */
00149 
00150 #define SECURITY_NT_AUTHORITY           {0,0,0,0,0,5}
00151 
00152 #define SECURITY_DIALUP_RID             (0x00000001L)
00153 #define SECURITY_NETWORK_RID            (0x00000002L)
00154 #define SECURITY_BATCH_RID              (0x00000003L)
00155 #define SECURITY_INTERACTIVE_RID        (0x00000004L)
00156 #define SECURITY_LOGON_IDS_RID          (0x00000005L)
00157 #define SECURITY_LOGON_IDS_RID_COUNT    (3L)
00158 #define SECURITY_SERVICE_RID            (0x00000006L)
00159 #define SECURITY_ANONYMOUS_LOGON_RID    (0x00000007L)
00160 #define SECURITY_PROXY_RID              (0x00000008L)
00161 #define SECURITY_ENTERPRISE_CONTROLLERS_RID (0x00000009L)
00162 #define SECURITY_SERVER_LOGON_RID       SECURITY_ENTERPRISE_CONTROLLERS_RID
00163 #define SECURITY_PRINCIPAL_SELF_RID     (0x0000000AL)
00164 #define SECURITY_AUTHENTICATED_USER_RID (0x0000000BL)
00165 #define SECURITY_RESTRICTED_CODE_RID    (0x0000000CL)
00166 #define SECURITY_TERMINAL_SERVER_RID    (0x0000000DL)
00167 #define SECURITY_REMOTE_LOGON_RID       (0x0000000EL)
00168 #define SECURITY_THIS_ORGANIZATION_RID  (0x0000000FL)
00169 #define SECURITY_IUSER_RID              (0x00000011L)
00170 #define SECURITY_LOCAL_SYSTEM_RID       (0x00000012L)
00171 #define SECURITY_LOCAL_SERVICE_RID      (0x00000013L)
00172 #define SECURITY_NETWORK_SERVICE_RID    (0x00000014L)
00173 #define SECURITY_NT_NON_UNIQUE          (0x00000015L)
00174 #define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT  (3L)
00175 #define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID (0x00000016L)
00176 
00177 #define SECURITY_BUILTIN_DOMAIN_RID     (0x00000020L)
00178 #define SECURITY_WRITE_RESTRICTED_CODE_RID (0x00000021L)
00179 
00180 
00181 #define SECURITY_PACKAGE_BASE_RID       (0x00000040L)
00182 #define SECURITY_PACKAGE_RID_COUNT      (2L)
00183 #define SECURITY_PACKAGE_NTLM_RID       (0x0000000AL)
00184 #define SECURITY_PACKAGE_SCHANNEL_RID   (0x0000000EL)
00185 #define SECURITY_PACKAGE_DIGEST_RID     (0x00000015L)
00186 
00187 #define SECURITY_CRED_TYPE_BASE_RID             (0x00000041L)
00188 #define SECURITY_CRED_TYPE_RID_COUNT            (2L)
00189 #define SECURITY_CRED_TYPE_THIS_ORG_CERT_RID    (0x00000001L)
00190 
00191 #define SECURITY_MIN_BASE_RID       (0x00000050L)
00192 #define SECURITY_SERVICE_ID_BASE_RID    (0x00000050L)
00193 #define SECURITY_SERVICE_ID_RID_COUNT   (6L)
00194 #define SECURITY_RESERVED_ID_BASE_RID   (0x00000051L)
00195 #define SECURITY_APPPOOL_ID_BASE_RID    (0x00000052L)
00196 #define SECURITY_APPPOOL_ID_RID_COUNT   (6L)
00197 #define SECURITY_VIRTUALSERVER_ID_BASE_RID    (0x00000053L)
00198 #define SECURITY_VIRTUALSERVER_ID_RID_COUNT   (6L)
00199 #define SECURITY_USERMODEDRIVERHOST_ID_BASE_RID  (0x00000054L)
00200 #define SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT (6L)
00201 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID  (0x00000055L)
00202 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT (6L)
00203 #define SECURITY_WMIHOST_ID_BASE_RID  (0x00000056L)
00204 #define SECURITY_WMIHOST_ID_RID_COUNT (6L)
00205 #define SECURITY_TASK_ID_BASE_RID                 (0x00000057L)
00206 #define SECURITY_NFS_ID_BASE_RID        (0x00000058L)
00207 #define SECURITY_COM_ID_BASE_RID        (0x00000059L)
00208 #define SECURITY_VIRTUALACCOUNT_ID_RID_COUNT   (6L)
00209 
00210 #define SECURITY_MAX_BASE_RID       (0x0000006FL)
00211 
00212 #define SECURITY_MAX_ALWAYS_FILTERED    (0x000003E7L)
00213 #define SECURITY_MIN_NEVER_FILTERED     (0x000003E8L)
00214 
00215 #define SECURITY_OTHER_ORGANIZATION_RID (0x000003E8L)
00216 
00217 #define SECURITY_WINDOWSMOBILE_ID_BASE_RID (0x00000070L)
00218 
00219 /* Well-known domain relative sub-authority values (RIDs) */
00220 
00221 #define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS (0x000001F2L)
00222 
00223 #define FOREST_USER_RID_MAX            (0x000001F3L)
00224 
00225 /* Well-known users */
00226 
00227 #define DOMAIN_USER_RID_ADMIN          (0x000001F4L)
00228 #define DOMAIN_USER_RID_GUEST          (0x000001F5L)
00229 #define DOMAIN_USER_RID_KRBTGT         (0x000001F6L)
00230 
00231 #define DOMAIN_USER_RID_MAX            (0x000003E7L)
00232 
00233 /* Well-known groups */
00234 
00235 #define DOMAIN_GROUP_RID_ADMINS               (0x00000200L)
00236 #define DOMAIN_GROUP_RID_USERS                (0x00000201L)
00237 #define DOMAIN_GROUP_RID_GUESTS               (0x00000202L)
00238 #define DOMAIN_GROUP_RID_COMPUTERS            (0x00000203L)
00239 #define DOMAIN_GROUP_RID_CONTROLLERS          (0x00000204L)
00240 #define DOMAIN_GROUP_RID_CERT_ADMINS          (0x00000205L)
00241 #define DOMAIN_GROUP_RID_SCHEMA_ADMINS        (0x00000206L)
00242 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS    (0x00000207L)
00243 #define DOMAIN_GROUP_RID_POLICY_ADMINS        (0x00000208L)
00244 #define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (0x00000209L)
00245 
00246 /* Well-known aliases */
00247 
00248 #define DOMAIN_ALIAS_RID_ADMINS                         (0x00000220L)
00249 #define DOMAIN_ALIAS_RID_USERS                          (0x00000221L)
00250 #define DOMAIN_ALIAS_RID_GUESTS                         (0x00000222L)
00251 #define DOMAIN_ALIAS_RID_POWER_USERS                    (0x00000223L)
00252 
00253 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS                    (0x00000224L)
00254 #define DOMAIN_ALIAS_RID_SYSTEM_OPS                     (0x00000225L)
00255 #define DOMAIN_ALIAS_RID_PRINT_OPS                      (0x00000226L)
00256 #define DOMAIN_ALIAS_RID_BACKUP_OPS                     (0x00000227L)
00257 
00258 #define DOMAIN_ALIAS_RID_REPLICATOR                     (0x00000228L)
00259 #define DOMAIN_ALIAS_RID_RAS_SERVERS                    (0x00000229L)
00260 #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS               (0x0000022AL)
00261 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS           (0x0000022BL)
00262 #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS      (0x0000022CL)
00263 #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS (0x0000022DL)
00264 
00265 #define DOMAIN_ALIAS_RID_MONITORING_USERS               (0x0000022EL)
00266 #define DOMAIN_ALIAS_RID_LOGGING_USERS                  (0x0000022FL)
00267 #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS            (0x00000230L)
00268 #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS             (0x00000231L)
00269 #define DOMAIN_ALIAS_RID_DCOM_USERS                     (0x00000232L)
00270 #define DOMAIN_ALIAS_RID_IUSERS                         (0x00000238L)
00271 #define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS               (0x00000239L)
00272 #define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP     (0x0000023BL)
00273 #define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (0x0000023CL)
00274 #define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP        (0x0000023DL)
00275 #define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP      (0x0000023EL)
00276 
00277 #define SECURITY_MANDATORY_LABEL_AUTHORITY          {0,0,0,0,0,16}
00278 #define SECURITY_MANDATORY_UNTRUSTED_RID            (0x00000000L)
00279 #define SECURITY_MANDATORY_LOW_RID                  (0x00001000L)
00280 #define SECURITY_MANDATORY_MEDIUM_RID               (0x00002000L)
00281 #define SECURITY_MANDATORY_HIGH_RID                 (0x00003000L)
00282 #define SECURITY_MANDATORY_SYSTEM_RID               (0x00004000L)
00283 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID    (0x00005000L)
00284 
00285 /* SECURITY_MANDATORY_MAXIMUM_USER_RID is the highest RID that
00286    can be set by a usermode caller.*/
00287 
00288 #define SECURITY_MANDATORY_MAXIMUM_USER_RID   SECURITY_MANDATORY_SYSTEM_RID
00289 
00290 #define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
00291 
00292 /* Allocate the System Luid.  The first 1000 LUIDs are reserved.
00293    Use #999 here (0x3e7 = 999) */
00294 
00295 #define SYSTEM_LUID                     {0x3e7, 0x0}
00296 #define ANONYMOUS_LOGON_LUID            {0x3e6, 0x0}
00297 #define LOCALSERVICE_LUID               {0x3e5, 0x0}
00298 #define NETWORKSERVICE_LUID             {0x3e4, 0x0}
00299 #define IUSER_LUID                      {0x3e3, 0x0}
00300 
00301 typedef struct _ACE_HEADER {
00302   UCHAR AceType;
00303   UCHAR AceFlags;
00304   USHORT AceSize;
00305 } ACE_HEADER, *PACE_HEADER;
00306 
00307 /* also in winnt.h */
00308 #define ACCESS_MIN_MS_ACE_TYPE                  (0x0)
00309 #define ACCESS_ALLOWED_ACE_TYPE                 (0x0)
00310 #define ACCESS_DENIED_ACE_TYPE                  (0x1)
00311 #define SYSTEM_AUDIT_ACE_TYPE                   (0x2)
00312 #define SYSTEM_ALARM_ACE_TYPE                   (0x3)
00313 #define ACCESS_MAX_MS_V2_ACE_TYPE               (0x3)
00314 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE        (0x4)
00315 #define ACCESS_MAX_MS_V3_ACE_TYPE               (0x4)
00316 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE           (0x5)
00317 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE          (0x5)
00318 #define ACCESS_DENIED_OBJECT_ACE_TYPE           (0x6)
00319 #define SYSTEM_AUDIT_OBJECT_ACE_TYPE            (0x7)
00320 #define SYSTEM_ALARM_OBJECT_ACE_TYPE            (0x8)
00321 #define ACCESS_MAX_MS_OBJECT_ACE_TYPE           (0x8)
00322 #define ACCESS_MAX_MS_V4_ACE_TYPE               (0x8)
00323 #define ACCESS_MAX_MS_ACE_TYPE                  (0x8)
00324 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE        (0x9)
00325 #define ACCESS_DENIED_CALLBACK_ACE_TYPE         (0xA)
00326 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
00327 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE  (0xC)
00328 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE          (0xD)
00329 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE          (0xE)
00330 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE   (0xF)
00331 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE   (0x10)
00332 #define ACCESS_MAX_MS_V5_ACE_TYPE               (0x11)
00333 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE         (0x11)
00334 
00335 /* The following are the inherit flags that go into the AceFlags field
00336    of an Ace header. */
00337 
00338 #define OBJECT_INHERIT_ACE                (0x1)
00339 #define CONTAINER_INHERIT_ACE             (0x2)
00340 #define NO_PROPAGATE_INHERIT_ACE          (0x4)
00341 #define INHERIT_ONLY_ACE                  (0x8)
00342 #define INHERITED_ACE                     (0x10)
00343 #define VALID_INHERIT_FLAGS               (0x1F)
00344 
00345 #define SUCCESSFUL_ACCESS_ACE_FLAG        (0x40)
00346 #define FAILED_ACCESS_ACE_FLAG            (0x80)
00347 
00348 typedef struct _ACCESS_ALLOWED_ACE {
00349   ACE_HEADER Header;
00350   ACCESS_MASK Mask;
00351   ULONG SidStart;
00352 } ACCESS_ALLOWED_ACE, *PACCESS_ALLOWED_ACE;
00353 
00354 typedef struct _ACCESS_DENIED_ACE {
00355   ACE_HEADER Header;
00356   ACCESS_MASK Mask;
00357   ULONG SidStart;
00358 } ACCESS_DENIED_ACE, *PACCESS_DENIED_ACE;
00359 
00360 typedef struct _SYSTEM_AUDIT_ACE {
00361   ACE_HEADER Header;
00362   ACCESS_MASK Mask;
00363   ULONG SidStart;
00364 } SYSTEM_AUDIT_ACE, *PSYSTEM_AUDIT_ACE;
00365 
00366 typedef struct _SYSTEM_ALARM_ACE {
00367   ACE_HEADER Header;
00368   ACCESS_MASK Mask;
00369   ULONG SidStart;
00370 } SYSTEM_ALARM_ACE, *PSYSTEM_ALARM_ACE;
00371 
00372 typedef struct _SYSTEM_MANDATORY_LABEL_ACE {
00373   ACE_HEADER Header;
00374   ACCESS_MASK Mask;
00375   ULONG SidStart;
00376 } SYSTEM_MANDATORY_LABEL_ACE, *PSYSTEM_MANDATORY_LABEL_ACE;
00377 
00378 #define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP         0x1
00379 #define SYSTEM_MANDATORY_LABEL_NO_READ_UP          0x2
00380 #define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP       0x4
00381 #define SYSTEM_MANDATORY_LABEL_VALID_MASK (SYSTEM_MANDATORY_LABEL_NO_WRITE_UP   | \
00382                                            SYSTEM_MANDATORY_LABEL_NO_READ_UP    | \
00383                                            SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP)
00384 
00385 #define SECURITY_DESCRIPTOR_MIN_LENGTH   (sizeof(SECURITY_DESCRIPTOR))
00386 
00387 typedef USHORT SECURITY_DESCRIPTOR_CONTROL,*PSECURITY_DESCRIPTOR_CONTROL;
00388 
00389 #define SE_OWNER_DEFAULTED              0x0001
00390 #define SE_GROUP_DEFAULTED              0x0002
00391 #define SE_DACL_PRESENT                 0x0004
00392 #define SE_DACL_DEFAULTED               0x0008
00393 #define SE_SACL_PRESENT                 0x0010
00394 #define SE_SACL_DEFAULTED               0x0020
00395 #define SE_DACL_UNTRUSTED               0x0040
00396 #define SE_SERVER_SECURITY              0x0080
00397 #define SE_DACL_AUTO_INHERIT_REQ        0x0100
00398 #define SE_SACL_AUTO_INHERIT_REQ        0x0200
00399 #define SE_DACL_AUTO_INHERITED          0x0400
00400 #define SE_SACL_AUTO_INHERITED          0x0800
00401 #define SE_DACL_PROTECTED               0x1000
00402 #define SE_SACL_PROTECTED               0x2000
00403 #define SE_RM_CONTROL_VALID             0x4000
00404 #define SE_SELF_RELATIVE                0x8000
00405 
00406 typedef struct _SECURITY_DESCRIPTOR_RELATIVE {
00407   UCHAR Revision;
00408   UCHAR Sbz1;
00409   SECURITY_DESCRIPTOR_CONTROL Control;
00410   ULONG Owner;
00411   ULONG Group;
00412   ULONG Sacl;
00413   ULONG Dacl;
00414 } SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE;
00415 
00416 typedef struct _SECURITY_DESCRIPTOR {
00417   UCHAR Revision;
00418   UCHAR Sbz1;
00419   SECURITY_DESCRIPTOR_CONTROL Control;
00420   PSID Owner;
00421   PSID Group;
00422   PACL Sacl;
00423   PACL Dacl;
00424 } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
00425 
00426 typedef struct _OBJECT_TYPE_LIST {
00427   USHORT Level;
00428   USHORT Sbz;
00429   GUID *ObjectType;
00430 } OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST;
00431 
00432 #define ACCESS_OBJECT_GUID       0
00433 #define ACCESS_PROPERTY_SET_GUID 1
00434 #define ACCESS_PROPERTY_GUID     2
00435 #define ACCESS_MAX_LEVEL         4
00436 
00437 typedef enum _AUDIT_EVENT_TYPE {
00438   AuditEventObjectAccess,
00439   AuditEventDirectoryServiceAccess
00440 } AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE;
00441 
00442 #define AUDIT_ALLOW_NO_PRIVILEGE 0x1
00443 
00444 #define ACCESS_DS_SOURCE_A "DS"
00445 #define ACCESS_DS_SOURCE_W L"DS"
00446 #define ACCESS_DS_OBJECT_TYPE_NAME_A "Directory Service Object"
00447 #define ACCESS_DS_OBJECT_TYPE_NAME_W L"Directory Service Object"
00448 
00449 #define ACCESS_REASON_TYPE_MASK 0xffff0000
00450 #define ACCESS_REASON_DATA_MASK 0x0000ffff
00451 
00452 typedef enum _ACCESS_REASON_TYPE {
00453   AccessReasonNone = 0x00000000,
00454   AccessReasonAllowedAce = 0x00010000,
00455   AccessReasonDeniedAce = 0x00020000,
00456   AccessReasonAllowedParentAce = 0x00030000,
00457   AccessReasonDeniedParentAce = 0x00040000,
00458   AccessReasonMissingPrivilege = 0x00100000,
00459   AccessReasonFromPrivilege = 0x00200000,
00460   AccessReasonIntegrityLevel = 0x00300000,
00461   AccessReasonOwnership = 0x00400000,
00462   AccessReasonNullDacl = 0x00500000,
00463   AccessReasonEmptyDacl = 0x00600000,
00464   AccessReasonNoSD = 0x00700000,
00465   AccessReasonNoGrant = 0x00800000
00466 } ACCESS_REASON_TYPE;
00467 
00468 typedef ULONG ACCESS_REASON;
00469 
00470 typedef struct _ACCESS_REASONS {
00471   ACCESS_REASON Data[32];
00472 } ACCESS_REASONS, *PACCESS_REASONS;
00473 
00474 #define SE_SECURITY_DESCRIPTOR_FLAG_NO_OWNER_ACE    0x00000001
00475 #define SE_SECURITY_DESCRIPTOR_FLAG_NO_LABEL_ACE    0x00000002
00476 #define SE_SECURITY_DESCRIPTOR_VALID_FLAGS          0x00000003
00477 
00478 typedef struct _SE_SECURITY_DESCRIPTOR {
00479   ULONG Size;
00480   ULONG Flags;
00481   PSECURITY_DESCRIPTOR SecurityDescriptor;
00482 } SE_SECURITY_DESCRIPTOR, *PSE_SECURITY_DESCRIPTOR;
00483 
00484 typedef struct _SE_ACCESS_REQUEST {
00485   ULONG Size;
00486   PSE_SECURITY_DESCRIPTOR SeSecurityDescriptor;
00487   ACCESS_MASK DesiredAccess;
00488   ACCESS_MASK PreviouslyGrantedAccess;
00489   PSID PrincipalSelfSid;
00490   PGENERIC_MAPPING GenericMapping;
00491   ULONG ObjectTypeListCount;
00492   POBJECT_TYPE_LIST ObjectTypeList;
00493 } SE_ACCESS_REQUEST, *PSE_ACCESS_REQUEST;
00494 
00495 typedef struct _SE_ACCESS_REPLY {
00496   ULONG Size;
00497   ULONG ResultListCount;
00498   PACCESS_MASK GrantedAccess;
00499   PNTSTATUS AccessStatus;
00500   PACCESS_REASONS AccessReason;
00501   PPRIVILEGE_SET* Privileges;
00502 } SE_ACCESS_REPLY, *PSE_ACCESS_REPLY;
00503 
00504 typedef enum _SE_AUDIT_OPERATION {
00505   AuditPrivilegeObject,
00506   AuditPrivilegeService,
00507   AuditAccessCheck,
00508   AuditOpenObject,
00509   AuditOpenObjectWithTransaction,
00510   AuditCloseObject,
00511   AuditDeleteObject,
00512   AuditOpenObjectForDelete,
00513   AuditOpenObjectForDeleteWithTransaction,
00514   AuditCloseNonObject,
00515   AuditOpenNonObject,
00516   AuditObjectReference,
00517   AuditHandleCreation,
00518 } SE_AUDIT_OPERATION, *PSE_AUDIT_OPERATION;
00519 
00520 typedef struct _SE_AUDIT_INFO {
00521   ULONG Size;
00522   AUDIT_EVENT_TYPE AuditType;
00523   SE_AUDIT_OPERATION AuditOperation;
00524   ULONG AuditFlags;
00525   UNICODE_STRING SubsystemName;
00526   UNICODE_STRING ObjectTypeName;
00527   UNICODE_STRING ObjectName;
00528   PVOID HandleId;
00529   GUID* TransactionId;
00530   LUID* OperationId;
00531   BOOLEAN ObjectCreation;
00532   BOOLEAN GenerateOnClose;
00533 } SE_AUDIT_INFO, *PSE_AUDIT_INFO;
00534 
00535 #define TOKEN_ASSIGN_PRIMARY            (0x0001)
00536 #define TOKEN_DUPLICATE                 (0x0002)
00537 #define TOKEN_IMPERSONATE               (0x0004)
00538 #define TOKEN_QUERY                     (0x0008)
00539 #define TOKEN_QUERY_SOURCE              (0x0010)
00540 #define TOKEN_ADJUST_PRIVILEGES         (0x0020)
00541 #define TOKEN_ADJUST_GROUPS             (0x0040)
00542 #define TOKEN_ADJUST_DEFAULT            (0x0080)
00543 #define TOKEN_ADJUST_SESSIONID          (0x0100)
00544 
00545 #define TOKEN_ALL_ACCESS_P (STANDARD_RIGHTS_REQUIRED  |\
00546                             TOKEN_ASSIGN_PRIMARY      |\
00547                             TOKEN_DUPLICATE           |\
00548                             TOKEN_IMPERSONATE         |\
00549                             TOKEN_QUERY               |\
00550                             TOKEN_QUERY_SOURCE        |\
00551                             TOKEN_ADJUST_PRIVILEGES   |\
00552                             TOKEN_ADJUST_GROUPS       |\
00553                             TOKEN_ADJUST_DEFAULT )
00554 
00555 #if ((defined(_WIN32_WINNT) && (_WIN32_WINNT > 0x0400)) || (!defined(_WIN32_WINNT)))
00556 #define TOKEN_ALL_ACCESS  (TOKEN_ALL_ACCESS_P |\
00557                            TOKEN_ADJUST_SESSIONID )
00558 #else
00559 #define TOKEN_ALL_ACCESS  (TOKEN_ALL_ACCESS_P)
00560 #endif
00561 
00562 #define TOKEN_READ       (STANDARD_RIGHTS_READ     |\
00563                           TOKEN_QUERY)
00564 
00565 #define TOKEN_WRITE      (STANDARD_RIGHTS_WRITE    |\
00566                           TOKEN_ADJUST_PRIVILEGES  |\
00567                           TOKEN_ADJUST_GROUPS      |\
00568                           TOKEN_ADJUST_DEFAULT)
00569 
00570 #define TOKEN_EXECUTE    (STANDARD_RIGHTS_EXECUTE)
00571 
00572 typedef enum _TOKEN_TYPE {
00573   TokenPrimary = 1,
00574   TokenImpersonation
00575 } TOKEN_TYPE,*PTOKEN_TYPE;
00576 
00577 typedef enum _TOKEN_INFORMATION_CLASS {
00578   TokenUser = 1,
00579   TokenGroups,
00580   TokenPrivileges,
00581   TokenOwner,
00582   TokenPrimaryGroup,
00583   TokenDefaultDacl,
00584   TokenSource,
00585   TokenType,
00586   TokenImpersonationLevel,
00587   TokenStatistics,
00588   TokenRestrictedSids,
00589   TokenSessionId,
00590   TokenGroupsAndPrivileges,
00591   TokenSessionReference,
00592   TokenSandBoxInert,
00593   TokenAuditPolicy,
00594   TokenOrigin,
00595   TokenElevationType,
00596   TokenLinkedToken,
00597   TokenElevation,
00598   TokenHasRestrictions,
00599   TokenAccessInformation,
00600   TokenVirtualizationAllowed,
00601   TokenVirtualizationEnabled,
00602   TokenIntegrityLevel,
00603   TokenUIAccess,
00604   TokenMandatoryPolicy,
00605   TokenLogonSid,
00606   MaxTokenInfoClass
00607 } TOKEN_INFORMATION_CLASS, *PTOKEN_INFORMATION_CLASS;
00608 
00609 typedef struct _TOKEN_USER {
00610   SID_AND_ATTRIBUTES User;
00611 } TOKEN_USER, *PTOKEN_USER;
00612 
00613 typedef struct _TOKEN_GROUPS {
00614   ULONG GroupCount;
00615 #ifdef MIDL_PASS
00616   [size_is(GroupCount)] SID_AND_ATTRIBUTES Groups[*];
00617 #else
00618   SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
00619 #endif
00620 } TOKEN_GROUPS,*PTOKEN_GROUPS,*LPTOKEN_GROUPS;
00621 
00622 typedef struct _TOKEN_PRIVILEGES {
00623   ULONG PrivilegeCount;
00624   LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
00625 } TOKEN_PRIVILEGES,*PTOKEN_PRIVILEGES,*LPTOKEN_PRIVILEGES;
00626 
00627 typedef struct _TOKEN_OWNER {
00628   PSID Owner;
00629 } TOKEN_OWNER,*PTOKEN_OWNER;
00630 
00631 typedef struct _TOKEN_PRIMARY_GROUP {
00632   PSID PrimaryGroup;
00633 } TOKEN_PRIMARY_GROUP,*PTOKEN_PRIMARY_GROUP;
00634 
00635 typedef struct _TOKEN_DEFAULT_DACL {
00636   PACL DefaultDacl;
00637 } TOKEN_DEFAULT_DACL,*PTOKEN_DEFAULT_DACL;
00638 
00639 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES {
00640   ULONG SidCount;
00641   ULONG SidLength;
00642   PSID_AND_ATTRIBUTES Sids;
00643   ULONG RestrictedSidCount;
00644   ULONG RestrictedSidLength;
00645   PSID_AND_ATTRIBUTES RestrictedSids;
00646   ULONG PrivilegeCount;
00647   ULONG PrivilegeLength;
00648   PLUID_AND_ATTRIBUTES Privileges;
00649   LUID AuthenticationId;
00650 } TOKEN_GROUPS_AND_PRIVILEGES, *PTOKEN_GROUPS_AND_PRIVILEGES;
00651 
00652 typedef struct _TOKEN_LINKED_TOKEN {
00653   HANDLE LinkedToken;
00654 } TOKEN_LINKED_TOKEN, *PTOKEN_LINKED_TOKEN;
00655 
00656 typedef struct _TOKEN_ELEVATION {
00657   ULONG TokenIsElevated;
00658 } TOKEN_ELEVATION, *PTOKEN_ELEVATION;
00659 
00660 typedef struct _TOKEN_MANDATORY_LABEL {
00661   SID_AND_ATTRIBUTES Label;
00662 } TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL;
00663 
00664 #define TOKEN_MANDATORY_POLICY_OFF             0x0
00665 #define TOKEN_MANDATORY_POLICY_NO_WRITE_UP     0x1
00666 #define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2
00667 
00668 #define TOKEN_MANDATORY_POLICY_VALID_MASK    (TOKEN_MANDATORY_POLICY_NO_WRITE_UP | \
00669                                               TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN)
00670 
00671 typedef struct _TOKEN_MANDATORY_POLICY {
00672   ULONG Policy;
00673 } TOKEN_MANDATORY_POLICY, *PTOKEN_MANDATORY_POLICY;
00674 
00675 typedef struct _TOKEN_ACCESS_INFORMATION {
00676   PSID_AND_ATTRIBUTES_HASH SidHash;
00677   PSID_AND_ATTRIBUTES_HASH RestrictedSidHash;
00678   PTOKEN_PRIVILEGES Privileges;
00679   LUID AuthenticationId;
00680   TOKEN_TYPE TokenType;
00681   SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
00682   TOKEN_MANDATORY_POLICY MandatoryPolicy;
00683   ULONG Flags;
00684 } TOKEN_ACCESS_INFORMATION, *PTOKEN_ACCESS_INFORMATION;
00685 
00686 #define POLICY_AUDIT_SUBCATEGORY_COUNT (53)
00687 
00688 typedef struct _TOKEN_AUDIT_POLICY {
00689   UCHAR PerUserPolicy[((POLICY_AUDIT_SUBCATEGORY_COUNT) >> 1) + 1];
00690 } TOKEN_AUDIT_POLICY, *PTOKEN_AUDIT_POLICY;
00691 
00692 #define TOKEN_SOURCE_LENGTH 8
00693 
00694 typedef struct _TOKEN_SOURCE {
00695   CHAR SourceName[TOKEN_SOURCE_LENGTH];
00696   LUID SourceIdentifier;
00697 } TOKEN_SOURCE,*PTOKEN_SOURCE;
00698 
00699 typedef struct _TOKEN_STATISTICS {
00700   LUID TokenId;
00701   LUID AuthenticationId;
00702   LARGE_INTEGER ExpirationTime;
00703   TOKEN_TYPE TokenType;
00704   SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
00705   ULONG DynamicCharged;
00706   ULONG DynamicAvailable;
00707   ULONG GroupCount;
00708   ULONG PrivilegeCount;
00709   LUID ModifiedId;
00710 } TOKEN_STATISTICS, *PTOKEN_STATISTICS;
00711 
00712 typedef struct _TOKEN_CONTROL {
00713   LUID TokenId;
00714   LUID AuthenticationId;
00715   LUID ModifiedId;
00716   TOKEN_SOURCE TokenSource;
00717 } TOKEN_CONTROL,*PTOKEN_CONTROL;
00718 
00719 typedef struct _TOKEN_ORIGIN {
00720   LUID OriginatingLogonSession;
00721 } TOKEN_ORIGIN, *PTOKEN_ORIGIN;
00722 
00723 typedef enum _MANDATORY_LEVEL {
00724   MandatoryLevelUntrusted = 0,
00725   MandatoryLevelLow,
00726   MandatoryLevelMedium,
00727   MandatoryLevelHigh,
00728   MandatoryLevelSystem,
00729   MandatoryLevelSecureProcess,
00730   MandatoryLevelCount
00731 } MANDATORY_LEVEL, *PMANDATORY_LEVEL;
00732 
00733 #define TOKEN_HAS_TRAVERSE_PRIVILEGE    0x0001
00734 #define TOKEN_HAS_BACKUP_PRIVILEGE      0x0002
00735 #define TOKEN_HAS_RESTORE_PRIVILEGE     0x0004
00736 #define TOKEN_WRITE_RESTRICTED          0x0008
00737 #define TOKEN_IS_RESTRICTED             0x0010
00738 #define TOKEN_SESSION_NOT_REFERENCED    0x0020
00739 #define TOKEN_SANDBOX_INERT             0x0040
00740 #define TOKEN_HAS_IMPERSONATE_PRIVILEGE 0x0080
00741 #define SE_BACKUP_PRIVILEGES_CHECKED    0x0100
00742 #define TOKEN_VIRTUALIZE_ALLOWED        0x0200
00743 #define TOKEN_VIRTUALIZE_ENABLED        0x0400
00744 #define TOKEN_IS_FILTERED               0x0800
00745 #define TOKEN_UIACCESS                  0x1000
00746 #define TOKEN_NOT_LOW                   0x2000
00747 
00748 typedef struct _SE_EXPORTS {
00749   LUID SeCreateTokenPrivilege;
00750   LUID SeAssignPrimaryTokenPrivilege;
00751   LUID SeLockMemoryPrivilege;
00752   LUID SeIncreaseQuotaPrivilege;
00753   LUID SeUnsolicitedInputPrivilege;
00754   LUID SeTcbPrivilege;
00755   LUID SeSecurityPrivilege;
00756   LUID SeTakeOwnershipPrivilege;
00757   LUID SeLoadDriverPrivilege;
00758   LUID SeCreatePagefilePrivilege;
00759   LUID SeIncreaseBasePriorityPrivilege;
00760   LUID SeSystemProfilePrivilege;
00761   LUID SeSystemtimePrivilege;
00762   LUID SeProfileSingleProcessPrivilege;
00763   LUID SeCreatePermanentPrivilege;
00764   LUID SeBackupPrivilege;
00765   LUID SeRestorePrivilege;
00766   LUID SeShutdownPrivilege;
00767   LUID SeDebugPrivilege;
00768   LUID SeAuditPrivilege;
00769   LUID SeSystemEnvironmentPrivilege;
00770   LUID SeChangeNotifyPrivilege;
00771   LUID SeRemoteShutdownPrivilege;
00772   PSID SeNullSid;
00773   PSID SeWorldSid;
00774   PSID SeLocalSid;
00775   PSID SeCreatorOwnerSid;
00776   PSID SeCreatorGroupSid;
00777   PSID SeNtAuthoritySid;
00778   PSID SeDialupSid;
00779   PSID SeNetworkSid;
00780   PSID SeBatchSid;
00781   PSID SeInteractiveSid;
00782   PSID SeLocalSystemSid;
00783   PSID SeAliasAdminsSid;
00784   PSID SeAliasUsersSid;
00785   PSID SeAliasGuestsSid;
00786   PSID SeAliasPowerUsersSid;
00787   PSID SeAliasAccountOpsSid;
00788   PSID SeAliasSystemOpsSid;
00789   PSID SeAliasPrintOpsSid;
00790   PSID SeAliasBackupOpsSid;
00791   PSID SeAuthenticatedUsersSid;
00792   PSID SeRestrictedSid;
00793   PSID SeAnonymousLogonSid;
00794   LUID SeUndockPrivilege;
00795   LUID SeSyncAgentPrivilege;
00796   LUID SeEnableDelegationPrivilege;
00797   PSID SeLocalServiceSid;
00798   PSID SeNetworkServiceSid;
00799   LUID SeManageVolumePrivilege;
00800   LUID SeImpersonatePrivilege;
00801   LUID SeCreateGlobalPrivilege;
00802   LUID SeTrustedCredManAccessPrivilege;
00803   LUID SeRelabelPrivilege;
00804   LUID SeIncreaseWorkingSetPrivilege;
00805   LUID SeTimeZonePrivilege;
00806   LUID SeCreateSymbolicLinkPrivilege;
00807   PSID SeIUserSid;
00808   PSID SeUntrustedMandatorySid;
00809   PSID SeLowMandatorySid;
00810   PSID SeMediumMandatorySid;
00811   PSID SeHighMandatorySid;
00812   PSID SeSystemMandatorySid;
00813   PSID SeOwnerRightsSid;
00814 } SE_EXPORTS, *PSE_EXPORTS;
00815 
00816 typedef NTSTATUS
00817 (NTAPI *PSE_LOGON_SESSION_TERMINATED_ROUTINE)(
00818   IN PLUID LogonId);
00819 
00820 typedef struct _SECURITY_CLIENT_CONTEXT {
00821   SECURITY_QUALITY_OF_SERVICE SecurityQos;
00822   PACCESS_TOKEN ClientToken;
00823   BOOLEAN DirectlyAccessClientToken;
00824   BOOLEAN DirectAccessEffectiveOnly;
00825   BOOLEAN ServerIsRemote;
00826   TOKEN_CONTROL ClientTokenControl;
00827 } SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT;
00828 
00829 /******************************************************************************
00830  *                            Object Manager Types                            *
00831  ******************************************************************************/
00832 
00833 typedef enum _OBJECT_INFORMATION_CLASS {
00834   ObjectBasicInformation = 0,
00835   ObjectTypeInformation = 2,
00836   /* Not for public use */
00837   ObjectNameInformation = 1,
00838   ObjectTypesInformation = 3,
00839   ObjectHandleFlagInformation = 4,
00840   ObjectSessionInformation = 5,
00841   MaxObjectInfoClass
00842 } OBJECT_INFORMATION_CLASS;
00843 
00844 
00845 /******************************************************************************
00846  *                           Runtime Library Types                            *
00847  ******************************************************************************/
00848 
00849 
00850 #define RTL_SYSTEM_VOLUME_INFORMATION_FOLDER    L"System Volume Information"
00851 
00852 _Function_class_(RTL_ALLOCATE_STRING_ROUTINE)
00853 _IRQL_requires_max_(PASSIVE_LEVEL)
00854 __drv_allocatesMem(Mem)
00855 typedef PVOID
00856 (NTAPI *PRTL_ALLOCATE_STRING_ROUTINE)(
00857   _In_ SIZE_T NumberOfBytes);
00858 
00859 #if _WIN32_WINNT >= 0x0600
00860 _Function_class_(RTL_REALLOCATE_STRING_ROUTINE)
00861 _IRQL_requires_max_(PASSIVE_LEVEL)
00862 __drv_allocatesMem(Mem)
00863 typedef PVOID
00864 (NTAPI *PRTL_REALLOCATE_STRING_ROUTINE)(
00865   _In_ SIZE_T NumberOfBytes,
00866   IN PVOID Buffer);
00867 #endif
00868 
00869 typedef VOID
00870 (NTAPI *PRTL_FREE_STRING_ROUTINE)(
00871   _In_ __drv_freesMem(Mem) _Post_invalid_ PVOID Buffer);
00872 
00873 extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine;
00874 extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine;
00875 
00876 #if _WIN32_WINNT >= 0x0600
00877 extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine;
00878 #endif
00879 
00880 _Function_class_(RTL_HEAP_COMMIT_ROUTINE)
00881 _IRQL_requires_same_
00882 typedef NTSTATUS
00883 (NTAPI *PRTL_HEAP_COMMIT_ROUTINE) (
00884   _In_ PVOID Base,
00885   _Inout_ PVOID *CommitAddress,
00886   _Inout_ PSIZE_T CommitSize);
00887 
00888 typedef struct _RTL_HEAP_PARAMETERS {
00889   ULONG Length;
00890   SIZE_T SegmentReserve;
00891   SIZE_T SegmentCommit;
00892   SIZE_T DeCommitFreeBlockThreshold;
00893   SIZE_T DeCommitTotalFreeThreshold;
00894   SIZE_T MaximumAllocationSize;
00895   SIZE_T VirtualMemoryThreshold;
00896   SIZE_T InitialCommit;
00897   SIZE_T InitialReserve;
00898   PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
00899   SIZE_T Reserved[2];
00900 } RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
00901 
00902 #if (NTDDI_VERSION >= NTDDI_WIN2K)
00903 
00904 typedef struct _GENERATE_NAME_CONTEXT {
00905   USHORT Checksum;
00906   BOOLEAN CheckSumInserted;
00907   _Field_range_(<=, 8) UCHAR NameLength;
00908   WCHAR NameBuffer[8];
00909   _Field_range_(<=, 4) ULONG ExtensionLength;
00910   WCHAR ExtensionBuffer[4];
00911   ULONG LastIndexValue;
00912 } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
00913 
00914 typedef struct _PREFIX_TABLE_ENTRY {
00915   CSHORT NodeTypeCode;
00916   CSHORT NameLength;
00917   struct _PREFIX_TABLE_ENTRY *NextPrefixTree;
00918   RTL_SPLAY_LINKS Links;
00919   PSTRING Prefix;
00920 } PREFIX_TABLE_ENTRY, *PPREFIX_TABLE_ENTRY;
00921 
00922 typedef struct _PREFIX_TABLE {
00923   CSHORT NodeTypeCode;
00924   CSHORT NameLength;
00925   PPREFIX_TABLE_ENTRY NextPrefixTree;
00926 } PREFIX_TABLE, *PPREFIX_TABLE;
00927 
00928 typedef struct _UNICODE_PREFIX_TABLE_ENTRY {
00929   CSHORT NodeTypeCode;
00930   CSHORT NameLength;
00931   struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
00932   struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
00933   RTL_SPLAY_LINKS Links;
00934   PUNICODE_STRING Prefix;
00935 } UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
00936 
00937 typedef struct _UNICODE_PREFIX_TABLE {
00938   CSHORT NodeTypeCode;
00939   CSHORT NameLength;
00940   PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
00941   PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
00942 } UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
00943 
00944 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
00945 
00946 #if (NTDDI_VERSION >= NTDDI_WINXP)
00947 typedef struct _COMPRESSED_DATA_INFO {
00948   USHORT CompressionFormatAndEngine;
00949   UCHAR CompressionUnitShift;
00950   UCHAR ChunkShift;
00951   UCHAR ClusterShift;
00952   UCHAR Reserved;
00953   USHORT NumberOfChunks;
00954   ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
00955 } COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
00956 #endif
00957 /******************************************************************************
00958  *                         Runtime Library Functions                          *
00959  ******************************************************************************/
00960 
00961 
00962 #if (NTDDI_VERSION >= NTDDI_WIN2K)
00963 
00964 
00965 _Must_inspect_result_
00966 _Ret_maybenull_
00967 _Post_writable_byte_size_(Size)
00968 NTSYSAPI
00969 PVOID
00970 NTAPI
00971 RtlAllocateHeap(
00972   _In_ HANDLE HeapHandle,
00973   _In_opt_ ULONG Flags,
00974   _In_ SIZE_T Size);
00975 
00976 _Success_(return != 0)
00977 NTSYSAPI
00978 BOOLEAN
00979 NTAPI
00980 RtlFreeHeap(
00981   _In_ PVOID HeapHandle,
00982   _In_opt_ ULONG Flags,
00983   _In_ _Post_invalid_ PVOID BaseAddress);
00984 
00985 NTSYSAPI
00986 VOID
00987 NTAPI
00988 RtlCaptureContext(
00989   _Out_ PCONTEXT ContextRecord);
00990 
00991 _Ret_range_(<, MAXLONG)
00992 NTSYSAPI
00993 ULONG
00994 NTAPI
00995 RtlRandom(
00996   _Inout_ PULONG Seed);
00997 
00998 _IRQL_requires_max_(APC_LEVEL)
00999 _Success_(return != 0)
01000 _Must_inspect_result_
01001 NTSYSAPI
01002 BOOLEAN
01003 NTAPI
01004 RtlCreateUnicodeString(
01005   _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem))
01006     PUNICODE_STRING DestinationString,
01007   _In_z_ PCWSTR SourceString);
01008 
01009 _IRQL_requires_max_(APC_LEVEL)
01010 NTSYSAPI
01011 NTSTATUS
01012 NTAPI
01013 RtlAppendStringToString(
01014   _Inout_ PSTRING Destination,
01015   _In_ const STRING *Source);
01016 
01017 _IRQL_requires_max_(PASSIVE_LEVEL)
01018 _Must_inspect_result_
01019 NTSYSAPI
01020 NTSTATUS
01021 NTAPI
01022 RtlOemStringToUnicodeString(
01023   _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem)))
01024   _When_(!AllocateDestinationString, _Inout_)
01025     PUNICODE_STRING DestinationString,
01026   _In_ PCOEM_STRING SourceString,
01027   _In_ BOOLEAN AllocateDestinationString);
01028 
01029 _IRQL_requires_max_(PASSIVE_LEVEL)
01030 _Must_inspect_result_
01031 NTSYSAPI
01032 NTSTATUS
01033 NTAPI
01034 RtlUnicodeStringToOemString(
01035   _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem)))
01036   _When_(!AllocateDestinationString, _Inout_)
01037     POEM_STRING DestinationString,
01038   _In_ PCUNICODE_STRING SourceString,
01039   _In_ BOOLEAN AllocateDestinationString);
01040 
01041 _IRQL_requires_max_(PASSIVE_LEVEL)
01042 _Must_inspect_result_
01043 NTSYSAPI
01044 NTSTATUS
01045 NTAPI
01046 RtlUpcaseUnicodeStringToOemString(
01047   _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem)))
01048   _When_(!AllocateDestinationString, _Inout_)
01049     POEM_STRING DestinationString,
01050   _In_ PCUNICODE_STRING SourceString,
01051   _In_ BOOLEAN AllocateDestinationString);
01052 
01053 _IRQL_requires_max_(PASSIVE_LEVEL)
01054 _Must_inspect_result_
01055 NTSYSAPI
01056 NTSTATUS
01057 NTAPI
01058 RtlOemStringToCountedUnicodeString(
01059   _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem)))
01060   _When_(!AllocateDestinationString, _Inout_)
01061     PUNICODE_STRING DestinationString,
01062   _In_ PCOEM_STRING SourceString,
01063   _In_ BOOLEAN AllocateDestinationString);
01064 
01065 _IRQL_requires_max_(PASSIVE_LEVEL)
01066 _Must_inspect_result_
01067 NTSYSAPI
01068 NTSTATUS
01069 NTAPI
01070 RtlUnicodeStringToCountedOemString(
01071   _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem)))
01072   _When_(!AllocateDestinationString, _Inout_)
01073     POEM_STRING DestinationString,
01074   _In_ PCUNICODE_STRING SourceString,
01075   _In_ BOOLEAN AllocateDestinationString);
01076 
01077 _IRQL_requires_max_(PASSIVE_LEVEL)
01078 _Must_inspect_result_
01079 NTSYSAPI
01080 NTSTATUS
01081 NTAPI
01082 RtlUpcaseUnicodeStringToCountedOemString(
01083   _When_(AllocateDestinationString, _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem)))
01084   _When_(!AllocateDestinationString, _Inout_)
01085     POEM_STRING DestinationString,
01086   _In_ PCUNICODE_STRING SourceString,
01087   _In_ BOOLEAN AllocateDestinationString);
01088 
01089 _IRQL_requires_max_(PASSIVE_LEVEL)
01090 _When_(AllocateDestinationString, _Must_inspect_result_)
01091 NTSYSAPI
01092 NTSTATUS
01093 NTAPI
01094 RtlDowncaseUnicodeString(
01095   _When_(AllocateDestinationString, _Out_ _At_(UniDest->Buffer, __drv_allocatesMem(Mem)))
01096   _When_(!AllocateDestinationString, _Inout_)
01097     PUNICODE_STRING UniDest,
01098   _In_ PCUNICODE_STRING UniSource,
01099   _In_ BOOLEAN AllocateDestinationString);
01100 
01101 _IRQL_requires_max_(PASSIVE_LEVEL)
01102 NTSYSAPI
01103 VOID
01104 NTAPI
01105 RtlFreeOemString(
01106   _Inout_ _At_(OemString->Buffer, __drv_freesMem(Mem)) POEM_STRING OemString);
01107 
01108 _IRQL_requires_max_(PASSIVE_LEVEL)
01109 NTSYSAPI
01110 ULONG
01111 NTAPI
01112 RtlxUnicodeStringToOemSize(
01113   _In_ PCUNICODE_STRING UnicodeString);
01114 
01115 _IRQL_requires_max_(PASSIVE_LEVEL)
01116 NTSYSAPI
01117 ULONG
01118 NTAPI
01119 RtlxOemStringToUnicodeSize(
01120   _In_ PCOEM_STRING OemString);
01121 
01122 _IRQL_requires_max_(PASSIVE_LEVEL)
01123 NTSYSAPI
01124 NTSTATUS
01125 NTAPI
01126 RtlMultiByteToUnicodeN(
01127   _Out_writes_bytes_to_(MaxBytesInUnicodeString, *BytesInUnicodeString) PWCH UnicodeString,
01128   _In_ ULONG MaxBytesInUnicodeString,
01129   _Out_opt_ PULONG BytesInUnicodeString,
01130   _In_reads_bytes_(BytesInMultiByteString) const CHAR *MultiByteString,
01131   _In_ ULONG BytesInMultiByteString);
01132 
01133 _IRQL_requires_max_(PASSIVE_LEVEL)
01134 NTSYSAPI
01135 NTSTATUS
01136 NTAPI
01137 RtlMultiByteToUnicodeSize(
01138   _Out_ PULONG BytesInUnicodeString,
01139   _In_reads_bytes_(BytesInMultiByteString) const CHAR *MultiByteString,
01140   _In_ ULONG BytesInMultiByteString);
01141 
01142 _IRQL_requires_max_(PASSIVE_LEVEL)
01143 NTSYSAPI
01144 NTSTATUS
01145 NTAPI
01146 RtlUnicodeToMultiByteSize(
01147   _Out_ PULONG BytesInMultiByteString,
01148   _In_reads_bytes_(BytesInUnicodeString) PCWCH UnicodeString,
01149   _In_ ULONG BytesInUnicodeString);
01150 
01151 _IRQL_requires_max_(PASSIVE_LEVEL)
01152 NTSYSAPI
01153 NTSTATUS
01154 NTAPI
01155 RtlUnicodeToMultiByteN(
01156   _Out_writes_bytes_to_(MaxBytesInMultiByteString, *BytesInMultiByteString) PCHAR MultiByteString,
01157   _In_ ULONG MaxBytesInMultiByteString,
01158   _Out_opt_ PULONG BytesInMultiByteString,
01159   _In_reads_bytes_(BytesInUnicodeString) PCWCH UnicodeString,
01160   _In_ ULONG BytesInUnicodeString);
01161 
01162 _IRQL_requires_max_(PASSIVE_LEVEL)
01163 NTSYSAPI
01164 NTSTATUS
01165 NTAPI
01166 RtlUpcaseUnicodeToMultiByteN(
01167   _Out_writes_bytes_to_(MaxBytesInMultiByteString, *BytesInMultiByteString) PCHAR MultiByteString,
01168   _In_ ULONG MaxBytesInMultiByteString,
01169   _Out_opt_ PULONG BytesInMultiByteString,
01170   _In_reads_bytes_(BytesInUnicodeString) PCWCH UnicodeString,
01171   _In_ ULONG BytesInUnicodeString);
01172 
01173 _IRQL_requires_max_(PASSIVE_LEVEL)
01174 NTSYSAPI
01175 NTSTATUS
01176 NTAPI
01177 RtlOemToUnicodeN(
01178   _Out_writes_bytes_to_(MaxBytesInUnicodeString, *BytesInUnicodeString) PWSTR UnicodeString,
01179   _In_ ULONG MaxBytesInUnicodeString,
01180   _Out_opt_ PULONG BytesInUnicodeString,
01181   _In_reads_bytes_(BytesInOemString) PCCH OemString,
01182   _In_ ULONG BytesInOemString);
01183 
01184 _IRQL_requires_max_(PASSIVE_LEVEL)
01185 NTSYSAPI
01186 NTSTATUS
01187 NTAPI
01188 RtlUnicodeToOemN(
01189   _Out_writes_bytes_to_(MaxBytesInOemString, *BytesInOemString) PCHAR OemString,
01190   _In_ ULONG MaxBytesInOemString,
01191   _Out_opt_ PULONG BytesInOemString,
01192   _In_reads_bytes_(BytesInUnicodeString) PCWCH UnicodeString,
01193   _In_ ULONG BytesInUnicodeString);
01194 
01195 _IRQL_requires_max_(PASSIVE_LEVEL)
01196 NTSYSAPI
01197 NTSTATUS
01198 NTAPI
01199 RtlUpcaseUnicodeToOemN(
01200   _Out_writes_bytes_to_(MaxBytesInOemString, *BytesInOemString) PCHAR OemString,
01201   _In_ ULONG MaxBytesInOemString,
01202   _Out_opt_ PULONG BytesInOemString,
01203   _In_reads_bytes_(BytesInUnicodeString) PCWCH UnicodeString,
01204   _In_ ULONG BytesInUnicodeString);
01205 
01206 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
01207 _IRQL_requires_max_(PASSIVE_LEVEL)
01208 NTSYSAPI
01209 NTSTATUS
01210 NTAPI
01211 RtlGenerate8dot3Name(
01212   _In_ PCUNICODE_STRING Name,
01213   _In_ BOOLEAN AllowExtendedCharacters,
01214   _Inout_ PGENERATE_NAME_CONTEXT Context,
01215   _Inout_ PUNICODE_STRING Name8dot3);
01216 #else
01217 _IRQL_requires_max_(PASSIVE_LEVEL)
01218 NTSYSAPI
01219 VOID
01220 NTAPI
01221 RtlGenerate8dot3Name(
01222   _In_ PCUNICODE_STRING Name,
01223   _In_ BOOLEAN AllowExtendedCharacters,
01224   _Inout_ PGENERATE_NAME_CONTEXT Context,
01225   _Inout_ PUNICODE_STRING Name8dot3);
01226 #endif
01227 
01228 _IRQL_requires_max_(PASSIVE_LEVEL)
01229 _Must_inspect_result_
01230 NTSYSAPI
01231 BOOLEAN
01232 NTAPI
01233 RtlIsNameLegalDOS8Dot3(
01234   _In_ PCUNICODE_STRING Name,
01235   _Inout_opt_ POEM_STRING OemName,
01236   _Out_opt_ PBOOLEAN NameContainsSpaces);
01237 
01238 _IRQL_requires_max_(PASSIVE_LEVEL)
01239 _Must_inspect_result_
01240 NTSYSAPI
01241 BOOLEAN
01242 NTAPI
01243 RtlIsValidOemCharacter(
01244   _Inout_ PWCHAR Char);
01245 
01246 _IRQL_requires_max_(PASSIVE_LEVEL)
01247 NTSYSAPI
01248 VOID
01249 NTAPI
01250 PfxInitialize(
01251   _Out_ PPREFIX_TABLE PrefixTable);
01252 
01253 _IRQL_requires_max_(PASSIVE_LEVEL)
01254 NTSYSAPI
01255 BOOLEAN
01256 NTAPI
01257 PfxInsertPrefix(
01258   _In_ PPREFIX_TABLE PrefixTable,
01259   _In_ __drv_aliasesMem PSTRING Prefix,
01260   _Out_ PPREFIX_TABLE_ENTRY PrefixTableEntry);
01261 
01262 _IRQL_requires_max_(PASSIVE_LEVEL)
01263 NTSYSAPI
01264 VOID
01265 NTAPI
01266 PfxRemovePrefix(
01267   _In_ PPREFIX_TABLE PrefixTable,
01268   _In_ PPREFIX_TABLE_ENTRY PrefixTableEntry);
01269 
01270 _IRQL_requires_max_(PASSIVE_LEVEL)
01271 _Must_inspect_result_
01272 NTSYSAPI
01273 PPREFIX_TABLE_ENTRY
01274 NTAPI
01275 PfxFindPrefix(
01276   _In_ PPREFIX_TABLE PrefixTable,
01277   _In_ PSTRING FullName);
01278 
01279 _IRQL_requires_max_(PASSIVE_LEVEL)
01280 NTSYSAPI
01281 VOID
01282 NTAPI
01283 RtlInitializeUnicodePrefix(
01284   _Out_ PUNICODE_PREFIX_TABLE PrefixTable);
01285 
01286 _IRQL_requires_max_(PASSIVE_LEVEL)
01287 NTSYSAPI
01288 BOOLEAN
01289 NTAPI
01290 RtlInsertUnicodePrefix(
01291   _In_ PUNICODE_PREFIX_TABLE PrefixTable,
01292   _In_ __drv_aliasesMem PUNICODE_STRING Prefix,
01293   _Out_ PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry);
01294 
01295 _IRQL_requires_max_(PASSIVE_LEVEL)
01296 NTSYSAPI
01297 VOID
01298 NTAPI
01299 RtlRemoveUnicodePrefix(
01300   _In_ PUNICODE_PREFIX_TABLE PrefixTable,
01301   _In_ PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry);
01302 
01303 _IRQL_requires_max_(PASSIVE_LEVEL)
01304 _Must_inspect_result_
01305 NTSYSAPI
01306 PUNICODE_PREFIX_TABLE_ENTRY
01307 NTAPI
01308 RtlFindUnicodePrefix(
01309   _In_ PUNICODE_PREFIX_TABLE PrefixTable,
01310   _In_ PUNICODE_STRING FullName,
01311   _In_ ULONG CaseInsensitiveIndex);
01312 
01313 _IRQL_requires_max_(PASSIVE_LEVEL)
01314 _Must_inspect_result_
01315 NTSYSAPI
01316 PUNICODE_PREFIX_TABLE_ENTRY
01317 NTAPI
01318 RtlNextUnicodePrefix(
01319   _In_ PUNICODE_PREFIX_TABLE PrefixTable,
01320   _In_ BOOLEAN Restart);
01321 
01322 _Must_inspect_result_
01323 NTSYSAPI
01324 SIZE_T
01325 NTAPI
01326 RtlCompareMemoryUlong(
01327   _In_reads_bytes_(Length) PVOID Source,
01328   _In_ SIZE_T Length,
01329   _In_ ULONG Pattern);
01330 
01331 _Success_(return != 0)
01332 NTSYSAPI
01333 BOOLEAN
01334 NTAPI
01335 RtlTimeToSecondsSince1980(
01336   _In_ PLARGE_INTEGER Time,
01337   _Out_ PULONG ElapsedSeconds);
01338 
01339 NTSYSAPI
01340 VOID
01341 NTAPI
01342 RtlSecondsSince1980ToTime(
01343   _In_ ULONG ElapsedSeconds,
01344   _Out_ PLARGE_INTEGER Time);
01345 
01346 _Success_(return != 0)
01347 NTSYSAPI
01348 BOOLEAN
01349 NTAPI
01350 RtlTimeToSecondsSince1970(
01351   _In_ PLARGE_INTEGER Time,
01352   _Out_ PULONG ElapsedSeconds);
01353 
01354 NTSYSAPI
01355 VOID
01356 NTAPI
01357 RtlSecondsSince1970ToTime(
01358   _In_ ULONG ElapsedSeconds,
01359   _Out_ PLARGE_INTEGER Time);
01360 
01361 _IRQL_requires_max_(APC_LEVEL)
01362 _Must_inspect_result_
01363 NTSYSAPI
01364 BOOLEAN
01365 NTAPI
01366 RtlValidSid(
01367   _In_ PSID Sid);
01368 
01369 _Must_inspect_result_
01370 NTSYSAPI
01371 BOOLEAN
01372 NTAPI
01373 RtlEqualSid(
01374   _In_ PSID Sid1,
01375   _In_ PSID Sid2);
01376 
01377 _IRQL_requires_max_(APC_LEVEL)
01378 _Must_inspect_result_
01379 NTSYSAPI
01380 BOOLEAN
01381 NTAPI
01382 RtlEqualPrefixSid(
01383   _In_ PSID Sid1,
01384   _In_ PSID Sid2);
01385 
01386 _IRQL_requires_max_(APC_LEVEL)
01387 NTSYSAPI
01388 ULONG
01389 NTAPI
01390 RtlLengthRequiredSid(
01391   _In_ ULONG SubAuthorityCount);
01392 
01393 NTSYSAPI
01394 PVOID
01395 NTAPI
01396 RtlFreeSid(
01397   _In_ _Post_invalid_ PSID Sid);
01398 
01399 _Must_inspect_result_
01400 NTSYSAPI
01401 NTSTATUS
01402 NTAPI
01403 RtlAllocateAndInitializeSid(
01404   _In_ PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
01405   _In_ UCHAR SubAuthorityCount,
01406   _In_ ULONG SubAuthority0,
01407   _In_ ULONG SubAuthority1,
01408   _In_ ULONG SubAuthority2,
01409   _In_ ULONG SubAuthority3,
01410   _In_ ULONG SubAuthority4,
01411   _In_ ULONG SubAuthority5,
01412   _In_ ULONG SubAuthority6,
01413   _In_ ULONG SubAuthority7,
01414   _Outptr_ PSID *Sid);
01415 
01416 _IRQL_requires_max_(APC_LEVEL)
01417 NTSYSAPI
01418 NTSTATUS
01419 NTAPI
01420 RtlInitializeSid(
01421   _Out_ PSID Sid,
01422   _In_ PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
01423   _In_ UCHAR SubAuthorityCount);
01424 
01425 NTSYSAPI
01426 PULONG
01427 NTAPI
01428 RtlSubAuthoritySid(
01429   _In_ PSID Sid,
01430   _In_ ULONG SubAuthority);
01431 
01432 _Post_satisfies_(return >= 8 && return <= SECURITY_MAX_SID_SIZE)
01433 NTSYSAPI
01434 ULONG
01435 NTAPI
01436 RtlLengthSid(
01437   _In_ PSID Sid);
01438 
01439 _IRQL_requires_max_(APC_LEVEL)
01440 NTSYSAPI
01441 NTSTATUS
01442 NTAPI
01443 RtlCopySid(
01444   _In_ ULONG Length,
01445   _Out_writes_bytes_(Length) PSID Destination,
01446   _In_ PSID Source);
01447 
01448 _IRQL_requires_max_(APC_LEVEL)
01449 NTSYSAPI
01450 NTSTATUS
01451 NTAPI
01452 RtlConvertSidToUnicodeString(
01453   _Inout_ PUNICODE_STRING UnicodeString,
01454   _In_ PSID Sid,
01455   _In_ BOOLEAN AllocateDestinationString);
01456 
01457 _IRQL_requires_max_(APC_LEVEL)
01458 NTSYSAPI
01459 VOID
01460 NTAPI
01461 RtlCopyLuid(
01462   _Out_ PLUID DestinationLuid,
01463   _In_ PLUID SourceLuid);
01464 
01465 _IRQL_requires_max_(APC_LEVEL)
01466 NTSYSAPI
01467 NTSTATUS
01468 NTAPI
01469 RtlCreateAcl(
01470   _Out_writes_bytes_(AclLength) PACL Acl,
01471   _In_ ULONG AclLength,
01472   _In_ ULONG AclRevision);
01473 
01474 _IRQL_requires_max_(APC_LEVEL)
01475 NTSYSAPI
01476 NTSTATUS
01477 NTAPI
01478 RtlAddAce(
01479   _Inout_ PACL Acl,
01480   _In_ ULONG AceRevision,
01481   _In_ ULONG StartingAceIndex,
01482   _In_reads_bytes_(AceListLength) PVOID AceList,
01483   _In_ ULONG AceListLength);
01484 
01485 _IRQL_requires_max_(APC_LEVEL)
01486 NTSYSAPI
01487 NTSTATUS
01488 NTAPI
01489 RtlDeleteAce(
01490   _Inout_ PACL Acl,
01491   _In_ ULONG AceIndex);
01492 
01493 NTSYSAPI
01494 NTSTATUS
01495 NTAPI
01496 RtlGetAce(
01497   _In_ PACL Acl,
01498   _In_ ULONG AceIndex,
01499   _Outptr_ PVOID *Ace);
01500 
01501 _IRQL_requires_max_(APC_LEVEL)
01502 NTSYSAPI
01503 NTSTATUS
01504 NTAPI
01505 RtlAddAccessAllowedAce(
01506   _Inout_ PACL Acl,
01507   _In_ ULONG AceRevision,
01508   _In_ ACCESS_MASK AccessMask,
01509   _In_ PSID Sid);
01510 
01511 _IRQL_requires_max_(APC_LEVEL)
01512 NTSYSAPI
01513 NTSTATUS
01514 NTAPI
01515 RtlAddAccessAllowedAceEx(
01516   _Inout_ PACL Acl,
01517   _In_ ULONG AceRevision,
01518   _In_ ULONG AceFlags,
01519   _In_ ACCESS_MASK AccessMask,
01520   _In_ PSID Sid);
01521 
01522 _IRQL_requires_max_(APC_LEVEL)
01523 NTSYSAPI
01524 NTSTATUS
01525 NTAPI
01526 RtlCreateSecurityDescriptorRelative(
01527   _Out_ PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor,
01528   _In_ ULONG Revision);
01529 
01530 NTSYSAPI
01531 NTSTATUS
01532 NTAPI
01533 RtlGetDaclSecurityDescriptor(
01534   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
01535   _Out_ PBOOLEAN DaclPresent,
01536   _Out_ PACL *Dacl,
01537   _Out_ PBOOLEAN DaclDefaulted);
01538 
01539 _IRQL_requires_max_(APC_LEVEL)
01540 NTSYSAPI
01541 NTSTATUS
01542 NTAPI
01543 RtlSetOwnerSecurityDescriptor(
01544   _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor,
01545   _In_opt_ PSID Owner,
01546   _In_opt_ BOOLEAN OwnerDefaulted);
01547 
01548 _IRQL_requires_max_(APC_LEVEL)
01549 NTSYSAPI
01550 NTSTATUS
01551 NTAPI
01552 RtlGetOwnerSecurityDescriptor(
01553   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
01554   _Out_ PSID *Owner,
01555   _Out_ PBOOLEAN OwnerDefaulted);
01556 
01557 _IRQL_requires_max_(APC_LEVEL)
01558 _When_(Status < 0, _Out_range_(>, 0))
01559 _When_(Status >= 0, _Out_range_(==, 0))
01560 NTSYSAPI
01561 ULONG
01562 NTAPI
01563 RtlNtStatusToDosError(
01564   _In_ NTSTATUS Status);
01565 
01566 _IRQL_requires_max_(PASSIVE_LEVEL)
01567 NTSYSAPI
01568 NTSTATUS
01569 NTAPI
01570 RtlCustomCPToUnicodeN(
01571   _In_ PCPTABLEINFO CustomCP,
01572   _Out_writes_bytes_to_(MaxBytesInUnicodeString, *BytesInUnicodeString) PWCH UnicodeString,
01573   _In_ ULONG MaxBytesInUnicodeString,
01574   _Out_opt_ PULONG BytesInUnicodeString,
01575   _In_reads_bytes_(BytesInCustomCPString) PCH CustomCPString,
01576   _In_ ULONG BytesInCustomCPString);
01577 
01578 _IRQL_requires_max_(PASSIVE_LEVEL)
01579 NTSYSAPI
01580 NTSTATUS
01581 NTAPI
01582 RtlUnicodeToCustomCPN(
01583   _In_ PCPTABLEINFO CustomCP,
01584   _Out_writes_bytes_to_(MaxBytesInCustomCPString, *BytesInCustomCPString) PCH CustomCPString,
01585   _In_ ULONG MaxBytesInCustomCPString,
01586   _Out_opt_ PULONG BytesInCustomCPString,
01587   _In_reads_bytes_(BytesInUnicodeString) PWCH UnicodeString,
01588   _In_ ULONG BytesInUnicodeString);
01589 
01590 _IRQL_requires_max_(PASSIVE_LEVEL)
01591 NTSYSAPI
01592 NTSTATUS
01593 NTAPI
01594 RtlUpcaseUnicodeToCustomCPN(
01595   _In_ PCPTABLEINFO CustomCP,
01596   _Out_writes_bytes_to_(MaxBytesInCustomCPString, *BytesInCustomCPString) PCH CustomCPString,
01597   _In_ ULONG MaxBytesInCustomCPString,
01598   _Out_opt_ PULONG BytesInCustomCPString,
01599   _In_reads_bytes_(BytesInUnicodeString) PWCH UnicodeString,
01600   _In_ ULONG BytesInUnicodeString);
01601 
01602 _IRQL_requires_max_(PASSIVE_LEVEL)
01603 NTSYSAPI
01604 VOID
01605 NTAPI
01606 RtlInitCodePageTable(
01607   _In_ PUSHORT TableBase,
01608   _Inout_ PCPTABLEINFO CodePageTable);
01609 
01610 
01611 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
01612 
01613 
01614 #if (NTDDI_VERSION >= NTDDI_WINXP)
01615 
01616 
01617 
01618 _Must_inspect_result_
01619 NTSYSAPI
01620 PVOID
01621 NTAPI
01622 RtlCreateHeap(
01623   _In_ ULONG Flags,
01624   _In_opt_ PVOID HeapBase,
01625   _In_opt_ SIZE_T ReserveSize,
01626   _In_opt_ SIZE_T CommitSize,
01627   _In_opt_ PVOID Lock,
01628   _In_opt_ PRTL_HEAP_PARAMETERS Parameters);
01629 
01630 NTSYSAPI
01631 PVOID
01632 NTAPI
01633 RtlDestroyHeap(
01634   _In_ _Post_invalid_ PVOID HeapHandle);
01635 
01636 NTSYSAPI
01637 USHORT
01638 NTAPI
01639 RtlCaptureStackBackTrace(
01640   _In_ ULONG FramesToSkip,
01641   _In_ ULONG FramesToCapture,
01642   _Out_writes_to_(FramesToCapture, return) PVOID *BackTrace,
01643   _Out_opt_ PULONG BackTraceHash);
01644 
01645 _Ret_range_(<, MAXLONG)
01646 NTSYSAPI
01647 ULONG
01648 NTAPI
01649 RtlRandomEx(
01650   _Inout_ PULONG Seed);
01651 
01652 _IRQL_requires_max_(DISPATCH_LEVEL)
01653 NTSYSAPI
01654 NTSTATUS
01655 NTAPI
01656 RtlInitUnicodeStringEx(
01657   _Out_ PUNICODE_STRING DestinationString,
01658   _In_opt_z_ __drv_aliasesMem PCWSTR SourceString);
01659 
01660 _Must_inspect_result_
01661 NTSYSAPI
01662 NTSTATUS
01663 NTAPI
01664 RtlValidateUnicodeString(
01665   _In_ ULONG Flags,
01666   _In_ PCUNICODE_STRING String);
01667 
01668 _IRQL_requires_max_(PASSIVE_LEVEL)
01669 _Must_inspect_result_
01670 NTSYSAPI
01671 NTSTATUS
01672 NTAPI
01673 RtlDuplicateUnicodeString(
01674   _In_ ULONG Flags,
01675   _In_ PCUNICODE_STRING SourceString,
01676   _Out_ _At_(DestinationString->Buffer, __drv_allocatesMem(Mem)) PUNICODE_STRING DestinationString);
01677 
01678 NTSYSAPI
01679 NTSTATUS
01680 NTAPI
01681 RtlGetCompressionWorkSpaceSize(
01682   _In_ USHORT CompressionFormatAndEngine,
01683   _Out_ PULONG CompressBufferWorkSpaceSize,
01684   _Out_ PULONG CompressFragmentWorkSpaceSize);
01685 
01686 NTSYSAPI
01687 NTSTATUS
01688 NTAPI
01689 RtlCompressBuffer(
01690   _In_ USHORT CompressionFormatAndEngine,
01691   _In_reads_bytes_(UncompressedBufferSize) PUCHAR UncompressedBuffer,
01692   _In_ ULONG UncompressedBufferSize,
01693   _Out_writes_bytes_to_(CompressedBufferSize, *FinalCompressedSize) PUCHAR CompressedBuffer,
01694   _In_ ULONG CompressedBufferSize,
01695   _In_ ULONG UncompressedChunkSize,
01696   _Out_ PULONG FinalCompressedSize,
01697   _In_ PVOID WorkSpace);
01698 
01699 _IRQL_requires_max_(APC_LEVEL)
01700 NTSYSAPI
01701 NTSTATUS
01702 NTAPI
01703 RtlDecompressBuffer(
01704   _In_ USHORT CompressionFormat,
01705   _Out_writes_bytes_to_(UncompressedBufferSize, *FinalUncompressedSize) PUCHAR UncompressedBuffer,
01706   _In_ ULONG UncompressedBufferSize,
01707   _In_reads_bytes_(CompressedBufferSize) PUCHAR CompressedBuffer,
01708   _In_ ULONG CompressedBufferSize,
01709   _Out_ PULONG FinalUncompressedSize);
01710 
01711 _IRQL_requires_max_(APC_LEVEL)
01712 NTSYSAPI
01713 NTSTATUS
01714 NTAPI
01715 RtlDecompressFragment(
01716   _In_ USHORT CompressionFormat,
01717   _Out_writes_bytes_to_(UncompressedFragmentSize, *FinalUncompressedSize) PUCHAR UncompressedFragment,
01718   _In_ ULONG UncompressedFragmentSize,
01719   _In_reads_bytes_(CompressedBufferSize) PUCHAR CompressedBuffer,
01720   _In_ ULONG CompressedBufferSize,
01721   _In_range_(<, CompressedBufferSize) ULONG FragmentOffset,
01722   _Out_ PULONG FinalUncompressedSize,
01723   _In_ PVOID WorkSpace);
01724 
01725 _IRQL_requires_max_(APC_LEVEL)
01726 NTSYSAPI
01727 NTSTATUS
01728 NTAPI
01729 RtlDescribeChunk(
01730   _In_ USHORT CompressionFormat,
01731   _Inout_ PUCHAR *CompressedBuffer,
01732   _In_ PUCHAR EndOfCompressedBufferPlus1,
01733   _Out_ PUCHAR *ChunkBuffer,
01734   _Out_ PULONG ChunkSize);
01735 
01736 _IRQL_requires_max_(APC_LEVEL)
01737 NTSYSAPI
01738 NTSTATUS
01739 NTAPI
01740 RtlReserveChunk(
01741   _In_ USHORT CompressionFormat,
01742   _Inout_ PUCHAR *CompressedBuffer,
01743   _In_ PUCHAR EndOfCompressedBufferPlus1,
01744   _Out_ PUCHAR *ChunkBuffer,
01745   _In_ ULONG ChunkSize);
01746 
01747 _IRQL_requires_max_(APC_LEVEL)
01748 NTSYSAPI
01749 NTSTATUS
01750 NTAPI
01751 RtlDecompressChunks(
01752   _Out_writes_bytes_(UncompressedBufferSize) PUCHAR UncompressedBuffer,
01753   _In_ ULONG UncompressedBufferSize,
01754   _In_reads_bytes_(CompressedBufferSize) PUCHAR CompressedBuffer,
01755   _In_ ULONG CompressedBufferSize,
01756   _In_reads_bytes_(CompressedTailSize) PUCHAR CompressedTail,
01757   _In_ ULONG CompressedTailSize,
01758   _In_ PCOMPRESSED_DATA_INFO CompressedDataInfo);
01759 
01760 _IRQL_requires_max_(APC_LEVEL)
01761 NTSYSAPI
01762 NTSTATUS
01763 NTAPI
01764 RtlCompressChunks(
01765   _In_reads_bytes_(UncompressedBufferSize) PUCHAR UncompressedBuffer,
01766   _In_ ULONG UncompressedBufferSize,
01767   _Out_writes_bytes_(CompressedBufferSize) PUCHAR CompressedBuffer,
01768   _In_range_(>=, (UncompressedBufferSize - (UncompressedBufferSize / 16))) ULONG CompressedBufferSize,
01769   _Inout_updates_bytes_(CompressedDataInfoLength) PCOMPRESSED_DATA_INFO CompressedDataInfo,
01770   _In_range_(>, sizeof(COMPRESSED_DATA_INFO)) ULONG CompressedDataInfoLength,
01771   _In_ PVOID WorkSpace);
01772 
01773 _IRQL_requires_max_(APC_LEVEL)
01774 NTSYSAPI
01775 PSID_IDENTIFIER_AUTHORITY
01776 NTAPI
01777 RtlIdentifierAuthoritySid(
01778   _In_ PSID Sid);
01779 
01780 NTSYSAPI
01781 PUCHAR
01782 NTAPI
01783 RtlSubAuthorityCountSid(
01784   _In_ PSID Sid);
01785 
01786 _When_(Status < 0, _Out_range_(>, 0))
01787 _When_(Status >= 0, _Out_range_(==, 0))
01788 NTSYSAPI
01789 ULONG
01790 NTAPI
01791 RtlNtStatusToDosErrorNoTeb(
01792   _In_ NTSTATUS Status);
01793 
01794 _IRQL_requires_max_(PASSIVE_LEVEL)
01795 NTSYSAPI
01796 NTSTATUS
01797 NTAPI
01798 RtlCreateSystemVolumeInformationFolder(
01799   _In_ PCUNICODE_STRING VolumeRootPath);
01800 
01801 #if defined(_M_AMD64)
01802 
01803 FORCEINLINE
01804 VOID
01805 RtlFillMemoryUlong(
01806   _Out_writes_bytes_all_(Length) PVOID Destination,
01807   _In_ SIZE_T Length,
01808   _In_ ULONG Pattern)
01809 {
01810   PULONG Address = (PULONG)Destination;
01811   if ((Length /= 4) != 0) {
01812     if (((ULONG64)Address & 4) != 0) {
01813       *Address = Pattern;
01814       if ((Length -= 1) == 0) {
01815         return;
01816       }
01817       Address += 1;
01818     }
01819     __stosq((PULONG64)(Address), Pattern | ((ULONG64)Pattern << 32), Length / 2);
01820     if ((Length & 1) != 0) Address[Length - 1] = Pattern;
01821   }
01822   return;
01823 }
01824 
01825 #define RtlFillMemoryUlonglong(Destination, Length, Pattern)                \
01826     __stosq((PULONG64)(Destination), Pattern, (Length) / 8)
01827 
01828 #else
01829 
01830 NTSYSAPI
01831 VOID
01832 NTAPI
01833 RtlFillMemoryUlong(
01834   OUT PVOID Destination,
01835   IN SIZE_T Length,
01836   IN ULONG Pattern);
01837 
01838 NTSYSAPI
01839 VOID
01840 NTAPI
01841 RtlFillMemoryUlonglong(
01842   _Out_writes_bytes_all_(Length) PVOID Destination,
01843   _In_ SIZE_T Length,
01844   _In_ ULONGLONG Pattern);
01845 
01846 #endif /* defined(_M_AMD64) */
01847 
01848 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
01849 
01850 #if (NTDDI_VERSION >= NTDDI_WS03)
01851 _IRQL_requires_max_(DISPATCH_LEVEL)
01852 NTSYSAPI
01853 NTSTATUS
01854 NTAPI
01855 RtlInitAnsiStringEx(
01856   _Out_ PANSI_STRING DestinationString,
01857   _In_opt_z_ __drv_aliasesMem PCSZ SourceString);
01858 #endif
01859 
01860 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
01861 
01862 _IRQL_requires_max_(APC_LEVEL)
01863 NTSYSAPI
01864 NTSTATUS
01865 NTAPI
01866 RtlGetSaclSecurityDescriptor(
01867   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
01868   _Out_ PBOOLEAN SaclPresent,
01869   _Out_ PACL *Sacl,
01870   _Out_ PBOOLEAN SaclDefaulted);
01871 
01872 _IRQL_requires_max_(APC_LEVEL)
01873 NTSYSAPI
01874 NTSTATUS
01875 NTAPI
01876 RtlSetGroupSecurityDescriptor(
01877   _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor,
01878   _In_opt_ PSID Group,
01879   _In_opt_ BOOLEAN GroupDefaulted);
01880 
01881 _IRQL_requires_max_(APC_LEVEL)
01882 NTSYSAPI
01883 NTSTATUS
01884 NTAPI
01885 RtlGetGroupSecurityDescriptor(
01886   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
01887   _Out_ PSID *Group,
01888   _Out_ PBOOLEAN GroupDefaulted);
01889 
01890 _IRQL_requires_max_(APC_LEVEL)
01891 NTSYSAPI
01892 NTSTATUS
01893 NTAPI
01894 RtlAbsoluteToSelfRelativeSD(
01895   _In_ PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
01896   _Out_writes_bytes_to_opt_(*BufferLength, *BufferLength) PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
01897   _Inout_ PULONG BufferLength);
01898 
01899 _IRQL_requires_max_(APC_LEVEL)
01900 NTSYSAPI
01901 NTSTATUS
01902 NTAPI
01903 RtlSelfRelativeToAbsoluteSD(
01904   _In_ PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
01905   _Out_writes_bytes_to_opt_(*AbsoluteSecurityDescriptorSize, *AbsoluteSecurityDescriptorSize) PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
01906   _Inout_ PULONG AbsoluteSecurityDescriptorSize,
01907   _Out_writes_bytes_to_opt_(*DaclSize, *DaclSize) PACL Dacl,
01908   _Inout_ PULONG DaclSize,
01909   _Out_writes_bytes_to_opt_(*SaclSize, *SaclSize) PACL Sacl,
01910   _Inout_ PULONG SaclSize,
01911   _Out_writes_bytes_to_opt_(*OwnerSize, *OwnerSize) PSID Owner,
01912   _Inout_ PULONG OwnerSize,
01913   _Out_writes_bytes_to_opt_(*PrimaryGroupSize, *PrimaryGroupSize) PSID PrimaryGroup,
01914   _Inout_ PULONG PrimaryGroupSize);
01915 
01916 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
01917 
01918 #if (NTDDI_VERSION >= NTDDI_VISTA)
01919 
01920 NTSYSAPI
01921 NTSTATUS
01922 NTAPI
01923 RtlNormalizeString(
01924   _In_ ULONG NormForm,
01925   _In_ PCWSTR SourceString,
01926   _In_ LONG SourceStringLength,
01927   _Out_writes_to_(*DestinationStringLength, *DestinationStringLength) PWSTR DestinationString,
01928   _Inout_ PLONG DestinationStringLength);
01929 
01930 NTSYSAPI
01931 NTSTATUS
01932 NTAPI
01933 RtlIsNormalizedString(
01934   _In_ ULONG NormForm,
01935   _In_ PCWSTR SourceString,
01936   _In_ LONG SourceStringLength,
01937   _Out_ PBOOLEAN Normalized);
01938 
01939 NTSYSAPI
01940 NTSTATUS
01941 NTAPI
01942 RtlIdnToAscii(
01943   _In_ ULONG Flags,
01944   _In_ PCWSTR SourceString,
01945   _In_ LONG SourceStringLength,
01946   _Out_writes_to_(*DestinationStringLength, *DestinationStringLength) PWSTR DestinationString,
01947   _Inout_ PLONG DestinationStringLength);
01948 
01949 NTSYSAPI
01950 NTSTATUS
01951 NTAPI
01952 RtlIdnToUnicode(
01953   IN ULONG Flags,
01954   IN PCWSTR SourceString,
01955   IN LONG SourceStringLength,
01956   OUT PWSTR DestinationString,
01957   IN OUT PLONG DestinationStringLength);
01958 
01959 NTSYSAPI
01960 NTSTATUS
01961 NTAPI
01962 RtlIdnToNameprepUnicode(
01963   _In_ ULONG Flags,
01964   _In_ PCWSTR SourceString,
01965   _In_ LONG SourceStringLength,
01966   _Out_writes_to_(*DestinationStringLength, *DestinationStringLength) PWSTR DestinationString,
01967   _Inout_ PLONG DestinationStringLength);
01968 
01969 NTSYSAPI
01970 NTSTATUS
01971 NTAPI
01972 RtlCreateServiceSid(
01973   _In_ PUNICODE_STRING ServiceName,
01974   _Out_writes_bytes_opt_(*ServiceSidLength) PSID ServiceSid,
01975   _Inout_ PULONG ServiceSidLength);
01976 
01977 NTSYSAPI
01978 LONG
01979 NTAPI
01980 RtlCompareAltitudes(
01981   _In_ PCUNICODE_STRING Altitude1,
01982   _In_ PCUNICODE_STRING Altitude2);
01983 
01984 
01985 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
01986 
01987 #if (NTDDI_VERSION >= NTDDI_WIN7)
01988 
01989 _IRQL_requires_max_(PASSIVE_LEVEL)
01990 _Must_inspect_result_
01991 NTSYSAPI
01992 NTSTATUS
01993 NTAPI
01994 RtlUnicodeToUTF8N(
01995   _Out_writes_bytes_to_(UTF8StringMaxByteCount, *UTF8StringActualByteCount) PCHAR UTF8StringDestination,
01996   _In_ ULONG UTF8StringMaxByteCount,
01997   _Out_ PULONG UTF8StringActualByteCount,
01998   _In_reads_bytes_(UnicodeStringByteCount) PCWCH UnicodeStringSource,
01999   _In_ ULONG UnicodeStringByteCount);
02000 
02001 _IRQL_requires_max_(PASSIVE_LEVEL)
02002 _Must_inspect_result_
02003 NTSYSAPI
02004 NTSTATUS
02005 NTAPI
02006 RtlUTF8ToUnicodeN(
02007   _Out_writes_bytes_to_(UnicodeStringMaxByteCount, *UnicodeStringActualByteCount) PWSTR UnicodeStringDestination,
02008   _In_ ULONG UnicodeStringMaxByteCount,
02009   _Out_ PULONG UnicodeStringActualByteCount,
02010   _In_reads_bytes_(UTF8StringByteCount) PCCH UTF8StringSource,
02011   _In_ ULONG UTF8StringByteCount);
02012 
02013 _IRQL_requires_max_(APC_LEVEL)
02014 NTSYSAPI
02015 NTSTATUS
02016 NTAPI
02017 RtlReplaceSidInSd(
02018   _Inout_ PSECURITY_DESCRIPTOR SecurityDescriptor,
02019   _In_ PSID OldSid,
02020   _In_ PSID NewSid,
02021   _Out_ ULONG *NumChanges);
02022 
02023 NTSYSAPI
02024 NTSTATUS
02025 NTAPI
02026 RtlCreateVirtualAccountSid(
02027   _In_ PCUNICODE_STRING Name,
02028   _In_ ULONG BaseSubAuthority,
02029   _Out_writes_bytes_(*SidLength) PSID Sid,
02030   _Inout_ PULONG SidLength);
02031 
02032 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
02033 
02034 
02035 #if defined(_AMD64_) || defined(_IA64_)
02036 
02037 
02038 
02039 #endif /* defined(_AMD64_) || defined(_IA64_) */
02040 
02041 
02042 
02043 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
02044 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
02045 
02046 #define RtlUnicodeStringToOemSize(STRING) (NLS_MB_OEM_CODE_PAGE_TAG ?                                \
02047                                            RtlxUnicodeStringToOemSize(STRING) :                      \
02048                                            ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
02049 )
02050 
02051 #define RtlOemStringToUnicodeSize(STRING) (                 \
02052     NLS_MB_OEM_CODE_PAGE_TAG ?                              \
02053     RtlxOemStringToUnicodeSize(STRING) :                    \
02054     ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR)  \
02055 )
02056 
02057 #define RtlOemStringToCountedUnicodeSize(STRING) (                    \
02058     (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
02059 )
02060 
02061 #define RtlOffsetToPointer(B,O) ((PCHAR)(((PCHAR)(B)) + ((ULONG_PTR)(O))))
02062 #define RtlPointerToOffset(B,P) ((ULONG)(((PCHAR)(P)) - ((PCHAR)(B))))
02063 
02064 _IRQL_requires_max_(PASSIVE_LEVEL)
02065 __kernel_entry
02066 NTSYSCALLAPI
02067 NTSTATUS
02068 NTAPI
02069 NtQueryObject(
02070   _In_opt_ HANDLE Handle,
02071   _In_ OBJECT_INFORMATION_CLASS ObjectInformationClass,
02072   _Out_writes_bytes_opt_(ObjectInformationLength) PVOID ObjectInformation,
02073   _In_ ULONG ObjectInformationLength,
02074   _Out_opt_ PULONG ReturnLength);
02075 
02076 #if (NTDDI_VERSION >= NTDDI_WIN2K)
02077 
02078 _Must_inspect_result_
02079 __kernel_entry
02080 NTSYSCALLAPI
02081 NTSTATUS
02082 NTAPI
02083 NtOpenThreadToken(
02084   _In_ HANDLE ThreadHandle,
02085   _In_ ACCESS_MASK DesiredAccess,
02086   _In_ BOOLEAN OpenAsSelf,
02087   _Out_ PHANDLE TokenHandle);
02088 
02089 _Must_inspect_result_
02090 __kernel_entry
02091 NTSYSCALLAPI
02092 NTSTATUS
02093 NTAPI
02094 NtOpenProcessToken(
02095   _In_ HANDLE ProcessHandle,
02096   _In_ ACCESS_MASK DesiredAccess,
02097   _Out_ PHANDLE TokenHandle);
02098 
02099 _When_(TokenInformationClass == TokenAccessInformation,
02100   _At_(TokenInformationLength,
02101        _In_range_(>=, sizeof(TOKEN_ACCESS_INFORMATION))))
02102 _Must_inspect_result_
02103 __kernel_entry
02104 NTSYSCALLAPI
02105 NTSTATUS
02106 NTAPI
02107 NtQueryInformationToken(
02108   _In_ HANDLE TokenHandle,
02109   _In_ TOKEN_INFORMATION_CLASS TokenInformationClass,
02110   _Out_writes_bytes_to_opt_(TokenInformationLength, *ReturnLength) PVOID TokenInformation,
02111   _In_ ULONG TokenInformationLength,
02112   _Out_ PULONG ReturnLength);
02113 
02114 _Must_inspect_result_
02115 __kernel_entry
02116 NTSYSCALLAPI
02117 NTSTATUS
02118 NTAPI
02119 NtAdjustPrivilegesToken(
02120   _In_ HANDLE TokenHandle,
02121   _In_ BOOLEAN DisableAllPrivileges,
02122   _In_opt_ PTOKEN_PRIVILEGES NewState,
02123   _In_ ULONG BufferLength,
02124   _Out_writes_bytes_to_opt_(BufferLength, *ReturnLength) PTOKEN_PRIVILEGES PreviousState,
02125   _Out_ _When_(PreviousState == NULL, _Out_opt_) PULONG ReturnLength);
02126 
02127 __kernel_entry
02128 NTSYSCALLAPI
02129 NTSTATUS
02130 NTAPI
02131 NtCreateFile(
02132   _Out_ PHANDLE FileHandle,
02133   _In_ ACCESS_MASK DesiredAccess,
02134   _In_ POBJECT_ATTRIBUTES ObjectAttributes,
02135   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02136   _In_opt_ PLARGE_INTEGER AllocationSize,
02137   _In_ ULONG FileAttributes,
02138   _In_ ULONG ShareAccess,
02139   _In_ ULONG CreateDisposition,
02140   _In_ ULONG CreateOptions,
02141   _In_reads_bytes_opt_(EaLength) PVOID EaBuffer,
02142   _In_ ULONG EaLength);
02143 
02144 __kernel_entry
02145 NTSYSCALLAPI
02146 NTSTATUS
02147 NTAPI
02148 NtDeviceIoControlFile(
02149   _In_ HANDLE FileHandle,
02150   _In_opt_ HANDLE Event,
02151   _In_opt_ PIO_APC_ROUTINE ApcRoutine,
02152   _In_opt_ PVOID ApcContext,
02153   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02154   _In_ ULONG IoControlCode,
02155   _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
02156   _In_ ULONG InputBufferLength,
02157   _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer,
02158   _In_ ULONG OutputBufferLength);
02159 
02160 __kernel_entry
02161 NTSYSCALLAPI
02162 NTSTATUS
02163 NTAPI
02164 NtFsControlFile(
02165   _In_ HANDLE FileHandle,
02166   _In_opt_ HANDLE Event,
02167   _In_opt_ PIO_APC_ROUTINE ApcRoutine,
02168   _In_opt_ PVOID ApcContext,
02169   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02170   _In_ ULONG FsControlCode,
02171   _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
02172   _In_ ULONG InputBufferLength,
02173   _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer,
02174   _In_ ULONG OutputBufferLength);
02175 
02176 __kernel_entry
02177 NTSYSCALLAPI
02178 NTSTATUS
02179 NTAPI
02180 NtLockFile(
02181   _In_ HANDLE FileHandle,
02182   _In_opt_ HANDLE Event,
02183   _In_opt_ PIO_APC_ROUTINE ApcRoutine,
02184   _In_opt_ PVOID ApcContext,
02185   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02186   _In_ PLARGE_INTEGER ByteOffset,
02187   _In_ PLARGE_INTEGER Length,
02188   _In_ ULONG Key,
02189   _In_ BOOLEAN FailImmediately,
02190   _In_ BOOLEAN ExclusiveLock);
02191 
02192 __kernel_entry
02193 NTSYSCALLAPI
02194 NTSTATUS
02195 NTAPI
02196 NtOpenFile(
02197   _Out_ PHANDLE FileHandle,
02198   _In_ ACCESS_MASK DesiredAccess,
02199   _In_ POBJECT_ATTRIBUTES ObjectAttributes,
02200   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02201   _In_ ULONG ShareAccess,
02202   _In_ ULONG OpenOptions);
02203 
02204 __kernel_entry
02205 NTSYSCALLAPI
02206 NTSTATUS
02207 NTAPI
02208 NtQueryDirectoryFile(
02209   _In_ HANDLE FileHandle,
02210   _In_opt_ HANDLE Event,
02211   _In_opt_ PIO_APC_ROUTINE ApcRoutine,
02212   _In_opt_ PVOID ApcContext,
02213   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02214   _Out_writes_bytes_(Length) PVOID FileInformation,
02215   _In_ ULONG Length,
02216   _In_ FILE_INFORMATION_CLASS FileInformationClass,
02217   _In_ BOOLEAN ReturnSingleEntry,
02218   _In_opt_ PUNICODE_STRING FileName,
02219   _In_ BOOLEAN RestartScan);
02220 
02221 __kernel_entry
02222 NTSYSCALLAPI
02223 NTSTATUS
02224 NTAPI
02225 NtQueryInformationFile(
02226   _In_ HANDLE FileHandle,
02227   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02228   _Out_writes_bytes_(Length) PVOID FileInformation,
02229   _In_ ULONG Length,
02230   _In_ FILE_INFORMATION_CLASS FileInformationClass);
02231 
02232 __kernel_entry
02233 NTSYSCALLAPI
02234 NTSTATUS
02235 NTAPI
02236 NtQueryQuotaInformationFile(
02237   _In_ HANDLE FileHandle,
02238   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02239   _Out_writes_bytes_(Length) PVOID Buffer,
02240   _In_ ULONG Length,
02241   _In_ BOOLEAN ReturnSingleEntry,
02242   _In_reads_bytes_opt_(SidListLength) PVOID SidList,
02243   _In_ ULONG SidListLength,
02244   _In_reads_bytes_opt_((8 + (4 * ((SID *)StartSid)->SubAuthorityCount))) PSID StartSid,
02245   _In_ BOOLEAN RestartScan);
02246 
02247 __kernel_entry
02248 NTSYSCALLAPI
02249 NTSTATUS
02250 NTAPI
02251 NtQueryVolumeInformationFile(
02252   _In_ HANDLE FileHandle,
02253   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02254   _Out_writes_bytes_(Length) PVOID FsInformation,
02255   _In_ ULONG Length,
02256   _In_ FS_INFORMATION_CLASS FsInformationClass);
02257 
02258 __kernel_entry
02259 NTSYSCALLAPI
02260 NTSTATUS
02261 NTAPI
02262 NtReadFile(
02263   _In_ HANDLE FileHandle,
02264   _In_opt_ HANDLE Event,
02265   _In_opt_ PIO_APC_ROUTINE ApcRoutine,
02266   _In_opt_ PVOID ApcContext,
02267   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02268   _Out_writes_bytes_(Length) PVOID Buffer,
02269   _In_ ULONG Length,
02270   _In_opt_ PLARGE_INTEGER ByteOffset,
02271   _In_opt_ PULONG Key);
02272 
02273 __kernel_entry
02274 NTSYSCALLAPI
02275 NTSTATUS
02276 NTAPI
02277 NtSetInformationFile(
02278   _In_ HANDLE FileHandle,
02279   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02280   _In_reads_bytes_(Length) PVOID FileInformation,
02281   _In_ ULONG Length,
02282   _In_ FILE_INFORMATION_CLASS FileInformationClass);
02283 
02284 __kernel_entry
02285 NTSYSCALLAPI
02286 NTSTATUS
02287 NTAPI
02288 NtSetQuotaInformationFile(
02289   _In_ HANDLE FileHandle,
02290   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02291   _In_reads_bytes_(Length) PVOID Buffer,
02292   _In_ ULONG Length);
02293 
02294 __kernel_entry
02295 NTSYSCALLAPI
02296 NTSTATUS
02297 NTAPI
02298 NtSetVolumeInformationFile(
02299   _In_ HANDLE FileHandle,
02300   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02301   _In_reads_bytes_(Length) PVOID FsInformation,
02302   _In_ ULONG Length,
02303   _In_ FS_INFORMATION_CLASS FsInformationClass);
02304 
02305 __kernel_entry
02306 NTSYSCALLAPI
02307 NTSTATUS
02308 NTAPI
02309 NtWriteFile(
02310   _In_ HANDLE FileHandle,
02311   _In_opt_ HANDLE Event,
02312   _In_opt_ PIO_APC_ROUTINE ApcRoutine,
02313   _In_opt_ PVOID ApcContext,
02314   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02315   _In_reads_bytes_(Length) PVOID Buffer,
02316   _In_ ULONG Length,
02317   _In_opt_ PLARGE_INTEGER ByteOffset,
02318   _In_opt_ PULONG Key);
02319 
02320 __kernel_entry
02321 NTSYSCALLAPI
02322 NTSTATUS
02323 NTAPI
02324 NtUnlockFile(
02325   _In_ HANDLE FileHandle,
02326   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
02327   _In_ PLARGE_INTEGER ByteOffset,
02328   _In_ PLARGE_INTEGER Length,
02329   _In_ ULONG Key);
02330 
02331 _IRQL_requires_max_(PASSIVE_LEVEL)
02332 __kernel_entry
02333 NTSYSCALLAPI
02334 NTSTATUS
02335 NTAPI
02336 NtSetSecurityObject(
02337   _In_ HANDLE Handle,
02338   _In_ SECURITY_INFORMATION SecurityInformation,
02339   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
02340 
02341 _IRQL_requires_max_(PASSIVE_LEVEL)
02342 __kernel_entry
02343 NTSYSCALLAPI
02344 NTSTATUS
02345 NTAPI
02346 NtQuerySecurityObject(
02347   _In_ HANDLE Handle,
02348   _In_ SECURITY_INFORMATION SecurityInformation,
02349   _Out_writes_bytes_opt_(Length) PSECURITY_DESCRIPTOR SecurityDescriptor,
02350   _In_ ULONG Length,
02351   _Out_ PULONG LengthNeeded);
02352 
02353 _IRQL_requires_max_(PASSIVE_LEVEL)
02354 __kernel_entry
02355 NTSYSCALLAPI
02356 NTSTATUS
02357 NTAPI
02358 NtClose(
02359   _In_ HANDLE Handle);
02360 
02361 _Must_inspect_result_
02362 __drv_allocatesMem(Mem)
02363 __kernel_entry
02364 NTSYSCALLAPI
02365 NTSTATUS
02366 NTAPI
02367 NtAllocateVirtualMemory(
02368   _In_ HANDLE ProcessHandle,
02369   _Outptr_result_bytebuffer_(*RegionSize) PVOID *BaseAddress,
02370   _In_ ULONG_PTR ZeroBits,
02371   _Inout_ PSIZE_T RegionSize,
02372   _In_ ULONG AllocationType,
02373   _In_ ULONG Protect);
02374 
02375 __kernel_entry
02376 NTSYSCALLAPI
02377 NTSTATUS
02378 NTAPI
02379 NtFreeVirtualMemory(
02380   _In_ HANDLE ProcessHandle,
02381   _Inout_ __drv_freesMem(Mem) PVOID *BaseAddress,
02382   _Inout_ PSIZE_T RegionSize,
02383   _In_ ULONG FreeType);
02384 
02385 #endif
02386 
02387 #if (NTDDI_VERSION >= NTDDI_WINXP)
02388 
02389 _Must_inspect_result_
02390 __kernel_entry
02391 NTSYSCALLAPI
02392 NTSTATUS
02393 NTAPI
02394 NtOpenThreadTokenEx(
02395   _In_ HANDLE ThreadHandle,
02396   _In_ ACCESS_MASK DesiredAccess,
02397   _In_ BOOLEAN OpenAsSelf,
02398   _In_ ULONG HandleAttributes,
02399   _Out_ PHANDLE TokenHandle);
02400 
02401 _Must_inspect_result_
02402 __kernel_entry
02403 NTSYSCALLAPI
02404 NTSTATUS
02405 NTAPI
02406 NtOpenProcessTokenEx(
02407   _In_ HANDLE ProcessHandle,
02408   _In_ ACCESS_MASK DesiredAccess,
02409   _In_ ULONG HandleAttributes,
02410   _Out_ PHANDLE TokenHandle);
02411 
02412 _Must_inspect_result_
02413 NTSYSAPI
02414 NTSTATUS
02415 NTAPI
02416 NtOpenJobObjectToken(
02417   _In_ HANDLE JobHandle,
02418   _In_ ACCESS_MASK DesiredAccess,
02419   _Out_ PHANDLE TokenHandle);
02420 
02421 _Must_inspect_result_
02422 __kernel_entry
02423 NTSYSCALLAPI
02424 NTSTATUS
02425 NTAPI
02426 NtDuplicateToken(
02427   _In_ HANDLE ExistingTokenHandle,
02428   _In_ ACCESS_MASK DesiredAccess,
02429   _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes,
02430   _In_ BOOLEAN EffectiveOnly,
02431   _In_ TOKEN_TYPE TokenType,
02432   _Out_ PHANDLE NewTokenHandle);
02433 
02434 _Must_inspect_result_
02435 __kernel_entry
02436 NTSYSCALLAPI
02437 NTSTATUS
02438 NTAPI
02439 NtFilterToken(
02440   _In_ HANDLE ExistingTokenHandle,
02441   _In_ ULONG Flags,
02442   _In_opt_ PTOKEN_GROUPS SidsToDisable,
02443   _In_opt_ PTOKEN_PRIVILEGES PrivilegesToDelete,
02444   _In_opt_ PTOKEN_GROUPS RestrictedSids,
02445   _Out_ PHANDLE NewTokenHandle);
02446 
02447 _Must_inspect_result_
02448 __kernel_entry
02449 NTSYSCALLAPI
02450 NTSTATUS
02451 NTAPI
02452 NtImpersonateAnonymousToken(
02453   _In_ HANDLE ThreadHandle);
02454 
02455 _Must_inspect_result_
02456 __kernel_entry
02457 NTSYSCALLAPI
02458 NTSTATUS
02459 NTAPI
02460 NtSetInformationToken(
02461   _In_ HANDLE TokenHandle,
02462   _In_ TOKEN_INFORMATION_CLASS TokenInformationClass,
02463   _In_reads_bytes_(TokenInformationLength) PVOID TokenInformation,
02464   _In_ ULONG TokenInformationLength);
02465 
02466 _Must_inspect_result_
02467 __kernel_entry
02468 NTSYSCALLAPI
02469 NTSTATUS
02470 NTAPI
02471 NtAdjustGroupsToken(
02472   _In_ HANDLE TokenHandle,
02473   _In_ BOOLEAN ResetToDefault,
02474   _In_opt_ PTOKEN_GROUPS NewState,
02475   _In_opt_ ULONG BufferLength,
02476   _Out_writes_bytes_to_opt_(BufferLength, *ReturnLength) PTOKEN_GROUPS PreviousState,
02477   _Out_ PULONG ReturnLength);
02478 
02479 _Must_inspect_result_
02480 __kernel_entry
02481 NTSYSCALLAPI
02482 NTSTATUS
02483 NTAPI
02484 NtPrivilegeCheck(
02485   _In_ HANDLE ClientToken,
02486   _Inout_ PPRIVILEGE_SET RequiredPrivileges,
02487   _Out_ PBOOLEAN Result);
02488 
02489 _Must_inspect_result_
02490 __kernel_entry
02491 NTSYSCALLAPI
02492 NTSTATUS
02493 NTAPI
02494 NtAccessCheckAndAuditAlarm(
02495   _In_ PUNICODE_STRING SubsystemName,
02496   _In_opt_ PVOID HandleId,
02497   _In_ PUNICODE_STRING ObjectTypeName,
02498   _In_ PUNICODE_STRING ObjectName,
02499   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
02500   _In_ ACCESS_MASK DesiredAccess,
02501   _In_ PGENERIC_MAPPING GenericMapping,
02502   _In_ BOOLEAN ObjectCreation,
02503   _Out_ PACCESS_MASK GrantedAccess,
02504   _Out_ PNTSTATUS AccessStatus,
02505   _Out_ PBOOLEAN GenerateOnClose);
02506 
02507 _Must_inspect_result_
02508 __kernel_entry
02509 NTSYSCALLAPI
02510 NTSTATUS
02511 NTAPI
02512 NtAccessCheckByTypeAndAuditAlarm(
02513   _In_ PUNICODE_STRING SubsystemName,
02514   _In_opt_ PVOID HandleId,
02515   _In_ PUNICODE_STRING ObjectTypeName,
02516   _In_ PUNICODE_STRING ObjectName,
02517   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
02518   _In_opt_ PSID PrincipalSelfSid,
02519   _In_ ACCESS_MASK DesiredAccess,
02520   _In_ AUDIT_EVENT_TYPE AuditType,
02521   _In_ ULONG Flags,
02522   _In_reads_opt_(ObjectTypeLength) POBJECT_TYPE_LIST ObjectTypeList,
02523   _In_ ULONG ObjectTypeLength,
02524   _In_ PGENERIC_MAPPING GenericMapping,
02525   _In_ BOOLEAN ObjectCreation,
02526   _Out_ PACCESS_MASK GrantedAccess,
02527   _Out_ PNTSTATUS AccessStatus,
02528   _Out_ PBOOLEAN GenerateOnClose);
02529 
02530 _Must_inspect_result_
02531 __kernel_entry
02532 NTSYSCALLAPI
02533 NTSTATUS
02534 NTAPI
02535 NtAccessCheckByTypeResultListAndAuditAlarm(
02536   _In_ PUNICODE_STRING SubsystemName,
02537   _In_opt_ PVOID HandleId,
02538   _In_ PUNICODE_STRING ObjectTypeName,
02539   _In_ PUNICODE_STRING ObjectName,
02540   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
02541   _In_opt_ PSID PrincipalSelfSid,
02542   _In_ ACCESS_MASK DesiredAccess,
02543   _In_ AUDIT_EVENT_TYPE AuditType,
02544   _In_ ULONG Flags,
02545   _In_reads_opt_(ObjectTypeListLength) POBJECT_TYPE_LIST ObjectTypeList,
02546   _In_ ULONG ObjectTypeListLength,
02547   _In_ PGENERIC_MAPPING GenericMapping,
02548   _In_ BOOLEAN ObjectCreation,
02549   _Out_writes_(ObjectTypeListLength) PACCESS_MASK GrantedAccess,
02550   _Out_writes_(ObjectTypeListLength) PNTSTATUS AccessStatus,
02551   _Out_ PBOOLEAN GenerateOnClose);
02552 
02553 _Must_inspect_result_
02554 __kernel_entry
02555 NTSYSCALLAPI
02556 NTSTATUS
02557 NTAPI
02558 NtAccessCheckByTypeResultListAndAuditAlarmByHandle(
02559   _In_ PUNICODE_STRING SubsystemName,
02560   _In_opt_ PVOID HandleId,
02561   _In_ HANDLE ClientToken,
02562   _In_ PUNICODE_STRING ObjectTypeName,
02563   _In_ PUNICODE_STRING ObjectName,
02564   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
02565   _In_opt_ PSID PrincipalSelfSid,
02566   _In_ ACCESS_MASK DesiredAccess,
02567   _In_ AUDIT_EVENT_TYPE AuditType,
02568   _In_ ULONG Flags,
02569   _In_reads_opt_(ObjectTypeListLength) POBJECT_TYPE_LIST ObjectTypeList,
02570   _In_ ULONG ObjectTypeListLength,
02571   _In_ PGENERIC_MAPPING GenericMapping,
02572   _In_ BOOLEAN ObjectCreation,
02573   _Out_writes_(ObjectTypeListLength) PACCESS_MASK GrantedAccess,
02574   _Out_writes_(ObjectTypeListLength) PNTSTATUS AccessStatus,
02575   _Out_ PBOOLEAN GenerateOnClose);
02576 
02577 __kernel_entry
02578 NTSYSCALLAPI
02579 NTSTATUS
02580 NTAPI
02581 NtOpenObjectAuditAlarm(
02582   _In_ PUNICODE_STRING SubsystemName,
02583   _In_opt_ PVOID HandleId,
02584   _In_ PUNICODE_STRING ObjectTypeName,
02585   _In_ PUNICODE_STRING ObjectName,
02586   _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor,
02587   _In_ HANDLE ClientToken,
02588   _In_ ACCESS_MASK DesiredAccess,
02589   _In_ ACCESS_MASK GrantedAccess,
02590   _In_opt_ PPRIVILEGE_SET Privileges,
02591   _In_ BOOLEAN ObjectCreation,
02592   _In_ BOOLEAN AccessGranted,
02593   _Out_ PBOOLEAN GenerateOnClose);
02594 
02595 __kernel_entry
02596 NTSYSCALLAPI
02597 NTSTATUS
02598 NTAPI
02599 NtPrivilegeObjectAuditAlarm(
02600   _In_ PUNICODE_STRING SubsystemName,
02601   _In_opt_ PVOID HandleId,
02602   _In_ HANDLE ClientToken,
02603   _In_ ACCESS_MASK DesiredAccess,
02604   _In_ PPRIVILEGE_SET Privileges,
02605   _In_ BOOLEAN AccessGranted);
02606 
02607 __kernel_entry
02608 NTSYSCALLAPI
02609 NTSTATUS
02610 NTAPI
02611 NtCloseObjectAuditAlarm(
02612   _In_ PUNICODE_STRING SubsystemName,
02613   _In_opt_ PVOID HandleId,
02614   _In_ BOOLEAN GenerateOnClose);
02615 
02616 __kernel_entry
02617 NTSYSCALLAPI
02618 NTSTATUS
02619 NTAPI
02620 NtDeleteObjectAuditAlarm(
02621   _In_ PUNICODE_STRING SubsystemName,
02622   _In_opt_ PVOID HandleId,
02623   _In_ BOOLEAN GenerateOnClose);
02624 
02625 __kernel_entry
02626 NTSYSCALLAPI
02627 NTSTATUS
02628 NTAPI
02629 NtPrivilegedServiceAuditAlarm(
02630   _In_ PUNICODE_STRING SubsystemName,
02631   _In_ PUNICODE_STRING ServiceName,
02632   _In_ HANDLE ClientToken,
02633   _In_ PPRIVILEGE_SET Privileges,
02634   _In_ BOOLEAN AccessGranted);
02635 
02636 __kernel_entry
02637 NTSYSCALLAPI
02638 NTSTATUS
02639 NTAPI
02640 NtSetInformationThread(
02641   _In_ HANDLE ThreadHandle,
02642   _In_ THREADINFOCLASS ThreadInformationClass,
02643   _In_reads_bytes_(ThreadInformationLength) PVOID ThreadInformation,
02644   _In_ ULONG ThreadInformationLength);
02645 
02646 _Must_inspect_result_
02647 __kernel_entry
02648 NTSYSCALLAPI
02649 NTSTATUS
02650 NTAPI
02651 NtCreateSection(
02652   _Out_ PHANDLE SectionHandle,
02653   _In_ ACCESS_MASK DesiredAccess,
02654   _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes,
02655   _In_opt_ PLARGE_INTEGER MaximumSize,
02656   _In_ ULONG SectionPageProtection,
02657   _In_ ULONG AllocationAttributes,
02658   _In_opt_ HANDLE FileHandle);
02659 
02660 #endif
02661 
02662 #define COMPRESSION_FORMAT_NONE         (0x0000)
02663 #define COMPRESSION_FORMAT_DEFAULT      (0x0001)
02664 #define COMPRESSION_FORMAT_LZNT1        (0x0002)
02665 #define COMPRESSION_ENGINE_STANDARD     (0x0000)
02666 #define COMPRESSION_ENGINE_MAXIMUM      (0x0100)
02667 #define COMPRESSION_ENGINE_HIBER        (0x0200)
02668 
02669 #define MAX_UNICODE_STACK_BUFFER_LENGTH 256
02670 
02671 #define METHOD_FROM_CTL_CODE(ctrlCode)  ((ULONG)(ctrlCode & 3))
02672 
02673 #define METHOD_DIRECT_TO_HARDWARE       METHOD_IN_DIRECT
02674 #define METHOD_DIRECT_FROM_HARDWARE     METHOD_OUT_DIRECT
02675 
02676 typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE;
02677 
02678 typedef enum _SECURITY_LOGON_TYPE {
02679   UndefinedLogonType = 0,
02680   Interactive = 2,
02681   Network,
02682   Batch,
02683   Service,
02684   Proxy,
02685   Unlock,
02686   NetworkCleartext,
02687   NewCredentials,
02688 #if (_WIN32_WINNT >= 0x0501)
02689   RemoteInteractive,
02690   CachedInteractive,
02691 #endif
02692 #if (_WIN32_WINNT >= 0x0502)
02693   CachedRemoteInteractive,
02694   CachedUnlock
02695 #endif
02696 } SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE;
02697 
02698 #ifndef _NTLSA_AUDIT_
02699 #define _NTLSA_AUDIT_
02700 
02701 #ifndef GUID_DEFINED
02702 #include <guiddef.h>
02703 #endif
02704 
02705 #endif /* _NTLSA_AUDIT_ */
02706 
02707 _IRQL_requires_same_
02708 _IRQL_requires_max_(PASSIVE_LEVEL)
02709 NTSTATUS
02710 NTAPI
02711 LsaRegisterLogonProcess(
02712   _In_ PLSA_STRING LogonProcessName,
02713   _Out_ PHANDLE LsaHandle,
02714   _Out_ PLSA_OPERATIONAL_MODE SecurityMode);
02715 
02716 _IRQL_requires_same_
02717 _IRQL_requires_max_(PASSIVE_LEVEL)
02718 NTSTATUS
02719 NTAPI
02720 LsaLogonUser(
02721   _In_ HANDLE LsaHandle,
02722   _In_ PLSA_STRING OriginName,
02723   _In_ SECURITY_LOGON_TYPE LogonType,
02724   _In_ ULONG AuthenticationPackage,
02725   _In_reads_bytes_(AuthenticationInformationLength) PVOID AuthenticationInformation,
02726   _In_ ULONG AuthenticationInformationLength,
02727   _In_opt_ PTOKEN_GROUPS LocalGroups,
02728   _In_ PTOKEN_SOURCE SourceContext,
02729   _Out_ PVOID *ProfileBuffer,
02730   _Out_ PULONG ProfileBufferLength,
02731   _Inout_ PLUID LogonId,
02732   _Out_ PHANDLE Token,
02733   _Out_ PQUOTA_LIMITS Quotas,
02734   _Out_ PNTSTATUS SubStatus);
02735 
02736 _IRQL_requires_same_
02737 NTSTATUS
02738 NTAPI
02739 LsaFreeReturnBuffer(
02740   _In_ PVOID Buffer);
02741 
02742 #ifndef _NTLSA_IFS_
02743 #define _NTLSA_IFS_
02744 #endif
02745 
02746 #define MSV1_0_PACKAGE_NAME     "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
02747 #define MSV1_0_PACKAGE_NAMEW    L"MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
02748 #define MSV1_0_PACKAGE_NAMEW_LENGTH sizeof(MSV1_0_PACKAGE_NAMEW) - sizeof(WCHAR)
02749 
02750 #define MSV1_0_SUBAUTHENTICATION_KEY "SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1_0"
02751 #define MSV1_0_SUBAUTHENTICATION_VALUE "Auth"
02752 
02753 #define MSV1_0_CHALLENGE_LENGTH                8
02754 #define MSV1_0_USER_SESSION_KEY_LENGTH         16
02755 #define MSV1_0_LANMAN_SESSION_KEY_LENGTH       8
02756 
02757 #define MSV1_0_CLEARTEXT_PASSWORD_ALLOWED      0x02
02758 #define MSV1_0_UPDATE_LOGON_STATISTICS         0x04
02759 #define MSV1_0_RETURN_USER_PARAMETERS          0x08
02760 #define MSV1_0_DONT_TRY_GUEST_ACCOUNT          0x10
02761 #define MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT      0x20
02762 #define MSV1_0_RETURN_PASSWORD_EXPIRY          0x40
02763 #define MSV1_0_USE_CLIENT_CHALLENGE            0x80
02764 #define MSV1_0_TRY_GUEST_ACCOUNT_ONLY          0x100
02765 #define MSV1_0_RETURN_PROFILE_PATH             0x200
02766 #define MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY       0x400
02767 #define MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT 0x800
02768 
02769 #define MSV1_0_DISABLE_PERSONAL_FALLBACK     0x00001000
02770 #define MSV1_0_ALLOW_FORCE_GUEST             0x00002000
02771 
02772 #if (_WIN32_WINNT >= 0x0502)
02773 #define MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED   0x00004000
02774 #define MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY   0x00008000
02775 #endif
02776 
02777 #define MSV1_0_SUBAUTHENTICATION_DLL_EX      0x00100000
02778 #define MSV1_0_ALLOW_MSVCHAPV2               0x00010000
02779 
02780 #if (_WIN32_WINNT >= 0x0600)
02781 #define MSV1_0_S4U2SELF                      0x00020000
02782 #define MSV1_0_CHECK_LOGONHOURS_FOR_S4U      0x00040000
02783 #endif
02784 
02785 #define MSV1_0_SUBAUTHENTICATION_DLL         0xFF000000
02786 #define MSV1_0_SUBAUTHENTICATION_DLL_SHIFT   24
02787 #define MSV1_0_MNS_LOGON                     0x01000000
02788 
02789 #define MSV1_0_SUBAUTHENTICATION_DLL_RAS     2
02790 #define MSV1_0_SUBAUTHENTICATION_DLL_IIS     132
02791 
02792 #define LOGON_GUEST                 0x01
02793 #define LOGON_NOENCRYPTION          0x02
02794 #define LOGON_CACHED_ACCOUNT        0x04
02795 #define LOGON_USED_LM_PASSWORD      0x08
02796 #define LOGON_EXTRA_SIDS            0x20
02797 #define LOGON_SUBAUTH_SESSION_KEY   0x40
02798 #define LOGON_SERVER_TRUST_ACCOUNT  0x80
02799 #define LOGON_NTLMV2_ENABLED        0x100
02800 #define LOGON_RESOURCE_GROUPS       0x200
02801 #define LOGON_PROFILE_PATH_RETURNED 0x400
02802 #define LOGON_NT_V2                 0x800
02803 #define LOGON_LM_V2                 0x1000
02804 #define LOGON_NTLM_V2               0x2000
02805 
02806 #if (_WIN32_WINNT >= 0x0600)
02807 
02808 #define LOGON_OPTIMIZED             0x4000
02809 #define LOGON_WINLOGON              0x8000
02810 #define LOGON_PKINIT               0x10000
02811 #define LOGON_NO_OPTIMIZED         0x20000
02812 
02813 #endif
02814 
02815 #define MSV1_0_SUBAUTHENTICATION_FLAGS 0xFF000000
02816 
02817 #define LOGON_GRACE_LOGON              0x01000000
02818 
02819 #define MSV1_0_OWF_PASSWORD_LENGTH 16
02820 #define MSV1_0_CRED_LM_PRESENT 0x1
02821 #define MSV1_0_CRED_NT_PRESENT 0x2
02822 #define MSV1_0_CRED_VERSION 0
02823 
02824 #define MSV1_0_NTLM3_RESPONSE_LENGTH 16
02825 #define MSV1_0_NTLM3_OWF_LENGTH 16
02826 
02827 #if (_WIN32_WINNT == 0x0500)
02828 #define MSV1_0_MAX_NTLM3_LIFE 1800
02829 #else
02830 #define MSV1_0_MAX_NTLM3_LIFE 129600
02831 #endif
02832 #define MSV1_0_MAX_AVL_SIZE 64000
02833 
02834 #if (_WIN32_WINNT >= 0x0501)
02835 
02836 #define MSV1_0_AV_FLAG_FORCE_GUEST                  0x00000001
02837 
02838 #if (_WIN32_WINNT >= 0x0600)
02839 #define MSV1_0_AV_FLAG_MIC_HANDSHAKE_MESSAGES       0x00000002
02840 #endif
02841 
02842 #endif
02843 
02844 #define MSV1_0_NTLM3_INPUT_LENGTH (sizeof(MSV1_0_NTLM3_RESPONSE) - MSV1_0_NTLM3_RESPONSE_LENGTH)
02845 
02846 #if(_WIN32_WINNT >= 0x0502)
02847 #define MSV1_0_NTLM3_MIN_NT_RESPONSE_LENGTH RTL_SIZEOF_THROUGH_FIELD(MSV1_0_NTLM3_RESPONSE, AvPairsOff)
02848 #endif
02849 
02850 #define USE_PRIMARY_PASSWORD            0x01
02851 #define RETURN_PRIMARY_USERNAME         0x02
02852 #define RETURN_PRIMARY_LOGON_DOMAINNAME 0x04
02853 #define RETURN_NON_NT_USER_SESSION_KEY  0x08
02854 #define GENERATE_CLIENT_CHALLENGE       0x10
02855 #define GCR_NTLM3_PARMS                 0x20
02856 #define GCR_TARGET_INFO                 0x40
02857 #define RETURN_RESERVED_PARAMETER       0x80
02858 #define GCR_ALLOW_NTLM                 0x100
02859 #define GCR_USE_OEM_SET                0x200
02860 #define GCR_MACHINE_CREDENTIAL         0x400
02861 #define GCR_USE_OWF_PASSWORD           0x800
02862 #define GCR_ALLOW_LM                  0x1000
02863 #define GCR_ALLOW_NO_TARGET           0x2000
02864 
02865 typedef enum _MSV1_0_LOGON_SUBMIT_TYPE {
02866   MsV1_0InteractiveLogon = 2,
02867   MsV1_0Lm20Logon,
02868   MsV1_0NetworkLogon,
02869   MsV1_0SubAuthLogon,
02870   MsV1_0WorkstationUnlockLogon = 7,
02871   MsV1_0S4ULogon = 12,
02872   MsV1_0VirtualLogon = 82
02873 } MSV1_0_LOGON_SUBMIT_TYPE, *PMSV1_0_LOGON_SUBMIT_TYPE;
02874 
02875 typedef enum _MSV1_0_PROFILE_BUFFER_TYPE {
02876   MsV1_0InteractiveProfile = 2,
02877   MsV1_0Lm20LogonProfile,
02878   MsV1_0SmartCardProfile
02879 } MSV1_0_PROFILE_BUFFER_TYPE, *PMSV1_0_PROFILE_BUFFER_TYPE;
02880 
02881 typedef struct _MSV1_0_INTERACTIVE_LOGON {
02882   MSV1_0_LOGON_SUBMIT_TYPE MessageType;
02883   UNICODE_STRING LogonDomainName;
02884   UNICODE_STRING UserName;
02885   UNICODE_STRING Password;
02886 } MSV1_0_INTERACTIVE_LOGON, *PMSV1_0_INTERACTIVE_LOGON;
02887 
02888 typedef struct _MSV1_0_INTERACTIVE_PROFILE {
02889   MSV1_0_PROFILE_BUFFER_TYPE MessageType;
02890   USHORT LogonCount;
02891   USHORT BadPasswordCount;
02892   LARGE_INTEGER LogonTime;
02893   LARGE_INTEGER LogoffTime;
02894   LARGE_INTEGER KickOffTime;
02895   LARGE_INTEGER PasswordLastSet;
02896   LARGE_INTEGER PasswordCanChange;
02897   LARGE_INTEGER PasswordMustChange;
02898   UNICODE_STRING LogonScript;
02899   UNICODE_STRING HomeDirectory;
02900   UNICODE_STRING FullName;
02901   UNICODE_STRING ProfilePath;
02902   UNICODE_STRING HomeDirectoryDrive;
02903   UNICODE_STRING LogonServer;
02904   ULONG UserFlags;
02905 } MSV1_0_INTERACTIVE_PROFILE, *PMSV1_0_INTERACTIVE_PROFILE;
02906 
02907 typedef struct _MSV1_0_LM20_LOGON {
02908   MSV1_0_LOGON_SUBMIT_TYPE MessageType;
02909   UNICODE_STRING LogonDomainName;
02910   UNICODE_STRING UserName;
02911   UNICODE_STRING Workstation;
02912   UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
02913   STRING CaseSensitiveChallengeResponse;
02914   STRING CaseInsensitiveChallengeResponse;
02915   ULONG ParameterControl;
02916 } MSV1_0_LM20_LOGON, * PMSV1_0_LM20_LOGON;
02917 
02918 typedef struct _MSV1_0_SUBAUTH_LOGON {
02919   MSV1_0_LOGON_SUBMIT_TYPE MessageType;
02920   UNICODE_STRING LogonDomainName;
02921   UNICODE_STRING UserName;
02922   UNICODE_STRING Workstation;
02923   UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
02924   STRING AuthenticationInfo1;
02925   STRING AuthenticationInfo2;
02926   ULONG ParameterControl;
02927   ULONG SubAuthPackageId;
02928 } MSV1_0_SUBAUTH_LOGON, * PMSV1_0_SUBAUTH_LOGON;
02929 
02930 #if (_WIN32_WINNT >= 0x0600)
02931 
02932 #define MSV1_0_S4U_LOGON_FLAG_CHECK_LOGONHOURS 0x2
02933 
02934 typedef struct _MSV1_0_S4U_LOGON {
02935   MSV1_0_LOGON_SUBMIT_TYPE MessageType;
02936   ULONG Flags;
02937   UNICODE_STRING UserPrincipalName;
02938   UNICODE_STRING DomainName;
02939 } MSV1_0_S4U_LOGON, *PMSV1_0_S4U_LOGON;
02940 
02941 #endif
02942 
02943 typedef struct _MSV1_0_LM20_LOGON_PROFILE {
02944   MSV1_0_PROFILE_BUFFER_TYPE MessageType;
02945   LARGE_INTEGER KickOffTime;
02946   LARGE_INTEGER LogoffTime;
02947   ULONG UserFlags;
02948   UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH];
02949   UNICODE_STRING LogonDomainName;
02950   UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH];
02951   UNICODE_STRING LogonServer;
02952   UNICODE_STRING UserParameters;
02953 } MSV1_0_LM20_LOGON_PROFILE, * PMSV1_0_LM20_LOGON_PROFILE;
02954 
02955 typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL {
02956   ULONG Version;
02957   ULONG Flags;
02958   UCHAR LmPassword[MSV1_0_OWF_PASSWORD_LENGTH];
02959   UCHAR NtPassword[MSV1_0_OWF_PASSWORD_LENGTH];
02960 } MSV1_0_SUPPLEMENTAL_CREDENTIAL, *PMSV1_0_SUPPLEMENTAL_CREDENTIAL;
02961 
02962 typedef struct _MSV1_0_NTLM3_RESPONSE {
02963   UCHAR Response[MSV1_0_NTLM3_RESPONSE_LENGTH];
02964   UCHAR RespType;
02965   UCHAR HiRespType;
02966   USHORT Flags;
02967   ULONG MsgWord;
02968   ULONGLONG TimeStamp;
02969   UCHAR ChallengeFromClient[MSV1_0_CHALLENGE_LENGTH];
02970   ULONG AvPairsOff;
02971   UCHAR Buffer[1];
02972 } MSV1_0_NTLM3_RESPONSE, *PMSV1_0_NTLM3_RESPONSE;
02973 
02974 typedef enum _MSV1_0_AVID {
02975   MsvAvEOL,
02976   MsvAvNbComputerName,
02977   MsvAvNbDomainName,
02978   MsvAvDnsComputerName,
02979   MsvAvDnsDomainName,
02980 #if (_WIN32_WINNT >= 0x0501)
02981   MsvAvDnsTreeName,
02982   MsvAvFlags,
02983 #if (_WIN32_WINNT >= 0x0600)
02984   MsvAvTimestamp,
02985   MsvAvRestrictions,
02986   MsvAvTargetName,
02987   MsvAvChannelBindings,
02988 #endif
02989 #endif
02990 } MSV1_0_AVID;
02991 
02992 typedef struct _MSV1_0_AV_PAIR {
02993   USHORT AvId;
02994   USHORT AvLen;
02995 } MSV1_0_AV_PAIR, *PMSV1_0_AV_PAIR;
02996 
02997 typedef enum _MSV1_0_PROTOCOL_MESSAGE_TYPE {
02998   MsV1_0Lm20ChallengeRequest = 0,
02999   MsV1_0Lm20GetChallengeResponse,
03000   MsV1_0EnumerateUsers,
03001   MsV1_0GetUserInfo,
03002   MsV1_0ReLogonUsers,
03003   MsV1_0ChangePassword,
03004   MsV1_0ChangeCachedPassword,
03005   MsV1_0GenericPassthrough,
03006   MsV1_0CacheLogon,
03007   MsV1_0SubAuth,
03008   MsV1_0DeriveCredential,
03009   MsV1_0CacheLookup,
03010 #if (_WIN32_WINNT >= 0x0501)
03011   MsV1_0SetProcessOption,
03012 #endif
03013 #if (_WIN32_WINNT >= 0x0600)
03014   MsV1_0ConfigLocalAliases,
03015   MsV1_0ClearCachedCredentials,
03016 #endif
03017 } MSV1_0_PROTOCOL_MESSAGE_TYPE, *PMSV1_0_PROTOCOL_MESSAGE_TYPE;
03018 
03019 typedef struct _MSV1_0_LM20_CHALLENGE_REQUEST {
03020   MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
03021 } MSV1_0_LM20_CHALLENGE_REQUEST, *PMSV1_0_LM20_CHALLENGE_REQUEST;
03022 
03023 typedef struct _MSV1_0_LM20_CHALLENGE_RESPONSE {
03024   MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
03025   UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
03026 } MSV1_0_LM20_CHALLENGE_RESPONSE, *PMSV1_0_LM20_CHALLENGE_RESPONSE;
03027 
03028 typedef struct _MSV1_0_GETCHALLENRESP_REQUEST_V1 {
03029   MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
03030   ULONG ParameterControl;
03031   LUID LogonId;
03032   UNICODE_STRING Password;
03033   UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
03034 } MSV1_0_GETCHALLENRESP_REQUEST_V1, *PMSV1_0_GETCHALLENRESP_REQUEST_V1;
03035 
03036 typedef struct _MSV1_0_GETCHALLENRESP_REQUEST {
03037   MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
03038   ULONG ParameterControl;
03039   LUID LogonId;
03040   UNICODE_STRING Password;
03041   UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
03042   UNICODE_STRING UserName;
03043   UNICODE_STRING LogonDomainName;
03044   UNICODE_STRING ServerName;
03045 } MSV1_0_GETCHALLENRESP_REQUEST, *PMSV1_0_GETCHALLENRESP_REQUEST;
03046 
03047 typedef struct _MSV1_0_GETCHALLENRESP_RESPONSE {
03048   MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
03049   STRING CaseSensitiveChallengeResponse;
03050   STRING CaseInsensitiveChallengeResponse;
03051   UNICODE_STRING UserName;
03052   UNICODE_STRING LogonDomainName;
03053   UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH];
03054   UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH];
03055 } MSV1_0_GETCHALLENRESP_RESPONSE, *PMSV1_0_GETCHALLENRESP_RESPONSE;
03056 
03057 typedef struct _MSV1_0_ENUMUSERS_REQUEST {
03058   MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
03059 } MSV1_0_ENUMUSERS_REQUEST, *PMSV1_0_ENUMUSERS_REQUEST;
03060 
03061 typedef struct _MSV1_0_ENUMUSERS_RESPONSE {
03062   MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
03063   ULONG NumberOfLoggedOnUsers;
03064   PLUID LogonIds;
03065   PULONG EnumHandles;
03066 } MSV1_0_ENUMUSERS_RESPONSE, *PMSV1_0_ENUMUSERS_RESPONSE;
03067 
03068 typedef struct _MSV1_0_GETUSERINFO_REQUEST {
03069   MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
03070   LUID LogonId;
03071 } MSV1_0_GETUSERINFO_REQUEST, *PMSV1_0_GETUSERINFO_REQUEST;
03072 
03073 typedef struct _MSV1_0_GETUSERINFO_RESPONSE {
03074   MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
03075   PSID UserSid;
03076   UNICODE_STRING UserName;
03077   UNICODE_STRING LogonDomainName;
03078   UNICODE_STRING LogonServer;
03079   SECURITY_LOGON_TYPE LogonType;
03080 } MSV1_0_GETUSERINFO_RESPONSE, *PMSV1_0_GETUSERINFO_RESPONSE;
03081 
03082 
03083 
03084 #define FILE_OPLOCK_BROKEN_TO_LEVEL_2   0x00000007
03085 #define FILE_OPLOCK_BROKEN_TO_NONE      0x00000008
03086 #define FILE_OPBATCH_BREAK_UNDERWAY     0x00000009
03087 
03088 /* also in winnt.h */
03089 #define FILE_NOTIFY_CHANGE_FILE_NAME    0x00000001
03090 #define FILE_NOTIFY_CHANGE_DIR_NAME     0x00000002
03091 #define FILE_NOTIFY_CHANGE_NAME         0x00000003
03092 #define FILE_NOTIFY_CHANGE_ATTRIBUTES   0x00000004
03093 #define FILE_NOTIFY_CHANGE_SIZE         0x00000008
03094 #define FILE_NOTIFY_CHANGE_LAST_WRITE   0x00000010
03095 #define FILE_NOTIFY_CHANGE_LAST_ACCESS  0x00000020
03096 #define FILE_NOTIFY_CHANGE_CREATION     0x00000040
03097 #define FILE_NOTIFY_CHANGE_EA           0x00000080
03098 #define FILE_NOTIFY_CHANGE_SECURITY     0x00000100
03099 #define FILE_NOTIFY_CHANGE_STREAM_NAME  0x00000200
03100 #define FILE_NOTIFY_CHANGE_STREAM_SIZE  0x00000400
03101 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
03102 #define FILE_NOTIFY_VALID_MASK          0x00000fff
03103 
03104 #define FILE_ACTION_ADDED                   0x00000001
03105 #define FILE_ACTION_REMOVED                 0x00000002
03106 #define FILE_ACTION_MODIFIED                0x00000003
03107 #define FILE_ACTION_RENAMED_OLD_NAME        0x00000004
03108 #define FILE_ACTION_RENAMED_NEW_NAME        0x00000005
03109 #define FILE_ACTION_ADDED_STREAM            0x00000006
03110 #define FILE_ACTION_REMOVED_STREAM          0x00000007
03111 #define FILE_ACTION_MODIFIED_STREAM         0x00000008
03112 #define FILE_ACTION_REMOVED_BY_DELETE       0x00000009
03113 #define FILE_ACTION_ID_NOT_TUNNELLED        0x0000000A
03114 #define FILE_ACTION_TUNNELLED_ID_COLLISION  0x0000000B
03115 /* end  winnt.h */
03116 
03117 #define FILE_PIPE_BYTE_STREAM_TYPE          0x00000000
03118 #define FILE_PIPE_MESSAGE_TYPE              0x00000001
03119 
03120 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS     0x00000000
03121 #define FILE_PIPE_REJECT_REMOTE_CLIENTS     0x00000002
03122 
03123 #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS     0x00000000
03124 #define FILE_PIPE_REJECT_REMOTE_CLIENTS     0x00000002
03125 #define FILE_PIPE_TYPE_VALID_MASK           0x00000003
03126 
03127 #define FILE_PIPE_BYTE_STREAM_MODE          0x00000000
03128 #define FILE_PIPE_MESSAGE_MODE              0x00000001
03129 
03130 #define FILE_PIPE_QUEUE_OPERATION           0x00000000
03131 #define FILE_PIPE_COMPLETE_OPERATION        0x00000001
03132 
03133 #define FILE_PIPE_INBOUND                   0x00000000
03134 #define FILE_PIPE_OUTBOUND                  0x00000001
03135 #define FILE_PIPE_FULL_DUPLEX               0x00000002
03136 
03137 #define FILE_PIPE_DISCONNECTED_STATE        0x00000001
03138 #define FILE_PIPE_LISTENING_STATE           0x00000002
03139 #define FILE_PIPE_CONNECTED_STATE           0x00000003
03140 #define FILE_PIPE_CLOSING_STATE             0x00000004
03141 
03142 #define FILE_PIPE_CLIENT_END                0x00000000
03143 #define FILE_PIPE_SERVER_END                0x00000001
03144 
03145 #define FILE_CASE_SENSITIVE_SEARCH          0x00000001
03146 #define FILE_CASE_PRESERVED_NAMES           0x00000002
03147 #define FILE_UNICODE_ON_DISK                0x00000004
03148 #define FILE_PERSISTENT_ACLS                0x00000008
03149 #define FILE_FILE_COMPRESSION               0x00000010
03150 #define FILE_VOLUME_QUOTAS                  0x00000020
03151 #define FILE_SUPPORTS_SPARSE_FILES          0x00000040
03152 #define FILE_SUPPORTS_REPARSE_POINTS        0x00000080
03153 #define FILE_SUPPORTS_REMOTE_STORAGE        0x00000100
03154 #define FILE_VOLUME_IS_COMPRESSED           0x00008000
03155 #define FILE_SUPPORTS_OBJECT_IDS            0x00010000
03156 #define FILE_SUPPORTS_ENCRYPTION            0x00020000
03157 #define FILE_NAMED_STREAMS                  0x00040000
03158 #define FILE_READ_ONLY_VOLUME               0x00080000
03159 #define FILE_SEQUENTIAL_WRITE_ONCE          0x00100000
03160 #define FILE_SUPPORTS_TRANSACTIONS          0x00200000
03161 #define FILE_SUPPORTS_HARD_LINKS            0x00400000
03162 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES   0x00800000
03163 #define FILE_SUPPORTS_OPEN_BY_FILE_ID       0x01000000
03164 #define FILE_SUPPORTS_USN_JOURNAL           0x02000000
03165 
03166 #define FILE_NEED_EA                    0x00000080
03167 
03168 #define FILE_EA_TYPE_BINARY             0xfffe
03169 #define FILE_EA_TYPE_ASCII              0xfffd
03170 #define FILE_EA_TYPE_BITMAP             0xfffb
03171 #define FILE_EA_TYPE_METAFILE           0xfffa
03172 #define FILE_EA_TYPE_ICON               0xfff9
03173 #define FILE_EA_TYPE_EA                 0xffee
03174 #define FILE_EA_TYPE_MVMT               0xffdf
03175 #define FILE_EA_TYPE_MVST               0xffde
03176 #define FILE_EA_TYPE_ASN1               0xffdd
03177 #define FILE_EA_TYPE_FAMILY_IDS         0xff01
03178 
03179 typedef struct _FILE_NOTIFY_INFORMATION {
03180   ULONG NextEntryOffset;
03181   ULONG Action;
03182   ULONG FileNameLength;
03183   WCHAR FileName[1];
03184 } FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;
03185 
03186 typedef struct _FILE_DIRECTORY_INFORMATION {
03187   ULONG NextEntryOffset;
03188   ULONG FileIndex;
03189   LARGE_INTEGER CreationTime;
03190   LARGE_INTEGER LastAccessTime;
03191   LARGE_INTEGER LastWriteTime;
03192   LARGE_INTEGER ChangeTime;
03193   LARGE_INTEGER EndOfFile;
03194   LARGE_INTEGER AllocationSize;
03195   ULONG FileAttributes;
03196   ULONG FileNameLength;
03197   WCHAR FileName[1];
03198 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
03199 
03200 typedef struct _FILE_FULL_DIR_INFORMATION {
03201   ULONG NextEntryOffset;
03202   ULONG FileIndex;
03203   LARGE_INTEGER CreationTime;
03204   LARGE_INTEGER LastAccessTime;
03205   LARGE_INTEGER LastWriteTime;
03206   LARGE_INTEGER ChangeTime;
03207   LARGE_INTEGER EndOfFile;
03208   LARGE_INTEGER AllocationSize;
03209   ULONG FileAttributes;
03210   ULONG FileNameLength;
03211   ULONG EaSize;
03212   WCHAR FileName[1];
03213 } FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
03214 
03215 typedef struct _FILE_ID_FULL_DIR_INFORMATION {
03216   ULONG NextEntryOffset;
03217   ULONG FileIndex;
03218   LARGE_INTEGER CreationTime;
03219   LARGE_INTEGER LastAccessTime;
03220   LARGE_INTEGER LastWriteTime;
03221   LARGE_INTEGER ChangeTime;
03222   LARGE_INTEGER EndOfFile;
03223   LARGE_INTEGER AllocationSize;
03224   ULONG FileAttributes;
03225   ULONG FileNameLength;
03226   ULONG EaSize;
03227   LARGE_INTEGER FileId;
03228   WCHAR FileName[1];
03229 } FILE_ID_FULL_DIR_INFORMATION, *PFILE_ID_FULL_DIR_INFORMATION;
03230 
03231 typedef struct _FILE_BOTH_DIR_INFORMATION {
03232   ULONG NextEntryOffset;
03233   ULONG FileIndex;
03234   LARGE_INTEGER CreationTime;
03235   LARGE_INTEGER LastAccessTime;
03236   LARGE_INTEGER LastWriteTime;
03237   LARGE_INTEGER ChangeTime;
03238   LARGE_INTEGER EndOfFile;
03239   LARGE_INTEGER AllocationSize;
03240   ULONG FileAttributes;
03241   ULONG FileNameLength;
03242   ULONG EaSize;
03243   CCHAR ShortNameLength;
03244   WCHAR ShortName[12];
03245   WCHAR FileName[1];
03246 } FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
03247 
03248 typedef struct _FILE_ID_BOTH_DIR_INFORMATION {
03249   ULONG NextEntryOffset;
03250   ULONG FileIndex;
03251   LARGE_INTEGER CreationTime;
03252   LARGE_INTEGER LastAccessTime;
03253   LARGE_INTEGER LastWriteTime;
03254   LARGE_INTEGER ChangeTime;
03255   LARGE_INTEGER EndOfFile;
03256   LARGE_INTEGER AllocationSize;
03257   ULONG FileAttributes;
03258   ULONG FileNameLength;
03259   ULONG EaSize;
03260   CCHAR ShortNameLength;
03261   WCHAR ShortName[12];
03262   LARGE_INTEGER FileId;
03263   WCHAR FileName[1];
03264 } FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION;
03265 
03266 typedef struct _FILE_NAMES_INFORMATION {
03267   ULONG NextEntryOffset;
03268   ULONG FileIndex;
03269   ULONG FileNameLength;
03270   WCHAR FileName[1];
03271 } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
03272 
03273 typedef struct _FILE_ID_GLOBAL_TX_DIR_INFORMATION {
03274   ULONG NextEntryOffset;
03275   ULONG FileIndex;
03276   LARGE_INTEGER CreationTime;
03277   LARGE_INTEGER LastAccessTime;
03278   LARGE_INTEGER LastWriteTime;
03279   LARGE_INTEGER ChangeTime;
03280   LARGE_INTEGER EndOfFile;
03281   LARGE_INTEGER AllocationSize;
03282   ULONG FileAttributes;
03283   ULONG FileNameLength;
03284   LARGE_INTEGER FileId;
03285   GUID LockingTransactionId;
03286   ULONG TxInfoFlags;
03287   WCHAR FileName[1];
03288 } FILE_ID_GLOBAL_TX_DIR_INFORMATION, *PFILE_ID_GLOBAL_TX_DIR_INFORMATION;
03289 
03290 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_WRITELOCKED         0x00000001
03291 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_TO_TX       0x00000002
03292 #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_OUTSIDE_TX  0x00000004
03293 
03294 typedef struct _FILE_OBJECTID_INFORMATION {
03295   LONGLONG FileReference;
03296   UCHAR ObjectId[16];
03297   _ANONYMOUS_UNION union {
03298     _ANONYMOUS_STRUCT struct {
03299       UCHAR BirthVolumeId[16];
03300       UCHAR BirthObjectId[16];
03301       UCHAR DomainId[16];
03302     } DUMMYSTRUCTNAME;
03303     UCHAR ExtendedInfo[48];
03304   } DUMMYUNIONNAME;
03305 } FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION;
03306 
03307 #define ANSI_DOS_STAR                   ('<')
03308 #define ANSI_DOS_QM                     ('>')
03309 #define ANSI_DOS_DOT                    ('"')
03310 
03311 #define DOS_STAR                        (L'<')
03312 #define DOS_QM                          (L'>')
03313 #define DOS_DOT                         (L'"')
03314 
03315 typedef struct _FILE_INTERNAL_INFORMATION {
03316   LARGE_INTEGER IndexNumber;
03317 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
03318 
03319 typedef struct _FILE_EA_INFORMATION {
03320   ULONG EaSize;
03321 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
03322 
03323 typedef struct _FILE_ACCESS_INFORMATION {
03324   ACCESS_MASK AccessFlags;
03325 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
03326 
03327 typedef struct _FILE_MODE_INFORMATION {
03328   ULONG Mode;
03329 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
03330 
03331 typedef struct _FILE_ALL_INFORMATION {
03332   FILE_BASIC_INFORMATION BasicInformation;
03333   FILE_STANDARD_INFORMATION StandardInformation;
03334   FILE_INTERNAL_INFORMATION InternalInformation;
03335   FILE_EA_INFORMATION EaInformation;
03336   FILE_ACCESS_INFORMATION AccessInformation;
03337   FILE_POSITION_INFORMATION PositionInformation;
03338   FILE_MODE_INFORMATION ModeInformation;
03339   FILE_ALIGNMENT_INFORMATION AlignmentInformation;
03340   FILE_NAME_INFORMATION NameInformation;
03341 } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
03342 
03343 typedef struct _FILE_ALLOCATION_INFORMATION {
03344   LARGE_INTEGER AllocationSize;
03345 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
03346 
03347 typedef struct _FILE_COMPRESSION_INFORMATION {
03348   LARGE_INTEGER CompressedFileSize;
03349   USHORT CompressionFormat;
03350   UCHAR CompressionUnitShift;
03351   UCHAR ChunkShift;
03352   UCHAR ClusterShift;
03353   UCHAR Reserved[3];
03354 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
03355 
03356 typedef struct _FILE_LINK_INFORMATION {
03357   BOOLEAN ReplaceIfExists;
03358   HANDLE RootDirectory;
03359   ULONG FileNameLength;
03360   WCHAR FileName[1];
03361 } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
03362 
03363 typedef struct _FILE_MOVE_CLUSTER_INFORMATION {
03364   ULONG ClusterCount;
03365   HANDLE RootDirectory;
03366   ULONG FileNameLength;
03367   WCHAR FileName[1];
03368 } FILE_MOVE_CLUSTER_INFORMATION, *PFILE_MOVE_CLUSTER_INFORMATION;
03369 
03370 typedef struct _FILE_RENAME_INFORMATION {
03371   BOOLEAN ReplaceIfExists;
03372   HANDLE RootDirectory;
03373   ULONG FileNameLength;
03374   WCHAR FileName[1];
03375 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
03376 
03377 typedef struct _FILE_STREAM_INFORMATION {
03378   ULONG NextEntryOffset;
03379   ULONG StreamNameLength;
03380   LARGE_INTEGER StreamSize;
03381   LARGE_INTEGER StreamAllocationSize;
03382   WCHAR StreamName[1];
03383 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
03384 
03385 typedef struct _FILE_TRACKING_INFORMATION {
03386   HANDLE DestinationFile;
03387   ULONG ObjectInformationLength;
03388   CHAR ObjectInformation[1];
03389 } FILE_TRACKING_INFORMATION, *PFILE_TRACKING_INFORMATION;
03390 
03391 typedef struct _FILE_COMPLETION_INFORMATION {
03392   HANDLE Port;
03393   PVOID Key;
03394 } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
03395 
03396 typedef struct _FILE_PIPE_INFORMATION {
03397   ULONG ReadMode;
03398   ULONG CompletionMode;
03399 } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
03400 
03401 typedef struct _FILE_PIPE_LOCAL_INFORMATION {
03402   ULONG NamedPipeType;
03403   ULONG NamedPipeConfiguration;
03404   ULONG MaximumInstances;
03405   ULONG CurrentInstances;
03406   ULONG InboundQuota;
03407   ULONG ReadDataAvailable;
03408   ULONG OutboundQuota;
03409   ULONG WriteQuotaAvailable;
03410   ULONG NamedPipeState;
03411   ULONG NamedPipeEnd;
03412 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
03413 
03414 typedef struct _FILE_PIPE_REMOTE_INFORMATION {
03415   LARGE_INTEGER CollectDataTime;
03416   ULONG MaximumCollectionCount;
03417 } FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
03418 
03419 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
03420   ULONG MaximumMessageSize;
03421   ULONG MailslotQuota;
03422   ULONG NextMessageSize;
03423   ULONG MessagesAvailable;
03424   LARGE_INTEGER ReadTimeout;
03425 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
03426 
03427 typedef struct _FILE_MAILSLOT_SET_INFORMATION {
03428   PLARGE_INTEGER ReadTimeout;
03429 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
03430 
03431 typedef struct _FILE_REPARSE_POINT_INFORMATION {
03432   LONGLONG FileReference;
03433   ULONG Tag;
03434 } FILE_REPARSE_POINT_INFORMATION, *PFILE_REPARSE_POINT_INFORMATION;
03435 
03436 typedef struct _FILE_LINK_ENTRY_INFORMATION {
03437   ULONG NextEntryOffset;
03438   LONGLONG ParentFileId;
03439   ULONG FileNameLength;
03440   WCHAR FileName[1];
03441 } FILE_LINK_ENTRY_INFORMATION, *PFILE_LINK_ENTRY_INFORMATION;
03442 
03443 typedef struct _FILE_LINKS_INFORMATION {
03444   ULONG BytesNeeded;
03445   ULONG EntriesReturned;
03446   FILE_LINK_ENTRY_INFORMATION Entry;
03447 } FILE_LINKS_INFORMATION, *PFILE_LINKS_INFORMATION;
03448 
03449 typedef struct _FILE_NETWORK_PHYSICAL_NAME_INFORMATION {
03450   ULONG FileNameLength;
03451   WCHAR FileName[1];
03452 } FILE_NETWORK_PHYSICAL_NAME_INFORMATION, *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION;
03453 
03454 typedef struct _FILE_STANDARD_LINK_INFORMATION {
03455   ULONG NumberOfAccessibleLinks;
03456   ULONG TotalNumberOfLinks;
03457   BOOLEAN DeletePending;
03458   BOOLEAN Directory;
03459 } FILE_STANDARD_LINK_INFORMATION, *PFILE_STANDARD_LINK_INFORMATION;
03460 
03461 typedef struct _FILE_GET_EA_INFORMATION {
03462   ULONG NextEntryOffset;
03463   UCHAR EaNameLength;
03464   CHAR  EaName[1];
03465 } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
03466 
03467 #define REMOTE_PROTOCOL_FLAG_LOOPBACK       0x00000001
03468 #define REMOTE_PROTOCOL_FLAG_OFFLINE        0x00000002
03469 
03470 typedef struct _FILE_REMOTE_PROTOCOL_INFORMATION {
03471   USHORT StructureVersion;
03472   USHORT StructureSize;
03473   ULONG  Protocol;
03474   USHORT ProtocolMajorVersion;
03475   USHORT ProtocolMinorVersion;
03476   USHORT ProtocolRevision;
03477   USHORT Reserved;
03478   ULONG  Flags;
03479   struct {
03480     ULONG Reserved[8];
03481   } GenericReserved;
03482   struct {
03483     ULONG Reserved[16];
03484   } ProtocolSpecificReserved;
03485 } FILE_REMOTE_PROTOCOL_INFORMATION, *PFILE_REMOTE_PROTOCOL_INFORMATION;
03486 
03487 typedef struct _FILE_GET_QUOTA_INFORMATION {
03488   ULONG NextEntryOffset;
03489   ULONG SidLength;
03490   SID Sid;
03491 } FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION;
03492 
03493 typedef struct _FILE_QUOTA_INFORMATION {
03494   ULONG NextEntryOffset;
03495   ULONG SidLength;
03496   LARGE_INTEGER ChangeTime;
03497   LARGE_INTEGER QuotaUsed;
03498   LARGE_INTEGER QuotaThreshold;
03499   LARGE_INTEGER QuotaLimit;
03500   SID Sid;
03501 } FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
03502 
03503 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
03504   ULONG FileSystemAttributes;
03505   ULONG MaximumComponentNameLength;
03506   ULONG FileSystemNameLength;
03507   WCHAR FileSystemName[1];
03508 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
03509 
03510 typedef struct _FILE_FS_DRIVER_PATH_INFORMATION {
03511   BOOLEAN DriverInPath;
03512   ULONG DriverNameLength;
03513   WCHAR DriverName[1];
03514 } FILE_FS_DRIVER_PATH_INFORMATION, *PFILE_FS_DRIVER_PATH_INFORMATION;
03515 
03516 typedef struct _FILE_FS_VOLUME_FLAGS_INFORMATION {
03517   ULONG Flags;
03518 } FILE_FS_VOLUME_FLAGS_INFORMATION, *PFILE_FS_VOLUME_FLAGS_INFORMATION;
03519 
03520 #define FILE_VC_QUOTA_NONE              0x00000000
03521 #define FILE_VC_QUOTA_TRACK             0x00000001
03522 #define FILE_VC_QUOTA_ENFORCE           0x00000002
03523 #define FILE_VC_QUOTA_MASK              0x00000003
03524 #define FILE_VC_CONTENT_INDEX_DISABLED  0x00000008
03525 #define FILE_VC_LOG_QUOTA_THRESHOLD     0x00000010
03526 #define FILE_VC_LOG_QUOTA_LIMIT         0x00000020
03527 #define FILE_VC_LOG_VOLUME_THRESHOLD    0x00000040
03528 #define FILE_VC_LOG_VOLUME_LIMIT        0x00000080
03529 #define FILE_VC_QUOTAS_INCOMPLETE       0x00000100
03530 #define FILE_VC_QUOTAS_REBUILDING       0x00000200
03531 #define FILE_VC_VALID_MASK              0x000003ff
03532 
03533 typedef struct _FILE_FS_CONTROL_INFORMATION {
03534   LARGE_INTEGER FreeSpaceStartFiltering;
03535   LARGE_INTEGER FreeSpaceThreshold;
03536   LARGE_INTEGER FreeSpaceStopFiltering;
03537   LARGE_INTEGER DefaultQuotaThreshold;
03538   LARGE_INTEGER DefaultQuotaLimit;
03539   ULONG FileSystemControlFlags;
03540 } FILE_FS_CONTROL_INFORMATION, *PFILE_FS_CONTROL_INFORMATION;
03541 
03542 #ifndef _FILESYSTEMFSCTL_
03543 #define _FILESYSTEMFSCTL_
03544 
03545 #define FSCTL_REQUEST_OPLOCK_LEVEL_1    CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  0, METHOD_BUFFERED, FILE_ANY_ACCESS)
03546 #define FSCTL_REQUEST_OPLOCK_LEVEL_2    CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  1, METHOD_BUFFERED, FILE_ANY_ACCESS)
03547 #define FSCTL_REQUEST_BATCH_OPLOCK      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  2, METHOD_BUFFERED, FILE_ANY_ACCESS)
03548 #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  3, METHOD_BUFFERED, FILE_ANY_ACCESS)
03549 #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  4, METHOD_BUFFERED, FILE_ANY_ACCESS)
03550 #define FSCTL_OPLOCK_BREAK_NOTIFY       CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  5, METHOD_BUFFERED, FILE_ANY_ACCESS)
03551 #define FSCTL_LOCK_VOLUME               CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  6, METHOD_BUFFERED, FILE_ANY_ACCESS)
03552 #define FSCTL_UNLOCK_VOLUME             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  7, METHOD_BUFFERED, FILE_ANY_ACCESS)
03553 #define FSCTL_DISMOUNT_VOLUME           CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  8, METHOD_BUFFERED, FILE_ANY_ACCESS)
03554 #define FSCTL_IS_VOLUME_MOUNTED         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
03555 #define FSCTL_IS_PATHNAME_VALID         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
03556 #define FSCTL_MARK_VOLUME_DIRTY         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
03557 #define FSCTL_QUERY_RETRIEVAL_POINTERS  CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER,  FILE_ANY_ACCESS)
03558 #define FSCTL_GET_COMPRESSION           CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
03559 #define FSCTL_SET_COMPRESSION           CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
03560 #define FSCTL_SET_BOOTLOADER_ACCESSED   CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER,  FILE_ANY_ACCESS)
03561 
03562 #define FSCTL_OPLOCK_BREAK_ACK_NO_2     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
03563 #define FSCTL_INVALIDATE_VOLUMES        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
03564 #define FSCTL_QUERY_FAT_BPB             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
03565 #define FSCTL_REQUEST_FILTER_OPLOCK     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
03566 #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
03567 
03568 #if (_WIN32_WINNT >= 0x0400)
03569 
03570 #define FSCTL_GET_NTFS_VOLUME_DATA      CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
03571 #define FSCTL_GET_NTFS_FILE_RECORD      CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
03572 #define FSCTL_GET_VOLUME_BITMAP         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER,  FILE_ANY_ACCESS)
03573 #define FSCTL_GET_RETRIEVAL_POINTERS    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER,  FILE_ANY_ACCESS)
03574 #define FSCTL_MOVE_FILE                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
03575 #define FSCTL_IS_VOLUME_DIRTY           CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
03576 #define FSCTL_ALLOW_EXTENDED_DASD_IO    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER,  FILE_ANY_ACCESS)
03577 
03578 #endif
03579 
03580 #if (_WIN32_WINNT >= 0x0500)
03581 
03582 #define FSCTL_FIND_FILES_BY_SID         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER,  FILE_ANY_ACCESS)
03583 #define FSCTL_SET_OBJECT_ID             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA)
03584 #define FSCTL_GET_OBJECT_ID             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
03585 #define FSCTL_DELETE_OBJECT_ID          CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA)
03586 #define FSCTL_SET_REPARSE_POINT         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA)
03587 #define FSCTL_GET_REPARSE_POINT         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
03588 #define FSCTL_DELETE_REPARSE_POINT      CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA)
03589 #define FSCTL_ENUM_USN_DATA             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER,  FILE_READ_DATA)
03590 #define FSCTL_SECURITY_ID_CHECK         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER,  FILE_READ_DATA)
03591 #define FSCTL_READ_USN_JOURNAL          CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER,  FILE_READ_DATA)
03592 #define FSCTL_SET_OBJECT_ID_EXTENDED    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA)
03593 #define FSCTL_CREATE_OR_GET_OBJECT_ID   CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
03594 #define FSCTL_SET_SPARSE                CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA)
03595 #define FSCTL_SET_ZERO_DATA             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
03596 #define FSCTL_QUERY_ALLOCATED_RANGES    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER,  FILE_READ_DATA)
03597 #define FSCTL_ENABLE_UPGRADE            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
03598 #define FSCTL_SET_ENCRYPTION            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
03599 #define FSCTL_ENCRYPTION_FSCTL_IO       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER,  FILE_ANY_ACCESS)
03600 #define FSCTL_WRITE_RAW_ENCRYPTED       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER,  FILE_ANY_ACCESS)
03601 #define FSCTL_READ_RAW_ENCRYPTED        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER,  FILE_ANY_ACCESS)
03602 #define FSCTL_CREATE_USN_JOURNAL        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER,  FILE_READ_DATA)
03603 #define FSCTL_READ_FILE_USN_DATA        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER,  FILE_READ_DATA)
03604 #define FSCTL_WRITE_USN_CLOSE_RECORD    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER,  FILE_READ_DATA)
03605 #define FSCTL_EXTEND_VOLUME             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
03606 #define FSCTL_QUERY_USN_JOURNAL         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
03607 #define FSCTL_DELETE_USN_JOURNAL        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
03608 #define FSCTL_MARK_HANDLE               CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
03609 #define FSCTL_SIS_COPYFILE              CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
03610 #define FSCTL_SIS_LINK_FILES            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
03611 #define FSCTL_RECALL_FILE               CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
03612 #define FSCTL_READ_FROM_PLEX            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
03613 #define FSCTL_FILE_PREFETCH             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
03614 
03615 #endif
03616 
03617 #if (_WIN32_WINNT >= 0x0600)
03618 
03619 #define FSCTL_MAKE_MEDIA_COMPATIBLE         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA)
03620 #define FSCTL_SET_DEFECT_MANAGEMENT         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA)
03621 #define FSCTL_QUERY_SPARING_INFO            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS)
03622 #define FSCTL_QUERY_ON_DISK_VOLUME_INFO     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS)
03623 #define FSCTL_SET_VOLUME_COMPRESSION_STATE  CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
03624 #define FSCTL_TXFS_MODIFY_RM                CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA)
03625 #define FSCTL_TXFS_QUERY_RM_INFORMATION     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA)
03626 #define FSCTL_TXFS_ROLLFORWARD_REDO         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA)
03627 #define FSCTL_TXFS_ROLLFORWARD_UNDO         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA)
03628 #define FSCTL_TXFS_START_RM                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA)
03629 #define FSCTL_TXFS_SHUTDOWN_RM              CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA)
03630 #define FSCTL_TXFS_READ_BACKUP_INFORMATION  CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA)
03631 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA)
03632 #define FSCTL_TXFS_CREATE_SECONDARY_RM      CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA)
03633 #define FSCTL_TXFS_GET_METADATA_INFO        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA)
03634 #define FSCTL_TXFS_GET_TRANSACTED_VERSION   CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA)
03635 #define FSCTL_TXFS_SAVEPOINT_INFORMATION    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 94, METHOD_BUFFERED, FILE_WRITE_DATA)
03636 #define FSCTL_TXFS_CREATE_MINIVERSION       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA)
03637 #define FSCTL_TXFS_TRANSACTION_ACTIVE       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA)
03638 #define FSCTL_SET_ZERO_ON_DEALLOCATION      CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
03639 #define FSCTL_SET_REPAIR                    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS)
03640 #define FSCTL_GET_REPAIR                    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS)
03641 #define FSCTL_WAIT_FOR_REPAIR               CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS)
03642 #define FSCTL_INITIATE_REPAIR               CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS)
03643 #define FSCTL_CSC_INTERNAL                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER,  FILE_ANY_ACCESS)
03644 #define FSCTL_SHRINK_VOLUME                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
03645 #define FSCTL_SET_SHORT_NAME_BEHAVIOR       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS)
03646 #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE   CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS)
03647 
03648 #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES \
03649                                             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA)
03650 #define FSCTL_TXFS_LIST_TRANSACTIONS        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA)
03651 #define FSCTL_QUERY_PAGEFILE_ENCRYPTION     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS)
03652 #define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS)
03653 #define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS)
03654 
03655 #endif
03656 
03657 #if (_WIN32_WINNT >= 0x0601)
03658 
03659 #define FSCTL_QUERY_DEPENDENT_VOLUME        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 124, METHOD_BUFFERED, FILE_ANY_ACCESS)
03660 #define FSCTL_SD_GLOBAL_CHANGE              CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 125, METHOD_BUFFERED, FILE_ANY_ACCESS)
03661 #define FSCTL_LOOKUP_STREAM_FROM_CLUSTER    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 127, METHOD_BUFFERED, FILE_ANY_ACCESS)
03662 #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS)
03663 #define FSCTL_FILE_TYPE_NOTIFICATION        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS)
03664 #define FSCTL_GET_BOOT_AREA_INFO            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 140, METHOD_BUFFERED, FILE_ANY_ACCESS)
03665 #define FSCTL_GET_RETRIEVAL_POINTER_BASE    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 141, METHOD_BUFFERED, FILE_ANY_ACCESS)
03666 #define FSCTL_SET_PERSISTENT_VOLUME_STATE   CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS)
03667 #define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS)
03668 
03669 #define FSCTL_REQUEST_OPLOCK                CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS)
03670 
03671 #define FSCTL_CSV_TUNNEL_REQUEST            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS)
03672 #define FSCTL_IS_CSV_FILE                   CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS)
03673 
03674 #define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 147, METHOD_BUFFERED, FILE_ANY_ACCESS)
03675 #define FSCTL_CSV_GET_VOLUME_PATH_NAME      CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 148, METHOD_BUFFERED, FILE_ANY_ACCESS)
03676 #define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS)
03677 #define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150,  METHOD_BUFFERED, FILE_ANY_ACCESS)
03678 #define FSCTL_IS_FILE_ON_CSV_VOLUME         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151,  METHOD_BUFFERED, FILE_ANY_ACCESS)
03679 
03680 typedef struct _CSV_NAMESPACE_INFO {
03681   ULONG Version;
03682   ULONG DeviceNumber;
03683   LARGE_INTEGER StartingOffset;
03684   ULONG SectorSize;
03685 } CSV_NAMESPACE_INFO, *PCSV_NAMESPACE_INFO;
03686 
03687 #define CSV_NAMESPACE_INFO_V1 (sizeof(CSV_NAMESPACE_INFO))
03688 #define CSV_INVALID_DEVICE_NUMBER 0xFFFFFFFF
03689 
03690 #endif
03691 
03692 #define FSCTL_MARK_AS_SYSTEM_HIVE           FSCTL_SET_BOOTLOADER_ACCESSED
03693 
03694 typedef struct _PATHNAME_BUFFER {
03695   ULONG PathNameLength;
03696   WCHAR Name[1];
03697 } PATHNAME_BUFFER, *PPATHNAME_BUFFER;
03698 
03699 typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER {
03700   UCHAR First0x24BytesOfBootSector[0x24];
03701 } FSCTL_QUERY_FAT_BPB_BUFFER, *PFSCTL_QUERY_FAT_BPB_BUFFER;
03702 
03703 #if (_WIN32_WINNT >= 0x0400)
03704 
03705 typedef struct _NTFS_VOLUME_DATA_BUFFER {
03706   LARGE_INTEGER VolumeSerialNumber;
03707   LARGE_INTEGER NumberSectors;
03708   LARGE_INTEGER TotalClusters;
03709   LARGE_INTEGER FreeClusters;
03710   LARGE_INTEGER TotalReserved;
03711   ULONG BytesPerSector;
03712   ULONG BytesPerCluster;
03713   ULONG BytesPerFileRecordSegment;
03714   ULONG ClustersPerFileRecordSegment;
03715   LARGE_INTEGER MftValidDataLength;
03716   LARGE_INTEGER MftStartLcn;
03717   LARGE_INTEGER Mft2StartLcn;
03718   LARGE_INTEGER MftZoneStart;
03719   LARGE_INTEGER MftZoneEnd;
03720 } NTFS_VOLUME_DATA_BUFFER, *PNTFS_VOLUME_DATA_BUFFER;
03721 
03722 typedef struct _NTFS_EXTENDED_VOLUME_DATA {
03723   ULONG ByteCount;
03724   USHORT MajorVersion;
03725   USHORT MinorVersion;
03726 } NTFS_EXTENDED_VOLUME_DATA, *PNTFS_EXTENDED_VOLUME_DATA;
03727 
03728 typedef struct _STARTING_LCN_INPUT_BUFFER {
03729   LARGE_INTEGER StartingLcn;
03730 } STARTING_LCN_INPUT_BUFFER, *PSTARTING_LCN_INPUT_BUFFER;
03731 
03732 typedef struct _VOLUME_BITMAP_BUFFER {
03733   LARGE_INTEGER StartingLcn;
03734   LARGE_INTEGER BitmapSize;
03735   UCHAR Buffer[1];
03736 } VOLUME_BITMAP_BUFFER, *PVOLUME_BITMAP_BUFFER;
03737 
03738 typedef struct _STARTING_VCN_INPUT_BUFFER {
03739   LARGE_INTEGER StartingVcn;
03740 } STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER;
03741 
03742 typedef struct _RETRIEVAL_POINTERS_BUFFER {
03743   ULONG ExtentCount;
03744   LARGE_INTEGER StartingVcn;
03745   struct {
03746     LARGE_INTEGER NextVcn;
03747     LARGE_INTEGER Lcn;
03748   } Extents[1];
03749 } RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
03750 
03751 typedef struct _NTFS_FILE_RECORD_INPUT_BUFFER {
03752   LARGE_INTEGER FileReferenceNumber;
03753 } NTFS_FILE_RECORD_INPUT_BUFFER, *PNTFS_FILE_RECORD_INPUT_BUFFER;
03754 
03755 typedef struct _NTFS_FILE_RECORD_OUTPUT_BUFFER {
03756   LARGE_INTEGER FileReferenceNumber;
03757   ULONG FileRecordLength;
03758   UCHAR FileRecordBuffer[1];
03759 } NTFS_FILE_RECORD_OUTPUT_BUFFER, *PNTFS_FILE_RECORD_OUTPUT_BUFFER;
03760 
03761 typedef struct _MOVE_FILE_DATA {
03762   HANDLE FileHandle;
03763   LARGE_INTEGER StartingVcn;
03764   LARGE_INTEGER StartingLcn;
03765   ULONG ClusterCount;
03766 } MOVE_FILE_DATA, *PMOVE_FILE_DATA;
03767 
03768 typedef struct _MOVE_FILE_RECORD_DATA {
03769   HANDLE FileHandle;
03770   LARGE_INTEGER SourceFileRecord;
03771   LARGE_INTEGER TargetFileRecord;
03772 } MOVE_FILE_RECORD_DATA, *PMOVE_FILE_RECORD_DATA;
03773 
03774 #if defined(_WIN64)
03775 typedef struct _MOVE_FILE_DATA32 {
03776   UINT32 FileHandle;
03777   LARGE_INTEGER StartingVcn;
03778   LARGE_INTEGER StartingLcn;
03779   ULONG ClusterCount;
03780 } MOVE_FILE_DATA32, *PMOVE_FILE_DATA32;
03781 #endif
03782 
03783 #endif /* (_WIN32_WINNT >= 0x0400) */
03784 
03785 #if (_WIN32_WINNT >= 0x0500)
03786 
03787 typedef struct _FIND_BY_SID_DATA {
03788   ULONG Restart;
03789   SID Sid;
03790 } FIND_BY_SID_DATA, *PFIND_BY_SID_DATA;
03791 
03792 typedef struct _FIND_BY_SID_OUTPUT {
03793   ULONG NextEntryOffset;
03794   ULONG FileIndex;
03795   ULONG FileNameLength;
03796   WCHAR FileName[1];
03797 } FIND_BY_SID_OUTPUT, *PFIND_BY_SID_OUTPUT;
03798 
03799 typedef struct _MFT_ENUM_DATA {
03800   ULONGLONG StartFileReferenceNumber;
03801   USN LowUsn;
03802   USN HighUsn;
03803 } MFT_ENUM_DATA, *PMFT_ENUM_DATA;
03804 
03805 typedef struct _CREATE_USN_JOURNAL_DATA {
03806   ULONGLONG MaximumSize;
03807   ULONGLONG AllocationDelta;
03808 } CREATE_USN_JOURNAL_DATA, *PCREATE_USN_JOURNAL_DATA;
03809 
03810 typedef struct _READ_USN_JOURNAL_DATA {
03811   USN StartUsn;
03812   ULONG ReasonMask;
03813   ULONG ReturnOnlyOnClose;
03814   ULONGLONG Timeout;
03815   ULONGLONG BytesToWaitFor;
03816   ULONGLONG UsnJournalID;
03817 } READ_USN_JOURNAL_DATA, *PREAD_USN_JOURNAL_DATA;
03818 
03819 typedef struct _USN_RECORD {
03820   ULONG RecordLength;
03821   USHORT MajorVersion;
03822   USHORT MinorVersion;
03823   ULONGLONG FileReferenceNumber;
03824   ULONGLONG ParentFileReferenceNumber;
03825   USN Usn;
03826   LARGE_INTEGER TimeStamp;
03827   ULONG Reason;
03828   ULONG SourceInfo;
03829   ULONG SecurityId;
03830   ULONG FileAttributes;
03831   USHORT FileNameLength;
03832   USHORT FileNameOffset;
03833   WCHAR FileName[1];
03834 } USN_RECORD, *PUSN_RECORD;
03835 
03836 #define USN_PAGE_SIZE                    (0x1000)
03837 
03838 #define USN_REASON_DATA_OVERWRITE        (0x00000001)
03839 #define USN_REASON_DATA_EXTEND           (0x00000002)
03840 #define USN_REASON_DATA_TRUNCATION       (0x00000004)
03841 #define USN_REASON_NAMED_DATA_OVERWRITE  (0x00000010)
03842 #define USN_REASON_NAMED_DATA_EXTEND     (0x00000020)
03843 #define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040)
03844 #define USN_REASON_FILE_CREATE           (0x00000100)
03845 #define USN_REASON_FILE_DELETE           (0x00000200)
03846 #define USN_REASON_EA_CHANGE             (0x00000400)
03847 #define USN_REASON_SECURITY_CHANGE       (0x00000800)
03848 #define USN_REASON_RENAME_OLD_NAME       (0x00001000)
03849 #define USN_REASON_RENAME_NEW_NAME       (0x00002000)
03850 #define USN_REASON_INDEXABLE_CHANGE      (0x00004000)
03851 #define USN_REASON_BASIC_INFO_CHANGE     (0x00008000)
03852 #define USN_REASON_HARD_LINK_CHANGE      (0x00010000)
03853 #define USN_REASON_COMPRESSION_CHANGE    (0x00020000)
03854 #define USN_REASON_ENCRYPTION_CHANGE     (0x00040000)
03855 #define USN_REASON_OBJECT_ID_CHANGE      (0x00080000)
03856 #define USN_REASON_REPARSE_POINT_CHANGE  (0x00100000)
03857 #define USN_REASON_STREAM_CHANGE         (0x00200000)
03858 #define USN_REASON_TRANSACTED_CHANGE     (0x00400000)
03859 #define USN_REASON_CLOSE                 (0x80000000)
03860 
03861 typedef struct _USN_JOURNAL_DATA {
03862   ULONGLONG UsnJournalID;
03863   USN FirstUsn;
03864   USN NextUsn;
03865   USN LowestValidUsn;
03866   USN MaxUsn;
03867   ULONGLONG MaximumSize;
03868   ULONGLONG AllocationDelta;
03869 } USN_JOURNAL_DATA, *PUSN_JOURNAL_DATA;
03870 
03871 typedef struct _DELETE_USN_JOURNAL_DATA {
03872   ULONGLONG UsnJournalID;
03873   ULONG DeleteFlags;
03874 } DELETE_USN_JOURNAL_DATA, *PDELETE_USN_JOURNAL_DATA;
03875 
03876 #define USN_DELETE_FLAG_DELETE              (0x00000001)
03877 #define USN_DELETE_FLAG_NOTIFY              (0x00000002)
03878 #define USN_DELETE_VALID_FLAGS              (0x00000003)
03879 
03880 typedef struct _MARK_HANDLE_INFO {
03881   ULONG UsnSourceInfo;
03882   HANDLE VolumeHandle;
03883   ULONG HandleInfo;
03884 } MARK_HANDLE_INFO, *PMARK_HANDLE_INFO;
03885 
03886 #if defined(_WIN64)
03887 typedef struct _MARK_HANDLE_INFO32 {
03888   ULONG UsnSourceInfo;
03889   UINT32 VolumeHandle;
03890   ULONG HandleInfo;
03891 } MARK_HANDLE_INFO32, *PMARK_HANDLE_INFO32;
03892 #endif
03893 
03894 #define USN_SOURCE_DATA_MANAGEMENT          (0x00000001)
03895 #define USN_SOURCE_AUXILIARY_DATA           (0x00000002)
03896 #define USN_SOURCE_REPLICATION_MANAGEMENT   (0x00000004)
03897 
03898 #define MARK_HANDLE_PROTECT_CLUSTERS        (0x00000001)
03899 #define MARK_HANDLE_TXF_SYSTEM_LOG          (0x00000004)
03900 #define MARK_HANDLE_NOT_TXF_SYSTEM_LOG      (0x00000008)
03901 
03902 typedef struct _BULK_SECURITY_TEST_DATA {
03903   ACCESS_MASK DesiredAccess;
03904   ULONG SecurityIds[1];
03905 } BULK_SECURITY_TEST_DATA, *PBULK_SECURITY_TEST_DATA;
03906 
03907 #define VOLUME_IS_DIRTY                  (0x00000001)
03908 #define VOLUME_UPGRADE_SCHEDULED         (0x00000002)
03909 #define VOLUME_SESSION_OPEN              (0x00000004)
03910 
03911 typedef struct _FILE_PREFETCH {
03912   ULONG Type;
03913   ULONG Count;
03914   ULONGLONG Prefetch[1];
03915 } FILE_PREFETCH, *PFILE_PREFETCH;
03916 
03917 typedef struct _FILE_PREFETCH_EX {
03918   ULONG Type;
03919   ULONG Count;
03920   PVOID Context;
03921   ULONGLONG Prefetch[1];
03922 } FILE_PREFETCH_EX, *PFILE_PREFETCH_EX;
03923 
03924 #define FILE_PREFETCH_TYPE_FOR_CREATE       0x1
03925 #define FILE_PREFETCH_TYPE_FOR_DIRENUM      0x2
03926 #define FILE_PREFETCH_TYPE_FOR_CREATE_EX    0x3
03927 #define FILE_PREFETCH_TYPE_FOR_DIRENUM_EX   0x4
03928 
03929 #define FILE_PREFETCH_TYPE_MAX              0x4
03930 
03931 typedef struct _FILE_OBJECTID_BUFFER {
03932   UCHAR ObjectId[16];
03933   _ANONYMOUS_UNION union {
03934     _ANONYMOUS_STRUCT struct {
03935       UCHAR BirthVolumeId[16];
03936       UCHAR BirthObjectId[16];
03937       UCHAR DomainId[16];
03938     } DUMMYSTRUCTNAME;
03939     UCHAR ExtendedInfo[48];
03940   } DUMMYUNIONNAME;
03941 } FILE_OBJECTID_BUFFER, *PFILE_OBJECTID_BUFFER;
03942 
03943 typedef struct _FILE_SET_SPARSE_BUFFER {
03944   BOOLEAN SetSparse;
03945 } FILE_SET_SPARSE_BUFFER, *PFILE_SET_SPARSE_BUFFER;
03946 
03947 typedef struct _FILE_ZERO_DATA_INFORMATION {
03948   LARGE_INTEGER FileOffset;
03949   LARGE_INTEGER BeyondFinalZero;
03950 } FILE_ZERO_DATA_INFORMATION, *PFILE_ZERO_DATA_INFORMATION;
03951 
03952 typedef struct _FILE_ALLOCATED_RANGE_BUFFER {
03953   LARGE_INTEGER FileOffset;
03954   LARGE_INTEGER Length;
03955 } FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER;
03956 
03957 typedef struct _ENCRYPTION_BUFFER {
03958   ULONG EncryptionOperation;
03959   UCHAR Private[1];
03960 } ENCRYPTION_BUFFER, *PENCRYPTION_BUFFER;
03961 
03962 #define FILE_SET_ENCRYPTION         0x00000001
03963 #define FILE_CLEAR_ENCRYPTION       0x00000002
03964 #define STREAM_SET_ENCRYPTION       0x00000003
03965 #define STREAM_CLEAR_ENCRYPTION     0x00000004
03966 
03967 #define MAXIMUM_ENCRYPTION_VALUE    0x00000004
03968 
03969 typedef struct _DECRYPTION_STATUS_BUFFER {
03970   BOOLEAN NoEncryptedStreams;
03971 } DECRYPTION_STATUS_BUFFER, *PDECRYPTION_STATUS_BUFFER;
03972 
03973 #define ENCRYPTION_FORMAT_DEFAULT        (0x01)
03974 
03975 #define COMPRESSION_FORMAT_SPARSE        (0x4000)
03976 
03977 typedef struct _REQUEST_RAW_ENCRYPTED_DATA {
03978   LONGLONG FileOffset;
03979   ULONG Length;
03980 } REQUEST_RAW_ENCRYPTED_DATA, *PREQUEST_RAW_ENCRYPTED_DATA;
03981 
03982 typedef struct _ENCRYPTED_DATA_INFO {
03983   ULONGLONG StartingFileOffset;
03984   ULONG OutputBufferOffset;
03985   ULONG BytesWithinFileSize;
03986   ULONG BytesWithinValidDataLength;
03987   USHORT CompressionFormat;
03988   UCHAR DataUnitShift;
03989   UCHAR ChunkShift;
03990   UCHAR ClusterShift;
03991   UCHAR EncryptionFormat;
03992   USHORT NumberOfDataBlocks;
03993   ULONG DataBlockSize[ANYSIZE_ARRAY];
03994 } ENCRYPTED_DATA_INFO, *PENCRYPTED_DATA_INFO;
03995 
03996 typedef struct _PLEX_READ_DATA_REQUEST {
03997   LARGE_INTEGER ByteOffset;
03998   ULONG ByteLength;
03999   ULONG PlexNumber;
04000 } PLEX_READ_DATA_REQUEST, *PPLEX_READ_DATA_REQUEST;
04001 
04002 typedef struct _SI_COPYFILE {
04003   ULONG SourceFileNameLength;
04004   ULONG DestinationFileNameLength;
04005   ULONG Flags;
04006   WCHAR FileNameBuffer[1];
04007 } SI_COPYFILE, *PSI_COPYFILE;
04008 
04009 #define COPYFILE_SIS_LINK       0x0001
04010 #define COPYFILE_SIS_REPLACE    0x0002
04011 #define COPYFILE_SIS_FLAGS      0x0003
04012 
04013 #endif /* (_WIN32_WINNT >= 0x0500) */
04014 
04015 #if (_WIN32_WINNT >= 0x0600)
04016 
04017 typedef struct _FILE_MAKE_COMPATIBLE_BUFFER {
04018   BOOLEAN CloseDisc;
04019 } FILE_MAKE_COMPATIBLE_BUFFER, *PFILE_MAKE_COMPATIBLE_BUFFER;
04020 
04021 typedef struct _FILE_SET_DEFECT_MGMT_BUFFER {
04022   BOOLEAN Disable;
04023 } FILE_SET_DEFECT_MGMT_BUFFER, *PFILE_SET_DEFECT_MGMT_BUFFER;
04024 
04025 typedef struct _FILE_QUERY_SPARING_BUFFER {
04026   ULONG SparingUnitBytes;
04027   BOOLEAN SoftwareSparing;
04028   ULONG TotalSpareBlocks;
04029   ULONG FreeSpareBlocks;
04030 } FILE_QUERY_SPARING_BUFFER, *PFILE_QUERY_SPARING_BUFFER;
04031 
04032 typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER {
04033   LARGE_INTEGER DirectoryCount;
04034   LARGE_INTEGER FileCount;
04035   USHORT FsFormatMajVersion;
04036   USHORT FsFormatMinVersion;
04037   WCHAR FsFormatName[12];
04038   LARGE_INTEGER FormatTime;
04039   LARGE_INTEGER LastUpdateTime;
04040   WCHAR CopyrightInfo[34];
04041   WCHAR AbstractInfo[34];
04042   WCHAR FormattingImplementationInfo[34];
04043   WCHAR LastModifyingImplementationInfo[34];
04044 } FILE_QUERY_ON_DISK_VOL_INFO_BUFFER, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER;
04045 
04046 #define SET_REPAIR_ENABLED                                      (0x00000001)
04047 #define SET_REPAIR_VOLUME_BITMAP_SCAN                           (0x00000002)
04048 #define SET_REPAIR_DELETE_CROSSLINK                             (0x00000004)
04049 #define SET_REPAIR_WARN_ABOUT_DATA_LOSS                         (0x00000008)
04050 #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT             (0x00000010)
04051 #define SET_REPAIR_VALID_MASK                                   (0x0000001F)
04052 
04053 typedef enum _SHRINK_VOLUME_REQUEST_TYPES {
04054   ShrinkPrepare = 1,
04055   ShrinkCommit,
04056   ShrinkAbort
04057 } SHRINK_VOLUME_REQUEST_TYPES, *PSHRINK_VOLUME_REQUEST_TYPES;
04058 
04059 typedef struct _SHRINK_VOLUME_INFORMATION {
04060   SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType;
04061   ULONGLONG Flags;
04062   LONGLONG NewNumberOfSectors;
04063 } SHRINK_VOLUME_INFORMATION, *PSHRINK_VOLUME_INFORMATION;
04064 
04065 #define TXFS_RM_FLAG_LOGGING_MODE                           0x00000001
04066 #define TXFS_RM_FLAG_RENAME_RM                              0x00000002
04067 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX                0x00000004
04068 #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN                0x00000008
04069 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS    0x00000010
04070 #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT           0x00000020
04071 #define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE             0x00000040
04072 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX             0x00000080
04073 #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN             0x00000100
04074 #define TXFS_RM_FLAG_GROW_LOG                               0x00000400
04075 #define TXFS_RM_FLAG_SHRINK_LOG                             0x00000800
04076 #define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE                   0x00001000
04077 #define TXFS_RM_FLAG_PRESERVE_CHANGES                       0x00002000
04078 #define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START                 0x00004000
04079 #define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START          0x00008000
04080 #define TXFS_RM_FLAG_PREFER_CONSISTENCY                     0x00010000
04081 #define TXFS_RM_FLAG_PREFER_AVAILABILITY                    0x00020000
04082 
04083 #define TXFS_LOGGING_MODE_SIMPLE        (0x0001)
04084 #define TXFS_LOGGING_MODE_FULL          (0x0002)
04085 
04086 #define TXFS_TRANSACTION_STATE_NONE         0x00
04087 #define TXFS_TRANSACTION_STATE_ACTIVE       0x01
04088 #define TXFS_TRANSACTION_STATE_PREPARED     0x02
04089 #define TXFS_TRANSACTION_STATE_NOTACTIVE    0x03
04090 
04091 #define TXFS_MODIFY_RM_VALID_FLAGS (TXFS_RM_FLAG_LOGGING_MODE                        | \
04092                                     TXFS_RM_FLAG_RENAME_RM                           | \
04093                                     TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX             | \
04094                                     TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN             | \
04095                                     TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
04096                                     TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT        | \
04097                                     TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE          | \
04098                                     TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX          | \
04099                                     TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN          | \
04100                                     TXFS_RM_FLAG_SHRINK_LOG                          | \
04101                                     TXFS_RM_FLAG_GROW_LOG                            | \
04102                                     TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE                | \
04103                                     TXFS_RM_FLAG_PRESERVE_CHANGES                    | \
04104                                     TXFS_RM_FLAG_RESET_RM_AT_NEXT_START              | \
04105                                     TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START       | \
04106                                     TXFS_RM_FLAG_PREFER_CONSISTENCY                  | \
04107                                     TXFS_RM_FLAG_PREFER_AVAILABILITY)
04108 
04109 typedef struct _TXFS_MODIFY_RM {
04110   ULONG Flags;
04111   ULONG LogContainerCountMax;
04112   ULONG LogContainerCountMin;
04113   ULONG LogContainerCount;
04114   ULONG LogGrowthIncrement;
04115   ULONG LogAutoShrinkPercentage;
04116   ULONGLONG Reserved;
04117   USHORT LoggingMode;
04118 } TXFS_MODIFY_RM, *PTXFS_MODIFY_RM;
04119 
04120 #define TXFS_RM_STATE_NOT_STARTED       0
04121 #define TXFS_RM_STATE_STARTING          1
04122 #define TXFS_RM_STATE_ACTIVE            2
04123 #define TXFS_RM_STATE_SHUTTING_DOWN     3
04124 
04125 #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS                           \
04126                 (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS   |   \
04127                  TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT          |   \
04128                  TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX            |   \
04129                  TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN            |   \
04130                  TXFS_RM_FLAG_RESET_RM_AT_NEXT_START                |   \
04131                  TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START         |   \
04132                  TXFS_RM_FLAG_PREFER_CONSISTENCY                    |   \
04133                  TXFS_RM_FLAG_PREFER_AVAILABILITY)
04134 
04135 typedef struct _TXFS_QUERY_RM_INFORMATION {
04136   ULONG BytesRequired;
04137   ULONGLONG TailLsn;
04138   ULONGLONG CurrentLsn;
04139   ULONGLONG ArchiveTailLsn;
04140   ULONGLONG LogContainerSize;
04141   LARGE_INTEGER HighestVirtualClock;
04142   ULONG LogContainerCount;
04143   ULONG LogContainerCountMax;
04144   ULONG LogContainerCountMin;
04145   ULONG LogGrowthIncrement;
04146   ULONG LogAutoShrinkPercentage;
04147   ULONG Flags;
04148   USHORT LoggingMode;
04149   USHORT Reserved;
04150   ULONG RmState;
04151   ULONGLONG LogCapacity;
04152   ULONGLONG LogFree;
04153   ULONGLONG TopsSize;
04154   ULONGLONG TopsUsed;
04155   ULONGLONG TransactionCount;
04156   ULONGLONG OnePCCount;
04157   ULONGLONG TwoPCCount;
04158   ULONGLONG NumberLogFileFull;
04159   ULONGLONG OldestTransactionAge;
04160   GUID RMName;
04161   ULONG TmLogPathOffset;
04162 } TXFS_QUERY_RM_INFORMATION, *PTXFS_QUERY_RM_INFORMATION;
04163 
04164 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN        0x01
04165 #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK   0x02
04166 
04167 #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS                               \
04168                 (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN |         \
04169                  TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK)
04170 
04171 typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION {
04172   LARGE_INTEGER LastVirtualClock;
04173   ULONGLONG LastRedoLsn;
04174   ULONGLONG HighestRecoveryLsn;
04175   ULONG Flags;
04176 } TXFS_ROLLFORWARD_REDO_INFORMATION, *PTXFS_ROLLFORWARD_REDO_INFORMATION;
04177 
04178 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX              0x00000001
04179 #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN              0x00000002
04180 #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE                   0x00000004
04181 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS  0x00000008
04182 #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT         0x00000010
04183 #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE           0x00000020
04184 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX           0x00000040
04185 #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN           0x00000080
04186 
04187 #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT                  0x00000200
04188 #define TXFS_START_RM_FLAG_LOGGING_MODE                         0x00000400
04189 #define TXFS_START_RM_FLAG_PRESERVE_CHANGES                     0x00000800
04190 
04191 #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY                   0x00001000
04192 #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY                  0x00002000
04193 
04194 #define TXFS_START_RM_VALID_FLAGS                                           \
04195                 (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX             |   \
04196                  TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN             |   \
04197                  TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE                  |   \
04198                  TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS |   \
04199                  TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT        |   \
04200                  TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE          |   \
04201                  TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT                 |   \
04202                  TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX          |   \
04203                  TXFS_START_RM_FLAG_LOGGING_MODE                        |   \
04204                  TXFS_START_RM_FLAG_PRESERVE_CHANGES                    |   \
04205                  TXFS_START_RM_FLAG_PREFER_CONSISTENCY                  |   \
04206                  TXFS_START_RM_FLAG_PREFER_AVAILABILITY)
04207 
04208 typedef struct _TXFS_START_RM_INFORMATION {
04209   ULONG Flags;
04210   ULONGLONG LogContainerSize;
04211   ULONG LogContainerCountMin;
04212   ULONG LogContainerCountMax;
04213   ULONG LogGrowthIncrement;
04214   ULONG LogAutoShrinkPercentage;
04215   ULONG TmLogPathOffset;
04216   USHORT TmLogPathLength;
04217   USHORT LoggingMode;
04218   USHORT LogPathLength;
04219   USHORT Reserved;
04220   WCHAR LogPath[1];
04221 } TXFS_START_RM_INFORMATION, *PTXFS_START_RM_INFORMATION;
04222 
04223 typedef struct _TXFS_GET_METADATA_INFO_OUT {
04224   struct {
04225     LONGLONG LowPart;
04226     LONGLONG HighPart;
04227   } TxfFileId;
04228   GUID LockingTransaction;
04229   ULONGLONG LastLsn;
04230   ULONG TransactionState;
04231 } TXFS_GET_METADATA_INFO_OUT, *PTXFS_GET_METADATA_INFO_OUT;
04232 
04233 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED   0x00000001
04234 #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED   0x00000002
04235 
04236 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY {
04237   ULONGLONG Offset;
04238   ULONG NameFlags;
04239   LONGLONG FileId;
04240   ULONG Reserved1;
04241   ULONG Reserved2;
04242   LONGLONG Reserved3;
04243   WCHAR FileName[1];
04244 } TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY;
04245 
04246 typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES {
04247   GUID KtmTransaction;
04248   ULONGLONG NumberOfFiles;
04249   ULONGLONG BufferSizeRequired;
04250   ULONGLONG Offset;
04251 } TXFS_LIST_TRANSACTION_LOCKED_FILES, *PTXFS_LIST_TRANSACTION_LOCKED_FILES;
04252 
04253 typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY {
04254   GUID TransactionId;
04255   ULONG TransactionState;
04256   ULONG Reserved1;
04257   ULONG Reserved2;
04258   LONGLONG Reserved3;
04259 } TXFS_LIST_TRANSACTIONS_ENTRY, *PTXFS_LIST_TRANSACTIONS_ENTRY;
04260 
04261 typedef struct _TXFS_LIST_TRANSACTIONS {
04262   ULONGLONG NumberOfTransactions;
04263   ULONGLONG BufferSizeRequired;
04264 } TXFS_LIST_TRANSACTIONS, *PTXFS_LIST_TRANSACTIONS;
04265 
04266 typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT {
04267   _ANONYMOUS_UNION union {
04268     ULONG BufferLength;
04269     UCHAR Buffer[1];
04270   } DUMMYUNIONNAME;
04271 } TXFS_READ_BACKUP_INFORMATION_OUT, *PTXFS_READ_BACKUP_INFORMATION_OUT;
04272 
04273 typedef struct _TXFS_WRITE_BACKUP_INFORMATION {
04274   UCHAR Buffer[1];
04275 } TXFS_WRITE_BACKUP_INFORMATION, *PTXFS_WRITE_BACKUP_INFORMATION;
04276 
04277 #define TXFS_TRANSACTED_VERSION_NONTRANSACTED   0xFFFFFFFE
04278 #define TXFS_TRANSACTED_VERSION_UNCOMMITTED     0xFFFFFFFF
04279 
04280 typedef struct _TXFS_GET_TRANSACTED_VERSION {
04281   ULONG ThisBaseVersion;
04282   ULONG LatestVersion;
04283   USHORT ThisMiniVersion;
04284   USHORT FirstMiniVersion;
04285   USHORT LatestMiniVersion;
04286 } TXFS_GET_TRANSACTED_VERSION, *PTXFS_GET_TRANSACTED_VERSION;
04287 
04288 #define TXFS_SAVEPOINT_SET                      0x00000001
04289 #define TXFS_SAVEPOINT_ROLLBACK                 0x00000002
04290 #define TXFS_SAVEPOINT_CLEAR                    0x00000004
04291 #define TXFS_SAVEPOINT_CLEAR_ALL                0x00000010
04292 
04293 typedef struct _TXFS_SAVEPOINT_INFORMATION {
04294   HANDLE KtmTransaction;
04295   ULONG ActionCode;
04296   ULONG SavepointId;
04297 } TXFS_SAVEPOINT_INFORMATION, *PTXFS_SAVEPOINT_INFORMATION;
04298 
04299 typedef struct _TXFS_CREATE_MINIVERSION_INFO {
04300   USHORT StructureVersion;
04301   USHORT StructureLength;
04302   ULONG BaseVersion;
04303   USHORT MiniVersion;
04304 } TXFS_CREATE_MINIVERSION_INFO, *PTXFS_CREATE_MINIVERSION_INFO;
04305 
04306 typedef struct _TXFS_TRANSACTION_ACTIVE_INFO {
04307   BOOLEAN TransactionsActiveAtSnapshot;
04308 } TXFS_TRANSACTION_ACTIVE_INFO, *PTXFS_TRANSACTION_ACTIVE_INFO;
04309 
04310 #endif /* (_WIN32_WINNT >= 0x0600) */
04311 
04312 #if (_WIN32_WINNT >= 0x0601)
04313 
04314 #define MARK_HANDLE_REALTIME                (0x00000020)
04315 #define MARK_HANDLE_NOT_REALTIME            (0x00000040)
04316 
04317 #define NO_8DOT3_NAME_PRESENT               (0x00000001)
04318 #define REMOVED_8DOT3_NAME                  (0x00000002)
04319 
04320 #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED        (0x00000001)
04321 
04322 typedef struct _BOOT_AREA_INFO {
04323   ULONG BootSectorCount;
04324   struct {
04325     LARGE_INTEGER Offset;
04326   } BootSectors[2];
04327 } BOOT_AREA_INFO, *PBOOT_AREA_INFO;
04328 
04329 typedef struct _RETRIEVAL_POINTER_BASE {
04330   LARGE_INTEGER FileAreaOffset;
04331 } RETRIEVAL_POINTER_BASE, *PRETRIEVAL_POINTER_BASE;
04332 
04333 typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION {
04334   ULONG VolumeFlags;
04335   ULONG FlagMask;
04336   ULONG Version;
04337   ULONG Reserved;
04338 } FILE_FS_PERSISTENT_VOLUME_INFORMATION, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION;
04339 
04340 typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION {
04341   CHAR FileSystem[9];
04342 } FILE_SYSTEM_RECOGNITION_INFORMATION, *PFILE_SYSTEM_RECOGNITION_INFORMATION;
04343 
04344 #define OPLOCK_LEVEL_CACHE_READ         (0x00000001)
04345 #define OPLOCK_LEVEL_CACHE_HANDLE       (0x00000002)
04346 #define OPLOCK_LEVEL_CACHE_WRITE        (0x00000004)
04347 
04348 #define REQUEST_OPLOCK_INPUT_FLAG_REQUEST               (0x00000001)
04349 #define REQUEST_OPLOCK_INPUT_FLAG_ACK                   (0x00000002)
04350 #define REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE (0x00000004)
04351 
04352 #define REQUEST_OPLOCK_CURRENT_VERSION          1
04353 
04354 typedef struct _REQUEST_OPLOCK_INPUT_BUFFER {
04355   USHORT StructureVersion;
04356   USHORT StructureLength;
04357   ULONG RequestedOplockLevel;
04358   ULONG Flags;
04359 } REQUEST_OPLOCK_INPUT_BUFFER, *PREQUEST_OPLOCK_INPUT_BUFFER;
04360 
04361 #define REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED     (0x00000001)
04362 #define REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED   (0x00000002)
04363 
04364 typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER {
04365   USHORT StructureVersion;
04366   USHORT StructureLength;
04367   ULONG OriginalOplockLevel;
04368   ULONG NewOplockLevel;
04369   ULONG Flags;
04370   ACCESS_MASK AccessMode;
04371   USHORT ShareMode;
04372 } REQUEST_OPLOCK_OUTPUT_BUFFER, *PREQUEST_OPLOCK_OUTPUT_BUFFER;
04373 
04374 #define SD_GLOBAL_CHANGE_TYPE_MACHINE_SID   1
04375 
04376 typedef struct _SD_CHANGE_MACHINE_SID_INPUT {
04377   USHORT CurrentMachineSIDOffset;
04378   USHORT CurrentMachineSIDLength;
04379   USHORT NewMachineSIDOffset;
04380   USHORT NewMachineSIDLength;
04381 } SD_CHANGE_MACHINE_SID_INPUT, *PSD_CHANGE_MACHINE_SID_INPUT;
04382 
04383 typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT {
04384   ULONGLONG NumSDChangedSuccess;
04385   ULONGLONG NumSDChangedFail;
04386   ULONGLONG NumSDUnused;
04387   ULONGLONG NumSDTotal;
04388   ULONGLONG NumMftSDChangedSuccess;
04389   ULONGLONG NumMftSDChangedFail;
04390   ULONGLONG NumMftSDTotal;
04391 } SD_CHANGE_MACHINE_SID_OUTPUT, *PSD_CHANGE_MACHINE_SID_OUTPUT;
04392 
04393 typedef struct _SD_GLOBAL_CHANGE_INPUT {
04394   ULONG Flags;
04395   ULONG ChangeType;
04396   _ANONYMOUS_UNION union {
04397     SD_CHANGE_MACHINE_SID_INPUT SdChange;
04398   } DUMMYUNIONNAME;
04399 } SD_GLOBAL_CHANGE_INPUT, *PSD_GLOBAL_CHANGE_INPUT;
04400 
04401 typedef struct _SD_GLOBAL_CHANGE_OUTPUT {
04402   ULONG Flags;
04403   ULONG ChangeType;
04404   _ANONYMOUS_UNION union {
04405     SD_CHANGE_MACHINE_SID_OUTPUT SdChange;
04406   } DUMMYUNIONNAME;
04407 } SD_GLOBAL_CHANGE_OUTPUT, *PSD_GLOBAL_CHANGE_OUTPUT;
04408 
04409 #define ENCRYPTED_DATA_INFO_SPARSE_FILE    1
04410 
04411 typedef struct _EXTENDED_ENCRYPTED_DATA_INFO {
04412   ULONG ExtendedCode;
04413   ULONG Length;
04414   ULONG Flags;
04415   ULONG Reserved;
04416 } EXTENDED_ENCRYPTED_DATA_INFO, *PEXTENDED_ENCRYPTED_DATA_INFO;
04417 
04418 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT {
04419   ULONG Flags;
04420   ULONG NumberOfClusters;
04421   LARGE_INTEGER Cluster[1];
04422 } LOOKUP_STREAM_FROM_CLUSTER_INPUT, *PLOOKUP_STREAM_FROM_CLUSTER_INPUT;
04423 
04424 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT {
04425   ULONG Offset;
04426   ULONG NumberOfMatches;
04427   ULONG BufferSizeRequired;
04428 } LOOKUP_STREAM_FROM_CLUSTER_OUTPUT, *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT;
04429 
04430 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE          0x00000001
04431 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET    0x00000002
04432 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE     0x00000004
04433 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE    0x00000008
04434 
04435 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK          0xff000000
04436 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA          0x01000000
04437 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX         0x02000000
04438 #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM        0x03000000
04439 
04440 typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY {
04441   ULONG OffsetToNext;
04442   ULONG Flags;
04443   LARGE_INTEGER Reserved;
04444   LARGE_INTEGER Cluster;
04445   WCHAR FileName[1];
04446 } LOOKUP_STREAM_FROM_CLUSTER_ENTRY, *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY;
04447 
04448 typedef struct _FILE_TYPE_NOTIFICATION_INPUT {
04449   ULONG Flags;
04450   ULONG NumFileTypeIDs;
04451   GUID FileTypeID[1];
04452 } FILE_TYPE_NOTIFICATION_INPUT, *PFILE_TYPE_NOTIFICATION_INPUT;
04453 
04454 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_BEGIN     0x00000001
04455 #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_END       0x00000002
04456 
04457 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_PAGE_FILE,         0x0d0a64a1, 0x38fc, 0x4db8, 0x9f, 0xe7, 0x3f, 0x43, 0x52, 0xcd, 0x7c, 0x5c);
04458 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_HIBERNATION_FILE,  0xb7624d64, 0xb9a3, 0x4cf8, 0x80, 0x11, 0x5b, 0x86, 0xc9, 0x40, 0xe7, 0xb7);
04459 DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_CRASHDUMP_FILE,    0x9d453eb7, 0xd2a6, 0x4dbd, 0xa2, 0xe3, 0xfb, 0xd0, 0xed, 0x91, 0x09, 0xa9);
04460 
04461 #ifndef _VIRTUAL_STORAGE_TYPE_DEFINED
04462 #define _VIRTUAL_STORAGE_TYPE_DEFINED
04463 typedef struct _VIRTUAL_STORAGE_TYPE {
04464   ULONG DeviceId;
04465   GUID VendorId;
04466 } VIRTUAL_STORAGE_TYPE, *PVIRTUAL_STORAGE_TYPE;
04467 #endif
04468 
04469 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST {
04470   ULONG RequestLevel;
04471   ULONG RequestFlags;
04472 } STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST, *PSTORAGE_QUERY_DEPENDENT_VOLUME_REQUEST;
04473 
04474 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_HOST_VOLUMES    0x1
04475 #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_GUEST_VOLUMES   0x2
04476 
04477 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY {
04478   ULONG EntryLength;
04479   ULONG DependencyTypeFlags;
04480   ULONG ProviderSpecificFlags;
04481   VIRTUAL_STORAGE_TYPE VirtualStorageType;
04482 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY;
04483 
04484 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY {
04485   ULONG EntryLength;
04486   ULONG DependencyTypeFlags;
04487   ULONG ProviderSpecificFlags;
04488   VIRTUAL_STORAGE_TYPE VirtualStorageType;
04489   ULONG AncestorLevel;
04490   ULONG HostVolumeNameOffset;
04491   ULONG HostVolumeNameSize;
04492   ULONG DependentVolumeNameOffset;
04493   ULONG DependentVolumeNameSize;
04494   ULONG RelativePathOffset;
04495   ULONG RelativePathSize;
04496   ULONG DependentDeviceNameOffset;
04497   ULONG DependentDeviceNameSize;
04498 } STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY;
04499 
04500 typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE {
04501   ULONG ResponseLevel;
04502   ULONG NumberEntries;
04503   _ANONYMOUS_UNION union {
04504     STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY Lev1Depends[0];
04505     STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY Lev2Depends[0];
04506   } DUMMYUNIONNAME;
04507 } STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE, *PSTORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE;
04508 
04509 #endif /* (_WIN32_WINNT >= 0x0601) */
04510 
04511 typedef struct _FILESYSTEM_STATISTICS {
04512   USHORT FileSystemType;
04513   USHORT Version;
04514   ULONG SizeOfCompleteStructure;
04515   ULONG UserFileReads;
04516   ULONG UserFileReadBytes;
04517   ULONG UserDiskReads;
04518   ULONG UserFileWrites;
04519   ULONG UserFileWriteBytes;
04520   ULONG UserDiskWrites;
04521   ULONG MetaDataReads;
04522   ULONG MetaDataReadBytes;
04523   ULONG MetaDataDiskReads;
04524   ULONG MetaDataWrites;
04525   ULONG MetaDataWriteBytes;
04526   ULONG MetaDataDiskWrites;
04527 } FILESYSTEM_STATISTICS, *PFILESYSTEM_STATISTICS;
04528 
04529 #define FILESYSTEM_STATISTICS_TYPE_NTFS     1
04530 #define FILESYSTEM_STATISTICS_TYPE_FAT      2
04531 #define FILESYSTEM_STATISTICS_TYPE_EXFAT    3
04532 
04533 typedef struct _FAT_STATISTICS {
04534   ULONG CreateHits;
04535   ULONG SuccessfulCreates;
04536   ULONG FailedCreates;
04537   ULONG NonCachedReads;
04538   ULONG NonCachedReadBytes;
04539   ULONG NonCachedWrites;
04540   ULONG NonCachedWriteBytes;
04541   ULONG NonCachedDiskReads;
04542   ULONG NonCachedDiskWrites;
04543 } FAT_STATISTICS, *PFAT_STATISTICS;
04544 
04545 typedef struct _EXFAT_STATISTICS {
04546   ULONG CreateHits;
04547   ULONG SuccessfulCreates;
04548   ULONG FailedCreates;
04549   ULONG NonCachedReads;
04550   ULONG NonCachedReadBytes;
04551   ULONG NonCachedWrites;
04552   ULONG NonCachedWriteBytes;
04553   ULONG NonCachedDiskReads;
04554   ULONG NonCachedDiskWrites;
04555 } EXFAT_STATISTICS, *PEXFAT_STATISTICS;
04556 
04557 typedef struct _NTFS_STATISTICS {
04558   ULONG LogFileFullExceptions;
04559   ULONG OtherExceptions;
04560   ULONG MftReads;
04561   ULONG MftReadBytes;
04562   ULONG MftWrites;
04563   ULONG MftWriteBytes;
04564   struct {
04565     USHORT Write;
04566     USHORT Create;
04567     USHORT SetInfo;
04568     USHORT Flush;
04569   } MftWritesUserLevel;
04570   USHORT MftWritesFlushForLogFileFull;
04571   USHORT MftWritesLazyWriter;
04572   USHORT MftWritesUserRequest;
04573   ULONG Mft2Writes;
04574   ULONG Mft2WriteBytes;
04575   struct {
04576     USHORT Write;
04577     USHORT Create;
04578     USHORT SetInfo;
04579     USHORT Flush;
04580   } Mft2WritesUserLevel;
04581   USHORT Mft2WritesFlushForLogFileFull;
04582   USHORT Mft2WritesLazyWriter;
04583   USHORT Mft2WritesUserRequest;
04584   ULONG RootIndexReads;
04585   ULONG RootIndexReadBytes;
04586   ULONG RootIndexWrites;
04587   ULONG RootIndexWriteBytes;
04588   ULONG BitmapReads;
04589   ULONG BitmapReadBytes;
04590   ULONG BitmapWrites;
04591   ULONG BitmapWriteBytes;
04592   USHORT BitmapWritesFlushForLogFileFull;
04593   USHORT BitmapWritesLazyWriter;
04594   USHORT BitmapWritesUserRequest;
04595   struct {
04596     USHORT Write;
04597     USHORT Create;
04598     USHORT SetInfo;
04599   } BitmapWritesUserLevel;
04600   ULONG MftBitmapReads;
04601   ULONG MftBitmapReadBytes;
04602   ULONG MftBitmapWrites;
04603   ULONG MftBitmapWriteBytes;
04604   USHORT MftBitmapWritesFlushForLogFileFull;
04605   USHORT MftBitmapWritesLazyWriter;
04606   USHORT MftBitmapWritesUserRequest;
04607   struct {
04608     USHORT Write;
04609     USHORT Create;
04610     USHORT SetInfo;
04611     USHORT Flush;
04612   } MftBitmapWritesUserLevel;
04613   ULONG UserIndexReads;
04614   ULONG UserIndexReadBytes;
04615   ULONG UserIndexWrites;
04616   ULONG UserIndexWriteBytes;
04617   ULONG LogFileReads;
04618   ULONG LogFileReadBytes;
04619   ULONG LogFileWrites;
04620   ULONG LogFileWriteBytes;
04621   struct {
04622     ULONG Calls;
04623     ULONG Clusters;
04624     ULONG Hints;
04625     ULONG RunsReturned;
04626     ULONG HintsHonored;
04627     ULONG HintsClusters;
04628     ULONG Cache;
04629     ULONG CacheClusters;
04630     ULONG CacheMiss;
04631     ULONG CacheMissClusters;
04632   } Allocate;
04633 } NTFS_STATISTICS, *PNTFS_STATISTICS;
04634 
04635 #endif /* _FILESYSTEMFSCTL_ */
04636 
04637 #define SYMLINK_FLAG_RELATIVE   1
04638 
04639 typedef struct _REPARSE_DATA_BUFFER {
04640   ULONG ReparseTag;
04641   USHORT ReparseDataLength;
04642   USHORT Reserved;
04643   _ANONYMOUS_UNION union {
04644     struct {
04645       USHORT SubstituteNameOffset;
04646       USHORT SubstituteNameLength;
04647       USHORT PrintNameOffset;
04648       USHORT PrintNameLength;
04649       ULONG Flags;
04650       WCHAR PathBuffer[1];
04651     } SymbolicLinkReparseBuffer;
04652     struct {
04653       USHORT SubstituteNameOffset;
04654       USHORT SubstituteNameLength;
04655       USHORT PrintNameOffset;
04656       USHORT PrintNameLength;
04657       WCHAR PathBuffer[1];
04658     } MountPointReparseBuffer;
04659     struct {
04660       UCHAR DataBuffer[1];
04661     } GenericReparseBuffer;
04662   } DUMMYUNIONNAME;
04663 } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
04664 
04665 #define REPARSE_DATA_BUFFER_HEADER_SIZE   FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
04666 
04667 typedef struct _REPARSE_GUID_DATA_BUFFER {
04668   ULONG ReparseTag;
04669   USHORT ReparseDataLength;
04670   USHORT Reserved;
04671   GUID ReparseGuid;
04672   struct {
04673     UCHAR DataBuffer[1];
04674   } GenericReparseBuffer;
04675 } REPARSE_GUID_DATA_BUFFER, *PREPARSE_GUID_DATA_BUFFER;
04676 
04677 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE   FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
04678 
04679 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE      ( 16 * 1024 )
04680 
04681 /* Reserved reparse tags */
04682 #define IO_REPARSE_TAG_RESERVED_ZERO            (0)
04683 #define IO_REPARSE_TAG_RESERVED_ONE             (1)
04684 #define IO_REPARSE_TAG_RESERVED_RANGE           IO_REPARSE_TAG_RESERVED_ONE
04685 
04686 #define IsReparseTagMicrosoft(_tag)             (((_tag) & 0x80000000))
04687 #define IsReparseTagNameSurrogate(_tag)         (((_tag) & 0x20000000))
04688 
04689 #define IO_REPARSE_TAG_VALID_VALUES             (0xF000FFFF)
04690 
04691 #define IsReparseTagValid(tag) (                               \
04692                   !((tag) & ~IO_REPARSE_TAG_VALID_VALUES) &&   \
04693                   ((tag) > IO_REPARSE_TAG_RESERVED_RANGE)      \
04694                 )
04695 
04696 /* MicroSoft reparse point tags */
04697 #define IO_REPARSE_TAG_MOUNT_POINT              (0xA0000003L)
04698 #define IO_REPARSE_TAG_HSM                      (0xC0000004L)
04699 #define IO_REPARSE_TAG_DRIVE_EXTENDER           (0x80000005L)
04700 #define IO_REPARSE_TAG_HSM2                     (0x80000006L)
04701 #define IO_REPARSE_TAG_SIS                      (0x80000007L)
04702 #define IO_REPARSE_TAG_WIM                      (0x80000008L)
04703 #define IO_REPARSE_TAG_CSV                      (0x80000009L)
04704 #define IO_REPARSE_TAG_DFS                      (0x8000000AL)
04705 #define IO_REPARSE_TAG_FILTER_MANAGER           (0x8000000BL)
04706 #define IO_REPARSE_TAG_SYMLINK                  (0xA000000CL)
04707 #define IO_REPARSE_TAG_IIS_CACHE                (0xA0000010L)
04708 #define IO_REPARSE_TAG_DFSR                     (0x80000012L)
04709 
04710 #pragma pack(4)
04711 typedef struct _REPARSE_INDEX_KEY {
04712   ULONG FileReparseTag;
04713   LARGE_INTEGER FileId;
04714 } REPARSE_INDEX_KEY, *PREPARSE_INDEX_KEY;
04715 #pragma pack()
04716 
04717 #define FSCTL_LMR_GET_LINK_TRACKING_INFORMATION   CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,58,METHOD_BUFFERED,FILE_ANY_ACCESS)
04718 #define FSCTL_LMR_SET_LINK_TRACKING_INFORMATION   CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,59,METHOD_BUFFERED,FILE_ANY_ACCESS)
04719 #define IOCTL_LMR_ARE_FILE_OBJECTS_ON_SAME_SERVER CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS)
04720 
04721 #define FSCTL_PIPE_ASSIGN_EVENT             CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
04722 #define FSCTL_PIPE_DISCONNECT               CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
04723 #define FSCTL_PIPE_LISTEN                   CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
04724 #define FSCTL_PIPE_PEEK                     CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
04725 #define FSCTL_PIPE_QUERY_EVENT              CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
04726 #define FSCTL_PIPE_TRANSCEIVE               CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER,  FILE_READ_DATA | FILE_WRITE_DATA)
04727 #define FSCTL_PIPE_WAIT                     CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
04728 #define FSCTL_PIPE_IMPERSONATE              CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
04729 #define FSCTL_PIPE_SET_CLIENT_PROCESS       CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
04730 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS     CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
04731 #define FSCTL_PIPE_GET_PIPE_ATTRIBUTE       CTL_CODE(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
04732 #define FSCTL_PIPE_SET_PIPE_ATTRIBUTE       CTL_CODE(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
04733 #define FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
04734 #define FSCTL_PIPE_SET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
04735 #define FSCTL_PIPE_GET_HANDLE_ATTRIBUTE     CTL_CODE(FILE_DEVICE_NAMED_PIPE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
04736 #define FSCTL_PIPE_SET_HANDLE_ATTRIBUTE     CTL_CODE(FILE_DEVICE_NAMED_PIPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
04737 #define FSCTL_PIPE_FLUSH                    CTL_CODE(FILE_DEVICE_NAMED_PIPE, 16, METHOD_BUFFERED, FILE_WRITE_DATA)
04738 
04739 #define FSCTL_PIPE_INTERNAL_READ            CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
04740 #define FSCTL_PIPE_INTERNAL_WRITE           CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
04741 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE      CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
04742 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW     CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
04743 
04744 #define FILE_PIPE_READ_DATA                 0x00000000
04745 #define FILE_PIPE_WRITE_SPACE               0x00000001
04746 
04747 typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER {
04748   HANDLE EventHandle;
04749   ULONG KeyValue;
04750 } FILE_PIPE_ASSIGN_EVENT_BUFFER, *PFILE_PIPE_ASSIGN_EVENT_BUFFER;
04751 
04752 typedef struct _FILE_PIPE_EVENT_BUFFER {
04753   ULONG NamedPipeState;
04754   ULONG EntryType;
04755   ULONG ByteCount;
04756   ULONG KeyValue;
04757   ULONG NumberRequests;
04758 } FILE_PIPE_EVENT_BUFFER, *PFILE_PIPE_EVENT_BUFFER;
04759 
04760 typedef struct _FILE_PIPE_PEEK_BUFFER {
04761   ULONG NamedPipeState;
04762   ULONG ReadDataAvailable;
04763   ULONG NumberOfMessages;
04764   ULONG MessageLength;
04765   CHAR Data[1];
04766 } FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
04767 
04768 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER {
04769   LARGE_INTEGER Timeout;
04770   ULONG NameLength;
04771   BOOLEAN TimeoutSpecified;
04772   WCHAR Name[1];
04773 } FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
04774 
04775 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER {
04776 #if !defined(BUILD_WOW6432)
04777   PVOID ClientSession;
04778   PVOID ClientProcess;
04779 #else
04780   ULONGLONG ClientSession;
04781   ULONGLONG ClientProcess;
04782 #endif
04783 } FILE_PIPE_CLIENT_PROCESS_BUFFER, *PFILE_PIPE_CLIENT_PROCESS_BUFFER;
04784 
04785 #define FILE_PIPE_COMPUTER_NAME_LENGTH 15
04786 
04787 typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER_EX {
04788 #if !defined(BUILD_WOW6432)
04789   PVOID ClientSession;
04790   PVOID ClientProcess;
04791 #else
04792   ULONGLONG ClientSession;
04793   ULONGLONG ClientProcess;
04794 #endif
04795   USHORT ClientComputerNameLength;
04796   WCHAR ClientComputerBuffer[FILE_PIPE_COMPUTER_NAME_LENGTH+1];
04797 } FILE_PIPE_CLIENT_PROCESS_BUFFER_EX, *PFILE_PIPE_CLIENT_PROCESS_BUFFER_EX;
04798 
04799 #define FSCTL_MAILSLOT_PEEK             CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
04800 
04801 typedef enum _LINK_TRACKING_INFORMATION_TYPE {
04802   NtfsLinkTrackingInformation,
04803   DfsLinkTrackingInformation
04804 } LINK_TRACKING_INFORMATION_TYPE, *PLINK_TRACKING_INFORMATION_TYPE;
04805 
04806 typedef struct _LINK_TRACKING_INFORMATION {
04807   LINK_TRACKING_INFORMATION_TYPE Type;
04808   UCHAR VolumeId[16];
04809 } LINK_TRACKING_INFORMATION, *PLINK_TRACKING_INFORMATION;
04810 
04811 typedef struct _REMOTE_LINK_TRACKING_INFORMATION {
04812   PVOID TargetFileObject;
04813   ULONG TargetLinkTrackingInformationLength;
04814   UCHAR TargetLinkTrackingInformationBuffer[1];
04815 } REMOTE_LINK_TRACKING_INFORMATION, *PREMOTE_LINK_TRACKING_INFORMATION;
04816 
04817 #define IO_OPEN_PAGING_FILE                 0x0002
04818 #define IO_OPEN_TARGET_DIRECTORY            0x0004
04819 #define IO_STOP_ON_SYMLINK                  0x0008
04820 #define IO_MM_PAGING_FILE                   0x0010
04821 
04822 typedef VOID
04823 (NTAPI *PDRIVER_FS_NOTIFICATION) (
04824   _In_ PDEVICE_OBJECT DeviceObject,
04825   _In_ BOOLEAN FsActive);
04826 
04827 typedef enum _FS_FILTER_SECTION_SYNC_TYPE {
04828   SyncTypeOther = 0,
04829   SyncTypeCreateSection
04830 } FS_FILTER_SECTION_SYNC_TYPE, *PFS_FILTER_SECTION_SYNC_TYPE;
04831 
04832 typedef enum _FS_FILTER_STREAM_FO_NOTIFICATION_TYPE {
04833   NotifyTypeCreate = 0,
04834   NotifyTypeRetired
04835 } FS_FILTER_STREAM_FO_NOTIFICATION_TYPE, *PFS_FILTER_STREAM_FO_NOTIFICATION_TYPE;
04836 
04837 typedef union _FS_FILTER_PARAMETERS {
04838   struct {
04839     PLARGE_INTEGER EndingOffset;
04840     PERESOURCE *ResourceToRelease;
04841   } AcquireForModifiedPageWriter;
04842   struct {
04843     PERESOURCE ResourceToRelease;
04844   } ReleaseForModifiedPageWriter;
04845   struct {
04846     FS_FILTER_SECTION_SYNC_TYPE SyncType;
04847     ULONG PageProtection;
04848   } AcquireForSectionSynchronization;
04849   struct {
04850     FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType;
04851     BOOLEAN POINTER_ALIGNMENT SafeToRecurse;
04852   } NotifyStreamFileObject;
04853   struct {
04854     PVOID Argument1;
04855     PVOID Argument2;
04856     PVOID Argument3;
04857     PVOID Argument4;
04858     PVOID Argument5;
04859   } Others;
04860 } FS_FILTER_PARAMETERS, *PFS_FILTER_PARAMETERS;
04861 
04862 #define FS_FILTER_ACQUIRE_FOR_SECTION_SYNCHRONIZATION      (UCHAR)-1
04863 #define FS_FILTER_RELEASE_FOR_SECTION_SYNCHRONIZATION      (UCHAR)-2
04864 #define FS_FILTER_ACQUIRE_FOR_MOD_WRITE                    (UCHAR)-3
04865 #define FS_FILTER_RELEASE_FOR_MOD_WRITE                    (UCHAR)-4
04866 #define FS_FILTER_ACQUIRE_FOR_CC_FLUSH                     (UCHAR)-5
04867 #define FS_FILTER_RELEASE_FOR_CC_FLUSH                     (UCHAR)-6
04868 
04869 typedef struct _FS_FILTER_CALLBACK_DATA {
04870   ULONG SizeOfFsFilterCallbackData;
04871   UCHAR Operation;
04872   UCHAR Reserved;
04873   struct _DEVICE_OBJECT *DeviceObject;
04874   struct _FILE_OBJECT *FileObject;
04875   FS_FILTER_PARAMETERS Parameters;
04876 } FS_FILTER_CALLBACK_DATA, *PFS_FILTER_CALLBACK_DATA;
04877 
04878 typedef NTSTATUS
04879 (NTAPI *PFS_FILTER_CALLBACK) (
04880   _In_ PFS_FILTER_CALLBACK_DATA Data,
04881   _Out_ PVOID *CompletionContext);
04882 
04883 typedef VOID
04884 (NTAPI *PFS_FILTER_COMPLETION_CALLBACK) (
04885   _In_ PFS_FILTER_CALLBACK_DATA Data,
04886   _In_ NTSTATUS OperationStatus,
04887   _In_ PVOID CompletionContext);
04888 
04889 typedef struct _FS_FILTER_CALLBACKS {
04890   ULONG SizeOfFsFilterCallbacks;
04891   ULONG Reserved;
04892   PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization;
04893   PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization;
04894   PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization;
04895   PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization;
04896   PFS_FILTER_CALLBACK PreAcquireForCcFlush;
04897   PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush;
04898   PFS_FILTER_CALLBACK PreReleaseForCcFlush;
04899   PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush;
04900   PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter;
04901   PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter;
04902   PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter;
04903   PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter;
04904 } FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS;
04905 
04906 #if (NTDDI_VERSION >= NTDDI_WINXP)
04907 NTKERNELAPI
04908 NTSTATUS
04909 NTAPI
04910 FsRtlRegisterFileSystemFilterCallbacks(
04911   _In_ struct _DRIVER_OBJECT *FilterDriverObject,
04912   _In_ PFS_FILTER_CALLBACKS Callbacks);
04913 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
04914 
04915 #if (NTDDI_VERSION >= NTDDI_VISTA)
04916 NTKERNELAPI
04917 NTSTATUS
04918 NTAPI
04919 FsRtlNotifyStreamFileObject(
04920   _In_ struct _FILE_OBJECT * StreamFileObject,
04921   _In_opt_ struct _DEVICE_OBJECT *DeviceObjectHint,
04922   _In_ FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType,
04923   _In_ BOOLEAN SafeToRecurse);
04924 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
04925 
04926 #define DO_VERIFY_VOLUME                    0x00000002
04927 #define DO_BUFFERED_IO                      0x00000004
04928 #define DO_EXCLUSIVE                        0x00000008
04929 #define DO_DIRECT_IO                        0x00000010
04930 #define DO_MAP_IO_BUFFER                    0x00000020
04931 #define DO_DEVICE_HAS_NAME                  0x00000040
04932 #define DO_DEVICE_INITIALIZING              0x00000080
04933 #define DO_SYSTEM_BOOT_PARTITION            0x00000100
04934 #define DO_LONG_TERM_REQUESTS               0x00000200
04935 #define DO_NEVER_LAST_DEVICE                0x00000400
04936 #define DO_SHUTDOWN_REGISTERED              0x00000800
04937 #define DO_BUS_ENUMERATED_DEVICE            0x00001000
04938 #define DO_POWER_PAGABLE                    0x00002000
04939 #define DO_POWER_INRUSH                     0x00004000
04940 #define DO_LOW_PRIORITY_FILESYSTEM          0x00010000
04941 #define DO_SUPPORTS_TRANSACTIONS            0x00040000
04942 #define DO_FORCE_NEITHER_IO                 0x00080000
04943 #define DO_VOLUME_DEVICE_OBJECT             0x00100000
04944 #define DO_SYSTEM_SYSTEM_PARTITION          0x00200000
04945 #define DO_SYSTEM_CRITICAL_PARTITION        0x00400000
04946 #define DO_DISALLOW_EXECUTE                 0x00800000
04947 
04948 extern KSPIN_LOCK                   IoStatisticsLock;
04949 extern ULONG                        IoReadOperationCount;
04950 extern ULONG                        IoWriteOperationCount;
04951 extern ULONG                        IoOtherOperationCount;
04952 extern LARGE_INTEGER                IoReadTransferCount;
04953 extern LARGE_INTEGER                IoWriteTransferCount;
04954 extern LARGE_INTEGER                IoOtherTransferCount;
04955 
04956 #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE    64
04957 #define IO_FILE_OBJECT_PAGED_POOL_CHARGE        1024
04958 
04959 #if (NTDDI_VERSION >= NTDDI_VISTA)
04960 typedef struct _IO_PRIORITY_INFO {
04961   ULONG Size;
04962   ULONG ThreadPriority;
04963   ULONG PagePriority;
04964   IO_PRIORITY_HINT IoPriority;
04965 } IO_PRIORITY_INFO, *PIO_PRIORITY_INFO;
04966 #endif
04967 
04968 typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION {
04969   ULONG Attributes;
04970   ACCESS_MASK GrantedAccess;
04971   ULONG HandleCount;
04972   ULONG PointerCount;
04973   ULONG Reserved[10];
04974 } PUBLIC_OBJECT_BASIC_INFORMATION, *PPUBLIC_OBJECT_BASIC_INFORMATION;
04975 
04976 typedef struct _PUBLIC_OBJECT_TYPE_INFORMATION {
04977   UNICODE_STRING TypeName;
04978   ULONG Reserved [22];
04979 } PUBLIC_OBJECT_TYPE_INFORMATION, *PPUBLIC_OBJECT_TYPE_INFORMATION;
04980 
04981 #define SYSTEM_PAGE_PRIORITY_BITS       3
04982 #define SYSTEM_PAGE_PRIORITY_LEVELS     (1 << SYSTEM_PAGE_PRIORITY_BITS)
04983 
04984 /******************************************************************************
04985  *                              Kernel Types                                  *
04986  ******************************************************************************/
04987 typedef struct _KAPC_STATE {
04988   LIST_ENTRY ApcListHead[MaximumMode];
04989   PKPROCESS Process;
04990   BOOLEAN KernelApcInProgress;
04991   BOOLEAN KernelApcPending;
04992   BOOLEAN UserApcPending;
04993 } KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE;
04994 
04995 #define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
04996 
04997 #define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
04998 
04999 typedef struct _KQUEUE {
05000   DISPATCHER_HEADER Header;
05001   LIST_ENTRY EntryListHead;
05002   volatile ULONG CurrentCount;
05003   ULONG MaximumCount;
05004   LIST_ENTRY ThreadListHead;
05005 } KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
05006 
05007 
05008 /******************************************************************************
05009  *                              Kernel Functions                              *
05010  ******************************************************************************/
05011 
05012 NTSTATUS
05013 NTAPI
05014 KeGetProcessorNumberFromIndex(
05015   _In_ ULONG ProcIndex,
05016   _Out_ PPROCESSOR_NUMBER ProcNumber);
05017 
05018 ULONG
05019 NTAPI
05020 KeGetProcessorIndexFromNumber(
05021   _In_ PPROCESSOR_NUMBER ProcNumber);
05022 
05023 #if (NTDDI_VERSION >= NTDDI_WIN2K)
05024 
05025 
05026 
05027 
05028 NTKERNELAPI
05029 VOID
05030 NTAPI
05031 KeInitializeMutant(
05032   _Out_ PRKMUTANT Mutant,
05033   _In_ BOOLEAN InitialOwner);
05034 
05035 _IRQL_requires_max_(DISPATCH_LEVEL)
05036 NTKERNELAPI
05037 LONG
05038 NTAPI
05039 KeReadStateMutant(
05040   _In_ PRKMUTANT Mutant);
05041 
05042 _When_(Wait==0, _IRQL_requires_max_(DISPATCH_LEVEL))
05043 _When_(Wait==1, _IRQL_requires_max_(APC_LEVEL))
05044 NTKERNELAPI
05045 LONG
05046 NTAPI
05047 KeReleaseMutant(
05048   _Inout_ PRKMUTANT Mutant,
05049   _In_ KPRIORITY Increment,
05050   _In_ BOOLEAN Abandoned,
05051   _In_ BOOLEAN Wait);
05052 
05053 NTKERNELAPI
05054 VOID
05055 NTAPI
05056 KeInitializeQueue(
05057   _Out_ PRKQUEUE Queue,
05058   _In_ ULONG Count);
05059 
05060 _IRQL_requires_max_(DISPATCH_LEVEL)
05061 NTKERNELAPI
05062 LONG
05063 NTAPI
05064 KeReadStateQueue(
05065   _In_ PRKQUEUE Queue);
05066 
05067 _IRQL_requires_min_(PASSIVE_LEVEL)
05068 _IRQL_requires_max_(DISPATCH_LEVEL)
05069 NTKERNELAPI
05070 LONG
05071 NTAPI
05072 KeInsertQueue(
05073   _Inout_ PRKQUEUE Queue,
05074   _Inout_ PLIST_ENTRY Entry);
05075 
05076 _IRQL_requires_min_(PASSIVE_LEVEL)
05077 _IRQL_requires_max_(DISPATCH_LEVEL)
05078 NTKERNELAPI
05079 LONG
05080 NTAPI
05081 KeInsertHeadQueue(
05082   _Inout_ PRKQUEUE Queue,
05083   _Inout_ PLIST_ENTRY Entry);
05084 
05085 _IRQL_requires_min_(PASSIVE_LEVEL)
05086 _When_((Timeout==NULL || *Timeout!=0), _IRQL_requires_max_(APC_LEVEL))
05087 _When_((Timeout!=NULL && *Timeout==0), _IRQL_requires_max_(DISPATCH_LEVEL))
05088 NTKERNELAPI
05089 PLIST_ENTRY
05090 NTAPI
05091 KeRemoveQueue(
05092   _Inout_ PRKQUEUE Queue,
05093   _In_ KPROCESSOR_MODE WaitMode,
05094   _In_opt_ PLARGE_INTEGER Timeout);
05095 
05096 _IRQL_requires_max_(APC_LEVEL)
05097 NTKERNELAPI
05098 VOID
05099 NTAPI
05100 KeAttachProcess(
05101   _Inout_ PKPROCESS Process);
05102 
05103 _IRQL_requires_max_(APC_LEVEL)
05104 NTKERNELAPI
05105 VOID
05106 NTAPI
05107 KeDetachProcess(VOID);
05108 
05109 _IRQL_requires_max_(DISPATCH_LEVEL)
05110 NTKERNELAPI
05111 PLIST_ENTRY
05112 NTAPI
05113 KeRundownQueue(
05114   _Inout_ PRKQUEUE Queue);
05115 
05116 _IRQL_requires_max_(APC_LEVEL)
05117 NTKERNELAPI
05118 VOID
05119 NTAPI
05120 KeStackAttachProcess(
05121   _Inout_ PKPROCESS Process,
05122   _Out_ PKAPC_STATE ApcState);
05123 
05124 _IRQL_requires_max_(APC_LEVEL)
05125 NTKERNELAPI
05126 VOID
05127 NTAPI
05128 KeUnstackDetachProcess(
05129   _In_ PKAPC_STATE ApcState);
05130 
05131 _IRQL_requires_min_(PASSIVE_LEVEL)
05132 _IRQL_requires_max_(DISPATCH_LEVEL)
05133 NTKERNELAPI
05134 UCHAR
05135 NTAPI
05136 KeSetIdealProcessorThread(
05137   _Inout_ PKTHREAD Thread,
05138   _In_ UCHAR Processor);
05139 
05140 _IRQL_requires_max_(APC_LEVEL)
05141 NTKERNELAPI
05142 BOOLEAN
05143 NTAPI
05144 KeSetKernelStackSwapEnable(
05145   _In_ BOOLEAN Enable);
05146 
05147 #if defined(_X86_)
05148 _Requires_lock_not_held_(*SpinLock)
05149 _Acquires_lock_(*SpinLock)
05150 _IRQL_raises_(SYNCH_LEVEL)
05151 _IRQL_saves_
05152 NTHALAPI
05153 KIRQL
05154 FASTCALL
05155 KeAcquireSpinLockRaiseToSynch(
05156   _Inout_ PKSPIN_LOCK SpinLock);
05157 #else
05158 _Requires_lock_not_held_(*SpinLock)
05159 _Acquires_lock_(*SpinLock)
05160 _IRQL_raises_(SYNCH_LEVEL)
05161 _IRQL_saves_
05162 NTKERNELAPI
05163 KIRQL
05164 KeAcquireSpinLockRaiseToSynch(
05165   _Inout_ PKSPIN_LOCK SpinLock);
05166 #endif
05167 
05168 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
05169 
05170 #if (NTDDI_VERSION >= NTDDI_WINXP)
05171 
05172 
05173 _Requires_lock_not_held_(Number)
05174 _Acquires_lock_(Number)
05175 _IRQL_raises_(DISPATCH_LEVEL)
05176 _DECL_HAL_KE_IMPORT
05177 KIRQL
05178 FASTCALL
05179 KeAcquireQueuedSpinLock(
05180   _In_ KSPIN_LOCK_QUEUE_NUMBER Number);
05181 
05182 _Requires_lock_held_(Number)
05183 _Releases_lock_(Number)
05184 _DECL_HAL_KE_IMPORT
05185 VOID
05186 FASTCALL
05187 KeReleaseQueuedSpinLock(
05188   _In_ KSPIN_LOCK_QUEUE_NUMBER Number,
05189   _In_ KIRQL OldIrql);
05190 
05191 _Must_inspect_result_
05192 _Post_satisfies_(return == 1 || return == 0)
05193 _DECL_HAL_KE_IMPORT
05194 LOGICAL
05195 FASTCALL
05196 KeTryToAcquireQueuedSpinLock(
05197   _In_ KSPIN_LOCK_QUEUE_NUMBER Number,
05198   _Out_ _At_(*OldIrql, _IRQL_saves_) PKIRQL OldIrql);
05199 
05200 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
05201 
05202 
05203 
05204 
05205 
05206 #if (NTDDI_VERSION >= NTDDI_VISTA)
05207 
05208 _IRQL_requires_max_(DISPATCH_LEVEL)
05209 NTKERNELAPI
05210 VOID
05211 KeQueryOwnerMutant(
05212   _In_ PKMUTANT Mutant,
05213   _Out_ PCLIENT_ID ClientId);
05214 
05215 _IRQL_requires_min_(PASSIVE_LEVEL)
05216 _When_((Timeout==NULL || *Timeout!=0), _IRQL_requires_max_(APC_LEVEL))
05217 _When_((Timeout!=NULL && *Timeout==0), _IRQL_requires_max_(DISPATCH_LEVEL))
05218 NTKERNELAPI
05219 ULONG
05220 NTAPI
05221 KeRemoveQueueEx(
05222   _Inout_ PKQUEUE Queue,
05223   _In_ KPROCESSOR_MODE WaitMode,
05224   _In_ BOOLEAN Alertable,
05225   _In_opt_ PLARGE_INTEGER Timeout,
05226   _Out_writes_to_(Count, return) PLIST_ENTRY *EntryArray,
05227   _In_ ULONG Count);
05228 
05229 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
05230 
05231 
05232 #define INVALID_PROCESSOR_INDEX     0xffffffff
05233 
05234 #define EX_PUSH_LOCK ULONG_PTR
05235 #define PEX_PUSH_LOCK PULONG_PTR
05236 /******************************************************************************
05237  *                          Executive Functions                               *
05238  ******************************************************************************/
05239 
05240 
05241 #define ExDisableResourceBoost ExDisableResourceBoostLite
05242 
05243 VOID
05244 ExInitializePushLock(
05245   _Out_ PEX_PUSH_LOCK PushLock);
05246 
05247 #if (NTDDI_VERSION >= NTDDI_WIN2K)
05248 
05249 _IRQL_requires_max_(DISPATCH_LEVEL)
05250 NTKERNELAPI
05251 SIZE_T
05252 NTAPI
05253 ExQueryPoolBlockSize(
05254   _In_ PVOID PoolBlock,
05255   _Out_ PBOOLEAN QuotaCharged);
05256 
05257 _IRQL_requires_max_(DISPATCH_LEVEL)
05258 VOID
05259 ExAdjustLookasideDepth(VOID);
05260 
05261 _IRQL_requires_max_(DISPATCH_LEVEL)
05262 NTKERNELAPI
05263 VOID
05264 NTAPI
05265 ExDisableResourceBoostLite(
05266   _In_ PERESOURCE Resource);
05267 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
05268 
05269 #if (NTDDI_VERSION >= NTDDI_WINXP)
05270 
05271 PSLIST_ENTRY
05272 FASTCALL
05273 InterlockedPushListSList(
05274   _Inout_ PSLIST_HEADER ListHead,
05275   _Inout_ __drv_aliasesMem PSLIST_ENTRY List,
05276   _Inout_ PSLIST_ENTRY ListEnd,
05277   _In_ ULONG Count);
05278 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
05279 
05280 /******************************************************************************
05281  *                            Security Manager Functions                      *
05282  ******************************************************************************/
05283 
05284 #if (NTDDI_VERSION >= NTDDI_WIN2K)
05285 
05286 
05287 NTKERNELAPI
05288 VOID
05289 NTAPI
05290 SeReleaseSubjectContext(
05291   _Inout_ PSECURITY_SUBJECT_CONTEXT SubjectContext);
05292 
05293 NTKERNELAPI
05294 BOOLEAN
05295 NTAPI
05296 SePrivilegeCheck(
05297   _Inout_ PPRIVILEGE_SET RequiredPrivileges,
05298   _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext,
05299   _In_ KPROCESSOR_MODE AccessMode);
05300 
05301 NTKERNELAPI
05302 VOID
05303 NTAPI
05304 SeOpenObjectAuditAlarm(
05305   _In_ PUNICODE_STRING ObjectTypeName,
05306   _In_opt_ PVOID Object,
05307   _In_opt_ PUNICODE_STRING AbsoluteObjectName,
05308   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
05309   _In_ PACCESS_STATE AccessState,
05310   _In_ BOOLEAN ObjectCreated,
05311   _In_ BOOLEAN AccessGranted,
05312   _In_ KPROCESSOR_MODE AccessMode,
05313   _Out_ PBOOLEAN GenerateOnClose);
05314 
05315 NTKERNELAPI
05316 VOID
05317 NTAPI
05318 SeOpenObjectForDeleteAuditAlarm(
05319   _In_ PUNICODE_STRING ObjectTypeName,
05320   _In_opt_ PVOID Object,
05321   _In_opt_ PUNICODE_STRING AbsoluteObjectName,
05322   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
05323   _In_ PACCESS_STATE AccessState,
05324   _In_ BOOLEAN ObjectCreated,
05325   _In_ BOOLEAN AccessGranted,
05326   _In_ KPROCESSOR_MODE AccessMode,
05327   _Out_ PBOOLEAN GenerateOnClose);
05328 
05329 NTKERNELAPI
05330 VOID
05331 NTAPI
05332 SeDeleteObjectAuditAlarm(
05333   _In_ PVOID Object,
05334   _In_ HANDLE Handle);
05335 
05336 NTKERNELAPI
05337 TOKEN_TYPE
05338 NTAPI
05339 SeTokenType(
05340   _In_ PACCESS_TOKEN Token);
05341 
05342 NTKERNELAPI
05343 BOOLEAN
05344 NTAPI
05345 SeTokenIsAdmin(
05346   _In_ PACCESS_TOKEN Token);
05347 
05348 NTKERNELAPI
05349 BOOLEAN
05350 NTAPI
05351 SeTokenIsRestricted(
05352   _In_ PACCESS_TOKEN Token);
05353 
05354 NTKERNELAPI
05355 NTSTATUS
05356 NTAPI
05357 SeQueryAuthenticationIdToken(
05358   _In_ PACCESS_TOKEN Token,
05359   _Out_ PLUID AuthenticationId);
05360 
05361 NTKERNELAPI
05362 NTSTATUS
05363 NTAPI
05364 SeQuerySessionIdToken(
05365   _In_ PACCESS_TOKEN Token,
05366   _Out_ PULONG SessionId);
05367 
05368 NTKERNELAPI
05369 NTSTATUS
05370 NTAPI
05371 SeCreateClientSecurity(
05372   _In_ PETHREAD ClientThread,
05373   _In_ PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos,
05374   _In_ BOOLEAN RemoteSession,
05375   _Out_ PSECURITY_CLIENT_CONTEXT ClientContext);
05376 
05377 NTKERNELAPI
05378 VOID
05379 NTAPI
05380 SeImpersonateClient(
05381   _In_ PSECURITY_CLIENT_CONTEXT ClientContext,
05382   _In_opt_ PETHREAD ServerThread);
05383 
05384 NTKERNELAPI
05385 NTSTATUS
05386 NTAPI
05387 SeImpersonateClientEx(
05388   _In_ PSECURITY_CLIENT_CONTEXT ClientContext,
05389   _In_opt_ PETHREAD ServerThread);
05390 
05391 NTKERNELAPI
05392 NTSTATUS
05393 NTAPI
05394 SeCreateClientSecurityFromSubjectContext(
05395   _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext,
05396   _In_ PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos,
05397   _In_ BOOLEAN ServerIsRemote,
05398   _Out_ PSECURITY_CLIENT_CONTEXT ClientContext);
05399 
05400 NTKERNELAPI
05401 NTSTATUS
05402 NTAPI
05403 SeQuerySecurityDescriptorInfo(
05404   _In_ PSECURITY_INFORMATION SecurityInformation,
05405   _Out_writes_bytes_(*Length) PSECURITY_DESCRIPTOR SecurityDescriptor,
05406   _Inout_ PULONG Length,
05407   _Inout_ PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor);
05408 
05409 NTKERNELAPI
05410 NTSTATUS
05411 NTAPI
05412 SeSetSecurityDescriptorInfo(
05413   _In_opt_ PVOID Object,
05414   _In_ PSECURITY_INFORMATION SecurityInformation,
05415   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
05416   _Inout_ PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
05417   _In_ POOL_TYPE PoolType,
05418   _In_ PGENERIC_MAPPING GenericMapping);
05419 
05420 NTKERNELAPI
05421 NTSTATUS
05422 NTAPI
05423 SeSetSecurityDescriptorInfoEx(
05424   _In_opt_ PVOID Object,
05425   _In_ PSECURITY_INFORMATION SecurityInformation,
05426   _In_ PSECURITY_DESCRIPTOR ModificationDescriptor,
05427   _Inout_ PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
05428   _In_ ULONG AutoInheritFlags,
05429   _In_ POOL_TYPE PoolType,
05430   _In_ PGENERIC_MAPPING GenericMapping);
05431 
05432 NTKERNELAPI
05433 NTSTATUS
05434 NTAPI
05435 SeAppendPrivileges(
05436   _Inout_ PACCESS_STATE AccessState,
05437   _In_ PPRIVILEGE_SET Privileges);
05438 
05439 NTKERNELAPI
05440 BOOLEAN
05441 NTAPI
05442 SeAuditingFileEvents(
05443   _In_ BOOLEAN AccessGranted,
05444   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
05445 
05446 NTKERNELAPI
05447 BOOLEAN
05448 NTAPI
05449 SeAuditingFileOrGlobalEvents(
05450   _In_ BOOLEAN AccessGranted,
05451   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
05452   _In_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext);
05453 
05454 VOID
05455 NTAPI
05456 SeSetAccessStateGenericMapping(
05457   _Inout_ PACCESS_STATE AccessState,
05458   _In_ PGENERIC_MAPPING GenericMapping);
05459 
05460 NTKERNELAPI
05461 NTSTATUS
05462 NTAPI
05463 SeRegisterLogonSessionTerminatedRoutine(
05464   _In_ PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine);
05465 
05466 NTKERNELAPI
05467 NTSTATUS
05468 NTAPI
05469 SeUnregisterLogonSessionTerminatedRoutine(
05470   _In_ PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine);
05471 
05472 NTKERNELAPI
05473 NTSTATUS
05474 NTAPI
05475 SeMarkLogonSessionForTerminationNotification(
05476   _In_ PLUID LogonId);
05477 
05478 NTKERNELAPI
05479 NTSTATUS
05480 NTAPI
05481 SeQueryInformationToken(
05482   _In_ PACCESS_TOKEN Token,
05483   _In_ TOKEN_INFORMATION_CLASS TokenInformationClass,
05484   _Outptr_result_buffer_(_Inexpressible_(token-dependent)) PVOID *TokenInformation);
05485 
05486 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
05487 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
05488 NTKERNELAPI
05489 BOOLEAN
05490 NTAPI
05491 SeAuditingHardLinkEvents(
05492   _In_ BOOLEAN AccessGranted,
05493   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
05494 #endif
05495 
05496 #if (NTDDI_VERSION >= NTDDI_WINXP)
05497 
05498 NTKERNELAPI
05499 NTSTATUS
05500 NTAPI
05501 SeFilterToken(
05502   _In_ PACCESS_TOKEN ExistingToken,
05503   _In_ ULONG Flags,
05504   _In_opt_ PTOKEN_GROUPS SidsToDisable,
05505   _In_opt_ PTOKEN_PRIVILEGES PrivilegesToDelete,
05506   _In_opt_ PTOKEN_GROUPS RestrictedSids,
05507   _Outptr_ PACCESS_TOKEN *FilteredToken);
05508 
05509 NTKERNELAPI
05510 VOID
05511 NTAPI
05512 SeAuditHardLinkCreation(
05513   _In_ PUNICODE_STRING FileName,
05514   _In_ PUNICODE_STRING LinkName,
05515   _In_ BOOLEAN bSuccess);
05516 
05517 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
05518 
05519 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
05520 
05521 NTKERNELAPI
05522 BOOLEAN
05523 NTAPI
05524 SeAuditingFileEventsWithContext(
05525   _In_ BOOLEAN AccessGranted,
05526   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
05527   _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext);
05528 
05529 NTKERNELAPI
05530 BOOLEAN
05531 NTAPI
05532 SeAuditingHardLinkEventsWithContext(
05533   _In_ BOOLEAN AccessGranted,
05534   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
05535   _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext);
05536 
05537 #endif
05538 
05539 
05540 #if (NTDDI_VERSION >= NTDDI_VISTA)
05541 
05542 NTKERNELAPI
05543 VOID
05544 NTAPI
05545 SeOpenObjectAuditAlarmWithTransaction(
05546   _In_ PUNICODE_STRING ObjectTypeName,
05547   _In_opt_ PVOID Object,
05548   _In_opt_ PUNICODE_STRING AbsoluteObjectName,
05549   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
05550   _In_ PACCESS_STATE AccessState,
05551   _In_ BOOLEAN ObjectCreated,
05552   _In_ BOOLEAN AccessGranted,
05553   _In_ KPROCESSOR_MODE AccessMode,
05554   _In_opt_ GUID *TransactionId,
05555   _Out_ PBOOLEAN GenerateOnClose);
05556 
05557 NTKERNELAPI
05558 VOID
05559 NTAPI
05560 SeOpenObjectForDeleteAuditAlarmWithTransaction(
05561   _In_ PUNICODE_STRING ObjectTypeName,
05562   _In_opt_ PVOID Object,
05563   _In_opt_ PUNICODE_STRING AbsoluteObjectName,
05564   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
05565   _In_ PACCESS_STATE AccessState,
05566   _In_ BOOLEAN ObjectCreated,
05567   _In_ BOOLEAN AccessGranted,
05568   _In_ KPROCESSOR_MODE AccessMode,
05569   _In_opt_ GUID *TransactionId,
05570   _Out_ PBOOLEAN GenerateOnClose);
05571 
05572 NTKERNELAPI
05573 VOID
05574 NTAPI
05575 SeExamineSacl(
05576   _In_ PACL Sacl,
05577   _In_ PACCESS_TOKEN Token,
05578   _In_ ACCESS_MASK DesiredAccess,
05579   _In_ BOOLEAN AccessGranted,
05580   _Out_ PBOOLEAN GenerateAudit,
05581   _Out_ PBOOLEAN GenerateAlarm);
05582 
05583 NTKERNELAPI
05584 VOID
05585 NTAPI
05586 SeDeleteObjectAuditAlarmWithTransaction(
05587   _In_ PVOID Object,
05588   _In_ HANDLE Handle,
05589   _In_opt_ GUID *TransactionId);
05590 
05591 NTKERNELAPI
05592 VOID
05593 NTAPI
05594 SeQueryTokenIntegrity(
05595   _In_ PACCESS_TOKEN Token,
05596   _Inout_ PSID_AND_ATTRIBUTES IntegritySA);
05597 
05598 NTKERNELAPI
05599 NTSTATUS
05600 NTAPI
05601 SeSetSessionIdToken(
05602   _In_ PACCESS_TOKEN Token,
05603   _In_ ULONG SessionId);
05604 
05605 NTKERNELAPI
05606 VOID
05607 NTAPI
05608 SeAuditHardLinkCreationWithTransaction(
05609   _In_ PUNICODE_STRING FileName,
05610   _In_ PUNICODE_STRING LinkName,
05611   _In_ BOOLEAN bSuccess,
05612   _In_opt_ GUID *TransactionId);
05613 
05614 NTKERNELAPI
05615 VOID
05616 NTAPI
05617 SeAuditTransactionStateChange(
05618   _In_ GUID *TransactionId,
05619   _In_ GUID *ResourceManagerId,
05620   _In_ ULONG NewTransactionState);
05621 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
05622 
05623 #if (NTDDI_VERSION >= NTDDI_VISTA || (NTDDI_VERSION >= NTDDI_WINXPSP2 && NTDDI_VERSION < NTDDI_WS03))
05624 NTKERNELAPI
05625 BOOLEAN
05626 NTAPI
05627 SeTokenIsWriteRestricted(
05628   _In_ PACCESS_TOKEN Token);
05629 #endif
05630 
05631 #if (NTDDI_VERSION >= NTDDI_WIN7)
05632 
05633 NTKERNELAPI
05634 BOOLEAN
05635 NTAPI
05636 SeAuditingAnyFileEventsWithContext(
05637   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
05638   _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext,
05639   _Out_opt_ PBOOLEAN StagingEnabled);
05640 
05641 NTKERNELAPI
05642 VOID
05643 NTAPI
05644 SeExamineGlobalSacl(
05645   _In_ PUNICODE_STRING ObjectType,
05646   _In_ PACL ResourceSacl,
05647   _In_ PACCESS_TOKEN Token,
05648   _In_ ACCESS_MASK DesiredAccess,
05649   _In_ BOOLEAN AccessGranted,
05650   _Inout_ PBOOLEAN GenerateAudit,
05651   _Inout_opt_ PBOOLEAN GenerateAlarm);
05652 
05653 NTKERNELAPI
05654 VOID
05655 NTAPI
05656 SeMaximumAuditMaskFromGlobalSacl(
05657   _In_opt_ PUNICODE_STRING ObjectTypeName,
05658   _In_ ACCESS_MASK GrantedAccess,
05659   _In_ PACCESS_TOKEN Token,
05660   _Inout_ PACCESS_MASK AuditMask);
05661 
05662 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
05663 
05664 NTSTATUS
05665 NTAPI
05666 SeReportSecurityEventWithSubCategory(
05667   _In_ ULONG Flags,
05668   _In_ PUNICODE_STRING SourceName,
05669   _In_opt_ PSID UserSid,
05670   _In_ PSE_ADT_PARAMETER_ARRAY AuditParameters,
05671   _In_ ULONG AuditSubcategoryId);
05672 
05673 BOOLEAN
05674 NTAPI
05675 SeAccessCheckFromState(
05676   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
05677   _In_ PTOKEN_ACCESS_INFORMATION PrimaryTokenInformation,
05678   _In_opt_ PTOKEN_ACCESS_INFORMATION ClientTokenInformation,
05679   _In_ ACCESS_MASK DesiredAccess,
05680   _In_ ACCESS_MASK PreviouslyGrantedAccess,
05681   _Outptr_opt_result_maybenull_ PPRIVILEGE_SET *Privileges,
05682   _In_ PGENERIC_MAPPING GenericMapping,
05683   _In_ KPROCESSOR_MODE AccessMode,
05684   _Out_ PACCESS_MASK GrantedAccess,
05685   _Out_ PNTSTATUS AccessStatus);
05686 
05687 NTKERNELAPI
05688 VOID
05689 NTAPI
05690 SeFreePrivileges(
05691   _In_ PPRIVILEGE_SET Privileges);
05692 
05693 NTSTATUS
05694 NTAPI
05695 SeLocateProcessImageName(
05696   _Inout_ PEPROCESS Process,
05697   _Outptr_ PUNICODE_STRING *pImageFileName);
05698 
05699 #define SeLengthSid( Sid ) \
05700     (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
05701 
05702 #define SeDeleteClientSecurity(C)  {                                           \
05703             if (SeTokenType((C)->ClientToken) == TokenPrimary) {               \
05704                 PsDereferencePrimaryToken( (C)->ClientToken );                 \
05705             } else {                                                           \
05706                 PsDereferenceImpersonationToken( (C)->ClientToken );           \
05707             }                                                                  \
05708 }
05709 
05710 #define SeStopImpersonatingClient() PsRevertToSelf()
05711 
05712 #define SeQuerySubjectContextToken( SubjectContext )                \
05713     ( ARGUMENT_PRESENT(                                             \
05714         ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken   \
05715         ) ?                                                         \
05716     ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken :     \
05717     ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
05718 
05719 extern NTKERNELAPI PSE_EXPORTS SeExports;
05720 /******************************************************************************
05721  *                          Process Manager Functions                         *
05722  ******************************************************************************/
05723 
05724 _Must_inspect_result_
05725 _IRQL_requires_max_(APC_LEVEL)
05726 NTKERNELAPI
05727 NTSTATUS
05728 NTAPI
05729 PsLookupProcessByProcessId(
05730   _In_ HANDLE ProcessId,
05731   _Outptr_ PEPROCESS *Process);
05732 
05733 _Must_inspect_result_
05734 _IRQL_requires_max_(APC_LEVEL)
05735 NTKERNELAPI
05736 NTSTATUS
05737 NTAPI
05738 PsLookupThreadByThreadId(
05739   _In_ HANDLE UniqueThreadId,
05740   _Outptr_ PETHREAD *Thread);
05741 
05742 #if (NTDDI_VERSION >= NTDDI_WIN2K)
05743 
05744 
05745 _IRQL_requires_max_(APC_LEVEL)
05746 NTKERNELAPI
05747 PACCESS_TOKEN
05748 NTAPI
05749 PsReferenceImpersonationToken(
05750   _Inout_ PETHREAD Thread,
05751   _Out_ PBOOLEAN CopyOnOpen,
05752   _Out_ PBOOLEAN EffectiveOnly,
05753   _Out_ PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
05754 
05755 _IRQL_requires_max_(APC_LEVEL)
05756 NTKERNELAPI
05757 LARGE_INTEGER
05758 NTAPI
05759 PsGetProcessExitTime(VOID);
05760 
05761 _IRQL_requires_max_(DISPATCH_LEVEL)
05762 NTKERNELAPI
05763 BOOLEAN
05764 NTAPI
05765 PsIsThreadTerminating(
05766   _In_ PETHREAD Thread);
05767 
05768 _Must_inspect_result_
05769 _IRQL_requires_max_(PASSIVE_LEVEL)
05770 NTKERNELAPI
05771 NTSTATUS
05772 NTAPI
05773 PsImpersonateClient(
05774   _Inout_ PETHREAD Thread,
05775   _In_opt_ PACCESS_TOKEN Token,
05776   _In_ BOOLEAN CopyOnOpen,
05777   _In_ BOOLEAN EffectiveOnly,
05778   _In_ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
05779 
05780 _IRQL_requires_max_(PASSIVE_LEVEL)
05781 NTKERNELAPI
05782 BOOLEAN
05783 NTAPI
05784 PsDisableImpersonation(
05785   _Inout_ PETHREAD Thread,
05786   _Inout_ PSE_IMPERSONATION_STATE ImpersonationState);
05787 
05788 _IRQL_requires_max_(PASSIVE_LEVEL)
05789 NTKERNELAPI
05790 VOID
05791 NTAPI
05792 PsRestoreImpersonation(
05793   _Inout_ PETHREAD Thread,
05794   _In_ PSE_IMPERSONATION_STATE ImpersonationState);
05795 
05796 _IRQL_requires_max_(PASSIVE_LEVEL)
05797 NTKERNELAPI
05798 VOID
05799 NTAPI
05800 PsRevertToSelf(VOID);
05801 
05802 _IRQL_requires_max_(APC_LEVEL)
05803 NTKERNELAPI
05804 VOID
05805 NTAPI
05806 PsChargePoolQuota(
05807   _In_ PEPROCESS Process,
05808   _In_ POOL_TYPE PoolType,
05809   _In_ ULONG_PTR Amount);
05810 
05811 _IRQL_requires_max_(APC_LEVEL)
05812 NTKERNELAPI
05813 VOID
05814 NTAPI
05815 PsReturnPoolQuota(
05816   _In_ PEPROCESS Process,
05817   _In_ POOL_TYPE PoolType,
05818   _In_ ULONG_PTR Amount);
05819 
05820 _IRQL_requires_max_(PASSIVE_LEVEL)
05821 NTKERNELAPI
05822 NTSTATUS
05823 NTAPI
05824 PsAssignImpersonationToken(
05825   _In_ PETHREAD Thread,
05826   _In_opt_ HANDLE Token);
05827 
05828 _IRQL_requires_max_(PASSIVE_LEVEL)
05829 NTKERNELAPI
05830 HANDLE
05831 NTAPI
05832 PsReferencePrimaryToken(
05833   _Inout_ PEPROCESS Process);
05834 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
05835 #if (NTDDI_VERSION >= NTDDI_WINXP)
05836 
05837 
05838 _IRQL_requires_max_(PASSIVE_LEVEL)
05839 NTKERNELAPI
05840 VOID
05841 NTAPI
05842 PsDereferencePrimaryToken(
05843   _In_ PACCESS_TOKEN PrimaryToken);
05844 
05845 _IRQL_requires_max_(PASSIVE_LEVEL)
05846 NTKERNELAPI
05847 VOID
05848 NTAPI
05849 PsDereferenceImpersonationToken(
05850   _In_ PACCESS_TOKEN ImpersonationToken);
05851 
05852 _Must_inspect_result_
05853 _IRQL_requires_max_(APC_LEVEL)
05854 NTKERNELAPI
05855 NTSTATUS
05856 NTAPI
05857 PsChargeProcessPoolQuota(
05858   _In_ PEPROCESS Process,
05859   _In_ POOL_TYPE PoolType,
05860   _In_ ULONG_PTR Amount);
05861 
05862 NTKERNELAPI
05863 BOOLEAN
05864 NTAPI
05865 PsIsSystemThread(
05866   _In_ PETHREAD Thread);
05867 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
05868 
05869 /******************************************************************************
05870  *                         I/O Manager Functions                              *
05871  ******************************************************************************/
05872 
05873 #define IoIsFileOpenedExclusively(FileObject) ( \
05874     (BOOLEAN) !(                                \
05875     (FileObject)->SharedRead ||                 \
05876     (FileObject)->SharedWrite ||                \
05877     (FileObject)->SharedDelete                  \
05878     )                                           \
05879 )
05880 
05881 #if (NTDDI_VERSION == NTDDI_WIN2K)
05882 NTKERNELAPI
05883 NTSTATUS
05884 NTAPI
05885 IoRegisterFsRegistrationChangeEx(
05886   _In_ PDRIVER_OBJECT DriverObject,
05887   _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
05888 #endif
05889 #if (NTDDI_VERSION >= NTDDI_WIN2K)
05890 
05891 
05892 NTKERNELAPI
05893 VOID
05894 NTAPI
05895 IoAcquireVpbSpinLock(
05896   _Out_ PKIRQL Irql);
05897 
05898 NTKERNELAPI
05899 NTSTATUS
05900 NTAPI
05901 IoCheckDesiredAccess(
05902   _Inout_ PACCESS_MASK DesiredAccess,
05903   _In_ ACCESS_MASK GrantedAccess);
05904 
05905 NTKERNELAPI
05906 NTSTATUS
05907 NTAPI
05908 IoCheckEaBufferValidity(
05909   _In_ PFILE_FULL_EA_INFORMATION EaBuffer,
05910   _In_ ULONG EaLength,
05911   _Out_ PULONG ErrorOffset);
05912 
05913 NTKERNELAPI
05914 NTSTATUS
05915 NTAPI
05916 IoCheckFunctionAccess(
05917   _In_ ACCESS_MASK GrantedAccess,
05918   _In_ UCHAR MajorFunction,
05919   _In_ UCHAR MinorFunction,
05920   _In_ ULONG IoControlCode,
05921   _In_opt_ PVOID Argument1,
05922   _In_opt_ PVOID Argument2);
05923 
05924 NTKERNELAPI
05925 NTSTATUS
05926 NTAPI
05927 IoCheckQuerySetFileInformation(
05928   _In_ FILE_INFORMATION_CLASS FileInformationClass,
05929   _In_ ULONG Length,
05930   _In_ BOOLEAN SetOperation);
05931 
05932 NTKERNELAPI
05933 NTSTATUS
05934 NTAPI
05935 IoCheckQuerySetVolumeInformation(
05936   _In_ FS_INFORMATION_CLASS FsInformationClass,
05937   _In_ ULONG Length,
05938   _In_ BOOLEAN SetOperation);
05939 
05940 NTKERNELAPI
05941 NTSTATUS
05942 NTAPI
05943 IoCheckQuotaBufferValidity(
05944   _In_ PFILE_QUOTA_INFORMATION QuotaBuffer,
05945   _In_ ULONG QuotaLength,
05946   _Out_ PULONG ErrorOffset);
05947 
05948 NTKERNELAPI
05949 PFILE_OBJECT
05950 NTAPI
05951 IoCreateStreamFileObject(
05952   _In_opt_ PFILE_OBJECT FileObject,
05953   _In_opt_ PDEVICE_OBJECT DeviceObject);
05954 
05955 NTKERNELAPI
05956 PFILE_OBJECT
05957 NTAPI
05958 IoCreateStreamFileObjectLite(
05959   _In_opt_ PFILE_OBJECT FileObject,
05960   _In_opt_ PDEVICE_OBJECT DeviceObject);
05961 
05962 NTKERNELAPI
05963 BOOLEAN
05964 NTAPI
05965 IoFastQueryNetworkAttributes(
05966   _In_ POBJECT_ATTRIBUTES ObjectAttributes,
05967   _In_ ACCESS_MASK DesiredAccess,
05968   _In_ ULONG OpenOptions,
05969   _Out_ PIO_STATUS_BLOCK IoStatus,
05970   _Out_ PFILE_NETWORK_OPEN_INFORMATION Buffer);
05971 
05972 NTKERNELAPI
05973 NTSTATUS
05974 NTAPI
05975 IoPageRead(
05976   _In_ PFILE_OBJECT FileObject,
05977   _In_ PMDL Mdl,
05978   _In_ PLARGE_INTEGER Offset,
05979   _In_ PKEVENT Event,
05980   _Out_ PIO_STATUS_BLOCK IoStatusBlock);
05981 
05982 NTKERNELAPI
05983 PDEVICE_OBJECT
05984 NTAPI
05985 IoGetBaseFileSystemDeviceObject(
05986   _In_ PFILE_OBJECT FileObject);
05987 
05988 _IRQL_requires_max_(PASSIVE_LEVEL)
05989 NTKERNELAPI
05990 PCONFIGURATION_INFORMATION
05991 NTAPI
05992 IoGetConfigurationInformation(VOID);
05993 
05994 NTKERNELAPI
05995 ULONG
05996 NTAPI
05997 IoGetRequestorProcessId(
05998   _In_ PIRP Irp);
05999 
06000 NTKERNELAPI
06001 PEPROCESS
06002 NTAPI
06003 IoGetRequestorProcess(
06004   _In_ PIRP Irp);
06005 
06006 NTKERNELAPI
06007 PIRP
06008 NTAPI
06009 IoGetTopLevelIrp(VOID);
06010 
06011 NTKERNELAPI
06012 BOOLEAN
06013 NTAPI
06014 IoIsOperationSynchronous(
06015   _In_ PIRP Irp);
06016 
06017 NTKERNELAPI
06018 BOOLEAN
06019 NTAPI
06020 IoIsSystemThread(
06021   _In_ PETHREAD Thread);
06022 
06023 NTKERNELAPI
06024 BOOLEAN
06025 NTAPI
06026 IoIsValidNameGraftingBuffer(
06027   _In_ PIRP Irp,
06028   _In_ PREPARSE_DATA_BUFFER ReparseBuffer);
06029 
06030 NTKERNELAPI
06031 NTSTATUS
06032 NTAPI
06033 IoQueryFileInformation(
06034   _In_ PFILE_OBJECT FileObject,
06035   _In_ FILE_INFORMATION_CLASS FileInformationClass,
06036   _In_ ULONG Length,
06037   _Out_ PVOID FileInformation,
06038   _Out_ PULONG ReturnedLength);
06039 
06040 NTKERNELAPI
06041 NTSTATUS
06042 NTAPI
06043 IoQueryVolumeInformation(
06044   _In_ PFILE_OBJECT FileObject,
06045   _In_ FS_INFORMATION_CLASS FsInformationClass,
06046   _In_ ULONG Length,
06047   _Out_ PVOID FsInformation,
06048   _Out_ PULONG ReturnedLength);
06049 
06050 NTKERNELAPI
06051 VOID
06052 NTAPI
06053 IoQueueThreadIrp(
06054   _In_ PIRP Irp);
06055 
06056 NTKERNELAPI
06057 VOID
06058 NTAPI
06059 IoRegisterFileSystem(
06060   _In_ __drv_aliasesMem PDEVICE_OBJECT DeviceObject);
06061 
06062 NTKERNELAPI
06063 NTSTATUS
06064 NTAPI
06065 IoRegisterFsRegistrationChange(
06066   _In_ PDRIVER_OBJECT DriverObject,
06067   _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
06068 
06069 NTKERNELAPI
06070 VOID
06071 NTAPI
06072 IoReleaseVpbSpinLock(
06073   _In_ KIRQL Irql);
06074 
06075 NTKERNELAPI
06076 VOID
06077 NTAPI
06078 IoSetDeviceToVerify(
06079   _In_ PETHREAD Thread,
06080   _In_opt_ PDEVICE_OBJECT DeviceObject);
06081 
06082 NTKERNELAPI
06083 NTSTATUS
06084 NTAPI
06085 IoSetInformation(
06086   _In_ PFILE_OBJECT FileObject,
06087   _In_ FILE_INFORMATION_CLASS FileInformationClass,
06088   _In_ ULONG Length,
06089   _In_ PVOID FileInformation);
06090 
06091 NTKERNELAPI
06092 VOID
06093 NTAPI
06094 IoSetTopLevelIrp(
06095   _In_opt_ PIRP Irp);
06096 
06097 NTKERNELAPI
06098 NTSTATUS
06099 NTAPI
06100 IoSynchronousPageWrite(
06101   _In_ PFILE_OBJECT FileObject,
06102   _In_ PMDL Mdl,
06103   _In_ PLARGE_INTEGER FileOffset,
06104   _In_ PKEVENT Event,
06105   _Out_ PIO_STATUS_BLOCK IoStatusBlock);
06106 
06107 NTKERNELAPI
06108 PEPROCESS
06109 NTAPI
06110 IoThreadToProcess(
06111   _In_ PETHREAD Thread);
06112 
06113 NTKERNELAPI
06114 VOID
06115 NTAPI
06116 IoUnregisterFileSystem(
06117   _In_ PDEVICE_OBJECT DeviceObject);
06118 
06119 NTKERNELAPI
06120 VOID
06121 NTAPI
06122 IoUnregisterFsRegistrationChange(
06123   _In_ PDRIVER_OBJECT DriverObject,
06124   _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
06125 
06126 NTKERNELAPI
06127 NTSTATUS
06128 NTAPI
06129 IoVerifyVolume(
06130   _In_ PDEVICE_OBJECT DeviceObject,
06131   _In_ BOOLEAN AllowRawMount);
06132 
06133 NTKERNELAPI
06134 NTSTATUS
06135 NTAPI
06136 IoGetRequestorSessionId(
06137   _In_ PIRP Irp,
06138   _Out_ PULONG pSessionId);
06139 
06140 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
06141 
06142 
06143 #if (NTDDI_VERSION >= NTDDI_WINXP)
06144 
06145 
06146 NTKERNELAPI
06147 PFILE_OBJECT
06148 NTAPI
06149 IoCreateStreamFileObjectEx(
06150   _In_opt_ PFILE_OBJECT FileObject,
06151   _In_opt_ PDEVICE_OBJECT DeviceObject,
06152   _Out_opt_ PHANDLE FileObjectHandle);
06153 
06154 NTKERNELAPI
06155 NTSTATUS
06156 NTAPI
06157 IoQueryFileDosDeviceName(
06158   _In_ PFILE_OBJECT FileObject,
06159   _Out_ POBJECT_NAME_INFORMATION *ObjectNameInformation);
06160 
06161 NTKERNELAPI
06162 NTSTATUS
06163 NTAPI
06164 IoEnumerateDeviceObjectList(
06165   _In_ PDRIVER_OBJECT DriverObject,
06166   _Out_writes_bytes_to_opt_(DeviceObjectListSize,(*ActualNumberDeviceObjects)*sizeof(PDEVICE_OBJECT))
06167     PDEVICE_OBJECT *DeviceObjectList,
06168   _In_ ULONG DeviceObjectListSize,
06169   _Out_ PULONG ActualNumberDeviceObjects);
06170 
06171 NTKERNELAPI
06172 PDEVICE_OBJECT
06173 NTAPI
06174 IoGetLowerDeviceObject(
06175   _In_ PDEVICE_OBJECT DeviceObject);
06176 
06177 NTKERNELAPI
06178 PDEVICE_OBJECT
06179 NTAPI
06180 IoGetDeviceAttachmentBaseRef(
06181   _In_ PDEVICE_OBJECT DeviceObject);
06182 
06183 NTKERNELAPI
06184 NTSTATUS
06185 NTAPI
06186 IoGetDiskDeviceObject(
06187   _In_ PDEVICE_OBJECT FileSystemDeviceObject,
06188   _Out_ PDEVICE_OBJECT *DiskDeviceObject);
06189 
06190 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
06191 
06192 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
06193 
06194 
06195 NTKERNELAPI
06196 NTSTATUS
06197 NTAPI
06198 IoEnumerateRegisteredFiltersList(
06199   _Out_writes_bytes_to_opt_(DriverObjectListSize,(*ActualNumberDriverObjects)*sizeof(PDRIVER_OBJECT))
06200     PDRIVER_OBJECT *DriverObjectList,
06201   _In_ ULONG DriverObjectListSize,
06202   _Out_ PULONG ActualNumberDriverObjects);
06203 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
06204 
06205 #if (NTDDI_VERSION >= NTDDI_VISTA)
06206 
06207 FORCEINLINE
06208 VOID
06209 NTAPI
06210 IoInitializePriorityInfo(
06211     _In_ PIO_PRIORITY_INFO PriorityInfo)
06212 {
06213     PriorityInfo->Size = sizeof(IO_PRIORITY_INFO);
06214     PriorityInfo->ThreadPriority = 0xffff;
06215     PriorityInfo->IoPriority = IoPriorityNormal;
06216     PriorityInfo->PagePriority = 0;
06217 }
06218 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
06219 
06220 #if (NTDDI_VERSION >= NTDDI_WIN7)
06221 
06222 
06223 NTKERNELAPI
06224 NTSTATUS
06225 NTAPI
06226 IoRegisterFsRegistrationChangeMountAware(
06227   _In_ PDRIVER_OBJECT DriverObject,
06228   _In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine,
06229   _In_ BOOLEAN SynchronizeWithMounts);
06230 
06231 NTKERNELAPI
06232 NTSTATUS
06233 NTAPI
06234 IoReplaceFileObjectName(
06235   _In_ PFILE_OBJECT FileObject,
06236   _In_reads_bytes_(FileNameLength) PWSTR NewFileName,
06237   _In_ USHORT FileNameLength);
06238 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
06239 
06240 
06241 #define PO_CB_SYSTEM_POWER_POLICY       0
06242 #define PO_CB_AC_STATUS                 1
06243 #define PO_CB_BUTTON_COLLISION          2
06244 #define PO_CB_SYSTEM_STATE_LOCK         3
06245 #define PO_CB_LID_SWITCH_STATE          4
06246 #define PO_CB_PROCESSOR_POWER_POLICY    5
06247 
06248 
06249 #if (NTDDI_VERSION >= NTDDI_WINXP)
06250 _IRQL_requires_max_(APC_LEVEL)
06251 NTKERNELAPI
06252 NTSTATUS
06253 NTAPI
06254 PoQueueShutdownWorkItem(
06255   _Inout_ __drv_aliasesMem PWORK_QUEUE_ITEM WorkItem);
06256 #endif
06257 /******************************************************************************
06258  *                         Memory manager Types                               *
06259  ******************************************************************************/
06260 typedef enum _MMFLUSH_TYPE {
06261   MmFlushForDelete,
06262   MmFlushForWrite
06263 } MMFLUSH_TYPE;
06264 
06265 typedef struct _READ_LIST {
06266   PFILE_OBJECT FileObject;
06267   ULONG NumberOfEntries;
06268   LOGICAL IsImage;
06269   FILE_SEGMENT_ELEMENT List[ANYSIZE_ARRAY];
06270 } READ_LIST, *PREAD_LIST;
06271 
06272 #if (NTDDI_VERSION >= NTDDI_WINXP)
06273 
06274 typedef union _MM_PREFETCH_FLAGS {
06275   struct {
06276     ULONG Priority : SYSTEM_PAGE_PRIORITY_BITS;
06277     ULONG RepurposePriority : SYSTEM_PAGE_PRIORITY_BITS;
06278   } Flags;
06279   ULONG AllFlags;
06280 } MM_PREFETCH_FLAGS, *PMM_PREFETCH_FLAGS;
06281 
06282 #define MM_PREFETCH_FLAGS_MASK ((1 << (2*SYSTEM_PAGE_PRIORITY_BITS)) - 1)
06283 
06284 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
06285 
06286 #define HEAP_NO_SERIALIZE               0x00000001
06287 #define HEAP_GROWABLE                   0x00000002
06288 #define HEAP_GENERATE_EXCEPTIONS        0x00000004
06289 #define HEAP_ZERO_MEMORY                0x00000008
06290 #define HEAP_REALLOC_IN_PLACE_ONLY      0x00000010
06291 #define HEAP_TAIL_CHECKING_ENABLED      0x00000020
06292 #define HEAP_FREE_CHECKING_ENABLED      0x00000040
06293 #define HEAP_DISABLE_COALESCE_ON_FREE   0x00000080
06294 
06295 #define HEAP_CREATE_ALIGN_16            0x00010000
06296 #define HEAP_CREATE_ENABLE_TRACING      0x00020000
06297 #define HEAP_CREATE_ENABLE_EXECUTE      0x00040000
06298 
06299 #define HEAP_SETTABLE_USER_VALUE        0x00000100
06300 #define HEAP_SETTABLE_USER_FLAG1        0x00000200
06301 #define HEAP_SETTABLE_USER_FLAG2        0x00000400
06302 #define HEAP_SETTABLE_USER_FLAG3        0x00000800
06303 #define HEAP_SETTABLE_USER_FLAGS        0x00000E00
06304 
06305 #define HEAP_CLASS_0                    0x00000000
06306 #define HEAP_CLASS_1                    0x00001000
06307 #define HEAP_CLASS_2                    0x00002000
06308 #define HEAP_CLASS_3                    0x00003000
06309 #define HEAP_CLASS_4                    0x00004000
06310 #define HEAP_CLASS_5                    0x00005000
06311 #define HEAP_CLASS_6                    0x00006000
06312 #define HEAP_CLASS_7                    0x00007000
06313 #define HEAP_CLASS_8                    0x00008000
06314 #define HEAP_CLASS_MASK                 0x0000F000
06315 
06316 #define HEAP_MAXIMUM_TAG                0x0FFF
06317 #define HEAP_GLOBAL_TAG                 0x0800
06318 #define HEAP_PSEUDO_TAG_FLAG            0x8000
06319 #define HEAP_TAG_SHIFT                  18
06320 #define HEAP_TAG_MASK                  (HEAP_MAXIMUM_TAG << HEAP_TAG_SHIFT)
06321 
06322 #define HEAP_CREATE_VALID_MASK         (HEAP_NO_SERIALIZE             |   \
06323                                         HEAP_GROWABLE                 |   \
06324                                         HEAP_GENERATE_EXCEPTIONS      |   \
06325                                         HEAP_ZERO_MEMORY              |   \
06326                                         HEAP_REALLOC_IN_PLACE_ONLY    |   \
06327                                         HEAP_TAIL_CHECKING_ENABLED    |   \
06328                                         HEAP_FREE_CHECKING_ENABLED    |   \
06329                                         HEAP_DISABLE_COALESCE_ON_FREE |   \
06330                                         HEAP_CLASS_MASK               |   \
06331                                         HEAP_CREATE_ALIGN_16          |   \
06332                                         HEAP_CREATE_ENABLE_TRACING    |   \
06333                                         HEAP_CREATE_ENABLE_EXECUTE)
06334 
06335 /******************************************************************************
06336  *                       Memory manager Functions                             *
06337  ******************************************************************************/
06338 
06339 FORCEINLINE
06340 ULONG
06341 HEAP_MAKE_TAG_FLAGS(
06342   _In_ ULONG TagBase,
06343   _In_ ULONG Tag)
06344 {
06345   //__assume_bound(TagBase); // FIXME
06346   return ((ULONG)((TagBase) + ((Tag) << HEAP_TAG_SHIFT)));
06347 }
06348 
06349 #if (NTDDI_VERSION >= NTDDI_WIN2K)
06350 
06351 NTKERNELAPI
06352 BOOLEAN
06353 NTAPI
06354 MmIsRecursiveIoFault(VOID);
06355 
06356 _IRQL_requires_max_ (APC_LEVEL)
06357 NTKERNELAPI
06358 BOOLEAN
06359 NTAPI
06360 MmForceSectionClosed(
06361   _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
06362   _In_ BOOLEAN DelayClose);
06363 
06364 _IRQL_requires_max_ (APC_LEVEL)
06365 NTKERNELAPI
06366 BOOLEAN
06367 NTAPI
06368 MmFlushImageSection(
06369   _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
06370   _In_ MMFLUSH_TYPE FlushType);
06371 
06372 _IRQL_requires_max_ (APC_LEVEL)
06373 NTKERNELAPI
06374 BOOLEAN
06375 NTAPI
06376 MmCanFileBeTruncated(
06377   _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
06378   _In_opt_ PLARGE_INTEGER NewFileSize);
06379 
06380 _IRQL_requires_max_ (APC_LEVEL)
06381 NTKERNELAPI
06382 BOOLEAN
06383 NTAPI
06384 MmSetAddressRangeModified(
06385   _In_reads_bytes_ (Length) PVOID Address,
06386   _In_ SIZE_T Length);
06387 
06388 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
06389 
06390 #if (NTDDI_VERSION >= NTDDI_WINXP)
06391 
06392 
06393 _IRQL_requires_max_ (PASSIVE_LEVEL)
06394 NTKERNELAPI
06395 NTSTATUS
06396 NTAPI
06397 MmPrefetchPages(
06398   _In_ ULONG NumberOfLists,
06399   _In_reads_ (NumberOfLists) PREAD_LIST *ReadLists);
06400 
06401 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
06402 
06403 
06404 #if (NTDDI_VERSION >= NTDDI_VISTA)
06405 
06406 _IRQL_requires_max_ (APC_LEVEL)
06407 NTKERNELAPI
06408 ULONG
06409 NTAPI
06410 MmDoesFileHaveUserWritableReferences(
06411   _In_ PSECTION_OBJECT_POINTERS SectionPointer);
06412 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
06413 
06414 
06415 #if (NTDDI_VERSION >= NTDDI_WIN2K)
06416 
06417 NTKERNELAPI
06418 NTSTATUS
06419 NTAPI
06420 ObInsertObject(
06421   _In_ PVOID Object,
06422   _Inout_opt_ PACCESS_STATE PassedAccessState,
06423   _In_opt_ ACCESS_MASK DesiredAccess,
06424   _In_ ULONG ObjectPointerBias,
06425   _Out_opt_ PVOID *NewObject,
06426   _Out_opt_ PHANDLE Handle);
06427 
06428 NTKERNELAPI
06429 NTSTATUS
06430 NTAPI
06431 ObOpenObjectByPointer(
06432   _In_ PVOID Object,
06433   _In_ ULONG HandleAttributes,
06434   _In_opt_ PACCESS_STATE PassedAccessState,
06435   _In_ ACCESS_MASK DesiredAccess,
06436   _In_opt_ POBJECT_TYPE ObjectType,
06437   _In_ KPROCESSOR_MODE AccessMode,
06438   _Out_ PHANDLE Handle);
06439 
06440 NTKERNELAPI
06441 VOID
06442 NTAPI
06443 ObMakeTemporaryObject(
06444   _In_ PVOID Object);
06445 
06446 NTKERNELAPI
06447 NTSTATUS
06448 NTAPI
06449 ObQueryNameString(
06450   _In_ PVOID Object,
06451   _Out_writes_bytes_opt_(Length) POBJECT_NAME_INFORMATION ObjectNameInfo,
06452   _In_ ULONG Length,
06453   _Out_ PULONG ReturnLength);
06454 
06455 NTKERNELAPI
06456 NTSTATUS
06457 NTAPI
06458 ObQueryObjectAuditingByHandle(
06459   _In_ HANDLE Handle,
06460   _Out_ PBOOLEAN GenerateOnClose);
06461 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
06462 
06463 #if (NTDDI_VERSION >= NTDDI_VISTA)
06464 
06465 NTKERNELAPI
06466 BOOLEAN
06467 NTAPI
06468 ObIsKernelHandle(
06469   _In_ HANDLE Handle);
06470 #endif
06471 
06472 
06473 #if (NTDDI_VERSION >= NTDDI_WIN7)
06474 
06475 NTKERNELAPI
06476 NTSTATUS
06477 NTAPI
06478 ObOpenObjectByPointerWithTag(
06479   _In_ PVOID Object,
06480   _In_ ULONG HandleAttributes,
06481   _In_opt_ PACCESS_STATE PassedAccessState,
06482   _In_ ACCESS_MASK DesiredAccess,
06483   _In_opt_ POBJECT_TYPE ObjectType,
06484   _In_ KPROCESSOR_MODE AccessMode,
06485   _In_ ULONG Tag,
06486   _Out_ PHANDLE Handle);
06487 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
06488 
06489 /* FSRTL Types */
06490 
06491 typedef ULONG LBN;
06492 typedef LBN *PLBN;
06493 
06494 typedef ULONG VBN;
06495 typedef VBN *PVBN;
06496 
06497 #define FSRTL_COMMON_FCB_HEADER_LAYOUT \
06498   CSHORT NodeTypeCode; \
06499   CSHORT NodeByteSize; \
06500   UCHAR Flags; \
06501   UCHAR IsFastIoPossible; \
06502   UCHAR Flags2; \
06503   UCHAR Reserved:4; \
06504   UCHAR Version:4; \
06505   PERESOURCE Resource; \
06506   PERESOURCE PagingIoResource; \
06507   LARGE_INTEGER AllocationSize; \
06508   LARGE_INTEGER FileSize; \
06509   LARGE_INTEGER ValidDataLength;
06510 
06511 typedef struct _FSRTL_COMMON_FCB_HEADER {
06512   FSRTL_COMMON_FCB_HEADER_LAYOUT
06513 } FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER;
06514 
06515 #ifdef __cplusplus
06516 typedef struct _FSRTL_ADVANCED_FCB_HEADER:FSRTL_COMMON_FCB_HEADER {
06517 #else /* __cplusplus */
06518 typedef struct _FSRTL_ADVANCED_FCB_HEADER {
06519   FSRTL_COMMON_FCB_HEADER_LAYOUT
06520 #endif  /* __cplusplus */
06521   PFAST_MUTEX FastMutex;
06522   LIST_ENTRY FilterContexts;
06523 #if (NTDDI_VERSION >= NTDDI_VISTA)
06524   EX_PUSH_LOCK PushLock;
06525   PVOID *FileContextSupportPointer;
06526 #endif
06527 } FSRTL_ADVANCED_FCB_HEADER, *PFSRTL_ADVANCED_FCB_HEADER;
06528 
06529 #define FSRTL_FCB_HEADER_V0             (0x00)
06530 #define FSRTL_FCB_HEADER_V1             (0x01)
06531 
06532 #define FSRTL_FLAG_FILE_MODIFIED        (0x01)
06533 #define FSRTL_FLAG_FILE_LENGTH_CHANGED  (0x02)
06534 #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
06535 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
06536 #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
06537 #define FSRTL_FLAG_USER_MAPPED_FILE     (0x20)
06538 #define FSRTL_FLAG_ADVANCED_HEADER      (0x40)
06539 #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE   (0x80)
06540 
06541 #define FSRTL_FLAG2_DO_MODIFIED_WRITE        (0x01)
06542 #define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02)
06543 #define FSRTL_FLAG2_PURGE_WHEN_MAPPED        (0x04)
06544 #define FSRTL_FLAG2_IS_PAGING_FILE           (0x08)
06545 
06546 #define FSRTL_FSP_TOP_LEVEL_IRP         (0x01)
06547 #define FSRTL_CACHE_TOP_LEVEL_IRP       (0x02)
06548 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP   (0x03)
06549 #define FSRTL_FAST_IO_TOP_LEVEL_IRP     (0x04)
06550 #define FSRTL_NETWORK1_TOP_LEVEL_IRP    ((LONG_PTR)0x05)
06551 #define FSRTL_NETWORK2_TOP_LEVEL_IRP    ((LONG_PTR)0x06)
06552 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG    ((LONG_PTR)0xFFFF)
06553 
06554 typedef struct _FSRTL_AUXILIARY_BUFFER {
06555   PVOID Buffer;
06556   ULONG Length;
06557   ULONG Flags;
06558   PMDL Mdl;
06559 } FSRTL_AUXILIARY_BUFFER, *PFSRTL_AUXILIARY_BUFFER;
06560 
06561 #define FSRTL_AUXILIARY_FLAG_DEALLOCATE 0x00000001
06562 
06563 typedef enum _FSRTL_COMPARISON_RESULT {
06564   LessThan = -1,
06565   EqualTo = 0,
06566   GreaterThan = 1
06567 } FSRTL_COMPARISON_RESULT;
06568 
06569 #define FSRTL_FAT_LEGAL                 0x01
06570 #define FSRTL_HPFS_LEGAL                0x02
06571 #define FSRTL_NTFS_LEGAL                0x04
06572 #define FSRTL_WILD_CHARACTER            0x08
06573 #define FSRTL_OLE_LEGAL                 0x10
06574 #define FSRTL_NTFS_STREAM_LEGAL         (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL)
06575 
06576 #define FSRTL_VOLUME_DISMOUNT           1
06577 #define FSRTL_VOLUME_DISMOUNT_FAILED    2
06578 #define FSRTL_VOLUME_LOCK               3
06579 #define FSRTL_VOLUME_LOCK_FAILED        4
06580 #define FSRTL_VOLUME_UNLOCK             5
06581 #define FSRTL_VOLUME_MOUNT              6
06582 #define FSRTL_VOLUME_NEEDS_CHKDSK       7
06583 #define FSRTL_VOLUME_WORM_NEAR_FULL     8
06584 #define FSRTL_VOLUME_WEARING_OUT        9
06585 #define FSRTL_VOLUME_FORCED_CLOSED      10
06586 #define FSRTL_VOLUME_INFO_MAKE_COMPAT   11
06587 #define FSRTL_VOLUME_PREPARING_EJECT    12
06588 #define FSRTL_VOLUME_CHANGE_SIZE        13
06589 #define FSRTL_VOLUME_BACKGROUND_FORMAT  14
06590 
06591 typedef VOID
06592 (NTAPI *PFSRTL_STACK_OVERFLOW_ROUTINE)(
06593   _In_ PVOID Context,
06594   _In_ PKEVENT Event);
06595 
06596 #if (NTDDI_VERSION >= NTDDI_VISTA)
06597 
06598 #define FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED    0x00000001
06599 #define FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED            0x00000002
06600 #define FSRTL_UNC_PROVIDER_FLAGS_DOMAIN_SVC_AWARE       0x00000004
06601 
06602 #define FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA        0x00000001
06603 
06604 #define FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA            0x00000001
06605 #define FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL           0x00000002
06606 
06607 #define FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL          0x00000002
06608 
06609 #define FSRTL_VIRTDISK_FULLY_ALLOCATED  0x00000001
06610 #define FSRTL_VIRTDISK_NO_DRIVE_LETTER  0x00000002
06611 
06612 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_1 {
06613   ULONG32 ProviderId;
06614 } FSRTL_MUP_PROVIDER_INFO_LEVEL_1, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_1;
06615 
06616 typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_2 {
06617   ULONG32 ProviderId;
06618   UNICODE_STRING ProviderName;
06619 } FSRTL_MUP_PROVIDER_INFO_LEVEL_2, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_2;
06620 
06621 typedef VOID
06622 (*PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK) (
06623   _Inout_ PVOID EcpContext,
06624   _In_ LPCGUID EcpType);
06625 
06626 typedef struct _ECP_LIST ECP_LIST, *PECP_LIST;
06627 
06628 typedef ULONG FSRTL_ALLOCATE_ECPLIST_FLAGS;
06629 typedef ULONG FSRTL_ALLOCATE_ECP_FLAGS;
06630 typedef ULONG FSRTL_ECP_LOOKASIDE_FLAGS;
06631 
06632 typedef enum _FSRTL_CHANGE_BACKING_TYPE {
06633   ChangeDataControlArea,
06634   ChangeImageControlArea,
06635   ChangeSharedCacheMap
06636 } FSRTL_CHANGE_BACKING_TYPE, *PFSRTL_CHANGE_BACKING_TYPE;
06637 
06638 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
06639 
06640 typedef struct _FSRTL_PER_FILE_CONTEXT {
06641   LIST_ENTRY Links;
06642   PVOID OwnerId;
06643   PVOID InstanceId;
06644   PFREE_FUNCTION FreeCallback;
06645 } FSRTL_PER_FILE_CONTEXT, *PFSRTL_PER_FILE_CONTEXT;
06646 
06647 typedef struct _FSRTL_PER_STREAM_CONTEXT {
06648   LIST_ENTRY Links;
06649   PVOID OwnerId;
06650   PVOID InstanceId;
06651   PFREE_FUNCTION FreeCallback;
06652 } FSRTL_PER_STREAM_CONTEXT, *PFSRTL_PER_STREAM_CONTEXT;
06653 
06654 #if (NTDDI_VERSION >= NTDDI_WIN2K)
06655 typedef VOID
06656 (*PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS) (
06657   _In_ PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
06658 #endif
06659 
06660 typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT {
06661   LIST_ENTRY Links;
06662   PVOID OwnerId;
06663   PVOID InstanceId;
06664 } FSRTL_PER_FILEOBJECT_CONTEXT, *PFSRTL_PER_FILEOBJECT_CONTEXT;
06665 
06666 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_HARD_ERROR  0x1
06667 #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_LOG_ENTRY   0x2
06668 
06669 typedef NTSTATUS
06670 (NTAPI *PCOMPLETE_LOCK_IRP_ROUTINE) (
06671   _In_ PVOID Context,
06672   _In_ PIRP Irp);
06673 
06674 typedef struct _FILE_LOCK_INFO {
06675   LARGE_INTEGER StartingByte;
06676   LARGE_INTEGER Length;
06677   BOOLEAN ExclusiveLock;
06678   ULONG Key;
06679   PFILE_OBJECT FileObject;
06680   PVOID ProcessId;
06681   LARGE_INTEGER EndingByte;
06682 } FILE_LOCK_INFO, *PFILE_LOCK_INFO;
06683 
06684 typedef VOID
06685 (NTAPI *PUNLOCK_ROUTINE) (
06686   _In_ PVOID Context,
06687   _In_ PFILE_LOCK_INFO FileLockInfo);
06688 
06689 typedef struct _FILE_LOCK {
06690   PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
06691   PUNLOCK_ROUTINE UnlockRoutine;
06692   BOOLEAN FastIoIsQuestionable;
06693   BOOLEAN SpareC[3];
06694   PVOID LockInformation;
06695   FILE_LOCK_INFO LastReturnedLockInfo;
06696   PVOID LastReturnedLock;
06697   LONG volatile LockRequestsInProgress;
06698 } FILE_LOCK, *PFILE_LOCK;
06699 
06700 typedef struct _TUNNEL {
06701   FAST_MUTEX Mutex;
06702   PRTL_SPLAY_LINKS Cache;
06703   LIST_ENTRY TimerQueue;
06704   USHORT NumEntries;
06705 } TUNNEL, *PTUNNEL;
06706 
06707 typedef struct _BASE_MCB {
06708   ULONG MaximumPairCount;
06709   ULONG PairCount;
06710   USHORT PoolType;
06711   USHORT Flags;
06712   PVOID Mapping;
06713 } BASE_MCB, *PBASE_MCB;
06714 
06715 typedef struct _LARGE_MCB {
06716   PKGUARDED_MUTEX GuardedMutex;
06717   BASE_MCB BaseMcb;
06718 } LARGE_MCB, *PLARGE_MCB;
06719 
06720 #define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
06721 
06722 typedef struct _MCB {
06723   LARGE_MCB DummyFieldThatSizesThisStructureCorrectly;
06724 } MCB, *PMCB;
06725 
06726 typedef enum _FAST_IO_POSSIBLE {
06727   FastIoIsNotPossible = 0,
06728   FastIoIsPossible,
06729   FastIoIsQuestionable
06730 } FAST_IO_POSSIBLE;
06731 
06732 typedef struct _EOF_WAIT_BLOCK {
06733   LIST_ENTRY EofWaitLinks;
06734   KEVENT Event;
06735 } EOF_WAIT_BLOCK, *PEOF_WAIT_BLOCK;
06736 
06737 typedef PVOID OPLOCK, *POPLOCK;
06738 
06739 typedef VOID
06740 (NTAPI *POPLOCK_WAIT_COMPLETE_ROUTINE) (
06741   _In_ PVOID Context,
06742   _In_ PIRP Irp);
06743 
06744 typedef VOID
06745 (NTAPI *POPLOCK_FS_PREPOST_IRP) (
06746   _In_ PVOID Context,
06747   _In_ PIRP Irp);
06748 
06749 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
06750 #define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED    0x00000001
06751 #endif
06752 
06753 #if (NTDDI_VERSION >= NTDDI_WIN7)
06754 #define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY   0x00000002
06755 #define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK  0x00000004
06756 #define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS      0x00000008
06757 #define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH   0x00000001
06758 #endif
06759 
06760 #if (NTDDI_VERSION >= NTDDI_WIN7)
06761 
06762 typedef struct _OPLOCK_KEY_ECP_CONTEXT {
06763   GUID OplockKey;
06764   ULONG Reserved;
06765 } OPLOCK_KEY_ECP_CONTEXT, *POPLOCK_KEY_ECP_CONTEXT;
06766 
06767 DEFINE_GUID(GUID_ECP_OPLOCK_KEY, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f);
06768 
06769 #endif
06770 
06771 typedef PVOID PNOTIFY_SYNC;
06772 
06773 #if (NTDDI_VERSION >= NTDDI_WIN7)
06774 typedef struct _ECP_HEADER ECP_HEADER, *PECP_HEADER;
06775 #endif
06776 
06777 typedef BOOLEAN
06778 (NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) (
06779   _In_ PVOID NotifyContext,
06780   _In_opt_ PVOID TargetContext,
06781   _In_ PSECURITY_SUBJECT_CONTEXT SubjectContext);
06782 
06783 typedef BOOLEAN
06784 (NTAPI *PFILTER_REPORT_CHANGE) (
06785   _In_ PVOID NotifyContext,
06786   _In_ PVOID FilterContext);
06787 /* FSRTL Functions */
06788 
06789 #define FsRtlEnterFileSystem    KeEnterCriticalRegion
06790 #define FsRtlExitFileSystem     KeLeaveCriticalRegion
06791 
06792 #if (NTDDI_VERSION >= NTDDI_WIN2K)
06793 
06794 _Must_inspect_result_
06795 _IRQL_requires_max_(PASSIVE_LEVEL)
06796 NTKERNELAPI
06797 BOOLEAN
06798 NTAPI
06799 FsRtlCopyRead(
06800   _In_ PFILE_OBJECT FileObject,
06801   _In_ PLARGE_INTEGER FileOffset,
06802   _In_ ULONG Length,
06803   _In_ BOOLEAN Wait,
06804   _In_ ULONG LockKey,
06805   _Out_writes_bytes_(Length) PVOID Buffer,
06806   _Out_ PIO_STATUS_BLOCK IoStatus,
06807   _In_ PDEVICE_OBJECT DeviceObject);
06808 
06809 _Must_inspect_result_
06810 _IRQL_requires_max_(PASSIVE_LEVEL)
06811 NTKERNELAPI
06812 BOOLEAN
06813 NTAPI
06814 FsRtlCopyWrite(
06815   _In_ PFILE_OBJECT FileObject,
06816   _In_ PLARGE_INTEGER FileOffset,
06817   _In_ ULONG Length,
06818   _In_ BOOLEAN Wait,
06819   _In_ ULONG LockKey,
06820   _In_reads_bytes_(Length) PVOID Buffer,
06821   _Out_ PIO_STATUS_BLOCK IoStatus,
06822   _In_ PDEVICE_OBJECT DeviceObject);
06823 
06824 _Must_inspect_result_
06825 _IRQL_requires_max_(APC_LEVEL)
06826 NTKERNELAPI
06827 BOOLEAN
06828 NTAPI
06829 FsRtlMdlReadDev(
06830   _In_ PFILE_OBJECT FileObject,
06831   _In_ PLARGE_INTEGER FileOffset,
06832   _In_ ULONG Length,
06833   _In_ ULONG LockKey,
06834   _Outptr_ PMDL *MdlChain,
06835   _Out_ PIO_STATUS_BLOCK IoStatus,
06836   _In_opt_ PDEVICE_OBJECT DeviceObject);
06837 
06838 _IRQL_requires_max_(PASSIVE_LEVEL)
06839 NTKERNELAPI
06840 BOOLEAN
06841 NTAPI
06842 FsRtlMdlReadCompleteDev(
06843   _In_ PFILE_OBJECT FileObject,
06844   _In_ PMDL MdlChain,
06845   _In_opt_ PDEVICE_OBJECT DeviceObject);
06846 
06847 _Must_inspect_result_
06848 _IRQL_requires_max_(APC_LEVEL)
06849 NTKERNELAPI
06850 BOOLEAN
06851 NTAPI
06852 FsRtlPrepareMdlWriteDev(
06853   _In_ PFILE_OBJECT FileObject,
06854   _In_ PLARGE_INTEGER FileOffset,
06855   _In_ ULONG Length,
06856   _In_ ULONG LockKey,
06857   _Outptr_ PMDL *MdlChain,
06858   _Out_ PIO_STATUS_BLOCK IoStatus,
06859   _In_ PDEVICE_OBJECT DeviceObject);
06860 
06861 _Must_inspect_result_
06862 _IRQL_requires_max_(PASSIVE_LEVEL)
06863 NTKERNELAPI
06864 BOOLEAN
06865 NTAPI
06866 FsRtlMdlWriteCompleteDev(
06867   _In_ PFILE_OBJECT FileObject,
06868   _In_ PLARGE_INTEGER FileOffset,
06869   _In_ PMDL MdlChain,
06870   _In_opt_ PDEVICE_OBJECT DeviceObject);
06871 
06872 _IRQL_requires_max_(PASSIVE_LEVEL)
06873 NTKERNELAPI
06874 VOID
06875 NTAPI
06876 FsRtlAcquireFileExclusive(
06877   _In_ PFILE_OBJECT FileObject);
06878 
06879 _IRQL_requires_max_(APC_LEVEL)
06880 NTKERNELAPI
06881 VOID
06882 NTAPI
06883 FsRtlReleaseFile(
06884   _In_ PFILE_OBJECT FileObject);
06885 
06886 _Must_inspect_result_
06887 _IRQL_requires_max_(PASSIVE_LEVEL)
06888 NTKERNELAPI
06889 NTSTATUS
06890 NTAPI
06891 FsRtlGetFileSize(
06892   _In_ PFILE_OBJECT FileObject,
06893   _Out_ PLARGE_INTEGER FileSize);
06894 
06895 _Must_inspect_result_
06896 NTKERNELAPI
06897 BOOLEAN
06898 NTAPI
06899 FsRtlIsTotalDeviceFailure(
06900   _In_ NTSTATUS Status);
06901 
06902 _Must_inspect_result_
06903 _IRQL_requires_max_(APC_LEVEL)
06904 NTKERNELAPI
06905 PFILE_LOCK
06906 NTAPI
06907 FsRtlAllocateFileLock(
06908   _In_opt_ PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine,
06909   _In_opt_ PUNLOCK_ROUTINE UnlockRoutine);
06910 
06911 _IRQL_requires_max_(APC_LEVEL)
06912 NTKERNELAPI
06913 VOID
06914 NTAPI
06915 FsRtlFreeFileLock(
06916   _In_ PFILE_LOCK FileLock);
06917 
06918 _IRQL_requires_max_(APC_LEVEL)
06919 NTKERNELAPI
06920 VOID
06921 NTAPI
06922 FsRtlInitializeFileLock(
06923   _Out_ PFILE_LOCK FileLock,
06924   _In_opt_ PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine,
06925   _In_opt_ PUNLOCK_ROUTINE UnlockRoutine);
06926 
06927 _IRQL_requires_max_(APC_LEVEL)
06928 NTKERNELAPI
06929 VOID
06930 NTAPI
06931 FsRtlUninitializeFileLock(
06932   _Inout_ PFILE_LOCK FileLock);
06933 
06934 /*
06935   FsRtlProcessFileLock:
06936 
06937   ret:
06938     -STATUS_INVALID_DEVICE_REQUEST
06939     -STATUS_RANGE_NOT_LOCKED from unlock routines.
06940     -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
06941     (redirected IoStatus->Status).
06942 
06943   Internals:
06944     -switch ( Irp->CurrentStackLocation->MinorFunction )
06945         lock: return FsRtlPrivateLock;
06946         unlocksingle: return FsRtlFastUnlockSingle;
06947         unlockall: return FsRtlFastUnlockAll;
06948         unlockallbykey: return FsRtlFastUnlockAllByKey;
06949         default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
06950                  return STATUS_INVALID_DEVICE_REQUEST;
06951 
06952     -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
06953     -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
06954 */
06955 _Must_inspect_result_
06956 _IRQL_requires_max_(APC_LEVEL)
06957 NTKERNELAPI
06958 NTSTATUS
06959 NTAPI
06960 FsRtlProcessFileLock(
06961   _In_ PFILE_LOCK FileLock,
06962   _In_ PIRP Irp,
06963   _In_opt_ PVOID Context);
06964 
06965 /*
06966   FsRtlCheckLockForReadAccess:
06967 
06968   All this really does is pick out the lock parameters from the irp (io stack
06969   location?), get IoGetRequestorProcess, and pass values on to
06970   FsRtlFastCheckLockForRead.
06971 */
06972 _Must_inspect_result_
06973 _IRQL_requires_max_(APC_LEVEL)
06974 NTKERNELAPI
06975 BOOLEAN
06976 NTAPI
06977 FsRtlCheckLockForReadAccess(
06978   _In_ PFILE_LOCK FileLock,
06979   _In_ PIRP Irp);
06980 
06981 /*
06982   FsRtlCheckLockForWriteAccess:
06983 
06984   All this really does is pick out the lock parameters from the irp (io stack
06985   location?), get IoGetRequestorProcess, and pass values on to
06986   FsRtlFastCheckLockForWrite.
06987 */
06988 _Must_inspect_result_
06989 _IRQL_requires_max_(APC_LEVEL)
06990 NTKERNELAPI
06991 BOOLEAN
06992 NTAPI
06993 FsRtlCheckLockForWriteAccess(
06994   _In_ PFILE_LOCK FileLock,
06995   _In_ PIRP Irp);
06996 
06997 _Must_inspect_result_
06998 _IRQL_requires_max_(APC_LEVEL)
06999 NTKERNELAPI
07000 BOOLEAN
07001 NTAPI
07002 FsRtlFastCheckLockForRead(
07003   _In_ PFILE_LOCK FileLock,
07004   _In_ PLARGE_INTEGER FileOffset,
07005   _In_ PLARGE_INTEGER Length,
07006   _In_ ULONG Key,
07007   _In_ PFILE_OBJECT FileObject,
07008   _In_ PVOID Process);
07009 
07010 _Must_inspect_result_
07011 _IRQL_requires_max_(APC_LEVEL)
07012 NTKERNELAPI
07013 BOOLEAN
07014 NTAPI
07015 FsRtlFastCheckLockForWrite(
07016   _In_ PFILE_LOCK FileLock,
07017   _In_ PLARGE_INTEGER FileOffset,
07018   _In_ PLARGE_INTEGER Length,
07019   _In_ ULONG Key,
07020   _In_ PFILE_OBJECT FileObject,
07021   _In_ PVOID Process);
07022 
07023 /*
07024   FsRtlGetNextFileLock:
07025 
07026   ret: NULL if no more locks
07027 
07028   Internals:
07029     FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
07030     FileLock->LastReturnedLock as storage.
07031     LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
07032     list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
07033     calls with Restart = FALSE.
07034 */
07035 _Must_inspect_result_
07036 _IRQL_requires_max_(APC_LEVEL)
07037 NTKERNELAPI
07038 PFILE_LOCK_INFO
07039 NTAPI
07040 FsRtlGetNextFileLock(
07041   _In_ PFILE_LOCK FileLock,
07042   _In_ BOOLEAN Restart);
07043 
07044 _IRQL_requires_max_(APC_LEVEL)
07045 NTKERNELAPI
07046 NTSTATUS
07047 NTAPI
07048 FsRtlFastUnlockSingle(
07049   _In_ PFILE_LOCK FileLock,
07050   _In_ PFILE_OBJECT FileObject,
07051   _In_ PLARGE_INTEGER FileOffset,
07052   _In_ PLARGE_INTEGER Length,
07053   _In_ PEPROCESS Process,
07054   _In_ ULONG Key,
07055   _In_opt_ PVOID Context,
07056   _In_ BOOLEAN AlreadySynchronized);
07057 
07058 _IRQL_requires_max_(APC_LEVEL)
07059 NTKERNELAPI
07060 NTSTATUS
07061 NTAPI
07062 FsRtlFastUnlockAll(
07063   _In_ PFILE_LOCK FileLock,
07064   _In_ PFILE_OBJECT FileObject,
07065   _In_ PEPROCESS Process,
07066   _In_opt_ PVOID Context);
07067 
07068 _IRQL_requires_max_(APC_LEVEL)
07069 NTKERNELAPI
07070 NTSTATUS
07071 NTAPI
07072 FsRtlFastUnlockAllByKey(
07073   _In_ PFILE_LOCK FileLock,
07074   _In_ PFILE_OBJECT FileObject,
07075   _In_ PEPROCESS Process,
07076   _In_ ULONG Key,
07077   _In_opt_ PVOID Context);
07078 
07079 /*
07080   FsRtlPrivateLock:
07081 
07082   ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
07083 
07084   Internals:
07085     -Calls IoCompleteRequest if Irp
07086     -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
07087 */
07088 _Must_inspect_result_
07089 _IRQL_requires_max_(APC_LEVEL)
07090 __drv_preferredFunction(FsRtlFastLock, "Obsolete")
07091 NTKERNELAPI
07092 BOOLEAN
07093 NTAPI
07094 FsRtlPrivateLock(
07095   _In_ PFILE_LOCK FileLock,
07096   _In_ PFILE_OBJECT FileObject,
07097   _In_ PLARGE_INTEGER FileOffset,
07098   _In_ PLARGE_INTEGER Length,
07099   _In_ PEPROCESS Process,
07100   _In_ ULONG Key,
07101   _In_ BOOLEAN FailImmediately,
07102   _In_ BOOLEAN ExclusiveLock,
07103   _Out_ PIO_STATUS_BLOCK IoStatus,
07104   _In_opt_ PIRP Irp,
07105   _In_opt_ __drv_aliasesMem PVOID Context,
07106   _In_ BOOLEAN AlreadySynchronized);
07107 
07108 _IRQL_requires_max_(APC_LEVEL)
07109 NTKERNELAPI
07110 VOID
07111 NTAPI
07112 FsRtlInitializeTunnelCache(
07113   _In_ PTUNNEL Cache);
07114 
07115 _IRQL_requires_max_(APC_LEVEL)
07116 NTKERNELAPI
07117 VOID
07118 NTAPI
07119 FsRtlAddToTunnelCache(
07120   _In_ PTUNNEL Cache,
07121   _In_ ULONGLONG DirectoryKey,
07122   _In_ PUNICODE_STRING ShortName,
07123   _In_ PUNICODE_STRING LongName,
07124   _In_ BOOLEAN KeyByShortName,
07125   _In_ ULONG DataLength,
07126   _In_reads_bytes_(DataLength) PVOID Data);
07127 
07128 _Must_inspect_result_
07129 _IRQL_requires_max_(APC_LEVEL)
07130 NTKERNELAPI
07131 BOOLEAN
07132 NTAPI
07133 FsRtlFindInTunnelCache(
07134   _In_ PTUNNEL Cache,
07135   _In_ ULONGLONG DirectoryKey,
07136   _In_ PUNICODE_STRING Name,
07137   _Out_ PUNICODE_STRING ShortName,
07138   _Out_ PUNICODE_STRING LongName,
07139   _Inout_ PULONG DataLength,
07140   _Out_writes_bytes_to_(*DataLength, *DataLength) PVOID Data);
07141 
07142 _IRQL_requires_max_(APC_LEVEL)
07143 NTKERNELAPI
07144 VOID
07145 NTAPI
07146 FsRtlDeleteKeyFromTunnelCache(
07147   _In_ PTUNNEL Cache,
07148   _In_ ULONGLONG DirectoryKey);
07149 
07150 _IRQL_requires_max_(APC_LEVEL)
07151 NTKERNELAPI
07152 VOID
07153 NTAPI
07154 FsRtlDeleteTunnelCache(
07155   _In_ PTUNNEL Cache);
07156 
07157 _IRQL_requires_max_(APC_LEVEL)
07158 NTKERNELAPI
07159 VOID
07160 NTAPI
07161 FsRtlDissectDbcs(
07162   _In_ ANSI_STRING Name,
07163   _Out_ PANSI_STRING FirstPart,
07164   _Out_ PANSI_STRING RemainingPart);
07165 
07166 _Must_inspect_result_
07167 _IRQL_requires_max_(APC_LEVEL)
07168 NTKERNELAPI
07169 BOOLEAN
07170 NTAPI
07171 FsRtlDoesDbcsContainWildCards(
07172   _In_ PANSI_STRING Name);
07173 
07174 _Must_inspect_result_
07175 _IRQL_requires_max_(APC_LEVEL)
07176 NTKERNELAPI
07177 BOOLEAN
07178 NTAPI
07179 FsRtlIsDbcsInExpression(
07180   _In_ PANSI_STRING Expression,
07181   _In_ PANSI_STRING Name);
07182 
07183 _Must_inspect_result_
07184 _IRQL_requires_max_(APC_LEVEL)
07185 NTKERNELAPI
07186 BOOLEAN
07187 NTAPI
07188 FsRtlIsFatDbcsLegal(
07189   _In_ ANSI_STRING DbcsName,
07190   _In_ BOOLEAN WildCardsPermissible,
07191   _In_ BOOLEAN PathNamePermissible,
07192   _In_ BOOLEAN LeadingBackslashPermissible);
07193 
07194 _Must_inspect_result_
07195 _IRQL_requires_max_(APC_LEVEL)
07196 NTKERNELAPI
07197 BOOLEAN
07198 NTAPI
07199 FsRtlIsHpfsDbcsLegal(
07200   _In_ ANSI_STRING DbcsName,
07201   _In_ BOOLEAN WildCardsPermissible,
07202   _In_ BOOLEAN PathNamePermissible,
07203   _In_ BOOLEAN LeadingBackslashPermissible);
07204 
07205 NTKERNELAPI
07206 NTSTATUS
07207 NTAPI
07208 FsRtlNormalizeNtstatus(
07209   _In_ NTSTATUS Exception,
07210   _In_ NTSTATUS GenericException);
07211 
07212 _Must_inspect_result_
07213 NTKERNELAPI
07214 BOOLEAN
07215 NTAPI
07216 FsRtlIsNtstatusExpected(
07217   _In_ NTSTATUS Ntstatus);
07218 
07219 _IRQL_requires_max_(APC_LEVEL)
07220 __drv_preferredFunction(ExAllocateFromNPagedLookasideList, "The FsRtlAllocateResource routine is obsolete, but is exported to support existing driver binaries. Use ExAllocateFromNPagedLookasideList and ExInitializeResourceLite instead.")
07221 NTKERNELAPI
07222 PERESOURCE
07223 NTAPI
07224 FsRtlAllocateResource(VOID);
07225 
07226 _IRQL_requires_max_(APC_LEVEL)
07227 NTKERNELAPI
07228 VOID
07229 NTAPI
07230 FsRtlInitializeLargeMcb(
07231   _Out_ PLARGE_MCB Mcb,
07232   _In_ POOL_TYPE PoolType);
07233 
07234 _IRQL_requires_max_(APC_LEVEL)
07235 NTKERNELAPI
07236 VOID
07237 NTAPI
07238 FsRtlUninitializeLargeMcb(
07239   _Inout_ PLARGE_MCB Mcb);
07240 
07241 _IRQL_requires_max_(APC_LEVEL)
07242 NTKERNELAPI
07243 VOID
07244 NTAPI
07245 FsRtlResetLargeMcb(
07246   _Inout_ PLARGE_MCB Mcb,
07247   _In_ BOOLEAN SelfSynchronized);
07248 
07249 _IRQL_requires_max_(APC_LEVEL)
07250 NTKERNELAPI
07251 VOID
07252 NTAPI
07253 FsRtlTruncateLargeMcb(
07254   _Inout_ PLARGE_MCB Mcb,
07255   _In_ LONGLONG Vbn);
07256 
07257 _Must_inspect_result_
07258 _IRQL_requires_max_(APC_LEVEL)
07259 NTKERNELAPI
07260 BOOLEAN
07261 NTAPI
07262 FsRtlAddLargeMcbEntry(
07263   _Inout_ PLARGE_MCB Mcb,
07264   _In_ LONGLONG Vbn,
07265   _In_ LONGLONG Lbn,
07266   _In_ LONGLONG SectorCount);
07267 
07268 _IRQL_requires_max_(APC_LEVEL)
07269 NTKERNELAPI
07270 VOID
07271 NTAPI
07272 FsRtlRemoveLargeMcbEntry(
07273   _Inout_ PLARGE_MCB Mcb,
07274   _In_ LONGLONG Vbn,
07275   _In_ LONGLONG SectorCount);
07276 
07277 _IRQL_requires_max_(APC_LEVEL)
07278 NTKERNELAPI
07279 BOOLEAN
07280 NTAPI
07281 FsRtlLookupLargeMcbEntry(
07282   _In_ PLARGE_MCB Mcb,
07283   _In_ LONGLONG Vbn,
07284   _Out_opt_ PLONGLONG Lbn,
07285   _Out_opt_ PLONGLONG SectorCountFromLbn,
07286   _Out_opt_ PLONGLONG StartingLbn,
07287   _Out_opt_ PLONGLONG SectorCountFromStartingLbn,
07288   _Out_opt_ PULONG Index);
07289 
07290 _IRQL_requires_max_(APC_LEVEL)
07291 NTKERNELAPI
07292 BOOLEAN
07293 NTAPI
07294 FsRtlLookupLastLargeMcbEntry(
07295   _In_ PLARGE_MCB Mcb,
07296   _Out_ PLONGLONG Vbn,
07297   _Out_ PLONGLONG Lbn);
07298 
07299 _IRQL_requires_max_(APC_LEVEL)
07300 NTKERNELAPI
07301 BOOLEAN
07302 NTAPI
07303 FsRtlLookupLastLargeMcbEntryAndIndex(
07304   _In_ PLARGE_MCB OpaqueMcb,
07305   _Out_ PLONGLONG LargeVbn,
07306   _Out_ PLONGLONG LargeLbn,
07307   _Out_ PULONG Index);
07308 
07309 _IRQL_requires_max_(APC_LEVEL)
07310 NTKERNELAPI
07311 ULONG
07312 NTAPI
07313 FsRtlNumberOfRunsInLargeMcb(
07314   _In_ PLARGE_MCB Mcb);
07315 
07316 _Must_inspect_result_
07317 _IRQL_requires_max_(APC_LEVEL)
07318 NTKERNELAPI
07319 BOOLEAN
07320 NTAPI
07321 FsRtlGetNextLargeMcbEntry(
07322   _In_ PLARGE_MCB Mcb,
07323   _In_ ULONG RunIndex,
07324   _Out_ PLONGLONG Vbn,
07325   _Out_ PLONGLONG Lbn,
07326   _Out_ PLONGLONG SectorCount);
07327 
07328 _Must_inspect_result_
07329 _IRQL_requires_max_(APC_LEVEL)
07330 NTKERNELAPI
07331 BOOLEAN
07332 NTAPI
07333 FsRtlSplitLargeMcb(
07334   _Inout_ PLARGE_MCB Mcb,
07335   _In_ LONGLONG Vbn,
07336   _In_ LONGLONG Amount);
07337 
07338 _IRQL_requires_max_(APC_LEVEL)
07339 __drv_preferredFunction(FsRtlInitializeLargeMcb, "Obsolete")
07340 NTKERNELAPI
07341 VOID
07342 NTAPI
07343 FsRtlInitializeMcb(
07344   _Out_ PMCB Mcb,
07345   _In_ POOL_TYPE PoolType);
07346 
07347 _IRQL_requires_max_(APC_LEVEL)
07348 NTKERNELAPI
07349 VOID
07350 NTAPI
07351 FsRtlUninitializeMcb(
07352   _Inout_ PMCB Mcb);
07353 
07354 _IRQL_requires_max_(APC_LEVEL)
07355 NTKERNELAPI
07356 VOID
07357 NTAPI
07358 FsRtlTruncateMcb(
07359   _Inout_ PMCB Mcb,
07360   _In_ VBN Vbn);
07361 
07362 _IRQL_requires_max_(APC_LEVEL)
07363 NTKERNELAPI
07364 BOOLEAN
07365 NTAPI
07366 FsRtlAddMcbEntry(
07367   _Inout_ PMCB Mcb,
07368   _In_ VBN Vbn,
07369   _In_ LBN Lbn,
07370   _In_ ULONG SectorCount);
07371 
07372 _IRQL_requires_max_(APC_LEVEL)
07373 NTKERNELAPI
07374 VOID
07375 NTAPI
07376 FsRtlRemoveMcbEntry(
07377   _Inout_ PMCB Mcb,
07378   _In_ VBN Vbn,
07379   _In_ ULONG SectorCount);
07380 
07381 _IRQL_requires_max_(APC_LEVEL)
07382 NTKERNELAPI
07383 BOOLEAN
07384 NTAPI
07385 FsRtlLookupMcbEntry(
07386   _In_ PMCB Mcb,
07387   _In_ VBN Vbn,
07388   _Out_ PLBN Lbn,
07389   _Out_opt_ PULONG SectorCount,
07390   _Out_ PULONG Index);
07391 
07392 _IRQL_requires_max_(APC_LEVEL)
07393 NTKERNELAPI
07394 BOOLEAN
07395 NTAPI
07396 FsRtlLookupLastMcbEntry(
07397   _In_ PMCB Mcb,
07398   _Out_ PVBN Vbn,
07399   _Out_ PLBN Lbn);
07400 
07401 _IRQL_requires_max_(APC_LEVEL)
07402 NTKERNELAPI
07403 ULONG
07404 NTAPI
07405 FsRtlNumberOfRunsInMcb(
07406   _In_ PMCB Mcb);
07407 
07408 _Must_inspect_result_
07409 _IRQL_requires_max_(APC_LEVEL)
07410 NTKERNELAPI
07411 BOOLEAN
07412 NTAPI
07413 FsRtlGetNextMcbEntry(
07414   _In_ PMCB Mcb,
07415   _In_ ULONG RunIndex,
07416   _Out_ PVBN Vbn,
07417   _Out_ PLBN Lbn,
07418   _Out_ PULONG SectorCount);
07419 
07420 _IRQL_requires_max_(PASSIVE_LEVEL)
07421 NTKERNELAPI
07422 NTSTATUS
07423 NTAPI
07424 FsRtlBalanceReads(
07425   _In_ PDEVICE_OBJECT TargetDevice);
07426 
07427 _IRQL_requires_max_(APC_LEVEL)
07428 NTKERNELAPI
07429 VOID
07430 NTAPI
07431 FsRtlInitializeOplock(
07432   _Inout_ POPLOCK Oplock);
07433 
07434 _IRQL_requires_max_(APC_LEVEL)
07435 NTKERNELAPI
07436 VOID
07437 NTAPI
07438 FsRtlUninitializeOplock(
07439   _Inout_ POPLOCK Oplock);
07440 
07441 _Must_inspect_result_
07442 _IRQL_requires_max_(APC_LEVEL)
07443 NTKERNELAPI
07444 NTSTATUS
07445 NTAPI
07446 FsRtlOplockFsctrl(
07447   _In_ POPLOCK Oplock,
07448   _In_ PIRP Irp,
07449   _In_ ULONG OpenCount);
07450 
07451 _When_(CompletionRoutine != NULL, _Must_inspect_result_)
07452 _IRQL_requires_max_(APC_LEVEL)
07453 NTKERNELAPI
07454 NTSTATUS
07455 NTAPI
07456 FsRtlCheckOplock(
07457   _In_ POPLOCK Oplock,
07458   _In_ PIRP Irp,
07459   _In_opt_ PVOID Context,
07460   _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
07461   _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine);
07462 
07463 _Must_inspect_result_
07464 _IRQL_requires_max_(APC_LEVEL)
07465 NTKERNELAPI
07466 BOOLEAN
07467 NTAPI
07468 FsRtlOplockIsFastIoPossible(
07469   _In_ POPLOCK Oplock);
07470 
07471 _Must_inspect_result_
07472 _IRQL_requires_max_(APC_LEVEL)
07473 NTKERNELAPI
07474 BOOLEAN
07475 NTAPI
07476 FsRtlCurrentBatchOplock(
07477   _In_ POPLOCK Oplock);
07478 
07479 _IRQL_requires_max_(APC_LEVEL)
07480 NTKERNELAPI
07481 NTSTATUS
07482 NTAPI
07483 FsRtlNotifyVolumeEvent(
07484   _In_ PFILE_OBJECT FileObject,
07485   _In_ ULONG EventCode);
07486 
07487 _IRQL_requires_max_(APC_LEVEL)
07488 NTKERNELAPI
07489 VOID
07490 NTAPI
07491 FsRtlNotifyInitializeSync(
07492   _In_ PNOTIFY_SYNC *NotifySync);
07493 
07494 _IRQL_requires_max_(APC_LEVEL)
07495 NTKERNELAPI
07496 VOID
07497 NTAPI
07498 FsRtlNotifyUninitializeSync(
07499   _In_ PNOTIFY_SYNC *NotifySync);
07500 
07501 _IRQL_requires_max_(PASSIVE_LEVEL)
07502 NTKERNELAPI
07503 VOID
07504 NTAPI
07505 FsRtlNotifyFullChangeDirectory(
07506   _In_ PNOTIFY_SYNC NotifySync,
07507   _In_ PLIST_ENTRY NotifyList,
07508   _In_ PVOID FsContext,
07509   _In_ PSTRING FullDirectoryName,
07510   _In_ BOOLEAN WatchTree,
07511   _In_ BOOLEAN IgnoreBuffer,
07512   _In_ ULONG CompletionFilter,
07513   _In_opt_ PIRP NotifyIrp,
07514   _In_opt_ PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
07515   _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectContext);
07516 
07517 _IRQL_requires_max_(PASSIVE_LEVEL)
07518 NTKERNELAPI
07519 VOID
07520 NTAPI
07521 FsRtlNotifyFilterReportChange(
07522   _In_ PNOTIFY_SYNC NotifySync,
07523   _In_ PLIST_ENTRY NotifyList,
07524   _In_ PSTRING FullTargetName,
07525   _In_ USHORT TargetNameOffset,
07526   _In_opt_ PSTRING StreamName,
07527   _In_opt_ PSTRING NormalizedParentName,
07528   _In_ ULONG FilterMatch,
07529   _In_ ULONG Action,
07530   _In_opt_ PVOID TargetContext,
07531   _In_opt_ PVOID FilterContext);
07532 
07533 _IRQL_requires_max_(PASSIVE_LEVEL)
07534 NTKERNELAPI
07535 VOID
07536 NTAPI
07537 FsRtlNotifyFullReportChange(
07538   _In_ PNOTIFY_SYNC NotifySync,
07539   _In_ PLIST_ENTRY NotifyList,
07540   _In_ PSTRING FullTargetName,
07541   _In_ USHORT TargetNameOffset,
07542   _In_opt_ PSTRING StreamName,
07543   _In_opt_ PSTRING NormalizedParentName,
07544   _In_ ULONG FilterMatch,
07545   _In_ ULONG Action,
07546   _In_opt_ PVOID TargetContext);
07547 
07548 _IRQL_requires_max_(APC_LEVEL)
07549 NTKERNELAPI
07550 VOID
07551 NTAPI
07552 FsRtlNotifyCleanup(
07553   _In_ PNOTIFY_SYNC NotifySync,
07554   _In_ PLIST_ENTRY NotifyList,
07555   _In_ PVOID FsContext);
07556 
07557 _IRQL_requires_max_(PASSIVE_LEVEL)
07558 NTKERNELAPI
07559 VOID
07560 NTAPI
07561 FsRtlDissectName(
07562   _In_ UNICODE_STRING Name,
07563   _Out_ PUNICODE_STRING FirstPart,
07564   _Out_ PUNICODE_STRING RemainingPart);
07565 
07566 _Must_inspect_result_
07567 _IRQL_requires_max_(PASSIVE_LEVEL)
07568 NTKERNELAPI
07569 BOOLEAN
07570 NTAPI
07571 FsRtlDoesNameContainWildCards(
07572   _In_ PUNICODE_STRING Name);
07573 
07574 _Must_inspect_result_
07575 _IRQL_requires_max_(PASSIVE_LEVEL)
07576 NTKERNELAPI
07577 BOOLEAN
07578 NTAPI
07579 FsRtlAreNamesEqual(
07580   _In_ PCUNICODE_STRING Name1,
07581   _In_ PCUNICODE_STRING Name2,
07582   _In_ BOOLEAN IgnoreCase,
07583   _In_reads_opt_(0x10000) PCWCH UpcaseTable);
07584 
07585 _Must_inspect_result_
07586 _IRQL_requires_max_(PASSIVE_LEVEL)
07587 NTKERNELAPI
07588 BOOLEAN
07589 NTAPI
07590 FsRtlIsNameInExpression(
07591   _In_ PUNICODE_STRING Expression,
07592   _In_ PUNICODE_STRING Name,
07593   _In_ BOOLEAN IgnoreCase,
07594   _In_opt_ PWCHAR UpcaseTable);
07595 
07596 _IRQL_requires_max_(DISPATCH_LEVEL)
07597 NTKERNELAPI
07598 VOID
07599 NTAPI
07600 FsRtlPostPagingFileStackOverflow(
07601   _In_ PVOID Context,
07602   _In_ PKEVENT Event,
07603   _In_ PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
07604 
07605 _IRQL_requires_max_(DISPATCH_LEVEL)
07606 NTKERNELAPI
07607 VOID
07608 NTAPI
07609 FsRtlPostStackOverflow (
07610   _In_ PVOID Context,
07611   _In_ PKEVENT Event,
07612   _In_ PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
07613 
07614 _Must_inspect_result_
07615 _IRQL_requires_max_(PASSIVE_LEVEL)
07616 NTKERNELAPI
07617 NTSTATUS
07618 NTAPI
07619 FsRtlRegisterUncProvider(
07620   _Out_ PHANDLE MupHandle,
07621   _In_ PUNICODE_STRING RedirectorDeviceName,
07622   _In_ BOOLEAN MailslotsSupported);
07623 
07624 _IRQL_requires_max_(PASSIVE_LEVEL)
07625 NTKERNELAPI
07626 VOID
07627 NTAPI
07628 FsRtlDeregisterUncProvider(
07629   _In_ HANDLE Handle);
07630 
07631 _IRQL_requires_max_(APC_LEVEL)
07632 NTKERNELAPI
07633 VOID
07634 NTAPI
07635 FsRtlTeardownPerStreamContexts(
07636   _In_ PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
07637 
07638 _Must_inspect_result_
07639 _IRQL_requires_max_(APC_LEVEL)
07640 NTKERNELAPI
07641 NTSTATUS
07642 NTAPI
07643 FsRtlCreateSectionForDataScan(
07644   _Out_ PHANDLE SectionHandle,
07645   _Outptr_ PVOID *SectionObject,
07646   _Out_opt_ PLARGE_INTEGER SectionFileSize,
07647   _In_ PFILE_OBJECT FileObject,
07648   _In_ ACCESS_MASK DesiredAccess,
07649   _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes,
07650   _In_opt_ PLARGE_INTEGER MaximumSize,
07651   _In_ ULONG SectionPageProtection,
07652   _In_ ULONG AllocationAttributes,
07653   _In_ ULONG Flags);
07654 
07655 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
07656 
07657 #if (NTDDI_VERSION >= NTDDI_WINXP)
07658 
07659 _IRQL_requires_max_(PASSIVE_LEVEL)
07660 NTKERNELAPI
07661 VOID
07662 NTAPI
07663 FsRtlNotifyFilterChangeDirectory(
07664   _In_ PNOTIFY_SYNC NotifySync,
07665   _In_ PLIST_ENTRY NotifyList,
07666   _In_ PVOID FsContext,
07667   _In_ PSTRING FullDirectoryName,
07668   _In_ BOOLEAN WatchTree,
07669   _In_ BOOLEAN IgnoreBuffer,
07670   _In_ ULONG CompletionFilter,
07671   _In_opt_ PIRP NotifyIrp,
07672   _In_opt_ PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
07673   _In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectContext,
07674   _In_opt_ PFILTER_REPORT_CHANGE FilterCallback);
07675 
07676 _Must_inspect_result_
07677 _IRQL_requires_max_(APC_LEVEL)
07678 NTKERNELAPI
07679 NTSTATUS
07680 NTAPI
07681 FsRtlInsertPerStreamContext(
07682   _In_ PFSRTL_ADVANCED_FCB_HEADER PerStreamContext,
07683   _In_ PFSRTL_PER_STREAM_CONTEXT Ptr);
07684 
07685 _Must_inspect_result_
07686 _IRQL_requires_max_(APC_LEVEL)
07687 NTKERNELAPI
07688 PFSRTL_PER_STREAM_CONTEXT
07689 NTAPI
07690 FsRtlLookupPerStreamContextInternal(
07691   _In_ PFSRTL_ADVANCED_FCB_HEADER StreamContext,
07692   _In_opt_ PVOID OwnerId,
07693   _In_opt_ PVOID InstanceId);
07694 
07695 _Must_inspect_result_
07696 _IRQL_requires_max_(APC_LEVEL)
07697 NTKERNELAPI
07698 PFSRTL_PER_STREAM_CONTEXT
07699 NTAPI
07700 FsRtlRemovePerStreamContext(
07701   _In_ PFSRTL_ADVANCED_FCB_HEADER StreamContext,
07702   _In_opt_ PVOID OwnerId,
07703   _In_opt_ PVOID InstanceId);
07704 
07705 NTKERNELAPI
07706 VOID
07707 NTAPI
07708 FsRtlIncrementCcFastReadNotPossible(
07709   VOID);
07710 
07711 NTKERNELAPI
07712 VOID
07713 NTAPI
07714 FsRtlIncrementCcFastReadWait(VOID);
07715 
07716 NTKERNELAPI
07717 VOID
07718 NTAPI
07719 FsRtlIncrementCcFastReadNoWait(VOID);
07720 
07721 NTKERNELAPI
07722 VOID
07723 NTAPI
07724 FsRtlIncrementCcFastReadResourceMiss(VOID);
07725 
07726 _IRQL_requires_max_(APC_LEVEL)
07727 NTKERNELAPI
07728 LOGICAL
07729 NTAPI
07730 FsRtlIsPagingFile(
07731   _In_ PFILE_OBJECT FileObject);
07732 
07733 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
07734 
07735 #if (NTDDI_VERSION >= NTDDI_WS03)
07736 
07737 _IRQL_requires_max_(APC_LEVEL)
07738 NTKERNELAPI
07739 VOID
07740 NTAPI
07741 FsRtlInitializeBaseMcb(
07742   _Out_ PBASE_MCB Mcb,
07743   _In_ POOL_TYPE PoolType);
07744 
07745 _IRQL_requires_max_(APC_LEVEL)
07746 NTKERNELAPI
07747 VOID
07748 NTAPI
07749 FsRtlUninitializeBaseMcb(
07750   _In_ PBASE_MCB Mcb);
07751 
07752 _IRQL_requires_max_(APC_LEVEL)
07753 NTKERNELAPI
07754 VOID
07755 NTAPI
07756 FsRtlResetBaseMcb(
07757   _Out_ PBASE_MCB Mcb);
07758 
07759 _IRQL_requires_max_(APC_LEVEL)
07760 NTKERNELAPI
07761 VOID
07762 NTAPI
07763 FsRtlTruncateBaseMcb(
07764   _Inout_ PBASE_MCB Mcb,
07765   _In_ LONGLONG Vbn);
07766 
07767 _IRQL_requires_max_(APC_LEVEL)
07768 NTKERNELAPI
07769 BOOLEAN
07770 NTAPI
07771 FsRtlAddBaseMcbEntry(
07772   _Inout_ PBASE_MCB Mcb,
07773   _In_ LONGLONG Vbn,
07774   _In_ LONGLONG Lbn,
07775   _In_ LONGLONG SectorCount);
07776 
07777 _IRQL_requires_max_(APC_LEVEL)
07778 NTKERNELAPI
07779 BOOLEAN
07780 NTAPI
07781 FsRtlRemoveBaseMcbEntry(
07782   _Inout_ PBASE_MCB Mcb,
07783   _In_ LONGLONG Vbn,
07784   _In_ LONGLONG SectorCount);
07785 
07786 _IRQL_requires_max_(APC_LEVEL)
07787 NTKERNELAPI
07788 BOOLEAN
07789 NTAPI
07790 FsRtlLookupBaseMcbEntry(
07791   _In_ PBASE_MCB Mcb,
07792   _In_ LONGLONG Vbn,
07793   _Out_opt_ PLONGLONG Lbn,
07794   _Out_opt_ PLONGLONG SectorCountFromLbn,
07795   _Out_opt_ PLONGLONG StartingLbn,
07796   _Out_opt_ PLONGLONG SectorCountFromStartingLbn,
07797   _Out_opt_ PULONG Index);
07798 
07799 _IRQL_requires_max_(APC_LEVEL)
07800 NTKERNELAPI
07801 BOOLEAN
07802 NTAPI
07803 FsRtlLookupLastBaseMcbEntry(
07804   _In_ PBASE_MCB Mcb,
07805   _Out_ PLONGLONG Vbn,
07806   _Out_ PLONGLONG Lbn);
07807 
07808 _IRQL_requires_max_(APC_LEVEL)
07809 NTKERNELAPI
07810 BOOLEAN
07811 NTAPI
07812 FsRtlLookupLastBaseMcbEntryAndIndex(
07813   _In_ PBASE_MCB OpaqueMcb,
07814   _Inout_ PLONGLONG LargeVbn,
07815   _Inout_ PLONGLONG LargeLbn,
07816   _Inout_ PULONG Index);
07817 
07818 _IRQL_requires_max_(APC_LEVEL)
07819 NTKERNELAPI
07820 ULONG
07821 NTAPI
07822 FsRtlNumberOfRunsInBaseMcb(
07823   _In_ PBASE_MCB Mcb);
07824 
07825 _IRQL_requires_max_(APC_LEVEL)
07826 NTKERNELAPI
07827 BOOLEAN
07828 NTAPI
07829 FsRtlGetNextBaseMcbEntry(
07830   _In_ PBASE_MCB Mcb,
07831   _In_ ULONG RunIndex,
07832   _Out_ PLONGLONG Vbn,
07833   _Out_ PLONGLONG Lbn,
07834   _Out_ PLONGLONG SectorCount);
07835 
07836 _IRQL_requires_max_(APC_LEVEL)
07837 NTKERNELAPI
07838 BOOLEAN
07839 NTAPI
07840 FsRtlSplitBaseMcb(
07841   _Inout_ PBASE_MCB Mcb,
07842   _In_ LONGLONG Vbn,
07843   _In_ LONGLONG Amount);
07844 
07845 #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
07846 
07847 #if (NTDDI_VERSION >= NTDDI_VISTA)
07848 
07849 _When_(!Flags & MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE, _Must_inspect_result_)
07850 _IRQL_requires_max_(APC_LEVEL)
07851 BOOLEAN
07852 NTAPI
07853 FsRtlInitializeBaseMcbEx(
07854   _Out_ PBASE_MCB Mcb,
07855   _In_ POOL_TYPE PoolType,
07856   _In_ USHORT Flags);
07857 
07858 _Must_inspect_result_
07859 _IRQL_requires_max_(APC_LEVEL)
07860 NTSTATUS
07861 NTAPI
07862 FsRtlAddBaseMcbEntryEx(
07863   _Inout_ PBASE_MCB Mcb,
07864   _In_ LONGLONG Vbn,
07865   _In_ LONGLONG Lbn,
07866   _In_ LONGLONG SectorCount);
07867 
07868 _Must_inspect_result_
07869 _IRQL_requires_max_(APC_LEVEL)
07870 NTKERNELAPI
07871 BOOLEAN
07872 NTAPI
07873 FsRtlCurrentOplock(
07874   _In_ POPLOCK Oplock);
07875 
07876 _Must_inspect_result_
07877 _IRQL_requires_max_(APC_LEVEL)
07878 NTKERNELAPI
07879 NTSTATUS
07880 NTAPI
07881 FsRtlOplockBreakToNone(
07882   _Inout_ POPLOCK Oplock,
07883   _In_opt_ PIO_STACK_LOCATION IrpSp,
07884   _In_ PIRP Irp,
07885   _In_opt_ PVOID Context,
07886   _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
07887   _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine);
07888 
07889 _IRQL_requires_max_(DISPATCH_LEVEL)
07890 NTKERNELAPI
07891 NTSTATUS
07892 NTAPI
07893 FsRtlNotifyVolumeEventEx(
07894   _In_ PFILE_OBJECT FileObject,
07895   _In_ ULONG EventCode,
07896   _In_ PTARGET_DEVICE_CUSTOM_NOTIFICATION Event);
07897 
07898 _IRQL_requires_max_(APC_LEVEL)
07899 NTKERNELAPI
07900 VOID
07901 NTAPI
07902 FsRtlNotifyCleanupAll(
07903   _In_ PNOTIFY_SYNC NotifySync,
07904   _In_ PLIST_ENTRY NotifyList);
07905 
07906 _Must_inspect_result_
07907 _IRQL_requires_max_(PASSIVE_LEVEL)
07908 NTSTATUS
07909 NTAPI
07910 FsRtlRegisterUncProviderEx(
07911   _Out_ PHANDLE MupHandle,
07912   _In_ PUNICODE_STRING RedirDevName,
07913   _In_ PDEVICE_OBJECT DeviceObject,
07914   _In_ ULONG Flags);
07915 
07916 _Must_inspect_result_
07917 _When_(Irp!=NULL, _IRQL_requires_max_(PASSIVE_LEVEL))
07918 _When_(Irp==NULL, _IRQL_requires_max_(APC_LEVEL))
07919 NTKERNELAPI
07920 NTSTATUS
07921 NTAPI
07922 FsRtlCancellableWaitForSingleObject(
07923   _In_ PVOID Object,
07924   _In_opt_ PLARGE_INTEGER Timeout,
07925   _In_opt_ PIRP Irp);
07926 
07927 _Must_inspect_result_
07928 _When_(Irp != NULL, _IRQL_requires_max_(PASSIVE_LEVEL))
07929 _When_(Irp == NULL, _IRQL_requires_max_(APC_LEVEL))
07930 NTKERNELAPI
07931 NTSTATUS
07932 NTAPI
07933 FsRtlCancellableWaitForMultipleObjects(
07934   _In_ ULONG Count,
07935   _In_reads_(Count) PVOID ObjectArray[],
07936   _In_ WAIT_TYPE WaitType,
07937   _In_opt_ PLARGE_INTEGER Timeout,
07938   _In_opt_ PKWAIT_BLOCK WaitBlockArray,
07939   _In_opt_ PIRP Irp);
07940 
07941 _Must_inspect_result_
07942 _IRQL_requires_max_(APC_LEVEL)
07943 NTKERNELAPI
07944 NTSTATUS
07945 NTAPI
07946 FsRtlMupGetProviderInfoFromFileObject(
07947   _In_ PFILE_OBJECT pFileObject,
07948   _In_ ULONG Level,
07949   _Out_writes_bytes_(*pBufferSize) PVOID pBuffer,
07950   _Inout_ PULONG pBufferSize);
07951 
07952 _Must_inspect_result_
07953 _IRQL_requires_max_(APC_LEVEL)
07954 NTKERNELAPI
07955 NTSTATUS
07956 NTAPI
07957 FsRtlMupGetProviderIdFromName(
07958   _In_ PUNICODE_STRING pProviderName,
07959   _Out_ PULONG32 pProviderId);
07960 
07961 NTKERNELAPI
07962 VOID
07963 NTAPI
07964 FsRtlIncrementCcFastMdlReadWait(VOID);
07965 
07966 _Must_inspect_result_
07967 _IRQL_requires_max_(PASSIVE_LEVEL)
07968 NTKERNELAPI
07969 NTSTATUS
07970 NTAPI
07971 FsRtlValidateReparsePointBuffer(
07972   _In_ ULONG BufferLength,
07973   _In_reads_bytes_(BufferLength) PREPARSE_DATA_BUFFER ReparseBuffer);
07974 
07975 _Must_inspect_result_
07976 _IRQL_requires_max_(PASSIVE_LEVEL)
07977 NTKERNELAPI
07978 NTSTATUS
07979 NTAPI
07980 FsRtlRemoveDotsFromPath(
07981   _Inout_updates_bytes_(PathLength) PWSTR OriginalString,
07982   _In_ USHORT PathLength,
07983   _Out_ USHORT *NewLength);
07984 
07985 _Must_inspect_result_
07986 _IRQL_requires_max_(APC_LEVEL)
07987 NTKERNELAPI
07988 NTSTATUS
07989 NTAPI
07990 FsRtlAllocateExtraCreateParameterList(
07991   _In_ FSRTL_ALLOCATE_ECPLIST_FLAGS Flags,
07992   _Outptr_ PECP_LIST *EcpList);
07993 
07994 _IRQL_requires_max_(APC_LEVEL)
07995 NTKERNELAPI
07996 VOID
07997 NTAPI
07998 FsRtlFreeExtraCreateParameterList(
07999   _In_ PECP_LIST EcpList);
08000 
08001 _Must_inspect_result_
08002 _IRQL_requires_max_(APC_LEVEL)
08003 NTKERNELAPI
08004 NTSTATUS
08005 NTAPI
08006 FsRtlAllocateExtraCreateParameter(
08007   _In_ LPCGUID EcpType,
08008   _In_ ULONG SizeOfContext,
08009   _In_ FSRTL_ALLOCATE_ECP_FLAGS Flags,
08010   _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
08011   _In_ ULONG PoolTag,
08012   _Outptr_result_bytebuffer_(SizeOfContext) PVOID *EcpContext);
08013 
08014 _IRQL_requires_max_(APC_LEVEL)
08015 NTKERNELAPI
08016 VOID
08017 NTAPI
08018 FsRtlFreeExtraCreateParameter(
08019   _In_ PVOID EcpContext);
08020 
08021 _When_(Flags|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL, _IRQL_requires_max_(DISPATCH_LEVEL))
08022 _When_(!(Flags|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL), _IRQL_requires_max_(APC_LEVEL))
08023 NTKERNELAPI
08024 VOID
08025 NTAPI
08026 FsRtlInitExtraCreateParameterLookasideList(
08027   _Inout_ PVOID Lookaside,
08028   _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags,
08029   _In_ SIZE_T Size,
08030   _In_ ULONG Tag);
08031 
08032 _When_(Flags|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL, _IRQL_requires_max_(DISPATCH_LEVEL))
08033 _When_(!(Flags|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL), _IRQL_requires_max_(APC_LEVEL))
08034 VOID
08035 NTAPI
08036 FsRtlDeleteExtraCreateParameterLookasideList(
08037   _Inout_ PVOID Lookaside,
08038   _In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags);
08039 
08040 _Must_inspect_result_
08041 _IRQL_requires_max_(APC_LEVEL)
08042 NTKERNELAPI
08043 NTSTATUS
08044 NTAPI
08045 FsRtlAllocateExtraCreateParameterFromLookasideList(
08046   _In_ LPCGUID EcpType,
08047   ULONG SizeOfContext,
08048   _In_ FSRTL_ALLOCATE_ECP_FLAGS Flags,
08049   _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
08050   _Inout_ PVOID LookasideList,
08051   _Outptr_ PVOID *EcpContext);
08052 
08053 _Must_inspect_result_
08054 _IRQL_requires_max_(APC_LEVEL)
08055 NTKERNELAPI
08056 NTSTATUS
08057 NTAPI
08058 FsRtlInsertExtraCreateParameter(
08059   _Inout_ PECP_LIST EcpList,
08060   _Inout_ PVOID EcpContext);
08061 
08062 _Must_inspect_result_
08063 _IRQL_requires_max_(APC_LEVEL)
08064 NTKERNELAPI
08065 NTSTATUS
08066 NTAPI
08067 FsRtlFindExtraCreateParameter(
08068   _In_ PECP_LIST EcpList,
08069   _In_ LPCGUID EcpType,
08070   _Outptr_opt_ PVOID *EcpContext,
08071   _Out_opt_ ULONG *EcpContextSize);
08072 
08073 _Must_inspect_result_
08074 _IRQL_requires_max_(APC_LEVEL)
08075 NTKERNELAPI
08076 NTSTATUS
08077 NTAPI
08078 FsRtlRemoveExtraCreateParameter(
08079   _Inout_ PECP_LIST EcpList,
08080   _In_ LPCGUID EcpType,
08081   _Outptr_ PVOID *EcpContext,
08082   _Out_opt_ ULONG *EcpContextSize);
08083 
08084 _Must_inspect_result_
08085 _IRQL_requires_max_(APC_LEVEL)
08086 NTKERNELAPI
08087 NTSTATUS
08088 NTAPI
08089 FsRtlGetEcpListFromIrp(
08090   _In_ PIRP Irp,
08091   _Outptr_result_maybenull_ PECP_LIST *EcpList);
08092 
08093 _Must_inspect_result_
08094 _IRQL_requires_max_(APC_LEVEL)
08095 NTKERNELAPI
08096 NTSTATUS
08097 NTAPI
08098 FsRtlSetEcpListIntoIrp(
08099   _Inout_ PIRP Irp,
08100   _In_ PECP_LIST EcpList);
08101 
08102 _Must_inspect_result_
08103 _IRQL_requires_max_(APC_LEVEL)
08104 NTKERNELAPI
08105 NTSTATUS
08106 NTAPI
08107 FsRtlGetNextExtraCreateParameter(
08108   _In_ PECP_LIST EcpList,
08109   _In_opt_ PVOID CurrentEcpContext,
08110   _Out_opt_ LPGUID NextEcpType,
08111   _Outptr_opt_ PVOID *NextEcpContext,
08112   _Out_opt_ ULONG *NextEcpContextSize);
08113 
08114 _IRQL_requires_max_(APC_LEVEL)
08115 NTKERNELAPI
08116 VOID
08117 NTAPI
08118 FsRtlAcknowledgeEcp(
08119   _In_ PVOID EcpContext);
08120 
08121 _IRQL_requires_max_(APC_LEVEL)
08122 NTKERNELAPI
08123 BOOLEAN
08124 NTAPI
08125 FsRtlIsEcpAcknowledged(
08126   _In_ PVOID EcpContext);
08127 
08128 _IRQL_requires_max_(APC_LEVEL)
08129 NTKERNELAPI
08130 BOOLEAN
08131 NTAPI
08132 FsRtlIsEcpFromUserMode(
08133   _In_ PVOID EcpContext);
08134 
08135 _Must_inspect_result_
08136 _IRQL_requires_max_(PASSIVE_LEVEL)
08137 NTKERNELAPI
08138 NTSTATUS
08139 NTAPI
08140 FsRtlChangeBackingFileObject(
08141   _In_opt_ PFILE_OBJECT CurrentFileObject,
08142   _In_ PFILE_OBJECT NewFileObject,
08143   _In_ FSRTL_CHANGE_BACKING_TYPE ChangeBackingType,
08144   _In_ ULONG Flags);
08145 
08146 _Must_inspect_result_
08147 _IRQL_requires_max_(APC_LEVEL)
08148 NTKERNELAPI
08149 NTSTATUS
08150 NTAPI
08151 FsRtlLogCcFlushError(
08152   _In_ PUNICODE_STRING FileName,
08153   _In_ PDEVICE_OBJECT DeviceObject,
08154   _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
08155   _In_ NTSTATUS FlushError,
08156   _In_ ULONG Flags);
08157 
08158 _IRQL_requires_max_(APC_LEVEL)
08159 NTKERNELAPI
08160 BOOLEAN
08161 NTAPI
08162 FsRtlAreVolumeStartupApplicationsComplete(VOID);
08163 
08164 NTKERNELAPI
08165 ULONG
08166 NTAPI
08167 FsRtlQueryMaximumVirtualDiskNestingLevel(VOID);
08168 
08169 NTKERNELAPI
08170 NTSTATUS
08171 NTAPI
08172 FsRtlGetVirtualDiskNestingLevel(
08173   _In_ PDEVICE_OBJECT DeviceObject,
08174   _Out_ PULONG NestingLevel,
08175   _Out_opt_ PULONG NestingFlags);
08176 
08177 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
08178 
08179 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
08180 _When_(Flags | OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK, _Must_inspect_result_)
08181 _IRQL_requires_max_(APC_LEVEL)
08182 NTKERNELAPI
08183 NTSTATUS
08184 NTAPI
08185 FsRtlCheckOplockEx(
08186   _In_ POPLOCK Oplock,
08187   _In_ PIRP Irp,
08188   _In_ ULONG Flags,
08189   _In_opt_ PVOID Context,
08190   _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
08191   _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine);
08192 
08193 #endif
08194 
08195 #if (NTDDI_VERSION >= NTDDI_WIN7)
08196 
08197 _IRQL_requires_max_(APC_LEVEL)
08198 NTKERNELAPI
08199 BOOLEAN
08200 NTAPI
08201 FsRtlAreThereCurrentOrInProgressFileLocks(
08202   _In_ PFILE_LOCK FileLock);
08203 
08204 _Must_inspect_result_
08205 _IRQL_requires_max_(APC_LEVEL)
08206 NTKERNELAPI
08207 BOOLEAN
08208 NTAPI
08209 FsRtlOplockIsSharedRequest(
08210   _In_ PIRP Irp);
08211 
08212 _Must_inspect_result_
08213 _IRQL_requires_max_(APC_LEVEL)
08214 NTKERNELAPI
08215 NTSTATUS
08216 NTAPI
08217 FsRtlOplockBreakH(
08218   _In_ POPLOCK Oplock,
08219   _In_ PIRP Irp,
08220   _In_ ULONG Flags,
08221   _In_opt_ PVOID Context,
08222   _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
08223   _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine);
08224 
08225 _IRQL_requires_max_(APC_LEVEL)
08226 NTKERNELAPI
08227 BOOLEAN
08228 NTAPI
08229 FsRtlCurrentOplockH(
08230   _In_ POPLOCK Oplock);
08231 
08232 _Must_inspect_result_
08233 _IRQL_requires_max_(APC_LEVEL)
08234 NTKERNELAPI
08235 NTSTATUS
08236 NTAPI
08237 FsRtlOplockBreakToNoneEx(
08238   _Inout_ POPLOCK Oplock,
08239   _In_ PIRP Irp,
08240   _In_ ULONG Flags,
08241   _In_opt_ PVOID Context,
08242   _In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
08243   _In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine);
08244 
08245 _Must_inspect_result_
08246 _IRQL_requires_max_(APC_LEVEL)
08247 NTKERNELAPI
08248 NTSTATUS
08249 NTAPI
08250 FsRtlOplockFsctrlEx(
08251   _In_ POPLOCK Oplock,
08252   _In_ PIRP Irp,
08253   _In_ ULONG OpenCount,
08254   _In_ ULONG Flags);
08255 
08256 _IRQL_requires_max_(APC_LEVEL)
08257 NTKERNELAPI
08258 BOOLEAN
08259 NTAPI
08260 FsRtlOplockKeysEqual(
08261   _In_opt_ PFILE_OBJECT Fo1,
08262   _In_opt_ PFILE_OBJECT Fo2);
08263 
08264 NTKERNELAPI
08265 NTSTATUS
08266 NTAPI
08267 FsRtlInitializeExtraCreateParameterList(
08268   _Inout_ PECP_LIST EcpList);
08269 
08270 NTKERNELAPI
08271 VOID
08272 NTAPI
08273 FsRtlInitializeExtraCreateParameter(
08274   _Out_ PECP_HEADER Ecp,
08275   _In_ ULONG EcpFlags,
08276   _In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
08277   _In_ ULONG TotalSize,
08278   _In_ LPCGUID EcpType,
08279   _In_opt_ PVOID ListAllocatedFrom);
08280 
08281 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
08282 
08283 _Must_inspect_result_
08284 _IRQL_requires_max_(APC_LEVEL)
08285 NTKERNELAPI
08286 NTSTATUS
08287 NTAPI
08288 FsRtlInsertPerFileContext(
08289   _In_ PVOID* PerFileContextPointer,
08290   _In_ PFSRTL_PER_FILE_CONTEXT Ptr);
08291 
08292 _Must_inspect_result_
08293 _IRQL_requires_max_(APC_LEVEL)
08294 NTKERNELAPI
08295 PFSRTL_PER_FILE_CONTEXT
08296 NTAPI
08297 FsRtlLookupPerFileContext(
08298   _In_ PVOID* PerFileContextPointer,
08299   _In_opt_ PVOID OwnerId,
08300   _In_opt_ PVOID InstanceId);
08301 
08302 _Must_inspect_result_
08303 _IRQL_requires_max_(APC_LEVEL)
08304 NTKERNELAPI
08305 PFSRTL_PER_FILE_CONTEXT
08306 NTAPI
08307 FsRtlRemovePerFileContext(
08308   _In_ PVOID* PerFileContextPointer,
08309   _In_opt_ PVOID OwnerId,
08310   _In_opt_ PVOID InstanceId);
08311 
08312 _IRQL_requires_max_(APC_LEVEL)
08313 NTKERNELAPI
08314 VOID
08315 NTAPI
08316 FsRtlTeardownPerFileContexts(
08317   _In_ PVOID* PerFileContextPointer);
08318 
08319 _Must_inspect_result_
08320 _IRQL_requires_max_(APC_LEVEL)
08321 NTKERNELAPI
08322 NTSTATUS
08323 NTAPI
08324 FsRtlInsertPerFileObjectContext(
08325   _In_ PFILE_OBJECT FileObject,
08326   _In_ PFSRTL_PER_FILEOBJECT_CONTEXT Ptr);
08327 
08328 _Must_inspect_result_
08329 _IRQL_requires_max_(APC_LEVEL)
08330 NTKERNELAPI
08331 PFSRTL_PER_FILEOBJECT_CONTEXT
08332 NTAPI
08333 FsRtlLookupPerFileObjectContext(
08334   _In_ PFILE_OBJECT FileObject,
08335   _In_opt_ PVOID OwnerId,
08336   _In_opt_ PVOID InstanceId);
08337 
08338 _Must_inspect_result_
08339 _IRQL_requires_max_(APC_LEVEL)
08340 NTKERNELAPI
08341 PFSRTL_PER_FILEOBJECT_CONTEXT
08342 NTAPI
08343 FsRtlRemovePerFileObjectContext(
08344   _In_ PFILE_OBJECT FileObject,
08345   _In_opt_ PVOID OwnerId,
08346   _In_opt_ PVOID InstanceId);
08347 
08348 #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) (       \
08349      FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11)   \
08350 )
08351 
08352 #define FsRtlAreThereCurrentFileLocks(FL) ( \
08353     ((FL)->FastIoIsQuestionable)            \
08354 )
08355 
08356 #define FsRtlIncrementLockRequestsInProgress(FL) {                           \
08357     ASSERT( (FL)->LockRequestsInProgress >= 0 );                             \
08358     (void)                                                                   \
08359     (InterlockedIncrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
08360 }
08361 
08362 #define FsRtlDecrementLockRequestsInProgress(FL) {                           \
08363     ASSERT( (FL)->LockRequestsInProgress > 0 );                              \
08364     (void)                                                                   \
08365     (InterlockedDecrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
08366 }
08367 
08368 /* GCC compatible definition, MS one is retarded */
08369 extern NTKERNELAPI const UCHAR * const FsRtlLegalAnsiCharacterArray;
08370 #define LEGAL_ANSI_CHARACTER_ARRAY        FsRtlLegalAnsiCharacterArray
08371 
08372 #define FsRtlIsAnsiCharacterWild(C) (                                       \
08373     FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \
08374 )
08375 
08376 #define FsRtlIsAnsiCharacterLegalFat(C, WILD) (                                \
08377     FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_FAT_LEGAL) |       \
08378                                         ((WILD) ? FSRTL_WILD_CHARACTER : 0 ))  \
08379 )
08380 
08381 #define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) (                               \
08382     FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) |      \
08383                                         ((WILD) ? FSRTL_WILD_CHARACTER : 0 ))  \
08384 )
08385 
08386 #define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) (                               \
08387     FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) |      \
08388                                         ((WILD) ? FSRTL_WILD_CHARACTER : 0 ))  \
08389 )
08390 
08391 #define FsRtlIsAnsiCharacterLegalNtfsStream(C,WILD_OK) (                    \
08392     FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_NTFS_STREAM_LEGAL)   \
08393 )
08394 
08395 #define FsRtlIsAnsiCharacterLegal(C,FLAGS) (          \
08396     FsRtlTestAnsiCharacter((C), TRUE, FALSE, (FLAGS)) \
08397 )
08398 
08399 #define FsRtlTestAnsiCharacter(C, DEFAULT_RET, WILD_OK, FLAGS) (            \
08400         ((SCHAR)(C) < 0) ? DEFAULT_RET :                                    \
08401                            FlagOn( LEGAL_ANSI_CHARACTER_ARRAY[(C)],         \
08402                                    (FLAGS) |                                \
08403                                    ((WILD_OK) ? FSRTL_WILD_CHARACTER : 0) ) \
08404 )
08405 
08406 #define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) (                               \
08407     (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE :                           \
08408               (NLS_MB_CODE_PAGE_TAG &&                                      \
08409                (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0)))          \
08410 )
08411 
08412 #define FsRtlIsUnicodeCharacterWild(C) (                                    \
08413     (((C) >= 0x40) ?                                                        \
08414     FALSE :                                                                 \
08415     FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER ))       \
08416 )
08417 
08418 #define FsRtlInitPerFileContext( _fc, _owner, _inst, _cb)   \
08419     ((_fc)->OwnerId = (_owner),                               \
08420      (_fc)->InstanceId = (_inst),                             \
08421      (_fc)->FreeCallback = (_cb))
08422 
08423 #define FsRtlGetPerFileContextPointer(_fo) \
08424     (FsRtlSupportsPerFileContexts(_fo) ? \
08425         FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer : \
08426         NULL)
08427 
08428 #define FsRtlSupportsPerFileContexts(_fo)                     \
08429     ((FsRtlGetPerStreamContextPointer(_fo) != NULL) &&        \
08430      (FsRtlGetPerStreamContextPointer(_fo)->Version >= FSRTL_FCB_HEADER_V1) &&  \
08431      (FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer != NULL))
08432 
08433 #define FsRtlSetupAdvancedHeaderEx( _advhdr, _fmutx, _fctxptr )                     \
08434 {                                                                                   \
08435     FsRtlSetupAdvancedHeader( _advhdr, _fmutx );                                    \
08436     if ((_fctxptr) != NULL) {                                                       \
08437         (_advhdr)->FileContextSupportPointer = (_fctxptr);                          \
08438     }                                                                               \
08439 }
08440 
08441 #define FsRtlGetPerStreamContextPointer(FO) (   \
08442     (PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext \
08443 )
08444 
08445 #define FsRtlInitPerStreamContext(PSC, O, I, FC) ( \
08446     (PSC)->OwnerId = (O),                          \
08447     (PSC)->InstanceId = (I),                       \
08448     (PSC)->FreeCallback = (FC)                     \
08449 )
08450 
08451 #define FsRtlSupportsPerStreamContexts(FO) (                       \
08452     (BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) &&     \
08453               FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \
08454               FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS))               \
08455 )
08456 
08457 #define FsRtlLookupPerStreamContext(_sc, _oid, _iid)                          \
08458  (((NULL != (_sc)) &&                                                         \
08459    FlagOn((_sc)->Flags2,FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS) &&              \
08460    !IsListEmpty(&(_sc)->FilterContexts)) ?                                    \
08461         FsRtlLookupPerStreamContextInternal((_sc), (_oid), (_iid)) :          \
08462         NULL)
08463 
08464 _IRQL_requires_max_(APC_LEVEL)
08465 FORCEINLINE
08466 VOID
08467 NTAPI
08468 FsRtlSetupAdvancedHeader(
08469   _In_ PVOID AdvHdr,
08470   _In_ PFAST_MUTEX FMutex )
08471 {
08472   PFSRTL_ADVANCED_FCB_HEADER localAdvHdr = (PFSRTL_ADVANCED_FCB_HEADER)AdvHdr;
08473 
08474   localAdvHdr->Flags |= FSRTL_FLAG_ADVANCED_HEADER;
08475   localAdvHdr->Flags2 |= FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS;
08476 #if (NTDDI_VERSION >= NTDDI_VISTA)
08477   localAdvHdr->Version = FSRTL_FCB_HEADER_V1;
08478 #else
08479   localAdvHdr->Version = FSRTL_FCB_HEADER_V0;
08480 #endif
08481   InitializeListHead( &localAdvHdr->FilterContexts );
08482   if (FMutex != NULL) {
08483     localAdvHdr->FastMutex = FMutex;
08484   }
08485 #if (NTDDI_VERSION >= NTDDI_VISTA)
08486   *((PULONG_PTR)(&localAdvHdr->PushLock)) = 0;
08487   localAdvHdr->FileContextSupportPointer = NULL;
08488 #endif
08489 }
08490 
08491 #define FsRtlInitPerFileObjectContext(_fc, _owner, _inst)         \
08492            ((_fc)->OwnerId = (_owner), (_fc)->InstanceId = (_inst))
08493 
08494 #define FsRtlCompleteRequest(IRP,STATUS) {         \
08495     (IRP)->IoStatus.Status = (STATUS);             \
08496     IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
08497 }
08498 /* Common Cache Types */
08499 
08500 #define VACB_MAPPING_GRANULARITY        (0x40000)
08501 #define VACB_OFFSET_SHIFT               (18)
08502 
08503 typedef struct _PUBLIC_BCB {
08504   CSHORT NodeTypeCode;
08505   CSHORT NodeByteSize;
08506   ULONG MappedLength;
08507   LARGE_INTEGER MappedFileOffset;
08508 } PUBLIC_BCB, *PPUBLIC_BCB;
08509 
08510 typedef struct _CC_FILE_SIZES {
08511   LARGE_INTEGER AllocationSize;
08512   LARGE_INTEGER FileSize;
08513   LARGE_INTEGER ValidDataLength;
08514 } CC_FILE_SIZES, *PCC_FILE_SIZES;
08515 
08516 typedef BOOLEAN
08517 (NTAPI *PACQUIRE_FOR_LAZY_WRITE) (
08518   _In_ PVOID Context,
08519   _In_ BOOLEAN Wait);
08520 
08521 typedef VOID
08522 (NTAPI *PRELEASE_FROM_LAZY_WRITE) (
08523   _In_ PVOID Context);
08524 
08525 typedef BOOLEAN
08526 (NTAPI *PACQUIRE_FOR_READ_AHEAD) (
08527   _In_ PVOID Context,
08528   _In_ BOOLEAN Wait);
08529 
08530 typedef VOID
08531 (NTAPI *PRELEASE_FROM_READ_AHEAD) (
08532   _In_ PVOID Context);
08533 
08534 typedef struct _CACHE_MANAGER_CALLBACKS {
08535   PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite;
08536   PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite;
08537   PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead;
08538   PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead;
08539 } CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
08540 
08541 typedef struct _CACHE_UNINITIALIZE_EVENT {
08542   struct _CACHE_UNINITIALIZE_EVENT *Next;
08543   KEVENT Event;
08544 } CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT;
08545 
08546 typedef VOID
08547 (NTAPI *PDIRTY_PAGE_ROUTINE) (
08548   _In_ PFILE_OBJECT FileObject,
08549   _In_ PLARGE_INTEGER FileOffset,
08550   _In_ ULONG Length,
08551   _In_ PLARGE_INTEGER OldestLsn,
08552   _In_ PLARGE_INTEGER NewestLsn,
08553   _In_ PVOID Context1,
08554   _In_ PVOID Context2);
08555 
08556 typedef VOID
08557 (NTAPI *PFLUSH_TO_LSN) (
08558   _In_ PVOID LogHandle,
08559   _In_ LARGE_INTEGER Lsn);
08560 
08561 typedef VOID
08562 (NTAPI *PCC_POST_DEFERRED_WRITE) (
08563   _In_ PVOID Context1,
08564   _In_ PVOID Context2);
08565 
08566 #define UNINITIALIZE_CACHE_MAPS          (1)
08567 #define DO_NOT_RETRY_PURGE               (2)
08568 #define DO_NOT_PURGE_DIRTY_PAGES         (0x4)
08569 
08570 #define CC_FLUSH_AND_PURGE_NO_PURGE     (0x1)
08571 /* Common Cache Functions */
08572 
08573 #define CcIsFileCached(FO) (                                                         \
08574     ((FO)->SectionObjectPointer != NULL) &&                                          \
08575     (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
08576 )
08577 
08578 extern ULONG CcFastMdlReadWait;
08579 
08580 #if (NTDDI_VERSION >= NTDDI_WIN2K)
08581 
08582 NTKERNELAPI
08583 VOID
08584 NTAPI
08585 CcInitializeCacheMap(
08586   _In_ PFILE_OBJECT FileObject,
08587   _In_ PCC_FILE_SIZES FileSizes,
08588   _In_ BOOLEAN PinAccess,
08589   _In_ PCACHE_MANAGER_CALLBACKS Callbacks,
08590   _In_ PVOID LazyWriteContext);
08591 
08592 NTKERNELAPI
08593 BOOLEAN
08594 NTAPI
08595 CcUninitializeCacheMap(
08596   _In_ PFILE_OBJECT FileObject,
08597   _In_opt_ PLARGE_INTEGER TruncateSize,
08598   _In_opt_ PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent);
08599 
08600 NTKERNELAPI
08601 VOID
08602 NTAPI
08603 CcSetFileSizes(
08604   IN PFILE_OBJECT FileObject,
08605   IN PCC_FILE_SIZES FileSizes);
08606 
08607 NTKERNELAPI
08608 VOID
08609 NTAPI
08610 CcSetDirtyPageThreshold(
08611   _In_ PFILE_OBJECT FileObject,
08612   _In_ ULONG DirtyPageThreshold);
08613 
08614 NTKERNELAPI
08615 VOID
08616 NTAPI
08617 CcFlushCache(
08618   _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
08619   _In_opt_ PLARGE_INTEGER FileOffset,
08620   _In_ ULONG Length,
08621   _Out_opt_ PIO_STATUS_BLOCK IoStatus);
08622 
08623 NTKERNELAPI
08624 LARGE_INTEGER
08625 NTAPI
08626 CcGetFlushedValidData(
08627   _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
08628   _In_ BOOLEAN BcbListHeld);
08629 
08630 NTKERNELAPI
08631 BOOLEAN
08632 NTAPI
08633 CcZeroData(
08634   _In_ PFILE_OBJECT FileObject,
08635   _In_ PLARGE_INTEGER StartOffset,
08636   _In_ PLARGE_INTEGER EndOffset,
08637   _In_ BOOLEAN Wait);
08638 
08639 NTKERNELAPI
08640 PVOID
08641 NTAPI
08642 CcRemapBcb(
08643   _In_ PVOID Bcb);
08644 
08645 NTKERNELAPI
08646 VOID
08647 NTAPI
08648 CcRepinBcb(
08649   _In_ PVOID Bcb);
08650 
08651 NTKERNELAPI
08652 VOID
08653 NTAPI
08654 CcUnpinRepinnedBcb(
08655   _In_ PVOID Bcb,
08656   _In_ BOOLEAN WriteThrough,
08657   _Out_ PIO_STATUS_BLOCK IoStatus);
08658 
08659 NTKERNELAPI
08660 PFILE_OBJECT
08661 NTAPI
08662 CcGetFileObjectFromSectionPtrs(
08663   _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer);
08664 
08665 NTKERNELAPI
08666 PFILE_OBJECT
08667 NTAPI
08668 CcGetFileObjectFromBcb(
08669   _In_ PVOID Bcb);
08670 
08671 NTKERNELAPI
08672 BOOLEAN
08673 NTAPI
08674 CcCanIWrite(
08675   _In_opt_ PFILE_OBJECT FileObject,
08676   _In_ ULONG BytesToWrite,
08677   _In_ BOOLEAN Wait,
08678   _In_ BOOLEAN Retrying);
08679 
08680 NTKERNELAPI
08681 VOID
08682 NTAPI
08683 CcDeferWrite(
08684   _In_ PFILE_OBJECT FileObject,
08685   _In_ PCC_POST_DEFERRED_WRITE PostRoutine,
08686   _In_ PVOID Context1,
08687   _In_ PVOID Context2,
08688   _In_ ULONG BytesToWrite,
08689   _In_ BOOLEAN Retrying);
08690 
08691 NTKERNELAPI
08692 BOOLEAN
08693 NTAPI
08694 CcCopyRead(
08695   _In_ PFILE_OBJECT FileObject,
08696   _In_ PLARGE_INTEGER FileOffset,
08697   _In_ ULONG Length,
08698   _In_ BOOLEAN Wait,
08699   _Out_writes_bytes_(Length) PVOID Buffer,
08700   _Out_ PIO_STATUS_BLOCK IoStatus);
08701 
08702 NTKERNELAPI
08703 VOID
08704 NTAPI
08705 CcFastCopyRead(
08706   _In_ PFILE_OBJECT FileObject,
08707   _In_ ULONG FileOffset,
08708   _In_ ULONG Length,
08709   _In_ ULONG PageCount,
08710   _Out_writes_bytes_(Length) PVOID Buffer,
08711   _Out_ PIO_STATUS_BLOCK IoStatus);
08712 
08713 NTKERNELAPI
08714 BOOLEAN
08715 NTAPI
08716 CcCopyWrite(
08717   _In_ PFILE_OBJECT FileObject,
08718   _In_ PLARGE_INTEGER FileOffset,
08719   _In_ ULONG Length,
08720   _In_ BOOLEAN Wait,
08721   _In_reads_bytes_(Length) PVOID Buffer);
08722 
08723 NTKERNELAPI
08724 VOID
08725 NTAPI
08726 CcFastCopyWrite(
08727   _In_ PFILE_OBJECT FileObject,
08728   _In_ ULONG FileOffset,
08729   _In_ ULONG Length,
08730   _In_reads_bytes_(Length) PVOID Buffer);
08731 
08732 NTKERNELAPI
08733 VOID
08734 NTAPI
08735 CcMdlRead(
08736   _In_ PFILE_OBJECT FileObject,
08737   _In_ PLARGE_INTEGER FileOffset,
08738   _In_ ULONG Length,
08739   _Out_ PMDL *MdlChain,
08740   _Out_ PIO_STATUS_BLOCK IoStatus);
08741 
08742 NTKERNELAPI
08743 VOID
08744 NTAPI
08745 CcMdlReadComplete(
08746   _In_ PFILE_OBJECT FileObject,
08747   _In_ PMDL MdlChain);
08748 
08749 NTKERNELAPI
08750 VOID
08751 NTAPI
08752 CcPrepareMdlWrite(
08753   _In_ PFILE_OBJECT FileObject,
08754   _In_ PLARGE_INTEGER FileOffset,
08755   _In_ ULONG Length,
08756   _Out_ PMDL *MdlChain,
08757   _Out_ PIO_STATUS_BLOCK IoStatus);
08758 
08759 NTKERNELAPI
08760 VOID
08761 NTAPI
08762 CcMdlWriteComplete(
08763   _In_ PFILE_OBJECT FileObject,
08764   _In_ PLARGE_INTEGER FileOffset,
08765   _In_ PMDL MdlChain);
08766 
08767 NTKERNELAPI
08768 VOID
08769 NTAPI
08770 CcScheduleReadAhead(
08771   _In_ PFILE_OBJECT FileObject,
08772   _In_ PLARGE_INTEGER FileOffset,
08773   _In_ ULONG Length);
08774 
08775 NTKERNELAPI
08776 NTSTATUS
08777 NTAPI
08778 CcWaitForCurrentLazyWriterActivity(VOID);
08779 
08780 NTKERNELAPI
08781 VOID
08782 NTAPI
08783 CcSetReadAheadGranularity(
08784   _In_ PFILE_OBJECT FileObject,
08785   _In_ ULONG Granularity);
08786 
08787 NTKERNELAPI
08788 BOOLEAN
08789 NTAPI
08790 CcPinRead(
08791   _In_ PFILE_OBJECT FileObject,
08792   _In_ PLARGE_INTEGER FileOffset,
08793   _In_ ULONG Length,
08794   _In_ ULONG Flags,
08795   _Outptr_ PVOID *Bcb,
08796   _Outptr_result_bytebuffer_(Length) PVOID *Buffer);
08797 
08798 NTKERNELAPI
08799 BOOLEAN
08800 NTAPI
08801 CcPinMappedData(
08802   _In_ PFILE_OBJECT FileObject,
08803   _In_ PLARGE_INTEGER FileOffset,
08804   _In_ ULONG Length,
08805   _In_ ULONG Flags,
08806   _Inout_ PVOID *Bcb);
08807 
08808 NTKERNELAPI
08809 BOOLEAN
08810 NTAPI
08811 CcPreparePinWrite(
08812   _In_ PFILE_OBJECT FileObject,
08813   _In_ PLARGE_INTEGER FileOffset,
08814   _In_ ULONG Length,
08815   _In_ BOOLEAN Zero,
08816   _In_ ULONG Flags,
08817   _Outptr_ PVOID *Bcb,
08818   _Outptr_result_bytebuffer_(Length) PVOID *Buffer);
08819 
08820 NTKERNELAPI
08821 VOID
08822 NTAPI
08823 CcSetDirtyPinnedData(
08824   _In_ PVOID BcbVoid,
08825   _In_opt_ PLARGE_INTEGER Lsn);
08826 
08827 NTKERNELAPI
08828 VOID
08829 NTAPI
08830 CcUnpinData(
08831   _In_ PVOID Bcb);
08832 
08833 NTKERNELAPI
08834 VOID
08835 NTAPI
08836 CcSetBcbOwnerPointer(
08837   _In_ PVOID Bcb,
08838   _In_ PVOID OwnerPointer);
08839 
08840 NTKERNELAPI
08841 VOID
08842 NTAPI
08843 CcUnpinDataForThread(
08844   _In_ PVOID Bcb,
08845   _In_ ERESOURCE_THREAD ResourceThreadId);
08846 
08847 NTKERNELAPI
08848 VOID
08849 NTAPI
08850 CcSetAdditionalCacheAttributes(
08851   _In_ PFILE_OBJECT FileObject,
08852   _In_ BOOLEAN DisableReadAhead,
08853   _In_ BOOLEAN DisableWriteBehind);
08854 
08855 NTKERNELAPI
08856 BOOLEAN
08857 NTAPI
08858 CcIsThereDirtyData(
08859   _In_ PVPB Vpb);
08860 
08861 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
08862 
08863 #if (NTDDI_VERSION >= NTDDI_WINXP)
08864 
08865 NTKERNELAPI
08866 VOID
08867 NTAPI
08868 CcMdlWriteAbort(
08869   _In_ PFILE_OBJECT FileObject,
08870   _In_ PMDL MdlChain);
08871 
08872 NTKERNELAPI
08873 VOID
08874 NTAPI
08875 CcSetLogHandleForFile(
08876   _In_ PFILE_OBJECT FileObject,
08877   _In_ PVOID LogHandle,
08878   _In_ PFLUSH_TO_LSN FlushToLsnRoutine);
08879 
08880 NTKERNELAPI
08881 LARGE_INTEGER
08882 NTAPI
08883 CcGetDirtyPages(
08884   _In_ PVOID LogHandle,
08885   _In_ PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
08886   _In_ PVOID Context1,
08887   _In_ PVOID Context2);
08888 
08889 #endif
08890 
08891 #if (NTDDI_VERSION >= NTDDI_WINXP)
08892 NTKERNELAPI
08893 BOOLEAN
08894 NTAPI
08895 CcMapData(
08896   _In_ PFILE_OBJECT FileObject,
08897   _In_ PLARGE_INTEGER FileOffset,
08898   _In_ ULONG Length,
08899   _In_ ULONG Flags,
08900   _Outptr_ PVOID *Bcb,
08901   _Outptr_result_bytebuffer_(Length) PVOID *Buffer);
08902 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
08903 NTKERNELAPI
08904 BOOLEAN
08905 NTAPI
08906 CcMapData(
08907   _In_ PFILE_OBJECT FileObject,
08908   _In_ PLARGE_INTEGER FileOffset,
08909   _In_ ULONG Length,
08910   _In_ BOOLEAN Wait,
08911   _Outptr_ PVOID *Bcb,
08912   _Outptr_result_bytebuffer_(Length) PVOID *Buffer);
08913 #endif
08914 
08915 #if (NTDDI_VERSION >= NTDDI_VISTA)
08916 
08917 NTKERNELAPI
08918 NTSTATUS
08919 NTAPI
08920 CcSetFileSizesEx(
08921   _In_ PFILE_OBJECT FileObject,
08922   _In_ PCC_FILE_SIZES FileSizes);
08923 
08924 NTKERNELAPI
08925 PFILE_OBJECT
08926 NTAPI
08927 CcGetFileObjectFromSectionPtrsRef(
08928   _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer);
08929 
08930 NTKERNELAPI
08931 VOID
08932 NTAPI
08933 CcSetParallelFlushFile(
08934   _In_ PFILE_OBJECT FileObject,
08935   _In_ BOOLEAN EnableParallelFlush);
08936 
08937 NTKERNELAPI
08938 BOOLEAN
08939 CcIsThereDirtyDataEx(
08940   _In_ PVPB Vpb,
08941   _In_opt_ PULONG NumberOfDirtyPages);
08942 
08943 #endif
08944 
08945 #if (NTDDI_VERSION >= NTDDI_WIN7)
08946 NTKERNELAPI
08947 VOID
08948 NTAPI
08949 CcCoherencyFlushAndPurgeCache(
08950   _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
08951   _In_opt_ PLARGE_INTEGER FileOffset,
08952   _In_ ULONG Length,
08953   _Out_ PIO_STATUS_BLOCK IoStatus,
08954   _In_opt_ ULONG Flags);
08955 #endif
08956 
08957 #define CcGetFileSizePointer(FO) (                                     \
08958     ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
08959 )
08960 
08961 #if (NTDDI_VERSION >= NTDDI_VISTA)
08962 NTKERNELAPI
08963 BOOLEAN
08964 NTAPI
08965 CcPurgeCacheSection(
08966   _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
08967   _In_opt_ PLARGE_INTEGER FileOffset,
08968   _In_ ULONG Length,
08969   _In_ ULONG Flags);
08970 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
08971 NTKERNELAPI
08972 BOOLEAN
08973 NTAPI
08974 CcPurgeCacheSection(
08975   _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
08976   _In_opt_ PLARGE_INTEGER FileOffset,
08977   _In_ ULONG Length,
08978   _In_ BOOLEAN UninitializeCacheMaps);
08979 #endif
08980 
08981 #if (NTDDI_VERSION >= NTDDI_WIN7)
08982 NTKERNELAPI
08983 BOOLEAN
08984 NTAPI
08985 CcCopyWriteWontFlush(
08986   _In_ PFILE_OBJECT FileObject,
08987   _In_ PLARGE_INTEGER FileOffset,
08988   _In_ ULONG Length);
08989 #else
08990 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
08991 #endif
08992 
08993 #define CcReadAhead(FO, FOFF, LEN) (                \
08994     if ((LEN) >= 256) {                             \
08995         CcScheduleReadAhead((FO), (FOFF), (LEN));   \
08996     }                                               \
08997 )
08998 /******************************************************************************
08999  *                            ZwXxx Functions                                 *
09000  ******************************************************************************/
09001 
09002 
09003 
09004 _IRQL_requires_max_(PASSIVE_LEVEL)
09005 NTSYSAPI
09006 NTSTATUS
09007 NTAPI
09008 ZwQueryEaFile(
09009   _In_ HANDLE FileHandle,
09010   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
09011   _Out_writes_bytes_(Length) PVOID Buffer,
09012   _In_ ULONG Length,
09013   _In_ BOOLEAN ReturnSingleEntry,
09014   _In_reads_bytes_opt_(EaListLength) PVOID EaList,
09015   _In_ ULONG EaListLength,
09016   _In_opt_ PULONG EaIndex,
09017   _In_ BOOLEAN RestartScan);
09018 
09019 _IRQL_requires_max_(PASSIVE_LEVEL)
09020 NTSYSAPI
09021 NTSTATUS
09022 NTAPI
09023 ZwSetEaFile(
09024   _In_ HANDLE FileHandle,
09025   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
09026   _In_reads_bytes_(Length) PVOID Buffer,
09027   _In_ ULONG Length);
09028 
09029 _IRQL_requires_max_(PASSIVE_LEVEL)
09030 NTSYSAPI
09031 NTSTATUS
09032 NTAPI
09033 ZwDuplicateToken(
09034   _In_ HANDLE ExistingTokenHandle,
09035   _In_ ACCESS_MASK DesiredAccess,
09036   _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes,
09037   _In_ BOOLEAN EffectiveOnly,
09038   _In_ TOKEN_TYPE TokenType,
09039   _Out_ PHANDLE NewTokenHandle);
09040 
09041 #if (NTDDI_VERSION >= NTDDI_WIN2K)
09042 
09043 _IRQL_requires_max_(PASSIVE_LEVEL)
09044 NTSYSAPI
09045 NTSTATUS
09046 NTAPI
09047 ZwQueryObject(
09048   _In_opt_ HANDLE Handle,
09049   _In_ OBJECT_INFORMATION_CLASS ObjectInformationClass,
09050   _Out_writes_bytes_opt_(ObjectInformationLength) PVOID ObjectInformation,
09051   _In_ ULONG ObjectInformationLength,
09052   _Out_opt_ PULONG ReturnLength);
09053 
09054 _IRQL_requires_max_(PASSIVE_LEVEL)
09055 NTSYSAPI
09056 NTSTATUS
09057 NTAPI
09058 ZwNotifyChangeKey(
09059   _In_ HANDLE KeyHandle,
09060   _In_opt_ HANDLE EventHandle,
09061   _In_opt_ PIO_APC_ROUTINE ApcRoutine,
09062   _In_opt_ PVOID ApcContext,
09063   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
09064   _In_ ULONG NotifyFilter,
09065   _In_ BOOLEAN WatchSubtree,
09066   _Out_writes_bytes_opt_(BufferLength) PVOID Buffer,
09067   _In_ ULONG BufferLength,
09068   _In_ BOOLEAN Asynchronous);
09069 
09070 _IRQL_requires_max_(PASSIVE_LEVEL)
09071 NTSYSAPI
09072 NTSTATUS
09073 NTAPI
09074 ZwCreateEvent(
09075   _Out_ PHANDLE EventHandle,
09076   _In_ ACCESS_MASK DesiredAccess,
09077   _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes,
09078   _In_ EVENT_TYPE EventType,
09079   _In_ BOOLEAN InitialState);
09080 
09081 _IRQL_requires_max_(PASSIVE_LEVEL)
09082 NTSYSAPI
09083 NTSTATUS
09084 NTAPI
09085 ZwDeleteFile(
09086   _In_ POBJECT_ATTRIBUTES ObjectAttributes);
09087 
09088 _IRQL_requires_max_(PASSIVE_LEVEL)
09089 NTSYSAPI
09090 NTSTATUS
09091 NTAPI
09092 ZwQueryDirectoryFile(
09093   _In_ HANDLE FileHandle,
09094   _In_opt_ HANDLE Event,
09095   _In_opt_ PIO_APC_ROUTINE ApcRoutine,
09096   _In_opt_ PVOID ApcContext,
09097   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
09098   _Out_writes_bytes_(Length) PVOID FileInformation,
09099   _In_ ULONG Length,
09100   _In_ FILE_INFORMATION_CLASS FileInformationClass,
09101   _In_ BOOLEAN ReturnSingleEntry,
09102   _In_opt_ PUNICODE_STRING FileName,
09103   _In_ BOOLEAN RestartScan);
09104 
09105 _IRQL_requires_max_(PASSIVE_LEVEL)
09106 NTSYSAPI
09107 NTSTATUS
09108 NTAPI
09109 ZwSetVolumeInformationFile(
09110   _In_ HANDLE FileHandle,
09111   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
09112   _In_reads_bytes_(Length) PVOID FsInformation,
09113   _In_ ULONG Length,
09114   _In_ FS_INFORMATION_CLASS FsInformationClass);
09115 
09116 _IRQL_requires_max_(PASSIVE_LEVEL)
09117 NTSYSAPI
09118 NTSTATUS
09119 NTAPI
09120 ZwFsControlFile(
09121   _In_ HANDLE FileHandle,
09122   _In_opt_ HANDLE Event,
09123   _In_opt_ PIO_APC_ROUTINE ApcRoutine,
09124   _In_opt_ PVOID ApcContext,
09125   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
09126   _In_ ULONG FsControlCode,
09127   _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
09128   _In_ ULONG InputBufferLength,
09129   _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer,
09130   _In_ ULONG OutputBufferLength);
09131 
09132 _IRQL_requires_max_(PASSIVE_LEVEL)
09133 NTSYSAPI
09134 NTSTATUS
09135 NTAPI
09136 ZwDuplicateObject(
09137   _In_ HANDLE SourceProcessHandle,
09138   _In_ HANDLE SourceHandle,
09139   _In_opt_ HANDLE TargetProcessHandle,
09140   _Out_opt_ PHANDLE TargetHandle,
09141   _In_ ACCESS_MASK DesiredAccess,
09142   _In_ ULONG HandleAttributes,
09143   _In_ ULONG Options);
09144 
09145 _IRQL_requires_max_(PASSIVE_LEVEL)
09146 NTSYSAPI
09147 NTSTATUS
09148 NTAPI
09149 ZwOpenDirectoryObject(
09150   _Out_ PHANDLE DirectoryHandle,
09151   _In_ ACCESS_MASK DesiredAccess,
09152   _In_ POBJECT_ATTRIBUTES ObjectAttributes);
09153 
09154 _IRQL_requires_max_(PASSIVE_LEVEL)
09155 _When_(return==0, __drv_allocatesMem(Region))
09156 NTSYSAPI
09157 NTSTATUS
09158 NTAPI
09159 ZwAllocateVirtualMemory(
09160   _In_ HANDLE ProcessHandle,
09161   _Inout_ PVOID *BaseAddress,
09162   _In_ ULONG_PTR ZeroBits,
09163   _Inout_ PSIZE_T RegionSize,
09164   _In_ ULONG AllocationType,
09165   _In_ ULONG Protect);
09166 
09167 _IRQL_requires_max_(PASSIVE_LEVEL)
09168 _When_(return==0, __drv_freesMem(Region))
09169 NTSYSAPI
09170 NTSTATUS
09171 NTAPI
09172 ZwFreeVirtualMemory(
09173   _In_ HANDLE ProcessHandle,
09174   _Inout_ PVOID *BaseAddress,
09175   _Inout_ PSIZE_T RegionSize,
09176   _In_ ULONG FreeType);
09177 
09178 _When_(Timeout == NULL, _IRQL_requires_max_(APC_LEVEL))
09179 _When_(Timeout->QuadPart != 0, _IRQL_requires_max_(APC_LEVEL))
09180 _When_(Timeout->QuadPart == 0, _IRQL_requires_max_(DISPATCH_LEVEL))
09181 NTSYSAPI
09182 NTSTATUS
09183 NTAPI
09184 ZwWaitForSingleObject(
09185   _In_ HANDLE Handle,
09186   _In_ BOOLEAN Alertable,
09187   _In_opt_ PLARGE_INTEGER Timeout);
09188 
09189 _IRQL_requires_max_(DISPATCH_LEVEL)
09190 NTSYSAPI
09191 NTSTATUS
09192 NTAPI
09193 ZwSetEvent(
09194   _In_ HANDLE EventHandle,
09195   _Out_opt_ PLONG PreviousState);
09196 
09197 _IRQL_requires_max_(APC_LEVEL)
09198 NTSYSAPI
09199 NTSTATUS
09200 NTAPI
09201 ZwFlushVirtualMemory(
09202   _In_ HANDLE ProcessHandle,
09203   _Inout_ PVOID *BaseAddress,
09204   _Inout_ PSIZE_T RegionSize,
09205   _Out_ PIO_STATUS_BLOCK IoStatusBlock);
09206 
09207 _IRQL_requires_max_(PASSIVE_LEVEL)
09208 NTSYSAPI
09209 NTSTATUS
09210 NTAPI
09211 ZwQueryInformationToken(
09212   _In_ HANDLE TokenHandle,
09213   _In_ TOKEN_INFORMATION_CLASS TokenInformationClass,
09214   _Out_writes_bytes_to_opt_(Length,*ResultLength) PVOID TokenInformation,
09215   _In_ ULONG Length,
09216   _Out_ PULONG ResultLength);
09217 
09218 _IRQL_requires_max_(PASSIVE_LEVEL)
09219 NTSYSAPI
09220 NTSTATUS
09221 NTAPI
09222 ZwSetSecurityObject(
09223   _In_ HANDLE Handle,
09224   _In_ SECURITY_INFORMATION SecurityInformation,
09225   _In_ PSECURITY_DESCRIPTOR SecurityDescriptor);
09226 
09227 _IRQL_requires_max_(PASSIVE_LEVEL)
09228 NTSYSAPI
09229 NTSTATUS
09230 NTAPI
09231 ZwQuerySecurityObject(
09232   _In_ HANDLE FileHandle,
09233   _In_ SECURITY_INFORMATION SecurityInformation,
09234   _Out_writes_bytes_to_(Length,*ResultLength) PSECURITY_DESCRIPTOR SecurityDescriptor,
09235   _In_ ULONG Length,
09236   _Out_ PULONG ResultLength);
09237 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
09238 
09239 #if (NTDDI_VERSION >= NTDDI_WINXP)
09240 
09241 _IRQL_requires_max_(PASSIVE_LEVEL)
09242 NTSYSAPI
09243 NTSTATUS
09244 NTAPI
09245 ZwOpenProcessTokenEx(
09246   _In_ HANDLE ProcessHandle,
09247   _In_ ACCESS_MASK DesiredAccess,
09248   _In_ ULONG HandleAttributes,
09249   _Out_ PHANDLE TokenHandle);
09250 
09251 _IRQL_requires_max_(PASSIVE_LEVEL)
09252 NTSYSAPI
09253 NTSTATUS
09254 NTAPI
09255 ZwOpenThreadTokenEx(
09256   _In_ HANDLE ThreadHandle,
09257   _In_ ACCESS_MASK DesiredAccess,
09258   _In_ BOOLEAN OpenAsSelf,
09259   _In_ ULONG HandleAttributes,
09260   _Out_ PHANDLE TokenHandle);
09261 
09262 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
09263 
09264 #if (NTDDI_VERSION >= NTDDI_VISTA)
09265 
09266 _IRQL_requires_max_(PASSIVE_LEVEL)
09267 NTSYSAPI
09268 NTSTATUS
09269 NTAPI
09270 ZwLockFile(
09271   _In_ HANDLE FileHandle,
09272   _In_opt_ HANDLE Event,
09273   _In_opt_ PIO_APC_ROUTINE ApcRoutine,
09274   _In_opt_ PVOID ApcContext,
09275   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
09276   _In_ PLARGE_INTEGER ByteOffset,
09277   _In_ PLARGE_INTEGER Length,
09278   _In_ ULONG Key,
09279   _In_ BOOLEAN FailImmediately,
09280   _In_ BOOLEAN ExclusiveLock);
09281 
09282 _IRQL_requires_max_(PASSIVE_LEVEL)
09283 NTSYSAPI
09284 NTSTATUS
09285 NTAPI
09286 ZwUnlockFile(
09287   _In_ HANDLE FileHandle,
09288   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
09289   _In_ PLARGE_INTEGER ByteOffset,
09290   _In_ PLARGE_INTEGER Length,
09291   _In_ ULONG Key);
09292 
09293 _IRQL_requires_max_(PASSIVE_LEVEL)
09294 NTSYSAPI
09295 NTSTATUS
09296 NTAPI
09297 ZwQueryQuotaInformationFile(
09298   _In_ HANDLE FileHandle,
09299   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
09300   _Out_writes_bytes_(Length) PVOID Buffer,
09301   _In_ ULONG Length,
09302   _In_ BOOLEAN ReturnSingleEntry,
09303   _In_reads_bytes_opt_(SidListLength) PVOID SidList,
09304   _In_ ULONG SidListLength,
09305   _In_opt_ PSID StartSid,
09306   _In_ BOOLEAN RestartScan);
09307 
09308 _IRQL_requires_max_(PASSIVE_LEVEL)
09309 NTSYSAPI
09310 NTSTATUS
09311 NTAPI
09312 ZwSetQuotaInformationFile(
09313   _In_ HANDLE FileHandle,
09314   _Out_ PIO_STATUS_BLOCK IoStatusBlock,
09315   _In_reads_bytes_(Length) PVOID Buffer,
09316   _In_ ULONG Length);
09317 
09318 _IRQL_requires_max_(PASSIVE_LEVEL)
09319 NTSYSAPI
09320 NTSTATUS
09321 NTAPI
09322 ZwFlushBuffersFile(
09323   _In_ HANDLE FileHandle,
09324   _Out_ PIO_STATUS_BLOCK IoStatusBlock);
09325 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
09326 #if (NTDDI_VERSION >= NTDDI_WIN7)
09327 
09328 _IRQL_requires_max_(PASSIVE_LEVEL)
09329 NTSYSAPI
09330 NTSTATUS
09331 NTAPI
09332 ZwSetInformationToken(
09333   _In_ HANDLE TokenHandle,
09334   _In_ TOKEN_INFORMATION_CLASS TokenInformationClass,
09335   _In_reads_bytes_(TokenInformationLength) PVOID TokenInformation,
09336   _In_ ULONG TokenInformationLength);
09337 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
09338 
09339 #ifndef __SSPI_H__
09340 #define __SSPI_H__
09341 
09342 // for ntifs.h:
09343 #define ISSP_LEVEL 32
09344 #define ISSP_MODE 0
09345 
09346 #ifdef MIDL_PASS
09347 #define MIDL_PROP(x) x
09348 #else
09349 #define MIDL_PROP(x)
09350 #endif
09351 
09352 #define SEC_TEXT TEXT
09353 #define SEC_FAR
09354 #define SEC_ENTRY __stdcall
09355 
09356 #if defined(_NO_KSECDD_IMPORT_)
09357 #define KSECDDDECLSPEC
09358 #else
09359 #define KSECDDDECLSPEC __declspec(dllimport)
09360 #endif
09361 
09362 #define SECQOP_WRAP_NO_ENCRYPT 0x80000001
09363 #define SECQOP_WRAP_OOB_DATA   0x40000000
09364 
09365 #define SECURITY_ENTRYPOINTW SEC_TEXT("InitSecurityInterfaceW")
09366 #define SECURITY_ENTRYPOINT SECURITY_ENTRYPOINTW
09367 
09368 #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION   1
09369 #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 2
09370 #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_3 3
09371 #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_4 4
09372 
09373 #define SECURITY_NATIVE_DREP  0x00000010
09374 #define SECURITY_NETWORK_DREP 0x00000000
09375 
09376 #define SECPKG_ID_NONE 0xFFFF
09377 
09378 #define SECPKG_CRED_ATTR_NAMES                1
09379 #define SECPKG_CRED_ATTR_SSI_PROVIDER         2
09380 
09381 #define SECPKG_ATTR_SIZES                     0
09382 #define SECPKG_ATTR_NAMES                     1
09383 #define SECPKG_ATTR_LIFESPAN                  2
09384 #define SECPKG_ATTR_DCE_INFO                  3
09385 #define SECPKG_ATTR_STREAM_SIZES              4
09386 #define SECPKG_ATTR_KEY_INFO                  5
09387 #define SECPKG_ATTR_AUTHORITY                 6
09388 #define SECPKG_ATTR_PROTO_INFO                7
09389 #define SECPKG_ATTR_PASSWORD_EXPIRY           8
09390 #define SECPKG_ATTR_SESSION_KEY               9
09391 #define SECPKG_ATTR_PACKAGE_INFO             10
09392 #define SECPKG_ATTR_USER_FLAGS               11
09393 #define SECPKG_ATTR_NEGOTIATION_INFO         12
09394 #define SECPKG_ATTR_NATIVE_NAMES             13
09395 #define SECPKG_ATTR_FLAGS                    14
09396 #define SECPKG_ATTR_USE_VALIDATED            15
09397 #define SECPKG_ATTR_CREDENTIAL_NAME          16
09398 #define SECPKG_ATTR_TARGET_INFORMATION       17
09399 #define SECPKG_ATTR_ACCESS_TOKEN             18
09400 #define SECPKG_ATTR_TARGET                   19
09401 #define SECPKG_ATTR_AUTHENTICATION_ID        20
09402 #define SECPKG_ATTR_LOGOFF_TIME              21
09403 #define SECPKG_ATTR_NEGO_KEYS                22
09404 #define SECPKG_ATTR_PROMPTING_NEEDED         24
09405 #define SECPKG_ATTR_UNIQUE_BINDINGS          25
09406 #define SECPKG_ATTR_ENDPOINT_BINDINGS        26
09407 #define SECPKG_ATTR_CLIENT_SPECIFIED_TARGET  27
09408 #define SECPKG_ATTR_LAST_CLIENT_TOKEN_STATUS 30
09409 #define SECPKG_ATTR_NEGO_PKG_INFO            31
09410 #define SECPKG_ATTR_NEGO_STATUS              32
09411 #define SECPKG_ATTR_CONTEXT_DELETED          33
09412 
09413 #define SECPKG_FLAG_INTEGRITY               0x00000001
09414 #define SECPKG_FLAG_PRIVACY                 0x00000002
09415 #define SECPKG_FLAG_TOKEN_ONLY              0x00000004
09416 #define SECPKG_FLAG_DATAGRAM                0x00000008
09417 #define SECPKG_FLAG_CONNECTION              0x00000010
09418 #define SECPKG_FLAG_MULTI_REQUIRED          0x00000020
09419 #define SECPKG_FLAG_CLIENT_ONLY             0x00000040
09420 #define SECPKG_FLAG_EXTENDED_ERROR          0x00000080
09421 #define SECPKG_FLAG_IMPERSONATION           0x00000100
09422 #define SECPKG_FLAG_ACCEPT_WIN32_NAME       0x00000200
09423 #define SECPKG_FLAG_STREAM                  0x00000400
09424 #define SECPKG_FLAG_NEGOTIABLE              0x00000800
09425 #define SECPKG_FLAG_GSS_COMPATIBLE          0x00001000
09426 #define SECPKG_FLAG_LOGON                   0x00002000
09427 #define SECPKG_FLAG_ASCII_BUFFERS           0x00004000
09428 #define SECPKG_FLAG_FRAGMENT                0x00008000
09429 #define SECPKG_FLAG_MUTUAL_AUTH             0x00010000
09430 #define SECPKG_FLAG_DELEGATION              0x00020000
09431 #define SECPKG_FLAG_READONLY_WITH_CHECKSUM  0x00040000
09432 #define SECPKG_FLAG_RESTRICTED_TOKENS       0x00080000
09433 #define SECPKG_FLAG_NEGO_EXTENDER           0x00100000
09434 #define SECPKG_FLAG_NEGOTIABLE2             0x00200000
09435 
09436 #define SECPKG_CRED_INBOUND                 0x00000001
09437 #define SECPKG_CRED_OUTBOUND                0x00000002
09438 #define SECPKG_CRED_BOTH                    0x00000003
09439 #define SECPKG_CRED_DEFAULT                 0x00000004
09440 #define SECPKG_CRED_RESERVED                0xF0000000
09441 #define SECPKG_CRED_AUTOLOGON_RESTRICTED    0x00000010
09442 #define SECPKG_CRED_PROCESS_POLICY_ONLY     0x00000020
09443 
09444 #define SECPKG_CONTEXT_EXPORT_RESET_NEW     0x00000001
09445 #define SECPKG_CONTEXT_EXPORT_DELETE_OLD    0x00000002
09446 #define SECPKG_CONTEXT_EXPORT_TO_KERNEL     0x00000004
09447 
09448 #define SECPKG_ATTR_SUBJECT_SECURITY_ATTRIBUTES 128
09449 #define SECPKG_ATTR_NEGO_INFO_FLAG_NO_KERBEROS 0x1
09450 #define SECPKG_ATTR_NEGO_INFO_FLAG_NO_NTLM     0x2
09451 
09452 #define SecPkgContext_NativeNames SecPkgContext_NativeNamesW
09453 #define PSecPkgContext_NativeNames PSecPkgContext_NativeNamesW
09454 
09455 #define SECBUFFER_VERSION 0
09456 
09457 #define SECBUFFER_EMPTY                 0
09458 #define SECBUFFER_DATA                  1
09459 #define SECBUFFER_TOKEN                 2
09460 #define SECBUFFER_PKG_PARAMS            3
09461 #define SECBUFFER_MISSING               4
09462 #define SECBUFFER_EXTRA                 5
09463 #define SECBUFFER_STREAM_TRAILER        6
09464 #define SECBUFFER_STREAM_HEADER         7
09465 #define SECBUFFER_NEGOTIATION_INFO      8
09466 #define SECBUFFER_PADDING               9
09467 #define SECBUFFER_STREAM               10
09468 #define SECBUFFER_MECHLIST             11
09469 #define SECBUFFER_MECHLIST_SIGNATURE   12
09470 #define SECBUFFER_TARGET               13
09471 #define SECBUFFER_CHANNEL_BINDINGS     14
09472 #define SECBUFFER_CHANGE_PASS_RESPONSE 15
09473 #define SECBUFFER_TARGET_HOST          16
09474 #define SECBUFFER_ALERT                17
09475 
09476 #define SECBUFFER_ATTRMASK                0xF0000000
09477 #define SECBUFFER_READONLY                0x80000000
09478 #define SECBUFFER_READONLY_WITH_CHECKSUM  0x10000000
09479 #define SECBUFFER_RESERVED                0x60000000
09480 
09481 #define ISC_REQ_DELEGATE                 0x00000001
09482 #define ISC_REQ_MUTUAL_AUTH              0x00000002
09483 #define ISC_REQ_REPLAY_DETECT            0x00000004
09484 #define ISC_REQ_SEQUENCE_DETECT          0x00000008
09485 #define ISC_REQ_CONFIDENTIALITY          0x00000010
09486 #define ISC_REQ_USE_SESSION_KEY          0x00000020
09487 #define ISC_REQ_PROMPT_FOR_CREDS         0x00000040
09488 #define ISC_REQ_USE_SUPPLIED_CREDS       0x00000080
09489 #define ISC_REQ_ALLOCATE_MEMORY          0x00000100
09490 #define ISC_REQ_USE_DCE_STYLE            0x00000200
09491 #define ISC_REQ_DATAGRAM                 0x00000400
09492 #define ISC_REQ_CONNECTION               0x00000800
09493 #define ISC_REQ_CALL_LEVEL               0x00001000
09494 #define ISC_REQ_FRAGMENT_SUPPLIED        0x00002000
09495 #define ISC_REQ_EXTENDED_ERROR           0x00004000
09496 #define ISC_REQ_STREAM                   0x00008000
09497 #define ISC_REQ_INTEGRITY                0x00010000
09498 #define ISC_REQ_IDENTIFY                 0x00020000
09499 #define ISC_REQ_NULL_SESSION             0x00040000
09500 #define ISC_REQ_MANUAL_CRED_VALIDATION   0x00080000
09501 #define ISC_REQ_RESERVED1                0x00100000
09502 #define ISC_REQ_FRAGMENT_TO_FIT          0x00200000
09503 #define ISC_REQ_FORWARD_CREDENTIALS      0x00400000
09504 #define ISC_REQ_NO_INTEGRITY             0x00800000
09505 #define ISC_REQ_USE_HTTP_STYLE           0x01000000
09506 
09507 #define ISC_RET_DELEGATE                 0x00000001
09508 #define ISC_RET_MUTUAL_AUTH              0x00000002
09509 #define ISC_RET_REPLAY_DETECT            0x00000004
09510 #define ISC_RET_SEQUENCE_DETECT          0x00000008
09511 #define ISC_RET_CONFIDENTIALITY          0x00000010
09512 #define ISC_RET_USE_SESSION_KEY          0x00000020
09513 #define ISC_RET_USED_COLLECTED_CREDS     0x00000040
09514 #define ISC_RET_USED_SUPPLIED_CREDS      0x00000080
09515 #define ISC_RET_ALLOCATED_MEMORY         0x00000100
09516 #define ISC_RET_USED_DCE_STYLE           0x00000200
09517 #define ISC_RET_DATAGRAM                 0x00000400
09518 #define ISC_RET_CONNECTION               0x00000800
09519 #define ISC_RET_INTERMEDIATE_RETURN      0x00001000
09520 #define ISC_RET_CALL_LEVEL               0x00002000
09521 #define ISC_RET_EXTENDED_ERROR           0x00004000
09522 #define ISC_RET_STREAM                   0x00008000
09523 #define ISC_RET_INTEGRITY                0x00010000
09524 #define ISC_RET_IDENTIFY                 0x00020000
09525 #define ISC_RET_NULL_SESSION             0x00040000
09526 #define ISC_RET_MANUAL_CRED_VALIDATION   0x00080000
09527 #define ISC_RET_RESERVED1                0x00100000
09528 #define ISC_RET_FRAGMENT_ONLY            0x00200000
09529 #define ISC_RET_FORWARD_CREDENTIALS      0x00400000
09530 #define ISC_RET_USED_HTTP_STYLE          0x01000000
09531 #define ISC_RET_NO_ADDITIONAL_TOKEN      0x02000000
09532 #define ISC_RET_REAUTHENTICATION         0x08000000
09533 
09534 #define ASC_REQ_DELEGATE                 0x00000001
09535 #define ASC_REQ_MUTUAL_AUTH              0x00000002
09536 #define ASC_REQ_REPLAY_DETECT            0x00000004
09537 #define ASC_REQ_SEQUENCE_DETECT          0x00000008
09538 #define ASC_REQ_CONFIDENTIALITY          0x00000010
09539 #define ASC_REQ_USE_SESSION_KEY          0x00000020
09540 #define ASC_REQ_ALLOCATE_MEMORY          0x00000100
09541 #define ASC_REQ_USE_DCE_STYLE            0x00000200
09542 #define ASC_REQ_DATAGRAM                 0x00000400
09543 #define ASC_REQ_CONNECTION               0x00000800
09544 #define ASC_REQ_CALL_LEVEL               0x00001000
09545 #define ASC_REQ_EXTENDED_ERROR           0x00008000
09546 #define ASC_REQ_STREAM                   0x00010000
09547 #define ASC_REQ_INTEGRITY                0x00020000
09548 #define ASC_REQ_LICENSING                0x00040000
09549 #define ASC_REQ_IDENTIFY                 0x00080000
09550 #define ASC_REQ_ALLOW_NULL_SESSION       0x00100000
09551 #define ASC_REQ_ALLOW_NON_USER_LOGONS    0x00200000
09552 #define ASC_REQ_ALLOW_CONTEXT_REPLAY     0x00400000
09553 #define ASC_REQ_FRAGMENT_TO_FIT          0x00800000
09554 #define ASC_REQ_FRAGMENT_SUPPLIED        0x00002000
09555 #define ASC_REQ_NO_TOKEN                 0x01000000
09556 #define ASC_REQ_PROXY_BINDINGS           0x04000000
09557 //#define SSP_RET_REAUTHENTICATION         0x08000000 // internal
09558 
09559 #define ASC_REQ_ALLOW_MISSING_BINDINGS   0x10000000
09560 #define ASC_RET_DELEGATE                 0x00000001
09561 #define ASC_RET_MUTUAL_AUTH              0x00000002
09562 #define ASC_RET_REPLAY_DETECT            0x00000004
09563 #define ASC_RET_SEQUENCE_DETECT          0x00000008
09564 #define ASC_RET_CONFIDENTIALITY          0x00000010
09565 #define ASC_RET_USE_SESSION_KEY          0x00000020
09566 #define ASC_RET_ALLOCATED_MEMORY         0x00000100
09567 #define ASC_RET_USED_DCE_STYLE           0x00000200
09568 #define ASC_RET_DATAGRAM                 0x00000400
09569 #define ASC_RET_CONNECTION               0x00000800
09570 #define ASC_RET_CALL_LEVEL               0x00002000
09571 #define ASC_RET_THIRD_LEG_FAILED         0x00004000
09572 #define ASC_RET_EXTENDED_ERROR           0x00008000
09573 #define ASC_RET_STREAM                   0x00010000
09574 #define ASC_RET_INTEGRITY                0x00020000
09575 #define ASC_RET_LICENSING                0x00040000
09576 #define ASC_RET_IDENTIFY                 0x00080000
09577 #define ASC_RET_NULL_SESSION             0x00100000
09578 #define ASC_RET_ALLOW_NON_USER_LOGONS    0x00200000
09579 #define ASC_RET_ALLOW_CONTEXT_REPLAY     0x00400000
09580 #define ASC_RET_FRAGMENT_ONLY            0x00800000
09581 #define ASC_RET_NO_TOKEN                 0x01000000
09582 #define ASC_RET_NO_ADDITIONAL_TOKEN      0x02000000
09583 #define ASC_RET_NO_PROXY_BINDINGS        0x04000000
09584 //#define SSP_RET_REAUTHENTICATION         0x08000000 // internal
09585 #define ASC_RET_MISSING_BINDINGS         0x10000000
09586 
09587 #define SEC_DELETED_HANDLE ((ULONG_PTR)(-2))
09588 
09589 #define SecInvalidateHandle(x) \
09590     ((PSecHandle)(x))->dwLower = ((PSecHandle)(x))->dwUpper = ((ULONG_PTR)((INT_PTR)-1));
09591 
09592 #define SecIsValidHandle(x) \
09593     ( ( ((PSecHandle)(x))->dwLower != (ULONG_PTR)(INT_PTR)-1 ) && \
09594       ( ((PSecHandle)(x))->dwUpper != (ULONG_PTR)(INT_PTR)-1 ) )
09595 
09596 typedef WCHAR SEC_WCHAR;
09597 typedef CHAR SEC_CHAR;
09598 typedef LARGE_INTEGER _SECURITY_INTEGER, SECURITY_INTEGER, *PSECURITY_INTEGER;
09599 typedef SECURITY_INTEGER TimeStamp, *PTimeStamp;
09600 typedef UNICODE_STRING SECURITY_STRING, *PSECURITY_STRING;
09601 #if ISSP_MODE == 0
09602 #define PSSPI_SEC_STRING PSECURITY_STRING
09603 #else
09604 #define PSSPI_SEC_STRING SEC_WCHAR*
09605 #endif
09606 
09607 typedef PVOID PSEC_WINNT_AUTH_IDENTITY_OPAQUE;
09608 
09609 #ifndef __SECSTATUS_DEFINED__
09610 typedef LONG SECURITY_STATUS;
09611 #define __SECSTATUS_DEFINED__
09612 #endif
09613 
09614 typedef enum _SECPKG_CRED_CLASS
09615 {
09616     SecPkgCredClass_None = 0,
09617     SecPkgCredClass_Ephemeral = 10,
09618     SecPkgCredClass_PersistedGeneric = 20,
09619     SecPkgCredClass_PersistedSpecific = 30,
09620     SecPkgCredClass_Explicit = 40,
09621 } SECPKG_CRED_CLASS, *PSECPKG_CRED_CLASS;
09622 
09623 typedef struct _SEC_NEGOTIATION_INFO
09624 {
09625     ULONG Size;
09626     ULONG NameLength;
09627     SEC_WCHAR *Name;
09628     PVOID Reserved;
09629 } SEC_NEGOTIATION_INFO, *PSEC_NEGOTIATION_INFO;
09630 
09631 typedef struct _SEC_CHANNEL_BINDINGS
09632 {
09633     ULONG dwInitiatorAddrType;
09634     ULONG cbInitiatorLength;
09635     ULONG dwInitiatorOffset;
09636     ULONG dwAcceptorAddrType;
09637     ULONG cbAcceptorLength;
09638     ULONG dwAcceptorOffset;
09639     ULONG cbApplicationDataLength;
09640     ULONG dwApplicationDataOffset;
09641 } SEC_CHANNEL_BINDINGS, *PSEC_CHANNEL_BINDINGS;
09642 
09643 #ifndef _AUTH_IDENTITY_EX2_DEFINED
09644 #define _AUTH_IDENTITY_EX2_DEFINED
09645 typedef struct _SEC_WINNT_AUTH_IDENTITY_EX2
09646 {
09647     ULONG Version;
09648     USHORT cbHeaderLength;
09649     ULONG cbStructureLength;
09650     ULONG UserOffset;
09651     USHORT UserLength;
09652     ULONG DomainOffset;
09653     USHORT DomainLength;
09654     ULONG PackedCredentialsOffset;
09655     USHORT PackedCredentialsLength;
09656     ULONG Flags;
09657     ULONG PackageListOffset;
09658     USHORT PackageListLength;
09659 } SEC_WINNT_AUTH_IDENTITY_EX2, *PSEC_WINNT_AUTH_IDENTITY_EX2;
09660 #define SEC_WINNT_AUTH_IDENTITY_VERSION_2 0x201
09661 #endif
09662 
09663 #ifndef _AUTH_IDENTITY_DEFINED
09664 #define _AUTH_IDENTITY_DEFINED
09665 typedef struct _SEC_WINNT_AUTH_IDENTITY_W
09666 {
09667     PUSHORT User;
09668     ULONG UserLength;
09669     PUSHORT Domain;
09670     ULONG DomainLength;
09671     PUSHORT Password;
09672     ULONG PasswordLength;
09673     ULONG Flags;
09674 } SEC_WINNT_AUTH_IDENTITY_W, *PSEC_WINNT_AUTH_IDENTITY_W;
09675 #define SEC_WINNT_AUTH_IDENTITY_ANSI    0x1
09676 #define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x2
09677 #define SEC_WINNT_AUTH_IDENTITY SEC_WINNT_AUTH_IDENTITY_W
09678 #define PSEC_WINNT_AUTH_IDENTITY PSEC_WINNT_AUTH_IDENTITY_W
09679 #define _SEC_WINNT_AUTH_IDENTITY _SEC_WINNT_AUTH_IDENTITY_W
09680 #endif
09681 
09682 #ifndef SEC_WINNT_AUTH_IDENTITY_VERSION
09683 #define SEC_WINNT_AUTH_IDENTITY_VERSION 0x200
09684 typedef struct _SEC_WINNT_AUTH_IDENTITY_EXW
09685 {
09686     ULONG Version;
09687     ULONG Length;
09688     PUSHORT User;
09689     ULONG UserLength;
09690     PUSHORT Domain;
09691     ULONG DomainLength;
09692     PUSHORT Password;
09693     ULONG PasswordLength;
09694     ULONG Flags;
09695     PUSHORT PackageList;
09696     ULONG PackageListLength;
09697 } SEC_WINNT_AUTH_IDENTITY_EXW, *PSEC_WINNT_AUTH_IDENTITY_EXW;
09698 #define SEC_WINNT_AUTH_IDENTITY_EX  SEC_WINNT_AUTH_IDENTITY_EXW
09699 #define PSEC_WINNT_AUTH_IDENTITY_EX PSEC_WINNT_AUTH_IDENTITY_EXW
09700 #endif
09701 
09702 #ifndef __SECHANDLE_DEFINED__
09703 typedef struct _SecHandle
09704 {
09705     ULONG_PTR dwLower;
09706     ULONG_PTR dwUpper;
09707 } SecHandle, *PSecHandle;
09708 #define __SECHANDLE_DEFINED__
09709 #endif
09710 
09711 typedef SecHandle CredHandle, *PCredHandle, CtxtHandle, *PCtxtHandle;
09712 
09713 typedef struct _SecBuffer
09714 {
09715     ULONG cbBuffer;
09716     ULONG BufferType;
09717 #ifdef MIDL_PASS
09718     MIDL_PROP([size_is(cbBuffer)]) PCHAR pvBuffer;
09719 #else
09720     __field_bcount(cbBuffer) void SEC_FAR *pvBuffer;
09721 #endif
09722 } SecBuffer, *PSecBuffer;
09723 
09724 typedef struct _SecBufferDesc
09725 {
09726     ULONG ulVersion;
09727     ULONG cBuffers;
09728     MIDL_PROP([size_is(cBuffers)]) __field_ecount(cBuffers) PSecBuffer pBuffers;
09729 } SecBufferDesc, SEC_FAR *PSecBufferDesc;
09730 
09731 typedef struct _SecPkgInfoW
09732 {
09733     ULONG fCapabilities;
09734     USHORT wVersion;
09735     USHORT wRPCID;
09736     ULONG cbMaxToken;
09737     MIDL_PROP([string]) SEC_WCHAR *Name;
09738     MIDL_PROP([string]) SEC_WCHAR *Comment;
09739 } SecPkgInfoW, *PSecPkgInfoW;
09740 #define SecPkgInfo SecPkgInfoW
09741 #define PSecPkgInfo PSecPkgInfoW
09742 
09743 typedef struct _SecPkgCredentials_NamesW
09744 {
09745     MIDL_PROP([string]) SEC_WCHAR *sUserName;
09746 } SecPkgCredentials_NamesW, *PSecPkgCredentials_NamesW;
09747 #define SecPkgCredentials_Names SecPkgCredentials_NamesW
09748 #define PSecPkgCredentials_Names PSecPkgCredentials_NamesW
09749 
09750 typedef struct _SecPkgContext_NamesW
09751 {
09752     SEC_WCHAR *sUserName;
09753 } SecPkgContext_NamesW, *PSecPkgContext_NamesW;
09754 #define SecPkgContext_Names SecPkgContext_NamesW
09755 #define PSecPkgContext_Names PSecPkgContext_NamesW
09756 
09757 #if OSVER(NTDDI_VERSION) > NTDDI_WIN2K
09758 typedef struct _SecPkgContext_CredentialNameW
09759 {
09760     ULONG CredentialType;
09761     SEC_WCHAR *sCredentialName;
09762 } SecPkgContext_CredentialNameW, *PSecPkgContext_CredentialNameW;
09763 #endif
09764 #define SecPkgContext_CredentialName SecPkgContext_CredentialNameW
09765 #define PSecPkgContext_CredentialName PSecPkgContext_CredentialNameW
09766 
09767 typedef struct _SecPkgContext_SubjectAttributes
09768 {
09769     PVOID AttributeInfo;
09770 } SecPkgContext_SubjectAttributes, *PSecPkgContext_SubjectAttributes;
09771 
09772 typedef struct _SecPkgContext_CredInfo
09773 {
09774     SECPKG_CRED_CLASS CredClass;
09775     ULONG IsPromptingNeeded;
09776 } SecPkgContext_CredInfo, *PSecPkgContext_CredInfo;
09777 
09778 typedef struct _SecPkgContext_NegoPackageInfo
09779 {
09780     ULONG PackageMask;
09781 } SecPkgContext_NegoPackageInfo, *PSecPkgContext_NegoPackageInfo;
09782 
09783 typedef struct _SecPkgContext_NegoStatus
09784 {
09785     ULONG LastStatus;
09786 } SecPkgContext_NegoStatus, *PSecPkgContext_NegoStatus;
09787 
09788 typedef struct _SecPkgContext_Sizes
09789 {
09790     ULONG cbMaxToken;
09791     ULONG cbMaxSignature;
09792     ULONG cbBlockSize;
09793     ULONG cbSecurityTrailer;
09794 } SecPkgContext_Sizes, *PSecPkgContext_Sizes;
09795 
09796 typedef struct _SecPkgContext_StreamSizes
09797 {
09798     ULONG cbHeader;
09799     ULONG cbTrailer;
09800     ULONG cbMaximumMessage;
09801     ULONG cBuffers;
09802     ULONG cbBlockSize;
09803 } SecPkgContext_StreamSizes, *PSecPkgContext_StreamSizes;
09804 
09805 typedef struct _SecPkgContext_Lifespan
09806 {
09807     TimeStamp tsStart;
09808     TimeStamp tsExpiry;
09809 } SecPkgContext_Lifespan, *PSecPkgContext_Lifespan;
09810 
09811 typedef struct _SecPkgContext_PasswordExpiry
09812 {
09813     TimeStamp tsPasswordExpires;
09814 } SecPkgContext_PasswordExpiry, *PSecPkgContext_PasswordExpiry;
09815 
09816 typedef struct _SecPkgContext_ProtoInfoW
09817 {
09818     SEC_WCHAR *sProtocolName;
09819     ULONG majorVersion;
09820     ULONG minorVersion;
09821 } SecPkgContext_ProtoInfoW, *PSecPkgContext_ProtoInfoW;
09822 #define SecPkgContext_ProtoInfo SecPkgContext_ProtoInfoW
09823 #define PSecPkgContext_ProtoInfo PSecPkgContext_ProtoInfoW
09824 
09825 typedef struct _SecPkgContext_KeyInfoW
09826 {
09827     SEC_WCHAR *sSignatureAlgorithmName;
09828     SEC_WCHAR *sEncryptAlgorithmName;
09829     ULONG KeySize;
09830     ULONG SignatureAlgorithm;
09831     ULONG EncryptAlgorithm;
09832 } SecPkgContext_KeyInfoW, *PSecPkgContext_KeyInfoW;
09833 #define SecPkgContext_KeyInfo SecPkgContext_KeyInfoW
09834 #define PSecPkgContext_KeyInfo PSecPkgContext_KeyInfoW
09835 
09836 typedef struct _SecPkgContext_SessionKey
09837 {
09838     ULONG SessionKeyLength;
09839     __field_bcount(SessionKeyLength) PUCHAR SessionKey;
09840 } SecPkgContext_SessionKey, *PSecPkgContext_SessionKey;
09841 
09842 typedef struct _SecPkgContext_NegoKeys
09843 {
09844     ULONG KeyType;
09845     USHORT KeyLength;
09846     __field_bcount(KeyLength) PUCHAR KeyValue;
09847     ULONG  VerifyKeyType;
09848     USHORT VerifyKeyLength;
09849     __field_bcount(VerifyKeyLength) PUCHAR VerifyKeyValue;
09850 } SecPkgContext_NegoKeys, *PSecPkgContext_NegoKeys;
09851 
09852 typedef struct _SecPkgContext_DceInfo
09853 {
09854     ULONG AuthzSvc;
09855     PVOID pPac;
09856 } SecPkgContext_DceInfo, *PSecPkgContext_DceInfo;
09857 
09858 typedef struct _SecPkgContext_PackageInfoW
09859 {
09860     PSecPkgInfoW PackageInfo;
09861 } SecPkgContext_PackageInfoW, *PSecPkgContext_PackageInfoW;
09862 #define SecPkgContext_PackageInfo SecPkgContext_PackageInfoW
09863 #define PSecPkgContext_PackageInfo PSecPkgContext_PackageInfoW
09864 
09865 typedef struct _SecPkgContext_UserFlags
09866 {
09867     ULONG UserFlags;
09868 } SecPkgContext_UserFlags, *PSecPkgContext_UserFlags;
09869 
09870 typedef struct _SecPkgContext_Flags
09871 {
09872     ULONG Flags;
09873 } SecPkgContext_Flags, *PSecPkgContext_Flags;
09874 
09875 typedef struct _SecPkgContext_NegotiationInfoW
09876 {
09877     PSecPkgInfoW PackageInfo ;
09878     ULONG NegotiationState ;
09879 } SecPkgContext_NegotiationInfoW, *PSecPkgContext_NegotiationInfoW;
09880 
09881 typedef struct _SecPkgContext_AuthorityW
09882 {
09883     SEC_WCHAR *sAuthorityName;
09884 } SecPkgContext_AuthorityW, *PSecPkgContext_AuthorityW;
09885 #define SecPkgContext_Authority SecPkgContext_AuthorityW
09886 #define PSecPkgContext_Authority PSecPkgContext_AuthorityW
09887 
09888 
09889 #if NTDDI_VERSION > NTDDI_WS03
09890 typedef struct _SecPkgCredentials_SSIProviderW
09891 {
09892     SEC_WCHAR *sProviderName;
09893     ULONG ProviderInfoLength;
09894     PCHAR ProviderInfo;
09895 } SecPkgCredentials_SSIProviderW, *PSecPkgCredentials_SSIProviderW;
09896 #define SecPkgCredentials_SSIProvider SecPkgCredentials_SSIProviderW
09897 #define PSecPkgCredentials_SSIProvider PSecPkgCredentials_SSIProviderW
09898 
09899 typedef struct _SecPkgContext_LogoffTime
09900 {
09901     TimeStamp tsLogoffTime;
09902 } SecPkgContext_LogoffTime, *PSecPkgContext_LogoffTime;
09903 #endif
09904 
09905 /* forward declaration */
09906 typedef struct _SECURITY_FUNCTION_TABLE_W SecurityFunctionTableW, *PSecurityFunctionTableW;
09907 #define SecurityFunctionTable SecurityFunctionTableW
09908 #define PSecurityFunctionTable PSecurityFunctionTableW
09909 
09910 typedef
09911 VOID
09912 (SEC_ENTRY * SEC_GET_KEY_FN)(
09913     PVOID Arg,
09914     PVOID Principal,
09915     ULONG KeyVer,
09916     PVOID *Key,
09917     SECURITY_STATUS *Status);
09918 
09919 KSECDDDECLSPEC
09920 SECURITY_STATUS
09921 SEC_ENTRY
09922 AcceptSecurityContext(
09923     _In_opt_ PCredHandle phCredential,
09924     _In_opt_ PCtxtHandle phContext,
09925     _In_opt_ PSecBufferDesc pInput,
09926     _In_ ULONG fContextReq,
09927     _In_ ULONG TargetDataRep,
09928     _In_opt_ PCtxtHandle phNewContext,
09929     _In_opt_ PSecBufferDesc pOutput,
09930     _Out_ PULONG pfContextAttr,
09931     _Out_opt_ PTimeStamp ptsExpiry);
09932 
09933 typedef
09934 SECURITY_STATUS
09935 (SEC_ENTRY * ACCEPT_SECURITY_CONTEXT_FN)(
09936     PCredHandle,
09937     PCtxtHandle,
09938     PSecBufferDesc,
09939     ULONG,
09940     ULONG,
09941     PCtxtHandle,
09942     PSecBufferDesc,
09943     PULONG,
09944     PTimeStamp);
09945 
09946 KSECDDDECLSPEC
09947 SECURITY_STATUS
09948 SEC_ENTRY
09949 AcquireCredentialsHandleW(
09950     _In_opt_ PSSPI_SEC_STRING pPrincipal,
09951     _In_ PSSPI_SEC_STRING pPackage,
09952     _In_ ULONG fCredentialUse,
09953     _In_opt_ PVOID pvLogonId,
09954     _In_opt_ PVOID pAuthData,
09955     _In_opt_ SEC_GET_KEY_FN pGetKeyFn,
09956     _In_opt_ PVOID pvGetKeyArgument,
09957     _Out_ PCredHandle phCredential,
09958     _Out_opt_ PTimeStamp ptsExpiry);
09959 #define AcquireCredentialsHandle AcquireCredentialsHandleW
09960 
09961 typedef
09962 SECURITY_STATUS
09963 (SEC_ENTRY * ACQUIRE_CREDENTIALS_HANDLE_FN_W)(
09964     PSSPI_SEC_STRING,
09965     PSSPI_SEC_STRING,
09966     ULONG,
09967     PVOID,
09968     PVOID,
09969     SEC_GET_KEY_FN,
09970     PVOID,
09971     PCredHandle,
09972     PTimeStamp);
09973 #define ACQUIRE_CREDENTIALS_HANDLE_FN ACQUIRE_CREDENTIALS_HANDLE_FN_W
09974 
09975 SECURITY_STATUS
09976 SEC_ENTRY
09977 AddCredentialsA(
09978     _In_ PCredHandle hCredentials,
09979     _In_opt_ LPSTR pszPrincipal,
09980     _In_ LPSTR pszPackage,
09981     _In_ ULONG fCredentialUse,
09982     _In_opt_ PVOID pAuthData,
09983     _In_opt_ SEC_GET_KEY_FN pGetKeyFn,
09984     _In_opt_ PVOID pvGetKeyArgument,
09985     _Out_opt_ PTimeStamp ptsExpiry);
09986 
09987 typedef
09988 SECURITY_STATUS
09989 (SEC_ENTRY * ADD_CREDENTIALS_FN_A)(
09990     PCredHandle,
09991     SEC_CHAR *,
09992     SEC_CHAR *,
09993     ULONG,
09994     PVOID,
09995     SEC_GET_KEY_FN,
09996     PVOID,
09997     PTimeStamp);
09998 
09999 KSECDDDECLSPEC
10000 SECURITY_STATUS
10001 SEC_ENTRY
10002 AddCredentialsW(
10003     _In_ PCredHandle hCredentials,
10004     _In_opt_ PSSPI_SEC_STRING pPrincipal,
10005     _In_ PSSPI_SEC_STRING pPackage,
10006     _In_ ULONG fCredentialUse,
10007     _In_opt_ PVOID pAuthData,
10008     _In_opt_ SEC_GET_KEY_FN pGetKeyFn,
10009     _In_opt_ PVOID pvGetKeyArgument,
10010     _Out_opt_ PTimeStamp ptsExpiry);
10011 
10012 typedef
10013 SECURITY_STATUS
10014 (SEC_ENTRY * ADD_CREDENTIALS_FN_W)(
10015     PCredHandle,
10016     PSSPI_SEC_STRING,
10017     PSSPI_SEC_STRING,
10018     ULONG,
10019     PVOID,
10020     SEC_GET_KEY_FN,
10021     PVOID,
10022     PTimeStamp);
10023 
10024 #ifdef UNICODE
10025 #define AddCredentials  AddCredentialsW
10026 #define ADD_CREDENTIALS_FN  ADD_CREDENTIALS_FN_W
10027 #else
10028 #define AddCredentials  AddCredentialsA
10029 #define ADD_CREDENTIALS_FN ADD_CREDENTIALS_FN_A
10030 #endif
10031 
10032 KSECDDDECLSPEC
10033 SECURITY_STATUS
10034 SEC_ENTRY
10035 ApplyControlToken(
10036     _In_ PCtxtHandle phContext,
10037     _In_ PSecBufferDesc pInput);
10038 
10039 typedef
10040 SECURITY_STATUS
10041 (SEC_ENTRY * APPLY_CONTROL_TOKEN_FN)(
10042     PCtxtHandle, PSecBufferDesc);
10043 
10044 #if (ISSP_MODE != 0)
10045 
10046 SECURITY_STATUS
10047 SEC_ENTRY
10048 ChangeAccountPasswordA(
10049     _In_ SEC_CHAR* pszPackageName,
10050     _In_ SEC_CHAR* pszDomainName,
10051     _In_ SEC_CHAR* pszAccountName,
10052     _In_ SEC_CHAR* pszOldPassword,
10053     _In_ SEC_CHAR* pszNewPassword,
10054     _In_ BOOLEAN bImpersonating,
10055     _In_ ULONG dwReserved,
10056     _Inout_ PSecBufferDesc pOutput);
10057 
10058 typedef
10059 SECURITY_STATUS
10060 (SEC_ENTRY * CHANGE_PASSWORD_FN_A)(
10061     SEC_CHAR *,
10062     SEC_CHAR *,
10063     SEC_CHAR *,
10064     SEC_CHAR *,
10065     SEC_CHAR *,
10066     BOOLEAN,
10067     ULONG,
10068     PSecBufferDesc);
10069 
10070 SECURITY_STATUS
10071 SEC_ENTRY
10072 ChangeAccountPasswordW(
10073     _In_ SEC_WCHAR* pszPackageName,
10074     _In_ SEC_WCHAR* pszDomainName,
10075     _In_ SEC_WCHAR* pszAccountName,
10076     _In_ SEC_WCHAR* pszOldPassword,
10077     _In_ SEC_WCHAR* pszNewPassword,
10078     _In_ BOOLEAN bImpersonating,
10079     _In_ ULONG dwReserved,
10080     _Inout_ PSecBufferDesc pOutput);
10081 
10082 typedef
10083 SECURITY_STATUS
10084 (SEC_ENTRY * CHANGE_PASSWORD_FN_W)(
10085     SEC_WCHAR *,
10086     SEC_WCHAR *,
10087     SEC_WCHAR *,
10088     SEC_WCHAR *,
10089     SEC_WCHAR *,
10090     BOOLEAN,
10091     ULONG,
10092     PSecBufferDesc);
10093 
10094 #ifdef UNICODE
10095 #define ChangeAccountPassword ChangeAccountPasswordW
10096 #define CHANGE_PASSWORD_FN CHANGE_PASSWORD_FN_W
10097 #else
10098 #define ChangeAccountPassword ChangeAccountPasswordA
10099 #define CHANGE_PASSWORD_FN CHANGE_PASSWORD_FN_A
10100 #endif
10101 
10102 #endif /* ISSP_MODE != 0 */
10103 
10104 SECURITY_STATUS
10105 SEC_ENTRY
10106 CompleteAuthToken(
10107     _In_ PCtxtHandle phContext,
10108     _In_ PSecBufferDesc pToken);
10109 
10110 typedef
10111 SECURITY_STATUS
10112 (SEC_ENTRY * COMPLETE_AUTH_TOKEN_FN)(
10113     PCtxtHandle,
10114     PSecBufferDesc);
10115 
10116 SECURITY_STATUS
10117 SEC_ENTRY
10118 DecryptMessage(
10119     _In_ PCtxtHandle phContext,
10120     _Inout_ PSecBufferDesc pMessage,
10121     _In_ ULONG MessageSeqNo,
10122     _Out_opt_ PULONG pfQOP);
10123 
10124 typedef
10125 SECURITY_STATUS
10126 (SEC_ENTRY * DECRYPT_MESSAGE_FN)(
10127     PCtxtHandle,
10128     PSecBufferDesc,
10129     ULONG,
10130     PULONG);
10131 
10132 KSECDDDECLSPEC
10133 SECURITY_STATUS
10134 SEC_ENTRY
10135 DeleteSecurityContext(
10136     _In_ PCtxtHandle phContext);
10137 
10138 typedef
10139 SECURITY_STATUS
10140 (SEC_ENTRY * DELETE_SECURITY_CONTEXT_FN)(
10141     PCtxtHandle);
10142 
10143 SECURITY_STATUS
10144 SEC_ENTRY
10145 EncryptMessage(
10146     _In_ PCtxtHandle phContext,
10147     _In_ ULONG  fQOP,
10148     _Inout_ PSecBufferDesc pMessage,
10149     _In_ ULONG MessageSeqNo);
10150 
10151 typedef
10152 SECURITY_STATUS
10153 (SEC_ENTRY * ENCRYPT_MESSAGE_FN)(
10154     PCtxtHandle,
10155     ULONG,
10156     PSecBufferDesc,
10157     ULONG);
10158 
10159 KSECDDDECLSPEC
10160 SECURITY_STATUS
10161 SEC_ENTRY
10162 EnumerateSecurityPackagesW(
10163     _Out_ PULONG pcPackages,
10164     _Deref_out_ PSecPkgInfoW* ppPackageInfo);
10165 #define EnumerateSecurityPackages EnumerateSecurityPackagesW
10166 
10167 typedef
10168 SECURITY_STATUS
10169 (SEC_ENTRY * ENUMERATE_SECURITY_PACKAGES_FN_W)(
10170     PULONG,
10171     PSecPkgInfoW*);
10172 #define ENUMERATE_SECURITY_PACKAGES_FN ENUMERATE_SECURITY_PACKAGES_FN_W
10173 
10174 KSECDDDECLSPEC
10175 SECURITY_STATUS
10176 SEC_ENTRY
10177 ExportSecurityContext(
10178     _In_ PCtxtHandle phContext,
10179     _In_ ULONG fFlags,
10180     _Out_ PSecBuffer pPackedContext,
10181     _Out_ PVOID* pToken);
10182 
10183 typedef
10184 SECURITY_STATUS
10185 (SEC_ENTRY * EXPORT_SECURITY_CONTEXT_FN)(
10186     PCtxtHandle,
10187     ULONG,
10188     PSecBuffer,
10189     PVOID*);
10190 
10191 SECURITY_STATUS
10192 SEC_ENTRY
10193 FreeContextBuffer(
10194     _Inout_ PVOID pvContextBuffer);
10195 
10196 typedef
10197 SECURITY_STATUS
10198 (SEC_ENTRY * FREE_CONTEXT_BUFFER_FN)(
10199     _Inout_ PVOID);
10200 
10201 KSECDDDECLSPEC
10202 SECURITY_STATUS
10203 SEC_ENTRY
10204 FreeCredentialsHandle(
10205     _In_ PCredHandle phCredential);
10206 
10207 typedef
10208 SECURITY_STATUS
10209 (SEC_ENTRY * FREE_CREDENTIALS_HANDLE_FN)(
10210     PCredHandle);
10211 
10212 KSECDDDECLSPEC
10213 SECURITY_STATUS
10214 SEC_ENTRY
10215 ImpersonateSecurityContext(
10216     _In_ PCtxtHandle phContext);
10217 
10218 typedef
10219 SECURITY_STATUS
10220 (SEC_ENTRY * IMPERSONATE_SECURITY_CONTEXT_FN)(
10221     PCtxtHandle);
10222 
10223 KSECDDDECLSPEC
10224 SECURITY_STATUS
10225 SEC_ENTRY
10226 ImportSecurityContextW(
10227     _In_ PSSPI_SEC_STRING pszPackage,
10228     _In_ PSecBuffer pPackedContext,
10229     _In_ PVOID Token,
10230     _Out_ PCtxtHandle phContext);
10231 #define ImportSecurityContext ImportSecurityContextW
10232 
10233 typedef
10234 SECURITY_STATUS
10235 (SEC_ENTRY * IMPORT_SECURITY_CONTEXT_FN_W)(
10236     PSSPI_SEC_STRING,
10237     PSecBuffer,
10238     PVOID,
10239     PCtxtHandle);
10240 #define IMPORT_SECURITY_CONTEXT_FN IMPORT_SECURITY_CONTEXT_FN_W
10241 
10242 KSECDDDECLSPEC
10243 SECURITY_STATUS
10244 SEC_ENTRY
10245 InitializeSecurityContextW(
10246     _In_opt_ PCredHandle phCredential,
10247     _In_opt_ PCtxtHandle phContext,
10248     _In_opt_ PSSPI_SEC_STRING pTargetName,
10249     _In_ ULONG fContextReq,
10250     _In_ ULONG Reserved1,
10251     _In_ ULONG TargetDataRep,
10252     _In_opt_ PSecBufferDesc pInput,
10253     _In_ ULONG Reserved2,
10254     _Inout_opt_ PCtxtHandle phNewContext,
10255     _Inout_opt_ PSecBufferDesc pOutput,
10256     _Out_ PULONG pfContextAttr,
10257     _Out_opt_ PTimeStamp ptsExpiry);
10258 #define InitializeSecurityContext InitializeSecurityContextW
10259 
10260 typedef
10261 SECURITY_STATUS
10262 (SEC_ENTRY * INITIALIZE_SECURITY_CONTEXT_FN_W)(
10263     PCredHandle,
10264     PCtxtHandle,
10265     PSSPI_SEC_STRING,
10266     ULONG,
10267     ULONG,
10268     ULONG,
10269     PSecBufferDesc,
10270     ULONG,
10271     PCtxtHandle,
10272     PSecBufferDesc,
10273     PULONG,
10274     PTimeStamp);
10275 #define INITIALIZE_SECURITY_CONTEXT_FN INITIALIZE_SECURITY_CONTEXT_FN_W
10276 
10277 KSECDDDECLSPEC
10278 PSecurityFunctionTableW
10279 SEC_ENTRY
10280 InitSecurityInterfaceW(VOID);
10281 #define InitSecurityInterface InitSecurityInterfaceW
10282 
10283 typedef
10284 PSecurityFunctionTableW
10285 (SEC_ENTRY * INIT_SECURITY_INTERFACE_W)(VOID);
10286 #define INIT_SECURITY_INTERFACE INIT_SECURITY_INTERFACE_W
10287 
10288 KSECDDDECLSPEC
10289 SECURITY_STATUS
10290 SEC_ENTRY
10291 MakeSignature(
10292     _In_ PCtxtHandle phContext,
10293     _In_ ULONG fQOP,
10294     _In_ PSecBufferDesc pMessage,
10295     _In_ ULONG MessageSeqNo);
10296 
10297 typedef
10298 SECURITY_STATUS
10299 (SEC_ENTRY * MAKE_SIGNATURE_FN)(
10300     PCtxtHandle,
10301     ULONG,
10302     PSecBufferDesc,
10303     ULONG);
10304 
10305 KSECDDDECLSPEC
10306 SECURITY_STATUS
10307 SEC_ENTRY
10308 QueryContextAttributesW(
10309     _In_ PCtxtHandle phContext,
10310     _In_ ULONG ulAttribute,
10311     _Out_ PVOID pBuffer);
10312 #define QueryContextAttributes QueryContextAttributesW
10313 
10314 typedef
10315 SECURITY_STATUS
10316 (SEC_ENTRY * QUERY_CONTEXT_ATTRIBUTES_FN_W)(
10317     PCtxtHandle,
10318     ULONG,
10319     PVOID);
10320 #define QUERY_CONTEXT_ATTRIBUTES_FN QUERY_CONTEXT_ATTRIBUTES_FN_W
10321 
10322 KSECDDDECLSPEC
10323 SECURITY_STATUS
10324 SEC_ENTRY
10325 QueryCredentialsAttributesW(
10326     _In_    PCredHandle phCredential,
10327     _In_    ULONG ulAttribute,
10328     _Inout_ PVOID pBuffer);
10329 #define QueryCredentialsAttributes QueryCredentialsAttributesW
10330 
10331 typedef
10332 SECURITY_STATUS
10333 (SEC_ENTRY * QUERY_CREDENTIALS_ATTRIBUTES_FN_W)(
10334     PCredHandle,
10335     ULONG,
10336     PVOID);
10337 #define QUERY_CREDENTIALS_ATTRIBUTES_FN QUERY_CREDENTIALS_ATTRIBUTES_FN_W
10338 
10339 KSECDDDECLSPEC
10340 SECURITY_STATUS
10341 SEC_ENTRY
10342 QuerySecurityContextToken(
10343     _In_ PCtxtHandle phContext,
10344     _Out_ PVOID* Token);
10345 
10346 typedef
10347 SECURITY_STATUS
10348 (SEC_ENTRY * QUERY_SECURITY_CONTEXT_TOKEN_FN)(
10349     PCtxtHandle, PVOID *);
10350 
10351 KSECDDDECLSPEC
10352 SECURITY_STATUS
10353 SEC_ENTRY
10354 QuerySecurityPackageInfoW(
10355     _In_ PSSPI_SEC_STRING pPackageName,
10356     _Deref_out_ PSecPkgInfoW *ppPackageInfo);
10357 #define QuerySecurityPackageInfo QuerySecurityPackageInfoW
10358 
10359 typedef
10360 SECURITY_STATUS
10361 (SEC_ENTRY * QUERY_SECURITY_PACKAGE_INFO_FN_W)(
10362     PSSPI_SEC_STRING,
10363     PSecPkgInfoW *);
10364 #define QUERY_SECURITY_PACKAGE_INFO_FN QUERY_SECURITY_PACKAGE_INFO_FN_W
10365 
10366 KSECDDDECLSPEC
10367 SECURITY_STATUS
10368 SEC_ENTRY
10369 RevertSecurityContext(
10370     _In_ PCtxtHandle phContext);
10371 
10372 typedef
10373 SECURITY_STATUS
10374 (SEC_ENTRY * REVERT_SECURITY_CONTEXT_FN)(
10375     PCtxtHandle);
10376 
10377 #if (OSVER(NTDDI_VERSION) > NTDDI_WIN2K)
10378 SECURITY_STATUS
10379 SEC_ENTRY
10380 SetContextAttributesW(
10381     _In_ PCtxtHandle phContext,
10382     _In_ ULONG ulAttribute,
10383     _In_bytecount_(cbBuffer) PVOID pBuffer,
10384     _In_ ULONG cbBuffer);
10385 #define SetContextAttributes SetContextAttributesW
10386 
10387 typedef
10388 SECURITY_STATUS
10389 (SEC_ENTRY * SET_CONTEXT_ATTRIBUTES_FN_W)(
10390     PCtxtHandle,
10391     ULONG,
10392     PVOID,
10393     ULONG);
10394 #define SET_CONTEXT_ATTRIBUTES_FN SET_CONTEXT_ATTRIBUTES_FN_W
10395 #endif
10396 
10397 #if (NTDDI_VERSION > NTDDI_WS03)
10398 KSECDDDECLSPEC
10399 SECURITY_STATUS
10400 SEC_ENTRY
10401 SetCredentialsAttributesW(
10402     _In_ PCredHandle phCredential,
10403     _In_ ULONG ulAttribute,
10404     _In_bytecount_(cbBuffer) PVOID pBuffer,
10405     _In_ ULONG cbBuffer);
10406 #define SetCredentialsAttributes SetCredentialsAttributesW
10407 
10408 typedef
10409 SECURITY_STATUS
10410 (SEC_ENTRY * SET_CREDENTIALS_ATTRIBUTES_FN_W)(
10411     PCredHandle,
10412     ULONG,
10413     PVOID,
10414     ULONG);
10415 #define SET_CREDENTIALS_ATTRIBUTES_FN SET_CREDENTIALS_ATTRIBUTES_FN_W
10416 #endif /* NTDDI_VERSION > NTDDI_WS03 */
10417 
10418 KSECDDDECLSPEC
10419 SECURITY_STATUS
10420 SEC_ENTRY
10421 VerifySignature(
10422     _In_ PCtxtHandle phContext,
10423     _In_ PSecBufferDesc pMessage,
10424     _In_ ULONG MessageSeqNo,
10425     _Out_ PULONG pfQOP);
10426 
10427 typedef
10428 SECURITY_STATUS
10429 (SEC_ENTRY * VERIFY_SIGNATURE_FN)(
10430     PCtxtHandle,
10431     PSecBufferDesc,
10432     ULONG,
10433     PULONG);
10434 
10435 #if (ISSP_MODE == 0)
10436 
10437 KSECDDDECLSPEC
10438 NTSTATUS
10439 NTAPI
10440 SecMakeSPN(
10441     _In_ PUNICODE_STRING ServiceClass,
10442     _In_ PUNICODE_STRING ServiceName,
10443     _In_opt_ PUNICODE_STRING InstanceName,
10444     _In_opt_ USHORT InstancePort,
10445     _In_opt_ PUNICODE_STRING Referrer,
10446     _Inout_ PUNICODE_STRING Spn,
10447     _Out_opt_ PULONG Length,
10448     _In_ BOOLEAN Allocate);
10449 
10450 #if (NTDDI_VERSION >= NTDDI_WINXP)
10451 KSECDDDECLSPEC
10452 NTSTATUS
10453 NTAPI
10454 SecMakeSPNEx(
10455     _In_ PUNICODE_STRING ServiceClass,
10456     _In_ PUNICODE_STRING ServiceName,
10457     _In_opt_ PUNICODE_STRING InstanceName,
10458     _In_opt_ USHORT InstancePort,
10459     _In_opt_ PUNICODE_STRING Referrer,
10460     _In_opt_ PUNICODE_STRING TargetInfo,
10461     _Inout_ PUNICODE_STRING Spn,
10462     _Out_ PULONG Length OPTIONAL,
10463     _In_ BOOLEAN Allocate);
10464 
10465 KSECDDDECLSPEC
10466 NTSTATUS
10467 SEC_ENTRY
10468 SecLookupAccountSid(
10469     _In_ PSID Sid,
10470     _Out_ PULONG NameSize,
10471     _Inout_ PUNICODE_STRING NameBuffer,
10472     _Out_ PULONG DomainSize OPTIONAL,
10473     _Out_opt_ PUNICODE_STRING DomainBuffer,
10474     _Out_ PSID_NAME_USE NameUse);
10475 
10476 KSECDDDECLSPEC
10477 NTSTATUS
10478 SEC_ENTRY
10479 SecLookupAccountName(
10480     _In_ PUNICODE_STRING Name,
10481     _Inout_ PULONG SidSize,
10482     _Out_ PSID Sid,
10483     _Out_ PSID_NAME_USE NameUse,
10484     _Out_opt_ PULONG DomainSize, // WDK says _Out_ only + ... OPTIONAL
10485     _Inout_opt_ PUNICODE_STRING ReferencedDomain);
10486 #endif
10487 
10488 #if (NTDDI_VERSION >= NTDDI_WS03)
10489 KSECDDDECLSPEC
10490 NTSTATUS
10491 SEC_ENTRY
10492 SecLookupWellKnownSid(
10493     _In_ WELL_KNOWN_SID_TYPE SidType,
10494     _Out_ PSID Sid,
10495     _In_ ULONG SidBufferSize,
10496     _Inout_opt_ PULONG SidSize);
10497 #endif
10498 
10499 #if (NTDDI_VERSION >= NTDDI_VISTA)
10500 KSECDDDECLSPEC
10501 NTSTATUS
10502 NTAPI
10503 SecMakeSPNEx2(
10504     _In_ PUNICODE_STRING ServiceClass,
10505     _In_ PUNICODE_STRING ServiceName,
10506     _In_opt_ PUNICODE_STRING InstanceName,
10507     _In_opt_ USHORT InstancePort,
10508     _In_opt_ PUNICODE_STRING Referrer,
10509     _In_opt_ PUNICODE_STRING InTargetInfo,
10510     _Inout_ PUNICODE_STRING Spn,
10511     _Out_opt_ PULONG TotalSize,
10512     _In_ BOOLEAN Allocate,
10513     _In_ BOOLEAN IsTargetInfoMarshaled);
10514 #endif
10515 
10516 #endif /* ISSP_MODE == 0 */
10517 
10518 #if (NTDDI_VERSION >= NTDDI_WIN7)
10519 
10520 SECURITY_STATUS
10521 SEC_ENTRY
10522 SspiEncodeAuthIdentityAsStrings(
10523     _In_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE pAuthIdentity,
10524     _Deref_out_opt_ PCWSTR* ppszUserName,
10525     _Deref_out_opt_ PCWSTR* ppszDomainName,
10526     _Deref_opt_out_opt_ PCWSTR* ppszPackedCredentialsString);
10527 
10528 SECURITY_STATUS
10529 SEC_ENTRY
10530 SspiValidateAuthIdentity(
10531     _In_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
10532 
10533 SECURITY_STATUS
10534 SEC_ENTRY
10535 SspiCopyAuthIdentity(
10536     _In_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData,
10537     _Deref_out_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE* AuthDataCopy);
10538 
10539 VOID
10540 SEC_ENTRY
10541 SspiFreeAuthIdentity(
10542     _In_opt_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
10543 
10544 VOID
10545 SEC_ENTRY
10546 SspiZeroAuthIdentity(
10547     _In_opt_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
10548 
10549 VOID
10550 SEC_ENTRY
10551 SspiLocalFree(
10552     _In_opt_ PVOID DataBuffer);
10553 
10554 SECURITY_STATUS
10555 SEC_ENTRY
10556 SspiEncodeStringsAsAuthIdentity(
10557     _In_opt_ PCWSTR pszUserName,
10558     _In_opt_ PCWSTR pszDomainName,
10559     _In_opt_ PCWSTR pszPackedCredentialsString,
10560     _Deref_out_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppAuthIdentity);
10561 
10562 SECURITY_STATUS
10563 SEC_ENTRY
10564 SspiCompareAuthIdentities(
10565     _In_opt_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity1,
10566     _In_opt_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity2,
10567     _Out_opt_ PBOOLEAN SameSuppliedUser,
10568     _Out_opt_ PBOOLEAN SameSuppliedIdentity);
10569 
10570 SECURITY_STATUS
10571 SEC_ENTRY
10572 SspiMarshalAuthIdentity(
10573     _In_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity,
10574     _Out_ PULONG AuthIdentityLength,
10575     _Outptr_result_bytebuffer_(*AuthIdentityLength) PCHAR* AuthIdentityByteArray);
10576 
10577 SECURITY_STATUS
10578 SEC_ENTRY
10579 SspiUnmarshalAuthIdentity(
10580     _In_ PULONG AuthIdentityLength,
10581     _In_reads_bytes_(AuthIdentityLength) PCHAR AuthIdentityByteArray,
10582     _Outptr_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppAuthIdentity);
10583 
10584 BOOLEAN
10585 SEC_ENTRY
10586 SspiIsPromptingNeeded(
10587     _In_ PULONG ErrorOrNtStatus);
10588 
10589 SECURITY_STATUS
10590 SEC_ENTRY
10591 SspiGetTargetHostName(
10592     _In_ PCWSTR pszTargetName,
10593     _Outptr_ PWSTR* pszHostName);
10594 
10595 SECURITY_STATUS
10596 SEC_ENTRY
10597 SspiExcludePackage(
10598     _In_opt_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity,
10599     _In_ PCWSTR pszPackageName,
10600     _Outptr_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppNewAuthIdentity);
10601 
10602 #define SEC_WINNT_AUTH_IDENTITY_MARSHALLED 0x04
10603 #define SEC_WINNT_AUTH_IDENTITY_ONLY 0x08
10604 
10605 #endif /* NTDDI_VERSION >= NTDDI_WIN7 */
10606 
10607 #define FreeCredentialHandle FreeCredentialsHandle
10608 struct _SECURITY_FUNCTION_TABLE_W
10609 {
10610     ULONG dwVersion;
10611     ENUMERATE_SECURITY_PACKAGES_FN_W EnumerateSecurityPackagesW;
10612     QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW;
10613     ACQUIRE_CREDENTIALS_HANDLE_FN_W AcquireCredentialsHandleW;
10614     FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
10615     PVOID Reserved2;
10616     INITIALIZE_SECURITY_CONTEXT_FN_W InitializeSecurityContextW;
10617     ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
10618     COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
10619     DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
10620     APPLY_CONTROL_TOKEN_FN ApplyControlToken;
10621     QUERY_CONTEXT_ATTRIBUTES_FN_W QueryContextAttributesW;
10622     IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
10623     REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
10624     MAKE_SIGNATURE_FN MakeSignature;
10625     VERIFY_SIGNATURE_FN VerifySignature;
10626     FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
10627     QUERY_SECURITY_PACKAGE_INFO_FN_W QuerySecurityPackageInfoW;
10628     PVOID Reserved3;
10629     PVOID Reserved4;
10630     EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext;
10631     IMPORT_SECURITY_CONTEXT_FN_W ImportSecurityContextW;
10632     ADD_CREDENTIALS_FN_W AddCredentialsW ;
10633     PVOID Reserved8;
10634     QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
10635     ENCRYPT_MESSAGE_FN EncryptMessage;
10636     DECRYPT_MESSAGE_FN DecryptMessage;
10637 #if OSVER(NTDDI_VERSION) > NTDDI_WIN2K
10638     SET_CONTEXT_ATTRIBUTES_FN_W SetContextAttributesW;
10639 #endif
10640 #if NTDDI_VERSION > NTDDI_WS03SP1
10641     SET_CREDENTIALS_ATTRIBUTES_FN_W SetCredentialsAttributesW;
10642 #endif
10643 #if ISSP_MODE != 0
10644     CHANGE_PASSWORD_FN_W ChangeAccountPasswordW;
10645 #else
10646     PVOID Reserved9;
10647 #endif
10648 };
10649 
10650 #endif /* !__SSPI_H__ */
10651 
10652 /* #if !defined(_X86AMD64_)  FIXME : WHAT ?! */
10653 #if defined(_WIN64)
10654 C_ASSERT(sizeof(ERESOURCE) == 0x68);
10655 C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x18);
10656 C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x1a);
10657 #else
10658 C_ASSERT(sizeof(ERESOURCE) == 0x38);
10659 C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x0c);
10660 C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x0e);
10661 #endif
10662 /* #endif */
10663 
10664 #if defined(_IA64_)
10665 #if (NTDDI_VERSION >= NTDDI_WIN2K)
10666 //DECLSPEC_DEPRECATED_DDK
10667 NTHALAPI
10668 ULONG
10669 NTAPI
10670 HalGetDmaAlignmentRequirement(
10671   VOID);
10672 #endif
10673 #endif
10674 
10675 #if defined(_M_IX86) || defined(_M_AMD64)
10676 #define HalGetDmaAlignmentRequirement() 1L
10677 #endif
10678 
10679 extern NTKERNELAPI PUSHORT NlsOemLeadByteInfo;
10680 #define NLS_OEM_LEAD_BYTE_INFO            NlsOemLeadByteInfo
10681 
10682 #ifdef NLS_MB_CODE_PAGE_TAG
10683 #undef NLS_MB_CODE_PAGE_TAG
10684 #endif
10685 #define NLS_MB_CODE_PAGE_TAG              NlsMbOemCodePageTag
10686 
10687 #if (NTDDI_VERSION >= NTDDI_VISTA)
10688 
10689 typedef enum _NETWORK_OPEN_LOCATION_QUALIFIER {
10690   NetworkOpenLocationAny,
10691   NetworkOpenLocationRemote,
10692   NetworkOpenLocationLoopback
10693 } NETWORK_OPEN_LOCATION_QUALIFIER;
10694 
10695 typedef enum _NETWORK_OPEN_INTEGRITY_QUALIFIER {
10696   NetworkOpenIntegrityAny,
10697   NetworkOpenIntegrityNone,
10698   NetworkOpenIntegritySigned,
10699   NetworkOpenIntegrityEncrypted,
10700   NetworkOpenIntegrityMaximum
10701 } NETWORK_OPEN_INTEGRITY_QUALIFIER;
10702 
10703 #if (NTDDI_VERSION >= NTDDI_WIN7)
10704 
10705 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_COLLAPSING 0x1
10706 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_DURABILITY 0x2
10707 #define NETWORK_OPEN_ECP_IN_FLAG_FORCE_BUFFERED_SYNCHRONOUS_IO_HACK 0x80000000
10708 
10709 typedef struct _NETWORK_OPEN_ECP_CONTEXT {
10710   USHORT Size;
10711   USHORT Reserved;
10712   _ANONYMOUS_STRUCT struct {
10713     struct {
10714       NETWORK_OPEN_LOCATION_QUALIFIER Location;
10715       NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
10716       ULONG Flags;
10717     } in;
10718     struct {
10719       NETWORK_OPEN_LOCATION_QUALIFIER Location;
10720       NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
10721       ULONG Flags;
10722     } out;
10723   } DUMMYSTRUCTNAME;
10724 } NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
10725 
10726 typedef struct _NETWORK_OPEN_ECP_CONTEXT_V0 {
10727   USHORT Size;
10728   USHORT Reserved;
10729   _ANONYMOUS_STRUCT struct {
10730     struct {
10731     NETWORK_OPEN_LOCATION_QUALIFIER Location;
10732     NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
10733     } in;
10734     struct {
10735       NETWORK_OPEN_LOCATION_QUALIFIER Location;
10736       NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
10737     } out;
10738   } DUMMYSTRUCTNAME;
10739 } NETWORK_OPEN_ECP_CONTEXT_V0, *PNETWORK_OPEN_ECP_CONTEXT_V0;
10740 
10741 #elif (NTDDI_VERSION >= NTDDI_VISTA)
10742 typedef struct _NETWORK_OPEN_ECP_CONTEXT {
10743   USHORT Size;
10744   USHORT Reserved;
10745   _ANONYMOUS_STRUCT struct {
10746     struct {
10747       NETWORK_OPEN_LOCATION_QUALIFIER Location;
10748       NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
10749     } in;
10750     struct {
10751       NETWORK_OPEN_LOCATION_QUALIFIER Location;
10752       NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
10753     } out;
10754   } DUMMYSTRUCTNAME;
10755 } NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
10756 #endif
10757 
10758 DEFINE_GUID(GUID_ECP_NETWORK_OPEN_CONTEXT, 0xc584edbf, 0x00df, 0x4d28, 0xb8, 0x84, 0x35, 0xba, 0xca, 0x89, 0x11, 0xe8);
10759 
10760 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
10761 
10762 
10763 #if (NTDDI_VERSION >= NTDDI_VISTA)
10764 
10765 typedef struct _PREFETCH_OPEN_ECP_CONTEXT {
10766   PVOID Context;
10767 } PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT;
10768 
10769 DEFINE_GUID(GUID_ECP_PREFETCH_OPEN, 0xe1777b21, 0x847e, 0x4837, 0xaa, 0x45, 0x64, 0x16, 0x1d, 0x28, 0x6, 0x55);
10770 
10771 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
10772 
10773 #if (NTDDI_VERSION >= NTDDI_WIN7)
10774 
10775 DEFINE_GUID (GUID_ECP_NFS_OPEN, 0xf326d30c, 0xe5f8, 0x4fe7, 0xab, 0x74, 0xf5, 0xa3, 0x19, 0x6d, 0x92, 0xdb);
10776 DEFINE_GUID (GUID_ECP_SRV_OPEN, 0xbebfaebc, 0xaabf, 0x489d, 0x9d, 0x2c, 0xe9, 0xe3, 0x61, 0x10, 0x28, 0x53);
10777 
10778 typedef struct sockaddr_storage *PSOCKADDR_STORAGE_NFS;
10779 
10780 typedef struct _NFS_OPEN_ECP_CONTEXT {
10781   PUNICODE_STRING ExportAlias;
10782   PSOCKADDR_STORAGE_NFS ClientSocketAddress;
10783 } NFS_OPEN_ECP_CONTEXT, *PNFS_OPEN_ECP_CONTEXT, **PPNFS_OPEN_ECP_CONTEXT;
10784 
10785 typedef struct _SRV_OPEN_ECP_CONTEXT {
10786   PUNICODE_STRING ShareName;
10787   PSOCKADDR_STORAGE_NFS SocketAddress;
10788   BOOLEAN OplockBlockState;
10789   BOOLEAN OplockAppState;
10790   BOOLEAN OplockFinalState;
10791 } SRV_OPEN_ECP_CONTEXT, *PSRV_OPEN_ECP_CONTEXT;
10792 
10793 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
10794 
10795 #define PIN_WAIT                        (1)
10796 #define PIN_EXCLUSIVE                   (2)
10797 #define PIN_NO_READ                     (4)
10798 #define PIN_IF_BCB                      (8)
10799 #define PIN_CALLER_TRACKS_DIRTY_DATA    (32)
10800 #define PIN_HIGH_PRIORITY               (64)
10801 
10802 #define MAP_WAIT                        1
10803 #define MAP_NO_READ                     (16)
10804 #define MAP_HIGH_PRIORITY               (64)
10805 
10806 #define IOCTL_REDIR_QUERY_PATH          CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
10807 #define IOCTL_REDIR_QUERY_PATH_EX       CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 100, METHOD_NEITHER, FILE_ANY_ACCESS)
10808 
10809 typedef struct _QUERY_PATH_REQUEST {
10810   ULONG PathNameLength;
10811   PIO_SECURITY_CONTEXT SecurityContext;
10812   WCHAR FilePathName[1];
10813 } QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST;
10814 
10815 typedef struct _QUERY_PATH_REQUEST_EX {
10816   PIO_SECURITY_CONTEXT pSecurityContext;
10817   ULONG EaLength;
10818   PVOID pEaBuffer;
10819   UNICODE_STRING PathName;
10820   UNICODE_STRING DomainServiceName;
10821   ULONG_PTR Reserved[ 3 ];
10822 } QUERY_PATH_REQUEST_EX, *PQUERY_PATH_REQUEST_EX;
10823 
10824 typedef struct _QUERY_PATH_RESPONSE {
10825   ULONG LengthAccepted;
10826 } QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE;
10827 
10828 #define VOLSNAPCONTROLTYPE                              0x00000053
10829 #define IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES             CTL_CODE(VOLSNAPCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
10830 
10831 /* FIXME : These definitions below don't belong here (or anywhere in ddk really) */
10832 #pragma pack(push,4)
10833 
10834 #ifndef VER_PRODUCTBUILD
10835 #define VER_PRODUCTBUILD 10000
10836 #endif
10837 
10838 #include "csq.h"
10839 
10840 #define FS_LFN_APIS                             0x00004000
10841 
10842 #define FILE_STORAGE_TYPE_SPECIFIED             0x00000041  /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
10843 #define FILE_STORAGE_TYPE_DEFAULT               (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
10844 #define FILE_STORAGE_TYPE_DIRECTORY             (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
10845 #define FILE_STORAGE_TYPE_FILE                  (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
10846 #define FILE_STORAGE_TYPE_DOCFILE               (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
10847 #define FILE_STORAGE_TYPE_JUNCTION_POINT        (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
10848 #define FILE_STORAGE_TYPE_CATALOG               (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
10849 #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE    (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
10850 #define FILE_STORAGE_TYPE_EMBEDDING             (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
10851 #define FILE_STORAGE_TYPE_STREAM                (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
10852 #define FILE_MINIMUM_STORAGE_TYPE               FILE_STORAGE_TYPE_DEFAULT
10853 #define FILE_MAXIMUM_STORAGE_TYPE               FILE_STORAGE_TYPE_STREAM
10854 #define FILE_STORAGE_TYPE_MASK                  0x000f0000
10855 #define FILE_STORAGE_TYPE_SHIFT                 16
10856 
10857 #define FILE_VC_QUOTAS_LOG_VIOLATIONS           0x00000004
10858 
10859 #ifdef _X86_
10860 #define HARDWARE_PTE    HARDWARE_PTE_X86
10861 #define PHARDWARE_PTE   PHARDWARE_PTE_X86
10862 #endif
10863 
10864 #define IO_ATTACH_DEVICE_API            0x80000000
10865 
10866 #define IO_TYPE_APC                     18
10867 #define IO_TYPE_DPC                     19
10868 #define IO_TYPE_DEVICE_QUEUE            20
10869 #define IO_TYPE_EVENT_PAIR              21
10870 #define IO_TYPE_INTERRUPT               22
10871 #define IO_TYPE_PROFILE                 23
10872 
10873 #define IRP_BEING_VERIFIED              0x10
10874 
10875 #define MAILSLOT_CLASS_FIRSTCLASS       1
10876 #define MAILSLOT_CLASS_SECONDCLASS      2
10877 
10878 #define MAILSLOT_SIZE_AUTO              0
10879 
10880 #define MEM_DOS_LIM                     0x40000000
10881 
10882 #define OB_TYPE_TYPE                    1
10883 #define OB_TYPE_DIRECTORY               2
10884 #define OB_TYPE_SYMBOLIC_LINK           3
10885 #define OB_TYPE_TOKEN                   4
10886 #define OB_TYPE_PROCESS                 5
10887 #define OB_TYPE_THREAD                  6
10888 #define OB_TYPE_EVENT                   7
10889 #define OB_TYPE_EVENT_PAIR              8
10890 #define OB_TYPE_MUTANT                  9
10891 #define OB_TYPE_SEMAPHORE               10
10892 #define OB_TYPE_TIMER                   11
10893 #define OB_TYPE_PROFILE                 12
10894 #define OB_TYPE_WINDOW_STATION          13
10895 #define OB_TYPE_DESKTOP                 14
10896 #define OB_TYPE_SECTION                 15
10897 #define OB_TYPE_KEY                     16
10898 #define OB_TYPE_PORT                    17
10899 #define OB_TYPE_ADAPTER                 18
10900 #define OB_TYPE_CONTROLLER              19
10901 #define OB_TYPE_DEVICE                  20
10902 #define OB_TYPE_DRIVER                  21
10903 #define OB_TYPE_IO_COMPLETION           22
10904 #define OB_TYPE_FILE                    23
10905 
10906 #define SEC_BASED 0x00200000
10907 
10908 /* end winnt.h */
10909 
10910 #define TOKEN_HAS_ADMIN_GROUP           0x08
10911 
10912 #if (VER_PRODUCTBUILD >= 1381)
10913 #define FSCTL_GET_HFS_INFORMATION       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
10914 #endif /* (VER_PRODUCTBUILD >= 1381) */
10915 
10916 #if (VER_PRODUCTBUILD >= 2195)
10917 
10918 #define FSCTL_READ_PROPERTY_DATA        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
10919 #define FSCTL_WRITE_PROPERTY_DATA       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
10920 
10921 #define FSCTL_DUMP_PROPERTY_DATA        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37,  METHOD_NEITHER, FILE_ANY_ACCESS)
10922 
10923 #define FSCTL_HSM_MSG                   CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
10924 #define FSCTL_NSS_CONTROL               CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
10925 #define FSCTL_HSM_DATA                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
10926 #define FSCTL_NSS_RCONTROL              CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
10927 #endif /* (VER_PRODUCTBUILD >= 2195) */
10928 
10929 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO    CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
10930 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO    CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
10931 #define FSCTL_NETWORK_GET_CONNECTION_INFO       CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
10932 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS     CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
10933 #define FSCTL_NETWORK_DELETE_CONNECTION         CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
10934 #define FSCTL_NETWORK_GET_STATISTICS            CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
10935 #define FSCTL_NETWORK_SET_DOMAIN_NAME           CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
10936 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT     CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
10937 
10938 typedef enum _FILE_STORAGE_TYPE {
10939     StorageTypeDefault = 1,
10940     StorageTypeDirectory,
10941     StorageTypeFile,
10942     StorageTypeJunctionPoint,
10943     StorageTypeCatalog,
10944     StorageTypeStructuredStorage,
10945     StorageTypeEmbedding,
10946     StorageTypeStream
10947 } FILE_STORAGE_TYPE;
10948 
10949 typedef struct _OBJECT_BASIC_INFORMATION
10950 {
10951     ULONG Attributes;
10952     ACCESS_MASK GrantedAccess;
10953     ULONG HandleCount;
10954     ULONG PointerCount;
10955     ULONG PagedPoolCharge;
10956     ULONG NonPagedPoolCharge;
10957     ULONG Reserved[ 3 ];
10958     ULONG NameInfoSize;
10959     ULONG TypeInfoSize;
10960     ULONG SecurityDescriptorSize;
10961     LARGE_INTEGER CreationTime;
10962 } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
10963 
10964 typedef struct _BITMAP_RANGE {
10965     LIST_ENTRY      Links;
10966     LONGLONG        BasePage;
10967     ULONG           FirstDirtyPage;
10968     ULONG           LastDirtyPage;
10969     ULONG           DirtyPages;
10970     PULONG          Bitmap;
10971 } BITMAP_RANGE, *PBITMAP_RANGE;
10972 
10973 typedef struct _FILE_COPY_ON_WRITE_INFORMATION {
10974     BOOLEAN ReplaceIfExists;
10975     HANDLE  RootDirectory;
10976     ULONG   FileNameLength;
10977     WCHAR   FileName[1];
10978 } FILE_COPY_ON_WRITE_INFORMATION, *PFILE_COPY_ON_WRITE_INFORMATION;
10979 
10980 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
10981     ULONG           NextEntryOffset;
10982     ULONG           FileIndex;
10983     LARGE_INTEGER   CreationTime;
10984     LARGE_INTEGER   LastAccessTime;
10985     LARGE_INTEGER   LastWriteTime;
10986     LARGE_INTEGER   ChangeTime;
10987     LARGE_INTEGER   EndOfFile;
10988     LARGE_INTEGER   AllocationSize;
10989     ULONG           FileAttributes;
10990     ULONG           FileNameLength;
10991     ULONG           EaSize;
10992     WCHAR           FileName[ANYSIZE_ARRAY];
10993 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION;
10994 
10995 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
10996 typedef struct _FILE_SHARED_LOCK_ENTRY {
10997     PVOID           Unknown1;
10998     PVOID           Unknown2;
10999     FILE_LOCK_INFO  FileLock;
11000 } FILE_SHARED_LOCK_ENTRY, *PFILE_SHARED_LOCK_ENTRY;
11001 
11002 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
11003 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY {
11004     LIST_ENTRY      ListEntry;
11005     PVOID           Unknown1;
11006     PVOID           Unknown2;
11007     FILE_LOCK_INFO  FileLock;
11008 } FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
11009 
11010 typedef struct _FILE_MAILSLOT_PEEK_BUFFER {
11011     ULONG ReadDataAvailable;
11012     ULONG NumberOfMessages;
11013     ULONG MessageLength;
11014 } FILE_MAILSLOT_PEEK_BUFFER, *PFILE_MAILSLOT_PEEK_BUFFER;
11015 
11016 typedef struct _FILE_OLE_CLASSID_INFORMATION {
11017     GUID ClassId;
11018 } FILE_OLE_CLASSID_INFORMATION, *PFILE_OLE_CLASSID_INFORMATION;
11019 
11020 typedef struct _FILE_OLE_ALL_INFORMATION {
11021     FILE_BASIC_INFORMATION          BasicInformation;
11022     FILE_STANDARD_INFORMATION       StandardInformation;
11023     FILE_INTERNAL_INFORMATION       InternalInformation;
11024     FILE_EA_INFORMATION             EaInformation;
11025     FILE_ACCESS_INFORMATION         AccessInformation;
11026     FILE_POSITION_INFORMATION       PositionInformation;
11027     FILE_MODE_INFORMATION           ModeInformation;
11028     FILE_ALIGNMENT_INFORMATION      AlignmentInformation;
11029     USN                             LastChangeUsn;
11030     USN                             ReplicationUsn;
11031     LARGE_INTEGER                   SecurityChangeTime;
11032     FILE_OLE_CLASSID_INFORMATION    OleClassIdInformation;
11033     FILE_OBJECTID_INFORMATION       ObjectIdInformation;
11034     FILE_STORAGE_TYPE               StorageType;
11035     ULONG                           OleStateBits;
11036     ULONG                           OleId;
11037     ULONG                           NumberOfStreamReferences;
11038     ULONG                           StreamIndex;
11039     ULONG                           SecurityId;
11040     BOOLEAN                         ContentIndexDisable;
11041     BOOLEAN                         InheritContentIndexDisable;
11042     FILE_NAME_INFORMATION           NameInformation;
11043 } FILE_OLE_ALL_INFORMATION, *PFILE_OLE_ALL_INFORMATION;
11044 
11045 typedef struct _FILE_OLE_DIR_INFORMATION {
11046     ULONG               NextEntryOffset;
11047     ULONG               FileIndex;
11048     LARGE_INTEGER       CreationTime;
11049     LARGE_INTEGER       LastAccessTime;
11050     LARGE_INTEGER       LastWriteTime;
11051     LARGE_INTEGER       ChangeTime;
11052     LARGE_INTEGER       EndOfFile;
11053     LARGE_INTEGER       AllocationSize;
11054     ULONG               FileAttributes;
11055     ULONG               FileNameLength;
11056     FILE_STORAGE_TYPE   StorageType;
11057     GUID                OleClassId;
11058     ULONG               OleStateBits;
11059     BOOLEAN             ContentIndexDisable;
11060     BOOLEAN             InheritContentIndexDisable;
11061     WCHAR               FileName[1];
11062 } FILE_OLE_DIR_INFORMATION, *PFILE_OLE_DIR_INFORMATION;
11063 
11064 typedef struct _FILE_OLE_INFORMATION {
11065     LARGE_INTEGER                   SecurityChangeTime;
11066     FILE_OLE_CLASSID_INFORMATION    OleClassIdInformation;
11067     FILE_OBJECTID_INFORMATION       ObjectIdInformation;
11068     FILE_STORAGE_TYPE               StorageType;
11069     ULONG                           OleStateBits;
11070     BOOLEAN                         ContentIndexDisable;
11071     BOOLEAN                         InheritContentIndexDisable;
11072 } FILE_OLE_INFORMATION, *PFILE_OLE_INFORMATION;
11073 
11074 typedef struct _FILE_OLE_STATE_BITS_INFORMATION {
11075     ULONG StateBits;
11076     ULONG StateBitsMask;
11077 } FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION;
11078 
11079 typedef struct _MAPPING_PAIR {
11080     ULONGLONG Vcn;
11081     ULONGLONG Lcn;
11082 } MAPPING_PAIR, *PMAPPING_PAIR;
11083 
11084 typedef struct _GET_RETRIEVAL_DESCRIPTOR {
11085     ULONG           NumberOfPairs;
11086     ULONGLONG       StartVcn;
11087     MAPPING_PAIR    Pair[1];
11088 } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
11089 
11090 typedef struct _MBCB {
11091     CSHORT          NodeTypeCode;
11092     CSHORT          NodeIsInZone;
11093     ULONG           PagesToWrite;
11094     ULONG           DirtyPages;
11095     ULONG           Reserved;
11096     LIST_ENTRY      BitmapRanges;
11097     LONGLONG        ResumeWritePage;
11098     BITMAP_RANGE    BitmapRange1;
11099     BITMAP_RANGE    BitmapRange2;
11100     BITMAP_RANGE    BitmapRange3;
11101 } MBCB, *PMBCB;
11102 
11103 typedef struct _MOVEFILE_DESCRIPTOR {
11104      HANDLE         FileHandle;
11105      ULONG          Reserved;
11106      LARGE_INTEGER  StartVcn;
11107      LARGE_INTEGER  TargetLcn;
11108      ULONG          NumVcns;
11109      ULONG          Reserved1;
11110 } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
11111 
11112 typedef struct _OBJECT_BASIC_INFO {
11113     ULONG           Attributes;
11114     ACCESS_MASK     GrantedAccess;
11115     ULONG           HandleCount;
11116     ULONG           ReferenceCount;
11117     ULONG           PagedPoolUsage;
11118     ULONG           NonPagedPoolUsage;
11119     ULONG           Reserved[3];
11120     ULONG           NameInformationLength;
11121     ULONG           TypeInformationLength;
11122     ULONG           SecurityDescriptorLength;
11123     LARGE_INTEGER   CreateTime;
11124 } OBJECT_BASIC_INFO, *POBJECT_BASIC_INFO;
11125 
11126 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO {
11127     BOOLEAN Inherit;
11128     BOOLEAN ProtectFromClose;
11129 } OBJECT_HANDLE_ATTRIBUTE_INFO, *POBJECT_HANDLE_ATTRIBUTE_INFO;
11130 
11131 typedef struct _OBJECT_NAME_INFO {
11132     UNICODE_STRING  ObjectName;
11133     WCHAR           ObjectNameBuffer[1];
11134 } OBJECT_NAME_INFO, *POBJECT_NAME_INFO;
11135 
11136 typedef struct _OBJECT_PROTECTION_INFO {
11137     BOOLEAN Inherit;
11138     BOOLEAN ProtectHandle;
11139 } OBJECT_PROTECTION_INFO, *POBJECT_PROTECTION_INFO;
11140 
11141 typedef struct _OBJECT_TYPE_INFO {
11142     UNICODE_STRING  ObjectTypeName;
11143     UCHAR           Unknown[0x58];
11144     WCHAR           ObjectTypeNameBuffer[1];
11145 } OBJECT_TYPE_INFO, *POBJECT_TYPE_INFO;
11146 
11147 typedef struct _OBJECT_ALL_TYPES_INFO {
11148     ULONG               NumberOfObjectTypes;
11149     OBJECT_TYPE_INFO    ObjectsTypeInfo[1];
11150 } OBJECT_ALL_TYPES_INFO, *POBJECT_ALL_TYPES_INFO;
11151 
11152 #if defined(USE_LPC6432)
11153 #define LPC_CLIENT_ID CLIENT_ID64
11154 #define LPC_SIZE_T ULONGLONG
11155 #define LPC_PVOID ULONGLONG
11156 #define LPC_HANDLE ULONGLONG
11157 #else
11158 #define LPC_CLIENT_ID CLIENT_ID
11159 #define LPC_SIZE_T SIZE_T
11160 #define LPC_PVOID PVOID
11161 #define LPC_HANDLE HANDLE
11162 #endif
11163 
11164 typedef struct _PORT_MESSAGE
11165 {
11166     union
11167     {
11168         struct
11169         {
11170             CSHORT DataLength;
11171             CSHORT TotalLength;
11172         } s1;
11173         ULONG Length;
11174     } u1;
11175     union
11176     {
11177         struct
11178         {
11179             CSHORT Type;
11180             CSHORT DataInfoOffset;
11181         } s2;
11182         ULONG ZeroInit;
11183     } u2;
11184     __GNU_EXTENSION union
11185     {
11186         LPC_CLIENT_ID ClientId;
11187         double DoNotUseThisField;
11188     };
11189     ULONG MessageId;
11190     __GNU_EXTENSION union
11191     {
11192         LPC_SIZE_T ClientViewSize;
11193         ULONG CallbackId;
11194     };
11195 } PORT_MESSAGE, *PPORT_MESSAGE;
11196 
11197 #define LPC_KERNELMODE_MESSAGE      (CSHORT)((USHORT)0x8000)
11198 
11199 typedef struct _PORT_VIEW
11200 {
11201     ULONG Length;
11202     LPC_HANDLE SectionHandle;
11203     ULONG SectionOffset;
11204     LPC_SIZE_T ViewSize;
11205     LPC_PVOID ViewBase;
11206     LPC_PVOID ViewRemoteBase;
11207 } PORT_VIEW, *PPORT_VIEW;
11208 
11209 typedef struct _REMOTE_PORT_VIEW
11210 {
11211     ULONG Length;
11212     LPC_SIZE_T ViewSize;
11213     LPC_PVOID ViewBase;
11214 } REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW;
11215 
11216 typedef struct _VAD_HEADER {
11217     PVOID       StartVPN;
11218     PVOID       EndVPN;
11219     struct _VAD_HEADER* ParentLink;
11220     struct _VAD_HEADER* LeftLink;
11221     struct _VAD_HEADER* RightLink;
11222     ULONG       Flags;          /* LSB = CommitCharge */
11223     PVOID       ControlArea;
11224     PVOID       FirstProtoPte;
11225     PVOID       LastPTE;
11226     ULONG       Unknown;
11227     LIST_ENTRY  Secured;
11228 } VAD_HEADER, *PVAD_HEADER;
11229 
11230 NTKERNELAPI
11231 LARGE_INTEGER
11232 NTAPI
11233 CcGetLsnForFileObject (
11234     IN PFILE_OBJECT     FileObject,
11235     OUT PLARGE_INTEGER  OldestLsn OPTIONAL
11236 );
11237 
11238 NTKERNELAPI
11239 PVOID
11240 NTAPI
11241 FsRtlAllocatePool (
11242     IN POOL_TYPE    PoolType,
11243     IN ULONG        NumberOfBytes
11244 );
11245 
11246 NTKERNELAPI
11247 PVOID
11248 NTAPI
11249 FsRtlAllocatePoolWithQuota (
11250     IN POOL_TYPE    PoolType,
11251     IN ULONG        NumberOfBytes
11252 );
11253 
11254 NTKERNELAPI
11255 PVOID
11256 NTAPI
11257 FsRtlAllocatePoolWithQuotaTag (
11258     IN POOL_TYPE    PoolType,
11259     IN ULONG        NumberOfBytes,
11260     IN ULONG        Tag
11261 );
11262 
11263 NTKERNELAPI
11264 PVOID
11265 NTAPI
11266 FsRtlAllocatePoolWithTag (
11267     IN POOL_TYPE    PoolType,
11268     IN ULONG        NumberOfBytes,
11269     IN ULONG        Tag
11270 );
11271 
11272 NTKERNELAPI
11273 BOOLEAN
11274 NTAPI
11275 FsRtlMdlReadComplete (
11276     IN PFILE_OBJECT     FileObject,
11277     IN PMDL             MdlChain
11278 );
11279 
11280 NTKERNELAPI
11281 BOOLEAN
11282 NTAPI
11283 FsRtlMdlWriteComplete (
11284     IN PFILE_OBJECT     FileObject,
11285     IN PLARGE_INTEGER   FileOffset,
11286     IN PMDL             MdlChain
11287 );
11288 
11289 NTKERNELAPI
11290 VOID
11291 NTAPI
11292 FsRtlNotifyChangeDirectory (
11293     IN PNOTIFY_SYNC NotifySync,
11294     IN PVOID        FsContext,
11295     IN PSTRING      FullDirectoryName,
11296     IN PLIST_ENTRY  NotifyList,
11297     IN BOOLEAN      WatchTree,
11298     IN ULONG        CompletionFilter,
11299     IN PIRP         NotifyIrp
11300 );
11301 
11302 NTKERNELAPI
11303 NTSTATUS
11304 NTAPI
11305 ObCreateObject (
11306     IN KPROCESSOR_MODE      ObjectAttributesAccessMode OPTIONAL,
11307     IN POBJECT_TYPE         ObjectType,
11308     IN POBJECT_ATTRIBUTES   ObjectAttributes OPTIONAL,
11309     IN KPROCESSOR_MODE      AccessMode,
11310     IN OUT PVOID            ParseContext OPTIONAL,
11311     IN ULONG                ObjectSize,
11312     IN ULONG                PagedPoolCharge OPTIONAL,
11313     IN ULONG                NonPagedPoolCharge OPTIONAL,
11314     OUT PVOID               *Object
11315 );
11316 
11317 NTKERNELAPI
11318 ULONG
11319 NTAPI
11320 ObGetObjectPointerCount (
11321     IN PVOID Object
11322 );
11323 
11324 NTKERNELAPI
11325 NTSTATUS
11326 NTAPI
11327 ObReferenceObjectByName (
11328     IN PUNICODE_STRING  ObjectName,
11329     IN ULONG            Attributes,
11330     IN PACCESS_STATE    PassedAccessState OPTIONAL,
11331     IN ACCESS_MASK      DesiredAccess OPTIONAL,
11332     IN POBJECT_TYPE     ObjectType,
11333     IN KPROCESSOR_MODE  AccessMode,
11334     IN OUT PVOID        ParseContext OPTIONAL,
11335     OUT PVOID           *Object
11336 );
11337 
11338 #define PsDereferenceImpersonationToken(T)  \
11339             {if (ARGUMENT_PRESENT(T)) {     \
11340                 (ObDereferenceObject((T))); \
11341             } else {                        \
11342                 ;                           \
11343             }                               \
11344 }
11345 
11346 NTKERNELAPI
11347 NTSTATUS
11348 NTAPI
11349 PsLookupProcessThreadByCid (
11350     IN PCLIENT_ID   Cid,
11351     OUT PEPROCESS   *Process OPTIONAL,
11352     OUT PETHREAD    *Thread
11353 );
11354 
11355 NTSYSAPI
11356 NTSTATUS
11357 NTAPI
11358 RtlSetSaclSecurityDescriptor (
11359     IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
11360     IN BOOLEAN                  SaclPresent,
11361     IN PACL                     Sacl,
11362     IN BOOLEAN                  SaclDefaulted
11363 );
11364 
11365 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
11366 
11367 #if (VER_PRODUCTBUILD >= 2195)
11368 
11369 NTSYSAPI
11370 NTSTATUS
11371 NTAPI
11372 ZwAdjustPrivilegesToken (
11373     IN HANDLE               TokenHandle,
11374     IN BOOLEAN              DisableAllPrivileges,
11375     IN PTOKEN_PRIVILEGES    NewState,
11376     IN ULONG                BufferLength,
11377     OUT PTOKEN_PRIVILEGES   PreviousState OPTIONAL,
11378     OUT PULONG              ReturnLength
11379 );
11380 
11381 #endif /* (VER_PRODUCTBUILD >= 2195) */
11382 
11383 NTSYSAPI
11384 NTSTATUS
11385 NTAPI
11386 ZwAlertThread (
11387     IN HANDLE ThreadHandle
11388 );
11389 
11390 NTSYSAPI
11391 NTSTATUS
11392 NTAPI
11393 ZwAccessCheckAndAuditAlarm (
11394     IN PUNICODE_STRING      SubsystemName,
11395     IN PVOID                HandleId,
11396     IN PUNICODE_STRING      ObjectTypeName,
11397     IN PUNICODE_STRING      ObjectName,
11398     IN PSECURITY_DESCRIPTOR SecurityDescriptor,
11399     IN ACCESS_MASK          DesiredAccess,
11400     IN PGENERIC_MAPPING     GenericMapping,
11401     IN BOOLEAN              ObjectCreation,
11402     OUT PACCESS_MASK        GrantedAccess,
11403     OUT PBOOLEAN            AccessStatus,
11404     OUT PBOOLEAN            GenerateOnClose
11405 );
11406 
11407 #if (VER_PRODUCTBUILD >= 2195)
11408 
11409 NTSYSAPI
11410 NTSTATUS
11411 NTAPI
11412 ZwCancelIoFile (
11413     IN HANDLE               FileHandle,
11414     OUT PIO_STATUS_BLOCK    IoStatusBlock
11415 );
11416 
11417 #endif /* (VER_PRODUCTBUILD >= 2195) */
11418 
11419 NTSYSAPI
11420 NTSTATUS
11421 NTAPI
11422 ZwClearEvent (
11423     IN HANDLE EventHandle
11424 );
11425 
11426 NTSYSAPI
11427 NTSTATUS
11428 NTAPI
11429 ZwCloseObjectAuditAlarm (
11430     IN PUNICODE_STRING  SubsystemName,
11431     IN PVOID            HandleId,
11432     IN BOOLEAN          GenerateOnClose
11433 );
11434 
11435 NTSYSAPI
11436 NTSTATUS
11437 NTAPI
11438 ZwCreateSymbolicLinkObject (
11439     OUT PHANDLE             SymbolicLinkHandle,
11440     IN ACCESS_MASK          DesiredAccess,
11441     IN POBJECT_ATTRIBUTES   ObjectAttributes,
11442     IN PUNICODE_STRING      TargetName
11443 );
11444 
11445 NTSYSAPI
11446 NTSTATUS
11447 NTAPI
11448 ZwFlushInstructionCache (
11449     IN HANDLE   ProcessHandle,
11450     IN PVOID    BaseAddress OPTIONAL,
11451     IN ULONG    FlushSize
11452 );
11453 
11454 NTSYSAPI
11455 NTSTATUS
11456 NTAPI
11457 ZwFlushBuffersFile(
11458     IN HANDLE FileHandle,
11459     OUT PIO_STATUS_BLOCK IoStatusBlock
11460 );
11461 
11462 #if (VER_PRODUCTBUILD >= 2195)
11463 
11464 NTSYSAPI
11465 NTSTATUS
11466 NTAPI
11467 ZwInitiatePowerAction (
11468     IN POWER_ACTION         SystemAction,
11469     IN SYSTEM_POWER_STATE   MinSystemState,
11470     IN ULONG                Flags,
11471     IN BOOLEAN              Asynchronous
11472 );
11473 
11474 #endif /* (VER_PRODUCTBUILD >= 2195) */
11475 
11476 NTSYSAPI
11477 NTSTATUS
11478 NTAPI
11479 ZwLoadKey (
11480     IN POBJECT_ATTRIBUTES KeyObjectAttributes,
11481     IN POBJECT_ATTRIBUTES FileObjectAttributes
11482 );
11483 
11484 NTSYSAPI
11485 NTSTATUS
11486 NTAPI
11487 ZwOpenProcessToken (
11488     IN HANDLE       ProcessHandle,
11489     IN ACCESS_MASK  DesiredAccess,
11490     OUT PHANDLE     TokenHandle
11491 );
11492 
11493 NTSYSAPI
11494 NTSTATUS
11495 NTAPI
11496 ZwOpenThread (
11497     OUT PHANDLE             ThreadHandle,
11498     IN ACCESS_MASK          DesiredAccess,
11499     IN POBJECT_ATTRIBUTES   ObjectAttributes,
11500     IN PCLIENT_ID           ClientId
11501 );
11502 
11503 NTSYSAPI
11504 NTSTATUS
11505 NTAPI
11506 ZwOpenThreadToken (
11507     IN HANDLE       ThreadHandle,
11508     IN ACCESS_MASK  DesiredAccess,
11509     IN BOOLEAN      OpenAsSelf,
11510     OUT PHANDLE     TokenHandle
11511 );
11512 
11513 NTSYSAPI
11514 NTSTATUS
11515 NTAPI
11516 ZwPulseEvent (
11517     IN HANDLE   EventHandle,
11518     OUT PLONG   PreviousState OPTIONAL
11519 );
11520 
11521 NTSYSAPI
11522 NTSTATUS
11523 NTAPI
11524 ZwQueryDefaultLocale (
11525     IN BOOLEAN  ThreadOrSystem,
11526     OUT PLCID   Locale
11527 );
11528 
11529 #if (VER_PRODUCTBUILD >= 2195)
11530 
11531 NTSYSAPI
11532 NTSTATUS
11533 NTAPI
11534 ZwQueryDirectoryObject (
11535     IN HANDLE       DirectoryHandle,
11536     OUT PVOID       Buffer,
11537     IN ULONG        Length,
11538     IN BOOLEAN      ReturnSingleEntry,
11539     IN BOOLEAN      RestartScan,
11540     IN OUT PULONG   Context,
11541     OUT PULONG      ReturnLength OPTIONAL
11542 );
11543 
11544 #endif /* (VER_PRODUCTBUILD >= 2195) */
11545 
11546 NTSYSAPI
11547 NTSTATUS
11548 NTAPI
11549 ZwQueryInformationProcess (
11550     IN HANDLE           ProcessHandle,
11551     IN PROCESSINFOCLASS ProcessInformationClass,
11552     OUT PVOID           ProcessInformation,
11553     IN ULONG            ProcessInformationLength,
11554     OUT PULONG          ReturnLength OPTIONAL
11555 );
11556 
11557 NTSYSAPI
11558 NTSTATUS
11559 NTAPI
11560 ZwReplaceKey (
11561     IN POBJECT_ATTRIBUTES   NewFileObjectAttributes,
11562     IN HANDLE               KeyHandle,
11563     IN POBJECT_ATTRIBUTES   OldFileObjectAttributes
11564 );
11565 
11566 NTSYSAPI
11567 NTSTATUS
11568 NTAPI
11569 ZwResetEvent (
11570     IN HANDLE   EventHandle,
11571     OUT PLONG   PreviousState OPTIONAL
11572 );
11573 
11574 #if (VER_PRODUCTBUILD >= 2195)
11575 
11576 NTSYSAPI
11577 NTSTATUS
11578 NTAPI
11579 ZwRestoreKey (
11580     IN HANDLE   KeyHandle,
11581     IN HANDLE   FileHandle,
11582     IN ULONG    Flags
11583 );
11584 
11585 #endif /* (VER_PRODUCTBUILD >= 2195) */
11586 
11587 NTSYSAPI
11588 NTSTATUS
11589 NTAPI
11590 ZwSaveKey (
11591     IN HANDLE KeyHandle,
11592     IN HANDLE FileHandle
11593 );
11594 
11595 NTSYSAPI
11596 NTSTATUS
11597 NTAPI
11598 ZwSetDefaultLocale (
11599     IN BOOLEAN  ThreadOrSystem,
11600     IN LCID     Locale
11601 );
11602 
11603 #if (VER_PRODUCTBUILD >= 2195)
11604 
11605 NTSYSAPI
11606 NTSTATUS
11607 NTAPI
11608 ZwSetDefaultUILanguage (
11609     IN LANGID LanguageId
11610 );
11611 
11612 #endif /* (VER_PRODUCTBUILD >= 2195) */
11613 
11614 NTSYSAPI
11615 NTSTATUS
11616 NTAPI
11617 ZwSetInformationProcess (
11618     IN HANDLE           ProcessHandle,
11619     IN PROCESSINFOCLASS ProcessInformationClass,
11620     IN PVOID            ProcessInformation,
11621     IN ULONG            ProcessInformationLength
11622 );
11623 
11624 NTSYSAPI
11625 NTSTATUS
11626 NTAPI
11627 ZwSetSystemTime (
11628     IN PLARGE_INTEGER   NewTime,
11629     OUT PLARGE_INTEGER  OldTime OPTIONAL
11630 );
11631 
11632 NTSYSAPI
11633 NTSTATUS
11634 NTAPI
11635 ZwUnloadKey (
11636     IN POBJECT_ATTRIBUTES KeyObjectAttributes
11637 );
11638 
11639 NTSYSAPI
11640 NTSTATUS
11641 NTAPI
11642 ZwWaitForMultipleObjects (
11643     IN ULONG            HandleCount,
11644     IN PHANDLE          Handles,
11645     IN WAIT_TYPE        WaitType,
11646     IN BOOLEAN          Alertable,
11647     IN PLARGE_INTEGER   Timeout OPTIONAL
11648 );
11649 
11650 NTSYSAPI
11651 NTSTATUS
11652 NTAPI
11653 ZwYieldExecution (
11654     VOID
11655 );
11656 
11657 #pragma pack(pop)
11658 
11659 #ifdef __cplusplus
11660 }
11661 #endif

Generated on Sun May 27 2012 04:30:13 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.