~steve-sk2/mingw-w64/oneiric

« back to all changes in this revision

Viewing changes to mingw-w64-headers/ddk/include/ddk/ntifs.h

  • Committer: Bazaar Package Importer
  • Author(s): Stephen Kitt
  • Date: 2010-11-18 00:04:46 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20101118000446-xe24b423su55onyl
Tags: 1.0+20101003-1
* New maintainer. (Closes: #594371.)
* New upstream snapshot:
  - Includes getopt.h. (Closes: #569914.)
* Build g++ for Win64. (Closes: #600451.)
* Standards-Version 3.9.1 (new packaging).
* Include patch from
  http://mingw-w64.svn.sourceforge.net/viewvc/mingw-w64?view=revision&revision=3715
  as suggested by Rafaël Carré.

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
 *
4
4
 * Windows NT Filesystem Driver Developer Kit
5
5
 *
6
 
 * This file is part of the w32api package.
 
6
 * This file is part of the ReactOS DDK package.
7
7
 *
8
8
 * Contributors:
9
 
 *   Created by Bo Brant�n <bosse@acc.umu.se>
 
9
 *   Amine Khaldi
 
10
 *   Timo Kreuzer (timo.kreuzer@reactos.org)
10
11
 *
11
12
 * THIS SOFTWARE IS NOT COPYRIGHTED
12
13
 *
20
21
 *
21
22
 */
22
23
 
23
 
#ifndef _NTIFS_
24
 
#define _NTIFS_
 
24
#pragma once
 
25
 
 
26
#define _NTIFS_INCLUDED_
25
27
#define _GNU_NTIFS_
26
28
 
27
 
#define NTKERNELAPI DECLSPEC_IMPORT
 
29
#ifdef __cplusplus
 
30
extern "C" {
 
31
#endif
28
32
 
 
33
/* Dependencies */
29
34
#include <ntddk.h>
30
 
 
31
 
#define _NTIFS_INCLUDED_
32
 
#ifdef __cplusplus
33
 
extern "C" {
34
 
#endif
35
 
 
36
 
#pragma pack(push,4)
37
 
 
38
 
#ifndef VER_PRODUCTBUILD
39
 
#define VER_PRODUCTBUILD 10000
40
 
#endif
41
 
 
42
 
#define EX_PUSH_LOCK ULONG_PTR
43
 
#define PEX_PUSH_LOCK PULONG_PTR
44
 
 
45
 
    
 
35
#include <excpt.h>
 
36
#include <ntdef.h>
 
37
#include <ntnls.h>
 
38
#include <ntstatus.h>
 
39
#include <bugcodes.h>
 
40
#include <ntiologc.h>
 
41
 
 
42
 
46
43
#ifndef FlagOn
47
44
#define FlagOn(_F,_SF)        ((_F) & (_SF))
48
45
#endif
49
 
    
 
46
 
50
47
#ifndef BooleanFlagOn
51
48
#define BooleanFlagOn(F,SF)   ((BOOLEAN)(((F) & (SF)) != 0))
52
49
#endif
53
 
    
 
50
 
54
51
#ifndef SetFlag
55
52
#define SetFlag(_F,_SF)       ((_F) |= (_SF))
56
53
#endif
57
 
    
 
54
 
58
55
#ifndef ClearFlag
59
56
#define ClearFlag(_F,_SF)     ((_F) &= ~(_SF))
60
57
#endif
61
 
    
62
 
#include "csq.h"
63
 
 
64
 
#ifdef _NTOSKRNL_
65
 
extern PUCHAR                       FsRtlLegalAnsiCharacterArray;
66
 
#else
67
 
extern DECLSPEC_IMPORT PUCHAR       FsRtlLegalAnsiCharacterArray;
68
 
#endif
69
 
extern PACL                         SePublicDefaultDacl;
70
 
extern PACL                         SeSystemDefaultDacl;
71
 
 
72
 
extern KSPIN_LOCK                   IoStatisticsLock;
73
 
extern ULONG                        IoReadOperationCount;
74
 
extern ULONG                        IoWriteOperationCount;
75
 
extern ULONG                        IoOtherOperationCount;
76
 
extern LARGE_INTEGER                IoReadTransferCount;
77
 
extern LARGE_INTEGER                IoWriteTransferCount;
78
 
extern LARGE_INTEGER                IoOtherTransferCount;
79
 
 
 
58
 
 
59
typedef UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;
80
60
typedef STRING LSA_STRING, *PLSA_STRING;
81
 
typedef ULONG  LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE;
82
 
 
83
 
typedef enum _SECURITY_LOGON_TYPE
84
 
{
85
 
    UndefinedLogonType = 0,
86
 
    Interactive = 2,
87
 
    Network,
88
 
    Batch,
89
 
    Service,
90
 
    Proxy,
91
 
    Unlock,
92
 
    NetworkCleartext,
93
 
    NewCredentials,
94
 
#if (_WIN32_WINNT >= 0x0501)
95
 
    RemoteInteractive,
96
 
    CachedInteractive,
97
 
#endif
98
 
#if (_WIN32_WINNT >= 0x0502)
99
 
    CachedRemoteInteractive,
100
 
    CachedUnlock
101
 
#endif
102
 
} SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE;
103
 
 
104
 
#define ANSI_DOS_STAR                   ('<')
105
 
#define ANSI_DOS_QM                     ('>')
106
 
#define ANSI_DOS_DOT                    ('"')
107
 
 
108
 
#define DOS_STAR                        (L'<')
109
 
#define DOS_QM                          (L'>')
110
 
#define DOS_DOT                         (L'"')
 
61
typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES;
 
62
 
 
63
/******************************************************************************
 
64
 *                            Security Manager Types                          *
 
65
 ******************************************************************************/
 
66
#ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
 
67
#define SID_IDENTIFIER_AUTHORITY_DEFINED
 
68
typedef struct _SID_IDENTIFIER_AUTHORITY {
 
69
  UCHAR Value[6];
 
70
} SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
 
71
#endif
 
72
 
 
73
#ifndef SID_DEFINED
 
74
#define SID_DEFINED
 
75
typedef struct _SID {
 
76
  UCHAR Revision;
 
77
  UCHAR SubAuthorityCount;
 
78
  SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
 
79
  ULONG SubAuthority[ANYSIZE_ARRAY];
 
80
} SID, *PISID;
 
81
#endif
 
82
 
 
83
#define SID_REVISION                    1
 
84
#define SID_MAX_SUB_AUTHORITIES         15
 
85
#define SID_RECOMMENDED_SUB_AUTHORITIES 1
 
86
 
 
87
typedef enum _SID_NAME_USE {
 
88
  SidTypeUser = 1,
 
89
  SidTypeGroup,
 
90
  SidTypeDomain,
 
91
  SidTypeAlias,
 
92
  SidTypeWellKnownGroup,
 
93
  SidTypeDeletedAccount,
 
94
  SidTypeInvalid,
 
95
  SidTypeUnknown,
 
96
  SidTypeComputer,
 
97
  SidTypeLabel
 
98
} SID_NAME_USE, *PSID_NAME_USE;
 
99
 
 
100
typedef struct _SID_AND_ATTRIBUTES {
 
101
  PSID Sid;
 
102
  ULONG Attributes;
 
103
} SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;
 
104
typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
 
105
typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
 
106
 
 
107
#define SID_HASH_SIZE 32
 
108
typedef ULONG_PTR SID_HASH_ENTRY, *PSID_HASH_ENTRY;
 
109
 
 
110
typedef struct _SID_AND_ATTRIBUTES_HASH {
 
111
  ULONG SidCount;
 
112
  PSID_AND_ATTRIBUTES SidAttr;
 
113
  SID_HASH_ENTRY Hash[SID_HASH_SIZE];
 
114
} SID_AND_ATTRIBUTES_HASH, *PSID_AND_ATTRIBUTES_HASH;
 
115
 
 
116
/* Universal well-known SIDs */
 
117
 
 
118
#define SECURITY_NULL_SID_AUTHORITY         {0,0,0,0,0,0}
 
119
#define SECURITY_WORLD_SID_AUTHORITY        {0,0,0,0,0,1}
 
120
#define SECURITY_LOCAL_SID_AUTHORITY        {0,0,0,0,0,2}
 
121
#define SECURITY_CREATOR_SID_AUTHORITY      {0,0,0,0,0,3}
 
122
#define SECURITY_NON_UNIQUE_AUTHORITY       {0,0,0,0,0,4}
 
123
#define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
 
124
 
 
125
#define SECURITY_NULL_RID                 (0x00000000L)
 
126
#define SECURITY_WORLD_RID                (0x00000000L)
 
127
#define SECURITY_LOCAL_RID                (0x00000000L)
 
128
#define SECURITY_LOCAL_LOGON_RID          (0x00000001L)
 
129
 
 
130
#define SECURITY_CREATOR_OWNER_RID        (0x00000000L)
 
131
#define SECURITY_CREATOR_GROUP_RID        (0x00000001L)
 
132
#define SECURITY_CREATOR_OWNER_SERVER_RID (0x00000002L)
 
133
#define SECURITY_CREATOR_GROUP_SERVER_RID (0x00000003L)
 
134
#define SECURITY_CREATOR_OWNER_RIGHTS_RID (0x00000004L)
 
135
 
 
136
/* NT well-known SIDs */
 
137
 
 
138
#define SECURITY_NT_AUTHORITY           {0,0,0,0,0,5}
 
139
 
 
140
#define SECURITY_DIALUP_RID             (0x00000001L)
 
141
#define SECURITY_NETWORK_RID            (0x00000002L)
 
142
#define SECURITY_BATCH_RID              (0x00000003L)
 
143
#define SECURITY_INTERACTIVE_RID        (0x00000004L)
 
144
#define SECURITY_LOGON_IDS_RID          (0x00000005L)
 
145
#define SECURITY_LOGON_IDS_RID_COUNT    (3L)
 
146
#define SECURITY_SERVICE_RID            (0x00000006L)
 
147
#define SECURITY_ANONYMOUS_LOGON_RID    (0x00000007L)
 
148
#define SECURITY_PROXY_RID              (0x00000008L)
 
149
#define SECURITY_ENTERPRISE_CONTROLLERS_RID (0x00000009L)
 
150
#define SECURITY_SERVER_LOGON_RID       SECURITY_ENTERPRISE_CONTROLLERS_RID
 
151
#define SECURITY_PRINCIPAL_SELF_RID     (0x0000000AL)
 
152
#define SECURITY_AUTHENTICATED_USER_RID (0x0000000BL)
 
153
#define SECURITY_RESTRICTED_CODE_RID    (0x0000000CL)
 
154
#define SECURITY_TERMINAL_SERVER_RID    (0x0000000DL)
 
155
#define SECURITY_REMOTE_LOGON_RID       (0x0000000EL)
 
156
#define SECURITY_THIS_ORGANIZATION_RID  (0x0000000FL)
 
157
#define SECURITY_IUSER_RID              (0x00000011L)
 
158
#define SECURITY_LOCAL_SYSTEM_RID       (0x00000012L)
 
159
#define SECURITY_LOCAL_SERVICE_RID      (0x00000013L)
 
160
#define SECURITY_NETWORK_SERVICE_RID    (0x00000014L)
 
161
#define SECURITY_NT_NON_UNIQUE          (0x00000015L)
 
162
#define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT  (3L)
 
163
#define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID (0x00000016L)
 
164
 
 
165
#define SECURITY_BUILTIN_DOMAIN_RID     (0x00000020L)
 
166
#define SECURITY_WRITE_RESTRICTED_CODE_RID (0x00000021L)
 
167
 
 
168
 
 
169
#define SECURITY_PACKAGE_BASE_RID       (0x00000040L)
 
170
#define SECURITY_PACKAGE_RID_COUNT      (2L)
 
171
#define SECURITY_PACKAGE_NTLM_RID       (0x0000000AL)
 
172
#define SECURITY_PACKAGE_SCHANNEL_RID   (0x0000000EL)
 
173
#define SECURITY_PACKAGE_DIGEST_RID     (0x00000015L)
 
174
 
 
175
#define SECURITY_CRED_TYPE_BASE_RID             (0x00000041L)
 
176
#define SECURITY_CRED_TYPE_RID_COUNT            (2L)
 
177
#define SECURITY_CRED_TYPE_THIS_ORG_CERT_RID    (0x00000001L)
 
178
 
 
179
#define SECURITY_MIN_BASE_RID           (0x00000050L)
 
180
#define SECURITY_SERVICE_ID_BASE_RID    (0x00000050L)
 
181
#define SECURITY_SERVICE_ID_RID_COUNT   (6L)
 
182
#define SECURITY_RESERVED_ID_BASE_RID   (0x00000051L)
 
183
#define SECURITY_APPPOOL_ID_BASE_RID    (0x00000052L)
 
184
#define SECURITY_APPPOOL_ID_RID_COUNT   (6L)
 
185
#define SECURITY_VIRTUALSERVER_ID_BASE_RID    (0x00000053L)
 
186
#define SECURITY_VIRTUALSERVER_ID_RID_COUNT   (6L)
 
187
#define SECURITY_USERMODEDRIVERHOST_ID_BASE_RID  (0x00000054L)
 
188
#define SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT (6L)
 
189
#define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID  (0x00000055L)
 
190
#define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT (6L)
 
191
#define SECURITY_WMIHOST_ID_BASE_RID  (0x00000056L)
 
192
#define SECURITY_WMIHOST_ID_RID_COUNT (6L)
 
193
#define SECURITY_TASK_ID_BASE_RID                 (0x00000057L)
 
194
#define SECURITY_NFS_ID_BASE_RID        (0x00000058L)
 
195
#define SECURITY_COM_ID_BASE_RID        (0x00000059L)
 
196
#define SECURITY_VIRTUALACCOUNT_ID_RID_COUNT   (6L)
 
197
 
 
198
#define SECURITY_MAX_BASE_RID           (0x0000006FL)
 
199
 
 
200
#define SECURITY_MAX_ALWAYS_FILTERED    (0x000003E7L)
 
201
#define SECURITY_MIN_NEVER_FILTERED     (0x000003E8L)
 
202
 
 
203
#define SECURITY_OTHER_ORGANIZATION_RID (0x000003E8L)
 
204
 
 
205
#define SECURITY_WINDOWSMOBILE_ID_BASE_RID (0x00000070L)
 
206
 
 
207
/* Well-known domain relative sub-authority values (RIDs) */
 
208
 
 
209
#define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS (0x000001F2L)
 
210
 
 
211
#define FOREST_USER_RID_MAX            (0x000001F3L)
 
212
 
 
213
/* Well-known users */
 
214
 
 
215
#define DOMAIN_USER_RID_ADMIN          (0x000001F4L)
 
216
#define DOMAIN_USER_RID_GUEST          (0x000001F5L)
 
217
#define DOMAIN_USER_RID_KRBTGT         (0x000001F6L)
 
218
 
 
219
#define DOMAIN_USER_RID_MAX            (0x000003E7L)
 
220
 
 
221
/* Well-known groups */
 
222
 
 
223
#define DOMAIN_GROUP_RID_ADMINS               (0x00000200L)
 
224
#define DOMAIN_GROUP_RID_USERS                (0x00000201L)
 
225
#define DOMAIN_GROUP_RID_GUESTS               (0x00000202L)
 
226
#define DOMAIN_GROUP_RID_COMPUTERS            (0x00000203L)
 
227
#define DOMAIN_GROUP_RID_CONTROLLERS          (0x00000204L)
 
228
#define DOMAIN_GROUP_RID_CERT_ADMINS          (0x00000205L)
 
229
#define DOMAIN_GROUP_RID_SCHEMA_ADMINS        (0x00000206L)
 
230
#define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS    (0x00000207L)
 
231
#define DOMAIN_GROUP_RID_POLICY_ADMINS        (0x00000208L)
 
232
#define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (0x00000209L)
 
233
 
 
234
/* Well-known aliases */
 
235
 
 
236
#define DOMAIN_ALIAS_RID_ADMINS                         (0x00000220L)
 
237
#define DOMAIN_ALIAS_RID_USERS                          (0x00000221L)
 
238
#define DOMAIN_ALIAS_RID_GUESTS                         (0x00000222L)
 
239
#define DOMAIN_ALIAS_RID_POWER_USERS                    (0x00000223L)
 
240
 
 
241
#define DOMAIN_ALIAS_RID_ACCOUNT_OPS                    (0x00000224L)
 
242
#define DOMAIN_ALIAS_RID_SYSTEM_OPS                     (0x00000225L)
 
243
#define DOMAIN_ALIAS_RID_PRINT_OPS                      (0x00000226L)
 
244
#define DOMAIN_ALIAS_RID_BACKUP_OPS                     (0x00000227L)
 
245
 
 
246
#define DOMAIN_ALIAS_RID_REPLICATOR                     (0x00000228L)
 
247
#define DOMAIN_ALIAS_RID_RAS_SERVERS                    (0x00000229L)
 
248
#define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS               (0x0000022AL)
 
249
#define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS           (0x0000022BL)
 
250
#define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS      (0x0000022CL)
 
251
#define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS (0x0000022DL)
 
252
 
 
253
#define DOMAIN_ALIAS_RID_MONITORING_USERS               (0x0000022EL)
 
254
#define DOMAIN_ALIAS_RID_LOGGING_USERS                  (0x0000022FL)
 
255
#define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS            (0x00000230L)
 
256
#define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS             (0x00000231L)
 
257
#define DOMAIN_ALIAS_RID_DCOM_USERS                     (0x00000232L)
 
258
#define DOMAIN_ALIAS_RID_IUSERS                         (0x00000238L)
 
259
#define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS               (0x00000239L)
 
260
#define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP     (0x0000023BL)
 
261
#define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (0x0000023CL)
 
262
#define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP        (0x0000023DL)
 
263
#define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP      (0x0000023EL)
 
264
 
 
265
#define SECURITY_MANDATORY_LABEL_AUTHORITY          {0,0,0,0,0,16}
 
266
#define SECURITY_MANDATORY_UNTRUSTED_RID            (0x00000000L)
 
267
#define SECURITY_MANDATORY_LOW_RID                  (0x00001000L)
 
268
#define SECURITY_MANDATORY_MEDIUM_RID               (0x00002000L)
 
269
#define SECURITY_MANDATORY_HIGH_RID                 (0x00003000L)
 
270
#define SECURITY_MANDATORY_SYSTEM_RID               (0x00004000L)
 
271
#define SECURITY_MANDATORY_PROTECTED_PROCESS_RID    (0x00005000L)
 
272
 
 
273
/* SECURITY_MANDATORY_MAXIMUM_USER_RID is the highest RID that
 
274
   can be set by a usermode caller.*/
 
275
 
 
276
#define SECURITY_MANDATORY_MAXIMUM_USER_RID   SECURITY_MANDATORY_SYSTEM_RID
 
277
 
 
278
#define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
 
279
 
 
280
/* Allocate the System Luid.  The first 1000 LUIDs are reserved.
 
281
   Use #999 here (0x3e7 = 999) */
 
282
 
 
283
#define SYSTEM_LUID                     {0x3e7, 0x0}
 
284
#define ANONYMOUS_LOGON_LUID            {0x3e6, 0x0}
 
285
#define LOCALSERVICE_LUID               {0x3e5, 0x0}
 
286
#define NETWORKSERVICE_LUID             {0x3e4, 0x0}
 
287
#define IUSER_LUID                      {0x3e3, 0x0}
 
288
 
 
289
typedef struct _ACE_HEADER {
 
290
  UCHAR AceType;
 
291
  UCHAR AceFlags;
 
292
  USHORT AceSize;
 
293
} ACE_HEADER, *PACE_HEADER;
111
294
 
112
295
/* also in winnt.h */
113
296
#define ACCESS_MIN_MS_ACE_TYPE                  (0x0)
134
317
#define SYSTEM_ALARM_CALLBACK_ACE_TYPE          (0xE)
135
318
#define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE   (0xF)
136
319
#define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE   (0x10)
137
 
#define ACCESS_MAX_MS_V5_ACE_TYPE               (0x10)
 
320
#define ACCESS_MAX_MS_V5_ACE_TYPE               (0x11)
 
321
#define SYSTEM_MANDATORY_LABEL_ACE_TYPE         (0x11)
 
322
 
 
323
/* The following are the inherit flags that go into the AceFlags field
 
324
   of an Ace header. */
 
325
 
 
326
#define OBJECT_INHERIT_ACE                (0x1)
 
327
#define CONTAINER_INHERIT_ACE             (0x2)
 
328
#define NO_PROPAGATE_INHERIT_ACE          (0x4)
 
329
#define INHERIT_ONLY_ACE                  (0x8)
 
330
#define INHERITED_ACE                     (0x10)
 
331
#define VALID_INHERIT_FLAGS               (0x1F)
 
332
 
 
333
#define SUCCESSFUL_ACCESS_ACE_FLAG        (0x40)
 
334
#define FAILED_ACCESS_ACE_FLAG            (0x80)
 
335
 
 
336
typedef struct _ACCESS_ALLOWED_ACE {
 
337
  ACE_HEADER Header;
 
338
  ACCESS_MASK Mask;
 
339
  ULONG SidStart;
 
340
} ACCESS_ALLOWED_ACE, *PACCESS_ALLOWED_ACE;
 
341
 
 
342
typedef struct _ACCESS_DENIED_ACE {
 
343
  ACE_HEADER Header;
 
344
  ACCESS_MASK Mask;
 
345
  ULONG SidStart;
 
346
} ACCESS_DENIED_ACE, *PACCESS_DENIED_ACE;
 
347
 
 
348
typedef struct _SYSTEM_AUDIT_ACE {
 
349
  ACE_HEADER Header;
 
350
  ACCESS_MASK Mask;
 
351
  ULONG SidStart;
 
352
} SYSTEM_AUDIT_ACE, *PSYSTEM_AUDIT_ACE;
 
353
 
 
354
typedef struct _SYSTEM_ALARM_ACE {
 
355
  ACE_HEADER Header;
 
356
  ACCESS_MASK Mask;
 
357
  ULONG SidStart;
 
358
} SYSTEM_ALARM_ACE, *PSYSTEM_ALARM_ACE;
 
359
 
 
360
typedef struct _SYSTEM_MANDATORY_LABEL_ACE {
 
361
  ACE_HEADER Header;
 
362
  ACCESS_MASK Mask;
 
363
  ULONG SidStart;
 
364
} SYSTEM_MANDATORY_LABEL_ACE, *PSYSTEM_MANDATORY_LABEL_ACE;
 
365
 
 
366
#define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP         0x1
 
367
#define SYSTEM_MANDATORY_LABEL_NO_READ_UP          0x2
 
368
#define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP       0x4
 
369
#define SYSTEM_MANDATORY_LABEL_VALID_MASK (SYSTEM_MANDATORY_LABEL_NO_WRITE_UP   | \
 
370
                                           SYSTEM_MANDATORY_LABEL_NO_READ_UP    | \
 
371
                                           SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP)
 
372
 
 
373
#define SECURITY_DESCRIPTOR_MIN_LENGTH   (sizeof(SECURITY_DESCRIPTOR))
 
374
 
 
375
typedef USHORT SECURITY_DESCRIPTOR_CONTROL,*PSECURITY_DESCRIPTOR_CONTROL;
 
376
 
 
377
#define SE_OWNER_DEFAULTED              0x0001
 
378
#define SE_GROUP_DEFAULTED              0x0002
 
379
#define SE_DACL_PRESENT                 0x0004
 
380
#define SE_DACL_DEFAULTED               0x0008
 
381
#define SE_SACL_PRESENT                 0x0010
 
382
#define SE_SACL_DEFAULTED               0x0020
 
383
#define SE_DACL_UNTRUSTED               0x0040
 
384
#define SE_SERVER_SECURITY              0x0080
 
385
#define SE_DACL_AUTO_INHERIT_REQ        0x0100
 
386
#define SE_SACL_AUTO_INHERIT_REQ        0x0200
 
387
#define SE_DACL_AUTO_INHERITED          0x0400
 
388
#define SE_SACL_AUTO_INHERITED          0x0800
 
389
#define SE_DACL_PROTECTED               0x1000
 
390
#define SE_SACL_PROTECTED               0x2000
 
391
#define SE_RM_CONTROL_VALID             0x4000
 
392
#define SE_SELF_RELATIVE                0x8000
 
393
 
 
394
typedef struct _SECURITY_DESCRIPTOR_RELATIVE {
 
395
  UCHAR Revision;
 
396
  UCHAR Sbz1;
 
397
  SECURITY_DESCRIPTOR_CONTROL Control;
 
398
  ULONG Owner;
 
399
  ULONG Group;
 
400
  ULONG Sacl;
 
401
  ULONG Dacl;
 
402
} SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE;
 
403
 
 
404
typedef struct _SECURITY_DESCRIPTOR {
 
405
  UCHAR Revision;
 
406
  UCHAR Sbz1;
 
407
  SECURITY_DESCRIPTOR_CONTROL Control;
 
408
  PSID Owner;
 
409
  PSID Group;
 
410
  PACL Sacl;
 
411
  PACL Dacl;
 
412
} SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
 
413
 
 
414
typedef struct _OBJECT_TYPE_LIST {
 
415
  USHORT Level;
 
416
  USHORT Sbz;
 
417
  GUID *ObjectType;
 
418
} OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST;
 
419
 
 
420
#define ACCESS_OBJECT_GUID       0
 
421
#define ACCESS_PROPERTY_SET_GUID 1
 
422
#define ACCESS_PROPERTY_GUID     2
 
423
#define ACCESS_MAX_LEVEL         4
 
424
 
 
425
typedef enum _AUDIT_EVENT_TYPE {
 
426
  AuditEventObjectAccess,
 
427
  AuditEventDirectoryServiceAccess
 
428
} AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE;
 
429
 
 
430
#define AUDIT_ALLOW_NO_PRIVILEGE 0x1
 
431
 
 
432
#define ACCESS_DS_SOURCE_A "DS"
 
433
#define ACCESS_DS_SOURCE_W L"DS"
 
434
#define ACCESS_DS_OBJECT_TYPE_NAME_A "Directory Service Object"
 
435
#define ACCESS_DS_OBJECT_TYPE_NAME_W L"Directory Service Object"
 
436
 
 
437
#define ACCESS_REASON_TYPE_MASK 0xffff0000
 
438
#define ACCESS_REASON_DATA_MASK 0x0000ffff
 
439
 
 
440
typedef enum _ACCESS_REASON_TYPE {
 
441
  AccessReasonNone = 0x00000000,
 
442
  AccessReasonAllowedAce = 0x00010000,
 
443
  AccessReasonDeniedAce = 0x00020000,
 
444
  AccessReasonAllowedParentAce = 0x00030000,
 
445
  AccessReasonDeniedParentAce = 0x00040000,
 
446
  AccessReasonMissingPrivilege = 0x00100000,
 
447
  AccessReasonFromPrivilege = 0x00200000,
 
448
  AccessReasonIntegrityLevel = 0x00300000,
 
449
  AccessReasonOwnership = 0x00400000,
 
450
  AccessReasonNullDacl = 0x00500000,
 
451
  AccessReasonEmptyDacl = 0x00600000,
 
452
  AccessReasonNoSD = 0x00700000,
 
453
  AccessReasonNoGrant = 0x00800000
 
454
} ACCESS_REASON_TYPE;
 
455
 
 
456
typedef ULONG ACCESS_REASON;
 
457
 
 
458
typedef struct _ACCESS_REASONS {
 
459
  ACCESS_REASON Data[32];
 
460
} ACCESS_REASONS, *PACCESS_REASONS;
 
461
 
 
462
#define SE_SECURITY_DESCRIPTOR_FLAG_NO_OWNER_ACE    0x00000001
 
463
#define SE_SECURITY_DESCRIPTOR_FLAG_NO_LABEL_ACE    0x00000002
 
464
#define SE_SECURITY_DESCRIPTOR_VALID_FLAGS          0x00000003
 
465
 
 
466
typedef struct _SE_SECURITY_DESCRIPTOR {
 
467
  ULONG Size;
 
468
  ULONG Flags;
 
469
  PSECURITY_DESCRIPTOR SecurityDescriptor;
 
470
} SE_SECURITY_DESCRIPTOR, *PSE_SECURITY_DESCRIPTOR;
 
471
 
 
472
typedef struct _SE_ACCESS_REQUEST {
 
473
  ULONG Size;
 
474
  PSE_SECURITY_DESCRIPTOR SeSecurityDescriptor;
 
475
  ACCESS_MASK DesiredAccess;
 
476
  ACCESS_MASK PreviouslyGrantedAccess;
 
477
  PSID PrincipalSelfSid;
 
478
  PGENERIC_MAPPING GenericMapping;
 
479
  ULONG ObjectTypeListCount;
 
480
  POBJECT_TYPE_LIST ObjectTypeList;
 
481
} SE_ACCESS_REQUEST, *PSE_ACCESS_REQUEST;
 
482
 
 
483
typedef struct _SE_ACCESS_REPLY {
 
484
  ULONG Size;
 
485
  ULONG ResultListCount;
 
486
  PACCESS_MASK GrantedAccess;
 
487
  PNTSTATUS AccessStatus;
 
488
  PACCESS_REASONS AccessReason;
 
489
  PPRIVILEGE_SET* Privileges;
 
490
} SE_ACCESS_REPLY, *PSE_ACCESS_REPLY;
 
491
 
 
492
typedef enum _SE_AUDIT_OPERATION {
 
493
  AuditPrivilegeObject,
 
494
  AuditPrivilegeService,
 
495
  AuditAccessCheck,
 
496
  AuditOpenObject,
 
497
  AuditOpenObjectWithTransaction,
 
498
  AuditCloseObject,
 
499
  AuditDeleteObject,
 
500
  AuditOpenObjectForDelete,
 
501
  AuditOpenObjectForDeleteWithTransaction,
 
502
  AuditCloseNonObject,
 
503
  AuditOpenNonObject,
 
504
  AuditObjectReference,
 
505
  AuditHandleCreation,
 
506
} SE_AUDIT_OPERATION, *PSE_AUDIT_OPERATION;
 
507
 
 
508
typedef struct _SE_AUDIT_INFO {
 
509
  ULONG Size;
 
510
  AUDIT_EVENT_TYPE AuditType;
 
511
  SE_AUDIT_OPERATION AuditOperation;
 
512
  ULONG AuditFlags;
 
513
  UNICODE_STRING SubsystemName;
 
514
  UNICODE_STRING ObjectTypeName;
 
515
  UNICODE_STRING ObjectName;
 
516
  PVOID HandleId;
 
517
  GUID* TransactionId;
 
518
  LUID* OperationId;
 
519
  BOOLEAN ObjectCreation;
 
520
  BOOLEAN GenerateOnClose;
 
521
} SE_AUDIT_INFO, *PSE_AUDIT_INFO;
 
522
 
 
523
#define TOKEN_ASSIGN_PRIMARY            (0x0001)
 
524
#define TOKEN_DUPLICATE                 (0x0002)
 
525
#define TOKEN_IMPERSONATE               (0x0004)
 
526
#define TOKEN_QUERY                     (0x0008)
 
527
#define TOKEN_QUERY_SOURCE              (0x0010)
 
528
#define TOKEN_ADJUST_PRIVILEGES         (0x0020)
 
529
#define TOKEN_ADJUST_GROUPS             (0x0040)
 
530
#define TOKEN_ADJUST_DEFAULT            (0x0080)
 
531
#define TOKEN_ADJUST_SESSIONID          (0x0100)
 
532
 
 
533
#define TOKEN_ALL_ACCESS_P (STANDARD_RIGHTS_REQUIRED  |\
 
534
                            TOKEN_ASSIGN_PRIMARY      |\
 
535
                            TOKEN_DUPLICATE           |\
 
536
                            TOKEN_IMPERSONATE         |\
 
537
                            TOKEN_QUERY               |\
 
538
                            TOKEN_QUERY_SOURCE        |\
 
539
                            TOKEN_ADJUST_PRIVILEGES   |\
 
540
                            TOKEN_ADJUST_GROUPS       |\
 
541
                            TOKEN_ADJUST_DEFAULT )
 
542
 
 
543
#if ((defined(_WIN32_WINNT) && (_WIN32_WINNT > 0x0400)) || (!defined(_WIN32_WINNT)))
 
544
#define TOKEN_ALL_ACCESS  (TOKEN_ALL_ACCESS_P |\
 
545
                           TOKEN_ADJUST_SESSIONID )
 
546
#else
 
547
#define TOKEN_ALL_ACCESS  (TOKEN_ALL_ACCESS_P)
 
548
#endif
 
549
 
 
550
#define TOKEN_READ       (STANDARD_RIGHTS_READ     |\
 
551
                          TOKEN_QUERY)
 
552
 
 
553
#define TOKEN_WRITE      (STANDARD_RIGHTS_WRITE    |\
 
554
                          TOKEN_ADJUST_PRIVILEGES  |\
 
555
                          TOKEN_ADJUST_GROUPS      |\
 
556
                          TOKEN_ADJUST_DEFAULT)
 
557
 
 
558
#define TOKEN_EXECUTE    (STANDARD_RIGHTS_EXECUTE)
 
559
 
 
560
typedef enum _TOKEN_TYPE {
 
561
  TokenPrimary = 1,
 
562
  TokenImpersonation
 
563
} TOKEN_TYPE,*PTOKEN_TYPE;
 
564
 
 
565
typedef enum _TOKEN_INFORMATION_CLASS {
 
566
  TokenUser = 1,
 
567
  TokenGroups,
 
568
  TokenPrivileges,
 
569
  TokenOwner,
 
570
  TokenPrimaryGroup,
 
571
  TokenDefaultDacl,
 
572
  TokenSource,
 
573
  TokenType,
 
574
  TokenImpersonationLevel,
 
575
  TokenStatistics,
 
576
  TokenRestrictedSids,
 
577
  TokenSessionId,
 
578
  TokenGroupsAndPrivileges,
 
579
  TokenSessionReference,
 
580
  TokenSandBoxInert,
 
581
  TokenAuditPolicy,
 
582
  TokenOrigin,
 
583
  TokenElevationType,
 
584
  TokenLinkedToken,
 
585
  TokenElevation,
 
586
  TokenHasRestrictions,
 
587
  TokenAccessInformation,
 
588
  TokenVirtualizationAllowed,
 
589
  TokenVirtualizationEnabled,
 
590
  TokenIntegrityLevel,
 
591
  TokenUIAccess,
 
592
  TokenMandatoryPolicy,
 
593
  TokenLogonSid,
 
594
  MaxTokenInfoClass
 
595
} TOKEN_INFORMATION_CLASS, *PTOKEN_INFORMATION_CLASS;
 
596
 
 
597
typedef struct _TOKEN_USER {
 
598
  SID_AND_ATTRIBUTES User;
 
599
} TOKEN_USER, *PTOKEN_USER;
 
600
 
 
601
typedef struct _TOKEN_GROUPS {
 
602
  ULONG GroupCount;
 
603
  SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
 
604
} TOKEN_GROUPS,*PTOKEN_GROUPS,*LPTOKEN_GROUPS;
 
605
 
 
606
typedef struct _TOKEN_PRIVILEGES {
 
607
  ULONG PrivilegeCount;
 
608
  LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
 
609
} TOKEN_PRIVILEGES,*PTOKEN_PRIVILEGES,*LPTOKEN_PRIVILEGES;
 
610
 
 
611
typedef struct _TOKEN_OWNER {
 
612
  PSID Owner;
 
613
} TOKEN_OWNER,*PTOKEN_OWNER;
 
614
 
 
615
typedef struct _TOKEN_PRIMARY_GROUP {
 
616
  PSID PrimaryGroup;
 
617
} TOKEN_PRIMARY_GROUP,*PTOKEN_PRIMARY_GROUP;
 
618
 
 
619
typedef struct _TOKEN_DEFAULT_DACL {
 
620
  PACL DefaultDacl;
 
621
} TOKEN_DEFAULT_DACL,*PTOKEN_DEFAULT_DACL;
 
622
 
 
623
typedef struct _TOKEN_GROUPS_AND_PRIVILEGES {
 
624
  ULONG SidCount;
 
625
  ULONG SidLength;
 
626
  PSID_AND_ATTRIBUTES Sids;
 
627
  ULONG RestrictedSidCount;
 
628
  ULONG RestrictedSidLength;
 
629
  PSID_AND_ATTRIBUTES RestrictedSids;
 
630
  ULONG PrivilegeCount;
 
631
  ULONG PrivilegeLength;
 
632
  PLUID_AND_ATTRIBUTES Privileges;
 
633
  LUID AuthenticationId;
 
634
} TOKEN_GROUPS_AND_PRIVILEGES, *PTOKEN_GROUPS_AND_PRIVILEGES;
 
635
 
 
636
typedef struct _TOKEN_LINKED_TOKEN {
 
637
  HANDLE LinkedToken;
 
638
} TOKEN_LINKED_TOKEN, *PTOKEN_LINKED_TOKEN;
 
639
 
 
640
typedef struct _TOKEN_ELEVATION {
 
641
  ULONG TokenIsElevated;
 
642
} TOKEN_ELEVATION, *PTOKEN_ELEVATION;
 
643
 
 
644
typedef struct _TOKEN_MANDATORY_LABEL {
 
645
  SID_AND_ATTRIBUTES Label;
 
646
} TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL;
 
647
 
 
648
#define TOKEN_MANDATORY_POLICY_OFF             0x0
 
649
#define TOKEN_MANDATORY_POLICY_NO_WRITE_UP     0x1
 
650
#define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2
 
651
 
 
652
#define TOKEN_MANDATORY_POLICY_VALID_MASK    (TOKEN_MANDATORY_POLICY_NO_WRITE_UP | \
 
653
                                              TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN)
 
654
 
 
655
typedef struct _TOKEN_MANDATORY_POLICY {
 
656
  ULONG Policy;
 
657
} TOKEN_MANDATORY_POLICY, *PTOKEN_MANDATORY_POLICY;
 
658
 
 
659
typedef struct _TOKEN_ACCESS_INFORMATION {
 
660
  PSID_AND_ATTRIBUTES_HASH SidHash;
 
661
  PSID_AND_ATTRIBUTES_HASH RestrictedSidHash;
 
662
  PTOKEN_PRIVILEGES Privileges;
 
663
  LUID AuthenticationId;
 
664
  TOKEN_TYPE TokenType;
 
665
  SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
 
666
  TOKEN_MANDATORY_POLICY MandatoryPolicy;
 
667
  ULONG Flags;
 
668
} TOKEN_ACCESS_INFORMATION, *PTOKEN_ACCESS_INFORMATION;
 
669
 
 
670
#define POLICY_AUDIT_SUBCATEGORY_COUNT (53)
 
671
 
 
672
typedef struct _TOKEN_AUDIT_POLICY {
 
673
  UCHAR PerUserPolicy[((POLICY_AUDIT_SUBCATEGORY_COUNT) >> 1) + 1];
 
674
} TOKEN_AUDIT_POLICY, *PTOKEN_AUDIT_POLICY;
 
675
 
 
676
#define TOKEN_SOURCE_LENGTH 8
 
677
 
 
678
typedef struct _TOKEN_SOURCE {
 
679
  CHAR SourceName[TOKEN_SOURCE_LENGTH];
 
680
  LUID SourceIdentifier;
 
681
} TOKEN_SOURCE,*PTOKEN_SOURCE;
 
682
 
 
683
typedef struct _TOKEN_STATISTICS {
 
684
  LUID TokenId;
 
685
  LUID AuthenticationId;
 
686
  LARGE_INTEGER ExpirationTime;
 
687
  TOKEN_TYPE TokenType;
 
688
  SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
 
689
  ULONG DynamicCharged;
 
690
  ULONG DynamicAvailable;
 
691
  ULONG GroupCount;
 
692
  ULONG PrivilegeCount;
 
693
  LUID ModifiedId;
 
694
} TOKEN_STATISTICS, *PTOKEN_STATISTICS;
 
695
 
 
696
typedef struct _TOKEN_CONTROL {
 
697
  LUID TokenId;
 
698
  LUID AuthenticationId;
 
699
  LUID ModifiedId;
 
700
  TOKEN_SOURCE TokenSource;
 
701
} TOKEN_CONTROL,*PTOKEN_CONTROL;
 
702
 
 
703
typedef struct _TOKEN_ORIGIN {
 
704
  LUID OriginatingLogonSession;
 
705
} TOKEN_ORIGIN, *PTOKEN_ORIGIN;
 
706
 
 
707
typedef enum _MANDATORY_LEVEL {
 
708
  MandatoryLevelUntrusted = 0,
 
709
  MandatoryLevelLow,
 
710
  MandatoryLevelMedium,
 
711
  MandatoryLevelHigh,
 
712
  MandatoryLevelSystem,
 
713
  MandatoryLevelSecureProcess,
 
714
  MandatoryLevelCount
 
715
} MANDATORY_LEVEL, *PMANDATORY_LEVEL;
 
716
 
 
717
#define TOKEN_HAS_TRAVERSE_PRIVILEGE    0x0001
 
718
#define TOKEN_HAS_BACKUP_PRIVILEGE      0x0002
 
719
#define TOKEN_HAS_RESTORE_PRIVILEGE     0x0004
 
720
#define TOKEN_WRITE_RESTRICTED          0x0008
 
721
#define TOKEN_IS_RESTRICTED             0x0010
 
722
#define TOKEN_SESSION_NOT_REFERENCED    0x0020
 
723
#define TOKEN_SANDBOX_INERT             0x0040
 
724
#define TOKEN_HAS_IMPERSONATE_PRIVILEGE 0x0080
 
725
#define SE_BACKUP_PRIVILEGES_CHECKED    0x0100
 
726
#define TOKEN_VIRTUALIZE_ALLOWED        0x0200
 
727
#define TOKEN_VIRTUALIZE_ENABLED        0x0400
 
728
#define TOKEN_IS_FILTERED               0x0800
 
729
#define TOKEN_UIACCESS                  0x1000
 
730
#define TOKEN_NOT_LOW                   0x2000
 
731
 
 
732
typedef struct _SE_EXPORTS {
 
733
  LUID SeCreateTokenPrivilege;
 
734
  LUID SeAssignPrimaryTokenPrivilege;
 
735
  LUID SeLockMemoryPrivilege;
 
736
  LUID SeIncreaseQuotaPrivilege;
 
737
  LUID SeUnsolicitedInputPrivilege;
 
738
  LUID SeTcbPrivilege;
 
739
  LUID SeSecurityPrivilege;
 
740
  LUID SeTakeOwnershipPrivilege;
 
741
  LUID SeLoadDriverPrivilege;
 
742
  LUID SeCreatePagefilePrivilege;
 
743
  LUID SeIncreaseBasePriorityPrivilege;
 
744
  LUID SeSystemProfilePrivilege;
 
745
  LUID SeSystemtimePrivilege;
 
746
  LUID SeProfileSingleProcessPrivilege;
 
747
  LUID SeCreatePermanentPrivilege;
 
748
  LUID SeBackupPrivilege;
 
749
  LUID SeRestorePrivilege;
 
750
  LUID SeShutdownPrivilege;
 
751
  LUID SeDebugPrivilege;
 
752
  LUID SeAuditPrivilege;
 
753
  LUID SeSystemEnvironmentPrivilege;
 
754
  LUID SeChangeNotifyPrivilege;
 
755
  LUID SeRemoteShutdownPrivilege;
 
756
  PSID SeNullSid;
 
757
  PSID SeWorldSid;
 
758
  PSID SeLocalSid;
 
759
  PSID SeCreatorOwnerSid;
 
760
  PSID SeCreatorGroupSid;
 
761
  PSID SeNtAuthoritySid;
 
762
  PSID SeDialupSid;
 
763
  PSID SeNetworkSid;
 
764
  PSID SeBatchSid;
 
765
  PSID SeInteractiveSid;
 
766
  PSID SeLocalSystemSid;
 
767
  PSID SeAliasAdminsSid;
 
768
  PSID SeAliasUsersSid;
 
769
  PSID SeAliasGuestsSid;
 
770
  PSID SeAliasPowerUsersSid;
 
771
  PSID SeAliasAccountOpsSid;
 
772
  PSID SeAliasSystemOpsSid;
 
773
  PSID SeAliasPrintOpsSid;
 
774
  PSID SeAliasBackupOpsSid;
 
775
  PSID SeAuthenticatedUsersSid;
 
776
  PSID SeRestrictedSid;
 
777
  PSID SeAnonymousLogonSid;
 
778
  LUID SeUndockPrivilege;
 
779
  LUID SeSyncAgentPrivilege;
 
780
  LUID SeEnableDelegationPrivilege;
 
781
  PSID SeLocalServiceSid;
 
782
  PSID SeNetworkServiceSid;
 
783
  LUID SeManageVolumePrivilege;
 
784
  LUID SeImpersonatePrivilege;
 
785
  LUID SeCreateGlobalPrivilege;
 
786
  LUID SeTrustedCredManAccessPrivilege;
 
787
  LUID SeRelabelPrivilege;
 
788
  LUID SeIncreaseWorkingSetPrivilege;
 
789
  LUID SeTimeZonePrivilege;
 
790
  LUID SeCreateSymbolicLinkPrivilege;
 
791
  PSID SeIUserSid;
 
792
  PSID SeUntrustedMandatorySid;
 
793
  PSID SeLowMandatorySid;
 
794
  PSID SeMediumMandatorySid;
 
795
  PSID SeHighMandatorySid;
 
796
  PSID SeSystemMandatorySid;
 
797
  PSID SeOwnerRightsSid;
 
798
} SE_EXPORTS, *PSE_EXPORTS;
 
799
 
 
800
typedef NTSTATUS
 
801
(NTAPI *PSE_LOGON_SESSION_TERMINATED_ROUTINE)(
 
802
  IN PLUID LogonId);
 
803
/******************************************************************************
 
804
 *                           Runtime Library Types                            *
 
805
 ******************************************************************************/
 
806
 
 
807
 
 
808
#define RTL_SYSTEM_VOLUME_INFORMATION_FOLDER    L"System Volume Information"
 
809
 
 
810
typedef PVOID
 
811
(NTAPI *PRTL_ALLOCATE_STRING_ROUTINE)(
 
812
  IN SIZE_T NumberOfBytes);
 
813
 
 
814
#if _WIN32_WINNT >= 0x0600
 
815
typedef PVOID
 
816
(NTAPI *PRTL_REALLOCATE_STRING_ROUTINE)(
 
817
  IN SIZE_T NumberOfBytes,
 
818
  IN PVOID Buffer);
 
819
#endif
 
820
 
 
821
typedef VOID
 
822
(NTAPI *PRTL_FREE_STRING_ROUTINE)(
 
823
  IN PVOID Buffer);
 
824
 
 
825
extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine;
 
826
extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine;
 
827
 
 
828
#if _WIN32_WINNT >= 0x0600
 
829
extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine;
 
830
#endif
 
831
 
 
832
typedef NTSTATUS
 
833
(NTAPI * PRTL_HEAP_COMMIT_ROUTINE) (
 
834
  IN PVOID Base,
 
835
  IN OUT PVOID *CommitAddress,
 
836
  IN OUT PSIZE_T CommitSize);
 
837
 
 
838
typedef struct _RTL_HEAP_PARAMETERS {
 
839
  ULONG Length;
 
840
  SIZE_T SegmentReserve;
 
841
  SIZE_T SegmentCommit;
 
842
  SIZE_T DeCommitFreeBlockThreshold;
 
843
  SIZE_T DeCommitTotalFreeThreshold;
 
844
  SIZE_T MaximumAllocationSize;
 
845
  SIZE_T VirtualMemoryThreshold;
 
846
  SIZE_T InitialCommit;
 
847
  SIZE_T InitialReserve;
 
848
  PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
 
849
  SIZE_T Reserved[2];
 
850
} RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
 
851
 
 
852
#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
853
 
 
854
typedef struct _GENERATE_NAME_CONTEXT {
 
855
  USHORT Checksum;
 
856
  BOOLEAN CheckSumInserted;
 
857
  UCHAR NameLength;
 
858
  WCHAR NameBuffer[8];
 
859
  ULONG ExtensionLength;
 
860
  WCHAR ExtensionBuffer[4];
 
861
  ULONG LastIndexValue;
 
862
} GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
 
863
 
 
864
typedef struct _PREFIX_TABLE_ENTRY {
 
865
  CSHORT NodeTypeCode;
 
866
  CSHORT NameLength;
 
867
  struct _PREFIX_TABLE_ENTRY *NextPrefixTree;
 
868
  RTL_SPLAY_LINKS Links;
 
869
  PSTRING Prefix;
 
870
} PREFIX_TABLE_ENTRY, *PPREFIX_TABLE_ENTRY;
 
871
 
 
872
typedef struct _PREFIX_TABLE {
 
873
  CSHORT NodeTypeCode;
 
874
  CSHORT NameLength;
 
875
  PPREFIX_TABLE_ENTRY NextPrefixTree;
 
876
} PREFIX_TABLE, *PPREFIX_TABLE;
 
877
 
 
878
typedef struct _UNICODE_PREFIX_TABLE_ENTRY {
 
879
  CSHORT NodeTypeCode;
 
880
  CSHORT NameLength;
 
881
  struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
 
882
  struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
 
883
  RTL_SPLAY_LINKS Links;
 
884
  PUNICODE_STRING Prefix;
 
885
} UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
 
886
 
 
887
typedef struct _UNICODE_PREFIX_TABLE {
 
888
  CSHORT NodeTypeCode;
 
889
  CSHORT NameLength;
 
890
  PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
 
891
  PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
 
892
} UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
 
893
 
 
894
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 
895
 
 
896
#if (NTDDI_VERSION >= NTDDI_WINXP)
 
897
typedef struct _COMPRESSED_DATA_INFO {
 
898
  USHORT CompressionFormatAndEngine;
 
899
  UCHAR CompressionUnitShift;
 
900
  UCHAR ChunkShift;
 
901
  UCHAR ClusterShift;
 
902
  UCHAR Reserved;
 
903
  USHORT NumberOfChunks;
 
904
  ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
 
905
} COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
 
906
#endif
 
907
/******************************************************************************
 
908
 *                         Runtime Library Functions                          *
 
909
 ******************************************************************************/
 
910
 
 
911
 
 
912
#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
913
 
 
914
 
 
915
NTSYSAPI
 
916
PVOID
 
917
NTAPI
 
918
RtlAllocateHeap(
 
919
  IN HANDLE HeapHandle,
 
920
  IN ULONG Flags OPTIONAL,
 
921
  IN SIZE_T Size);
 
922
 
 
923
NTSYSAPI
 
924
BOOLEAN
 
925
NTAPI
 
926
RtlFreeHeap(
 
927
  IN PVOID HeapHandle,
 
928
  IN ULONG Flags OPTIONAL,
 
929
  IN PVOID BaseAddress);
 
930
 
 
931
NTSYSAPI
 
932
VOID
 
933
NTAPI
 
934
RtlCaptureContext(
 
935
  OUT PCONTEXT ContextRecord);
 
936
 
 
937
NTSYSAPI
 
938
ULONG
 
939
NTAPI
 
940
RtlRandom(
 
941
  IN OUT PULONG Seed);
 
942
 
 
943
NTSYSAPI
 
944
BOOLEAN
 
945
NTAPI
 
946
RtlCreateUnicodeString(
 
947
  OUT PUNICODE_STRING DestinationString,
 
948
  IN PCWSTR SourceString);
 
949
 
 
950
NTSYSAPI
 
951
NTSTATUS
 
952
NTAPI
 
953
RtlAppendStringToString(
 
954
  IN OUT PSTRING Destination,
 
955
  IN const STRING *Source);
 
956
 
 
957
NTSYSAPI
 
958
NTSTATUS
 
959
NTAPI
 
960
RtlOemStringToUnicodeString(
 
961
  IN OUT PUNICODE_STRING DestinationString,
 
962
  IN PCOEM_STRING SourceString,
 
963
  IN BOOLEAN AllocateDestinationString);
 
964
 
 
965
NTSYSAPI
 
966
NTSTATUS
 
967
NTAPI
 
968
RtlUnicodeStringToOemString(
 
969
  IN OUT POEM_STRING DestinationString,
 
970
  IN PCUNICODE_STRING SourceString,
 
971
  IN BOOLEAN AllocateDestinationString);
 
972
 
 
973
NTSYSAPI
 
974
NTSTATUS
 
975
NTAPI
 
976
RtlUpcaseUnicodeStringToOemString(
 
977
  IN OUT POEM_STRING DestinationString,
 
978
  IN PCUNICODE_STRING SourceString,
 
979
  IN BOOLEAN AllocateDestinationString);
 
980
 
 
981
NTSYSAPI
 
982
NTSTATUS
 
983
NTAPI
 
984
RtlOemStringToCountedUnicodeString(
 
985
  IN OUT PUNICODE_STRING DestinationString,
 
986
  IN PCOEM_STRING SourceString,
 
987
  IN BOOLEAN AllocateDestinationString);
 
988
 
 
989
NTSYSAPI
 
990
NTSTATUS
 
991
NTAPI
 
992
RtlUnicodeStringToCountedOemString(
 
993
  IN OUT POEM_STRING DestinationString,
 
994
  IN PCUNICODE_STRING SourceString,
 
995
  IN BOOLEAN AllocateDestinationString);
 
996
 
 
997
NTSYSAPI
 
998
NTSTATUS
 
999
NTAPI
 
1000
RtlUpcaseUnicodeStringToCountedOemString(
 
1001
  IN OUT POEM_STRING DestinationString,
 
1002
  IN PCUNICODE_STRING SourceString,
 
1003
  IN BOOLEAN AllocateDestinationString);
 
1004
 
 
1005
NTSYSAPI
 
1006
NTSTATUS
 
1007
NTAPI
 
1008
RtlDowncaseUnicodeString(
 
1009
  IN OUT PUNICODE_STRING UniDest,
 
1010
  IN PCUNICODE_STRING UniSource,
 
1011
  IN BOOLEAN AllocateDestinationString);
 
1012
 
 
1013
NTSYSAPI
 
1014
VOID
 
1015
NTAPI
 
1016
RtlFreeOemString (
 
1017
  IN OUT POEM_STRING OemString);
 
1018
 
 
1019
NTSYSAPI
 
1020
ULONG
 
1021
NTAPI
 
1022
RtlxUnicodeStringToOemSize(
 
1023
  IN PCUNICODE_STRING UnicodeString);
 
1024
 
 
1025
NTSYSAPI
 
1026
ULONG
 
1027
NTAPI
 
1028
RtlxOemStringToUnicodeSize(
 
1029
  IN PCOEM_STRING OemString);
 
1030
 
 
1031
NTSYSAPI
 
1032
NTSTATUS
 
1033
NTAPI
 
1034
RtlMultiByteToUnicodeN(
 
1035
  OUT PWCH UnicodeString,
 
1036
  IN ULONG MaxBytesInUnicodeString,
 
1037
  OUT PULONG BytesInUnicodeString OPTIONAL,
 
1038
  IN const CHAR *MultiByteString,
 
1039
  IN ULONG BytesInMultiByteString);
 
1040
 
 
1041
NTSYSAPI
 
1042
NTSTATUS
 
1043
NTAPI
 
1044
RtlMultiByteToUnicodeSize(
 
1045
  OUT PULONG BytesInUnicodeString,
 
1046
  IN const CHAR *MultiByteString,
 
1047
  IN ULONG BytesInMultiByteString);
 
1048
 
 
1049
NTSYSAPI
 
1050
NTSTATUS
 
1051
NTAPI
 
1052
RtlUnicodeToMultiByteSize(
 
1053
  OUT PULONG BytesInMultiByteString,
 
1054
  IN PCWCH UnicodeString,
 
1055
  IN ULONG BytesInUnicodeString);
 
1056
 
 
1057
NTSYSAPI
 
1058
NTSTATUS
 
1059
NTAPI
 
1060
RtlUnicodeToMultiByteN(
 
1061
  OUT PCHAR MultiByteString,
 
1062
  IN ULONG MaxBytesInMultiByteString,
 
1063
  OUT PULONG BytesInMultiByteString OPTIONAL,
 
1064
  IN PWCH UnicodeString,
 
1065
  IN ULONG BytesInUnicodeString);
 
1066
 
 
1067
NTSYSAPI
 
1068
NTSTATUS
 
1069
NTAPI
 
1070
RtlUpcaseUnicodeToMultiByteN(
 
1071
  OUT PCHAR MultiByteString,
 
1072
  IN ULONG MaxBytesInMultiByteString,
 
1073
  OUT PULONG BytesInMultiByteString OPTIONAL,
 
1074
  IN PCWCH UnicodeString,
 
1075
  IN ULONG BytesInUnicodeString);
 
1076
 
 
1077
NTSYSAPI
 
1078
NTSTATUS
 
1079
NTAPI
 
1080
RtlOemToUnicodeN(
 
1081
  OUT PWSTR UnicodeString,
 
1082
  IN ULONG MaxBytesInUnicodeString,
 
1083
  OUT PULONG BytesInUnicodeString OPTIONAL,
 
1084
  IN PCCH OemString,
 
1085
  IN ULONG BytesInOemString);
 
1086
 
 
1087
NTSYSAPI
 
1088
NTSTATUS
 
1089
NTAPI
 
1090
RtlUnicodeToOemN(
 
1091
  OUT PCHAR OemString,
 
1092
  IN ULONG MaxBytesInOemString,
 
1093
  OUT PULONG BytesInOemString OPTIONAL,
 
1094
  IN PCWCH UnicodeString,
 
1095
  IN ULONG BytesInUnicodeString);
 
1096
 
 
1097
NTSYSAPI
 
1098
NTSTATUS
 
1099
NTAPI
 
1100
RtlUpcaseUnicodeToOemN(
 
1101
  OUT PCHAR OemString,
 
1102
  IN ULONG MaxBytesInOemString,
 
1103
  OUT PULONG BytesInOemString OPTIONAL,
 
1104
  IN PCWCH UnicodeString,
 
1105
  IN ULONG BytesInUnicodeString);
 
1106
 
 
1107
#if (NTDDI_VERSION >= NTDDI_VISTASP1)
 
1108
NTSYSAPI
 
1109
NTSTATUS
 
1110
NTAPI
 
1111
RtlGenerate8dot3Name(
 
1112
  IN PCUNICODE_STRING Name,
 
1113
  IN BOOLEAN AllowExtendedCharacters,
 
1114
  IN OUT PGENERATE_NAME_CONTEXT Context,
 
1115
  IN OUT PUNICODE_STRING Name8dot3);
 
1116
#else
 
1117
NTSYSAPI
 
1118
VOID
 
1119
NTAPI
 
1120
RtlGenerate8dot3Name(
 
1121
  IN PCUNICODE_STRING Name,
 
1122
  IN BOOLEAN AllowExtendedCharacters,
 
1123
  IN OUT PGENERATE_NAME_CONTEXT Context,
 
1124
  IN OUT PUNICODE_STRING Name8dot3);
 
1125
#endif
 
1126
 
 
1127
NTSYSAPI
 
1128
BOOLEAN
 
1129
NTAPI
 
1130
RtlIsNameLegalDOS8Dot3(
 
1131
  IN PCUNICODE_STRING Name,
 
1132
  IN OUT POEM_STRING OemName OPTIONAL,
 
1133
  IN OUT PBOOLEAN NameContainsSpaces OPTIONAL);
 
1134
 
 
1135
NTSYSAPI
 
1136
BOOLEAN
 
1137
NTAPI
 
1138
RtlIsValidOemCharacter(
 
1139
  IN OUT PWCHAR Char);
 
1140
 
 
1141
NTSYSAPI
 
1142
VOID
 
1143
NTAPI
 
1144
PfxInitialize(
 
1145
  OUT PPREFIX_TABLE PrefixTable);
 
1146
 
 
1147
NTSYSAPI
 
1148
BOOLEAN
 
1149
NTAPI
 
1150
PfxInsertPrefix(
 
1151
  IN PPREFIX_TABLE PrefixTable,
 
1152
  IN PSTRING Prefix,
 
1153
  OUT PPREFIX_TABLE_ENTRY PrefixTableEntry);
 
1154
 
 
1155
NTSYSAPI
 
1156
VOID
 
1157
NTAPI
 
1158
PfxRemovePrefix(
 
1159
  IN PPREFIX_TABLE PrefixTable,
 
1160
  IN PPREFIX_TABLE_ENTRY PrefixTableEntry);
 
1161
 
 
1162
NTSYSAPI
 
1163
PPREFIX_TABLE_ENTRY
 
1164
NTAPI
 
1165
PfxFindPrefix(
 
1166
  IN PPREFIX_TABLE PrefixTable,
 
1167
  IN PSTRING FullName);
 
1168
 
 
1169
NTSYSAPI
 
1170
VOID
 
1171
NTAPI
 
1172
RtlInitializeUnicodePrefix(
 
1173
  OUT PUNICODE_PREFIX_TABLE PrefixTable);
 
1174
 
 
1175
NTSYSAPI
 
1176
BOOLEAN
 
1177
NTAPI
 
1178
RtlInsertUnicodePrefix(
 
1179
  IN PUNICODE_PREFIX_TABLE PrefixTable,
 
1180
  IN PUNICODE_STRING Prefix,
 
1181
  OUT PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry);
 
1182
 
 
1183
NTSYSAPI
 
1184
VOID
 
1185
NTAPI
 
1186
RtlRemoveUnicodePrefix(
 
1187
  IN PUNICODE_PREFIX_TABLE PrefixTable,
 
1188
  IN PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry);
 
1189
 
 
1190
NTSYSAPI
 
1191
PUNICODE_PREFIX_TABLE_ENTRY
 
1192
NTAPI
 
1193
RtlFindUnicodePrefix(
 
1194
  IN PUNICODE_PREFIX_TABLE PrefixTable,
 
1195
  IN PUNICODE_STRING FullName,
 
1196
  IN ULONG CaseInsensitiveIndex);
 
1197
 
 
1198
NTSYSAPI
 
1199
PUNICODE_PREFIX_TABLE_ENTRY
 
1200
NTAPI
 
1201
RtlNextUnicodePrefix(
 
1202
  IN PUNICODE_PREFIX_TABLE PrefixTable,
 
1203
  IN BOOLEAN Restart);
 
1204
 
 
1205
NTSYSAPI
 
1206
SIZE_T
 
1207
NTAPI
 
1208
RtlCompareMemoryUlong(
 
1209
  IN PVOID Source,
 
1210
  IN SIZE_T Length,
 
1211
  IN ULONG Pattern);
 
1212
 
 
1213
NTSYSAPI
 
1214
BOOLEAN
 
1215
NTAPI
 
1216
RtlTimeToSecondsSince1980(
 
1217
  IN PLARGE_INTEGER Time,
 
1218
  OUT PULONG ElapsedSeconds);
 
1219
 
 
1220
NTSYSAPI
 
1221
VOID
 
1222
NTAPI
 
1223
RtlSecondsSince1980ToTime(
 
1224
  IN ULONG ElapsedSeconds,
 
1225
  OUT PLARGE_INTEGER Time);
 
1226
 
 
1227
NTSYSAPI
 
1228
BOOLEAN
 
1229
NTAPI
 
1230
RtlTimeToSecondsSince1970(
 
1231
  IN PLARGE_INTEGER Time,
 
1232
  OUT PULONG ElapsedSeconds);
 
1233
 
 
1234
NTSYSAPI
 
1235
VOID
 
1236
NTAPI
 
1237
RtlSecondsSince1970ToTime(
 
1238
  IN ULONG ElapsedSeconds,
 
1239
  OUT PLARGE_INTEGER Time);
 
1240
 
 
1241
NTSYSAPI
 
1242
BOOLEAN
 
1243
NTAPI
 
1244
RtlValidSid(
 
1245
  IN PSID Sid);
 
1246
 
 
1247
NTSYSAPI
 
1248
BOOLEAN
 
1249
NTAPI
 
1250
RtlEqualSid(
 
1251
  IN PSID Sid1,
 
1252
  IN PSID Sid2);
 
1253
 
 
1254
NTSYSAPI
 
1255
BOOLEAN
 
1256
NTAPI
 
1257
RtlEqualPrefixSid(
 
1258
  IN PSID Sid1,
 
1259
  IN PSID Sid2);
 
1260
 
 
1261
NTSYSAPI
 
1262
ULONG
 
1263
NTAPI
 
1264
RtlLengthRequiredSid(
 
1265
  IN ULONG SubAuthorityCount);
 
1266
 
 
1267
NTSYSAPI
 
1268
PVOID
 
1269
NTAPI
 
1270
RtlFreeSid(
 
1271
  IN PSID Sid);
 
1272
 
 
1273
NTSYSAPI
 
1274
NTSTATUS
 
1275
NTAPI
 
1276
RtlAllocateAndInitializeSid(
 
1277
  IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
 
1278
  IN UCHAR SubAuthorityCount,
 
1279
  IN ULONG SubAuthority0,
 
1280
  IN ULONG SubAuthority1,
 
1281
  IN ULONG SubAuthority2,
 
1282
  IN ULONG SubAuthority3,
 
1283
  IN ULONG SubAuthority4,
 
1284
  IN ULONG SubAuthority5,
 
1285
  IN ULONG SubAuthority6,
 
1286
  IN ULONG SubAuthority7,
 
1287
  OUT PSID *Sid);
 
1288
 
 
1289
NTSYSAPI
 
1290
NTSTATUS
 
1291
NTAPI
 
1292
RtlInitializeSid(
 
1293
  OUT PSID Sid,
 
1294
  IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
 
1295
  IN UCHAR SubAuthorityCount);
 
1296
 
 
1297
NTSYSAPI
 
1298
PULONG
 
1299
NTAPI
 
1300
RtlSubAuthoritySid(
 
1301
  IN PSID Sid,
 
1302
  IN ULONG SubAuthority);
 
1303
 
 
1304
NTSYSAPI
 
1305
ULONG
 
1306
NTAPI
 
1307
RtlLengthSid(
 
1308
  IN PSID Sid);
 
1309
 
 
1310
NTSYSAPI
 
1311
NTSTATUS
 
1312
NTAPI
 
1313
RtlCopySid(
 
1314
  IN ULONG Length,
 
1315
  IN PSID Destination,
 
1316
  IN PSID Source);
 
1317
 
 
1318
NTSYSAPI
 
1319
NTSTATUS
 
1320
NTAPI
 
1321
RtlConvertSidToUnicodeString(
 
1322
  IN OUT PUNICODE_STRING UnicodeString,
 
1323
  IN PSID Sid,
 
1324
  IN BOOLEAN AllocateDestinationString);
 
1325
 
 
1326
NTSYSAPI
 
1327
VOID
 
1328
NTAPI
 
1329
RtlCopyLuid(
 
1330
  OUT PLUID DestinationLuid,
 
1331
  IN PLUID SourceLuid);
 
1332
 
 
1333
NTSYSAPI
 
1334
NTSTATUS
 
1335
NTAPI
 
1336
RtlCreateAcl(
 
1337
  OUT PACL Acl,
 
1338
  IN ULONG AclLength,
 
1339
  IN ULONG AclRevision);
 
1340
 
 
1341
NTSYSAPI
 
1342
NTSTATUS
 
1343
NTAPI
 
1344
RtlAddAce(
 
1345
  IN OUT PACL Acl,
 
1346
  IN ULONG AceRevision,
 
1347
  IN ULONG StartingAceIndex,
 
1348
  IN PVOID AceList,
 
1349
  IN ULONG AceListLength);
 
1350
 
 
1351
NTSYSAPI
 
1352
NTSTATUS
 
1353
NTAPI
 
1354
RtlDeleteAce(
 
1355
  IN OUT PACL Acl,
 
1356
  IN ULONG AceIndex);
 
1357
 
 
1358
NTSYSAPI
 
1359
NTSTATUS
 
1360
NTAPI
 
1361
RtlGetAce(
 
1362
  IN PACL Acl,
 
1363
  IN ULONG AceIndex,
 
1364
  OUT PVOID *Ace);
 
1365
 
 
1366
NTSYSAPI
 
1367
NTSTATUS
 
1368
NTAPI
 
1369
RtlAddAccessAllowedAce(
 
1370
  IN OUT PACL Acl,
 
1371
  IN ULONG AceRevision,
 
1372
  IN ACCESS_MASK AccessMask,
 
1373
  IN PSID Sid);
 
1374
 
 
1375
NTSYSAPI
 
1376
NTSTATUS
 
1377
NTAPI
 
1378
RtlAddAccessAllowedAceEx(
 
1379
  IN OUT PACL Acl,
 
1380
  IN ULONG AceRevision,
 
1381
  IN ULONG AceFlags,
 
1382
  IN ACCESS_MASK AccessMask,
 
1383
  IN PSID Sid);
 
1384
 
 
1385
NTSYSAPI
 
1386
NTSTATUS
 
1387
NTAPI
 
1388
RtlCreateSecurityDescriptorRelative(
 
1389
  OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor,
 
1390
  IN ULONG Revision);
 
1391
 
 
1392
NTSYSAPI
 
1393
NTSTATUS
 
1394
NTAPI
 
1395
RtlGetDaclSecurityDescriptor(
 
1396
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
1397
  OUT PBOOLEAN DaclPresent,
 
1398
  OUT PACL *Dacl,
 
1399
  OUT PBOOLEAN DaclDefaulted);
 
1400
 
 
1401
NTSYSAPI
 
1402
NTSTATUS
 
1403
NTAPI
 
1404
RtlSetOwnerSecurityDescriptor(
 
1405
  IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
 
1406
  IN PSID Owner OPTIONAL,
 
1407
  IN BOOLEAN OwnerDefaulted);
 
1408
 
 
1409
NTSYSAPI
 
1410
NTSTATUS
 
1411
NTAPI
 
1412
RtlGetOwnerSecurityDescriptor(
 
1413
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
1414
  OUT PSID *Owner,
 
1415
  OUT PBOOLEAN OwnerDefaulted);
 
1416
 
 
1417
NTSYSAPI
 
1418
ULONG
 
1419
NTAPI
 
1420
RtlNtStatusToDosError(
 
1421
  IN NTSTATUS Status);
 
1422
 
 
1423
NTSYSAPI
 
1424
NTSTATUS
 
1425
NTAPI
 
1426
RtlCustomCPToUnicodeN(
 
1427
  IN PCPTABLEINFO CustomCP,
 
1428
  OUT PWCH UnicodeString,
 
1429
  IN ULONG MaxBytesInUnicodeString,
 
1430
  OUT PULONG BytesInUnicodeString OPTIONAL,
 
1431
  IN PCH CustomCPString,
 
1432
  IN ULONG BytesInCustomCPString);
 
1433
 
 
1434
NTSYSAPI
 
1435
NTSTATUS
 
1436
NTAPI
 
1437
RtlUnicodeToCustomCPN(
 
1438
  IN PCPTABLEINFO CustomCP,
 
1439
  OUT PCH CustomCPString,
 
1440
  IN ULONG MaxBytesInCustomCPString,
 
1441
  OUT PULONG BytesInCustomCPString OPTIONAL,
 
1442
  IN PWCH UnicodeString,
 
1443
  IN ULONG BytesInUnicodeString);
 
1444
 
 
1445
NTSYSAPI
 
1446
NTSTATUS
 
1447
NTAPI
 
1448
RtlUpcaseUnicodeToCustomCPN(
 
1449
  IN PCPTABLEINFO CustomCP,
 
1450
  OUT PCH CustomCPString,
 
1451
  IN ULONG MaxBytesInCustomCPString,
 
1452
  OUT PULONG BytesInCustomCPString OPTIONAL,
 
1453
  IN PWCH UnicodeString,
 
1454
  IN ULONG BytesInUnicodeString);
 
1455
 
 
1456
NTSYSAPI
 
1457
VOID
 
1458
NTAPI
 
1459
RtlInitCodePageTable(
 
1460
  IN PUSHORT TableBase,
 
1461
  IN OUT PCPTABLEINFO CodePageTable);
 
1462
 
 
1463
 
 
1464
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 
1465
 
 
1466
 
 
1467
#if (NTDDI_VERSION >= NTDDI_WINXP)
 
1468
 
 
1469
 
 
1470
 
 
1471
NTSYSAPI
 
1472
PVOID
 
1473
NTAPI
 
1474
RtlCreateHeap(
 
1475
  IN ULONG Flags,
 
1476
  IN PVOID HeapBase OPTIONAL,
 
1477
  IN SIZE_T ReserveSize OPTIONAL,
 
1478
  IN SIZE_T CommitSize OPTIONAL,
 
1479
  IN PVOID Lock OPTIONAL,
 
1480
  IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL);
 
1481
 
 
1482
NTSYSAPI
 
1483
PVOID
 
1484
NTAPI
 
1485
RtlDestroyHeap(
 
1486
  IN PVOID HeapHandle);
 
1487
 
 
1488
NTSYSAPI
 
1489
USHORT
 
1490
NTAPI
 
1491
RtlCaptureStackBackTrace(
 
1492
  IN ULONG FramesToSkip,
 
1493
  IN ULONG FramesToCapture,
 
1494
  OUT PVOID *BackTrace,
 
1495
  OUT PULONG BackTraceHash OPTIONAL);
 
1496
 
 
1497
NTSYSAPI
 
1498
ULONG
 
1499
NTAPI
 
1500
RtlRandomEx(
 
1501
  IN OUT PULONG Seed);
 
1502
 
 
1503
NTSYSAPI
 
1504
NTSTATUS
 
1505
NTAPI
 
1506
RtlInitUnicodeStringEx(
 
1507
  OUT PUNICODE_STRING DestinationString,
 
1508
  IN PCWSTR SourceString OPTIONAL);
 
1509
 
 
1510
NTSYSAPI
 
1511
NTSTATUS
 
1512
NTAPI
 
1513
RtlValidateUnicodeString(
 
1514
  IN ULONG Flags,
 
1515
  IN PCUNICODE_STRING String);
 
1516
 
 
1517
NTSYSAPI
 
1518
NTSTATUS
 
1519
NTAPI
 
1520
RtlDuplicateUnicodeString(
 
1521
  IN ULONG Flags,
 
1522
  IN PCUNICODE_STRING SourceString,
 
1523
  OUT PUNICODE_STRING DestinationString);
 
1524
 
 
1525
NTSYSAPI
 
1526
NTSTATUS
 
1527
NTAPI
 
1528
RtlGetCompressionWorkSpaceSize(
 
1529
  IN USHORT CompressionFormatAndEngine,
 
1530
  OUT PULONG CompressBufferWorkSpaceSize,
 
1531
  OUT PULONG CompressFragmentWorkSpaceSize);
 
1532
 
 
1533
NTSYSAPI
 
1534
NTSTATUS
 
1535
NTAPI
 
1536
RtlCompressBuffer(
 
1537
  IN USHORT CompressionFormatAndEngine,
 
1538
  IN PUCHAR UncompressedBuffer,
 
1539
  IN ULONG UncompressedBufferSize,
 
1540
  OUT PUCHAR CompressedBuffer,
 
1541
  IN ULONG CompressedBufferSize,
 
1542
  IN ULONG UncompressedChunkSize,
 
1543
  OUT PULONG FinalCompressedSize,
 
1544
  IN PVOID WorkSpace);
 
1545
 
 
1546
NTSYSAPI
 
1547
NTSTATUS
 
1548
NTAPI
 
1549
RtlDecompressBuffer(
 
1550
  IN USHORT CompressionFormat,
 
1551
  OUT PUCHAR UncompressedBuffer,
 
1552
  IN ULONG UncompressedBufferSize,
 
1553
  IN PUCHAR CompressedBuffer,
 
1554
  IN ULONG CompressedBufferSize,
 
1555
  OUT PULONG FinalUncompressedSize);
 
1556
 
 
1557
NTSYSAPI
 
1558
NTSTATUS
 
1559
NTAPI
 
1560
RtlDecompressFragment(
 
1561
  IN USHORT CompressionFormat,
 
1562
  OUT PUCHAR UncompressedFragment,
 
1563
  IN ULONG UncompressedFragmentSize,
 
1564
  IN PUCHAR CompressedBuffer,
 
1565
  IN ULONG CompressedBufferSize,
 
1566
  IN ULONG FragmentOffset,
 
1567
  OUT PULONG FinalUncompressedSize,
 
1568
  IN PVOID WorkSpace);
 
1569
 
 
1570
NTSYSAPI
 
1571
NTSTATUS
 
1572
NTAPI
 
1573
RtlDescribeChunk(
 
1574
  IN USHORT CompressionFormat,
 
1575
  IN OUT PUCHAR *CompressedBuffer,
 
1576
  IN PUCHAR EndOfCompressedBufferPlus1,
 
1577
  OUT PUCHAR *ChunkBuffer,
 
1578
  OUT PULONG ChunkSize);
 
1579
 
 
1580
NTSYSAPI
 
1581
NTSTATUS
 
1582
NTAPI
 
1583
RtlReserveChunk(
 
1584
  IN USHORT CompressionFormat,
 
1585
  IN OUT PUCHAR *CompressedBuffer,
 
1586
  IN PUCHAR EndOfCompressedBufferPlus1,
 
1587
  OUT PUCHAR *ChunkBuffer,
 
1588
  IN ULONG ChunkSize);
 
1589
 
 
1590
NTSYSAPI
 
1591
NTSTATUS
 
1592
NTAPI
 
1593
RtlDecompressChunks(
 
1594
  OUT PUCHAR UncompressedBuffer,
 
1595
  IN ULONG UncompressedBufferSize,
 
1596
  IN PUCHAR CompressedBuffer,
 
1597
  IN ULONG CompressedBufferSize,
 
1598
  IN PUCHAR CompressedTail,
 
1599
  IN ULONG CompressedTailSize,
 
1600
  IN PCOMPRESSED_DATA_INFO CompressedDataInfo);
 
1601
 
 
1602
NTSYSAPI
 
1603
NTSTATUS
 
1604
NTAPI
 
1605
RtlCompressChunks(
 
1606
  IN PUCHAR UncompressedBuffer,
 
1607
  IN ULONG UncompressedBufferSize,
 
1608
  OUT PUCHAR CompressedBuffer,
 
1609
  IN ULONG CompressedBufferSize,
 
1610
  IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo,
 
1611
  IN ULONG CompressedDataInfoLength,
 
1612
  IN PVOID WorkSpace);
 
1613
 
 
1614
NTSYSAPI
 
1615
PSID_IDENTIFIER_AUTHORITY
 
1616
NTAPI
 
1617
RtlIdentifierAuthoritySid(
 
1618
  IN PSID Sid);
 
1619
 
 
1620
NTSYSAPI
 
1621
PUCHAR
 
1622
NTAPI
 
1623
RtlSubAuthorityCountSid(
 
1624
  IN PSID Sid);
 
1625
 
 
1626
NTSYSAPI
 
1627
ULONG
 
1628
NTAPI
 
1629
RtlNtStatusToDosErrorNoTeb(
 
1630
  IN NTSTATUS Status);
 
1631
 
 
1632
NTSYSAPI
 
1633
NTSTATUS
 
1634
NTAPI
 
1635
RtlCreateSystemVolumeInformationFolder(
 
1636
  IN PCUNICODE_STRING VolumeRootPath);
 
1637
 
 
1638
#if defined(_M_AMD64)
 
1639
 
 
1640
FORCEINLINE
 
1641
VOID
 
1642
RtlFillMemoryUlong (
 
1643
  OUT PVOID Destination,
 
1644
  IN SIZE_T Length,
 
1645
  IN ULONG Pattern)
 
1646
{
 
1647
  PULONG Address = (PULONG)Destination;
 
1648
  if ((Length /= 4) != 0) {
 
1649
    if (((ULONG64)Address & 4) != 0) {
 
1650
      *Address = Pattern;
 
1651
      if ((Length -= 1) == 0) {
 
1652
        return;
 
1653
      }
 
1654
    Address += 1;
 
1655
    }
 
1656
    __stosq((PULONG64)(Address), Pattern | ((ULONG64)Pattern << 32), Length / 2);
 
1657
    if ((Length & 1) != 0) Address[Length - 1] = Pattern;
 
1658
  }
 
1659
  return;
 
1660
}
 
1661
 
 
1662
#define RtlFillMemoryUlonglong(Destination, Length, Pattern)                \
 
1663
    __stosq((PULONG64)(Destination), Pattern, (Length) / 8)
 
1664
 
 
1665
#else
 
1666
 
 
1667
NTSYSAPI
 
1668
VOID
 
1669
NTAPI
 
1670
RtlFillMemoryUlong(
 
1671
  OUT PVOID Destination,
 
1672
  IN SIZE_T Length,
 
1673
  IN ULONG Pattern);
 
1674
 
 
1675
NTSYSAPI
 
1676
VOID
 
1677
NTAPI
 
1678
RtlFillMemoryUlonglong(
 
1679
  OUT PVOID Destination,
 
1680
  IN SIZE_T Length,
 
1681
  IN ULONGLONG Pattern);
 
1682
 
 
1683
#endif /* defined(_M_AMD64) */
 
1684
 
 
1685
#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 
1686
 
 
1687
#if (NTDDI_VERSION >= NTDDI_WS03)
 
1688
NTSYSAPI
 
1689
NTSTATUS
 
1690
NTAPI
 
1691
RtlInitAnsiStringEx(
 
1692
  OUT PANSI_STRING DestinationString,
 
1693
  IN PCSZ SourceString OPTIONAL);
 
1694
#endif
 
1695
 
 
1696
#if (NTDDI_VERSION >= NTDDI_WS03SP1)
 
1697
 
 
1698
NTSYSAPI
 
1699
NTSTATUS
 
1700
NTAPI
 
1701
RtlGetSaclSecurityDescriptor(
 
1702
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
1703
  OUT PBOOLEAN SaclPresent,
 
1704
  OUT PACL *Sacl,
 
1705
  OUT PBOOLEAN SaclDefaulted);
 
1706
 
 
1707
NTSYSAPI
 
1708
NTSTATUS
 
1709
NTAPI
 
1710
RtlSetGroupSecurityDescriptor(
 
1711
  IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
 
1712
  IN PSID Group OPTIONAL,
 
1713
  IN BOOLEAN GroupDefaulted OPTIONAL);
 
1714
 
 
1715
NTSYSAPI
 
1716
NTSTATUS
 
1717
NTAPI
 
1718
RtlGetGroupSecurityDescriptor(
 
1719
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
1720
  OUT PSID *Group,
 
1721
  OUT PBOOLEAN GroupDefaulted);
 
1722
 
 
1723
NTSYSAPI
 
1724
NTSTATUS
 
1725
NTAPI
 
1726
RtlAbsoluteToSelfRelativeSD(
 
1727
  IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
 
1728
  OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor OPTIONAL,
 
1729
  IN OUT PULONG BufferLength);
 
1730
 
 
1731
NTSYSAPI
 
1732
NTSTATUS
 
1733
NTAPI
 
1734
RtlSelfRelativeToAbsoluteSD(
 
1735
  IN PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
 
1736
  OUT PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor OPTIONAL,
 
1737
  IN OUT PULONG AbsoluteSecurityDescriptorSize,
 
1738
  OUT PACL Dacl OPTIONAL,
 
1739
  IN OUT PULONG DaclSize,
 
1740
  OUT PACL Sacl OPTIONAL,
 
1741
  IN OUT PULONG SaclSize,
 
1742
  OUT PSID Owner OPTIONAL,
 
1743
  IN OUT PULONG OwnerSize,
 
1744
  OUT PSID PrimaryGroup OPTIONAL,
 
1745
  IN OUT PULONG PrimaryGroupSize);
 
1746
 
 
1747
#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
 
1748
 
 
1749
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
1750
 
 
1751
NTSYSAPI
 
1752
NTSTATUS
 
1753
NTAPI
 
1754
RtlNormalizeString(
 
1755
  IN ULONG NormForm,
 
1756
  IN PCWSTR SourceString,
 
1757
  IN LONG SourceStringLength,
 
1758
  OUT PWSTR DestinationString,
 
1759
  IN OUT PLONG DestinationStringLength);
 
1760
 
 
1761
NTSYSAPI
 
1762
NTSTATUS
 
1763
NTAPI
 
1764
RtlIsNormalizedString(
 
1765
  IN ULONG NormForm,
 
1766
  IN PCWSTR SourceString,
 
1767
  IN LONG SourceStringLength,
 
1768
  OUT PBOOLEAN Normalized);
 
1769
 
 
1770
NTSYSAPI
 
1771
NTSTATUS
 
1772
NTAPI
 
1773
RtlIdnToAscii(
 
1774
  IN ULONG Flags,
 
1775
  IN PCWSTR SourceString,
 
1776
  IN LONG SourceStringLength,
 
1777
  OUT PWSTR DestinationString,
 
1778
  IN OUT PLONG DestinationStringLength);
 
1779
 
 
1780
NTSYSAPI
 
1781
NTSTATUS
 
1782
NTAPI
 
1783
RtlIdnToUnicode(
 
1784
  IN ULONG Flags,
 
1785
  IN PCWSTR SourceString,
 
1786
  IN LONG SourceStringLength,
 
1787
  OUT PWSTR DestinationString,
 
1788
  IN OUT PLONG DestinationStringLength);
 
1789
 
 
1790
NTSYSAPI
 
1791
NTSTATUS
 
1792
NTAPI
 
1793
RtlIdnToNameprepUnicode(
 
1794
  IN ULONG Flags,
 
1795
  IN PCWSTR SourceString,
 
1796
  IN LONG SourceStringLength,
 
1797
  OUT PWSTR DestinationString,
 
1798
  IN OUT PLONG DestinationStringLength);
 
1799
 
 
1800
NTSYSAPI
 
1801
NTSTATUS
 
1802
NTAPI
 
1803
RtlCreateServiceSid(
 
1804
  IN PUNICODE_STRING ServiceName,
 
1805
  OUT PSID ServiceSid,
 
1806
  IN OUT PULONG ServiceSidLength);
 
1807
 
 
1808
NTSYSAPI
 
1809
LONG
 
1810
NTAPI
 
1811
RtlCompareAltitudes(
 
1812
  IN PCUNICODE_STRING Altitude1,
 
1813
  IN PCUNICODE_STRING Altitude2);
 
1814
 
 
1815
 
 
1816
#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 
1817
 
 
1818
#if (NTDDI_VERSION >= NTDDI_WIN7)
 
1819
 
 
1820
NTSYSAPI
 
1821
NTSTATUS
 
1822
NTAPI
 
1823
RtlUnicodeToUTF8N(
 
1824
  OUT PCHAR UTF8StringDestination,
 
1825
  IN ULONG UTF8StringMaxByteCount,
 
1826
  OUT PULONG UTF8StringActualByteCount,
 
1827
  IN PCWCH UnicodeStringSource,
 
1828
  IN ULONG UnicodeStringByteCount);
 
1829
 
 
1830
NTSYSAPI
 
1831
NTSTATUS
 
1832
NTAPI
 
1833
RtlUTF8ToUnicodeN(
 
1834
  OUT PWSTR UnicodeStringDestination,
 
1835
  IN ULONG UnicodeStringMaxByteCount,
 
1836
  OUT PULONG UnicodeStringActualByteCount,
 
1837
  IN PCCH UTF8StringSource,
 
1838
  IN ULONG UTF8StringByteCount);
 
1839
 
 
1840
NTSYSAPI
 
1841
NTSTATUS
 
1842
NTAPI
 
1843
RtlReplaceSidInSd(
 
1844
  IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
 
1845
  IN PSID OldSid,
 
1846
  IN PSID NewSid,
 
1847
  OUT ULONG *NumChanges);
 
1848
 
 
1849
NTSYSAPI
 
1850
NTSTATUS
 
1851
NTAPI
 
1852
RtlCreateVirtualAccountSid(
 
1853
  IN PCUNICODE_STRING Name,
 
1854
  IN ULONG BaseSubAuthority,
 
1855
  OUT PSID Sid,
 
1856
  IN OUT PULONG SidLength);
 
1857
 
 
1858
#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 
1859
 
 
1860
 
 
1861
#if defined(_AMD64_) || defined(_IA64_)
 
1862
 
 
1863
 
 
1864
 
 
1865
#endif /* defined(_AMD64_) || defined(_IA64_) */
 
1866
 
 
1867
 
 
1868
 
 
1869
#define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
 
1870
#define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
 
1871
 
 
1872
#define RtlUnicodeStringToOemSize(STRING) (NLS_MB_OEM_CODE_PAGE_TAG ?                                \
 
1873
                                           RtlxUnicodeStringToOemSize(STRING) :                      \
 
1874
                                           ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
 
1875
)
 
1876
 
 
1877
#define RtlOemStringToUnicodeSize(STRING) (                 \
 
1878
    NLS_MB_OEM_CODE_PAGE_TAG ?                              \
 
1879
    RtlxOemStringToUnicodeSize(STRING) :                    \
 
1880
    ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR)  \
 
1881
)
 
1882
 
 
1883
#define RtlOemStringToCountedUnicodeSize(STRING) (                    \
 
1884
    (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
 
1885
)
 
1886
 
 
1887
#define RtlOffsetToPointer(B,O) ((PCHAR)(((PCHAR)(B)) + ((ULONG_PTR)(O))))
 
1888
#define RtlPointerToOffset(B,P) ((ULONG)(((PCHAR)(P)) - ((PCHAR)(B))))
 
1889
 
 
1890
typedef enum _OBJECT_INFORMATION_CLASS {
 
1891
  ObjectBasicInformation = 0,
 
1892
  ObjectNameInformation = 1, /* FIXME, not in WDK */
 
1893
  ObjectTypeInformation = 2,
 
1894
  ObjectTypesInformation = 3, /* FIXME, not in WDK */
 
1895
  ObjectHandleFlagInformation = 4, /* FIXME, not in WDK */
 
1896
  ObjectSessionInformation = 5, /* FIXME, not in WDK */
 
1897
  MaxObjectInfoClass /* FIXME, not in WDK */
 
1898
} OBJECT_INFORMATION_CLASS;
 
1899
 
 
1900
NTSYSCALLAPI
 
1901
NTSTATUS
 
1902
NTAPI
 
1903
NtQueryObject(
 
1904
  IN HANDLE Handle OPTIONAL,
 
1905
  IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
 
1906
  OUT PVOID ObjectInformation OPTIONAL,
 
1907
  IN ULONG ObjectInformationLength,
 
1908
  OUT PULONG ReturnLength OPTIONAL);
 
1909
 
 
1910
#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
1911
 
 
1912
NTSYSCALLAPI
 
1913
NTSTATUS
 
1914
NTAPI
 
1915
NtOpenThreadToken(
 
1916
  IN HANDLE ThreadHandle,
 
1917
  IN ACCESS_MASK DesiredAccess,
 
1918
  IN BOOLEAN OpenAsSelf,
 
1919
  OUT PHANDLE TokenHandle);
 
1920
 
 
1921
NTSYSCALLAPI
 
1922
NTSTATUS
 
1923
NTAPI
 
1924
NtOpenProcessToken(
 
1925
  IN HANDLE ProcessHandle,
 
1926
  IN ACCESS_MASK DesiredAccess,
 
1927
  OUT PHANDLE TokenHandle);
 
1928
 
 
1929
NTSYSCALLAPI
 
1930
NTSTATUS
 
1931
NTAPI
 
1932
NtQueryInformationToken(
 
1933
  IN HANDLE TokenHandle,
 
1934
  IN TOKEN_INFORMATION_CLASS TokenInformationClass,
 
1935
  OUT PVOID TokenInformation OPTIONAL,
 
1936
  IN ULONG TokenInformationLength,
 
1937
  OUT PULONG ReturnLength);
 
1938
 
 
1939
NTSYSCALLAPI
 
1940
NTSTATUS
 
1941
NTAPI
 
1942
NtAdjustPrivilegesToken(
 
1943
  IN HANDLE TokenHandle,
 
1944
  IN BOOLEAN DisableAllPrivileges,
 
1945
  IN PTOKEN_PRIVILEGES NewState OPTIONAL,
 
1946
  IN ULONG BufferLength,
 
1947
  OUT PTOKEN_PRIVILEGES PreviousState,
 
1948
  OUT PULONG ReturnLength OPTIONAL);
 
1949
 
 
1950
NTSYSCALLAPI
 
1951
NTSTATUS
 
1952
NTAPI
 
1953
NtCreateFile(
 
1954
  OUT PHANDLE FileHandle,
 
1955
  IN ACCESS_MASK DesiredAccess,
 
1956
  IN POBJECT_ATTRIBUTES ObjectAttributes,
 
1957
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
1958
  IN PLARGE_INTEGER AllocationSize OPTIONAL,
 
1959
  IN ULONG FileAttributes,
 
1960
  IN ULONG ShareAccess,
 
1961
  IN ULONG CreateDisposition,
 
1962
  IN ULONG CreateOptions,
 
1963
  IN PVOID EaBuffer,
 
1964
  IN ULONG EaLength);
 
1965
 
 
1966
NTSYSCALLAPI
 
1967
NTSTATUS
 
1968
NTAPI
 
1969
NtDeviceIoControlFile(
 
1970
  IN HANDLE FileHandle,
 
1971
  IN HANDLE Event OPTIONAL,
 
1972
  IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
 
1973
  IN PVOID ApcContext OPTIONAL,
 
1974
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
1975
  IN ULONG IoControlCode,
 
1976
  IN PVOID InputBuffer OPTIONAL,
 
1977
  IN ULONG InputBufferLength,
 
1978
  OUT PVOID OutputBuffer OPTIONAL,
 
1979
  IN ULONG OutputBufferLength);
 
1980
 
 
1981
NTSYSCALLAPI
 
1982
NTSTATUS
 
1983
NTAPI
 
1984
NtFsControlFile(
 
1985
  IN HANDLE FileHandle,
 
1986
  IN HANDLE Event OPTIONAL,
 
1987
  IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
 
1988
  IN PVOID ApcContext OPTIONAL,
 
1989
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
1990
  IN ULONG FsControlCode,
 
1991
  IN PVOID InputBuffer OPTIONAL,
 
1992
  IN ULONG InputBufferLength,
 
1993
  OUT PVOID OutputBuffer OPTIONAL,
 
1994
  IN ULONG OutputBufferLength);
 
1995
 
 
1996
NTSYSCALLAPI
 
1997
NTSTATUS
 
1998
NTAPI
 
1999
NtLockFile(
 
2000
  IN HANDLE FileHandle,
 
2001
  IN HANDLE Event OPTIONAL,
 
2002
  IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
 
2003
  IN PVOID ApcContext OPTIONAL,
 
2004
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
2005
  IN PLARGE_INTEGER ByteOffset,
 
2006
  IN PLARGE_INTEGER Length,
 
2007
  IN ULONG Key,
 
2008
  IN BOOLEAN FailImmediately,
 
2009
  IN BOOLEAN ExclusiveLock);
 
2010
 
 
2011
NTSYSCALLAPI
 
2012
NTSTATUS
 
2013
NTAPI
 
2014
NtOpenFile(
 
2015
  OUT PHANDLE FileHandle,
 
2016
  IN ACCESS_MASK DesiredAccess,
 
2017
  IN POBJECT_ATTRIBUTES ObjectAttributes,
 
2018
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
2019
  IN ULONG ShareAccess,
 
2020
  IN ULONG OpenOptions);
 
2021
 
 
2022
NTSYSCALLAPI
 
2023
NTSTATUS
 
2024
NTAPI
 
2025
NtQueryDirectoryFile(
 
2026
  IN HANDLE FileHandle,
 
2027
  IN HANDLE Event OPTIONAL,
 
2028
  IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
 
2029
  IN PVOID ApcContext OPTIONAL,
 
2030
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
2031
  OUT PVOID FileInformation,
 
2032
  IN ULONG Length,
 
2033
  IN FILE_INFORMATION_CLASS FileInformationClass,
 
2034
  IN BOOLEAN ReturnSingleEntry,
 
2035
  IN PUNICODE_STRING FileName OPTIONAL,
 
2036
  IN BOOLEAN RestartScan);
 
2037
 
 
2038
NTSYSCALLAPI
 
2039
NTSTATUS
 
2040
NTAPI
 
2041
NtQueryInformationFile(
 
2042
  IN HANDLE FileHandle,
 
2043
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
2044
  OUT PVOID FileInformation,
 
2045
  IN ULONG Length,
 
2046
  IN FILE_INFORMATION_CLASS FileInformationClass);
 
2047
 
 
2048
NTSYSCALLAPI
 
2049
NTSTATUS
 
2050
NTAPI
 
2051
NtQueryQuotaInformationFile(
 
2052
  IN HANDLE FileHandle,
 
2053
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
2054
  OUT PVOID Buffer,
 
2055
  IN ULONG Length,
 
2056
  IN BOOLEAN ReturnSingleEntry,
 
2057
  IN PVOID SidList,
 
2058
  IN ULONG SidListLength,
 
2059
  IN PSID StartSid OPTIONAL,
 
2060
  IN BOOLEAN RestartScan);
 
2061
 
 
2062
NTSYSCALLAPI
 
2063
NTSTATUS
 
2064
NTAPI
 
2065
NtQueryVolumeInformationFile(
 
2066
  IN HANDLE FileHandle,
 
2067
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
2068
  OUT PVOID FsInformation,
 
2069
  IN ULONG Length,
 
2070
  IN FS_INFORMATION_CLASS FsInformationClass);
 
2071
 
 
2072
NTSYSCALLAPI
 
2073
NTSTATUS
 
2074
NTAPI
 
2075
NtReadFile(
 
2076
  IN HANDLE FileHandle,
 
2077
  IN HANDLE Event OPTIONAL,
 
2078
  IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
 
2079
  IN PVOID ApcContext OPTIONAL,
 
2080
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
2081
  OUT PVOID Buffer,
 
2082
  IN ULONG Length,
 
2083
  IN PLARGE_INTEGER ByteOffset OPTIONAL,
 
2084
  IN PULONG Key OPTIONAL);
 
2085
 
 
2086
NTSYSCALLAPI
 
2087
NTSTATUS
 
2088
NTAPI
 
2089
NtSetInformationFile(
 
2090
  IN HANDLE FileHandle,
 
2091
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
2092
  IN PVOID FileInformation,
 
2093
  IN ULONG Length,
 
2094
  IN FILE_INFORMATION_CLASS FileInformationClass);
 
2095
 
 
2096
NTSYSCALLAPI
 
2097
NTSTATUS
 
2098
NTAPI
 
2099
NtSetQuotaInformationFile(
 
2100
  IN HANDLE FileHandle,
 
2101
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
2102
  IN PVOID Buffer,
 
2103
  IN ULONG Length);
 
2104
 
 
2105
NTSYSCALLAPI
 
2106
NTSTATUS
 
2107
NTAPI
 
2108
NtSetVolumeInformationFile(
 
2109
  IN HANDLE FileHandle,
 
2110
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
2111
  IN PVOID FsInformation,
 
2112
  IN ULONG Length,
 
2113
  IN FS_INFORMATION_CLASS FsInformationClass);
 
2114
 
 
2115
NTSYSCALLAPI
 
2116
NTSTATUS
 
2117
NTAPI
 
2118
NtWriteFile(
 
2119
  IN HANDLE FileHandle,
 
2120
  IN HANDLE Event OPTIONAL,
 
2121
  IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
 
2122
  IN PVOID ApcContext OPTIONAL,
 
2123
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
2124
  IN PVOID Buffer,
 
2125
  IN ULONG Length,
 
2126
  IN PLARGE_INTEGER ByteOffset OPTIONAL,
 
2127
  IN PULONG Key OPTIONAL);
 
2128
 
 
2129
NTSYSCALLAPI
 
2130
NTSTATUS
 
2131
NTAPI
 
2132
NtUnlockFile(
 
2133
  IN HANDLE FileHandle,
 
2134
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
2135
  IN PLARGE_INTEGER ByteOffset,
 
2136
  IN PLARGE_INTEGER Length,
 
2137
  IN ULONG Key);
 
2138
 
 
2139
NTSYSCALLAPI
 
2140
NTSTATUS
 
2141
NTAPI
 
2142
NtSetSecurityObject(
 
2143
  IN HANDLE Handle,
 
2144
  IN SECURITY_INFORMATION SecurityInformation,
 
2145
  IN PSECURITY_DESCRIPTOR SecurityDescriptor);
 
2146
 
 
2147
NTSYSCALLAPI
 
2148
NTSTATUS
 
2149
NTAPI
 
2150
NtQuerySecurityObject(
 
2151
  IN HANDLE Handle,
 
2152
  IN SECURITY_INFORMATION SecurityInformation,
 
2153
  OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
 
2154
  IN ULONG Length,
 
2155
  OUT PULONG LengthNeeded);
 
2156
 
 
2157
NTSYSCALLAPI
 
2158
NTSTATUS
 
2159
NTAPI
 
2160
NtClose(
 
2161
  IN HANDLE Handle);
 
2162
 
 
2163
NTSYSCALLAPI
 
2164
NTSTATUS
 
2165
NTAPI
 
2166
NtAllocateVirtualMemory(
 
2167
  IN HANDLE ProcessHandle,
 
2168
  IN OUT PVOID *BaseAddress,
 
2169
  IN ULONG_PTR ZeroBits,
 
2170
  IN OUT PSIZE_T RegionSize,
 
2171
  IN ULONG AllocationType,
 
2172
  IN ULONG Protect);
 
2173
 
 
2174
NTSYSCALLAPI
 
2175
NTSTATUS
 
2176
NTAPI
 
2177
NtFreeVirtualMemory(
 
2178
  IN HANDLE ProcessHandle,
 
2179
  IN OUT PVOID *BaseAddress,
 
2180
  IN OUT PSIZE_T RegionSize,
 
2181
  IN ULONG FreeType);
 
2182
 
 
2183
#endif
 
2184
 
 
2185
#if (NTDDI_VERSION >= NTDDI_WINXP)
 
2186
 
 
2187
NTSYSCALLAPI
 
2188
NTSTATUS
 
2189
NTAPI
 
2190
NtOpenThreadTokenEx(
 
2191
  IN HANDLE ThreadHandle,
 
2192
  IN ACCESS_MASK DesiredAccess,
 
2193
  IN BOOLEAN OpenAsSelf,
 
2194
  IN ULONG HandleAttributes,
 
2195
  OUT PHANDLE TokenHandle);
 
2196
 
 
2197
NTSYSCALLAPI
 
2198
NTSTATUS
 
2199
NTAPI
 
2200
NtOpenProcessTokenEx(
 
2201
  IN HANDLE ProcessHandle,
 
2202
  IN ACCESS_MASK DesiredAccess,
 
2203
  IN ULONG HandleAttributes,
 
2204
  OUT PHANDLE TokenHandle);
 
2205
 
 
2206
NTSYSAPI
 
2207
NTSTATUS
 
2208
NTAPI
 
2209
NtOpenJobObjectToken(
 
2210
  IN HANDLE JobHandle,
 
2211
  IN ACCESS_MASK DesiredAccess,
 
2212
  OUT PHANDLE TokenHandle);
 
2213
 
 
2214
NTSYSCALLAPI
 
2215
NTSTATUS
 
2216
NTAPI
 
2217
NtDuplicateToken(
 
2218
  IN HANDLE ExistingTokenHandle,
 
2219
  IN ACCESS_MASK DesiredAccess,
 
2220
  IN POBJECT_ATTRIBUTES ObjectAttributes,
 
2221
  IN BOOLEAN EffectiveOnly,
 
2222
  IN TOKEN_TYPE TokenType,
 
2223
  OUT PHANDLE NewTokenHandle);
 
2224
 
 
2225
NTSYSCALLAPI
 
2226
NTSTATUS
 
2227
NTAPI
 
2228
NtFilterToken(
 
2229
  IN HANDLE ExistingTokenHandle,
 
2230
  IN ULONG Flags,
 
2231
  IN PTOKEN_GROUPS SidsToDisable OPTIONAL,
 
2232
  IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL,
 
2233
  IN PTOKEN_GROUPS RestrictedSids OPTIONAL,
 
2234
  OUT PHANDLE NewTokenHandle);
 
2235
 
 
2236
NTSYSCALLAPI
 
2237
NTSTATUS
 
2238
NTAPI
 
2239
NtImpersonateAnonymousToken(
 
2240
  IN HANDLE ThreadHandle);
 
2241
 
 
2242
NTSYSCALLAPI
 
2243
NTSTATUS
 
2244
NTAPI
 
2245
NtSetInformationToken(
 
2246
  IN HANDLE TokenHandle,
 
2247
  IN TOKEN_INFORMATION_CLASS TokenInformationClass,
 
2248
  IN PVOID TokenInformation,
 
2249
  IN ULONG TokenInformationLength);
 
2250
 
 
2251
NTSYSCALLAPI
 
2252
NTSTATUS
 
2253
NTAPI
 
2254
NtAdjustGroupsToken(
 
2255
  IN HANDLE TokenHandle,
 
2256
  IN BOOLEAN ResetToDefault,
 
2257
  IN PTOKEN_GROUPS NewState OPTIONAL,
 
2258
  IN ULONG BufferLength OPTIONAL,
 
2259
  OUT PTOKEN_GROUPS PreviousState,
 
2260
  OUT PULONG ReturnLength);
 
2261
 
 
2262
NTSYSCALLAPI
 
2263
NTSTATUS
 
2264
NTAPI
 
2265
NtPrivilegeCheck(
 
2266
  IN HANDLE ClientToken,
 
2267
  IN OUT PPRIVILEGE_SET RequiredPrivileges,
 
2268
  OUT PBOOLEAN Result);
 
2269
 
 
2270
NTSYSCALLAPI
 
2271
NTSTATUS
 
2272
NTAPI
 
2273
NtAccessCheckAndAuditAlarm(
 
2274
  IN PUNICODE_STRING SubsystemName,
 
2275
  IN PVOID HandleId OPTIONAL,
 
2276
  IN PUNICODE_STRING ObjectTypeName,
 
2277
  IN PUNICODE_STRING ObjectName,
 
2278
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
2279
  IN ACCESS_MASK DesiredAccess,
 
2280
  IN PGENERIC_MAPPING GenericMapping,
 
2281
  IN BOOLEAN ObjectCreation,
 
2282
  OUT PACCESS_MASK GrantedAccess,
 
2283
  OUT PNTSTATUS AccessStatus,
 
2284
  OUT PBOOLEAN GenerateOnClose);
 
2285
 
 
2286
NTSYSCALLAPI
 
2287
NTSTATUS
 
2288
NTAPI
 
2289
NtAccessCheckByTypeAndAuditAlarm(
 
2290
  IN PUNICODE_STRING SubsystemName,
 
2291
  IN PVOID HandleId,
 
2292
  IN PUNICODE_STRING ObjectTypeName,
 
2293
  IN PUNICODE_STRING ObjectName,
 
2294
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
2295
  IN PSID PrincipalSelfSid OPTIONAL,
 
2296
  IN ACCESS_MASK DesiredAccess,
 
2297
  IN AUDIT_EVENT_TYPE AuditType,
 
2298
  IN ULONG Flags,
 
2299
  IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL,
 
2300
  IN ULONG ObjectTypeLength,
 
2301
  IN PGENERIC_MAPPING GenericMapping,
 
2302
  IN BOOLEAN ObjectCreation,
 
2303
  OUT PACCESS_MASK GrantedAccess,
 
2304
  OUT PNTSTATUS AccessStatus,
 
2305
  OUT PBOOLEAN GenerateOnClose);
 
2306
 
 
2307
NTSYSCALLAPI
 
2308
NTSTATUS
 
2309
NTAPI
 
2310
NtAccessCheckByTypeResultListAndAuditAlarm(
 
2311
  IN PUNICODE_STRING SubsystemName,
 
2312
  IN PVOID HandleId OPTIONAL,
 
2313
  IN PUNICODE_STRING ObjectTypeName,
 
2314
  IN PUNICODE_STRING ObjectName,
 
2315
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
2316
  IN PSID PrincipalSelfSid OPTIONAL,
 
2317
  IN ACCESS_MASK DesiredAccess,
 
2318
  IN AUDIT_EVENT_TYPE AuditType,
 
2319
  IN ULONG Flags,
 
2320
  IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL,
 
2321
  IN ULONG ObjectTypeLength,
 
2322
  IN PGENERIC_MAPPING GenericMapping,
 
2323
  IN BOOLEAN ObjectCreation,
 
2324
  OUT PACCESS_MASK GrantedAccess,
 
2325
  OUT PNTSTATUS AccessStatus,
 
2326
  OUT PBOOLEAN GenerateOnClose);
 
2327
 
 
2328
NTSTATUS
 
2329
NTAPI
 
2330
NtAccessCheckByTypeResultListAndAuditAlarmByHandle(
 
2331
  IN PUNICODE_STRING SubsystemName,
 
2332
  IN PVOID HandleId OPTIONAL,
 
2333
  IN HANDLE ClientToken,
 
2334
  IN PUNICODE_STRING ObjectTypeName,
 
2335
  IN PUNICODE_STRING ObjectName,
 
2336
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
2337
  IN PSID PrincipalSelfSid OPTIONAL,
 
2338
  IN ACCESS_MASK DesiredAccess,
 
2339
  IN AUDIT_EVENT_TYPE AuditType,
 
2340
  IN ULONG Flags,
 
2341
  IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL,
 
2342
  IN ULONG ObjectTypeLength,
 
2343
  IN PGENERIC_MAPPING GenericMapping,
 
2344
  IN BOOLEAN ObjectCreation,
 
2345
  OUT PACCESS_MASK GrantedAccess,
 
2346
  OUT PNTSTATUS AccessStatus,
 
2347
  OUT PBOOLEAN GenerateOnClose);
 
2348
 
 
2349
NTSYSCALLAPI
 
2350
NTSTATUS
 
2351
NTAPI
 
2352
NtOpenObjectAuditAlarm(
 
2353
  IN PUNICODE_STRING SubsystemName,
 
2354
  IN PVOID HandleId OPTIONAL,
 
2355
  IN PUNICODE_STRING ObjectTypeName,
 
2356
  IN PUNICODE_STRING ObjectName,
 
2357
  IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
 
2358
  IN HANDLE ClientToken,
 
2359
  IN ACCESS_MASK DesiredAccess,
 
2360
  IN ACCESS_MASK GrantedAccess,
 
2361
  IN PPRIVILEGE_SET Privileges OPTIONAL,
 
2362
  IN BOOLEAN ObjectCreation,
 
2363
  IN BOOLEAN AccessGranted,
 
2364
  OUT PBOOLEAN GenerateOnClose);
 
2365
 
 
2366
NTSYSCALLAPI
 
2367
NTSTATUS
 
2368
NTAPI
 
2369
NtPrivilegeObjectAuditAlarm(
 
2370
  IN PUNICODE_STRING SubsystemName,
 
2371
  IN PVOID HandleId OPTIONAL,
 
2372
  IN HANDLE ClientToken,
 
2373
  IN ACCESS_MASK DesiredAccess,
 
2374
  IN PPRIVILEGE_SET Privileges,
 
2375
  IN BOOLEAN AccessGranted);
 
2376
 
 
2377
NTSYSCALLAPI
 
2378
NTSTATUS
 
2379
NTAPI
 
2380
NtCloseObjectAuditAlarm(
 
2381
  IN PUNICODE_STRING SubsystemName,
 
2382
  IN PVOID HandleId OPTIONAL,
 
2383
  IN BOOLEAN GenerateOnClose);
 
2384
 
 
2385
NTSYSCALLAPI
 
2386
NTSTATUS
 
2387
NTAPI
 
2388
NtDeleteObjectAuditAlarm(
 
2389
  IN PUNICODE_STRING SubsystemName,
 
2390
  IN PVOID HandleId OPTIONAL,
 
2391
  IN BOOLEAN GenerateOnClose);
 
2392
 
 
2393
NTSYSCALLAPI
 
2394
NTSTATUS
 
2395
NTAPI
 
2396
NtPrivilegedServiceAuditAlarm(
 
2397
  IN PUNICODE_STRING SubsystemName,
 
2398
  IN PUNICODE_STRING ServiceName,
 
2399
  IN HANDLE ClientToken,
 
2400
  IN PPRIVILEGE_SET Privileges,
 
2401
  IN BOOLEAN AccessGranted);
 
2402
 
 
2403
NTSYSCALLAPI
 
2404
NTSTATUS
 
2405
NTAPI
 
2406
NtSetInformationThread(
 
2407
  IN HANDLE ThreadHandle,
 
2408
  IN THREADINFOCLASS ThreadInformationClass,
 
2409
  IN PVOID ThreadInformation,
 
2410
  IN ULONG ThreadInformationLength);
 
2411
 
 
2412
NTSYSCALLAPI
 
2413
NTSTATUS
 
2414
NTAPI
 
2415
NtCreateSection(
 
2416
  OUT PHANDLE SectionHandle,
 
2417
  IN ACCESS_MASK DesiredAccess,
 
2418
  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
 
2419
  IN PLARGE_INTEGER MaximumSize OPTIONAL,
 
2420
  IN ULONG SectionPageProtection,
 
2421
  IN ULONG AllocationAttributes,
 
2422
  IN HANDLE FileHandle OPTIONAL);
 
2423
 
 
2424
#endif
138
2425
 
139
2426
#define COMPRESSION_FORMAT_NONE         (0x0000)
140
2427
#define COMPRESSION_FORMAT_DEFAULT      (0x0001)
143
2430
#define COMPRESSION_ENGINE_MAXIMUM      (0x0100)
144
2431
#define COMPRESSION_ENGINE_HIBER        (0x0200)
145
2432
 
 
2433
#define MAX_UNICODE_STACK_BUFFER_LENGTH 256
 
2434
 
 
2435
#define METHOD_FROM_CTL_CODE(ctrlCode)  ((ULONG)(ctrlCode & 3))
 
2436
 
 
2437
#define METHOD_DIRECT_TO_HARDWARE       METHOD_IN_DIRECT
 
2438
#define METHOD_DIRECT_FROM_HARDWARE     METHOD_OUT_DIRECT
 
2439
 
 
2440
typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE;
 
2441
 
 
2442
typedef enum _SECURITY_LOGON_TYPE {
 
2443
  UndefinedLogonType = 0,
 
2444
  Interactive = 2,
 
2445
  Network,
 
2446
  Batch,
 
2447
  Service,
 
2448
  Proxy,
 
2449
  Unlock,
 
2450
  NetworkCleartext,
 
2451
  NewCredentials,
 
2452
#if (_WIN32_WINNT >= 0x0501)
 
2453
  RemoteInteractive,
 
2454
  CachedInteractive,
 
2455
#endif
 
2456
#if (_WIN32_WINNT >= 0x0502)
 
2457
  CachedRemoteInteractive,
 
2458
  CachedUnlock
 
2459
#endif
 
2460
} SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE;
 
2461
 
 
2462
#ifndef _NTLSA_AUDIT_
 
2463
#define _NTLSA_AUDIT_
 
2464
 
 
2465
#ifndef GUID_DEFINED
 
2466
#include <guiddef.h>
 
2467
#endif
 
2468
 
 
2469
#endif /* _NTLSA_AUDIT_ */
 
2470
 
 
2471
NTSTATUS
 
2472
NTAPI
 
2473
LsaRegisterLogonProcess(
 
2474
  IN PLSA_STRING LogonProcessName,
 
2475
  OUT PHANDLE LsaHandle,
 
2476
  OUT PLSA_OPERATIONAL_MODE SecurityMode);
 
2477
 
 
2478
NTSTATUS
 
2479
NTAPI
 
2480
LsaLogonUser(
 
2481
  IN HANDLE LsaHandle,
 
2482
  IN PLSA_STRING OriginName,
 
2483
  IN SECURITY_LOGON_TYPE LogonType,
 
2484
  IN ULONG AuthenticationPackage,
 
2485
  IN PVOID AuthenticationInformation,
 
2486
  IN ULONG AuthenticationInformationLength,
 
2487
  IN PTOKEN_GROUPS LocalGroups OPTIONAL,
 
2488
  IN PTOKEN_SOURCE SourceContext,
 
2489
  OUT PVOID *ProfileBuffer,
 
2490
  OUT PULONG ProfileBufferLength,
 
2491
  OUT PLUID LogonId,
 
2492
  OUT PHANDLE Token,
 
2493
  OUT PQUOTA_LIMITS Quotas,
 
2494
  OUT PNTSTATUS SubStatus);
 
2495
 
 
2496
NTSTATUS
 
2497
NTAPI
 
2498
LsaFreeReturnBuffer(
 
2499
  IN PVOID Buffer);
 
2500
 
 
2501
#ifndef _NTLSA_IFS_
 
2502
#define _NTLSA_IFS_
 
2503
#endif
 
2504
 
 
2505
#define MSV1_0_PACKAGE_NAME     "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
 
2506
#define MSV1_0_PACKAGE_NAMEW    L"MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
 
2507
#define MSV1_0_PACKAGE_NAMEW_LENGTH sizeof(MSV1_0_PACKAGE_NAMEW) - sizeof(WCHAR)
 
2508
 
 
2509
#define MSV1_0_SUBAUTHENTICATION_KEY "SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1_0"
 
2510
#define MSV1_0_SUBAUTHENTICATION_VALUE "Auth"
 
2511
 
 
2512
#define MSV1_0_CHALLENGE_LENGTH                8
 
2513
#define MSV1_0_USER_SESSION_KEY_LENGTH         16
 
2514
#define MSV1_0_LANMAN_SESSION_KEY_LENGTH       8
 
2515
 
 
2516
#define MSV1_0_CLEARTEXT_PASSWORD_ALLOWED      0x02
 
2517
#define MSV1_0_UPDATE_LOGON_STATISTICS         0x04
 
2518
#define MSV1_0_RETURN_USER_PARAMETERS          0x08
 
2519
#define MSV1_0_DONT_TRY_GUEST_ACCOUNT          0x10
 
2520
#define MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT      0x20
 
2521
#define MSV1_0_RETURN_PASSWORD_EXPIRY          0x40
 
2522
#define MSV1_0_USE_CLIENT_CHALLENGE            0x80
 
2523
#define MSV1_0_TRY_GUEST_ACCOUNT_ONLY          0x100
 
2524
#define MSV1_0_RETURN_PROFILE_PATH             0x200
 
2525
#define MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY       0x400
 
2526
#define MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT 0x800
 
2527
 
 
2528
#define MSV1_0_DISABLE_PERSONAL_FALLBACK     0x00001000
 
2529
#define MSV1_0_ALLOW_FORCE_GUEST             0x00002000
 
2530
 
 
2531
#if (_WIN32_WINNT >= 0x0502)
 
2532
#define MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED   0x00004000
 
2533
#define MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY   0x00008000
 
2534
#endif
 
2535
 
 
2536
#define MSV1_0_SUBAUTHENTICATION_DLL_EX      0x00100000
 
2537
#define MSV1_0_ALLOW_MSVCHAPV2               0x00010000
 
2538
 
 
2539
#if (_WIN32_WINNT >= 0x0600)
 
2540
#define MSV1_0_S4U2SELF                      0x00020000
 
2541
#define MSV1_0_CHECK_LOGONHOURS_FOR_S4U      0x00040000
 
2542
#endif
 
2543
 
 
2544
#define MSV1_0_SUBAUTHENTICATION_DLL         0xFF000000
 
2545
#define MSV1_0_SUBAUTHENTICATION_DLL_SHIFT   24
 
2546
#define MSV1_0_MNS_LOGON                     0x01000000
 
2547
 
 
2548
#define MSV1_0_SUBAUTHENTICATION_DLL_RAS     2
 
2549
#define MSV1_0_SUBAUTHENTICATION_DLL_IIS     132
 
2550
 
 
2551
#define LOGON_GUEST                 0x01
 
2552
#define LOGON_NOENCRYPTION          0x02
 
2553
#define LOGON_CACHED_ACCOUNT        0x04
 
2554
#define LOGON_USED_LM_PASSWORD      0x08
 
2555
#define LOGON_EXTRA_SIDS            0x20
 
2556
#define LOGON_SUBAUTH_SESSION_KEY   0x40
 
2557
#define LOGON_SERVER_TRUST_ACCOUNT  0x80
 
2558
#define LOGON_NTLMV2_ENABLED        0x100
 
2559
#define LOGON_RESOURCE_GROUPS       0x200
 
2560
#define LOGON_PROFILE_PATH_RETURNED 0x400
 
2561
#define LOGON_NT_V2                 0x800
 
2562
#define LOGON_LM_V2                 0x1000
 
2563
#define LOGON_NTLM_V2               0x2000
 
2564
 
 
2565
#if (_WIN32_WINNT >= 0x0600)
 
2566
 
 
2567
#define LOGON_OPTIMIZED             0x4000
 
2568
#define LOGON_WINLOGON              0x8000
 
2569
#define LOGON_PKINIT               0x10000
 
2570
#define LOGON_NO_OPTIMIZED         0x20000
 
2571
 
 
2572
#endif
 
2573
 
 
2574
#define MSV1_0_SUBAUTHENTICATION_FLAGS 0xFF000000
 
2575
 
 
2576
#define LOGON_GRACE_LOGON              0x01000000
 
2577
 
 
2578
#define MSV1_0_OWF_PASSWORD_LENGTH 16
 
2579
#define MSV1_0_CRED_LM_PRESENT 0x1
 
2580
#define MSV1_0_CRED_NT_PRESENT 0x2
 
2581
#define MSV1_0_CRED_VERSION 0
 
2582
 
 
2583
#define MSV1_0_NTLM3_RESPONSE_LENGTH 16
 
2584
#define MSV1_0_NTLM3_OWF_LENGTH 16
 
2585
 
 
2586
#if (_WIN32_WINNT == 0x0500)
 
2587
#define MSV1_0_MAX_NTLM3_LIFE 1800
 
2588
#else
 
2589
#define MSV1_0_MAX_NTLM3_LIFE 129600
 
2590
#endif
 
2591
#define MSV1_0_MAX_AVL_SIZE 64000
 
2592
 
 
2593
#if (_WIN32_WINNT >= 0x0501)
 
2594
 
 
2595
#define MSV1_0_AV_FLAG_FORCE_GUEST                  0x00000001
 
2596
 
 
2597
#if (_WIN32_WINNT >= 0x0600)
 
2598
#define MSV1_0_AV_FLAG_MIC_HANDSHAKE_MESSAGES       0x00000002
 
2599
#endif
 
2600
 
 
2601
#endif
 
2602
 
 
2603
#define MSV1_0_NTLM3_INPUT_LENGTH (sizeof(MSV1_0_NTLM3_RESPONSE) - MSV1_0_NTLM3_RESPONSE_LENGTH)
 
2604
 
 
2605
#if(_WIN32_WINNT >= 0x0502)
 
2606
#define MSV1_0_NTLM3_MIN_NT_RESPONSE_LENGTH RTL_SIZEOF_THROUGH_FIELD(MSV1_0_NTLM3_RESPONSE, AvPairsOff)
 
2607
#endif
 
2608
 
 
2609
#define USE_PRIMARY_PASSWORD            0x01
 
2610
#define RETURN_PRIMARY_USERNAME         0x02
 
2611
#define RETURN_PRIMARY_LOGON_DOMAINNAME 0x04
 
2612
#define RETURN_NON_NT_USER_SESSION_KEY  0x08
 
2613
#define GENERATE_CLIENT_CHALLENGE       0x10
 
2614
#define GCR_NTLM3_PARMS                 0x20
 
2615
#define GCR_TARGET_INFO                 0x40
 
2616
#define RETURN_RESERVED_PARAMETER       0x80
 
2617
#define GCR_ALLOW_NTLM                 0x100
 
2618
#define GCR_USE_OEM_SET                0x200
 
2619
#define GCR_MACHINE_CREDENTIAL         0x400
 
2620
#define GCR_USE_OWF_PASSWORD           0x800
 
2621
#define GCR_ALLOW_LM                  0x1000
 
2622
#define GCR_ALLOW_NO_TARGET           0x2000
 
2623
 
 
2624
typedef enum _MSV1_0_LOGON_SUBMIT_TYPE {
 
2625
  MsV1_0InteractiveLogon = 2,
 
2626
  MsV1_0Lm20Logon,
 
2627
  MsV1_0NetworkLogon,
 
2628
  MsV1_0SubAuthLogon,
 
2629
  MsV1_0WorkstationUnlockLogon = 7,
 
2630
  MsV1_0S4ULogon = 12,
 
2631
  MsV1_0VirtualLogon = 82
 
2632
} MSV1_0_LOGON_SUBMIT_TYPE, *PMSV1_0_LOGON_SUBMIT_TYPE;
 
2633
 
 
2634
typedef enum _MSV1_0_PROFILE_BUFFER_TYPE {
 
2635
  MsV1_0InteractiveProfile = 2,
 
2636
  MsV1_0Lm20LogonProfile,
 
2637
  MsV1_0SmartCardProfile
 
2638
} MSV1_0_PROFILE_BUFFER_TYPE, *PMSV1_0_PROFILE_BUFFER_TYPE;
 
2639
 
 
2640
typedef struct _MSV1_0_INTERACTIVE_LOGON {
 
2641
  MSV1_0_LOGON_SUBMIT_TYPE MessageType;
 
2642
  UNICODE_STRING LogonDomainName;
 
2643
  UNICODE_STRING UserName;
 
2644
  UNICODE_STRING Password;
 
2645
} MSV1_0_INTERACTIVE_LOGON, *PMSV1_0_INTERACTIVE_LOGON;
 
2646
 
 
2647
typedef struct _MSV1_0_INTERACTIVE_PROFILE {
 
2648
  MSV1_0_PROFILE_BUFFER_TYPE MessageType;
 
2649
  USHORT LogonCount;
 
2650
  USHORT BadPasswordCount;
 
2651
  LARGE_INTEGER LogonTime;
 
2652
  LARGE_INTEGER LogoffTime;
 
2653
  LARGE_INTEGER KickOffTime;
 
2654
  LARGE_INTEGER PasswordLastSet;
 
2655
  LARGE_INTEGER PasswordCanChange;
 
2656
  LARGE_INTEGER PasswordMustChange;
 
2657
  UNICODE_STRING LogonScript;
 
2658
  UNICODE_STRING HomeDirectory;
 
2659
  UNICODE_STRING FullName;
 
2660
  UNICODE_STRING ProfilePath;
 
2661
  UNICODE_STRING HomeDirectoryDrive;
 
2662
  UNICODE_STRING LogonServer;
 
2663
  ULONG UserFlags;
 
2664
} MSV1_0_INTERACTIVE_PROFILE, *PMSV1_0_INTERACTIVE_PROFILE;
 
2665
 
 
2666
typedef struct _MSV1_0_LM20_LOGON {
 
2667
  MSV1_0_LOGON_SUBMIT_TYPE MessageType;
 
2668
  UNICODE_STRING LogonDomainName;
 
2669
  UNICODE_STRING UserName;
 
2670
  UNICODE_STRING Workstation;
 
2671
  UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
 
2672
  STRING CaseSensitiveChallengeResponse;
 
2673
  STRING CaseInsensitiveChallengeResponse;
 
2674
  ULONG ParameterControl;
 
2675
} MSV1_0_LM20_LOGON, * PMSV1_0_LM20_LOGON;
 
2676
 
 
2677
typedef struct _MSV1_0_SUBAUTH_LOGON {
 
2678
  MSV1_0_LOGON_SUBMIT_TYPE MessageType;
 
2679
  UNICODE_STRING LogonDomainName;
 
2680
  UNICODE_STRING UserName;
 
2681
  UNICODE_STRING Workstation;
 
2682
  UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
 
2683
  STRING AuthenticationInfo1;
 
2684
  STRING AuthenticationInfo2;
 
2685
  ULONG ParameterControl;
 
2686
  ULONG SubAuthPackageId;
 
2687
} MSV1_0_SUBAUTH_LOGON, * PMSV1_0_SUBAUTH_LOGON;
 
2688
 
 
2689
#if (_WIN32_WINNT >= 0x0600)
 
2690
 
 
2691
#define MSV1_0_S4U_LOGON_FLAG_CHECK_LOGONHOURS 0x2
 
2692
 
 
2693
typedef struct _MSV1_0_S4U_LOGON {
 
2694
  MSV1_0_LOGON_SUBMIT_TYPE MessageType;
 
2695
  ULONG Flags;
 
2696
  UNICODE_STRING UserPrincipalName;
 
2697
  UNICODE_STRING DomainName;
 
2698
} MSV1_0_S4U_LOGON, *PMSV1_0_S4U_LOGON;
 
2699
 
 
2700
#endif
 
2701
 
 
2702
typedef struct _MSV1_0_LM20_LOGON_PROFILE {
 
2703
  MSV1_0_PROFILE_BUFFER_TYPE MessageType;
 
2704
  LARGE_INTEGER KickOffTime;
 
2705
  LARGE_INTEGER LogoffTime;
 
2706
  ULONG UserFlags;
 
2707
  UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH];
 
2708
  UNICODE_STRING LogonDomainName;
 
2709
  UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH];
 
2710
  UNICODE_STRING LogonServer;
 
2711
  UNICODE_STRING UserParameters;
 
2712
} MSV1_0_LM20_LOGON_PROFILE, * PMSV1_0_LM20_LOGON_PROFILE;
 
2713
 
 
2714
typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL {
 
2715
  ULONG Version;
 
2716
  ULONG Flags;
 
2717
  UCHAR LmPassword[MSV1_0_OWF_PASSWORD_LENGTH];
 
2718
  UCHAR NtPassword[MSV1_0_OWF_PASSWORD_LENGTH];
 
2719
} MSV1_0_SUPPLEMENTAL_CREDENTIAL, *PMSV1_0_SUPPLEMENTAL_CREDENTIAL;
 
2720
 
 
2721
typedef struct _MSV1_0_NTLM3_RESPONSE {
 
2722
  UCHAR Response[MSV1_0_NTLM3_RESPONSE_LENGTH];
 
2723
  UCHAR RespType;
 
2724
  UCHAR HiRespType;
 
2725
  USHORT Flags;
 
2726
  ULONG MsgWord;
 
2727
  ULONGLONG TimeStamp;
 
2728
  UCHAR ChallengeFromClient[MSV1_0_CHALLENGE_LENGTH];
 
2729
  ULONG AvPairsOff;
 
2730
  UCHAR Buffer[1];
 
2731
} MSV1_0_NTLM3_RESPONSE, *PMSV1_0_NTLM3_RESPONSE;
 
2732
 
 
2733
typedef enum _MSV1_0_AVID {
 
2734
  MsvAvEOL,
 
2735
  MsvAvNbComputerName,
 
2736
  MsvAvNbDomainName,
 
2737
  MsvAvDnsComputerName,
 
2738
  MsvAvDnsDomainName,
 
2739
#if (_WIN32_WINNT >= 0x0501)
 
2740
  MsvAvDnsTreeName,
 
2741
  MsvAvFlags,
 
2742
#if (_WIN32_WINNT >= 0x0600)
 
2743
  MsvAvTimestamp,
 
2744
  MsvAvRestrictions,
 
2745
  MsvAvTargetName,
 
2746
  MsvAvChannelBindings,
 
2747
#endif
 
2748
#endif
 
2749
} MSV1_0_AVID;
 
2750
 
 
2751
typedef struct _MSV1_0_AV_PAIR {
 
2752
  USHORT AvId;
 
2753
  USHORT AvLen;
 
2754
} MSV1_0_AV_PAIR, *PMSV1_0_AV_PAIR;
 
2755
 
 
2756
typedef enum _MSV1_0_PROTOCOL_MESSAGE_TYPE {
 
2757
  MsV1_0Lm20ChallengeRequest = 0,
 
2758
  MsV1_0Lm20GetChallengeResponse,
 
2759
  MsV1_0EnumerateUsers,
 
2760
  MsV1_0GetUserInfo,
 
2761
  MsV1_0ReLogonUsers,
 
2762
  MsV1_0ChangePassword,
 
2763
  MsV1_0ChangeCachedPassword,
 
2764
  MsV1_0GenericPassthrough,
 
2765
  MsV1_0CacheLogon,
 
2766
  MsV1_0SubAuth,
 
2767
  MsV1_0DeriveCredential,
 
2768
  MsV1_0CacheLookup,
 
2769
#if (_WIN32_WINNT >= 0x0501)
 
2770
  MsV1_0SetProcessOption,
 
2771
#endif
 
2772
#if (_WIN32_WINNT >= 0x0600)
 
2773
  MsV1_0ConfigLocalAliases,
 
2774
  MsV1_0ClearCachedCredentials,
 
2775
#endif
 
2776
} MSV1_0_PROTOCOL_MESSAGE_TYPE, *PMSV1_0_PROTOCOL_MESSAGE_TYPE;
 
2777
 
 
2778
typedef struct _MSV1_0_LM20_CHALLENGE_REQUEST {
 
2779
  MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
 
2780
} MSV1_0_LM20_CHALLENGE_REQUEST, *PMSV1_0_LM20_CHALLENGE_REQUEST;
 
2781
 
 
2782
typedef struct _MSV1_0_LM20_CHALLENGE_RESPONSE {
 
2783
  MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
 
2784
  UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
 
2785
} MSV1_0_LM20_CHALLENGE_RESPONSE, *PMSV1_0_LM20_CHALLENGE_RESPONSE;
 
2786
 
 
2787
typedef struct _MSV1_0_GETCHALLENRESP_REQUEST_V1 {
 
2788
  MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
 
2789
  ULONG ParameterControl;
 
2790
  LUID LogonId;
 
2791
  UNICODE_STRING Password;
 
2792
  UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
 
2793
} MSV1_0_GETCHALLENRESP_REQUEST_V1, *PMSV1_0_GETCHALLENRESP_REQUEST_V1;
 
2794
 
 
2795
typedef struct _MSV1_0_GETCHALLENRESP_REQUEST {
 
2796
  MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
 
2797
  ULONG ParameterControl;
 
2798
  LUID LogonId;
 
2799
  UNICODE_STRING Password;
 
2800
  UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
 
2801
  UNICODE_STRING UserName;
 
2802
  UNICODE_STRING LogonDomainName;
 
2803
  UNICODE_STRING ServerName;
 
2804
} MSV1_0_GETCHALLENRESP_REQUEST, *PMSV1_0_GETCHALLENRESP_REQUEST;
 
2805
 
 
2806
typedef struct _MSV1_0_GETCHALLENRESP_RESPONSE {
 
2807
  MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
 
2808
  STRING CaseSensitiveChallengeResponse;
 
2809
  STRING CaseInsensitiveChallengeResponse;
 
2810
  UNICODE_STRING UserName;
 
2811
  UNICODE_STRING LogonDomainName;
 
2812
  UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH];
 
2813
  UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH];
 
2814
} MSV1_0_GETCHALLENRESP_RESPONSE, *PMSV1_0_GETCHALLENRESP_RESPONSE;
 
2815
 
 
2816
typedef struct _MSV1_0_ENUMUSERS_REQUEST {
 
2817
  MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
 
2818
} MSV1_0_ENUMUSERS_REQUEST, *PMSV1_0_ENUMUSERS_REQUEST;
 
2819
 
 
2820
typedef struct _MSV1_0_ENUMUSERS_RESPONSE {
 
2821
  MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
 
2822
  ULONG NumberOfLoggedOnUsers;
 
2823
  PLUID LogonIds;
 
2824
  PULONG EnumHandles;
 
2825
} MSV1_0_ENUMUSERS_RESPONSE, *PMSV1_0_ENUMUSERS_RESPONSE;
 
2826
 
 
2827
typedef struct _MSV1_0_GETUSERINFO_REQUEST {
 
2828
  MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
 
2829
  LUID LogonId;
 
2830
} MSV1_0_GETUSERINFO_REQUEST, *PMSV1_0_GETUSERINFO_REQUEST;
 
2831
 
 
2832
typedef struct _MSV1_0_GETUSERINFO_RESPONSE {
 
2833
  MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
 
2834
  PSID UserSid;
 
2835
  UNICODE_STRING UserName;
 
2836
  UNICODE_STRING LogonDomainName;
 
2837
  UNICODE_STRING LogonServer;
 
2838
  SECURITY_LOGON_TYPE LogonType;
 
2839
} MSV1_0_GETUSERINFO_RESPONSE, *PMSV1_0_GETUSERINFO_RESPONSE;
 
2840
 
 
2841
 
 
2842
 
 
2843
#define FILE_OPLOCK_BROKEN_TO_LEVEL_2   0x00000007
 
2844
#define FILE_OPLOCK_BROKEN_TO_NONE      0x00000008
 
2845
#define FILE_OPBATCH_BREAK_UNDERWAY     0x00000009
 
2846
 
 
2847
/* also in winnt.h */
 
2848
#define FILE_NOTIFY_CHANGE_FILE_NAME    0x00000001
 
2849
#define FILE_NOTIFY_CHANGE_DIR_NAME     0x00000002
 
2850
#define FILE_NOTIFY_CHANGE_NAME         0x00000003
 
2851
#define FILE_NOTIFY_CHANGE_ATTRIBUTES   0x00000004
 
2852
#define FILE_NOTIFY_CHANGE_SIZE         0x00000008
 
2853
#define FILE_NOTIFY_CHANGE_LAST_WRITE   0x00000010
 
2854
#define FILE_NOTIFY_CHANGE_LAST_ACCESS  0x00000020
 
2855
#define FILE_NOTIFY_CHANGE_CREATION     0x00000040
 
2856
#define FILE_NOTIFY_CHANGE_EA           0x00000080
 
2857
#define FILE_NOTIFY_CHANGE_SECURITY     0x00000100
 
2858
#define FILE_NOTIFY_CHANGE_STREAM_NAME  0x00000200
 
2859
#define FILE_NOTIFY_CHANGE_STREAM_SIZE  0x00000400
 
2860
#define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
 
2861
#define FILE_NOTIFY_VALID_MASK          0x00000fff
 
2862
 
146
2863
#define FILE_ACTION_ADDED                   0x00000001
147
2864
#define FILE_ACTION_REMOVED                 0x00000002
148
2865
#define FILE_ACTION_MODIFIED                0x00000003
156
2873
#define FILE_ACTION_TUNNELLED_ID_COLLISION  0x0000000B
157
2874
/* end  winnt.h */
158
2875
 
 
2876
#define FILE_PIPE_BYTE_STREAM_TYPE          0x00000000
 
2877
#define FILE_PIPE_MESSAGE_TYPE              0x00000001
 
2878
 
 
2879
#define FILE_PIPE_ACCEPT_REMOTE_CLIENTS     0x00000000
 
2880
#define FILE_PIPE_REJECT_REMOTE_CLIENTS     0x00000002
 
2881
 
 
2882
#define FILE_PIPE_ACCEPT_REMOTE_CLIENTS     0x00000000
 
2883
#define FILE_PIPE_REJECT_REMOTE_CLIENTS     0x00000002
 
2884
#define FILE_PIPE_TYPE_VALID_MASK           0x00000003
 
2885
 
 
2886
#define FILE_PIPE_BYTE_STREAM_MODE          0x00000000
 
2887
#define FILE_PIPE_MESSAGE_MODE              0x00000001
 
2888
 
 
2889
#define FILE_PIPE_QUEUE_OPERATION           0x00000000
 
2890
#define FILE_PIPE_COMPLETE_OPERATION        0x00000001
 
2891
 
 
2892
#define FILE_PIPE_INBOUND                   0x00000000
 
2893
#define FILE_PIPE_OUTBOUND                  0x00000001
 
2894
#define FILE_PIPE_FULL_DUPLEX               0x00000002
 
2895
 
 
2896
#define FILE_PIPE_DISCONNECTED_STATE        0x00000001
 
2897
#define FILE_PIPE_LISTENING_STATE           0x00000002
 
2898
#define FILE_PIPE_CONNECTED_STATE           0x00000003
 
2899
#define FILE_PIPE_CLOSING_STATE             0x00000004
 
2900
 
 
2901
#define FILE_PIPE_CLIENT_END                0x00000000
 
2902
#define FILE_PIPE_SERVER_END                0x00000001
 
2903
 
 
2904
#define FILE_CASE_SENSITIVE_SEARCH          0x00000001
 
2905
#define FILE_CASE_PRESERVED_NAMES           0x00000002
 
2906
#define FILE_UNICODE_ON_DISK                0x00000004
 
2907
#define FILE_PERSISTENT_ACLS                0x00000008
 
2908
#define FILE_FILE_COMPRESSION               0x00000010
 
2909
#define FILE_VOLUME_QUOTAS                  0x00000020
 
2910
#define FILE_SUPPORTS_SPARSE_FILES          0x00000040
 
2911
#define FILE_SUPPORTS_REPARSE_POINTS        0x00000080
 
2912
#define FILE_SUPPORTS_REMOTE_STORAGE        0x00000100
 
2913
#define FILE_VOLUME_IS_COMPRESSED           0x00008000
 
2914
#define FILE_SUPPORTS_OBJECT_IDS            0x00010000
 
2915
#define FILE_SUPPORTS_ENCRYPTION            0x00020000
 
2916
#define FILE_NAMED_STREAMS                  0x00040000
 
2917
#define FILE_READ_ONLY_VOLUME               0x00080000
 
2918
#define FILE_SEQUENTIAL_WRITE_ONCE          0x00100000
 
2919
#define FILE_SUPPORTS_TRANSACTIONS          0x00200000
 
2920
#define FILE_SUPPORTS_HARD_LINKS            0x00400000
 
2921
#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES   0x00800000
 
2922
#define FILE_SUPPORTS_OPEN_BY_FILE_ID       0x01000000
 
2923
#define FILE_SUPPORTS_USN_JOURNAL           0x02000000
 
2924
 
 
2925
#define FILE_NEED_EA                    0x00000080
 
2926
 
159
2927
#define FILE_EA_TYPE_BINARY             0xfffe
160
2928
#define FILE_EA_TYPE_ASCII              0xfffd
161
2929
#define FILE_EA_TYPE_BITMAP             0xfffb
167
2935
#define FILE_EA_TYPE_ASN1               0xffdd
168
2936
#define FILE_EA_TYPE_FAMILY_IDS         0xff01
169
2937
 
170
 
#define FILE_NEED_EA                    0x00000080
171
 
 
172
 
/* also in winnt.h */
173
 
#define FILE_NOTIFY_CHANGE_FILE_NAME    0x00000001
174
 
#define FILE_NOTIFY_CHANGE_DIR_NAME     0x00000002
175
 
#define FILE_NOTIFY_CHANGE_NAME         0x00000003
176
 
#define FILE_NOTIFY_CHANGE_ATTRIBUTES   0x00000004
177
 
#define FILE_NOTIFY_CHANGE_SIZE         0x00000008
178
 
#define FILE_NOTIFY_CHANGE_LAST_WRITE   0x00000010
179
 
#define FILE_NOTIFY_CHANGE_LAST_ACCESS  0x00000020
180
 
#define FILE_NOTIFY_CHANGE_CREATION     0x00000040
181
 
#define FILE_NOTIFY_CHANGE_EA           0x00000080
182
 
#define FILE_NOTIFY_CHANGE_SECURITY     0x00000100
183
 
#define FILE_NOTIFY_CHANGE_STREAM_NAME  0x00000200
184
 
#define FILE_NOTIFY_CHANGE_STREAM_SIZE  0x00000400
185
 
#define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
186
 
#define FILE_NOTIFY_VALID_MASK          0x00000fff
187
 
/* end winnt.h */
188
 
 
189
 
#define FILE_OPLOCK_BROKEN_TO_LEVEL_2   0x00000007
190
 
#define FILE_OPLOCK_BROKEN_TO_NONE      0x00000008
191
 
 
192
 
#define FILE_OPBATCH_BREAK_UNDERWAY     0x00000009
193
 
 
194
 
#define FILE_CASE_SENSITIVE_SEARCH      0x00000001
195
 
#define FILE_CASE_PRESERVED_NAMES       0x00000002
196
 
#define FILE_UNICODE_ON_DISK            0x00000004
197
 
#define FILE_PERSISTENT_ACLS            0x00000008
198
 
#define FILE_FILE_COMPRESSION           0x00000010
199
 
#define FILE_VOLUME_QUOTAS              0x00000020
200
 
#define FILE_SUPPORTS_SPARSE_FILES      0x00000040
201
 
#define FILE_SUPPORTS_REPARSE_POINTS    0x00000080
202
 
#define FILE_SUPPORTS_REMOTE_STORAGE    0x00000100
203
 
#define FS_LFN_APIS                     0x00004000
204
 
#define FILE_VOLUME_IS_COMPRESSED       0x00008000
205
 
#define FILE_SUPPORTS_OBJECT_IDS        0x00010000
206
 
#define FILE_SUPPORTS_ENCRYPTION        0x00020000
207
 
#define FILE_NAMED_STREAMS              0x00040000
208
 
#define FILE_READ_ONLY_VOLUME           0x00080000
209
 
#define FILE_SEQUENTIAL_WRITE_ONCE      0x00100000
210
 
#define FILE_SUPPORTS_TRANSACTIONS      0x00200000
211
 
    
212
 
#define FILE_PIPE_BYTE_STREAM_TYPE      0x00000000
213
 
#define FILE_PIPE_MESSAGE_TYPE          0x00000001
214
 
 
215
 
#define FILE_PIPE_BYTE_STREAM_MODE      0x00000000
216
 
#define FILE_PIPE_MESSAGE_MODE          0x00000001
217
 
 
218
 
#define FILE_PIPE_QUEUE_OPERATION       0x00000000
219
 
#define FILE_PIPE_COMPLETE_OPERATION    0x00000001
220
 
 
221
 
#define FILE_PIPE_INBOUND               0x00000000
222
 
#define FILE_PIPE_OUTBOUND              0x00000001
223
 
#define FILE_PIPE_FULL_DUPLEX           0x00000002
224
 
 
225
 
#define FILE_PIPE_DISCONNECTED_STATE    0x00000001
226
 
#define FILE_PIPE_LISTENING_STATE       0x00000002
227
 
#define FILE_PIPE_CONNECTED_STATE       0x00000003
228
 
#define FILE_PIPE_CLOSING_STATE         0x00000004
229
 
 
230
 
#define FILE_PIPE_CLIENT_END            0x00000000
231
 
#define FILE_PIPE_SERVER_END            0x00000001
232
 
 
233
 
#define FILE_PIPE_READ_DATA             0x00000000
234
 
#define FILE_PIPE_WRITE_SPACE           0x00000001
235
 
 
236
 
#define FILE_STORAGE_TYPE_SPECIFIED             0x00000041  /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
237
 
#define FILE_STORAGE_TYPE_DEFAULT               (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
238
 
#define FILE_STORAGE_TYPE_DIRECTORY             (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
239
 
#define FILE_STORAGE_TYPE_FILE                  (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
240
 
#define FILE_STORAGE_TYPE_DOCFILE               (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
241
 
#define FILE_STORAGE_TYPE_JUNCTION_POINT        (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
242
 
#define FILE_STORAGE_TYPE_CATALOG               (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
243
 
#define FILE_STORAGE_TYPE_STRUCTURED_STORAGE    (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
244
 
#define FILE_STORAGE_TYPE_EMBEDDING             (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
245
 
#define FILE_STORAGE_TYPE_STREAM                (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
246
 
#define FILE_MINIMUM_STORAGE_TYPE               FILE_STORAGE_TYPE_DEFAULT
247
 
#define FILE_MAXIMUM_STORAGE_TYPE               FILE_STORAGE_TYPE_STREAM
248
 
#define FILE_STORAGE_TYPE_MASK                  0x000f0000
249
 
#define FILE_STORAGE_TYPE_SHIFT                 16
 
2938
typedef struct _FILE_NOTIFY_INFORMATION {
 
2939
  ULONG NextEntryOffset;
 
2940
  ULONG Action;
 
2941
  ULONG FileNameLength;
 
2942
  WCHAR FileName[1];
 
2943
} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;
 
2944
 
 
2945
typedef struct _FILE_DIRECTORY_INFORMATION {
 
2946
  ULONG NextEntryOffset;
 
2947
  ULONG FileIndex;
 
2948
  LARGE_INTEGER CreationTime;
 
2949
  LARGE_INTEGER LastAccessTime;
 
2950
  LARGE_INTEGER LastWriteTime;
 
2951
  LARGE_INTEGER ChangeTime;
 
2952
  LARGE_INTEGER EndOfFile;
 
2953
  LARGE_INTEGER AllocationSize;
 
2954
  ULONG FileAttributes;
 
2955
  ULONG FileNameLength;
 
2956
  WCHAR FileName[1];
 
2957
} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
 
2958
 
 
2959
typedef struct _FILE_FULL_DIR_INFORMATION {
 
2960
  ULONG NextEntryOffset;
 
2961
  ULONG FileIndex;
 
2962
  LARGE_INTEGER CreationTime;
 
2963
  LARGE_INTEGER LastAccessTime;
 
2964
  LARGE_INTEGER LastWriteTime;
 
2965
  LARGE_INTEGER ChangeTime;
 
2966
  LARGE_INTEGER EndOfFile;
 
2967
  LARGE_INTEGER AllocationSize;
 
2968
  ULONG FileAttributes;
 
2969
  ULONG FileNameLength;
 
2970
  ULONG EaSize;
 
2971
  WCHAR FileName[1];
 
2972
} FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
 
2973
 
 
2974
typedef struct _FILE_ID_FULL_DIR_INFORMATION {
 
2975
  ULONG NextEntryOffset;
 
2976
  ULONG FileIndex;
 
2977
  LARGE_INTEGER CreationTime;
 
2978
  LARGE_INTEGER LastAccessTime;
 
2979
  LARGE_INTEGER LastWriteTime;
 
2980
  LARGE_INTEGER ChangeTime;
 
2981
  LARGE_INTEGER EndOfFile;
 
2982
  LARGE_INTEGER AllocationSize;
 
2983
  ULONG FileAttributes;
 
2984
  ULONG FileNameLength;
 
2985
  ULONG EaSize;
 
2986
  LARGE_INTEGER FileId;
 
2987
  WCHAR FileName[1];
 
2988
} FILE_ID_FULL_DIR_INFORMATION, *PFILE_ID_FULL_DIR_INFORMATION;
 
2989
 
 
2990
typedef struct _FILE_BOTH_DIR_INFORMATION {
 
2991
  ULONG NextEntryOffset;
 
2992
  ULONG FileIndex;
 
2993
  LARGE_INTEGER CreationTime;
 
2994
  LARGE_INTEGER LastAccessTime;
 
2995
  LARGE_INTEGER LastWriteTime;
 
2996
  LARGE_INTEGER ChangeTime;
 
2997
  LARGE_INTEGER EndOfFile;
 
2998
  LARGE_INTEGER AllocationSize;
 
2999
  ULONG FileAttributes;
 
3000
  ULONG FileNameLength;
 
3001
  ULONG EaSize;
 
3002
  CCHAR ShortNameLength;
 
3003
  WCHAR ShortName[12];
 
3004
  WCHAR FileName[1];
 
3005
} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
 
3006
 
 
3007
typedef struct _FILE_ID_BOTH_DIR_INFORMATION {
 
3008
  ULONG NextEntryOffset;
 
3009
  ULONG FileIndex;
 
3010
  LARGE_INTEGER CreationTime;
 
3011
  LARGE_INTEGER LastAccessTime;
 
3012
  LARGE_INTEGER LastWriteTime;
 
3013
  LARGE_INTEGER ChangeTime;
 
3014
  LARGE_INTEGER EndOfFile;
 
3015
  LARGE_INTEGER AllocationSize;
 
3016
  ULONG FileAttributes;
 
3017
  ULONG FileNameLength;
 
3018
  ULONG EaSize;
 
3019
  CCHAR ShortNameLength;
 
3020
  WCHAR ShortName[12];
 
3021
  LARGE_INTEGER FileId;
 
3022
  WCHAR FileName[1];
 
3023
} FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION;
 
3024
 
 
3025
typedef struct _FILE_NAMES_INFORMATION {
 
3026
  ULONG NextEntryOffset;
 
3027
  ULONG FileIndex;
 
3028
  ULONG FileNameLength;
 
3029
  WCHAR FileName[1];
 
3030
} FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
 
3031
 
 
3032
typedef struct _FILE_ID_GLOBAL_TX_DIR_INFORMATION {
 
3033
  ULONG NextEntryOffset;
 
3034
  ULONG FileIndex;
 
3035
  LARGE_INTEGER CreationTime;
 
3036
  LARGE_INTEGER LastAccessTime;
 
3037
  LARGE_INTEGER LastWriteTime;
 
3038
  LARGE_INTEGER ChangeTime;
 
3039
  LARGE_INTEGER EndOfFile;
 
3040
  LARGE_INTEGER AllocationSize;
 
3041
  ULONG FileAttributes;
 
3042
  ULONG FileNameLength;
 
3043
  LARGE_INTEGER FileId;
 
3044
  GUID LockingTransactionId;
 
3045
  ULONG TxInfoFlags;
 
3046
  WCHAR FileName[1];
 
3047
} FILE_ID_GLOBAL_TX_DIR_INFORMATION, *PFILE_ID_GLOBAL_TX_DIR_INFORMATION;
 
3048
 
 
3049
#define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_WRITELOCKED         0x00000001
 
3050
#define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_TO_TX       0x00000002
 
3051
#define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_OUTSIDE_TX  0x00000004
 
3052
 
 
3053
typedef struct _FILE_OBJECTID_INFORMATION {
 
3054
  LONGLONG FileReference;
 
3055
  UCHAR ObjectId[16];
 
3056
  _ANONYMOUS_UNION union {
 
3057
    _ANONYMOUS_STRUCT struct {
 
3058
      UCHAR BirthVolumeId[16];
 
3059
      UCHAR BirthObjectId[16];
 
3060
      UCHAR DomainId[16];
 
3061
    } DUMMYSTRUCTNAME;
 
3062
    UCHAR ExtendedInfo[48];
 
3063
  } DUMMYUNIONNAME;
 
3064
} FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION;
 
3065
 
 
3066
#define ANSI_DOS_STAR                   ('<')
 
3067
#define ANSI_DOS_QM                     ('>')
 
3068
#define ANSI_DOS_DOT                    ('"')
 
3069
 
 
3070
#define DOS_STAR                        (L'<')
 
3071
#define DOS_QM                          (L'>')
 
3072
#define DOS_DOT                         (L'"')
 
3073
 
 
3074
typedef struct _FILE_INTERNAL_INFORMATION {
 
3075
  LARGE_INTEGER IndexNumber;
 
3076
} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
 
3077
 
 
3078
typedef struct _FILE_EA_INFORMATION {
 
3079
  ULONG EaSize;
 
3080
} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
 
3081
 
 
3082
typedef struct _FILE_ACCESS_INFORMATION {
 
3083
  ACCESS_MASK AccessFlags;
 
3084
} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
 
3085
 
 
3086
typedef struct _FILE_MODE_INFORMATION {
 
3087
  ULONG Mode;
 
3088
} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
 
3089
 
 
3090
typedef struct _FILE_ALL_INFORMATION {
 
3091
  FILE_BASIC_INFORMATION BasicInformation;
 
3092
  FILE_STANDARD_INFORMATION StandardInformation;
 
3093
  FILE_INTERNAL_INFORMATION InternalInformation;
 
3094
  FILE_EA_INFORMATION EaInformation;
 
3095
  FILE_ACCESS_INFORMATION AccessInformation;
 
3096
  FILE_POSITION_INFORMATION PositionInformation;
 
3097
  FILE_MODE_INFORMATION ModeInformation;
 
3098
  FILE_ALIGNMENT_INFORMATION AlignmentInformation;
 
3099
  FILE_NAME_INFORMATION NameInformation;
 
3100
} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
 
3101
 
 
3102
typedef struct _FILE_ALLOCATION_INFORMATION {
 
3103
  LARGE_INTEGER AllocationSize;
 
3104
} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
 
3105
 
 
3106
typedef struct _FILE_COMPRESSION_INFORMATION {
 
3107
  LARGE_INTEGER CompressedFileSize;
 
3108
  USHORT CompressionFormat;
 
3109
  UCHAR CompressionUnitShift;
 
3110
  UCHAR ChunkShift;
 
3111
  UCHAR ClusterShift;
 
3112
  UCHAR Reserved[3];
 
3113
} FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
 
3114
 
 
3115
typedef struct _FILE_LINK_INFORMATION {
 
3116
  BOOLEAN ReplaceIfExists;
 
3117
  HANDLE RootDirectory;
 
3118
  ULONG FileNameLength;
 
3119
  WCHAR FileName[1];
 
3120
} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
 
3121
 
 
3122
typedef struct _FILE_MOVE_CLUSTER_INFORMATION {
 
3123
  ULONG ClusterCount;
 
3124
  HANDLE RootDirectory;
 
3125
  ULONG FileNameLength;
 
3126
  WCHAR FileName[1];
 
3127
} FILE_MOVE_CLUSTER_INFORMATION, *PFILE_MOVE_CLUSTER_INFORMATION;
 
3128
 
 
3129
typedef struct _FILE_RENAME_INFORMATION {
 
3130
  BOOLEAN ReplaceIfExists;
 
3131
  HANDLE RootDirectory;
 
3132
  ULONG FileNameLength;
 
3133
  WCHAR FileName[1];
 
3134
} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
 
3135
 
 
3136
typedef struct _FILE_STREAM_INFORMATION {
 
3137
  ULONG NextEntryOffset;
 
3138
  ULONG StreamNameLength;
 
3139
  LARGE_INTEGER StreamSize;
 
3140
  LARGE_INTEGER StreamAllocationSize;
 
3141
  WCHAR StreamName[1];
 
3142
} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
 
3143
 
 
3144
typedef struct _FILE_TRACKING_INFORMATION {
 
3145
  HANDLE DestinationFile;
 
3146
  ULONG ObjectInformationLength;
 
3147
  CHAR ObjectInformation[1];
 
3148
} FILE_TRACKING_INFORMATION, *PFILE_TRACKING_INFORMATION;
 
3149
 
 
3150
typedef struct _FILE_COMPLETION_INFORMATION {
 
3151
  HANDLE Port;
 
3152
  PVOID Key;
 
3153
} FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
 
3154
 
 
3155
typedef struct _FILE_PIPE_INFORMATION {
 
3156
  ULONG ReadMode;
 
3157
  ULONG CompletionMode;
 
3158
} FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
 
3159
 
 
3160
typedef struct _FILE_PIPE_LOCAL_INFORMATION {
 
3161
  ULONG NamedPipeType;
 
3162
  ULONG NamedPipeConfiguration;
 
3163
  ULONG MaximumInstances;
 
3164
  ULONG CurrentInstances;
 
3165
  ULONG InboundQuota;
 
3166
  ULONG ReadDataAvailable;
 
3167
  ULONG OutboundQuota;
 
3168
  ULONG WriteQuotaAvailable;
 
3169
  ULONG NamedPipeState;
 
3170
  ULONG NamedPipeEnd;
 
3171
} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
 
3172
 
 
3173
typedef struct _FILE_PIPE_REMOTE_INFORMATION {
 
3174
  LARGE_INTEGER CollectDataTime;
 
3175
  ULONG MaximumCollectionCount;
 
3176
} FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
 
3177
 
 
3178
typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
 
3179
  ULONG MaximumMessageSize;
 
3180
  ULONG MailslotQuota;
 
3181
  ULONG NextMessageSize;
 
3182
  ULONG MessagesAvailable;
 
3183
  LARGE_INTEGER ReadTimeout;
 
3184
} FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
 
3185
 
 
3186
typedef struct _FILE_MAILSLOT_SET_INFORMATION {
 
3187
  PLARGE_INTEGER ReadTimeout;
 
3188
} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
 
3189
 
 
3190
typedef struct _FILE_REPARSE_POINT_INFORMATION {
 
3191
  LONGLONG FileReference;
 
3192
  ULONG Tag;
 
3193
} FILE_REPARSE_POINT_INFORMATION, *PFILE_REPARSE_POINT_INFORMATION;
 
3194
 
 
3195
typedef struct _FILE_LINK_ENTRY_INFORMATION {
 
3196
  ULONG NextEntryOffset;
 
3197
  LONGLONG ParentFileId;
 
3198
  ULONG FileNameLength;
 
3199
  WCHAR FileName[1];
 
3200
} FILE_LINK_ENTRY_INFORMATION, *PFILE_LINK_ENTRY_INFORMATION;
 
3201
 
 
3202
typedef struct _FILE_LINKS_INFORMATION {
 
3203
  ULONG BytesNeeded;
 
3204
  ULONG EntriesReturned;
 
3205
  FILE_LINK_ENTRY_INFORMATION Entry;
 
3206
} FILE_LINKS_INFORMATION, *PFILE_LINKS_INFORMATION;
 
3207
 
 
3208
typedef struct _FILE_NETWORK_PHYSICAL_NAME_INFORMATION {
 
3209
  ULONG FileNameLength;
 
3210
  WCHAR FileName[1];
 
3211
} FILE_NETWORK_PHYSICAL_NAME_INFORMATION, *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION;
 
3212
 
 
3213
typedef struct _FILE_STANDARD_LINK_INFORMATION {
 
3214
  ULONG NumberOfAccessibleLinks;
 
3215
  ULONG TotalNumberOfLinks;
 
3216
  BOOLEAN DeletePending;
 
3217
  BOOLEAN Directory;
 
3218
} FILE_STANDARD_LINK_INFORMATION, *PFILE_STANDARD_LINK_INFORMATION;
 
3219
 
 
3220
typedef struct _FILE_GET_EA_INFORMATION {
 
3221
  ULONG NextEntryOffset;
 
3222
  UCHAR EaNameLength;
 
3223
  CHAR  EaName[1];
 
3224
} FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
 
3225
 
 
3226
#define REMOTE_PROTOCOL_FLAG_LOOPBACK       0x00000001
 
3227
#define REMOTE_PROTOCOL_FLAG_OFFLINE        0x00000002
 
3228
 
 
3229
typedef struct _FILE_REMOTE_PROTOCOL_INFORMATION {
 
3230
  USHORT StructureVersion;
 
3231
  USHORT StructureSize;
 
3232
  ULONG  Protocol;
 
3233
  USHORT ProtocolMajorVersion;
 
3234
  USHORT ProtocolMinorVersion;
 
3235
  USHORT ProtocolRevision;
 
3236
  USHORT Reserved;
 
3237
  ULONG  Flags;
 
3238
  struct {
 
3239
    ULONG Reserved[8];
 
3240
  } GenericReserved;
 
3241
  struct {
 
3242
    ULONG Reserved[16];
 
3243
  } ProtocolSpecificReserved;
 
3244
} FILE_REMOTE_PROTOCOL_INFORMATION, *PFILE_REMOTE_PROTOCOL_INFORMATION;
 
3245
 
 
3246
typedef struct _FILE_GET_QUOTA_INFORMATION {
 
3247
  ULONG NextEntryOffset;
 
3248
  ULONG SidLength;
 
3249
  SID Sid;
 
3250
} FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION;
 
3251
 
 
3252
typedef struct _FILE_QUOTA_INFORMATION {
 
3253
  ULONG NextEntryOffset;
 
3254
  ULONG SidLength;
 
3255
  LARGE_INTEGER ChangeTime;
 
3256
  LARGE_INTEGER QuotaUsed;
 
3257
  LARGE_INTEGER QuotaThreshold;
 
3258
  LARGE_INTEGER QuotaLimit;
 
3259
  SID Sid;
 
3260
} FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
 
3261
 
 
3262
typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
 
3263
  ULONG FileSystemAttributes;
 
3264
  ULONG MaximumComponentNameLength;
 
3265
  ULONG FileSystemNameLength;
 
3266
  WCHAR FileSystemName[1];
 
3267
} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
 
3268
 
 
3269
typedef struct _FILE_FS_DRIVER_PATH_INFORMATION {
 
3270
  BOOLEAN DriverInPath;
 
3271
  ULONG DriverNameLength;
 
3272
  WCHAR DriverName[1];
 
3273
} FILE_FS_DRIVER_PATH_INFORMATION, *PFILE_FS_DRIVER_PATH_INFORMATION;
 
3274
 
 
3275
typedef struct _FILE_FS_VOLUME_FLAGS_INFORMATION {
 
3276
  ULONG Flags;
 
3277
} FILE_FS_VOLUME_FLAGS_INFORMATION, *PFILE_FS_VOLUME_FLAGS_INFORMATION;
250
3278
 
251
3279
#define FILE_VC_QUOTA_NONE              0x00000000
252
3280
#define FILE_VC_QUOTA_TRACK             0x00000001
253
3281
#define FILE_VC_QUOTA_ENFORCE           0x00000002
254
3282
#define FILE_VC_QUOTA_MASK              0x00000003
255
 
 
256
 
#define FILE_VC_QUOTAS_LOG_VIOLATIONS   0x00000004
257
3283
#define FILE_VC_CONTENT_INDEX_DISABLED  0x00000008
258
 
 
259
3284
#define FILE_VC_LOG_QUOTA_THRESHOLD     0x00000010
260
3285
#define FILE_VC_LOG_QUOTA_LIMIT         0x00000020
261
3286
#define FILE_VC_LOG_VOLUME_THRESHOLD    0x00000040
262
3287
#define FILE_VC_LOG_VOLUME_LIMIT        0x00000080
263
 
 
264
3288
#define FILE_VC_QUOTAS_INCOMPLETE       0x00000100
265
3289
#define FILE_VC_QUOTAS_REBUILDING       0x00000200
266
 
 
267
3290
#define FILE_VC_VALID_MASK              0x000003ff
268
3291
 
 
3292
typedef struct _FILE_FS_CONTROL_INFORMATION {
 
3293
  LARGE_INTEGER FreeSpaceStartFiltering;
 
3294
  LARGE_INTEGER FreeSpaceThreshold;
 
3295
  LARGE_INTEGER FreeSpaceStopFiltering;
 
3296
  LARGE_INTEGER DefaultQuotaThreshold;
 
3297
  LARGE_INTEGER DefaultQuotaLimit;
 
3298
  ULONG FileSystemControlFlags;
 
3299
} FILE_FS_CONTROL_INFORMATION, *PFILE_FS_CONTROL_INFORMATION;
 
3300
 
 
3301
#ifndef _FILESYSTEMFSCTL_
 
3302
#define _FILESYSTEMFSCTL_
 
3303
 
 
3304
#define FSCTL_REQUEST_OPLOCK_LEVEL_1    CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  0, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3305
#define FSCTL_REQUEST_OPLOCK_LEVEL_2    CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  1, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3306
#define FSCTL_REQUEST_BATCH_OPLOCK      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  2, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3307
#define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  3, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3308
#define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  4, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3309
#define FSCTL_OPLOCK_BREAK_NOTIFY       CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  5, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3310
#define FSCTL_LOCK_VOLUME               CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  6, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3311
#define FSCTL_UNLOCK_VOLUME             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  7, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3312
#define FSCTL_DISMOUNT_VOLUME           CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  8, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3313
#define FSCTL_IS_VOLUME_MOUNTED         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3314
#define FSCTL_IS_PATHNAME_VALID         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3315
#define FSCTL_MARK_VOLUME_DIRTY         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3316
#define FSCTL_QUERY_RETRIEVAL_POINTERS  CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER,  FILE_ANY_ACCESS)
 
3317
#define FSCTL_GET_COMPRESSION           CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3318
#define FSCTL_SET_COMPRESSION           CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
 
3319
#define FSCTL_SET_BOOTLOADER_ACCESSED   CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER,  FILE_ANY_ACCESS)
 
3320
 
 
3321
#define FSCTL_OPLOCK_BREAK_ACK_NO_2     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3322
#define FSCTL_INVALIDATE_VOLUMES        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3323
#define FSCTL_QUERY_FAT_BPB             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3324
#define FSCTL_REQUEST_FILTER_OPLOCK     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3325
#define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3326
 
 
3327
#if (_WIN32_WINNT >= 0x0400)
 
3328
 
 
3329
#define FSCTL_GET_NTFS_VOLUME_DATA      CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3330
#define FSCTL_GET_NTFS_FILE_RECORD      CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3331
#define FSCTL_GET_VOLUME_BITMAP         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER,  FILE_ANY_ACCESS)
 
3332
#define FSCTL_GET_RETRIEVAL_POINTERS    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER,  FILE_ANY_ACCESS)
 
3333
#define FSCTL_MOVE_FILE                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3334
#define FSCTL_IS_VOLUME_DIRTY           CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3335
#define FSCTL_ALLOW_EXTENDED_DASD_IO    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER,  FILE_ANY_ACCESS)
 
3336
 
 
3337
#endif
 
3338
 
 
3339
#if (_WIN32_WINNT >= 0x0500)
 
3340
 
 
3341
#define FSCTL_FIND_FILES_BY_SID         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER,  FILE_ANY_ACCESS)
 
3342
#define FSCTL_SET_OBJECT_ID             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3343
#define FSCTL_GET_OBJECT_ID             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3344
#define FSCTL_DELETE_OBJECT_ID          CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3345
#define FSCTL_SET_REPARSE_POINT         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3346
#define FSCTL_GET_REPARSE_POINT         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3347
#define FSCTL_DELETE_REPARSE_POINT      CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3348
#define FSCTL_ENUM_USN_DATA             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER,  FILE_READ_DATA)
 
3349
#define FSCTL_SECURITY_ID_CHECK         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER,  FILE_READ_DATA)
 
3350
#define FSCTL_READ_USN_JOURNAL          CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER,  FILE_READ_DATA)
 
3351
#define FSCTL_SET_OBJECT_ID_EXTENDED    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3352
#define FSCTL_CREATE_OR_GET_OBJECT_ID   CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3353
#define FSCTL_SET_SPARSE                CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3354
#define FSCTL_SET_ZERO_DATA             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3355
#define FSCTL_QUERY_ALLOCATED_RANGES    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER,  FILE_READ_DATA)
 
3356
#define FSCTL_ENABLE_UPGRADE            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3357
#define FSCTL_SET_ENCRYPTION            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3358
#define FSCTL_ENCRYPTION_FSCTL_IO       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER,  FILE_ANY_ACCESS)
 
3359
#define FSCTL_WRITE_RAW_ENCRYPTED       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER,  FILE_ANY_ACCESS)
 
3360
#define FSCTL_READ_RAW_ENCRYPTED        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER,  FILE_ANY_ACCESS)
 
3361
#define FSCTL_CREATE_USN_JOURNAL        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER,  FILE_READ_DATA)
 
3362
#define FSCTL_READ_FILE_USN_DATA        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER,  FILE_READ_DATA)
 
3363
#define FSCTL_WRITE_USN_CLOSE_RECORD    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER,  FILE_READ_DATA)
 
3364
#define FSCTL_EXTEND_VOLUME             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3365
#define FSCTL_QUERY_USN_JOURNAL         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3366
#define FSCTL_DELETE_USN_JOURNAL        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3367
#define FSCTL_MARK_HANDLE               CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3368
#define FSCTL_SIS_COPYFILE              CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3369
#define FSCTL_SIS_LINK_FILES            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
 
3370
#define FSCTL_RECALL_FILE               CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
 
3371
#define FSCTL_READ_FROM_PLEX            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
 
3372
#define FSCTL_FILE_PREFETCH             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
 
3373
 
 
3374
#endif
 
3375
 
 
3376
#if (_WIN32_WINNT >= 0x0600)
 
3377
 
 
3378
#define FSCTL_MAKE_MEDIA_COMPATIBLE         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3379
#define FSCTL_SET_DEFECT_MANAGEMENT         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3380
#define FSCTL_QUERY_SPARING_INFO            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3381
#define FSCTL_QUERY_ON_DISK_VOLUME_INFO     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3382
#define FSCTL_SET_VOLUME_COMPRESSION_STATE  CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
 
3383
#define FSCTL_TXFS_MODIFY_RM                CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3384
#define FSCTL_TXFS_QUERY_RM_INFORMATION     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA)
 
3385
#define FSCTL_TXFS_ROLLFORWARD_REDO         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3386
#define FSCTL_TXFS_ROLLFORWARD_UNDO         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3387
#define FSCTL_TXFS_START_RM                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3388
#define FSCTL_TXFS_SHUTDOWN_RM              CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3389
#define FSCTL_TXFS_READ_BACKUP_INFORMATION  CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA)
 
3390
#define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3391
#define FSCTL_TXFS_CREATE_SECONDARY_RM      CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3392
#define FSCTL_TXFS_GET_METADATA_INFO        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA)
 
3393
#define FSCTL_TXFS_GET_TRANSACTED_VERSION   CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA)
 
3394
#define FSCTL_TXFS_SAVEPOINT_INFORMATION    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 94, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3395
#define FSCTL_TXFS_CREATE_MINIVERSION       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA)
 
3396
#define FSCTL_TXFS_TRANSACTION_ACTIVE       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA)
 
3397
#define FSCTL_SET_ZERO_ON_DEALLOCATION      CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
 
3398
#define FSCTL_SET_REPAIR                    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3399
#define FSCTL_GET_REPAIR                    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3400
#define FSCTL_WAIT_FOR_REPAIR               CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3401
#define FSCTL_INITIATE_REPAIR               CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3402
#define FSCTL_CSC_INTERNAL                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER,  FILE_ANY_ACCESS)
 
3403
#define FSCTL_SHRINK_VOLUME                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
 
3404
#define FSCTL_SET_SHORT_NAME_BEHAVIOR       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3405
#define FSCTL_DFSR_SET_GHOST_HANDLE_STATE   CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3406
 
 
3407
#define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES \
 
3408
                                            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA)
 
3409
#define FSCTL_TXFS_LIST_TRANSACTIONS        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA)
 
3410
#define FSCTL_QUERY_PAGEFILE_ENCRYPTION     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3411
#define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3412
#define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3413
 
 
3414
#endif
 
3415
 
 
3416
#if (_WIN32_WINNT >= 0x0601)
 
3417
 
 
3418
#define FSCTL_QUERY_DEPENDENT_VOLUME        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 124, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3419
#define FSCTL_SD_GLOBAL_CHANGE              CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 125, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3420
#define FSCTL_LOOKUP_STREAM_FROM_CLUSTER    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 127, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3421
#define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3422
#define FSCTL_FILE_TYPE_NOTIFICATION        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3423
#define FSCTL_GET_BOOT_AREA_INFO            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 140, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3424
#define FSCTL_GET_RETRIEVAL_POINTER_BASE    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 141, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3425
#define FSCTL_SET_PERSISTENT_VOLUME_STATE   CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3426
#define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3427
 
 
3428
#define FSCTL_REQUEST_OPLOCK                CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3429
 
 
3430
#define FSCTL_CSV_TUNNEL_REQUEST            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3431
#define FSCTL_IS_CSV_FILE                   CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3432
 
 
3433
#define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 147, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3434
#define FSCTL_CSV_GET_VOLUME_PATH_NAME      CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 148, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3435
#define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3436
#define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150,  METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3437
#define FSCTL_IS_FILE_ON_CSV_VOLUME         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151,  METHOD_BUFFERED, FILE_ANY_ACCESS)
 
3438
 
 
3439
typedef struct _CSV_NAMESPACE_INFO {
 
3440
  ULONG Version;
 
3441
  ULONG DeviceNumber;
 
3442
  LARGE_INTEGER StartingOffset;
 
3443
  ULONG SectorSize;
 
3444
} CSV_NAMESPACE_INFO, *PCSV_NAMESPACE_INFO;
 
3445
 
 
3446
#define CSV_NAMESPACE_INFO_V1 (sizeof(CSV_NAMESPACE_INFO))
 
3447
#define CSV_INVALID_DEVICE_NUMBER 0xFFFFFFFF
 
3448
 
 
3449
#endif
 
3450
 
 
3451
#define FSCTL_MARK_AS_SYSTEM_HIVE           FSCTL_SET_BOOTLOADER_ACCESSED
 
3452
 
 
3453
typedef struct _PATHNAME_BUFFER {
 
3454
  ULONG PathNameLength;
 
3455
  WCHAR Name[1];
 
3456
} PATHNAME_BUFFER, *PPATHNAME_BUFFER;
 
3457
 
 
3458
typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER {
 
3459
  UCHAR First0x24BytesOfBootSector[0x24];
 
3460
} FSCTL_QUERY_FAT_BPB_BUFFER, *PFSCTL_QUERY_FAT_BPB_BUFFER;
 
3461
 
 
3462
#if (_WIN32_WINNT >= 0x0400)
 
3463
 
 
3464
typedef struct _NTFS_VOLUME_DATA_BUFFER {
 
3465
  LARGE_INTEGER VolumeSerialNumber;
 
3466
  LARGE_INTEGER NumberSectors;
 
3467
  LARGE_INTEGER TotalClusters;
 
3468
  LARGE_INTEGER FreeClusters;
 
3469
  LARGE_INTEGER TotalReserved;
 
3470
  ULONG BytesPerSector;
 
3471
  ULONG BytesPerCluster;
 
3472
  ULONG BytesPerFileRecordSegment;
 
3473
  ULONG ClustersPerFileRecordSegment;
 
3474
  LARGE_INTEGER MftValidDataLength;
 
3475
  LARGE_INTEGER MftStartLcn;
 
3476
  LARGE_INTEGER Mft2StartLcn;
 
3477
  LARGE_INTEGER MftZoneStart;
 
3478
  LARGE_INTEGER MftZoneEnd;
 
3479
} NTFS_VOLUME_DATA_BUFFER, *PNTFS_VOLUME_DATA_BUFFER;
 
3480
 
 
3481
typedef struct _NTFS_EXTENDED_VOLUME_DATA {
 
3482
  ULONG ByteCount;
 
3483
  USHORT MajorVersion;
 
3484
  USHORT MinorVersion;
 
3485
} NTFS_EXTENDED_VOLUME_DATA, *PNTFS_EXTENDED_VOLUME_DATA;
 
3486
 
 
3487
typedef struct _STARTING_LCN_INPUT_BUFFER {
 
3488
  LARGE_INTEGER StartingLcn;
 
3489
} STARTING_LCN_INPUT_BUFFER, *PSTARTING_LCN_INPUT_BUFFER;
 
3490
 
 
3491
typedef struct _VOLUME_BITMAP_BUFFER {
 
3492
  LARGE_INTEGER StartingLcn;
 
3493
  LARGE_INTEGER BitmapSize;
 
3494
  UCHAR Buffer[1];
 
3495
} VOLUME_BITMAP_BUFFER, *PVOLUME_BITMAP_BUFFER;
 
3496
 
 
3497
typedef struct _STARTING_VCN_INPUT_BUFFER {
 
3498
  LARGE_INTEGER StartingVcn;
 
3499
} STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER;
 
3500
 
 
3501
typedef struct _RETRIEVAL_POINTERS_BUFFER {
 
3502
  ULONG ExtentCount;
 
3503
  LARGE_INTEGER StartingVcn;
 
3504
  struct {
 
3505
    LARGE_INTEGER NextVcn;
 
3506
    LARGE_INTEGER Lcn;
 
3507
  } Extents[1];
 
3508
} RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
 
3509
 
 
3510
typedef struct _NTFS_FILE_RECORD_INPUT_BUFFER {
 
3511
  LARGE_INTEGER FileReferenceNumber;
 
3512
} NTFS_FILE_RECORD_INPUT_BUFFER, *PNTFS_FILE_RECORD_INPUT_BUFFER;
 
3513
 
 
3514
typedef struct _NTFS_FILE_RECORD_OUTPUT_BUFFER {
 
3515
  LARGE_INTEGER FileReferenceNumber;
 
3516
  ULONG FileRecordLength;
 
3517
  UCHAR FileRecordBuffer[1];
 
3518
} NTFS_FILE_RECORD_OUTPUT_BUFFER, *PNTFS_FILE_RECORD_OUTPUT_BUFFER;
 
3519
 
 
3520
typedef struct _MOVE_FILE_DATA {
 
3521
  HANDLE FileHandle;
 
3522
  LARGE_INTEGER StartingVcn;
 
3523
  LARGE_INTEGER StartingLcn;
 
3524
  ULONG ClusterCount;
 
3525
} MOVE_FILE_DATA, *PMOVE_FILE_DATA;
 
3526
 
 
3527
typedef struct _MOVE_FILE_RECORD_DATA {
 
3528
  HANDLE FileHandle;
 
3529
  LARGE_INTEGER SourceFileRecord;
 
3530
  LARGE_INTEGER TargetFileRecord;
 
3531
} MOVE_FILE_RECORD_DATA, *PMOVE_FILE_RECORD_DATA;
 
3532
 
 
3533
#if defined(_WIN64)
 
3534
typedef struct _MOVE_FILE_DATA32 {
 
3535
  UINT32 FileHandle;
 
3536
  LARGE_INTEGER StartingVcn;
 
3537
  LARGE_INTEGER StartingLcn;
 
3538
  ULONG ClusterCount;
 
3539
} MOVE_FILE_DATA32, *PMOVE_FILE_DATA32;
 
3540
#endif
 
3541
 
 
3542
#endif /* (_WIN32_WINNT >= 0x0400) */
 
3543
 
 
3544
#if (_WIN32_WINNT >= 0x0500)
 
3545
 
 
3546
typedef struct _FIND_BY_SID_DATA {
 
3547
  ULONG Restart;
 
3548
  SID Sid;
 
3549
} FIND_BY_SID_DATA, *PFIND_BY_SID_DATA;
 
3550
 
 
3551
typedef struct _FIND_BY_SID_OUTPUT {
 
3552
  ULONG NextEntryOffset;
 
3553
  ULONG FileIndex;
 
3554
  ULONG FileNameLength;
 
3555
  WCHAR FileName[1];
 
3556
} FIND_BY_SID_OUTPUT, *PFIND_BY_SID_OUTPUT;
 
3557
 
 
3558
typedef struct _MFT_ENUM_DATA {
 
3559
  ULONGLONG StartFileReferenceNumber;
 
3560
  USN LowUsn;
 
3561
  USN HighUsn;
 
3562
} MFT_ENUM_DATA, *PMFT_ENUM_DATA;
 
3563
 
 
3564
typedef struct _CREATE_USN_JOURNAL_DATA {
 
3565
  ULONGLONG MaximumSize;
 
3566
  ULONGLONG AllocationDelta;
 
3567
} CREATE_USN_JOURNAL_DATA, *PCREATE_USN_JOURNAL_DATA;
 
3568
 
 
3569
typedef struct _READ_USN_JOURNAL_DATA {
 
3570
  USN StartUsn;
 
3571
  ULONG ReasonMask;
 
3572
  ULONG ReturnOnlyOnClose;
 
3573
  ULONGLONG Timeout;
 
3574
  ULONGLONG BytesToWaitFor;
 
3575
  ULONGLONG UsnJournalID;
 
3576
} READ_USN_JOURNAL_DATA, *PREAD_USN_JOURNAL_DATA;
 
3577
 
 
3578
typedef struct _USN_RECORD {
 
3579
  ULONG RecordLength;
 
3580
  USHORT MajorVersion;
 
3581
  USHORT MinorVersion;
 
3582
  ULONGLONG FileReferenceNumber;
 
3583
  ULONGLONG ParentFileReferenceNumber;
 
3584
  USN Usn;
 
3585
  LARGE_INTEGER TimeStamp;
 
3586
  ULONG Reason;
 
3587
  ULONG SourceInfo;
 
3588
  ULONG SecurityId;
 
3589
  ULONG FileAttributes;
 
3590
  USHORT FileNameLength;
 
3591
  USHORT FileNameOffset;
 
3592
  WCHAR FileName[1];
 
3593
} USN_RECORD, *PUSN_RECORD;
 
3594
 
 
3595
#define USN_PAGE_SIZE                    (0x1000)
 
3596
 
 
3597
#define USN_REASON_DATA_OVERWRITE        (0x00000001)
 
3598
#define USN_REASON_DATA_EXTEND           (0x00000002)
 
3599
#define USN_REASON_DATA_TRUNCATION       (0x00000004)
 
3600
#define USN_REASON_NAMED_DATA_OVERWRITE  (0x00000010)
 
3601
#define USN_REASON_NAMED_DATA_EXTEND     (0x00000020)
 
3602
#define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040)
 
3603
#define USN_REASON_FILE_CREATE           (0x00000100)
 
3604
#define USN_REASON_FILE_DELETE           (0x00000200)
 
3605
#define USN_REASON_EA_CHANGE             (0x00000400)
 
3606
#define USN_REASON_SECURITY_CHANGE       (0x00000800)
 
3607
#define USN_REASON_RENAME_OLD_NAME       (0x00001000)
 
3608
#define USN_REASON_RENAME_NEW_NAME       (0x00002000)
 
3609
#define USN_REASON_INDEXABLE_CHANGE      (0x00004000)
 
3610
#define USN_REASON_BASIC_INFO_CHANGE     (0x00008000)
 
3611
#define USN_REASON_HARD_LINK_CHANGE      (0x00010000)
 
3612
#define USN_REASON_COMPRESSION_CHANGE    (0x00020000)
 
3613
#define USN_REASON_ENCRYPTION_CHANGE     (0x00040000)
 
3614
#define USN_REASON_OBJECT_ID_CHANGE      (0x00080000)
 
3615
#define USN_REASON_REPARSE_POINT_CHANGE  (0x00100000)
 
3616
#define USN_REASON_STREAM_CHANGE         (0x00200000)
 
3617
#define USN_REASON_TRANSACTED_CHANGE     (0x00400000)
 
3618
#define USN_REASON_CLOSE                 (0x80000000)
 
3619
 
 
3620
typedef struct _USN_JOURNAL_DATA {
 
3621
  ULONGLONG UsnJournalID;
 
3622
  USN FirstUsn;
 
3623
  USN NextUsn;
 
3624
  USN LowestValidUsn;
 
3625
  USN MaxUsn;
 
3626
  ULONGLONG MaximumSize;
 
3627
  ULONGLONG AllocationDelta;
 
3628
} USN_JOURNAL_DATA, *PUSN_JOURNAL_DATA;
 
3629
 
 
3630
typedef struct _DELETE_USN_JOURNAL_DATA {
 
3631
  ULONGLONG UsnJournalID;
 
3632
  ULONG DeleteFlags;
 
3633
} DELETE_USN_JOURNAL_DATA, *PDELETE_USN_JOURNAL_DATA;
 
3634
 
 
3635
#define USN_DELETE_FLAG_DELETE              (0x00000001)
 
3636
#define USN_DELETE_FLAG_NOTIFY              (0x00000002)
 
3637
#define USN_DELETE_VALID_FLAGS              (0x00000003)
 
3638
 
 
3639
typedef struct _MARK_HANDLE_INFO {
 
3640
  ULONG UsnSourceInfo;
 
3641
  HANDLE VolumeHandle;
 
3642
  ULONG HandleInfo;
 
3643
} MARK_HANDLE_INFO, *PMARK_HANDLE_INFO;
 
3644
 
 
3645
#if defined(_WIN64)
 
3646
typedef struct _MARK_HANDLE_INFO32 {
 
3647
  ULONG UsnSourceInfo;
 
3648
  UINT32 VolumeHandle;
 
3649
  ULONG HandleInfo;
 
3650
} MARK_HANDLE_INFO32, *PMARK_HANDLE_INFO32;
 
3651
#endif
 
3652
 
 
3653
#define USN_SOURCE_DATA_MANAGEMENT          (0x00000001)
 
3654
#define USN_SOURCE_AUXILIARY_DATA           (0x00000002)
 
3655
#define USN_SOURCE_REPLICATION_MANAGEMENT   (0x00000004)
 
3656
 
 
3657
#define MARK_HANDLE_PROTECT_CLUSTERS        (0x00000001)
 
3658
#define MARK_HANDLE_TXF_SYSTEM_LOG          (0x00000004)
 
3659
#define MARK_HANDLE_NOT_TXF_SYSTEM_LOG      (0x00000008)
 
3660
 
 
3661
typedef struct _BULK_SECURITY_TEST_DATA {
 
3662
  ACCESS_MASK DesiredAccess;
 
3663
  ULONG SecurityIds[1];
 
3664
} BULK_SECURITY_TEST_DATA, *PBULK_SECURITY_TEST_DATA;
 
3665
 
 
3666
#define VOLUME_IS_DIRTY                  (0x00000001)
 
3667
#define VOLUME_UPGRADE_SCHEDULED         (0x00000002)
 
3668
#define VOLUME_SESSION_OPEN              (0x00000004)
 
3669
 
 
3670
typedef struct _FILE_PREFETCH {
 
3671
  ULONG Type;
 
3672
  ULONG Count;
 
3673
  ULONGLONG Prefetch[1];
 
3674
} FILE_PREFETCH, *PFILE_PREFETCH;
 
3675
 
 
3676
typedef struct _FILE_PREFETCH_EX {
 
3677
  ULONG Type;
 
3678
  ULONG Count;
 
3679
  PVOID Context;
 
3680
  ULONGLONG Prefetch[1];
 
3681
} FILE_PREFETCH_EX, *PFILE_PREFETCH_EX;
 
3682
 
 
3683
#define FILE_PREFETCH_TYPE_FOR_CREATE       0x1
 
3684
#define FILE_PREFETCH_TYPE_FOR_DIRENUM      0x2
 
3685
#define FILE_PREFETCH_TYPE_FOR_CREATE_EX    0x3
 
3686
#define FILE_PREFETCH_TYPE_FOR_DIRENUM_EX   0x4
 
3687
 
 
3688
#define FILE_PREFETCH_TYPE_MAX              0x4
 
3689
 
 
3690
typedef struct _FILE_OBJECTID_BUFFER {
 
3691
  UCHAR ObjectId[16];
 
3692
  _ANONYMOUS_UNION union {
 
3693
    _ANONYMOUS_STRUCT struct {
 
3694
      UCHAR BirthVolumeId[16];
 
3695
      UCHAR BirthObjectId[16];
 
3696
      UCHAR DomainId[16];
 
3697
    } DUMMYSTRUCTNAME;
 
3698
    UCHAR ExtendedInfo[48];
 
3699
  } DUMMYUNIONNAME;
 
3700
} FILE_OBJECTID_BUFFER, *PFILE_OBJECTID_BUFFER;
 
3701
 
 
3702
typedef struct _FILE_SET_SPARSE_BUFFER {
 
3703
  BOOLEAN SetSparse;
 
3704
} FILE_SET_SPARSE_BUFFER, *PFILE_SET_SPARSE_BUFFER;
 
3705
 
 
3706
typedef struct _FILE_ZERO_DATA_INFORMATION {
 
3707
  LARGE_INTEGER FileOffset;
 
3708
  LARGE_INTEGER BeyondFinalZero;
 
3709
} FILE_ZERO_DATA_INFORMATION, *PFILE_ZERO_DATA_INFORMATION;
 
3710
 
 
3711
typedef struct _FILE_ALLOCATED_RANGE_BUFFER {
 
3712
  LARGE_INTEGER FileOffset;
 
3713
  LARGE_INTEGER Length;
 
3714
} FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER;
 
3715
 
 
3716
typedef struct _ENCRYPTION_BUFFER {
 
3717
  ULONG EncryptionOperation;
 
3718
  UCHAR Private[1];
 
3719
} ENCRYPTION_BUFFER, *PENCRYPTION_BUFFER;
 
3720
 
 
3721
#define FILE_SET_ENCRYPTION         0x00000001
 
3722
#define FILE_CLEAR_ENCRYPTION       0x00000002
 
3723
#define STREAM_SET_ENCRYPTION       0x00000003
 
3724
#define STREAM_CLEAR_ENCRYPTION     0x00000004
 
3725
 
 
3726
#define MAXIMUM_ENCRYPTION_VALUE    0x00000004
 
3727
 
 
3728
typedef struct _DECRYPTION_STATUS_BUFFER {
 
3729
  BOOLEAN NoEncryptedStreams;
 
3730
} DECRYPTION_STATUS_BUFFER, *PDECRYPTION_STATUS_BUFFER;
 
3731
 
 
3732
#define ENCRYPTION_FORMAT_DEFAULT        (0x01)
 
3733
 
 
3734
#define COMPRESSION_FORMAT_SPARSE        (0x4000)
 
3735
 
 
3736
typedef struct _REQUEST_RAW_ENCRYPTED_DATA {
 
3737
  LONGLONG FileOffset;
 
3738
  ULONG Length;
 
3739
} REQUEST_RAW_ENCRYPTED_DATA, *PREQUEST_RAW_ENCRYPTED_DATA;
 
3740
 
 
3741
typedef struct _ENCRYPTED_DATA_INFO {
 
3742
  ULONGLONG StartingFileOffset;
 
3743
  ULONG OutputBufferOffset;
 
3744
  ULONG BytesWithinFileSize;
 
3745
  ULONG BytesWithinValidDataLength;
 
3746
  USHORT CompressionFormat;
 
3747
  UCHAR DataUnitShift;
 
3748
  UCHAR ChunkShift;
 
3749
  UCHAR ClusterShift;
 
3750
  UCHAR EncryptionFormat;
 
3751
  USHORT NumberOfDataBlocks;
 
3752
  ULONG DataBlockSize[ANYSIZE_ARRAY];
 
3753
} ENCRYPTED_DATA_INFO, *PENCRYPTED_DATA_INFO;
 
3754
 
 
3755
typedef struct _PLEX_READ_DATA_REQUEST {
 
3756
  LARGE_INTEGER ByteOffset;
 
3757
  ULONG ByteLength;
 
3758
  ULONG PlexNumber;
 
3759
} PLEX_READ_DATA_REQUEST, *PPLEX_READ_DATA_REQUEST;
 
3760
 
 
3761
typedef struct _SI_COPYFILE {
 
3762
  ULONG SourceFileNameLength;
 
3763
  ULONG DestinationFileNameLength;
 
3764
  ULONG Flags;
 
3765
  WCHAR FileNameBuffer[1];
 
3766
} SI_COPYFILE, *PSI_COPYFILE;
 
3767
 
 
3768
#define COPYFILE_SIS_LINK       0x0001
 
3769
#define COPYFILE_SIS_REPLACE    0x0002
 
3770
#define COPYFILE_SIS_FLAGS      0x0003
 
3771
 
 
3772
#endif /* (_WIN32_WINNT >= 0x0500) */
 
3773
 
 
3774
#if (_WIN32_WINNT >= 0x0600)
 
3775
 
 
3776
typedef struct _FILE_MAKE_COMPATIBLE_BUFFER {
 
3777
  BOOLEAN CloseDisc;
 
3778
} FILE_MAKE_COMPATIBLE_BUFFER, *PFILE_MAKE_COMPATIBLE_BUFFER;
 
3779
 
 
3780
typedef struct _FILE_SET_DEFECT_MGMT_BUFFER {
 
3781
  BOOLEAN Disable;
 
3782
} FILE_SET_DEFECT_MGMT_BUFFER, *PFILE_SET_DEFECT_MGMT_BUFFER;
 
3783
 
 
3784
typedef struct _FILE_QUERY_SPARING_BUFFER {
 
3785
  ULONG SparingUnitBytes;
 
3786
  BOOLEAN SoftwareSparing;
 
3787
  ULONG TotalSpareBlocks;
 
3788
  ULONG FreeSpareBlocks;
 
3789
} FILE_QUERY_SPARING_BUFFER, *PFILE_QUERY_SPARING_BUFFER;
 
3790
 
 
3791
typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER {
 
3792
  LARGE_INTEGER DirectoryCount;
 
3793
  LARGE_INTEGER FileCount;
 
3794
  USHORT FsFormatMajVersion;
 
3795
  USHORT FsFormatMinVersion;
 
3796
  WCHAR FsFormatName[12];
 
3797
  LARGE_INTEGER FormatTime;
 
3798
  LARGE_INTEGER LastUpdateTime;
 
3799
  WCHAR CopyrightInfo[34];
 
3800
  WCHAR AbstractInfo[34];
 
3801
  WCHAR FormattingImplementationInfo[34];
 
3802
  WCHAR LastModifyingImplementationInfo[34];
 
3803
} FILE_QUERY_ON_DISK_VOL_INFO_BUFFER, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER;
 
3804
 
 
3805
#define SET_REPAIR_ENABLED                                      (0x00000001)
 
3806
#define SET_REPAIR_VOLUME_BITMAP_SCAN                           (0x00000002)
 
3807
#define SET_REPAIR_DELETE_CROSSLINK                             (0x00000004)
 
3808
#define SET_REPAIR_WARN_ABOUT_DATA_LOSS                         (0x00000008)
 
3809
#define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT             (0x00000010)
 
3810
#define SET_REPAIR_VALID_MASK                                   (0x0000001F)
 
3811
 
 
3812
typedef enum _SHRINK_VOLUME_REQUEST_TYPES {
 
3813
  ShrinkPrepare = 1,
 
3814
  ShrinkCommit,
 
3815
  ShrinkAbort
 
3816
} SHRINK_VOLUME_REQUEST_TYPES, *PSHRINK_VOLUME_REQUEST_TYPES;
 
3817
 
 
3818
typedef struct _SHRINK_VOLUME_INFORMATION {
 
3819
  SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType;
 
3820
  ULONGLONG Flags;
 
3821
  LONGLONG NewNumberOfSectors;
 
3822
} SHRINK_VOLUME_INFORMATION, *PSHRINK_VOLUME_INFORMATION;
 
3823
 
 
3824
#define TXFS_RM_FLAG_LOGGING_MODE                           0x00000001
 
3825
#define TXFS_RM_FLAG_RENAME_RM                              0x00000002
 
3826
#define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX                0x00000004
 
3827
#define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN                0x00000008
 
3828
#define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS    0x00000010
 
3829
#define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT           0x00000020
 
3830
#define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE             0x00000040
 
3831
#define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX             0x00000080
 
3832
#define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN             0x00000100
 
3833
#define TXFS_RM_FLAG_GROW_LOG                               0x00000400
 
3834
#define TXFS_RM_FLAG_SHRINK_LOG                             0x00000800
 
3835
#define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE                   0x00001000
 
3836
#define TXFS_RM_FLAG_PRESERVE_CHANGES                       0x00002000
 
3837
#define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START                 0x00004000
 
3838
#define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START          0x00008000
 
3839
#define TXFS_RM_FLAG_PREFER_CONSISTENCY                     0x00010000
 
3840
#define TXFS_RM_FLAG_PREFER_AVAILABILITY                    0x00020000
 
3841
 
 
3842
#define TXFS_LOGGING_MODE_SIMPLE        (0x0001)
 
3843
#define TXFS_LOGGING_MODE_FULL          (0x0002)
 
3844
 
 
3845
#define TXFS_TRANSACTION_STATE_NONE         0x00
 
3846
#define TXFS_TRANSACTION_STATE_ACTIVE       0x01
 
3847
#define TXFS_TRANSACTION_STATE_PREPARED     0x02
 
3848
#define TXFS_TRANSACTION_STATE_NOTACTIVE    0x03
 
3849
 
 
3850
#define TXFS_MODIFY_RM_VALID_FLAGS (TXFS_RM_FLAG_LOGGING_MODE                        | \
 
3851
                                    TXFS_RM_FLAG_RENAME_RM                           | \
 
3852
                                    TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX             | \
 
3853
                                    TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN             | \
 
3854
                                    TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
 
3855
                                    TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT        | \
 
3856
                                    TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE          | \
 
3857
                                    TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX          | \
 
3858
                                    TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN          | \
 
3859
                                    TXFS_RM_FLAG_SHRINK_LOG                          | \
 
3860
                                    TXFS_RM_FLAG_GROW_LOG                            | \
 
3861
                                    TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE                | \
 
3862
                                    TXFS_RM_FLAG_PRESERVE_CHANGES                    | \
 
3863
                                    TXFS_RM_FLAG_RESET_RM_AT_NEXT_START              | \
 
3864
                                    TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START       | \
 
3865
                                    TXFS_RM_FLAG_PREFER_CONSISTENCY                  | \
 
3866
                                    TXFS_RM_FLAG_PREFER_AVAILABILITY)
 
3867
 
 
3868
typedef struct _TXFS_MODIFY_RM {
 
3869
  ULONG Flags;
 
3870
  ULONG LogContainerCountMax;
 
3871
  ULONG LogContainerCountMin;
 
3872
  ULONG LogContainerCount;
 
3873
  ULONG LogGrowthIncrement;
 
3874
  ULONG LogAutoShrinkPercentage;
 
3875
  ULONGLONG Reserved;
 
3876
  USHORT LoggingMode;
 
3877
} TXFS_MODIFY_RM, *PTXFS_MODIFY_RM;
 
3878
 
 
3879
#define TXFS_RM_STATE_NOT_STARTED       0
 
3880
#define TXFS_RM_STATE_STARTING          1
 
3881
#define TXFS_RM_STATE_ACTIVE            2
 
3882
#define TXFS_RM_STATE_SHUTTING_DOWN     3
 
3883
 
 
3884
#define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS                           \
 
3885
                (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS   |   \
 
3886
                 TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT          |   \
 
3887
                 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX            |   \
 
3888
                 TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN            |   \
 
3889
                 TXFS_RM_FLAG_RESET_RM_AT_NEXT_START                |   \
 
3890
                 TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START         |   \
 
3891
                 TXFS_RM_FLAG_PREFER_CONSISTENCY                    |   \
 
3892
                 TXFS_RM_FLAG_PREFER_AVAILABILITY)
 
3893
 
 
3894
typedef struct _TXFS_QUERY_RM_INFORMATION {
 
3895
  ULONG BytesRequired;
 
3896
  ULONGLONG TailLsn;
 
3897
  ULONGLONG CurrentLsn;
 
3898
  ULONGLONG ArchiveTailLsn;
 
3899
  ULONGLONG LogContainerSize;
 
3900
  LARGE_INTEGER HighestVirtualClock;
 
3901
  ULONG LogContainerCount;
 
3902
  ULONG LogContainerCountMax;
 
3903
  ULONG LogContainerCountMin;
 
3904
  ULONG LogGrowthIncrement;
 
3905
  ULONG LogAutoShrinkPercentage;
 
3906
  ULONG Flags;
 
3907
  USHORT LoggingMode;
 
3908
  USHORT Reserved;
 
3909
  ULONG RmState;
 
3910
  ULONGLONG LogCapacity;
 
3911
  ULONGLONG LogFree;
 
3912
  ULONGLONG TopsSize;
 
3913
  ULONGLONG TopsUsed;
 
3914
  ULONGLONG TransactionCount;
 
3915
  ULONGLONG OnePCCount;
 
3916
  ULONGLONG TwoPCCount;
 
3917
  ULONGLONG NumberLogFileFull;
 
3918
  ULONGLONG OldestTransactionAge;
 
3919
  GUID RMName;
 
3920
  ULONG TmLogPathOffset;
 
3921
} TXFS_QUERY_RM_INFORMATION, *PTXFS_QUERY_RM_INFORMATION;
 
3922
 
 
3923
#define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN        0x01
 
3924
#define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK   0x02
 
3925
 
 
3926
#define TXFS_ROLLFORWARD_REDO_VALID_FLAGS                               \
 
3927
                (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN |         \
 
3928
                 TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK)
 
3929
 
 
3930
typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION {
 
3931
  LARGE_INTEGER LastVirtualClock;
 
3932
  ULONGLONG LastRedoLsn;
 
3933
  ULONGLONG HighestRecoveryLsn;
 
3934
  ULONG Flags;
 
3935
} TXFS_ROLLFORWARD_REDO_INFORMATION, *PTXFS_ROLLFORWARD_REDO_INFORMATION;
 
3936
 
 
3937
#define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX              0x00000001
 
3938
#define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN              0x00000002
 
3939
#define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE                   0x00000004
 
3940
#define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS  0x00000008
 
3941
#define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT         0x00000010
 
3942
#define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE           0x00000020
 
3943
#define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX           0x00000040
 
3944
#define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN           0x00000080
 
3945
 
 
3946
#define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT                  0x00000200
 
3947
#define TXFS_START_RM_FLAG_LOGGING_MODE                         0x00000400
 
3948
#define TXFS_START_RM_FLAG_PRESERVE_CHANGES                     0x00000800
 
3949
 
 
3950
#define TXFS_START_RM_FLAG_PREFER_CONSISTENCY                   0x00001000
 
3951
#define TXFS_START_RM_FLAG_PREFER_AVAILABILITY                  0x00002000
 
3952
 
 
3953
#define TXFS_START_RM_VALID_FLAGS                                           \
 
3954
                (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX             |   \
 
3955
                 TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN             |   \
 
3956
                 TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE                  |   \
 
3957
                 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS |   \
 
3958
                 TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT        |   \
 
3959
                 TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE          |   \
 
3960
                 TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT                 |   \
 
3961
                 TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX          |   \
 
3962
                 TXFS_START_RM_FLAG_LOGGING_MODE                        |   \
 
3963
                 TXFS_START_RM_FLAG_PRESERVE_CHANGES                    |   \
 
3964
                 TXFS_START_RM_FLAG_PREFER_CONSISTENCY                  |   \
 
3965
                 TXFS_START_RM_FLAG_PREFER_AVAILABILITY)
 
3966
 
 
3967
typedef struct _TXFS_START_RM_INFORMATION {
 
3968
  ULONG Flags;
 
3969
  ULONGLONG LogContainerSize;
 
3970
  ULONG LogContainerCountMin;
 
3971
  ULONG LogContainerCountMax;
 
3972
  ULONG LogGrowthIncrement;
 
3973
  ULONG LogAutoShrinkPercentage;
 
3974
  ULONG TmLogPathOffset;
 
3975
  USHORT TmLogPathLength;
 
3976
  USHORT LoggingMode;
 
3977
  USHORT LogPathLength;
 
3978
  USHORT Reserved;
 
3979
  WCHAR LogPath[1];
 
3980
} TXFS_START_RM_INFORMATION, *PTXFS_START_RM_INFORMATION;
 
3981
 
 
3982
typedef struct _TXFS_GET_METADATA_INFO_OUT {
 
3983
  struct {
 
3984
    LONGLONG LowPart;
 
3985
    LONGLONG HighPart;
 
3986
  } TxfFileId;
 
3987
  GUID LockingTransaction;
 
3988
  ULONGLONG LastLsn;
 
3989
  ULONG TransactionState;
 
3990
} TXFS_GET_METADATA_INFO_OUT, *PTXFS_GET_METADATA_INFO_OUT;
 
3991
 
 
3992
#define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED   0x00000001
 
3993
#define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED   0x00000002
 
3994
 
 
3995
typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY {
 
3996
  ULONGLONG Offset;
 
3997
  ULONG NameFlags;
 
3998
  LONGLONG FileId;
 
3999
  ULONG Reserved1;
 
4000
  ULONG Reserved2;
 
4001
  LONGLONG Reserved3;
 
4002
  WCHAR FileName[1];
 
4003
} TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY;
 
4004
 
 
4005
typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES {
 
4006
  GUID KtmTransaction;
 
4007
  ULONGLONG NumberOfFiles;
 
4008
  ULONGLONG BufferSizeRequired;
 
4009
  ULONGLONG Offset;
 
4010
} TXFS_LIST_TRANSACTION_LOCKED_FILES, *PTXFS_LIST_TRANSACTION_LOCKED_FILES;
 
4011
 
 
4012
typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY {
 
4013
  GUID TransactionId;
 
4014
  ULONG TransactionState;
 
4015
  ULONG Reserved1;
 
4016
  ULONG Reserved2;
 
4017
  LONGLONG Reserved3;
 
4018
} TXFS_LIST_TRANSACTIONS_ENTRY, *PTXFS_LIST_TRANSACTIONS_ENTRY;
 
4019
 
 
4020
typedef struct _TXFS_LIST_TRANSACTIONS {
 
4021
  ULONGLONG NumberOfTransactions;
 
4022
  ULONGLONG BufferSizeRequired;
 
4023
} TXFS_LIST_TRANSACTIONS, *PTXFS_LIST_TRANSACTIONS;
 
4024
 
 
4025
typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT {
 
4026
  _ANONYMOUS_UNION union {
 
4027
    ULONG BufferLength;
 
4028
    UCHAR Buffer[1];
 
4029
  } DUMMYUNIONNAME;
 
4030
} TXFS_READ_BACKUP_INFORMATION_OUT, *PTXFS_READ_BACKUP_INFORMATION_OUT;
 
4031
 
 
4032
typedef struct _TXFS_WRITE_BACKUP_INFORMATION {
 
4033
  UCHAR Buffer[1];
 
4034
} TXFS_WRITE_BACKUP_INFORMATION, *PTXFS_WRITE_BACKUP_INFORMATION;
 
4035
 
 
4036
#define TXFS_TRANSACTED_VERSION_NONTRANSACTED   0xFFFFFFFE
 
4037
#define TXFS_TRANSACTED_VERSION_UNCOMMITTED     0xFFFFFFFF
 
4038
 
 
4039
typedef struct _TXFS_GET_TRANSACTED_VERSION {
 
4040
  ULONG ThisBaseVersion;
 
4041
  ULONG LatestVersion;
 
4042
  USHORT ThisMiniVersion;
 
4043
  USHORT FirstMiniVersion;
 
4044
  USHORT LatestMiniVersion;
 
4045
} TXFS_GET_TRANSACTED_VERSION, *PTXFS_GET_TRANSACTED_VERSION;
 
4046
 
 
4047
#define TXFS_SAVEPOINT_SET                      0x00000001
 
4048
#define TXFS_SAVEPOINT_ROLLBACK                 0x00000002
 
4049
#define TXFS_SAVEPOINT_CLEAR                    0x00000004
 
4050
#define TXFS_SAVEPOINT_CLEAR_ALL                0x00000010
 
4051
 
 
4052
typedef struct _TXFS_SAVEPOINT_INFORMATION {
 
4053
  HANDLE KtmTransaction;
 
4054
  ULONG ActionCode;
 
4055
  ULONG SavepointId;
 
4056
} TXFS_SAVEPOINT_INFORMATION, *PTXFS_SAVEPOINT_INFORMATION;
 
4057
 
 
4058
typedef struct _TXFS_CREATE_MINIVERSION_INFO {
 
4059
  USHORT StructureVersion;
 
4060
  USHORT StructureLength;
 
4061
  ULONG BaseVersion;
 
4062
  USHORT MiniVersion;
 
4063
} TXFS_CREATE_MINIVERSION_INFO, *PTXFS_CREATE_MINIVERSION_INFO;
 
4064
 
 
4065
typedef struct _TXFS_TRANSACTION_ACTIVE_INFO {
 
4066
  BOOLEAN TransactionsActiveAtSnapshot;
 
4067
} TXFS_TRANSACTION_ACTIVE_INFO, *PTXFS_TRANSACTION_ACTIVE_INFO;
 
4068
 
 
4069
#endif /* (_WIN32_WINNT >= 0x0600) */
 
4070
 
 
4071
#if (_WIN32_WINNT >= 0x0601)
 
4072
 
 
4073
#define MARK_HANDLE_REALTIME                (0x00000020)
 
4074
#define MARK_HANDLE_NOT_REALTIME            (0x00000040)
 
4075
 
 
4076
#define NO_8DOT3_NAME_PRESENT               (0x00000001)
 
4077
#define REMOVED_8DOT3_NAME                  (0x00000002)
 
4078
 
 
4079
#define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED        (0x00000001)
 
4080
 
 
4081
typedef struct _BOOT_AREA_INFO {
 
4082
  ULONG BootSectorCount;
 
4083
  struct {
 
4084
    LARGE_INTEGER Offset;
 
4085
  } BootSectors[2];
 
4086
} BOOT_AREA_INFO, *PBOOT_AREA_INFO;
 
4087
 
 
4088
typedef struct _RETRIEVAL_POINTER_BASE {
 
4089
  LARGE_INTEGER FileAreaOffset;
 
4090
} RETRIEVAL_POINTER_BASE, *PRETRIEVAL_POINTER_BASE;
 
4091
 
 
4092
typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION {
 
4093
  ULONG VolumeFlags;
 
4094
  ULONG FlagMask;
 
4095
  ULONG Version;
 
4096
  ULONG Reserved;
 
4097
} FILE_FS_PERSISTENT_VOLUME_INFORMATION, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION;
 
4098
 
 
4099
typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION {
 
4100
  CHAR FileSystem[9];
 
4101
} FILE_SYSTEM_RECOGNITION_INFORMATION, *PFILE_SYSTEM_RECOGNITION_INFORMATION;
 
4102
 
 
4103
#define OPLOCK_LEVEL_CACHE_READ         (0x00000001)
 
4104
#define OPLOCK_LEVEL_CACHE_HANDLE       (0x00000002)
 
4105
#define OPLOCK_LEVEL_CACHE_WRITE        (0x00000004)
 
4106
 
 
4107
#define REQUEST_OPLOCK_INPUT_FLAG_REQUEST               (0x00000001)
 
4108
#define REQUEST_OPLOCK_INPUT_FLAG_ACK                   (0x00000002)
 
4109
#define REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE (0x00000004)
 
4110
 
 
4111
#define REQUEST_OPLOCK_CURRENT_VERSION          1
 
4112
 
 
4113
typedef struct _REQUEST_OPLOCK_INPUT_BUFFER {
 
4114
  USHORT StructureVersion;
 
4115
  USHORT StructureLength;
 
4116
  ULONG RequestedOplockLevel;
 
4117
  ULONG Flags;
 
4118
} REQUEST_OPLOCK_INPUT_BUFFER, *PREQUEST_OPLOCK_INPUT_BUFFER;
 
4119
 
 
4120
#define REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED     (0x00000001)
 
4121
#define REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED   (0x00000002)
 
4122
 
 
4123
typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER {
 
4124
  USHORT StructureVersion;
 
4125
  USHORT StructureLength;
 
4126
  ULONG OriginalOplockLevel;
 
4127
  ULONG NewOplockLevel;
 
4128
  ULONG Flags;
 
4129
  ACCESS_MASK AccessMode;
 
4130
  USHORT ShareMode;
 
4131
} REQUEST_OPLOCK_OUTPUT_BUFFER, *PREQUEST_OPLOCK_OUTPUT_BUFFER;
 
4132
 
 
4133
#define SD_GLOBAL_CHANGE_TYPE_MACHINE_SID   1
 
4134
 
 
4135
typedef struct _SD_CHANGE_MACHINE_SID_INPUT {
 
4136
  USHORT CurrentMachineSIDOffset;
 
4137
  USHORT CurrentMachineSIDLength;
 
4138
  USHORT NewMachineSIDOffset;
 
4139
  USHORT NewMachineSIDLength;
 
4140
} SD_CHANGE_MACHINE_SID_INPUT, *PSD_CHANGE_MACHINE_SID_INPUT;
 
4141
 
 
4142
typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT {
 
4143
  ULONGLONG NumSDChangedSuccess;
 
4144
  ULONGLONG NumSDChangedFail;
 
4145
  ULONGLONG NumSDUnused;
 
4146
  ULONGLONG NumSDTotal;
 
4147
  ULONGLONG NumMftSDChangedSuccess;
 
4148
  ULONGLONG NumMftSDChangedFail;
 
4149
  ULONGLONG NumMftSDTotal;
 
4150
} SD_CHANGE_MACHINE_SID_OUTPUT, *PSD_CHANGE_MACHINE_SID_OUTPUT;
 
4151
 
 
4152
typedef struct _SD_GLOBAL_CHANGE_INPUT {
 
4153
  ULONG Flags;
 
4154
  ULONG ChangeType;
 
4155
  _ANONYMOUS_UNION union {
 
4156
    SD_CHANGE_MACHINE_SID_INPUT SdChange;
 
4157
  } DUMMYUNIONNAME;
 
4158
} SD_GLOBAL_CHANGE_INPUT, *PSD_GLOBAL_CHANGE_INPUT;
 
4159
 
 
4160
typedef struct _SD_GLOBAL_CHANGE_OUTPUT {
 
4161
  ULONG Flags;
 
4162
  ULONG ChangeType;
 
4163
  _ANONYMOUS_UNION union {
 
4164
    SD_CHANGE_MACHINE_SID_OUTPUT SdChange;
 
4165
  } DUMMYUNIONNAME;
 
4166
} SD_GLOBAL_CHANGE_OUTPUT, *PSD_GLOBAL_CHANGE_OUTPUT;
 
4167
 
 
4168
#define ENCRYPTED_DATA_INFO_SPARSE_FILE    1
 
4169
 
 
4170
typedef struct _EXTENDED_ENCRYPTED_DATA_INFO {
 
4171
  ULONG ExtendedCode;
 
4172
  ULONG Length;
 
4173
  ULONG Flags;
 
4174
  ULONG Reserved;
 
4175
} EXTENDED_ENCRYPTED_DATA_INFO, *PEXTENDED_ENCRYPTED_DATA_INFO;
 
4176
 
 
4177
typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT {
 
4178
  ULONG Flags;
 
4179
  ULONG NumberOfClusters;
 
4180
  LARGE_INTEGER Cluster[1];
 
4181
} LOOKUP_STREAM_FROM_CLUSTER_INPUT, *PLOOKUP_STREAM_FROM_CLUSTER_INPUT;
 
4182
 
 
4183
typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT {
 
4184
  ULONG Offset;
 
4185
  ULONG NumberOfMatches;
 
4186
  ULONG BufferSizeRequired;
 
4187
} LOOKUP_STREAM_FROM_CLUSTER_OUTPUT, *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT;
 
4188
 
 
4189
#define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE          0x00000001
 
4190
#define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET    0x00000002
 
4191
#define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE     0x00000004
 
4192
#define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE    0x00000008
 
4193
 
 
4194
#define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK          0xff000000
 
4195
#define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA          0x01000000
 
4196
#define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX         0x02000000
 
4197
#define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM        0x03000000
 
4198
 
 
4199
typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY {
 
4200
  ULONG OffsetToNext;
 
4201
  ULONG Flags;
 
4202
  LARGE_INTEGER Reserved;
 
4203
  LARGE_INTEGER Cluster;
 
4204
  WCHAR FileName[1];
 
4205
} LOOKUP_STREAM_FROM_CLUSTER_ENTRY, *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY;
 
4206
 
 
4207
typedef struct _FILE_TYPE_NOTIFICATION_INPUT {
 
4208
  ULONG Flags;
 
4209
  ULONG NumFileTypeIDs;
 
4210
  GUID FileTypeID[1];
 
4211
} FILE_TYPE_NOTIFICATION_INPUT, *PFILE_TYPE_NOTIFICATION_INPUT;
 
4212
 
 
4213
#define FILE_TYPE_NOTIFICATION_FLAG_USAGE_BEGIN     0x00000001
 
4214
#define FILE_TYPE_NOTIFICATION_FLAG_USAGE_END       0x00000002
 
4215
 
 
4216
DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_PAGE_FILE,         0x0d0a64a1, 0x38fc, 0x4db8, 0x9f, 0xe7, 0x3f, 0x43, 0x52, 0xcd, 0x7c, 0x5c);
 
4217
DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_HIBERNATION_FILE,  0xb7624d64, 0xb9a3, 0x4cf8, 0x80, 0x11, 0x5b, 0x86, 0xc9, 0x40, 0xe7, 0xb7);
 
4218
DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_CRASHDUMP_FILE,    0x9d453eb7, 0xd2a6, 0x4dbd, 0xa2, 0xe3, 0xfb, 0xd0, 0xed, 0x91, 0x09, 0xa9);
 
4219
 
 
4220
#ifndef _VIRTUAL_STORAGE_TYPE_DEFINED
 
4221
#define _VIRTUAL_STORAGE_TYPE_DEFINED
 
4222
typedef struct _VIRTUAL_STORAGE_TYPE {
 
4223
  ULONG DeviceId;
 
4224
  GUID VendorId;
 
4225
} VIRTUAL_STORAGE_TYPE, *PVIRTUAL_STORAGE_TYPE;
 
4226
#endif
 
4227
 
 
4228
typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST {
 
4229
  ULONG RequestLevel;
 
4230
  ULONG RequestFlags;
 
4231
} STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST, *PSTORAGE_QUERY_DEPENDENT_VOLUME_REQUEST;
 
4232
 
 
4233
#define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_HOST_VOLUMES    0x1
 
4234
#define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_GUEST_VOLUMES   0x2
 
4235
 
 
4236
typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY {
 
4237
  ULONG EntryLength;
 
4238
  ULONG DependencyTypeFlags;
 
4239
  ULONG ProviderSpecificFlags;
 
4240
  VIRTUAL_STORAGE_TYPE VirtualStorageType;
 
4241
} STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY;
 
4242
 
 
4243
typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY {
 
4244
  ULONG EntryLength;
 
4245
  ULONG DependencyTypeFlags;
 
4246
  ULONG ProviderSpecificFlags;
 
4247
  VIRTUAL_STORAGE_TYPE VirtualStorageType;
 
4248
  ULONG AncestorLevel;
 
4249
  ULONG HostVolumeNameOffset;
 
4250
  ULONG HostVolumeNameSize;
 
4251
  ULONG DependentVolumeNameOffset;
 
4252
  ULONG DependentVolumeNameSize;
 
4253
  ULONG RelativePathOffset;
 
4254
  ULONG RelativePathSize;
 
4255
  ULONG DependentDeviceNameOffset;
 
4256
  ULONG DependentDeviceNameSize;
 
4257
} STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY;
 
4258
 
 
4259
typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE {
 
4260
  ULONG ResponseLevel;
 
4261
  ULONG NumberEntries;
 
4262
  _ANONYMOUS_UNION union {
 
4263
    STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY Lev1Depends[];
 
4264
    STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY Lev2Depends[];
 
4265
  } DUMMYUNIONNAME;
 
4266
} STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE, *PSTORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE;
 
4267
 
 
4268
#endif /* (_WIN32_WINNT >= 0x0601) */
 
4269
 
 
4270
typedef struct _FILESYSTEM_STATISTICS {
 
4271
  USHORT FileSystemType;
 
4272
  USHORT Version;
 
4273
  ULONG SizeOfCompleteStructure;
 
4274
  ULONG UserFileReads;
 
4275
  ULONG UserFileReadBytes;
 
4276
  ULONG UserDiskReads;
 
4277
  ULONG UserFileWrites;
 
4278
  ULONG UserFileWriteBytes;
 
4279
  ULONG UserDiskWrites;
 
4280
  ULONG MetaDataReads;
 
4281
  ULONG MetaDataReadBytes;
 
4282
  ULONG MetaDataDiskReads;
 
4283
  ULONG MetaDataWrites;
 
4284
  ULONG MetaDataWriteBytes;
 
4285
  ULONG MetaDataDiskWrites;
 
4286
} FILESYSTEM_STATISTICS, *PFILESYSTEM_STATISTICS;
 
4287
 
 
4288
#define FILESYSTEM_STATISTICS_TYPE_NTFS     1
 
4289
#define FILESYSTEM_STATISTICS_TYPE_FAT      2
 
4290
#define FILESYSTEM_STATISTICS_TYPE_EXFAT    3
 
4291
 
 
4292
typedef struct _FAT_STATISTICS {
 
4293
  ULONG CreateHits;
 
4294
  ULONG SuccessfulCreates;
 
4295
  ULONG FailedCreates;
 
4296
  ULONG NonCachedReads;
 
4297
  ULONG NonCachedReadBytes;
 
4298
  ULONG NonCachedWrites;
 
4299
  ULONG NonCachedWriteBytes;
 
4300
  ULONG NonCachedDiskReads;
 
4301
  ULONG NonCachedDiskWrites;
 
4302
} FAT_STATISTICS, *PFAT_STATISTICS;
 
4303
 
 
4304
typedef struct _EXFAT_STATISTICS {
 
4305
  ULONG CreateHits;
 
4306
  ULONG SuccessfulCreates;
 
4307
  ULONG FailedCreates;
 
4308
  ULONG NonCachedReads;
 
4309
  ULONG NonCachedReadBytes;
 
4310
  ULONG NonCachedWrites;
 
4311
  ULONG NonCachedWriteBytes;
 
4312
  ULONG NonCachedDiskReads;
 
4313
  ULONG NonCachedDiskWrites;
 
4314
} EXFAT_STATISTICS, *PEXFAT_STATISTICS;
 
4315
 
 
4316
typedef struct _NTFS_STATISTICS {
 
4317
  ULONG LogFileFullExceptions;
 
4318
  ULONG OtherExceptions;
 
4319
  ULONG MftReads;
 
4320
  ULONG MftReadBytes;
 
4321
  ULONG MftWrites;
 
4322
  ULONG MftWriteBytes;
 
4323
  struct {
 
4324
    USHORT Write;
 
4325
    USHORT Create;
 
4326
    USHORT SetInfo;
 
4327
    USHORT Flush;
 
4328
  } MftWritesUserLevel;
 
4329
  USHORT MftWritesFlushForLogFileFull;
 
4330
  USHORT MftWritesLazyWriter;
 
4331
  USHORT MftWritesUserRequest;
 
4332
  ULONG Mft2Writes;
 
4333
  ULONG Mft2WriteBytes;
 
4334
  struct {
 
4335
    USHORT Write;
 
4336
    USHORT Create;
 
4337
    USHORT SetInfo;
 
4338
    USHORT Flush;
 
4339
  } Mft2WritesUserLevel;
 
4340
  USHORT Mft2WritesFlushForLogFileFull;
 
4341
  USHORT Mft2WritesLazyWriter;
 
4342
  USHORT Mft2WritesUserRequest;
 
4343
  ULONG RootIndexReads;
 
4344
  ULONG RootIndexReadBytes;
 
4345
  ULONG RootIndexWrites;
 
4346
  ULONG RootIndexWriteBytes;
 
4347
  ULONG BitmapReads;
 
4348
  ULONG BitmapReadBytes;
 
4349
  ULONG BitmapWrites;
 
4350
  ULONG BitmapWriteBytes;
 
4351
  USHORT BitmapWritesFlushForLogFileFull;
 
4352
  USHORT BitmapWritesLazyWriter;
 
4353
  USHORT BitmapWritesUserRequest;
 
4354
  struct {
 
4355
    USHORT Write;
 
4356
    USHORT Create;
 
4357
    USHORT SetInfo;
 
4358
  } BitmapWritesUserLevel;
 
4359
  ULONG MftBitmapReads;
 
4360
  ULONG MftBitmapReadBytes;
 
4361
  ULONG MftBitmapWrites;
 
4362
  ULONG MftBitmapWriteBytes;
 
4363
  USHORT MftBitmapWritesFlushForLogFileFull;
 
4364
  USHORT MftBitmapWritesLazyWriter;
 
4365
  USHORT MftBitmapWritesUserRequest;
 
4366
  struct {
 
4367
    USHORT Write;
 
4368
    USHORT Create;
 
4369
    USHORT SetInfo;
 
4370
    USHORT Flush;
 
4371
  } MftBitmapWritesUserLevel;
 
4372
  ULONG UserIndexReads;
 
4373
  ULONG UserIndexReadBytes;
 
4374
  ULONG UserIndexWrites;
 
4375
  ULONG UserIndexWriteBytes;
 
4376
  ULONG LogFileReads;
 
4377
  ULONG LogFileReadBytes;
 
4378
  ULONG LogFileWrites;
 
4379
  ULONG LogFileWriteBytes;
 
4380
  struct {
 
4381
    ULONG Calls;
 
4382
    ULONG Clusters;
 
4383
    ULONG Hints;
 
4384
    ULONG RunsReturned;
 
4385
    ULONG HintsHonored;
 
4386
    ULONG HintsClusters;
 
4387
    ULONG Cache;
 
4388
    ULONG CacheClusters;
 
4389
    ULONG CacheMiss;
 
4390
    ULONG CacheMissClusters;
 
4391
  } Allocate;
 
4392
} NTFS_STATISTICS, *PNTFS_STATISTICS;
 
4393
 
 
4394
#endif /* _FILESYSTEMFSCTL_ */
 
4395
 
 
4396
#define SYMLINK_FLAG_RELATIVE   1
 
4397
 
 
4398
typedef struct _REPARSE_DATA_BUFFER {
 
4399
  ULONG ReparseTag;
 
4400
  USHORT ReparseDataLength;
 
4401
  USHORT Reserved;
 
4402
  _ANONYMOUS_UNION union {
 
4403
    struct {
 
4404
      USHORT SubstituteNameOffset;
 
4405
      USHORT SubstituteNameLength;
 
4406
      USHORT PrintNameOffset;
 
4407
      USHORT PrintNameLength;
 
4408
      ULONG Flags;
 
4409
      WCHAR PathBuffer[1];
 
4410
    } SymbolicLinkReparseBuffer;
 
4411
    struct {
 
4412
      USHORT SubstituteNameOffset;
 
4413
      USHORT SubstituteNameLength;
 
4414
      USHORT PrintNameOffset;
 
4415
      USHORT PrintNameLength;
 
4416
      WCHAR PathBuffer[1];
 
4417
    } MountPointReparseBuffer;
 
4418
    struct {
 
4419
      UCHAR DataBuffer[1];
 
4420
    } GenericReparseBuffer;
 
4421
  } DUMMYUNIONNAME;
 
4422
} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
 
4423
 
 
4424
#define REPARSE_DATA_BUFFER_HEADER_SIZE   FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
 
4425
 
 
4426
typedef struct _REPARSE_GUID_DATA_BUFFER {
 
4427
  ULONG ReparseTag;
 
4428
  USHORT ReparseDataLength;
 
4429
  USHORT Reserved;
 
4430
  GUID ReparseGuid;
 
4431
  struct {
 
4432
    UCHAR DataBuffer[1];
 
4433
  } GenericReparseBuffer;
 
4434
} REPARSE_GUID_DATA_BUFFER, *PREPARSE_GUID_DATA_BUFFER;
 
4435
 
 
4436
#define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE   FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
 
4437
 
 
4438
#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE      ( 16 * 1024 )
 
4439
 
 
4440
/* Reserved reparse tags */
 
4441
#define IO_REPARSE_TAG_RESERVED_ZERO            (0)
 
4442
#define IO_REPARSE_TAG_RESERVED_ONE             (1)
 
4443
#define IO_REPARSE_TAG_RESERVED_RANGE           IO_REPARSE_TAG_RESERVED_ONE
 
4444
 
 
4445
#define IsReparseTagMicrosoft(_tag)             (((_tag) & 0x80000000))
 
4446
#define IsReparseTagNameSurrogate(_tag)         (((_tag) & 0x20000000))
 
4447
 
 
4448
#define IO_REPARSE_TAG_VALID_VALUES             (0xF000FFFF)
 
4449
 
 
4450
#define IsReparseTagValid(tag) (                               \
 
4451
                  !((tag) & ~IO_REPARSE_TAG_VALID_VALUES) &&   \
 
4452
                  ((tag) > IO_REPARSE_TAG_RESERVED_RANGE)      \
 
4453
                )
 
4454
 
 
4455
/* MicroSoft reparse point tags */
 
4456
#define IO_REPARSE_TAG_MOUNT_POINT              (0xA0000003L)
 
4457
#define IO_REPARSE_TAG_HSM                      (0xC0000004L)
 
4458
#define IO_REPARSE_TAG_DRIVE_EXTENDER           (0x80000005L)
 
4459
#define IO_REPARSE_TAG_HSM2                     (0x80000006L)
 
4460
#define IO_REPARSE_TAG_SIS                      (0x80000007L)
 
4461
#define IO_REPARSE_TAG_WIM                      (0x80000008L)
 
4462
#define IO_REPARSE_TAG_CSV                      (0x80000009L)
 
4463
#define IO_REPARSE_TAG_DFS                      (0x8000000AL)
 
4464
#define IO_REPARSE_TAG_FILTER_MANAGER           (0x8000000BL)
 
4465
#define IO_REPARSE_TAG_SYMLINK                  (0xA000000CL)
 
4466
#define IO_REPARSE_TAG_IIS_CACHE                (0xA0000010L)
 
4467
#define IO_REPARSE_TAG_DFSR                     (0x80000012L)
 
4468
 
 
4469
#pragma pack(4)
 
4470
typedef struct _REPARSE_INDEX_KEY {
 
4471
  ULONG FileReparseTag;
 
4472
  LARGE_INTEGER FileId;
 
4473
} REPARSE_INDEX_KEY, *PREPARSE_INDEX_KEY;
 
4474
#pragma pack()
 
4475
 
 
4476
#define FSCTL_LMR_GET_LINK_TRACKING_INFORMATION   CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,58,METHOD_BUFFERED,FILE_ANY_ACCESS)
 
4477
#define FSCTL_LMR_SET_LINK_TRACKING_INFORMATION   CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,59,METHOD_BUFFERED,FILE_ANY_ACCESS)
 
4478
#define IOCTL_LMR_ARE_FILE_OBJECTS_ON_SAME_SERVER CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS)
 
4479
 
 
4480
#define FSCTL_PIPE_ASSIGN_EVENT             CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
4481
#define FSCTL_PIPE_DISCONNECT               CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
4482
#define FSCTL_PIPE_LISTEN                   CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
4483
#define FSCTL_PIPE_PEEK                     CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
 
4484
#define FSCTL_PIPE_QUERY_EVENT              CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
4485
#define FSCTL_PIPE_TRANSCEIVE               CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER,  FILE_READ_DATA | FILE_WRITE_DATA)
 
4486
#define FSCTL_PIPE_WAIT                     CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
4487
#define FSCTL_PIPE_IMPERSONATE              CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
4488
#define FSCTL_PIPE_SET_CLIENT_PROCESS       CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
4489
#define FSCTL_PIPE_QUERY_CLIENT_PROCESS     CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
4490
#define FSCTL_PIPE_GET_PIPE_ATTRIBUTE       CTL_CODE(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
4491
#define FSCTL_PIPE_SET_PIPE_ATTRIBUTE       CTL_CODE(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
4492
#define FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
4493
#define FSCTL_PIPE_SET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
4494
#define FSCTL_PIPE_GET_HANDLE_ATTRIBUTE     CTL_CODE(FILE_DEVICE_NAMED_PIPE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
4495
#define FSCTL_PIPE_SET_HANDLE_ATTRIBUTE     CTL_CODE(FILE_DEVICE_NAMED_PIPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
 
4496
#define FSCTL_PIPE_FLUSH                    CTL_CODE(FILE_DEVICE_NAMED_PIPE, 16, METHOD_BUFFERED, FILE_WRITE_DATA)
 
4497
 
 
4498
#define FSCTL_PIPE_INTERNAL_READ            CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
 
4499
#define FSCTL_PIPE_INTERNAL_WRITE           CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
 
4500
#define FSCTL_PIPE_INTERNAL_TRANSCEIVE      CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
 
4501
#define FSCTL_PIPE_INTERNAL_READ_OVFLOW     CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
 
4502
 
 
4503
#define FILE_PIPE_READ_DATA                 0x00000000
 
4504
#define FILE_PIPE_WRITE_SPACE               0x00000001
 
4505
 
 
4506
typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER {
 
4507
  HANDLE EventHandle;
 
4508
  ULONG KeyValue;
 
4509
} FILE_PIPE_ASSIGN_EVENT_BUFFER, *PFILE_PIPE_ASSIGN_EVENT_BUFFER;
 
4510
 
 
4511
typedef struct _FILE_PIPE_EVENT_BUFFER {
 
4512
  ULONG NamedPipeState;
 
4513
  ULONG EntryType;
 
4514
  ULONG ByteCount;
 
4515
  ULONG KeyValue;
 
4516
  ULONG NumberRequests;
 
4517
} FILE_PIPE_EVENT_BUFFER, *PFILE_PIPE_EVENT_BUFFER;
 
4518
 
 
4519
typedef struct _FILE_PIPE_PEEK_BUFFER {
 
4520
  ULONG NamedPipeState;
 
4521
  ULONG ReadDataAvailable;
 
4522
  ULONG NumberOfMessages;
 
4523
  ULONG MessageLength;
 
4524
  CHAR Data[1];
 
4525
} FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
 
4526
 
 
4527
typedef struct _FILE_PIPE_WAIT_FOR_BUFFER {
 
4528
  LARGE_INTEGER Timeout;
 
4529
  ULONG NameLength;
 
4530
  BOOLEAN TimeoutSpecified;
 
4531
  WCHAR Name[1];
 
4532
} FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
 
4533
 
 
4534
typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER {
 
4535
#if !defined(BUILD_WOW6432)
 
4536
  PVOID ClientSession;
 
4537
  PVOID ClientProcess;
 
4538
#else
 
4539
  ULONGLONG ClientSession;
 
4540
  ULONGLONG ClientProcess;
 
4541
#endif
 
4542
} FILE_PIPE_CLIENT_PROCESS_BUFFER, *PFILE_PIPE_CLIENT_PROCESS_BUFFER;
 
4543
 
 
4544
#define FILE_PIPE_COMPUTER_NAME_LENGTH 15
 
4545
 
 
4546
typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER_EX {
 
4547
#if !defined(BUILD_WOW6432)
 
4548
  PVOID ClientSession;
 
4549
  PVOID ClientProcess;
 
4550
#else
 
4551
  ULONGLONG ClientSession;
 
4552
  ULONGLONG ClientProcess;
 
4553
#endif
 
4554
  USHORT ClientComputerNameLength;
 
4555
  WCHAR ClientComputerBuffer[FILE_PIPE_COMPUTER_NAME_LENGTH+1];
 
4556
} FILE_PIPE_CLIENT_PROCESS_BUFFER_EX, *PFILE_PIPE_CLIENT_PROCESS_BUFFER_EX;
 
4557
 
 
4558
#define FSCTL_MAILSLOT_PEEK             CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
 
4559
 
 
4560
typedef enum _LINK_TRACKING_INFORMATION_TYPE {
 
4561
  NtfsLinkTrackingInformation,
 
4562
  DfsLinkTrackingInformation
 
4563
} LINK_TRACKING_INFORMATION_TYPE, *PLINK_TRACKING_INFORMATION_TYPE;
 
4564
 
 
4565
typedef struct _LINK_TRACKING_INFORMATION {
 
4566
  LINK_TRACKING_INFORMATION_TYPE Type;
 
4567
  UCHAR VolumeId[16];
 
4568
} LINK_TRACKING_INFORMATION, *PLINK_TRACKING_INFORMATION;
 
4569
 
 
4570
typedef struct _REMOTE_LINK_TRACKING_INFORMATION {
 
4571
  PVOID TargetFileObject;
 
4572
  ULONG TargetLinkTrackingInformationLength;
 
4573
  UCHAR TargetLinkTrackingInformationBuffer[1];
 
4574
} REMOTE_LINK_TRACKING_INFORMATION, *PREMOTE_LINK_TRACKING_INFORMATION;
 
4575
 
 
4576
#define IO_OPEN_PAGING_FILE                 0x0002
 
4577
#define IO_OPEN_TARGET_DIRECTORY            0x0004
 
4578
#define IO_STOP_ON_SYMLINK                  0x0008
 
4579
#define IO_MM_PAGING_FILE                   0x0010
 
4580
 
 
4581
typedef VOID
 
4582
(NTAPI *PDRIVER_FS_NOTIFICATION) (
 
4583
  IN PDEVICE_OBJECT DeviceObject,
 
4584
  IN BOOLEAN FsActive);
 
4585
 
 
4586
typedef enum _FS_FILTER_SECTION_SYNC_TYPE {
 
4587
  SyncTypeOther = 0,
 
4588
  SyncTypeCreateSection
 
4589
} FS_FILTER_SECTION_SYNC_TYPE, *PFS_FILTER_SECTION_SYNC_TYPE;
 
4590
 
 
4591
typedef enum _FS_FILTER_STREAM_FO_NOTIFICATION_TYPE {
 
4592
  NotifyTypeCreate = 0,
 
4593
  NotifyTypeRetired
 
4594
} FS_FILTER_STREAM_FO_NOTIFICATION_TYPE, *PFS_FILTER_STREAM_FO_NOTIFICATION_TYPE;
 
4595
 
 
4596
typedef union _FS_FILTER_PARAMETERS {
 
4597
  struct {
 
4598
    PLARGE_INTEGER EndingOffset;
 
4599
    PERESOURCE *ResourceToRelease;
 
4600
  } AcquireForModifiedPageWriter;
 
4601
  struct {
 
4602
    PERESOURCE ResourceToRelease;
 
4603
  } ReleaseForModifiedPageWriter;
 
4604
  struct {
 
4605
    FS_FILTER_SECTION_SYNC_TYPE SyncType;
 
4606
    ULONG PageProtection;
 
4607
  } AcquireForSectionSynchronization;
 
4608
  struct {
 
4609
    FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType;
 
4610
    BOOLEAN POINTER_ALIGNMENT SafeToRecurse;
 
4611
  } NotifyStreamFileObject;
 
4612
  struct {
 
4613
    PVOID Argument1;
 
4614
    PVOID Argument2;
 
4615
    PVOID Argument3;
 
4616
    PVOID Argument4;
 
4617
    PVOID Argument5;
 
4618
  } Others;
 
4619
} FS_FILTER_PARAMETERS, *PFS_FILTER_PARAMETERS;
 
4620
 
 
4621
#define FS_FILTER_ACQUIRE_FOR_SECTION_SYNCHRONIZATION      (UCHAR)-1
 
4622
#define FS_FILTER_RELEASE_FOR_SECTION_SYNCHRONIZATION      (UCHAR)-2
 
4623
#define FS_FILTER_ACQUIRE_FOR_MOD_WRITE                    (UCHAR)-3
 
4624
#define FS_FILTER_RELEASE_FOR_MOD_WRITE                    (UCHAR)-4
 
4625
#define FS_FILTER_ACQUIRE_FOR_CC_FLUSH                     (UCHAR)-5
 
4626
#define FS_FILTER_RELEASE_FOR_CC_FLUSH                     (UCHAR)-6
 
4627
 
 
4628
typedef struct _FS_FILTER_CALLBACK_DATA {
 
4629
  ULONG SizeOfFsFilterCallbackData;
 
4630
  UCHAR Operation;
 
4631
  UCHAR Reserved;
 
4632
  struct _DEVICE_OBJECT *DeviceObject;
 
4633
  struct _FILE_OBJECT *FileObject;
 
4634
  FS_FILTER_PARAMETERS Parameters;
 
4635
} FS_FILTER_CALLBACK_DATA, *PFS_FILTER_CALLBACK_DATA;
 
4636
 
 
4637
typedef NTSTATUS
 
4638
(NTAPI *PFS_FILTER_CALLBACK) (
 
4639
  IN PFS_FILTER_CALLBACK_DATA Data,
 
4640
  OUT PVOID *CompletionContext);
 
4641
 
 
4642
typedef VOID
 
4643
(NTAPI *PFS_FILTER_COMPLETION_CALLBACK) (
 
4644
  IN PFS_FILTER_CALLBACK_DATA Data,
 
4645
  IN NTSTATUS OperationStatus,
 
4646
  IN PVOID CompletionContext);
 
4647
 
 
4648
typedef struct _FS_FILTER_CALLBACKS {
 
4649
  ULONG SizeOfFsFilterCallbacks;
 
4650
  ULONG Reserved;
 
4651
  PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization;
 
4652
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization;
 
4653
  PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization;
 
4654
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization;
 
4655
  PFS_FILTER_CALLBACK PreAcquireForCcFlush;
 
4656
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush;
 
4657
  PFS_FILTER_CALLBACK PreReleaseForCcFlush;
 
4658
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush;
 
4659
  PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter;
 
4660
  PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter;
 
4661
  PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter;
 
4662
  PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter;
 
4663
} FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS;
 
4664
 
 
4665
#if (NTDDI_VERSION >= NTDDI_WINXP)
 
4666
NTKERNELAPI
 
4667
NTSTATUS
 
4668
NTAPI
 
4669
FsRtlRegisterFileSystemFilterCallbacks(
 
4670
  IN struct _DRIVER_OBJECT *FilterDriverObject,
 
4671
  IN PFS_FILTER_CALLBACKS Callbacks);
 
4672
#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 
4673
 
 
4674
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
4675
NTKERNELAPI
 
4676
NTSTATUS
 
4677
NTAPI
 
4678
FsRtlNotifyStreamFileObject(
 
4679
  IN struct _FILE_OBJECT * StreamFileObject,
 
4680
  IN struct _DEVICE_OBJECT *DeviceObjectHint OPTIONAL,
 
4681
  IN FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType,
 
4682
  IN BOOLEAN SafeToRecurse);
 
4683
#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 
4684
 
 
4685
#define DO_VERIFY_VOLUME                    0x00000002
 
4686
#define DO_BUFFERED_IO                      0x00000004
 
4687
#define DO_EXCLUSIVE                        0x00000008
 
4688
#define DO_DIRECT_IO                        0x00000010
 
4689
#define DO_MAP_IO_BUFFER                    0x00000020
 
4690
#define DO_DEVICE_HAS_NAME                  0x00000040
 
4691
#define DO_DEVICE_INITIALIZING              0x00000080
 
4692
#define DO_SYSTEM_BOOT_PARTITION            0x00000100
 
4693
#define DO_LONG_TERM_REQUESTS               0x00000200
 
4694
#define DO_NEVER_LAST_DEVICE                0x00000400
 
4695
#define DO_SHUTDOWN_REGISTERED              0x00000800
 
4696
#define DO_BUS_ENUMERATED_DEVICE            0x00001000
 
4697
#define DO_POWER_PAGABLE                    0x00002000
 
4698
#define DO_POWER_INRUSH                     0x00004000
 
4699
#define DO_LOW_PRIORITY_FILESYSTEM          0x00010000
 
4700
#define DO_SUPPORTS_TRANSACTIONS            0x00040000
 
4701
#define DO_FORCE_NEITHER_IO                 0x00080000
 
4702
#define DO_VOLUME_DEVICE_OBJECT             0x00100000
 
4703
#define DO_SYSTEM_SYSTEM_PARTITION          0x00200000
 
4704
#define DO_SYSTEM_CRITICAL_PARTITION        0x00400000
 
4705
#define DO_DISALLOW_EXECUTE                 0x00800000
 
4706
 
 
4707
extern KSPIN_LOCK                   IoStatisticsLock;
 
4708
extern ULONG                        IoReadOperationCount;
 
4709
extern ULONG                        IoWriteOperationCount;
 
4710
extern ULONG                        IoOtherOperationCount;
 
4711
extern LARGE_INTEGER                IoReadTransferCount;
 
4712
extern LARGE_INTEGER                IoWriteTransferCount;
 
4713
extern LARGE_INTEGER                IoOtherTransferCount;
 
4714
 
 
4715
#define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE    64
 
4716
#define IO_FILE_OBJECT_PAGED_POOL_CHARGE        1024
 
4717
 
 
4718
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
4719
typedef struct _IO_PRIORITY_INFO {
 
4720
  ULONG Size;
 
4721
  ULONG ThreadPriority;
 
4722
  ULONG PagePriority;
 
4723
  IO_PRIORITY_HINT IoPriority;
 
4724
} IO_PRIORITY_INFO, *PIO_PRIORITY_INFO;
 
4725
#endif
 
4726
 
 
4727
typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION {
 
4728
  ULONG Attributes;
 
4729
  ACCESS_MASK GrantedAccess;
 
4730
  ULONG HandleCount;
 
4731
  ULONG PointerCount;
 
4732
  ULONG Reserved[10];
 
4733
} PUBLIC_OBJECT_BASIC_INFORMATION, *PPUBLIC_OBJECT_BASIC_INFORMATION;
 
4734
 
 
4735
typedef struct _PUBLIC_OBJECT_TYPE_INFORMATION {
 
4736
  UNICODE_STRING TypeName;
 
4737
  ULONG Reserved [22];
 
4738
} PUBLIC_OBJECT_TYPE_INFORMATION, *PPUBLIC_OBJECT_TYPE_INFORMATION;
 
4739
 
 
4740
typedef struct _SECURITY_CLIENT_CONTEXT {
 
4741
  SECURITY_QUALITY_OF_SERVICE SecurityQos;
 
4742
  PACCESS_TOKEN ClientToken;
 
4743
  BOOLEAN DirectlyAccessClientToken;
 
4744
  BOOLEAN DirectAccessEffectiveOnly;
 
4745
  BOOLEAN ServerIsRemote;
 
4746
  TOKEN_CONTROL ClientTokenControl;
 
4747
} SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT;
 
4748
 
 
4749
#define SYSTEM_PAGE_PRIORITY_BITS       3
 
4750
#define SYSTEM_PAGE_PRIORITY_LEVELS     (1 << SYSTEM_PAGE_PRIORITY_BITS)
 
4751
 
 
4752
typedef struct _KAPC_STATE {
 
4753
  LIST_ENTRY ApcListHead[MaximumMode];
 
4754
  PKPROCESS Process;
 
4755
  BOOLEAN KernelApcInProgress;
 
4756
  BOOLEAN KernelApcPending;
 
4757
  BOOLEAN UserApcPending;
 
4758
} KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE;
 
4759
 
 
4760
#define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
 
4761
 
 
4762
#define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
 
4763
 
 
4764
typedef struct _KQUEUE {
 
4765
  DISPATCHER_HEADER Header;
 
4766
  LIST_ENTRY EntryListHead;
 
4767
  volatile ULONG CurrentCount;
 
4768
  ULONG MaximumCount;
 
4769
  LIST_ENTRY ThreadListHead;
 
4770
} KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
 
4771
 
 
4772
/******************************************************************************
 
4773
 *                              Kernel Functions                              *
 
4774
 ******************************************************************************/
 
4775
 
 
4776
NTSTATUS
 
4777
NTAPI
 
4778
KeGetProcessorNumberFromIndex(
 
4779
  IN ULONG ProcIndex,
 
4780
  OUT PPROCESSOR_NUMBER ProcNumber);
 
4781
 
 
4782
ULONG
 
4783
NTAPI
 
4784
KeGetProcessorIndexFromNumber(
 
4785
  IN PPROCESSOR_NUMBER ProcNumber);
 
4786
 
 
4787
#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
4788
 
 
4789
 
 
4790
 
 
4791
 
 
4792
NTKERNELAPI
 
4793
VOID
 
4794
NTAPI
 
4795
KeInitializeMutant(
 
4796
  OUT PRKMUTANT Mutant,
 
4797
  IN BOOLEAN InitialOwner);
 
4798
 
 
4799
NTKERNELAPI
 
4800
LONG
 
4801
NTAPI
 
4802
KeReadStateMutant(
 
4803
  IN PRKMUTANT Mutant);
 
4804
 
 
4805
NTKERNELAPI
 
4806
LONG
 
4807
NTAPI
 
4808
KeReleaseMutant(
 
4809
  IN OUT PRKMUTANT Mutant,
 
4810
  IN KPRIORITY Increment,
 
4811
  IN BOOLEAN Abandoned,
 
4812
  IN BOOLEAN Wait);
 
4813
 
 
4814
NTKERNELAPI
 
4815
VOID
 
4816
NTAPI
 
4817
KeInitializeQueue(
 
4818
  OUT PRKQUEUE Queue,
 
4819
  IN ULONG Count);
 
4820
 
 
4821
NTKERNELAPI
 
4822
LONG
 
4823
NTAPI
 
4824
KeReadStateQueue(
 
4825
  IN PRKQUEUE Queue);
 
4826
 
 
4827
NTKERNELAPI
 
4828
LONG
 
4829
NTAPI
 
4830
KeInsertQueue(
 
4831
  IN OUT PRKQUEUE Queue,
 
4832
  IN OUT PLIST_ENTRY Entry);
 
4833
 
 
4834
NTKERNELAPI
 
4835
LONG
 
4836
NTAPI
 
4837
KeInsertHeadQueue(
 
4838
  IN OUT PRKQUEUE Queue,
 
4839
  IN OUT PLIST_ENTRY Entry);
 
4840
 
 
4841
NTKERNELAPI
 
4842
PLIST_ENTRY
 
4843
NTAPI
 
4844
KeRemoveQueue(
 
4845
  IN OUT PRKQUEUE Queue,
 
4846
  IN KPROCESSOR_MODE WaitMode,
 
4847
  IN PLARGE_INTEGER Timeout OPTIONAL);
 
4848
 
 
4849
NTKERNELAPI
 
4850
VOID
 
4851
NTAPI
 
4852
KeAttachProcess(
 
4853
  IN OUT PKPROCESS Process);
 
4854
 
 
4855
NTKERNELAPI
 
4856
VOID
 
4857
NTAPI
 
4858
KeDetachProcess(
 
4859
  VOID);
 
4860
 
 
4861
NTKERNELAPI
 
4862
PLIST_ENTRY
 
4863
NTAPI
 
4864
KeRundownQueue(
 
4865
  IN OUT PRKQUEUE Queue);
 
4866
 
 
4867
NTKERNELAPI
 
4868
VOID
 
4869
NTAPI
 
4870
KeStackAttachProcess(
 
4871
  IN OUT PKPROCESS Process,
 
4872
  OUT PKAPC_STATE ApcState);
 
4873
 
 
4874
NTKERNELAPI
 
4875
VOID
 
4876
NTAPI
 
4877
KeUnstackDetachProcess(
 
4878
  IN PKAPC_STATE ApcState);
 
4879
 
 
4880
NTKERNELAPI
 
4881
UCHAR
 
4882
NTAPI
 
4883
KeSetIdealProcessorThread(
 
4884
  IN OUT PKTHREAD Thread,
 
4885
  IN UCHAR Processor);
 
4886
 
 
4887
NTKERNELAPI
 
4888
BOOLEAN
 
4889
NTAPI
 
4890
KeSetKernelStackSwapEnable(
 
4891
  IN BOOLEAN Enable);
 
4892
 
 
4893
#if defined(_X86_)
 
4894
NTHALAPI
 
4895
KIRQL
 
4896
FASTCALL
 
4897
KeAcquireSpinLockRaiseToSynch(
 
4898
  IN OUT PKSPIN_LOCK SpinLock);
 
4899
#else
 
4900
NTKERNELAPI
 
4901
KIRQL
 
4902
KeAcquireSpinLockRaiseToSynch(
 
4903
  IN OUT PKSPIN_LOCK SpinLock);
 
4904
#endif
 
4905
 
 
4906
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 
4907
 
 
4908
#if (NTDDI_VERSION >= NTDDI_WINXP)
 
4909
 
 
4910
 
 
4911
_DECL_HAL_KE_IMPORT
 
4912
KIRQL
 
4913
FASTCALL
 
4914
KeAcquireQueuedSpinLock(
 
4915
  IN OUT KSPIN_LOCK_QUEUE_NUMBER Number);
 
4916
 
 
4917
_DECL_HAL_KE_IMPORT
 
4918
VOID
 
4919
FASTCALL
 
4920
KeReleaseQueuedSpinLock(
 
4921
  IN OUT KSPIN_LOCK_QUEUE_NUMBER Number,
 
4922
  IN KIRQL OldIrql);
 
4923
 
 
4924
_DECL_HAL_KE_IMPORT
 
4925
LOGICAL
 
4926
FASTCALL
 
4927
KeTryToAcquireQueuedSpinLock(
 
4928
  IN KSPIN_LOCK_QUEUE_NUMBER Number,
 
4929
  OUT PKIRQL OldIrql);
 
4930
 
 
4931
#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 
4932
 
 
4933
 
 
4934
 
 
4935
 
 
4936
 
 
4937
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
4938
 
 
4939
NTKERNELAPI
 
4940
VOID
 
4941
KeQueryOwnerMutant(
 
4942
  IN PKMUTANT Mutant,
 
4943
  OUT PCLIENT_ID ClientId);
 
4944
 
 
4945
NTKERNELAPI
 
4946
ULONG
 
4947
KeRemoveQueueEx (
 
4948
  IN OUT PKQUEUE Queue,
 
4949
  IN KPROCESSOR_MODE WaitMode,
 
4950
  IN BOOLEAN Alertable,
 
4951
  IN PLARGE_INTEGER Timeout OPTIONAL,
 
4952
  OUT PLIST_ENTRY *EntryArray,
 
4953
  IN ULONG Count);
 
4954
 
 
4955
#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 
4956
 
 
4957
 
 
4958
 
 
4959
#define INVALID_PROCESSOR_INDEX     0xffffffff
 
4960
 
 
4961
#define EX_PUSH_LOCK ULONG_PTR
 
4962
#define PEX_PUSH_LOCK PULONG_PTR
 
4963
/******************************************************************************
 
4964
 *                          Executive Functions                               *
 
4965
 ******************************************************************************/
 
4966
 
 
4967
 
 
4968
#define ExDisableResourceBoost ExDisableResourceBoostLite
 
4969
 
 
4970
VOID
 
4971
ExInitializePushLock (
 
4972
  OUT PEX_PUSH_LOCK PushLock);
 
4973
 
 
4974
#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
4975
 
 
4976
NTKERNELAPI
 
4977
SIZE_T
 
4978
NTAPI
 
4979
ExQueryPoolBlockSize(
 
4980
  IN PVOID PoolBlock,
 
4981
  OUT PBOOLEAN QuotaCharged);
 
4982
 
 
4983
VOID
 
4984
ExAdjustLookasideDepth(
 
4985
  VOID);
 
4986
 
 
4987
NTKERNELAPI
 
4988
VOID
 
4989
NTAPI
 
4990
ExDisableResourceBoostLite(
 
4991
  IN PERESOURCE Resource);
 
4992
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 
4993
 
 
4994
#if (NTDDI_VERSION >= NTDDI_WINXP)
 
4995
 
 
4996
PSLIST_ENTRY
 
4997
FASTCALL
 
4998
InterlockedPushListSList(
 
4999
  IN OUT PSLIST_HEADER ListHead,
 
5000
  IN OUT PSLIST_ENTRY List,
 
5001
  IN OUT PSLIST_ENTRY ListEnd,
 
5002
  IN ULONG Count);
 
5003
#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 
5004
 
 
5005
/******************************************************************************
 
5006
 *                            Security Manager Functions                      *
 
5007
 ******************************************************************************/
 
5008
 
 
5009
#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
5010
 
 
5011
 
 
5012
NTKERNELAPI
 
5013
VOID
 
5014
NTAPI
 
5015
SeReleaseSubjectContext(
 
5016
  IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
 
5017
 
 
5018
NTKERNELAPI
 
5019
BOOLEAN
 
5020
NTAPI
 
5021
SePrivilegeCheck(
 
5022
  IN OUT PPRIVILEGE_SET RequiredPrivileges,
 
5023
  IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
 
5024
  IN KPROCESSOR_MODE AccessMode);
 
5025
 
 
5026
NTKERNELAPI
 
5027
VOID
 
5028
NTAPI
 
5029
SeOpenObjectAuditAlarm(
 
5030
  IN PUNICODE_STRING ObjectTypeName,
 
5031
  IN PVOID Object OPTIONAL,
 
5032
  IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
 
5033
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
5034
  IN PACCESS_STATE AccessState,
 
5035
  IN BOOLEAN ObjectCreated,
 
5036
  IN BOOLEAN AccessGranted,
 
5037
  IN KPROCESSOR_MODE AccessMode,
 
5038
  OUT PBOOLEAN GenerateOnClose);
 
5039
 
 
5040
NTKERNELAPI
 
5041
VOID
 
5042
NTAPI
 
5043
SeOpenObjectForDeleteAuditAlarm(
 
5044
  IN PUNICODE_STRING ObjectTypeName,
 
5045
  IN PVOID Object OPTIONAL,
 
5046
  IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
 
5047
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
5048
  IN PACCESS_STATE AccessState,
 
5049
  IN BOOLEAN ObjectCreated,
 
5050
  IN BOOLEAN AccessGranted,
 
5051
  IN KPROCESSOR_MODE AccessMode,
 
5052
  OUT PBOOLEAN GenerateOnClose);
 
5053
 
 
5054
NTKERNELAPI
 
5055
VOID
 
5056
NTAPI
 
5057
SeDeleteObjectAuditAlarm(
 
5058
  IN PVOID Object,
 
5059
  IN HANDLE Handle);
 
5060
 
 
5061
NTKERNELAPI
 
5062
TOKEN_TYPE
 
5063
NTAPI
 
5064
SeTokenType(
 
5065
  IN PACCESS_TOKEN Token);
 
5066
 
 
5067
NTKERNELAPI
 
5068
BOOLEAN
 
5069
NTAPI
 
5070
SeTokenIsAdmin(
 
5071
  IN PACCESS_TOKEN Token);
 
5072
 
 
5073
NTKERNELAPI
 
5074
BOOLEAN
 
5075
NTAPI
 
5076
SeTokenIsRestricted(
 
5077
  IN PACCESS_TOKEN Token);
 
5078
 
 
5079
NTKERNELAPI
 
5080
NTSTATUS
 
5081
NTAPI
 
5082
SeQueryAuthenticationIdToken(
 
5083
  IN PACCESS_TOKEN Token,
 
5084
  OUT PLUID AuthenticationId);
 
5085
 
 
5086
NTKERNELAPI
 
5087
NTSTATUS
 
5088
NTAPI
 
5089
SeQuerySessionIdToken(
 
5090
  IN PACCESS_TOKEN Token,
 
5091
  OUT PULONG SessionId);
 
5092
 
 
5093
NTKERNELAPI
 
5094
NTSTATUS
 
5095
NTAPI
 
5096
SeCreateClientSecurity(
 
5097
  IN PETHREAD ClientThread,
 
5098
  IN PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos,
 
5099
  IN BOOLEAN RemoteSession,
 
5100
  OUT PSECURITY_CLIENT_CONTEXT ClientContext);
 
5101
 
 
5102
NTKERNELAPI
 
5103
VOID
 
5104
NTAPI
 
5105
SeImpersonateClient(
 
5106
  IN PSECURITY_CLIENT_CONTEXT ClientContext,
 
5107
  IN PETHREAD ServerThread OPTIONAL);
 
5108
 
 
5109
NTKERNELAPI
 
5110
NTSTATUS
 
5111
NTAPI
 
5112
SeImpersonateClientEx(
 
5113
  IN PSECURITY_CLIENT_CONTEXT ClientContext,
 
5114
  IN PETHREAD ServerThread OPTIONAL);
 
5115
 
 
5116
NTKERNELAPI
 
5117
NTSTATUS
 
5118
NTAPI
 
5119
SeCreateClientSecurityFromSubjectContext(
 
5120
  IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
 
5121
  IN PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos,
 
5122
  IN BOOLEAN ServerIsRemote,
 
5123
  OUT PSECURITY_CLIENT_CONTEXT ClientContext);
 
5124
 
 
5125
NTKERNELAPI
 
5126
NTSTATUS
 
5127
NTAPI
 
5128
SeQuerySecurityDescriptorInfo(
 
5129
  IN PSECURITY_INFORMATION SecurityInformation,
 
5130
  OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
 
5131
  IN OUT PULONG Length,
 
5132
  IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor);
 
5133
 
 
5134
NTKERNELAPI
 
5135
NTSTATUS
 
5136
NTAPI
 
5137
SeSetSecurityDescriptorInfo(
 
5138
  IN PVOID Object OPTIONAL,
 
5139
  IN PSECURITY_INFORMATION SecurityInformation,
 
5140
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
5141
  IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
 
5142
  IN POOL_TYPE PoolType,
 
5143
  IN PGENERIC_MAPPING GenericMapping);
 
5144
 
 
5145
NTKERNELAPI
 
5146
NTSTATUS
 
5147
NTAPI
 
5148
SeSetSecurityDescriptorInfoEx(
 
5149
  IN PVOID Object OPTIONAL,
 
5150
  IN PSECURITY_INFORMATION SecurityInformation,
 
5151
  IN PSECURITY_DESCRIPTOR ModificationDescriptor,
 
5152
  IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
 
5153
  IN ULONG AutoInheritFlags,
 
5154
  IN POOL_TYPE PoolType,
 
5155
  IN PGENERIC_MAPPING GenericMapping);
 
5156
 
 
5157
NTKERNELAPI
 
5158
NTSTATUS
 
5159
NTAPI
 
5160
SeAppendPrivileges(
 
5161
  IN OUT PACCESS_STATE AccessState,
 
5162
  IN PPRIVILEGE_SET Privileges);
 
5163
 
 
5164
NTKERNELAPI
 
5165
BOOLEAN
 
5166
NTAPI
 
5167
SeAuditingFileEvents(
 
5168
  IN BOOLEAN AccessGranted,
 
5169
  IN PSECURITY_DESCRIPTOR SecurityDescriptor);
 
5170
 
 
5171
NTKERNELAPI
 
5172
BOOLEAN
 
5173
NTAPI
 
5174
SeAuditingFileOrGlobalEvents(
 
5175
  IN BOOLEAN AccessGranted,
 
5176
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
5177
  IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext);
 
5178
 
 
5179
VOID
 
5180
NTAPI
 
5181
SeSetAccessStateGenericMapping(
 
5182
  IN OUT PACCESS_STATE AccessState,
 
5183
  IN PGENERIC_MAPPING GenericMapping);
 
5184
 
 
5185
NTKERNELAPI
 
5186
NTSTATUS
 
5187
NTAPI
 
5188
SeRegisterLogonSessionTerminatedRoutine(
 
5189
  IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine);
 
5190
 
 
5191
NTKERNELAPI
 
5192
NTSTATUS
 
5193
NTAPI
 
5194
SeUnregisterLogonSessionTerminatedRoutine(
 
5195
  IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine);
 
5196
 
 
5197
NTKERNELAPI
 
5198
NTSTATUS
 
5199
NTAPI
 
5200
SeMarkLogonSessionForTerminationNotification(
 
5201
  IN PLUID LogonId);
 
5202
 
 
5203
NTKERNELAPI
 
5204
NTSTATUS
 
5205
NTAPI
 
5206
SeQueryInformationToken(
 
5207
  IN PACCESS_TOKEN Token,
 
5208
  IN TOKEN_INFORMATION_CLASS TokenInformationClass,
 
5209
  OUT PVOID *TokenInformation);
 
5210
 
 
5211
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 
5212
#if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
 
5213
NTKERNELAPI
 
5214
BOOLEAN
 
5215
NTAPI
 
5216
SeAuditingHardLinkEvents(
 
5217
  IN BOOLEAN AccessGranted,
 
5218
  IN PSECURITY_DESCRIPTOR SecurityDescriptor);
 
5219
#endif
 
5220
 
 
5221
#if (NTDDI_VERSION >= NTDDI_WINXP)
 
5222
 
 
5223
NTKERNELAPI
 
5224
NTSTATUS
 
5225
NTAPI
 
5226
SeFilterToken(
 
5227
  IN PACCESS_TOKEN ExistingToken,
 
5228
  IN ULONG Flags,
 
5229
  IN PTOKEN_GROUPS SidsToDisable OPTIONAL,
 
5230
  IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL,
 
5231
  IN PTOKEN_GROUPS RestrictedSids OPTIONAL,
 
5232
  OUT PACCESS_TOKEN *FilteredToken);
 
5233
 
 
5234
NTKERNELAPI
 
5235
VOID
 
5236
NTAPI
 
5237
SeAuditHardLinkCreation(
 
5238
  IN PUNICODE_STRING FileName,
 
5239
  IN PUNICODE_STRING LinkName,
 
5240
  IN BOOLEAN bSuccess);
 
5241
 
 
5242
#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 
5243
 
 
5244
#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
 
5245
 
 
5246
NTKERNELAPI
 
5247
BOOLEAN
 
5248
NTAPI
 
5249
SeAuditingFileEventsWithContext(
 
5250
  IN BOOLEAN AccessGranted,
 
5251
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
5252
  IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL);
 
5253
 
 
5254
NTKERNELAPI
 
5255
BOOLEAN
 
5256
NTAPI
 
5257
SeAuditingHardLinkEventsWithContext(
 
5258
  IN BOOLEAN AccessGranted,
 
5259
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
5260
  IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL);
 
5261
 
 
5262
#endif
 
5263
 
 
5264
 
 
5265
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
5266
 
 
5267
NTKERNELAPI
 
5268
VOID
 
5269
NTAPI
 
5270
SeOpenObjectAuditAlarmWithTransaction(
 
5271
  IN PUNICODE_STRING ObjectTypeName,
 
5272
  IN PVOID Object OPTIONAL,
 
5273
  IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
 
5274
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
5275
  IN PACCESS_STATE AccessState,
 
5276
  IN BOOLEAN ObjectCreated,
 
5277
  IN BOOLEAN AccessGranted,
 
5278
  IN KPROCESSOR_MODE AccessMode,
 
5279
  IN GUID *TransactionId OPTIONAL,
 
5280
  OUT PBOOLEAN GenerateOnClose);
 
5281
 
 
5282
NTKERNELAPI
 
5283
VOID
 
5284
NTAPI
 
5285
SeOpenObjectForDeleteAuditAlarmWithTransaction(
 
5286
  IN PUNICODE_STRING ObjectTypeName,
 
5287
  IN PVOID Object OPTIONAL,
 
5288
  IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
 
5289
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
5290
  IN PACCESS_STATE AccessState,
 
5291
  IN BOOLEAN ObjectCreated,
 
5292
  IN BOOLEAN AccessGranted,
 
5293
  IN KPROCESSOR_MODE AccessMode,
 
5294
  IN GUID *TransactionId OPTIONAL,
 
5295
  OUT PBOOLEAN GenerateOnClose);
 
5296
 
 
5297
NTKERNELAPI
 
5298
VOID
 
5299
NTAPI
 
5300
SeExamineSacl(
 
5301
  IN PACL Sacl,
 
5302
  IN PACCESS_TOKEN Token,
 
5303
  IN ACCESS_MASK DesiredAccess,
 
5304
  IN BOOLEAN AccessGranted,
 
5305
  OUT PBOOLEAN GenerateAudit,
 
5306
  OUT PBOOLEAN GenerateAlarm);
 
5307
 
 
5308
NTKERNELAPI
 
5309
VOID
 
5310
NTAPI
 
5311
SeDeleteObjectAuditAlarmWithTransaction(
 
5312
  IN PVOID Object,
 
5313
  IN HANDLE Handle,
 
5314
  IN GUID *TransactionId OPTIONAL);
 
5315
 
 
5316
NTKERNELAPI
 
5317
VOID
 
5318
NTAPI
 
5319
SeQueryTokenIntegrity(
 
5320
  IN PACCESS_TOKEN Token,
 
5321
  IN OUT PSID_AND_ATTRIBUTES IntegritySA);
 
5322
 
 
5323
NTKERNELAPI
 
5324
NTSTATUS
 
5325
NTAPI
 
5326
SeSetSessionIdToken(
 
5327
  IN PACCESS_TOKEN Token,
 
5328
  IN ULONG SessionId);
 
5329
 
 
5330
NTKERNELAPI
 
5331
VOID
 
5332
NTAPI
 
5333
SeAuditHardLinkCreationWithTransaction(
 
5334
  IN PUNICODE_STRING FileName,
 
5335
  IN PUNICODE_STRING LinkName,
 
5336
  IN BOOLEAN bSuccess,
 
5337
  IN GUID *TransactionId OPTIONAL);
 
5338
 
 
5339
NTKERNELAPI
 
5340
VOID
 
5341
NTAPI
 
5342
SeAuditTransactionStateChange(
 
5343
  IN GUID *TransactionId,
 
5344
  IN GUID *ResourceManagerId,
 
5345
  IN ULONG NewTransactionState);
 
5346
#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 
5347
 
 
5348
#if (NTDDI_VERSION >= NTDDI_VISTA || (NTDDI_VERSION >= NTDDI_WINXPSP2 && NTDDI_VERSION < NTDDI_WS03))
 
5349
NTKERNELAPI
 
5350
BOOLEAN
 
5351
NTAPI
 
5352
SeTokenIsWriteRestricted(
 
5353
  IN PACCESS_TOKEN Token);
 
5354
#endif
 
5355
 
 
5356
#if (NTDDI_VERSION >= NTDDI_WIN7)
 
5357
 
 
5358
NTKERNELAPI
 
5359
BOOLEAN
 
5360
NTAPI
 
5361
SeAuditingAnyFileEventsWithContext(
 
5362
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
5363
  IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL);
 
5364
 
 
5365
NTKERNELAPI
 
5366
VOID
 
5367
NTAPI
 
5368
SeExamineGlobalSacl(
 
5369
  IN PUNICODE_STRING ObjectType,
 
5370
  IN PACCESS_TOKEN Token,
 
5371
  IN ACCESS_MASK DesiredAccess,
 
5372
  IN BOOLEAN AccessGranted,
 
5373
  IN OUT PBOOLEAN GenerateAudit,
 
5374
  IN OUT PBOOLEAN GenerateAlarm OPTIONAL);
 
5375
 
 
5376
NTKERNELAPI
 
5377
VOID
 
5378
NTAPI
 
5379
SeMaximumAuditMaskFromGlobalSacl(
 
5380
  IN PUNICODE_STRING ObjectTypeName OPTIONAL,
 
5381
  IN ACCESS_MASK GrantedAccess,
 
5382
  IN PACCESS_TOKEN Token,
 
5383
  IN OUT PACCESS_MASK AuditMask);
 
5384
 
 
5385
#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 
5386
 
 
5387
NTSTATUS
 
5388
NTAPI
 
5389
SeReportSecurityEventWithSubCategory(
 
5390
  IN ULONG Flags,
 
5391
  IN PUNICODE_STRING SourceName,
 
5392
  IN PSID UserSid OPTIONAL,
 
5393
  IN PSE_ADT_PARAMETER_ARRAY AuditParameters,
 
5394
  IN ULONG AuditSubcategoryId);
 
5395
 
 
5396
BOOLEAN
 
5397
NTAPI
 
5398
SeAccessCheckFromState(
 
5399
  IN PSECURITY_DESCRIPTOR SecurityDescriptor,
 
5400
  IN PTOKEN_ACCESS_INFORMATION PrimaryTokenInformation,
 
5401
  IN PTOKEN_ACCESS_INFORMATION ClientTokenInformation OPTIONAL,
 
5402
  IN ACCESS_MASK DesiredAccess,
 
5403
  IN ACCESS_MASK PreviouslyGrantedAccess,
 
5404
  OUT PPRIVILEGE_SET *Privileges OPTIONAL,
 
5405
  IN PGENERIC_MAPPING GenericMapping,
 
5406
  IN KPROCESSOR_MODE AccessMode,
 
5407
  OUT PACCESS_MASK GrantedAccess,
 
5408
  OUT PNTSTATUS AccessStatus);
 
5409
 
 
5410
NTKERNELAPI
 
5411
VOID
 
5412
NTAPI
 
5413
SeFreePrivileges(
 
5414
  IN PPRIVILEGE_SET Privileges);
 
5415
 
 
5416
NTSTATUS
 
5417
NTAPI
 
5418
SeLocateProcessImageName(
 
5419
  IN OUT PEPROCESS Process,
 
5420
  OUT PUNICODE_STRING *pImageFileName);
 
5421
 
 
5422
#define SeLengthSid( Sid ) \
 
5423
    (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
 
5424
 
 
5425
#define SeDeleteClientSecurity(C)  {                                           \
 
5426
            if (SeTokenType((C)->ClientToken) == TokenPrimary) {               \
 
5427
                PsDereferencePrimaryToken( (C)->ClientToken );                 \
 
5428
            } else {                                                           \
 
5429
                PsDereferenceImpersonationToken( (C)->ClientToken );           \
 
5430
            }                                                                  \
 
5431
}
 
5432
 
 
5433
#define SeStopImpersonatingClient() PsRevertToSelf()
 
5434
 
 
5435
#define SeQuerySubjectContextToken( SubjectContext )                \
 
5436
    ( ARGUMENT_PRESENT(                                             \
 
5437
        ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken   \
 
5438
        ) ?                                                         \
 
5439
    ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken :     \
 
5440
    ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
 
5441
 
 
5442
extern NTKERNELAPI PSE_EXPORTS SeExports;
 
5443
/******************************************************************************
 
5444
 *                          Process Manager Functions                         *
 
5445
 ******************************************************************************/
 
5446
 
 
5447
NTKERNELAPI
 
5448
NTSTATUS
 
5449
NTAPI
 
5450
PsLookupProcessByProcessId(
 
5451
  IN HANDLE ProcessId,
 
5452
  OUT PEPROCESS *Process);
 
5453
 
 
5454
NTKERNELAPI
 
5455
NTSTATUS
 
5456
NTAPI
 
5457
PsLookupThreadByThreadId(
 
5458
  IN HANDLE UniqueThreadId,
 
5459
  OUT PETHREAD *Thread);
 
5460
 
 
5461
#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
5462
 
 
5463
 
 
5464
NTKERNELAPI
 
5465
PACCESS_TOKEN
 
5466
NTAPI
 
5467
PsReferenceImpersonationToken(
 
5468
  IN OUT PETHREAD Thread,
 
5469
  OUT PBOOLEAN CopyOnOpen,
 
5470
  OUT PBOOLEAN EffectiveOnly,
 
5471
  OUT PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
 
5472
 
 
5473
NTKERNELAPI
 
5474
LARGE_INTEGER
 
5475
NTAPI
 
5476
PsGetProcessExitTime(VOID);
 
5477
 
 
5478
NTKERNELAPI
 
5479
BOOLEAN
 
5480
NTAPI
 
5481
PsIsThreadTerminating(
 
5482
  IN PETHREAD Thread);
 
5483
 
 
5484
NTKERNELAPI
 
5485
NTSTATUS
 
5486
NTAPI
 
5487
PsImpersonateClient(
 
5488
  IN OUT PETHREAD Thread,
 
5489
  IN PACCESS_TOKEN Token,
 
5490
  IN BOOLEAN CopyOnOpen,
 
5491
  IN BOOLEAN EffectiveOnly,
 
5492
  IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
 
5493
 
 
5494
NTKERNELAPI
 
5495
BOOLEAN
 
5496
NTAPI
 
5497
PsDisableImpersonation(
 
5498
  IN OUT PETHREAD Thread,
 
5499
  IN OUT PSE_IMPERSONATION_STATE ImpersonationState);
 
5500
 
 
5501
NTKERNELAPI
 
5502
VOID
 
5503
NTAPI
 
5504
PsRestoreImpersonation(
 
5505
  IN PETHREAD Thread,
 
5506
  IN PSE_IMPERSONATION_STATE ImpersonationState);
 
5507
 
 
5508
NTKERNELAPI
 
5509
VOID
 
5510
NTAPI
 
5511
PsRevertToSelf(VOID);
 
5512
 
 
5513
NTKERNELAPI
 
5514
VOID
 
5515
NTAPI
 
5516
PsChargePoolQuota(
 
5517
  IN PEPROCESS Process,
 
5518
  IN POOL_TYPE PoolType,
 
5519
  IN ULONG_PTR Amount);
 
5520
 
 
5521
NTKERNELAPI
 
5522
VOID
 
5523
NTAPI
 
5524
PsReturnPoolQuota(
 
5525
  IN PEPROCESS Process,
 
5526
  IN POOL_TYPE PoolType,
 
5527
  IN ULONG_PTR Amount);
 
5528
 
 
5529
NTKERNELAPI
 
5530
NTSTATUS
 
5531
NTAPI
 
5532
PsAssignImpersonationToken(
 
5533
  IN PETHREAD Thread,
 
5534
  IN HANDLE Token OPTIONAL);
 
5535
 
 
5536
NTKERNELAPI
 
5537
HANDLE
 
5538
NTAPI
 
5539
PsReferencePrimaryToken(
 
5540
  IN OUT PEPROCESS Process);
 
5541
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 
5542
#if (NTDDI_VERSION >= NTDDI_WINXP)
 
5543
 
 
5544
 
 
5545
NTKERNELAPI
 
5546
VOID
 
5547
NTAPI
 
5548
PsDereferencePrimaryToken(
 
5549
  IN PACCESS_TOKEN PrimaryToken);
 
5550
 
 
5551
NTKERNELAPI
 
5552
VOID
 
5553
NTAPI
 
5554
PsDereferenceImpersonationToken(
 
5555
  IN PACCESS_TOKEN ImpersonationToken);
 
5556
 
 
5557
NTKERNELAPI
 
5558
NTSTATUS
 
5559
NTAPI
 
5560
PsChargeProcessPoolQuota(
 
5561
  IN PEPROCESS Process,
 
5562
  IN POOL_TYPE PoolType,
 
5563
  IN ULONG_PTR Amount);
 
5564
 
 
5565
NTKERNELAPI
 
5566
BOOLEAN
 
5567
NTAPI
 
5568
PsIsSystemThread(
 
5569
  IN PETHREAD Thread);
 
5570
#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 
5571
 
 
5572
/******************************************************************************
 
5573
 *                         I/O Manager Functions                              *
 
5574
 ******************************************************************************/
 
5575
 
 
5576
#define IoIsFileOpenedExclusively(FileObject) ( \
 
5577
    (BOOLEAN) !(                                \
 
5578
    (FileObject)->SharedRead ||                 \
 
5579
    (FileObject)->SharedWrite ||                \
 
5580
    (FileObject)->SharedDelete                  \
 
5581
    )                                           \
 
5582
)
 
5583
 
 
5584
#if (NTDDI_VERSION == NTDDI_WIN2K)
 
5585
NTKERNELAPI
 
5586
NTSTATUS
 
5587
NTAPI
 
5588
IoRegisterFsRegistrationChangeEx(
 
5589
  IN PDRIVER_OBJECT DriverObject,
 
5590
  IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
 
5591
#endif
 
5592
#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
5593
 
 
5594
 
 
5595
NTKERNELAPI
 
5596
VOID
 
5597
NTAPI
 
5598
IoAcquireVpbSpinLock(
 
5599
  OUT PKIRQL Irql);
 
5600
 
 
5601
NTKERNELAPI
 
5602
NTSTATUS
 
5603
NTAPI
 
5604
IoCheckDesiredAccess(
 
5605
  IN OUT PACCESS_MASK DesiredAccess,
 
5606
  IN ACCESS_MASK GrantedAccess);
 
5607
 
 
5608
NTKERNELAPI
 
5609
NTSTATUS
 
5610
NTAPI
 
5611
IoCheckEaBufferValidity(
 
5612
  IN PFILE_FULL_EA_INFORMATION EaBuffer,
 
5613
  IN ULONG EaLength,
 
5614
  OUT PULONG ErrorOffset);
 
5615
 
 
5616
NTKERNELAPI
 
5617
NTSTATUS
 
5618
NTAPI
 
5619
IoCheckFunctionAccess(
 
5620
  IN ACCESS_MASK GrantedAccess,
 
5621
  IN UCHAR MajorFunction,
 
5622
  IN UCHAR MinorFunction,
 
5623
  IN ULONG IoControlCode,
 
5624
  IN PVOID Argument1 OPTIONAL,
 
5625
  IN PVOID Argument2 OPTIONAL);
 
5626
 
 
5627
NTKERNELAPI
 
5628
NTSTATUS
 
5629
NTAPI
 
5630
IoCheckQuerySetFileInformation(
 
5631
  IN FILE_INFORMATION_CLASS FileInformationClass,
 
5632
  IN ULONG Length,
 
5633
  IN BOOLEAN SetOperation);
 
5634
 
 
5635
NTKERNELAPI
 
5636
NTSTATUS
 
5637
NTAPI
 
5638
IoCheckQuerySetVolumeInformation(
 
5639
  IN FS_INFORMATION_CLASS FsInformationClass,
 
5640
  IN ULONG Length,
 
5641
  IN BOOLEAN SetOperation);
 
5642
 
 
5643
NTKERNELAPI
 
5644
NTSTATUS
 
5645
NTAPI
 
5646
IoCheckQuotaBufferValidity(
 
5647
  IN PFILE_QUOTA_INFORMATION QuotaBuffer,
 
5648
  IN ULONG QuotaLength,
 
5649
  OUT PULONG ErrorOffset);
 
5650
 
 
5651
NTKERNELAPI
 
5652
PFILE_OBJECT
 
5653
NTAPI
 
5654
IoCreateStreamFileObject(
 
5655
  IN PFILE_OBJECT FileObject OPTIONAL,
 
5656
  IN PDEVICE_OBJECT DeviceObject OPTIONAL);
 
5657
 
 
5658
NTKERNELAPI
 
5659
PFILE_OBJECT
 
5660
NTAPI
 
5661
IoCreateStreamFileObjectLite(
 
5662
  IN PFILE_OBJECT FileObject OPTIONAL,
 
5663
  IN PDEVICE_OBJECT DeviceObject OPTIONAL);
 
5664
 
 
5665
NTKERNELAPI
 
5666
BOOLEAN
 
5667
NTAPI
 
5668
IoFastQueryNetworkAttributes(
 
5669
  IN POBJECT_ATTRIBUTES ObjectAttributes,
 
5670
  IN ACCESS_MASK DesiredAccess,
 
5671
  IN ULONG OpenOptions,
 
5672
  OUT PIO_STATUS_BLOCK IoStatus,
 
5673
  OUT PFILE_NETWORK_OPEN_INFORMATION Buffer);
 
5674
 
 
5675
NTKERNELAPI
 
5676
NTSTATUS
 
5677
NTAPI
 
5678
IoPageRead(
 
5679
  IN PFILE_OBJECT FileObject,
 
5680
  IN PMDL Mdl,
 
5681
  IN PLARGE_INTEGER Offset,
 
5682
  IN PKEVENT Event,
 
5683
  OUT PIO_STATUS_BLOCK IoStatusBlock);
 
5684
 
 
5685
NTKERNELAPI
 
5686
PDEVICE_OBJECT
 
5687
NTAPI
 
5688
IoGetBaseFileSystemDeviceObject(
 
5689
  IN PFILE_OBJECT FileObject);
 
5690
 
 
5691
NTKERNELAPI
 
5692
PCONFIGURATION_INFORMATION
 
5693
NTAPI
 
5694
IoGetConfigurationInformation(VOID);
 
5695
 
 
5696
NTKERNELAPI
 
5697
ULONG
 
5698
NTAPI
 
5699
IoGetRequestorProcessId(
 
5700
  IN PIRP Irp);
 
5701
 
 
5702
NTKERNELAPI
 
5703
PEPROCESS
 
5704
NTAPI
 
5705
IoGetRequestorProcess(
 
5706
  IN PIRP Irp);
 
5707
 
 
5708
NTKERNELAPI
 
5709
PIRP
 
5710
NTAPI
 
5711
IoGetTopLevelIrp(VOID);
 
5712
 
 
5713
NTKERNELAPI
 
5714
BOOLEAN
 
5715
NTAPI
 
5716
IoIsOperationSynchronous(
 
5717
  IN PIRP Irp);
 
5718
 
 
5719
NTKERNELAPI
 
5720
BOOLEAN
 
5721
NTAPI
 
5722
IoIsSystemThread(
 
5723
  IN PETHREAD Thread);
 
5724
 
 
5725
NTKERNELAPI
 
5726
BOOLEAN
 
5727
NTAPI
 
5728
IoIsValidNameGraftingBuffer(
 
5729
  IN PIRP Irp,
 
5730
  IN PREPARSE_DATA_BUFFER ReparseBuffer);
 
5731
 
 
5732
NTKERNELAPI
 
5733
NTSTATUS
 
5734
NTAPI
 
5735
IoQueryFileInformation(
 
5736
  IN PFILE_OBJECT FileObject,
 
5737
  IN FILE_INFORMATION_CLASS FileInformationClass,
 
5738
  IN ULONG Length,
 
5739
  OUT PVOID FileInformation,
 
5740
  OUT PULONG ReturnedLength);
 
5741
 
 
5742
NTKERNELAPI
 
5743
NTSTATUS
 
5744
NTAPI
 
5745
IoQueryVolumeInformation(
 
5746
  IN PFILE_OBJECT FileObject,
 
5747
  IN FS_INFORMATION_CLASS FsInformationClass,
 
5748
  IN ULONG Length,
 
5749
  OUT PVOID FsInformation,
 
5750
  OUT PULONG ReturnedLength);
 
5751
 
 
5752
NTKERNELAPI
 
5753
VOID
 
5754
NTAPI
 
5755
IoQueueThreadIrp(
 
5756
  IN PIRP Irp);
 
5757
 
 
5758
NTKERNELAPI
 
5759
VOID
 
5760
NTAPI
 
5761
IoRegisterFileSystem(
 
5762
  IN PDEVICE_OBJECT DeviceObject);
 
5763
 
 
5764
NTKERNELAPI
 
5765
NTSTATUS
 
5766
NTAPI
 
5767
IoRegisterFsRegistrationChange(
 
5768
  IN PDRIVER_OBJECT DriverObject,
 
5769
  IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
 
5770
 
 
5771
NTKERNELAPI
 
5772
VOID
 
5773
NTAPI
 
5774
IoReleaseVpbSpinLock(
 
5775
  IN KIRQL Irql);
 
5776
 
 
5777
NTKERNELAPI
 
5778
VOID
 
5779
NTAPI
 
5780
IoSetDeviceToVerify(
 
5781
  IN PETHREAD Thread,
 
5782
  IN PDEVICE_OBJECT DeviceObject OPTIONAL);
 
5783
 
 
5784
NTKERNELAPI
 
5785
NTSTATUS
 
5786
NTAPI
 
5787
IoSetInformation(
 
5788
  IN PFILE_OBJECT FileObject,
 
5789
  IN FILE_INFORMATION_CLASS FileInformationClass,
 
5790
  IN ULONG Length,
 
5791
  IN PVOID FileInformation);
 
5792
 
 
5793
NTKERNELAPI
 
5794
VOID
 
5795
NTAPI
 
5796
IoSetTopLevelIrp(
 
5797
  IN PIRP Irp OPTIONAL);
 
5798
 
 
5799
NTKERNELAPI
 
5800
NTSTATUS
 
5801
NTAPI
 
5802
IoSynchronousPageWrite(
 
5803
  IN PFILE_OBJECT FileObject,
 
5804
  IN PMDL Mdl,
 
5805
  IN PLARGE_INTEGER FileOffset,
 
5806
  IN PKEVENT Event,
 
5807
  OUT PIO_STATUS_BLOCK IoStatusBlock);
 
5808
 
 
5809
NTKERNELAPI
 
5810
PEPROCESS
 
5811
NTAPI
 
5812
IoThreadToProcess(
 
5813
  IN PETHREAD Thread);
 
5814
 
 
5815
NTKERNELAPI
 
5816
VOID
 
5817
NTAPI
 
5818
IoUnregisterFileSystem(
 
5819
  IN PDEVICE_OBJECT DeviceObject);
 
5820
 
 
5821
NTKERNELAPI
 
5822
VOID
 
5823
NTAPI
 
5824
IoUnregisterFsRegistrationChange(
 
5825
  IN PDRIVER_OBJECT DriverObject,
 
5826
  IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
 
5827
 
 
5828
NTKERNELAPI
 
5829
NTSTATUS
 
5830
NTAPI
 
5831
IoVerifyVolume(
 
5832
  IN PDEVICE_OBJECT DeviceObject,
 
5833
  IN BOOLEAN AllowRawMount);
 
5834
 
 
5835
NTKERNELAPI
 
5836
NTSTATUS
 
5837
NTAPI
 
5838
IoGetRequestorSessionId(
 
5839
  IN PIRP Irp,
 
5840
  OUT PULONG pSessionId);
 
5841
 
 
5842
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 
5843
 
 
5844
 
 
5845
#if (NTDDI_VERSION >= NTDDI_WINXP)
 
5846
 
 
5847
 
 
5848
NTKERNELAPI
 
5849
PFILE_OBJECT
 
5850
NTAPI
 
5851
IoCreateStreamFileObjectEx(
 
5852
  IN PFILE_OBJECT FileObject OPTIONAL,
 
5853
  IN PDEVICE_OBJECT DeviceObject OPTIONAL,
 
5854
  OUT PHANDLE FileObjectHandle OPTIONAL);
 
5855
 
 
5856
NTKERNELAPI
 
5857
NTSTATUS
 
5858
NTAPI
 
5859
IoQueryFileDosDeviceName(
 
5860
  IN PFILE_OBJECT FileObject,
 
5861
  OUT POBJECT_NAME_INFORMATION *ObjectNameInformation);
 
5862
 
 
5863
NTKERNELAPI
 
5864
NTSTATUS
 
5865
NTAPI
 
5866
IoEnumerateDeviceObjectList(
 
5867
  IN PDRIVER_OBJECT DriverObject,
 
5868
  OUT PDEVICE_OBJECT *DeviceObjectList,
 
5869
  IN ULONG DeviceObjectListSize,
 
5870
  OUT PULONG ActualNumberDeviceObjects);
 
5871
 
 
5872
NTKERNELAPI
 
5873
PDEVICE_OBJECT
 
5874
NTAPI
 
5875
IoGetLowerDeviceObject(
 
5876
  IN PDEVICE_OBJECT DeviceObject);
 
5877
 
 
5878
NTKERNELAPI
 
5879
PDEVICE_OBJECT
 
5880
NTAPI
 
5881
IoGetDeviceAttachmentBaseRef(
 
5882
  IN PDEVICE_OBJECT DeviceObject);
 
5883
 
 
5884
NTKERNELAPI
 
5885
NTSTATUS
 
5886
NTAPI
 
5887
IoGetDiskDeviceObject(
 
5888
  IN PDEVICE_OBJECT FileSystemDeviceObject,
 
5889
  OUT PDEVICE_OBJECT *DiskDeviceObject);
 
5890
 
 
5891
#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 
5892
 
 
5893
#if (NTDDI_VERSION >= NTDDI_WS03SP1)
 
5894
 
 
5895
 
 
5896
NTKERNELAPI
 
5897
NTSTATUS
 
5898
NTAPI
 
5899
IoEnumerateRegisteredFiltersList(
 
5900
  OUT PDRIVER_OBJECT *DriverObjectList,
 
5901
  IN ULONG DriverObjectListSize,
 
5902
  OUT PULONG ActualNumberDriverObjects);
 
5903
#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
 
5904
 
 
5905
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
5906
 
 
5907
FORCEINLINE
 
5908
VOID
 
5909
NTAPI
 
5910
IoInitializePriorityInfo(
 
5911
  IN PIO_PRIORITY_INFO PriorityInfo)
 
5912
{
 
5913
  PriorityInfo->Size = sizeof(IO_PRIORITY_INFO);
 
5914
  PriorityInfo->ThreadPriority = 0xffff;
 
5915
  PriorityInfo->IoPriority = IoPriorityNormal;
 
5916
  PriorityInfo->PagePriority = 0;
 
5917
}
 
5918
#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 
5919
 
 
5920
#if (NTDDI_VERSION >= NTDDI_WIN7)
 
5921
 
 
5922
 
 
5923
NTKERNELAPI
 
5924
NTSTATUS
 
5925
NTAPI
 
5926
IoRegisterFsRegistrationChangeMountAware(
 
5927
  IN PDRIVER_OBJECT DriverObject,
 
5928
  IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine,
 
5929
  IN BOOLEAN SynchronizeWithMounts);
 
5930
 
 
5931
NTKERNELAPI
 
5932
NTSTATUS
 
5933
NTAPI
 
5934
IoReplaceFileObjectName(
 
5935
  IN PFILE_OBJECT FileObject,
 
5936
  IN PWSTR NewFileName,
 
5937
  IN USHORT FileNameLength);
 
5938
#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 
5939
 
 
5940
 
 
5941
#define PO_CB_SYSTEM_POWER_POLICY       0
 
5942
#define PO_CB_AC_STATUS                 1
 
5943
#define PO_CB_BUTTON_COLLISION          2
 
5944
#define PO_CB_SYSTEM_STATE_LOCK         3
 
5945
#define PO_CB_LID_SWITCH_STATE          4
 
5946
#define PO_CB_PROCESSOR_POWER_POLICY    5
 
5947
 
 
5948
 
 
5949
#if (NTDDI_VERSION >= NTDDI_WINXP)
 
5950
NTKERNELAPI
 
5951
NTSTATUS
 
5952
NTAPI
 
5953
PoQueueShutdownWorkItem(
 
5954
  IN OUT PWORK_QUEUE_ITEM WorkItem);
 
5955
#endif
 
5956
/******************************************************************************
 
5957
 *                         Memory manager Types                               *
 
5958
 ******************************************************************************/
 
5959
typedef enum _MMFLUSH_TYPE {
 
5960
  MmFlushForDelete,
 
5961
  MmFlushForWrite
 
5962
} MMFLUSH_TYPE;
 
5963
 
 
5964
typedef struct _READ_LIST {
 
5965
  PFILE_OBJECT FileObject;
 
5966
  ULONG NumberOfEntries;
 
5967
  LOGICAL IsImage;
 
5968
  FILE_SEGMENT_ELEMENT List[ANYSIZE_ARRAY];
 
5969
} READ_LIST, *PREAD_LIST;
 
5970
 
 
5971
#if (NTDDI_VERSION >= NTDDI_WINXP)
 
5972
 
 
5973
typedef union _MM_PREFETCH_FLAGS {
 
5974
  struct {
 
5975
    ULONG Priority : SYSTEM_PAGE_PRIORITY_BITS;
 
5976
    ULONG RepurposePriority : SYSTEM_PAGE_PRIORITY_BITS;
 
5977
  } Flags;
 
5978
  ULONG AllFlags;
 
5979
} MM_PREFETCH_FLAGS, *PMM_PREFETCH_FLAGS;
 
5980
 
 
5981
#define MM_PREFETCH_FLAGS_MASK ((1 << (2*SYSTEM_PAGE_PRIORITY_BITS)) - 1)
 
5982
 
 
5983
#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 
5984
 
 
5985
#define HEAP_NO_SERIALIZE               0x00000001
 
5986
#define HEAP_GROWABLE                   0x00000002
 
5987
#define HEAP_GENERATE_EXCEPTIONS        0x00000004
 
5988
#define HEAP_ZERO_MEMORY                0x00000008
 
5989
#define HEAP_REALLOC_IN_PLACE_ONLY      0x00000010
 
5990
#define HEAP_TAIL_CHECKING_ENABLED      0x00000020
 
5991
#define HEAP_FREE_CHECKING_ENABLED      0x00000040
 
5992
#define HEAP_DISABLE_COALESCE_ON_FREE   0x00000080
 
5993
 
 
5994
#define HEAP_CREATE_ALIGN_16            0x00010000
 
5995
#define HEAP_CREATE_ENABLE_TRACING      0x00020000
 
5996
#define HEAP_CREATE_ENABLE_EXECUTE      0x00040000
 
5997
 
 
5998
#define HEAP_SETTABLE_USER_VALUE        0x00000100
 
5999
#define HEAP_SETTABLE_USER_FLAG1        0x00000200
 
6000
#define HEAP_SETTABLE_USER_FLAG2        0x00000400
 
6001
#define HEAP_SETTABLE_USER_FLAG3        0x00000800
 
6002
#define HEAP_SETTABLE_USER_FLAGS        0x00000E00
 
6003
 
 
6004
#define HEAP_CLASS_0                    0x00000000
 
6005
#define HEAP_CLASS_1                    0x00001000
 
6006
#define HEAP_CLASS_2                    0x00002000
 
6007
#define HEAP_CLASS_3                    0x00003000
 
6008
#define HEAP_CLASS_4                    0x00004000
 
6009
#define HEAP_CLASS_5                    0x00005000
 
6010
#define HEAP_CLASS_6                    0x00006000
 
6011
#define HEAP_CLASS_7                    0x00007000
 
6012
#define HEAP_CLASS_8                    0x00008000
 
6013
#define HEAP_CLASS_MASK                 0x0000F000
 
6014
 
 
6015
#define HEAP_MAXIMUM_TAG                0x0FFF
 
6016
#define HEAP_GLOBAL_TAG                 0x0800
 
6017
#define HEAP_PSEUDO_TAG_FLAG            0x8000
 
6018
#define HEAP_TAG_SHIFT                  18
 
6019
#define HEAP_TAG_MASK                  (HEAP_MAXIMUM_TAG << HEAP_TAG_SHIFT)
 
6020
 
 
6021
#define HEAP_CREATE_VALID_MASK         (HEAP_NO_SERIALIZE             |   \
 
6022
                                        HEAP_GROWABLE                 |   \
 
6023
                                        HEAP_GENERATE_EXCEPTIONS      |   \
 
6024
                                        HEAP_ZERO_MEMORY              |   \
 
6025
                                        HEAP_REALLOC_IN_PLACE_ONLY    |   \
 
6026
                                        HEAP_TAIL_CHECKING_ENABLED    |   \
 
6027
                                        HEAP_FREE_CHECKING_ENABLED    |   \
 
6028
                                        HEAP_DISABLE_COALESCE_ON_FREE |   \
 
6029
                                        HEAP_CLASS_MASK               |   \
 
6030
                                        HEAP_CREATE_ALIGN_16          |   \
 
6031
                                        HEAP_CREATE_ENABLE_TRACING    |   \
 
6032
                                        HEAP_CREATE_ENABLE_EXECUTE)
 
6033
 
 
6034
/******************************************************************************
 
6035
 *                       Memory manager Functions                             *
 
6036
 ******************************************************************************/
 
6037
 
 
6038
FORCEINLINE
 
6039
ULONG
 
6040
HEAP_MAKE_TAG_FLAGS(
 
6041
  IN ULONG TagBase,
 
6042
  IN ULONG Tag)
 
6043
{
 
6044
  //__assume_bound(TagBase); // FIXME
 
6045
  return ((ULONG)((TagBase) + ((Tag) << HEAP_TAG_SHIFT)));
 
6046
}
 
6047
 
 
6048
#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
6049
 
 
6050
NTKERNELAPI
 
6051
BOOLEAN
 
6052
NTAPI
 
6053
MmIsRecursiveIoFault(
 
6054
  VOID);
 
6055
 
 
6056
NTKERNELAPI
 
6057
BOOLEAN
 
6058
NTAPI
 
6059
MmForceSectionClosed(
 
6060
  IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
 
6061
  IN BOOLEAN DelayClose);
 
6062
 
 
6063
NTKERNELAPI
 
6064
BOOLEAN
 
6065
NTAPI
 
6066
MmFlushImageSection(
 
6067
  IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
 
6068
  IN MMFLUSH_TYPE FlushType);
 
6069
 
 
6070
NTKERNELAPI
 
6071
BOOLEAN
 
6072
NTAPI
 
6073
MmCanFileBeTruncated(
 
6074
  IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
 
6075
  IN PLARGE_INTEGER NewFileSize OPTIONAL);
 
6076
 
 
6077
NTKERNELAPI
 
6078
BOOLEAN
 
6079
NTAPI
 
6080
MmSetAddressRangeModified(
 
6081
  IN PVOID Address,
 
6082
  IN SIZE_T Length);
 
6083
 
 
6084
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 
6085
 
 
6086
#if (NTDDI_VERSION >= NTDDI_WINXP)
 
6087
 
 
6088
 
 
6089
NTKERNELAPI
 
6090
NTSTATUS
 
6091
NTAPI
 
6092
MmPrefetchPages(
 
6093
  IN ULONG NumberOfLists,
 
6094
  IN PREAD_LIST *ReadLists);
 
6095
 
 
6096
#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 
6097
 
 
6098
 
 
6099
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
6100
 
 
6101
NTKERNELAPI
 
6102
ULONG
 
6103
NTAPI
 
6104
MmDoesFileHaveUserWritableReferences(
 
6105
  IN PSECTION_OBJECT_POINTERS SectionPointer);
 
6106
#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 
6107
 
 
6108
 
 
6109
#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
6110
 
 
6111
NTKERNELAPI
 
6112
NTSTATUS
 
6113
NTAPI
 
6114
ObInsertObject(
 
6115
  IN PVOID Object,
 
6116
  IN OUT PACCESS_STATE PassedAccessState OPTIONAL,
 
6117
  IN ACCESS_MASK DesiredAccess OPTIONAL,
 
6118
  IN ULONG ObjectPointerBias,
 
6119
  OUT PVOID *NewObject OPTIONAL,
 
6120
  OUT PHANDLE Handle OPTIONAL);
 
6121
 
 
6122
NTKERNELAPI
 
6123
NTSTATUS
 
6124
NTAPI
 
6125
ObOpenObjectByPointer(
 
6126
  IN PVOID Object,
 
6127
  IN ULONG HandleAttributes,
 
6128
  IN PACCESS_STATE PassedAccessState OPTIONAL,
 
6129
  IN ACCESS_MASK DesiredAccess OPTIONAL,
 
6130
  IN POBJECT_TYPE ObjectType OPTIONAL,
 
6131
  IN KPROCESSOR_MODE AccessMode,
 
6132
  OUT PHANDLE Handle);
 
6133
 
 
6134
NTKERNELAPI
 
6135
VOID
 
6136
NTAPI
 
6137
ObMakeTemporaryObject(
 
6138
  IN PVOID Object);
 
6139
 
 
6140
NTKERNELAPI
 
6141
NTSTATUS
 
6142
NTAPI
 
6143
ObQueryNameString(
 
6144
  IN PVOID Object,
 
6145
  OUT POBJECT_NAME_INFORMATION ObjectNameInfo OPTIONAL,
 
6146
  IN ULONG Length,
 
6147
  OUT PULONG ReturnLength);
 
6148
 
 
6149
NTKERNELAPI
 
6150
NTSTATUS
 
6151
NTAPI
 
6152
ObQueryObjectAuditingByHandle(
 
6153
  IN HANDLE Handle,
 
6154
  OUT PBOOLEAN GenerateOnClose);
 
6155
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 
6156
 
 
6157
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
6158
 
 
6159
NTKERNELAPI
 
6160
BOOLEAN
 
6161
NTAPI
 
6162
ObIsKernelHandle(
 
6163
  IN HANDLE Handle);
 
6164
#endif
 
6165
 
 
6166
 
 
6167
#if (NTDDI_VERSION >= NTDDI_WIN7)
 
6168
 
 
6169
NTKERNELAPI
 
6170
NTSTATUS
 
6171
NTAPI
 
6172
ObOpenObjectByPointerWithTag(
 
6173
  IN PVOID Object,
 
6174
  IN ULONG HandleAttributes,
 
6175
  IN PACCESS_STATE PassedAccessState OPTIONAL,
 
6176
  IN ACCESS_MASK DesiredAccess,
 
6177
  IN POBJECT_TYPE ObjectType OPTIONAL,
 
6178
  IN KPROCESSOR_MODE AccessMode,
 
6179
  IN ULONG Tag,
 
6180
  OUT PHANDLE Handle);
 
6181
#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 
6182
 
 
6183
/* FSRTL Types */
 
6184
 
 
6185
typedef ULONG LBN;
 
6186
typedef LBN *PLBN;
 
6187
 
 
6188
typedef ULONG VBN;
 
6189
typedef VBN *PVBN;
 
6190
 
 
6191
#define FSRTL_COMMON_FCB_HEADER_LAYOUT \
 
6192
  CSHORT NodeTypeCode; \
 
6193
  CSHORT NodeByteSize; \
 
6194
  UCHAR Flags; \
 
6195
  UCHAR IsFastIoPossible; \
 
6196
  UCHAR Flags2; \
 
6197
  UCHAR Reserved:4; \
 
6198
  UCHAR Version:4; \
 
6199
  PERESOURCE Resource; \
 
6200
  PERESOURCE PagingIoResource; \
 
6201
  LARGE_INTEGER AllocationSize; \
 
6202
  LARGE_INTEGER FileSize; \
 
6203
  LARGE_INTEGER ValidDataLength;
 
6204
 
 
6205
typedef struct _FSRTL_COMMON_FCB_HEADER {
 
6206
  FSRTL_COMMON_FCB_HEADER_LAYOUT
 
6207
} FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER;
 
6208
 
 
6209
#ifdef __cplusplus
 
6210
typedef struct _FSRTL_ADVANCED_FCB_HEADER:FSRTL_COMMON_FCB_HEADER {
 
6211
#else /* __cplusplus */
 
6212
typedef struct _FSRTL_ADVANCED_FCB_HEADER {
 
6213
  FSRTL_COMMON_FCB_HEADER_LAYOUT
 
6214
#endif  /* __cplusplus */
 
6215
  PFAST_MUTEX FastMutex;
 
6216
  LIST_ENTRY FilterContexts;
 
6217
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
6218
  EX_PUSH_LOCK PushLock;
 
6219
  PVOID *FileContextSupportPointer;
 
6220
#endif
 
6221
} FSRTL_ADVANCED_FCB_HEADER, *PFSRTL_ADVANCED_FCB_HEADER;
 
6222
 
 
6223
#define FSRTL_FCB_HEADER_V0             (0x00)
 
6224
#define FSRTL_FCB_HEADER_V1             (0x01)
 
6225
 
269
6226
#define FSRTL_FLAG_FILE_MODIFIED        (0x01)
270
6227
#define FSRTL_FLAG_FILE_LENGTH_CHANGED  (0x02)
271
6228
#define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
284
6241
#define FSRTL_CACHE_TOP_LEVEL_IRP       (0x02)
285
6242
#define FSRTL_MOD_WRITE_TOP_LEVEL_IRP   (0x03)
286
6243
#define FSRTL_FAST_IO_TOP_LEVEL_IRP     (0x04)
287
 
#define FSRTL_MAX_TOP_LEVEL_IRP_FLAG    (0x04)
 
6244
#define FSRTL_NETWORK1_TOP_LEVEL_IRP    ((LONG_PTR)0x05)
 
6245
#define FSRTL_NETWORK2_TOP_LEVEL_IRP    ((LONG_PTR)0x06)
 
6246
#define FSRTL_MAX_TOP_LEVEL_IRP_FLAG    ((LONG_PTR)0xFFFF)
 
6247
 
 
6248
typedef struct _FSRTL_AUXILIARY_BUFFER {
 
6249
  PVOID Buffer;
 
6250
  ULONG Length;
 
6251
  ULONG Flags;
 
6252
  PMDL Mdl;
 
6253
} FSRTL_AUXILIARY_BUFFER, *PFSRTL_AUXILIARY_BUFFER;
 
6254
 
 
6255
#define FSRTL_AUXILIARY_FLAG_DEALLOCATE 0x00000001
 
6256
 
 
6257
typedef enum _FSRTL_COMPARISON_RESULT {
 
6258
  LessThan = -1,
 
6259
  EqualTo = 0,
 
6260
  GreaterThan = 1
 
6261
} FSRTL_COMPARISON_RESULT;
 
6262
 
 
6263
#define FSRTL_FAT_LEGAL                 0x01
 
6264
#define FSRTL_HPFS_LEGAL                0x02
 
6265
#define FSRTL_NTFS_LEGAL                0x04
 
6266
#define FSRTL_WILD_CHARACTER            0x08
 
6267
#define FSRTL_OLE_LEGAL                 0x10
 
6268
#define FSRTL_NTFS_STREAM_LEGAL         (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL)
288
6269
 
289
6270
#define FSRTL_VOLUME_DISMOUNT           1
290
6271
#define FSRTL_VOLUME_DISMOUNT_FAILED    2
292
6273
#define FSRTL_VOLUME_LOCK_FAILED        4
293
6274
#define FSRTL_VOLUME_UNLOCK             5
294
6275
#define FSRTL_VOLUME_MOUNT              6
295
 
 
296
 
#define FSRTL_WILD_CHARACTER            0x08
297
 
 
298
 
#define FSRTL_FAT_LEGAL                 0x01
299
 
#define FSRTL_HPFS_LEGAL                0x02
300
 
#define FSRTL_NTFS_LEGAL                0x04
301
 
#define FSRTL_WILD_CHARACTER            0x08
302
 
#define FSRTL_OLE_LEGAL                 0x10
303
 
#define FSRTL_NTFS_STREAM_LEGAL         0x14
 
6276
#define FSRTL_VOLUME_NEEDS_CHKDSK       7
 
6277
#define FSRTL_VOLUME_WORM_NEAR_FULL     8
 
6278
#define FSRTL_VOLUME_WEARING_OUT        9
 
6279
#define FSRTL_VOLUME_FORCED_CLOSED      10
 
6280
#define FSRTL_VOLUME_INFO_MAKE_COMPAT   11
 
6281
#define FSRTL_VOLUME_PREPARING_EJECT    12
 
6282
#define FSRTL_VOLUME_CHANGE_SIZE        13
 
6283
#define FSRTL_VOLUME_BACKGROUND_FORMAT  14
 
6284
 
 
6285
typedef VOID
 
6286
(NTAPI *PFSRTL_STACK_OVERFLOW_ROUTINE) (
 
6287
  IN PVOID Context,
 
6288
  IN PKEVENT Event);
 
6289
 
 
6290
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
6291
 
 
6292
#define FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED    0x00000001
 
6293
#define FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED            0x00000002
 
6294
#define FSRTL_UNC_PROVIDER_FLAGS_DOMAIN_SVC_AWARE       0x00000004
 
6295
 
 
6296
#define FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA           0x00000001
 
6297
 
 
6298
#define FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA               0x00000001
 
6299
#define FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL              0x00000002
 
6300
 
 
6301
#define FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL             0x00000002
 
6302
 
 
6303
#define FSRTL_VIRTDISK_FULLY_ALLOCATED  0x00000001
 
6304
#define FSRTL_VIRTDISK_NO_DRIVE_LETTER  0x00000002
 
6305
 
 
6306
typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_1 {
 
6307
  ULONG32 ProviderId;
 
6308
} FSRTL_MUP_PROVIDER_INFO_LEVEL_1, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_1;
 
6309
 
 
6310
typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_2 {
 
6311
  ULONG32 ProviderId;
 
6312
  UNICODE_STRING ProviderName;
 
6313
} FSRTL_MUP_PROVIDER_INFO_LEVEL_2, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_2;
 
6314
 
 
6315
typedef VOID
 
6316
(*PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK) (
 
6317
  IN OUT PVOID EcpContext,
 
6318
  IN LPCGUID EcpType);
 
6319
 
 
6320
typedef struct _ECP_LIST ECP_LIST, *PECP_LIST;
 
6321
 
 
6322
typedef ULONG FSRTL_ALLOCATE_ECPLIST_FLAGS;
 
6323
typedef ULONG FSRTL_ALLOCATE_ECP_FLAGS;
 
6324
typedef ULONG FSRTL_ECP_LOOKASIDE_FLAGS;
 
6325
 
 
6326
typedef enum _FSRTL_CHANGE_BACKING_TYPE {
 
6327
  ChangeDataControlArea,
 
6328
  ChangeImageControlArea,
 
6329
  ChangeSharedCacheMap
 
6330
} FSRTL_CHANGE_BACKING_TYPE, *PFSRTL_CHANGE_BACKING_TYPE;
 
6331
 
 
6332
#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 
6333
 
 
6334
typedef struct _FSRTL_PER_FILE_CONTEXT {
 
6335
  LIST_ENTRY Links;
 
6336
  PVOID OwnerId;
 
6337
  PVOID InstanceId;
 
6338
  PFREE_FUNCTION FreeCallback;
 
6339
} FSRTL_PER_FILE_CONTEXT, *PFSRTL_PER_FILE_CONTEXT;
 
6340
 
 
6341
typedef struct _FSRTL_PER_STREAM_CONTEXT {
 
6342
  LIST_ENTRY Links;
 
6343
  PVOID OwnerId;
 
6344
  PVOID InstanceId;
 
6345
  PFREE_FUNCTION FreeCallback;
 
6346
} FSRTL_PER_STREAM_CONTEXT, *PFSRTL_PER_STREAM_CONTEXT;
 
6347
 
 
6348
#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
6349
typedef VOID
 
6350
(*PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS) (
 
6351
  IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
 
6352
#endif
 
6353
 
 
6354
typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT {
 
6355
  LIST_ENTRY Links;
 
6356
  PVOID OwnerId;
 
6357
  PVOID InstanceId;
 
6358
} FSRTL_PER_FILEOBJECT_CONTEXT, *PFSRTL_PER_FILEOBJECT_CONTEXT;
 
6359
 
 
6360
#define FSRTL_CC_FLUSH_ERROR_FLAG_NO_HARD_ERROR  0x1
 
6361
#define FSRTL_CC_FLUSH_ERROR_FLAG_NO_LOG_ENTRY   0x2
 
6362
 
 
6363
typedef NTSTATUS
 
6364
(NTAPI *PCOMPLETE_LOCK_IRP_ROUTINE) (
 
6365
  IN PVOID Context,
 
6366
  IN PIRP Irp);
 
6367
 
 
6368
typedef struct _FILE_LOCK_INFO {
 
6369
  LARGE_INTEGER StartingByte;
 
6370
  LARGE_INTEGER Length;
 
6371
  BOOLEAN ExclusiveLock;
 
6372
  ULONG Key;
 
6373
  PFILE_OBJECT FileObject;
 
6374
  PVOID ProcessId;
 
6375
  LARGE_INTEGER EndingByte;
 
6376
} FILE_LOCK_INFO, *PFILE_LOCK_INFO;
 
6377
 
 
6378
typedef VOID
 
6379
(NTAPI *PUNLOCK_ROUTINE) (
 
6380
  IN PVOID Context,
 
6381
  IN PFILE_LOCK_INFO FileLockInfo);
 
6382
 
 
6383
typedef struct _FILE_LOCK {
 
6384
  PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
 
6385
  PUNLOCK_ROUTINE UnlockRoutine;
 
6386
  BOOLEAN FastIoIsQuestionable;
 
6387
  BOOLEAN SpareC[3];
 
6388
  PVOID LockInformation;
 
6389
  FILE_LOCK_INFO LastReturnedLockInfo;
 
6390
  PVOID LastReturnedLock;
 
6391
  LONG volatile LockRequestsInProgress;
 
6392
} FILE_LOCK, *PFILE_LOCK;
 
6393
 
 
6394
typedef struct _TUNNEL {
 
6395
  FAST_MUTEX Mutex;
 
6396
  PRTL_SPLAY_LINKS Cache;
 
6397
  LIST_ENTRY TimerQueue;
 
6398
  USHORT NumEntries;
 
6399
} TUNNEL, *PTUNNEL;
 
6400
 
 
6401
typedef struct _BASE_MCB {
 
6402
  ULONG MaximumPairCount;
 
6403
  ULONG PairCount;
 
6404
  USHORT PoolType;
 
6405
  USHORT Flags;
 
6406
  PVOID Mapping;
 
6407
} BASE_MCB, *PBASE_MCB;
 
6408
 
 
6409
typedef struct _LARGE_MCB {
 
6410
  PKGUARDED_MUTEX GuardedMutex;
 
6411
  BASE_MCB BaseMcb;
 
6412
} LARGE_MCB, *PLARGE_MCB;
 
6413
 
 
6414
#define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
 
6415
 
 
6416
typedef struct _MCB {
 
6417
  LARGE_MCB DummyFieldThatSizesThisStructureCorrectly;
 
6418
} MCB, *PMCB;
 
6419
 
 
6420
typedef enum _FAST_IO_POSSIBLE {
 
6421
  FastIoIsNotPossible = 0,
 
6422
  FastIoIsPossible,
 
6423
  FastIoIsQuestionable
 
6424
} FAST_IO_POSSIBLE;
 
6425
 
 
6426
typedef struct _EOF_WAIT_BLOCK {
 
6427
  LIST_ENTRY EofWaitLinks;
 
6428
  KEVENT Event;
 
6429
} EOF_WAIT_BLOCK, *PEOF_WAIT_BLOCK;
 
6430
 
 
6431
typedef PVOID OPLOCK, *POPLOCK;
 
6432
 
 
6433
typedef VOID
 
6434
(NTAPI *POPLOCK_WAIT_COMPLETE_ROUTINE) (
 
6435
  IN PVOID Context,
 
6436
  IN PIRP Irp);
 
6437
 
 
6438
typedef VOID
 
6439
(NTAPI *POPLOCK_FS_PREPOST_IRP) (
 
6440
  IN PVOID Context,
 
6441
  IN PIRP Irp);
 
6442
 
 
6443
#if (NTDDI_VERSION >= NTDDI_VISTASP1)
 
6444
#define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED    0x00000001
 
6445
#endif
 
6446
 
 
6447
#if (NTDDI_VERSION >= NTDDI_WIN7)
 
6448
#define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY   0x00000002
 
6449
#define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK  0x00000004
 
6450
#define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS      0x00000008
 
6451
#define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH   0x00000001
 
6452
#endif
 
6453
 
 
6454
#if (NTDDI_VERSION >= NTDDI_WIN7)
 
6455
 
 
6456
typedef struct _OPLOCK_KEY_ECP_CONTEXT {
 
6457
  GUID OplockKey;
 
6458
  ULONG Reserved;
 
6459
} OPLOCK_KEY_ECP_CONTEXT, *POPLOCK_KEY_ECP_CONTEXT;
 
6460
 
 
6461
DEFINE_GUID(GUID_ECP_OPLOCK_KEY, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f);
 
6462
 
 
6463
#endif
 
6464
 
 
6465
typedef PVOID PNOTIFY_SYNC;
 
6466
 
 
6467
#if (NTDDI_VERSION >= NTDDI_WIN7)
 
6468
typedef struct _ECP_HEADER ECP_HEADER, *PECP_HEADER;
 
6469
#endif
 
6470
 
 
6471
typedef BOOLEAN
 
6472
(NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) (
 
6473
  IN PVOID NotifyContext,
 
6474
  IN PVOID TargetContext OPTIONAL,
 
6475
  IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
 
6476
 
 
6477
typedef BOOLEAN
 
6478
(NTAPI *PFILTER_REPORT_CHANGE) (
 
6479
  IN PVOID NotifyContext,
 
6480
  IN PVOID FilterContext);
 
6481
/* FSRTL Functions */
 
6482
 
 
6483
#define FsRtlEnterFileSystem    KeEnterCriticalRegion
 
6484
#define FsRtlExitFileSystem     KeLeaveCriticalRegion
 
6485
 
 
6486
#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
6487
 
 
6488
NTKERNELAPI
 
6489
BOOLEAN
 
6490
NTAPI
 
6491
FsRtlCopyRead(
 
6492
  IN PFILE_OBJECT FileObject,
 
6493
  IN PLARGE_INTEGER FileOffset,
 
6494
  IN ULONG Length,
 
6495
  IN BOOLEAN Wait,
 
6496
  IN ULONG LockKey,
 
6497
  OUT PVOID Buffer,
 
6498
  OUT PIO_STATUS_BLOCK IoStatus,
 
6499
  IN PDEVICE_OBJECT DeviceObject);
 
6500
 
 
6501
NTKERNELAPI
 
6502
BOOLEAN
 
6503
NTAPI
 
6504
FsRtlCopyWrite(
 
6505
  IN PFILE_OBJECT FileObject,
 
6506
  IN PLARGE_INTEGER FileOffset,
 
6507
  IN ULONG Length,
 
6508
  IN BOOLEAN Wait,
 
6509
  IN ULONG LockKey,
 
6510
  IN PVOID Buffer,
 
6511
  OUT PIO_STATUS_BLOCK IoStatus,
 
6512
  IN PDEVICE_OBJECT DeviceObject);
 
6513
 
 
6514
NTKERNELAPI
 
6515
BOOLEAN
 
6516
NTAPI
 
6517
FsRtlMdlReadDev(
 
6518
  IN PFILE_OBJECT FileObject,
 
6519
  IN PLARGE_INTEGER FileOffset,
 
6520
  IN ULONG Length,
 
6521
  IN ULONG LockKey,
 
6522
  OUT PMDL *MdlChain,
 
6523
  OUT PIO_STATUS_BLOCK IoStatus,
 
6524
  IN PDEVICE_OBJECT DeviceObject OPTIONAL);
 
6525
 
 
6526
NTKERNELAPI
 
6527
BOOLEAN
 
6528
NTAPI
 
6529
FsRtlMdlReadCompleteDev(
 
6530
  IN PFILE_OBJECT FileObject,
 
6531
  IN PMDL MdlChain,
 
6532
  IN PDEVICE_OBJECT DeviceObject OPTIONAL);
 
6533
 
 
6534
NTKERNELAPI
 
6535
BOOLEAN
 
6536
NTAPI
 
6537
FsRtlPrepareMdlWriteDev(
 
6538
  IN PFILE_OBJECT FileObject,
 
6539
  IN PLARGE_INTEGER FileOffset,
 
6540
  IN ULONG Length,
 
6541
  IN ULONG LockKey,
 
6542
  OUT PMDL *MdlChain,
 
6543
  OUT PIO_STATUS_BLOCK IoStatus,
 
6544
  IN PDEVICE_OBJECT DeviceObject);
 
6545
 
 
6546
NTKERNELAPI
 
6547
BOOLEAN
 
6548
NTAPI
 
6549
FsRtlMdlWriteCompleteDev(
 
6550
  IN PFILE_OBJECT FileObject,
 
6551
  IN PLARGE_INTEGER FileOffset,
 
6552
  IN PMDL MdlChain,
 
6553
  IN PDEVICE_OBJECT DeviceObject);
 
6554
 
 
6555
NTKERNELAPI
 
6556
VOID
 
6557
NTAPI
 
6558
FsRtlAcquireFileExclusive(
 
6559
  IN PFILE_OBJECT FileObject);
 
6560
 
 
6561
NTKERNELAPI
 
6562
VOID
 
6563
NTAPI
 
6564
FsRtlReleaseFile(
 
6565
  IN PFILE_OBJECT FileObject);
 
6566
 
 
6567
NTKERNELAPI
 
6568
NTSTATUS
 
6569
NTAPI
 
6570
FsRtlGetFileSize(
 
6571
  IN PFILE_OBJECT FileObject,
 
6572
  OUT PLARGE_INTEGER FileSize);
 
6573
 
 
6574
NTKERNELAPI
 
6575
BOOLEAN
 
6576
NTAPI
 
6577
FsRtlIsTotalDeviceFailure(
 
6578
  IN NTSTATUS Status);
 
6579
 
 
6580
NTKERNELAPI
 
6581
PFILE_LOCK
 
6582
NTAPI
 
6583
FsRtlAllocateFileLock(
 
6584
  IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
 
6585
  IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL);
 
6586
 
 
6587
NTKERNELAPI
 
6588
VOID
 
6589
NTAPI
 
6590
FsRtlFreeFileLock(
 
6591
  IN PFILE_LOCK FileLock);
 
6592
 
 
6593
NTKERNELAPI
 
6594
VOID
 
6595
NTAPI
 
6596
FsRtlInitializeFileLock(
 
6597
  IN PFILE_LOCK FileLock,
 
6598
  IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
 
6599
  IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL);
 
6600
 
 
6601
NTKERNELAPI
 
6602
VOID
 
6603
NTAPI
 
6604
FsRtlUninitializeFileLock(
 
6605
  IN PFILE_LOCK FileLock);
 
6606
 
 
6607
/*
 
6608
  FsRtlProcessFileLock:
 
6609
 
 
6610
  ret:
 
6611
    -STATUS_INVALID_DEVICE_REQUEST
 
6612
    -STATUS_RANGE_NOT_LOCKED from unlock routines.
 
6613
    -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
 
6614
    (redirected IoStatus->Status).
 
6615
 
 
6616
  Internals:
 
6617
    -switch ( Irp->CurrentStackLocation->MinorFunction )
 
6618
        lock: return FsRtlPrivateLock;
 
6619
        unlocksingle: return FsRtlFastUnlockSingle;
 
6620
        unlockall: return FsRtlFastUnlockAll;
 
6621
        unlockallbykey: return FsRtlFastUnlockAllByKey;
 
6622
        default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
 
6623
                 return STATUS_INVALID_DEVICE_REQUEST;
 
6624
 
 
6625
    -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
 
6626
    -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
 
6627
*/
 
6628
NTKERNELAPI
 
6629
NTSTATUS
 
6630
NTAPI
 
6631
FsRtlProcessFileLock(
 
6632
  IN PFILE_LOCK FileLock,
 
6633
  IN PIRP Irp,
 
6634
  IN PVOID Context OPTIONAL);
 
6635
 
 
6636
/*
 
6637
  FsRtlCheckLockForReadAccess:
 
6638
 
 
6639
  All this really does is pick out the lock parameters from the irp (io stack
 
6640
  location?), get IoGetRequestorProcess, and pass values on to
 
6641
  FsRtlFastCheckLockForRead.
 
6642
*/
 
6643
NTKERNELAPI
 
6644
BOOLEAN
 
6645
NTAPI
 
6646
FsRtlCheckLockForReadAccess(
 
6647
  IN PFILE_LOCK FileLock,
 
6648
  IN PIRP Irp);
 
6649
 
 
6650
/*
 
6651
  FsRtlCheckLockForWriteAccess:
 
6652
 
 
6653
  All this really does is pick out the lock parameters from the irp (io stack
 
6654
  location?), get IoGetRequestorProcess, and pass values on to
 
6655
  FsRtlFastCheckLockForWrite.
 
6656
*/
 
6657
NTKERNELAPI
 
6658
BOOLEAN
 
6659
NTAPI
 
6660
FsRtlCheckLockForWriteAccess(
 
6661
  IN PFILE_LOCK FileLock,
 
6662
  IN PIRP Irp);
 
6663
 
 
6664
NTKERNELAPI
 
6665
BOOLEAN
 
6666
NTAPI
 
6667
FsRtlFastCheckLockForRead(
 
6668
  IN PFILE_LOCK FileLock,
 
6669
  IN PLARGE_INTEGER FileOffset,
 
6670
  IN PLARGE_INTEGER Length,
 
6671
  IN ULONG Key,
 
6672
  IN PFILE_OBJECT FileObject,
 
6673
  IN PVOID Process);
 
6674
 
 
6675
NTKERNELAPI
 
6676
BOOLEAN
 
6677
NTAPI
 
6678
FsRtlFastCheckLockForWrite(
 
6679
  IN PFILE_LOCK FileLock,
 
6680
  IN PLARGE_INTEGER FileOffset,
 
6681
  IN PLARGE_INTEGER Length,
 
6682
  IN ULONG Key,
 
6683
  IN PFILE_OBJECT FileObject,
 
6684
  IN PVOID Process);
 
6685
 
 
6686
/*
 
6687
  FsRtlGetNextFileLock:
 
6688
 
 
6689
  ret: NULL if no more locks
 
6690
 
 
6691
  Internals:
 
6692
    FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
 
6693
    FileLock->LastReturnedLock as storage.
 
6694
    LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
 
6695
    list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
 
6696
    calls with Restart = FALSE.
 
6697
*/
 
6698
NTKERNELAPI
 
6699
PFILE_LOCK_INFO
 
6700
NTAPI
 
6701
FsRtlGetNextFileLock(
 
6702
  IN PFILE_LOCK FileLock,
 
6703
  IN BOOLEAN Restart);
 
6704
 
 
6705
NTKERNELAPI
 
6706
NTSTATUS
 
6707
NTAPI
 
6708
FsRtlFastUnlockSingle(
 
6709
  IN PFILE_LOCK FileLock,
 
6710
  IN PFILE_OBJECT FileObject,
 
6711
  IN PLARGE_INTEGER FileOffset,
 
6712
  IN PLARGE_INTEGER Length,
 
6713
  IN PEPROCESS Process,
 
6714
  IN ULONG Key,
 
6715
  IN PVOID Context OPTIONAL,
 
6716
  IN BOOLEAN AlreadySynchronized);
 
6717
 
 
6718
NTKERNELAPI
 
6719
NTSTATUS
 
6720
NTAPI
 
6721
FsRtlFastUnlockAll(
 
6722
  IN PFILE_LOCK FileLock,
 
6723
  IN PFILE_OBJECT FileObject,
 
6724
  IN PEPROCESS Process,
 
6725
  IN PVOID Context OPTIONAL);
 
6726
 
 
6727
NTKERNELAPI
 
6728
NTSTATUS
 
6729
NTAPI
 
6730
FsRtlFastUnlockAllByKey(
 
6731
  IN PFILE_LOCK FileLock,
 
6732
  IN PFILE_OBJECT FileObject,
 
6733
  IN PEPROCESS Process,
 
6734
  IN ULONG Key,
 
6735
  IN PVOID Context OPTIONAL);
 
6736
 
 
6737
/*
 
6738
  FsRtlPrivateLock:
 
6739
 
 
6740
  ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
 
6741
 
 
6742
  Internals:
 
6743
    -Calls IoCompleteRequest if Irp
 
6744
    -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
 
6745
*/
 
6746
NTKERNELAPI
 
6747
BOOLEAN
 
6748
NTAPI
 
6749
FsRtlPrivateLock(
 
6750
  IN PFILE_LOCK FileLock,
 
6751
  IN PFILE_OBJECT FileObject,
 
6752
  IN PLARGE_INTEGER FileOffset,
 
6753
  IN PLARGE_INTEGER Length,
 
6754
  IN PEPROCESS Process,
 
6755
  IN ULONG Key,
 
6756
  IN BOOLEAN FailImmediately,
 
6757
  IN BOOLEAN ExclusiveLock,
 
6758
  OUT PIO_STATUS_BLOCK IoStatus,
 
6759
  IN PIRP Irp OPTIONAL,
 
6760
  IN PVOID Context,
 
6761
  IN BOOLEAN AlreadySynchronized);
 
6762
 
 
6763
NTKERNELAPI
 
6764
VOID
 
6765
NTAPI
 
6766
FsRtlInitializeTunnelCache(
 
6767
  IN PTUNNEL Cache);
 
6768
 
 
6769
NTKERNELAPI
 
6770
VOID
 
6771
NTAPI
 
6772
FsRtlAddToTunnelCache(
 
6773
  IN PTUNNEL Cache,
 
6774
  IN ULONGLONG DirectoryKey,
 
6775
  IN PUNICODE_STRING ShortName,
 
6776
  IN PUNICODE_STRING LongName,
 
6777
  IN BOOLEAN KeyByShortName,
 
6778
  IN ULONG DataLength,
 
6779
  IN PVOID Data);
 
6780
 
 
6781
NTKERNELAPI
 
6782
BOOLEAN
 
6783
NTAPI
 
6784
FsRtlFindInTunnelCache(
 
6785
  IN PTUNNEL Cache,
 
6786
  IN ULONGLONG DirectoryKey,
 
6787
  IN PUNICODE_STRING Name,
 
6788
  OUT PUNICODE_STRING ShortName,
 
6789
  OUT PUNICODE_STRING LongName,
 
6790
  IN OUT PULONG DataLength,
 
6791
  OUT PVOID Data);
 
6792
 
 
6793
NTKERNELAPI
 
6794
VOID
 
6795
NTAPI
 
6796
FsRtlDeleteKeyFromTunnelCache(
 
6797
  IN PTUNNEL Cache,
 
6798
  IN ULONGLONG DirectoryKey);
 
6799
 
 
6800
NTKERNELAPI
 
6801
VOID
 
6802
NTAPI
 
6803
FsRtlDeleteTunnelCache(
 
6804
  IN PTUNNEL Cache);
 
6805
 
 
6806
NTKERNELAPI
 
6807
VOID
 
6808
NTAPI
 
6809
FsRtlDissectDbcs(
 
6810
  IN ANSI_STRING Name,
 
6811
  OUT PANSI_STRING FirstPart,
 
6812
  OUT PANSI_STRING RemainingPart);
 
6813
 
 
6814
NTKERNELAPI
 
6815
BOOLEAN
 
6816
NTAPI
 
6817
FsRtlDoesDbcsContainWildCards(
 
6818
  IN PANSI_STRING Name);
 
6819
 
 
6820
NTKERNELAPI
 
6821
BOOLEAN
 
6822
NTAPI
 
6823
FsRtlIsDbcsInExpression(
 
6824
  IN PANSI_STRING Expression,
 
6825
  IN PANSI_STRING Name);
 
6826
 
 
6827
NTKERNELAPI
 
6828
BOOLEAN
 
6829
NTAPI
 
6830
FsRtlIsFatDbcsLegal(
 
6831
  IN ANSI_STRING DbcsName,
 
6832
  IN BOOLEAN WildCardsPermissible,
 
6833
  IN BOOLEAN PathNamePermissible,
 
6834
  IN BOOLEAN LeadingBackslashPermissible);
 
6835
 
 
6836
NTKERNELAPI
 
6837
BOOLEAN
 
6838
NTAPI
 
6839
FsRtlIsHpfsDbcsLegal(
 
6840
  IN ANSI_STRING DbcsName,
 
6841
  IN BOOLEAN WildCardsPermissible,
 
6842
  IN BOOLEAN PathNamePermissible,
 
6843
  IN BOOLEAN LeadingBackslashPermissible);
 
6844
 
 
6845
NTKERNELAPI
 
6846
NTSTATUS
 
6847
NTAPI
 
6848
FsRtlNormalizeNtstatus(
 
6849
  IN NTSTATUS Exception,
 
6850
  IN NTSTATUS GenericException);
 
6851
 
 
6852
NTKERNELAPI
 
6853
BOOLEAN
 
6854
NTAPI
 
6855
FsRtlIsNtstatusExpected(
 
6856
  IN NTSTATUS Ntstatus);
 
6857
 
 
6858
NTKERNELAPI
 
6859
PERESOURCE
 
6860
NTAPI
 
6861
FsRtlAllocateResource(
 
6862
  VOID);
 
6863
 
 
6864
NTKERNELAPI
 
6865
VOID
 
6866
NTAPI
 
6867
FsRtlInitializeLargeMcb(
 
6868
  IN PLARGE_MCB Mcb,
 
6869
  IN POOL_TYPE PoolType);
 
6870
 
 
6871
NTKERNELAPI
 
6872
VOID
 
6873
NTAPI
 
6874
FsRtlUninitializeLargeMcb(
 
6875
  IN PLARGE_MCB Mcb);
 
6876
 
 
6877
NTKERNELAPI
 
6878
VOID
 
6879
NTAPI
 
6880
FsRtlResetLargeMcb(
 
6881
  IN PLARGE_MCB Mcb,
 
6882
  IN BOOLEAN SelfSynchronized);
 
6883
 
 
6884
NTKERNELAPI
 
6885
VOID
 
6886
NTAPI
 
6887
FsRtlTruncateLargeMcb(
 
6888
  IN PLARGE_MCB Mcb,
 
6889
  IN LONGLONG Vbn);
 
6890
 
 
6891
NTKERNELAPI
 
6892
BOOLEAN
 
6893
NTAPI
 
6894
FsRtlAddLargeMcbEntry(
 
6895
  IN PLARGE_MCB Mcb,
 
6896
  IN LONGLONG Vbn,
 
6897
  IN LONGLONG Lbn,
 
6898
  IN LONGLONG SectorCount);
 
6899
 
 
6900
NTKERNELAPI
 
6901
VOID
 
6902
NTAPI
 
6903
FsRtlRemoveLargeMcbEntry(
 
6904
  IN PLARGE_MCB Mcb,
 
6905
  IN LONGLONG Vbn,
 
6906
  IN LONGLONG SectorCount);
 
6907
 
 
6908
NTKERNELAPI
 
6909
BOOLEAN
 
6910
NTAPI
 
6911
FsRtlLookupLargeMcbEntry(
 
6912
  IN PLARGE_MCB Mcb,
 
6913
  IN LONGLONG Vbn,
 
6914
  OUT PLONGLONG Lbn OPTIONAL,
 
6915
  OUT PLONGLONG SectorCountFromLbn OPTIONAL,
 
6916
  OUT PLONGLONG StartingLbn OPTIONAL,
 
6917
  OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
 
6918
  OUT PULONG Index OPTIONAL);
 
6919
 
 
6920
NTKERNELAPI
 
6921
BOOLEAN
 
6922
NTAPI
 
6923
FsRtlLookupLastLargeMcbEntry(
 
6924
  IN PLARGE_MCB Mcb,
 
6925
  OUT PLONGLONG Vbn,
 
6926
  OUT PLONGLONG Lbn);
 
6927
 
 
6928
NTKERNELAPI
 
6929
BOOLEAN
 
6930
NTAPI
 
6931
FsRtlLookupLastLargeMcbEntryAndIndex(
 
6932
  IN PLARGE_MCB OpaqueMcb,
 
6933
  OUT PLONGLONG LargeVbn,
 
6934
  OUT PLONGLONG LargeLbn,
 
6935
  OUT PULONG Index);
 
6936
 
 
6937
NTKERNELAPI
 
6938
ULONG
 
6939
NTAPI
 
6940
FsRtlNumberOfRunsInLargeMcb(
 
6941
  IN PLARGE_MCB Mcb);
 
6942
 
 
6943
NTKERNELAPI
 
6944
BOOLEAN
 
6945
NTAPI
 
6946
FsRtlGetNextLargeMcbEntry(
 
6947
  IN PLARGE_MCB Mcb,
 
6948
  IN ULONG RunIndex,
 
6949
  OUT PLONGLONG Vbn,
 
6950
  OUT PLONGLONG Lbn,
 
6951
  OUT PLONGLONG SectorCount);
 
6952
 
 
6953
NTKERNELAPI
 
6954
BOOLEAN
 
6955
NTAPI
 
6956
FsRtlSplitLargeMcb(
 
6957
  IN PLARGE_MCB Mcb,
 
6958
  IN LONGLONG Vbn,
 
6959
  IN LONGLONG Amount);
 
6960
 
 
6961
NTKERNELAPI
 
6962
VOID
 
6963
NTAPI
 
6964
FsRtlInitializeMcb(
 
6965
  IN PMCB Mcb,
 
6966
  IN POOL_TYPE PoolType);
 
6967
 
 
6968
NTKERNELAPI
 
6969
VOID
 
6970
NTAPI
 
6971
FsRtlUninitializeMcb(
 
6972
  IN PMCB Mcb);
 
6973
 
 
6974
NTKERNELAPI
 
6975
VOID
 
6976
NTAPI
 
6977
FsRtlTruncateMcb(
 
6978
  IN PMCB Mcb,
 
6979
  IN VBN Vbn);
 
6980
 
 
6981
NTKERNELAPI
 
6982
BOOLEAN
 
6983
NTAPI
 
6984
FsRtlAddMcbEntry(
 
6985
  IN PMCB Mcb,
 
6986
  IN VBN Vbn,
 
6987
  IN LBN Lbn,
 
6988
  IN ULONG SectorCount);
 
6989
 
 
6990
NTKERNELAPI
 
6991
VOID
 
6992
NTAPI
 
6993
FsRtlRemoveMcbEntry(
 
6994
  IN PMCB Mcb,
 
6995
  IN VBN Vbn,
 
6996
  IN ULONG SectorCount);
 
6997
 
 
6998
NTKERNELAPI
 
6999
BOOLEAN
 
7000
NTAPI
 
7001
FsRtlLookupMcbEntry(
 
7002
  IN PMCB Mcb,
 
7003
  IN VBN Vbn,
 
7004
  OUT PLBN Lbn,
 
7005
  OUT PULONG SectorCount OPTIONAL,
 
7006
  OUT PULONG Index);
 
7007
 
 
7008
NTKERNELAPI
 
7009
BOOLEAN
 
7010
NTAPI
 
7011
FsRtlLookupLastMcbEntry(
 
7012
  IN PMCB Mcb,
 
7013
  OUT PVBN Vbn,
 
7014
  OUT PLBN Lbn);
 
7015
 
 
7016
NTKERNELAPI
 
7017
ULONG
 
7018
NTAPI
 
7019
FsRtlNumberOfRunsInMcb(
 
7020
  IN PMCB Mcb);
 
7021
 
 
7022
NTKERNELAPI
 
7023
BOOLEAN
 
7024
NTAPI
 
7025
FsRtlGetNextMcbEntry(
 
7026
  IN PMCB Mcb,
 
7027
  IN ULONG RunIndex,
 
7028
  OUT PVBN Vbn,
 
7029
  OUT PLBN Lbn,
 
7030
  OUT PULONG SectorCount);
 
7031
 
 
7032
NTKERNELAPI
 
7033
NTSTATUS
 
7034
NTAPI
 
7035
FsRtlBalanceReads(
 
7036
  IN PDEVICE_OBJECT TargetDevice);
 
7037
 
 
7038
NTKERNELAPI
 
7039
VOID
 
7040
NTAPI
 
7041
FsRtlInitializeOplock(
 
7042
  IN OUT POPLOCK Oplock);
 
7043
 
 
7044
NTKERNELAPI
 
7045
VOID
 
7046
NTAPI
 
7047
FsRtlUninitializeOplock(
 
7048
  IN OUT POPLOCK Oplock);
 
7049
 
 
7050
NTKERNELAPI
 
7051
NTSTATUS
 
7052
NTAPI
 
7053
FsRtlOplockFsctrl(
 
7054
  IN POPLOCK Oplock,
 
7055
  IN PIRP Irp,
 
7056
  IN ULONG OpenCount);
 
7057
 
 
7058
NTKERNELAPI
 
7059
NTSTATUS
 
7060
NTAPI
 
7061
FsRtlCheckOplock(
 
7062
  IN POPLOCK Oplock,
 
7063
  IN PIRP Irp,
 
7064
  IN PVOID Context,
 
7065
  IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
 
7066
  IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
 
7067
 
 
7068
NTKERNELAPI
 
7069
BOOLEAN
 
7070
NTAPI
 
7071
FsRtlOplockIsFastIoPossible(
 
7072
  IN POPLOCK Oplock);
 
7073
 
 
7074
NTKERNELAPI
 
7075
BOOLEAN
 
7076
NTAPI
 
7077
FsRtlCurrentBatchOplock(
 
7078
  IN POPLOCK Oplock);
 
7079
 
 
7080
NTKERNELAPI
 
7081
NTSTATUS
 
7082
NTAPI
 
7083
FsRtlNotifyVolumeEvent(
 
7084
  IN PFILE_OBJECT FileObject,
 
7085
  IN ULONG EventCode);
 
7086
 
 
7087
NTKERNELAPI
 
7088
VOID
 
7089
NTAPI
 
7090
FsRtlNotifyInitializeSync(
 
7091
  IN PNOTIFY_SYNC *NotifySync);
 
7092
 
 
7093
NTKERNELAPI
 
7094
VOID
 
7095
NTAPI
 
7096
FsRtlNotifyUninitializeSync(
 
7097
  IN PNOTIFY_SYNC *NotifySync);
 
7098
 
 
7099
NTKERNELAPI
 
7100
VOID
 
7101
NTAPI
 
7102
FsRtlNotifyFullChangeDirectory(
 
7103
  IN PNOTIFY_SYNC NotifySync,
 
7104
  IN PLIST_ENTRY NotifyList,
 
7105
  IN PVOID FsContext,
 
7106
  IN PSTRING FullDirectoryName,
 
7107
  IN BOOLEAN WatchTree,
 
7108
  IN BOOLEAN IgnoreBuffer,
 
7109
  IN ULONG CompletionFilter,
 
7110
  IN PIRP NotifyIrp OPTIONAL,
 
7111
  IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
 
7112
  IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL);
 
7113
 
 
7114
NTKERNELAPI
 
7115
VOID
 
7116
NTAPI
 
7117
FsRtlNotifyFilterReportChange(
 
7118
  IN PNOTIFY_SYNC NotifySync,
 
7119
  IN PLIST_ENTRY NotifyList,
 
7120
  IN PSTRING FullTargetName,
 
7121
  IN USHORT TargetNameOffset,
 
7122
  IN PSTRING StreamName OPTIONAL,
 
7123
  IN PSTRING NormalizedParentName OPTIONAL,
 
7124
  IN ULONG FilterMatch,
 
7125
  IN ULONG Action,
 
7126
  IN PVOID TargetContext OPTIONAL,
 
7127
  IN PVOID FilterContext OPTIONAL);
 
7128
 
 
7129
NTKERNELAPI
 
7130
VOID
 
7131
NTAPI
 
7132
FsRtlNotifyFullReportChange(
 
7133
  IN PNOTIFY_SYNC NotifySync,
 
7134
  IN PLIST_ENTRY NotifyList,
 
7135
  IN PSTRING FullTargetName,
 
7136
  IN USHORT TargetNameOffset,
 
7137
  IN PSTRING StreamName OPTIONAL,
 
7138
  IN PSTRING NormalizedParentName OPTIONAL,
 
7139
  IN ULONG FilterMatch,
 
7140
  IN ULONG Action,
 
7141
  IN PVOID TargetContext OPTIONAL);
 
7142
 
 
7143
NTKERNELAPI
 
7144
VOID
 
7145
NTAPI
 
7146
FsRtlNotifyCleanup(
 
7147
  IN PNOTIFY_SYNC NotifySync,
 
7148
  IN PLIST_ENTRY NotifyList,
 
7149
  IN PVOID FsContext);
 
7150
 
 
7151
NTKERNELAPI
 
7152
VOID
 
7153
NTAPI
 
7154
FsRtlDissectName(
 
7155
  IN UNICODE_STRING Name,
 
7156
  OUT PUNICODE_STRING FirstPart,
 
7157
  OUT PUNICODE_STRING RemainingPart);
 
7158
 
 
7159
NTKERNELAPI
 
7160
BOOLEAN
 
7161
NTAPI
 
7162
FsRtlDoesNameContainWildCards(
 
7163
  IN PUNICODE_STRING Name);
 
7164
 
 
7165
NTKERNELAPI
 
7166
BOOLEAN
 
7167
NTAPI
 
7168
FsRtlAreNamesEqual(
 
7169
  IN PCUNICODE_STRING Name1,
 
7170
  IN PCUNICODE_STRING Name2,
 
7171
  IN BOOLEAN IgnoreCase,
 
7172
  IN PCWCH UpcaseTable OPTIONAL);
 
7173
 
 
7174
NTKERNELAPI
 
7175
BOOLEAN
 
7176
NTAPI
 
7177
FsRtlIsNameInExpression(
 
7178
  IN PUNICODE_STRING Expression,
 
7179
  IN PUNICODE_STRING Name,
 
7180
  IN BOOLEAN IgnoreCase,
 
7181
  IN PWCHAR UpcaseTable OPTIONAL);
 
7182
 
 
7183
NTKERNELAPI
 
7184
VOID
 
7185
NTAPI
 
7186
FsRtlPostPagingFileStackOverflow(
 
7187
  IN PVOID Context,
 
7188
  IN PKEVENT Event,
 
7189
  IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
 
7190
 
 
7191
NTKERNELAPI
 
7192
VOID
 
7193
NTAPI
 
7194
FsRtlPostStackOverflow (
 
7195
  IN PVOID Context,
 
7196
  IN PKEVENT Event,
 
7197
  IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
 
7198
 
 
7199
NTKERNELAPI
 
7200
NTSTATUS
 
7201
NTAPI
 
7202
FsRtlRegisterUncProvider(
 
7203
  OUT PHANDLE MupHandle,
 
7204
  IN PUNICODE_STRING RedirectorDeviceName,
 
7205
  IN BOOLEAN MailslotsSupported);
 
7206
 
 
7207
NTKERNELAPI
 
7208
VOID
 
7209
NTAPI
 
7210
FsRtlDeregisterUncProvider(
 
7211
  IN HANDLE Handle);
 
7212
 
 
7213
NTKERNELAPI
 
7214
VOID
 
7215
NTAPI
 
7216
FsRtlTeardownPerStreamContexts(
 
7217
  IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
 
7218
 
 
7219
NTKERNELAPI
 
7220
NTSTATUS
 
7221
NTAPI
 
7222
FsRtlCreateSectionForDataScan(
 
7223
  OUT PHANDLE SectionHandle,
 
7224
  OUT PVOID *SectionObject,
 
7225
  OUT PLARGE_INTEGER SectionFileSize OPTIONAL,
 
7226
  IN PFILE_OBJECT FileObject,
 
7227
  IN ACCESS_MASK DesiredAccess,
 
7228
  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
 
7229
  IN PLARGE_INTEGER MaximumSize OPTIONAL,
 
7230
  IN ULONG SectionPageProtection,
 
7231
  IN ULONG AllocationAttributes,
 
7232
  IN ULONG Flags);
 
7233
 
 
7234
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 
7235
 
 
7236
#if (NTDDI_VERSION >= NTDDI_WINXP)
 
7237
 
 
7238
NTKERNELAPI
 
7239
VOID
 
7240
NTAPI
 
7241
FsRtlNotifyFilterChangeDirectory(
 
7242
  IN PNOTIFY_SYNC NotifySync,
 
7243
  IN PLIST_ENTRY NotifyList,
 
7244
  IN PVOID FsContext,
 
7245
  IN PSTRING FullDirectoryName,
 
7246
  IN BOOLEAN WatchTree,
 
7247
  IN BOOLEAN IgnoreBuffer,
 
7248
  IN ULONG CompletionFilter,
 
7249
  IN PIRP NotifyIrp OPTIONAL,
 
7250
  IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
 
7251
  IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL,
 
7252
  IN PFILTER_REPORT_CHANGE FilterCallback OPTIONAL);
 
7253
 
 
7254
NTKERNELAPI
 
7255
NTSTATUS
 
7256
NTAPI
 
7257
FsRtlInsertPerStreamContext(
 
7258
  IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext,
 
7259
  IN PFSRTL_PER_STREAM_CONTEXT Ptr);
 
7260
 
 
7261
NTKERNELAPI
 
7262
PFSRTL_PER_STREAM_CONTEXT
 
7263
NTAPI
 
7264
FsRtlLookupPerStreamContextInternal(
 
7265
  IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
 
7266
  IN PVOID OwnerId OPTIONAL,
 
7267
  IN PVOID InstanceId OPTIONAL);
 
7268
 
 
7269
NTKERNELAPI
 
7270
PFSRTL_PER_STREAM_CONTEXT
 
7271
NTAPI
 
7272
FsRtlRemovePerStreamContext(
 
7273
  IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
 
7274
  IN PVOID OwnerId OPTIONAL,
 
7275
  IN PVOID InstanceId OPTIONAL);
 
7276
 
 
7277
NTKERNELAPI
 
7278
VOID
 
7279
NTAPI
 
7280
FsRtlIncrementCcFastReadNotPossible(
 
7281
  VOID);
 
7282
 
 
7283
NTKERNELAPI
 
7284
VOID
 
7285
NTAPI
 
7286
FsRtlIncrementCcFastReadWait(
 
7287
  VOID);
 
7288
 
 
7289
NTKERNELAPI
 
7290
VOID
 
7291
NTAPI
 
7292
FsRtlIncrementCcFastReadNoWait(
 
7293
  VOID);
 
7294
 
 
7295
NTKERNELAPI
 
7296
VOID
 
7297
NTAPI
 
7298
FsRtlIncrementCcFastReadResourceMiss(
 
7299
  VOID);
 
7300
 
 
7301
NTKERNELAPI
 
7302
LOGICAL
 
7303
NTAPI
 
7304
FsRtlIsPagingFile(
 
7305
  IN PFILE_OBJECT FileObject);
 
7306
 
 
7307
#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 
7308
 
 
7309
#if (NTDDI_VERSION >= NTDDI_WS03)
 
7310
 
 
7311
NTKERNELAPI
 
7312
VOID
 
7313
NTAPI
 
7314
FsRtlInitializeBaseMcb(
 
7315
  IN PBASE_MCB Mcb,
 
7316
  IN POOL_TYPE PoolType);
 
7317
 
 
7318
NTKERNELAPI
 
7319
VOID
 
7320
NTAPI
 
7321
FsRtlUninitializeBaseMcb(
 
7322
  IN PBASE_MCB Mcb);
 
7323
 
 
7324
NTKERNELAPI
 
7325
VOID
 
7326
NTAPI
 
7327
FsRtlResetBaseMcb(
 
7328
  IN PBASE_MCB Mcb);
 
7329
 
 
7330
NTKERNELAPI
 
7331
VOID
 
7332
NTAPI
 
7333
FsRtlTruncateBaseMcb(
 
7334
  IN PBASE_MCB Mcb,
 
7335
  IN LONGLONG Vbn);
 
7336
 
 
7337
NTKERNELAPI
 
7338
BOOLEAN
 
7339
NTAPI
 
7340
FsRtlAddBaseMcbEntry(
 
7341
  IN PBASE_MCB Mcb,
 
7342
  IN LONGLONG Vbn,
 
7343
  IN LONGLONG Lbn,
 
7344
  IN LONGLONG SectorCount);
 
7345
 
 
7346
NTKERNELAPI
 
7347
BOOLEAN
 
7348
NTAPI
 
7349
FsRtlRemoveBaseMcbEntry(
 
7350
  IN PBASE_MCB Mcb,
 
7351
  IN LONGLONG Vbn,
 
7352
  IN LONGLONG SectorCount);
 
7353
 
 
7354
NTKERNELAPI
 
7355
BOOLEAN
 
7356
NTAPI
 
7357
FsRtlLookupBaseMcbEntry(
 
7358
  IN PBASE_MCB Mcb,
 
7359
  IN LONGLONG Vbn,
 
7360
  OUT PLONGLONG Lbn OPTIONAL,
 
7361
  OUT PLONGLONG SectorCountFromLbn OPTIONAL,
 
7362
  OUT PLONGLONG StartingLbn OPTIONAL,
 
7363
  OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
 
7364
  OUT PULONG Index OPTIONAL);
 
7365
 
 
7366
NTKERNELAPI
 
7367
BOOLEAN
 
7368
NTAPI
 
7369
FsRtlLookupLastBaseMcbEntry(
 
7370
  IN PBASE_MCB Mcb,
 
7371
  OUT PLONGLONG Vbn,
 
7372
  OUT PLONGLONG Lbn);
 
7373
 
 
7374
NTKERNELAPI
 
7375
BOOLEAN
 
7376
NTAPI
 
7377
FsRtlLookupLastBaseMcbEntryAndIndex(
 
7378
  IN PBASE_MCB OpaqueMcb,
 
7379
  IN OUT PLONGLONG LargeVbn,
 
7380
  IN OUT PLONGLONG LargeLbn,
 
7381
  IN OUT PULONG Index);
 
7382
 
 
7383
NTKERNELAPI
 
7384
ULONG
 
7385
NTAPI
 
7386
FsRtlNumberOfRunsInBaseMcb(
 
7387
  IN PBASE_MCB Mcb);
 
7388
 
 
7389
NTKERNELAPI
 
7390
BOOLEAN
 
7391
NTAPI
 
7392
FsRtlGetNextBaseMcbEntry(
 
7393
  IN PBASE_MCB Mcb,
 
7394
  IN ULONG RunIndex,
 
7395
  OUT PLONGLONG Vbn,
 
7396
  OUT PLONGLONG Lbn,
 
7397
  OUT PLONGLONG SectorCount);
 
7398
 
 
7399
NTKERNELAPI
 
7400
BOOLEAN
 
7401
NTAPI
 
7402
FsRtlSplitBaseMcb(
 
7403
  IN PBASE_MCB Mcb,
 
7404
  IN LONGLONG Vbn,
 
7405
  IN LONGLONG Amount);
 
7406
 
 
7407
#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
 
7408
 
 
7409
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
7410
 
 
7411
BOOLEAN
 
7412
NTAPI
 
7413
FsRtlInitializeBaseMcbEx(
 
7414
  IN PBASE_MCB Mcb,
 
7415
  IN POOL_TYPE PoolType,
 
7416
  IN USHORT Flags);
 
7417
 
 
7418
NTSTATUS
 
7419
NTAPI
 
7420
FsRtlAddBaseMcbEntryEx(
 
7421
  IN PBASE_MCB Mcb,
 
7422
  IN LONGLONG Vbn,
 
7423
  IN LONGLONG Lbn,
 
7424
  IN LONGLONG SectorCount);
 
7425
 
 
7426
NTKERNELAPI
 
7427
BOOLEAN
 
7428
NTAPI
 
7429
FsRtlCurrentOplock(
 
7430
  IN POPLOCK Oplock);
 
7431
 
 
7432
NTKERNELAPI
 
7433
NTSTATUS
 
7434
NTAPI
 
7435
FsRtlOplockBreakToNone(
 
7436
  IN OUT POPLOCK Oplock,
 
7437
  IN PIO_STACK_LOCATION IrpSp OPTIONAL,
 
7438
  IN PIRP Irp,
 
7439
  IN PVOID Context OPTIONAL,
 
7440
  IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
 
7441
  IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
 
7442
 
 
7443
NTKERNELAPI
 
7444
NTSTATUS
 
7445
NTAPI
 
7446
FsRtlNotifyVolumeEventEx(
 
7447
  IN PFILE_OBJECT FileObject,
 
7448
  IN ULONG EventCode,
 
7449
  IN PTARGET_DEVICE_CUSTOM_NOTIFICATION Event);
 
7450
 
 
7451
NTKERNELAPI
 
7452
VOID
 
7453
NTAPI
 
7454
FsRtlNotifyCleanupAll(
 
7455
  IN PNOTIFY_SYNC NotifySync,
 
7456
  IN PLIST_ENTRY NotifyList);
 
7457
 
 
7458
NTSTATUS
 
7459
NTAPI
 
7460
FsRtlRegisterUncProviderEx(
 
7461
  OUT PHANDLE MupHandle,
 
7462
  IN PUNICODE_STRING RedirDevName,
 
7463
  IN PDEVICE_OBJECT DeviceObject,
 
7464
  IN ULONG Flags);
 
7465
 
 
7466
NTKERNELAPI
 
7467
NTSTATUS
 
7468
NTAPI
 
7469
FsRtlCancellableWaitForSingleObject(
 
7470
  IN PVOID Object,
 
7471
  IN PLARGE_INTEGER Timeout OPTIONAL,
 
7472
  IN PIRP Irp OPTIONAL);
 
7473
 
 
7474
NTKERNELAPI
 
7475
NTSTATUS
 
7476
NTAPI
 
7477
FsRtlCancellableWaitForMultipleObjects(
 
7478
  IN ULONG Count,
 
7479
  IN PVOID ObjectArray[],
 
7480
  IN WAIT_TYPE WaitType,
 
7481
  IN PLARGE_INTEGER Timeout OPTIONAL,
 
7482
  IN PKWAIT_BLOCK WaitBlockArray OPTIONAL,
 
7483
  IN PIRP Irp OPTIONAL);
 
7484
 
 
7485
NTKERNELAPI
 
7486
NTSTATUS
 
7487
NTAPI
 
7488
FsRtlMupGetProviderInfoFromFileObject(
 
7489
  IN PFILE_OBJECT pFileObject,
 
7490
  IN ULONG Level,
 
7491
  OUT PVOID pBuffer,
 
7492
  IN OUT PULONG pBufferSize);
 
7493
 
 
7494
NTKERNELAPI
 
7495
NTSTATUS
 
7496
NTAPI
 
7497
FsRtlMupGetProviderIdFromName(
 
7498
  IN PUNICODE_STRING pProviderName,
 
7499
  OUT PULONG32 pProviderId);
 
7500
 
 
7501
NTKERNELAPI
 
7502
VOID
 
7503
NTAPI
 
7504
FsRtlIncrementCcFastMdlReadWait(
 
7505
  VOID);
 
7506
 
 
7507
NTKERNELAPI
 
7508
NTSTATUS
 
7509
NTAPI
 
7510
FsRtlValidateReparsePointBuffer(
 
7511
  IN ULONG BufferLength,
 
7512
  IN PREPARSE_DATA_BUFFER ReparseBuffer);
 
7513
 
 
7514
NTKERNELAPI
 
7515
NTSTATUS
 
7516
NTAPI
 
7517
FsRtlRemoveDotsFromPath(
 
7518
  IN OUT PWSTR OriginalString,
 
7519
  IN USHORT PathLength,
 
7520
  OUT USHORT *NewLength);
 
7521
 
 
7522
NTKERNELAPI
 
7523
NTSTATUS
 
7524
NTAPI
 
7525
FsRtlAllocateExtraCreateParameterList(
 
7526
  IN FSRTL_ALLOCATE_ECPLIST_FLAGS Flags,
 
7527
  OUT PECP_LIST *EcpList);
 
7528
 
 
7529
NTKERNELAPI
 
7530
VOID
 
7531
NTAPI
 
7532
FsRtlFreeExtraCreateParameterList(
 
7533
  IN PECP_LIST EcpList);
 
7534
 
 
7535
NTKERNELAPI
 
7536
NTSTATUS
 
7537
NTAPI
 
7538
FsRtlAllocateExtraCreateParameter(
 
7539
  IN LPCGUID EcpType,
 
7540
  IN ULONG SizeOfContext,
 
7541
  IN FSRTL_ALLOCATE_ECP_FLAGS Flags,
 
7542
  IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
 
7543
  IN ULONG PoolTag,
 
7544
  OUT PVOID *EcpContext);
 
7545
 
 
7546
NTKERNELAPI
 
7547
VOID
 
7548
NTAPI
 
7549
FsRtlFreeExtraCreateParameter(
 
7550
  IN PVOID EcpContext);
 
7551
 
 
7552
NTKERNELAPI
 
7553
VOID
 
7554
NTAPI
 
7555
FsRtlInitExtraCreateParameterLookasideList(
 
7556
  IN OUT PVOID Lookaside,
 
7557
  IN FSRTL_ECP_LOOKASIDE_FLAGS Flags,
 
7558
  IN SIZE_T Size,
 
7559
  IN ULONG Tag);
 
7560
 
 
7561
VOID
 
7562
NTAPI
 
7563
FsRtlDeleteExtraCreateParameterLookasideList(
 
7564
  IN OUT PVOID Lookaside,
 
7565
  IN FSRTL_ECP_LOOKASIDE_FLAGS Flags);
 
7566
 
 
7567
NTKERNELAPI
 
7568
NTSTATUS
 
7569
NTAPI
 
7570
FsRtlAllocateExtraCreateParameterFromLookasideList(
 
7571
  IN LPCGUID EcpType,
 
7572
  IN ULONG SizeOfContext,
 
7573
  IN FSRTL_ALLOCATE_ECP_FLAGS Flags,
 
7574
  IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
 
7575
  IN OUT PVOID LookasideList,
 
7576
  OUT PVOID *EcpContext);
 
7577
 
 
7578
NTKERNELAPI
 
7579
NTSTATUS
 
7580
NTAPI
 
7581
FsRtlInsertExtraCreateParameter(
 
7582
  IN OUT PECP_LIST EcpList,
 
7583
  IN OUT PVOID EcpContext);
 
7584
 
 
7585
NTKERNELAPI
 
7586
NTSTATUS
 
7587
NTAPI
 
7588
FsRtlFindExtraCreateParameter(
 
7589
  IN PECP_LIST EcpList,
 
7590
  IN LPCGUID EcpType,
 
7591
  OUT PVOID *EcpContext OPTIONAL,
 
7592
  OUT ULONG *EcpContextSize OPTIONAL);
 
7593
 
 
7594
NTKERNELAPI
 
7595
NTSTATUS
 
7596
NTAPI
 
7597
FsRtlRemoveExtraCreateParameter(
 
7598
  IN OUT PECP_LIST EcpList,
 
7599
  IN LPCGUID EcpType,
 
7600
  OUT PVOID *EcpContext,
 
7601
  OUT ULONG *EcpContextSize OPTIONAL);
 
7602
 
 
7603
NTKERNELAPI
 
7604
NTSTATUS
 
7605
NTAPI
 
7606
FsRtlGetEcpListFromIrp(
 
7607
  IN PIRP Irp,
 
7608
  OUT PECP_LIST *EcpList OPTIONAL);
 
7609
 
 
7610
NTKERNELAPI
 
7611
NTSTATUS
 
7612
NTAPI
 
7613
FsRtlSetEcpListIntoIrp(
 
7614
  IN OUT PIRP Irp,
 
7615
  IN PECP_LIST EcpList);
 
7616
 
 
7617
NTKERNELAPI
 
7618
NTSTATUS
 
7619
NTAPI
 
7620
FsRtlGetNextExtraCreateParameter(
 
7621
  IN PECP_LIST EcpList,
 
7622
  IN PVOID CurrentEcpContext OPTIONAL,
 
7623
  OUT LPGUID NextEcpType OPTIONAL,
 
7624
  OUT PVOID *NextEcpContext OPTIONAL,
 
7625
  OUT ULONG *NextEcpContextSize OPTIONAL);
 
7626
 
 
7627
NTKERNELAPI
 
7628
VOID
 
7629
NTAPI
 
7630
FsRtlAcknowledgeEcp(
 
7631
  IN PVOID EcpContext);
 
7632
 
 
7633
NTKERNELAPI
 
7634
BOOLEAN
 
7635
NTAPI
 
7636
FsRtlIsEcpAcknowledged(
 
7637
  IN PVOID EcpContext);
 
7638
 
 
7639
NTKERNELAPI
 
7640
BOOLEAN
 
7641
NTAPI
 
7642
FsRtlIsEcpFromUserMode(
 
7643
  IN PVOID EcpContext);
 
7644
 
 
7645
NTKERNELAPI
 
7646
NTSTATUS
 
7647
NTAPI
 
7648
FsRtlChangeBackingFileObject(
 
7649
  IN PFILE_OBJECT CurrentFileObject OPTIONAL,
 
7650
  IN PFILE_OBJECT NewFileObject,
 
7651
  IN FSRTL_CHANGE_BACKING_TYPE ChangeBackingType,
 
7652
  IN ULONG Flags);
 
7653
 
 
7654
NTKERNELAPI
 
7655
NTSTATUS
 
7656
NTAPI
 
7657
FsRtlLogCcFlushError(
 
7658
  IN PUNICODE_STRING FileName,
 
7659
  IN PDEVICE_OBJECT DeviceObject,
 
7660
  IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
 
7661
  IN NTSTATUS FlushError,
 
7662
  IN ULONG Flags);
 
7663
 
 
7664
NTKERNELAPI
 
7665
BOOLEAN
 
7666
NTAPI
 
7667
FsRtlAreVolumeStartupApplicationsComplete(
 
7668
  VOID);
 
7669
 
 
7670
NTKERNELAPI
 
7671
ULONG
 
7672
NTAPI
 
7673
FsRtlQueryMaximumVirtualDiskNestingLevel(
 
7674
  VOID);
 
7675
 
 
7676
NTKERNELAPI
 
7677
NTSTATUS
 
7678
NTAPI
 
7679
FsRtlGetVirtualDiskNestingLevel(
 
7680
  IN PDEVICE_OBJECT DeviceObject,
 
7681
  OUT PULONG NestingLevel,
 
7682
  OUT PULONG NestingFlags OPTIONAL);
 
7683
 
 
7684
#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 
7685
 
 
7686
#if (NTDDI_VERSION >= NTDDI_VISTASP1)
 
7687
NTKERNELAPI
 
7688
NTSTATUS
 
7689
NTAPI
 
7690
FsRtlCheckOplockEx(
 
7691
  IN POPLOCK Oplock,
 
7692
  IN PIRP Irp,
 
7693
  IN ULONG Flags,
 
7694
  IN PVOID Context OPTIONAL,
 
7695
  IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
 
7696
  IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
 
7697
 
 
7698
#endif
 
7699
 
 
7700
#if (NTDDI_VERSION >= NTDDI_WIN7)
 
7701
 
 
7702
NTKERNELAPI
 
7703
BOOLEAN
 
7704
NTAPI
 
7705
FsRtlAreThereCurrentOrInProgressFileLocks(
 
7706
  IN PFILE_LOCK FileLock);
 
7707
 
 
7708
NTKERNELAPI
 
7709
BOOLEAN
 
7710
NTAPI
 
7711
FsRtlOplockIsSharedRequest(
 
7712
  IN PIRP Irp);
 
7713
 
 
7714
NTKERNELAPI
 
7715
NTSTATUS
 
7716
NTAPI
 
7717
FsRtlOplockBreakH(
 
7718
  IN POPLOCK Oplock,
 
7719
  IN PIRP Irp,
 
7720
  IN ULONG Flags,
 
7721
  IN PVOID Context OPTIONAL,
 
7722
  IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
 
7723
  IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
 
7724
 
 
7725
NTKERNELAPI
 
7726
BOOLEAN
 
7727
NTAPI
 
7728
FsRtlCurrentOplockH(
 
7729
  IN POPLOCK Oplock);
 
7730
 
 
7731
NTKERNELAPI
 
7732
NTSTATUS
 
7733
NTAPI
 
7734
FsRtlOplockBreakToNoneEx(
 
7735
  IN OUT POPLOCK Oplock,
 
7736
  IN PIRP Irp,
 
7737
  IN ULONG Flags,
 
7738
  IN PVOID Context OPTIONAL,
 
7739
  IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
 
7740
  IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
 
7741
 
 
7742
NTKERNELAPI
 
7743
NTSTATUS
 
7744
NTAPI
 
7745
FsRtlOplockFsctrlEx(
 
7746
  IN POPLOCK Oplock,
 
7747
  IN PIRP Irp,
 
7748
  IN ULONG OpenCount,
 
7749
  IN ULONG Flags);
 
7750
 
 
7751
NTKERNELAPI
 
7752
BOOLEAN
 
7753
NTAPI
 
7754
FsRtlOplockKeysEqual(
 
7755
  IN PFILE_OBJECT Fo1 OPTIONAL,
 
7756
  IN PFILE_OBJECT Fo2 OPTIONAL);
 
7757
 
 
7758
NTKERNELAPI
 
7759
NTSTATUS
 
7760
NTAPI
 
7761
FsRtlInitializeExtraCreateParameterList(
 
7762
  IN OUT PECP_LIST EcpList);
 
7763
 
 
7764
NTKERNELAPI
 
7765
VOID
 
7766
NTAPI
 
7767
FsRtlInitializeExtraCreateParameter(
 
7768
  IN PECP_HEADER Ecp,
 
7769
  IN ULONG EcpFlags,
 
7770
  IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
 
7771
  IN ULONG TotalSize,
 
7772
  IN LPCGUID EcpType,
 
7773
  IN PVOID ListAllocatedFrom OPTIONAL);
 
7774
 
 
7775
#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 
7776
 
 
7777
NTKERNELAPI
 
7778
NTSTATUS
 
7779
NTAPI
 
7780
FsRtlInsertPerFileContext(
 
7781
  IN PVOID* PerFileContextPointer,
 
7782
  IN PFSRTL_PER_FILE_CONTEXT Ptr);
 
7783
 
 
7784
NTKERNELAPI
 
7785
PFSRTL_PER_FILE_CONTEXT
 
7786
NTAPI
 
7787
FsRtlLookupPerFileContext(
 
7788
  IN PVOID* PerFileContextPointer,
 
7789
  IN PVOID OwnerId OPTIONAL,
 
7790
  IN PVOID InstanceId OPTIONAL);
 
7791
 
 
7792
NTKERNELAPI
 
7793
PFSRTL_PER_FILE_CONTEXT
 
7794
NTAPI
 
7795
FsRtlRemovePerFileContext(
 
7796
  IN PVOID* PerFileContextPointer,
 
7797
  IN PVOID OwnerId OPTIONAL,
 
7798
  IN PVOID InstanceId OPTIONAL);
 
7799
 
 
7800
NTKERNELAPI
 
7801
VOID
 
7802
NTAPI
 
7803
FsRtlTeardownPerFileContexts(
 
7804
  IN PVOID* PerFileContextPointer);
 
7805
 
 
7806
NTKERNELAPI
 
7807
NTSTATUS
 
7808
NTAPI
 
7809
FsRtlInsertPerFileObjectContext(
 
7810
  IN PFILE_OBJECT FileObject,
 
7811
  IN PFSRTL_PER_FILEOBJECT_CONTEXT Ptr);
 
7812
 
 
7813
NTKERNELAPI
 
7814
PFSRTL_PER_FILEOBJECT_CONTEXT
 
7815
NTAPI
 
7816
FsRtlLookupPerFileObjectContext(
 
7817
  IN PFILE_OBJECT FileObject,
 
7818
  IN PVOID OwnerId OPTIONAL,
 
7819
  IN PVOID InstanceId OPTIONAL);
 
7820
 
 
7821
NTKERNELAPI
 
7822
PFSRTL_PER_FILEOBJECT_CONTEXT
 
7823
NTAPI
 
7824
FsRtlRemovePerFileObjectContext(
 
7825
  IN PFILE_OBJECT FileObject,
 
7826
  IN PVOID OwnerId OPTIONAL,
 
7827
  IN PVOID InstanceId OPTIONAL);
 
7828
 
 
7829
#define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) (       \
 
7830
     FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11)   \
 
7831
)
 
7832
 
 
7833
#define FsRtlAreThereCurrentFileLocks(FL) ( \
 
7834
    ((FL)->FastIoIsQuestionable)            \
 
7835
)
 
7836
 
 
7837
#define FsRtlIncrementLockRequestsInProgress(FL) {                           \
 
7838
    ASSERT( (FL)->LockRequestsInProgress >= 0 );                             \
 
7839
    (void)                                                                   \
 
7840
    (InterlockedIncrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
 
7841
}
 
7842
 
 
7843
#define FsRtlDecrementLockRequestsInProgress(FL) {                           \
 
7844
    ASSERT( (FL)->LockRequestsInProgress > 0 );                              \
 
7845
    (void)                                                                   \
 
7846
    (InterlockedDecrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
 
7847
}
 
7848
 
 
7849
/* GCC compatible definition, MS one is retarded */
 
7850
extern NTKERNELAPI const UCHAR * const FsRtlLegalAnsiCharacterArray;
 
7851
#define LEGAL_ANSI_CHARACTER_ARRAY        FsRtlLegalAnsiCharacterArray
 
7852
 
 
7853
#define FsRtlIsAnsiCharacterWild(C) (                                       \
 
7854
    FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \
 
7855
)
 
7856
 
 
7857
#define FsRtlIsAnsiCharacterLegalFat(C, WILD) (                                \
 
7858
    FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_FAT_LEGAL) |       \
 
7859
                                        ((WILD) ? FSRTL_WILD_CHARACTER : 0 ))  \
 
7860
)
 
7861
 
 
7862
#define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) (                               \
 
7863
    FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) |      \
 
7864
                                        ((WILD) ? FSRTL_WILD_CHARACTER : 0 ))  \
 
7865
)
 
7866
 
 
7867
#define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) (                               \
 
7868
    FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) |      \
 
7869
                                        ((WILD) ? FSRTL_WILD_CHARACTER : 0 ))  \
 
7870
)
 
7871
 
 
7872
#define FsRtlIsAnsiCharacterLegalNtfsStream(C,WILD_OK) (                    \
 
7873
    FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_NTFS_STREAM_LEGAL)   \
 
7874
)
 
7875
 
 
7876
#define FsRtlIsAnsiCharacterLegal(C,FLAGS) (          \
 
7877
    FsRtlTestAnsiCharacter((C), TRUE, FALSE, (FLAGS)) \
 
7878
)
 
7879
 
 
7880
#define FsRtlTestAnsiCharacter(C, DEFAULT_RET, WILD_OK, FLAGS) (            \
 
7881
        ((SCHAR)(C) < 0) ? DEFAULT_RET :                                    \
 
7882
                           FlagOn( LEGAL_ANSI_CHARACTER_ARRAY[(C)],         \
 
7883
                                   (FLAGS) |                                \
 
7884
                                   ((WILD_OK) ? FSRTL_WILD_CHARACTER : 0) ) \
 
7885
)
 
7886
 
 
7887
#define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) (                               \
 
7888
    (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE :                           \
 
7889
              (NLS_MB_CODE_PAGE_TAG &&                                      \
 
7890
               (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0)))          \
 
7891
)
 
7892
 
 
7893
#define FsRtlIsUnicodeCharacterWild(C) (                                    \
 
7894
    (((C) >= 0x40) ?                                                        \
 
7895
    FALSE :                                                                 \
 
7896
    FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER ))       \
 
7897
)
 
7898
 
 
7899
#define FsRtlInitPerFileContext( _fc, _owner, _inst, _cb)   \
 
7900
    ((_fc)->OwnerId = (_owner),                               \
 
7901
     (_fc)->InstanceId = (_inst),                             \
 
7902
     (_fc)->FreeCallback = (_cb))
 
7903
 
 
7904
#define FsRtlGetPerFileContextPointer(_fo) \
 
7905
    (FsRtlSupportsPerFileContexts(_fo) ? \
 
7906
        FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer : \
 
7907
        NULL)
 
7908
 
 
7909
#define FsRtlSupportsPerFileContexts(_fo)                     \
 
7910
    ((FsRtlGetPerStreamContextPointer(_fo) != NULL) &&        \
 
7911
     (FsRtlGetPerStreamContextPointer(_fo)->Version >= FSRTL_FCB_HEADER_V1) &&  \
 
7912
     (FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer != NULL))
 
7913
 
 
7914
#define FsRtlSetupAdvancedHeaderEx( _advhdr, _fmutx, _fctxptr )                     \
 
7915
{                                                                                   \
 
7916
    FsRtlSetupAdvancedHeader( _advhdr, _fmutx );                                    \
 
7917
    if ((_fctxptr) != NULL) {                                                       \
 
7918
        (_advhdr)->FileContextSupportPointer = (_fctxptr);                          \
 
7919
    }                                                                               \
 
7920
}
 
7921
 
 
7922
#define FsRtlGetPerStreamContextPointer(FO) (   \
 
7923
    (PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext \
 
7924
)
 
7925
 
 
7926
#define FsRtlInitPerStreamContext(PSC, O, I, FC) ( \
 
7927
    (PSC)->OwnerId = (O),                          \
 
7928
    (PSC)->InstanceId = (I),                       \
 
7929
    (PSC)->FreeCallback = (FC)                     \
 
7930
)
 
7931
 
 
7932
#define FsRtlSupportsPerStreamContexts(FO) (                       \
 
7933
    (BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) &&     \
 
7934
              FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \
 
7935
              FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS))               \
 
7936
)
 
7937
 
 
7938
#define FsRtlLookupPerStreamContext(_sc, _oid, _iid)                          \
 
7939
 (((NULL != (_sc)) &&                                                         \
 
7940
   FlagOn((_sc)->Flags2,FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS) &&              \
 
7941
   !IsListEmpty(&(_sc)->FilterContexts)) ?                                    \
 
7942
        FsRtlLookupPerStreamContextInternal((_sc), (_oid), (_iid)) :          \
 
7943
        NULL)
 
7944
 
 
7945
FORCEINLINE
 
7946
VOID
 
7947
NTAPI
 
7948
FsRtlSetupAdvancedHeader(
 
7949
  IN PVOID AdvHdr,
 
7950
  IN PFAST_MUTEX FMutex )
 
7951
{
 
7952
  PFSRTL_ADVANCED_FCB_HEADER localAdvHdr = (PFSRTL_ADVANCED_FCB_HEADER)AdvHdr;
 
7953
 
 
7954
  localAdvHdr->Flags |= FSRTL_FLAG_ADVANCED_HEADER;
 
7955
  localAdvHdr->Flags2 |= FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS;
 
7956
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
7957
  localAdvHdr->Version = FSRTL_FCB_HEADER_V1;
 
7958
#else
 
7959
  localAdvHdr->Version = FSRTL_FCB_HEADER_V0;
 
7960
#endif
 
7961
  InitializeListHead( &localAdvHdr->FilterContexts );
 
7962
  if (FMutex != NULL) {
 
7963
    localAdvHdr->FastMutex = FMutex;
 
7964
  }
 
7965
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
7966
  *((PULONG_PTR)(&localAdvHdr->PushLock)) = 0;
 
7967
  localAdvHdr->FileContextSupportPointer = NULL;
 
7968
#endif
 
7969
}
 
7970
 
 
7971
#define FsRtlInitPerFileObjectContext(_fc, _owner, _inst)         \
 
7972
           ((_fc)->OwnerId = (_owner), (_fc)->InstanceId = (_inst))
 
7973
 
 
7974
#define FsRtlCompleteRequest(IRP,STATUS) {         \
 
7975
    (IRP)->IoStatus.Status = (STATUS);             \
 
7976
    IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
 
7977
}
 
7978
/* Common Cache Types */
 
7979
 
 
7980
#define VACB_MAPPING_GRANULARITY        (0x40000)
 
7981
#define VACB_OFFSET_SHIFT               (18)
 
7982
 
 
7983
typedef struct _PUBLIC_BCB {
 
7984
  CSHORT NodeTypeCode;
 
7985
  CSHORT NodeByteSize;
 
7986
  ULONG MappedLength;
 
7987
  LARGE_INTEGER MappedFileOffset;
 
7988
} PUBLIC_BCB, *PPUBLIC_BCB;
 
7989
 
 
7990
typedef struct _CC_FILE_SIZES {
 
7991
  LARGE_INTEGER AllocationSize;
 
7992
  LARGE_INTEGER FileSize;
 
7993
  LARGE_INTEGER ValidDataLength;
 
7994
} CC_FILE_SIZES, *PCC_FILE_SIZES;
 
7995
 
 
7996
typedef BOOLEAN
 
7997
(NTAPI *PACQUIRE_FOR_LAZY_WRITE) (
 
7998
  IN PVOID Context,
 
7999
  IN BOOLEAN Wait);
 
8000
 
 
8001
typedef VOID
 
8002
(NTAPI *PRELEASE_FROM_LAZY_WRITE) (
 
8003
  IN PVOID Context);
 
8004
 
 
8005
typedef BOOLEAN
 
8006
(NTAPI *PACQUIRE_FOR_READ_AHEAD) (
 
8007
  IN PVOID Context,
 
8008
  IN BOOLEAN Wait);
 
8009
 
 
8010
typedef VOID
 
8011
(NTAPI *PRELEASE_FROM_READ_AHEAD) (
 
8012
  IN PVOID Context);
 
8013
 
 
8014
typedef struct _CACHE_MANAGER_CALLBACKS {
 
8015
  PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite;
 
8016
  PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite;
 
8017
  PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead;
 
8018
  PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead;
 
8019
} CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
 
8020
 
 
8021
typedef struct _CACHE_UNINITIALIZE_EVENT {
 
8022
  struct _CACHE_UNINITIALIZE_EVENT *Next;
 
8023
  KEVENT Event;
 
8024
} CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT;
 
8025
 
 
8026
typedef VOID
 
8027
(NTAPI *PDIRTY_PAGE_ROUTINE) (
 
8028
  IN PFILE_OBJECT FileObject,
 
8029
  IN PLARGE_INTEGER FileOffset,
 
8030
  IN ULONG Length,
 
8031
  IN PLARGE_INTEGER OldestLsn,
 
8032
  IN PLARGE_INTEGER NewestLsn,
 
8033
  IN PVOID Context1,
 
8034
  IN PVOID Context2);
 
8035
 
 
8036
typedef VOID
 
8037
(NTAPI *PFLUSH_TO_LSN) (
 
8038
  IN PVOID LogHandle,
 
8039
  IN LARGE_INTEGER Lsn);
 
8040
 
 
8041
typedef VOID
 
8042
(NTAPI *PCC_POST_DEFERRED_WRITE) (
 
8043
  IN PVOID Context1,
 
8044
  IN PVOID Context2);
 
8045
 
 
8046
#define UNINITIALIZE_CACHE_MAPS          (1)
 
8047
#define DO_NOT_RETRY_PURGE               (2)
 
8048
#define DO_NOT_PURGE_DIRTY_PAGES         (0x4)
 
8049
 
 
8050
#define CC_FLUSH_AND_PURGE_NO_PURGE     (0x1)
 
8051
/* Common Cache Functions */
 
8052
 
 
8053
#define CcIsFileCached(FO) (                                                         \
 
8054
    ((FO)->SectionObjectPointer != NULL) &&                                          \
 
8055
    (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
 
8056
)
 
8057
 
 
8058
extern ULONG CcFastMdlReadWait;
 
8059
 
 
8060
#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
8061
 
 
8062
NTKERNELAPI
 
8063
VOID
 
8064
NTAPI
 
8065
CcInitializeCacheMap(
 
8066
  IN PFILE_OBJECT FileObject,
 
8067
  IN PCC_FILE_SIZES FileSizes,
 
8068
  IN BOOLEAN PinAccess,
 
8069
  IN PCACHE_MANAGER_CALLBACKS Callbacks,
 
8070
  IN PVOID LazyWriteContext);
 
8071
 
 
8072
NTKERNELAPI
 
8073
BOOLEAN
 
8074
NTAPI
 
8075
CcUninitializeCacheMap(
 
8076
  IN PFILE_OBJECT FileObject,
 
8077
  IN PLARGE_INTEGER TruncateSize OPTIONAL,
 
8078
  IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL);
 
8079
 
 
8080
NTKERNELAPI
 
8081
VOID
 
8082
NTAPI
 
8083
CcSetFileSizes(
 
8084
  IN PFILE_OBJECT FileObject,
 
8085
  IN PCC_FILE_SIZES FileSizes);
 
8086
 
 
8087
NTKERNELAPI
 
8088
VOID
 
8089
NTAPI
 
8090
CcSetDirtyPageThreshold(
 
8091
  IN PFILE_OBJECT FileObject,
 
8092
  IN ULONG DirtyPageThreshold);
 
8093
 
 
8094
NTKERNELAPI
 
8095
VOID
 
8096
NTAPI
 
8097
CcFlushCache(
 
8098
  IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
 
8099
  IN PLARGE_INTEGER FileOffset OPTIONAL,
 
8100
  IN ULONG Length,
 
8101
  OUT PIO_STATUS_BLOCK IoStatus OPTIONAL);
 
8102
 
 
8103
NTKERNELAPI
 
8104
LARGE_INTEGER
 
8105
NTAPI
 
8106
CcGetFlushedValidData(
 
8107
  IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
 
8108
  IN BOOLEAN BcbListHeld);
 
8109
 
 
8110
NTKERNELAPI
 
8111
BOOLEAN
 
8112
NTAPI
 
8113
CcZeroData(
 
8114
  IN PFILE_OBJECT FileObject,
 
8115
  IN PLARGE_INTEGER StartOffset,
 
8116
  IN PLARGE_INTEGER EndOffset,
 
8117
  IN BOOLEAN Wait);
 
8118
 
 
8119
NTKERNELAPI
 
8120
PVOID
 
8121
NTAPI
 
8122
CcRemapBcb(
 
8123
  IN PVOID Bcb);
 
8124
 
 
8125
NTKERNELAPI
 
8126
VOID
 
8127
NTAPI
 
8128
CcRepinBcb(
 
8129
  IN PVOID Bcb);
 
8130
 
 
8131
NTKERNELAPI
 
8132
VOID
 
8133
NTAPI
 
8134
CcUnpinRepinnedBcb(
 
8135
  IN PVOID Bcb,
 
8136
  IN BOOLEAN WriteThrough,
 
8137
  OUT PIO_STATUS_BLOCK IoStatus);
 
8138
 
 
8139
NTKERNELAPI
 
8140
PFILE_OBJECT
 
8141
NTAPI
 
8142
CcGetFileObjectFromSectionPtrs(
 
8143
  IN PSECTION_OBJECT_POINTERS SectionObjectPointer);
 
8144
 
 
8145
NTKERNELAPI
 
8146
PFILE_OBJECT
 
8147
NTAPI
 
8148
CcGetFileObjectFromBcb(
 
8149
  IN PVOID Bcb);
 
8150
 
 
8151
NTKERNELAPI
 
8152
BOOLEAN
 
8153
NTAPI
 
8154
CcCanIWrite(
 
8155
  IN PFILE_OBJECT FileObject,
 
8156
  IN ULONG BytesToWrite,
 
8157
  IN BOOLEAN Wait,
 
8158
  IN BOOLEAN Retrying);
 
8159
 
 
8160
NTKERNELAPI
 
8161
VOID
 
8162
NTAPI
 
8163
CcDeferWrite(
 
8164
  IN PFILE_OBJECT FileObject,
 
8165
  IN PCC_POST_DEFERRED_WRITE PostRoutine,
 
8166
  IN PVOID Context1,
 
8167
  IN PVOID Context2,
 
8168
  IN ULONG BytesToWrite,
 
8169
  IN BOOLEAN Retrying);
 
8170
 
 
8171
NTKERNELAPI
 
8172
BOOLEAN
 
8173
NTAPI
 
8174
CcCopyRead(
 
8175
  IN PFILE_OBJECT FileObject,
 
8176
  IN PLARGE_INTEGER FileOffset,
 
8177
  IN ULONG Length,
 
8178
  IN BOOLEAN Wait,
 
8179
  OUT PVOID Buffer,
 
8180
  OUT PIO_STATUS_BLOCK IoStatus);
 
8181
 
 
8182
NTKERNELAPI
 
8183
VOID
 
8184
NTAPI
 
8185
CcFastCopyRead(
 
8186
  IN PFILE_OBJECT FileObject,
 
8187
  IN ULONG FileOffset,
 
8188
  IN ULONG Length,
 
8189
  IN ULONG PageCount,
 
8190
  OUT PVOID Buffer,
 
8191
  OUT PIO_STATUS_BLOCK IoStatus);
 
8192
 
 
8193
NTKERNELAPI
 
8194
BOOLEAN
 
8195
NTAPI
 
8196
CcCopyWrite(
 
8197
  IN PFILE_OBJECT FileObject,
 
8198
  IN PLARGE_INTEGER FileOffset,
 
8199
  IN ULONG Length,
 
8200
  IN BOOLEAN Wait,
 
8201
  IN PVOID Buffer);
 
8202
 
 
8203
NTKERNELAPI
 
8204
VOID
 
8205
NTAPI
 
8206
CcFastCopyWrite(
 
8207
  IN PFILE_OBJECT FileObject,
 
8208
  IN ULONG FileOffset,
 
8209
  IN ULONG Length,
 
8210
  IN PVOID Buffer);
 
8211
 
 
8212
NTKERNELAPI
 
8213
VOID
 
8214
NTAPI
 
8215
CcMdlRead(
 
8216
  IN PFILE_OBJECT FileObject,
 
8217
  IN PLARGE_INTEGER FileOffset,
 
8218
  IN ULONG Length,
 
8219
  OUT PMDL *MdlChain,
 
8220
  OUT PIO_STATUS_BLOCK IoStatus);
 
8221
 
 
8222
NTKERNELAPI
 
8223
VOID
 
8224
NTAPI
 
8225
CcMdlReadComplete(
 
8226
  IN PFILE_OBJECT FileObject,
 
8227
  IN PMDL MdlChain);
 
8228
 
 
8229
NTKERNELAPI
 
8230
VOID
 
8231
NTAPI
 
8232
CcPrepareMdlWrite(
 
8233
  IN PFILE_OBJECT FileObject,
 
8234
  IN PLARGE_INTEGER FileOffset,
 
8235
  IN ULONG Length,
 
8236
  OUT PMDL *MdlChain,
 
8237
  OUT PIO_STATUS_BLOCK IoStatus);
 
8238
 
 
8239
NTKERNELAPI
 
8240
VOID
 
8241
NTAPI
 
8242
CcMdlWriteComplete(
 
8243
  IN PFILE_OBJECT FileObject,
 
8244
  IN PLARGE_INTEGER FileOffset,
 
8245
  IN PMDL MdlChain);
 
8246
 
 
8247
NTKERNELAPI
 
8248
VOID
 
8249
NTAPI
 
8250
CcScheduleReadAhead(
 
8251
  IN PFILE_OBJECT FileObject,
 
8252
  IN PLARGE_INTEGER FileOffset,
 
8253
  IN ULONG Length);
 
8254
 
 
8255
NTKERNELAPI
 
8256
NTSTATUS
 
8257
NTAPI
 
8258
CcWaitForCurrentLazyWriterActivity(
 
8259
  VOID);
 
8260
 
 
8261
NTKERNELAPI
 
8262
VOID
 
8263
NTAPI
 
8264
CcSetReadAheadGranularity(
 
8265
  IN PFILE_OBJECT FileObject,
 
8266
  IN ULONG Granularity);
 
8267
 
 
8268
NTKERNELAPI
 
8269
BOOLEAN
 
8270
NTAPI
 
8271
CcPinRead(
 
8272
  IN PFILE_OBJECT FileObject,
 
8273
  IN PLARGE_INTEGER FileOffset,
 
8274
  IN ULONG Length,
 
8275
  IN ULONG Flags,
 
8276
  OUT PVOID *Bcb,
 
8277
  OUT PVOID *Buffer);
 
8278
 
 
8279
NTKERNELAPI
 
8280
BOOLEAN
 
8281
NTAPI
 
8282
CcPinMappedData(
 
8283
  IN PFILE_OBJECT FileObject,
 
8284
  IN PLARGE_INTEGER FileOffset,
 
8285
  IN ULONG Length,
 
8286
  IN ULONG Flags,
 
8287
  IN OUT PVOID *Bcb);
 
8288
 
 
8289
NTKERNELAPI
 
8290
BOOLEAN
 
8291
NTAPI
 
8292
CcPreparePinWrite(
 
8293
  IN PFILE_OBJECT FileObject,
 
8294
  IN PLARGE_INTEGER FileOffset,
 
8295
  IN ULONG Length,
 
8296
  IN BOOLEAN Zero,
 
8297
  IN ULONG Flags,
 
8298
  OUT PVOID *Bcb,
 
8299
  OUT PVOID *Buffer);
 
8300
 
 
8301
NTKERNELAPI
 
8302
VOID
 
8303
NTAPI
 
8304
CcSetDirtyPinnedData(
 
8305
  IN PVOID BcbVoid,
 
8306
  IN PLARGE_INTEGER Lsn OPTIONAL);
 
8307
 
 
8308
NTKERNELAPI
 
8309
VOID
 
8310
NTAPI
 
8311
CcUnpinData(
 
8312
  IN PVOID Bcb);
 
8313
 
 
8314
NTKERNELAPI
 
8315
VOID
 
8316
NTAPI
 
8317
CcSetBcbOwnerPointer(
 
8318
  IN PVOID Bcb,
 
8319
  IN PVOID OwnerPointer);
 
8320
 
 
8321
NTKERNELAPI
 
8322
VOID
 
8323
NTAPI
 
8324
CcUnpinDataForThread(
 
8325
  IN PVOID Bcb,
 
8326
  IN ERESOURCE_THREAD ResourceThreadId);
 
8327
 
 
8328
NTKERNELAPI
 
8329
VOID
 
8330
NTAPI
 
8331
CcSetAdditionalCacheAttributes(
 
8332
  IN PFILE_OBJECT FileObject,
 
8333
  IN BOOLEAN DisableReadAhead,
 
8334
  IN BOOLEAN DisableWriteBehind);
 
8335
 
 
8336
NTKERNELAPI
 
8337
BOOLEAN
 
8338
NTAPI
 
8339
CcIsThereDirtyData(
 
8340
  IN PVPB Vpb);
 
8341
 
 
8342
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 
8343
 
 
8344
#if (NTDDI_VERSION >= NTDDI_WINXP)
 
8345
 
 
8346
NTKERNELAPI
 
8347
VOID
 
8348
NTAPI
 
8349
CcMdlWriteAbort(
 
8350
  IN PFILE_OBJECT FileObject,
 
8351
  IN PMDL MdlChain);
 
8352
 
 
8353
NTKERNELAPI
 
8354
VOID
 
8355
NTAPI
 
8356
CcSetLogHandleForFile(
 
8357
  IN PFILE_OBJECT FileObject,
 
8358
  IN PVOID LogHandle,
 
8359
  IN PFLUSH_TO_LSN FlushToLsnRoutine);
 
8360
 
 
8361
NTKERNELAPI
 
8362
LARGE_INTEGER
 
8363
NTAPI
 
8364
CcGetDirtyPages(
 
8365
  IN PVOID LogHandle,
 
8366
  IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
 
8367
  IN PVOID Context1,
 
8368
  IN PVOID Context2);
 
8369
 
 
8370
#endif
 
8371
 
 
8372
#if (NTDDI_VERSION >= NTDDI_WINXP)
 
8373
NTKERNELAPI
 
8374
BOOLEAN
 
8375
NTAPI
 
8376
CcMapData(
 
8377
  IN PFILE_OBJECT FileObject,
 
8378
  IN PLARGE_INTEGER FileOffset,
 
8379
  IN ULONG Length,
 
8380
  IN ULONG Flags,
 
8381
  OUT PVOID *Bcb,
 
8382
  OUT PVOID *Buffer);
 
8383
#elif (NTDDI_VERSION >= NTDDI_WIN2K)
 
8384
NTKERNELAPI
 
8385
BOOLEAN
 
8386
NTAPI
 
8387
CcMapData(
 
8388
  IN PFILE_OBJECT FileObject,
 
8389
  IN PLARGE_INTEGER FileOffset,
 
8390
  IN ULONG Length,
 
8391
  IN BOOLEAN Wait,
 
8392
  OUT PVOID *Bcb,
 
8393
  OUT PVOID *Buffer);
 
8394
#endif
 
8395
 
 
8396
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
8397
 
 
8398
NTKERNELAPI
 
8399
NTSTATUS
 
8400
NTAPI
 
8401
CcSetFileSizesEx(
 
8402
  IN PFILE_OBJECT FileObject,
 
8403
  IN PCC_FILE_SIZES FileSizes);
 
8404
 
 
8405
NTKERNELAPI
 
8406
PFILE_OBJECT
 
8407
NTAPI
 
8408
CcGetFileObjectFromSectionPtrsRef(
 
8409
  IN PSECTION_OBJECT_POINTERS SectionObjectPointer);
 
8410
 
 
8411
NTKERNELAPI
 
8412
VOID
 
8413
NTAPI
 
8414
CcSetParallelFlushFile(
 
8415
  IN PFILE_OBJECT FileObject,
 
8416
  IN BOOLEAN EnableParallelFlush);
 
8417
 
 
8418
NTKERNELAPI
 
8419
BOOLEAN
 
8420
CcIsThereDirtyDataEx(
 
8421
  IN PVPB Vpb,
 
8422
  IN PULONG NumberOfDirtyPages OPTIONAL);
 
8423
 
 
8424
#endif
 
8425
 
 
8426
#if (NTDDI_VERSION >= NTDDI_WIN7)
 
8427
NTKERNELAPI
 
8428
VOID
 
8429
NTAPI
 
8430
CcCoherencyFlushAndPurgeCache(
 
8431
  IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
 
8432
  IN PLARGE_INTEGER FileOffset OPTIONAL,
 
8433
  IN ULONG Length,
 
8434
  OUT PIO_STATUS_BLOCK IoStatus,
 
8435
  IN ULONG Flags OPTIONAL);
 
8436
#endif
 
8437
 
 
8438
#define CcGetFileSizePointer(FO) (                                     \
 
8439
    ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
 
8440
)
 
8441
 
 
8442
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
8443
NTKERNELAPI
 
8444
BOOLEAN
 
8445
NTAPI
 
8446
CcPurgeCacheSection(
 
8447
  IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
 
8448
  IN PLARGE_INTEGER FileOffset OPTIONAL,
 
8449
  IN ULONG Length,
 
8450
  IN ULONG Flags);
 
8451
#elif (NTDDI_VERSION >= NTDDI_WIN2K)
 
8452
NTKERNELAPI
 
8453
BOOLEAN
 
8454
NTAPI
 
8455
CcPurgeCacheSection(
 
8456
  IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
 
8457
  IN PLARGE_INTEGER FileOffset OPTIONAL,
 
8458
  IN ULONG Length,
 
8459
  IN BOOLEAN UninitializeCacheMaps);
 
8460
#endif
 
8461
 
 
8462
#if (NTDDI_VERSION >= NTDDI_WIN7)
 
8463
NTKERNELAPI
 
8464
BOOLEAN
 
8465
NTAPI
 
8466
CcCopyWriteWontFlush(
 
8467
  IN PFILE_OBJECT FileObject,
 
8468
  IN PLARGE_INTEGER FileOffset,
 
8469
  IN ULONG Length);
 
8470
#else
 
8471
#define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
 
8472
#endif
 
8473
 
 
8474
#define CcReadAhead(FO, FOFF, LEN) (                \
 
8475
    if ((LEN) >= 256) {                             \
 
8476
        CcScheduleReadAhead((FO), (FOFF), (LEN));   \
 
8477
    }                                               \
 
8478
)
 
8479
/******************************************************************************
 
8480
 *                            ZwXxx Functions                                 *
 
8481
 ******************************************************************************/
 
8482
 
 
8483
 
 
8484
 
 
8485
NTSYSAPI
 
8486
NTSTATUS
 
8487
NTAPI
 
8488
ZwQueryEaFile(
 
8489
  IN HANDLE FileHandle,
 
8490
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
8491
  OUT PVOID Buffer,
 
8492
  IN ULONG Length,
 
8493
  IN BOOLEAN ReturnSingleEntry,
 
8494
  IN PVOID EaList OPTIONAL,
 
8495
  IN ULONG EaListLength,
 
8496
  IN PULONG EaIndex OPTIONAL,
 
8497
  IN BOOLEAN RestartScan);
 
8498
 
 
8499
NTSYSAPI
 
8500
NTSTATUS
 
8501
NTAPI
 
8502
ZwSetEaFile(
 
8503
  IN HANDLE FileHandle,
 
8504
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
8505
  OUT PVOID Buffer,
 
8506
  IN ULONG Length);
 
8507
 
 
8508
NTSYSAPI
 
8509
NTSTATUS
 
8510
NTAPI
 
8511
ZwDuplicateToken(
 
8512
  IN HANDLE ExistingTokenHandle,
 
8513
  IN ACCESS_MASK DesiredAccess,
 
8514
  IN POBJECT_ATTRIBUTES ObjectAttributes,
 
8515
  IN BOOLEAN EffectiveOnly,
 
8516
  IN TOKEN_TYPE TokenType,
 
8517
  OUT PHANDLE NewTokenHandle);
 
8518
 
 
8519
#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
8520
 
 
8521
NTSYSAPI
 
8522
NTSTATUS
 
8523
NTAPI
 
8524
ZwQueryObject(
 
8525
  IN HANDLE Handle OPTIONAL,
 
8526
  IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
 
8527
  OUT PVOID ObjectInformation OPTIONAL,
 
8528
  IN ULONG ObjectInformationLength,
 
8529
  OUT PULONG ReturnLength OPTIONAL);
 
8530
 
 
8531
NTSYSAPI
 
8532
NTSTATUS
 
8533
NTAPI
 
8534
ZwNotifyChangeKey(
 
8535
  IN HANDLE KeyHandle,
 
8536
  IN HANDLE EventHandle OPTIONAL,
 
8537
  IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
 
8538
  IN PVOID ApcContext OPTIONAL,
 
8539
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
8540
  IN ULONG NotifyFilter,
 
8541
  IN BOOLEAN WatchSubtree,
 
8542
  OUT PVOID Buffer,
 
8543
  IN ULONG BufferLength,
 
8544
  IN BOOLEAN Asynchronous);
 
8545
 
 
8546
NTSYSAPI
 
8547
NTSTATUS
 
8548
NTAPI
 
8549
ZwCreateEvent(
 
8550
  OUT PHANDLE EventHandle,
 
8551
  IN ACCESS_MASK DesiredAccess,
 
8552
  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
 
8553
  IN EVENT_TYPE EventType,
 
8554
  IN BOOLEAN InitialState);
 
8555
 
 
8556
NTSYSAPI
 
8557
NTSTATUS
 
8558
NTAPI
 
8559
ZwDeleteFile(
 
8560
  IN POBJECT_ATTRIBUTES ObjectAttributes);
 
8561
 
 
8562
NTSYSAPI
 
8563
NTSTATUS
 
8564
NTAPI
 
8565
ZwQueryDirectoryFile(
 
8566
  IN HANDLE FileHandle,
 
8567
  IN HANDLE Event OPTIONAL,
 
8568
  IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
 
8569
  IN PVOID ApcContext OPTIONAL,
 
8570
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
8571
  OUT PVOID FileInformation,
 
8572
  IN ULONG Length,
 
8573
  IN FILE_INFORMATION_CLASS FileInformationClass,
 
8574
  IN BOOLEAN ReturnSingleEntry,
 
8575
  IN PUNICODE_STRING FileName OPTIONAL,
 
8576
  IN BOOLEAN RestartScan);
 
8577
 
 
8578
NTSYSAPI
 
8579
NTSTATUS
 
8580
NTAPI
 
8581
ZwSetVolumeInformationFile(
 
8582
  IN HANDLE FileHandle,
 
8583
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
8584
  IN PVOID FsInformation,
 
8585
  IN ULONG Length,
 
8586
  IN FS_INFORMATION_CLASS FsInformationClass);
 
8587
 
 
8588
NTSYSAPI
 
8589
NTSTATUS
 
8590
NTAPI
 
8591
ZwFsControlFile(
 
8592
  IN HANDLE FileHandle,
 
8593
  IN HANDLE Event OPTIONAL,
 
8594
  IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
 
8595
  IN PVOID ApcContext OPTIONAL,
 
8596
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
8597
  IN ULONG FsControlCode,
 
8598
  IN PVOID InputBuffer OPTIONAL,
 
8599
  IN ULONG InputBufferLength,
 
8600
  OUT PVOID OutputBuffer OPTIONAL,
 
8601
  IN ULONG OutputBufferLength);
 
8602
 
 
8603
NTSYSAPI
 
8604
NTSTATUS
 
8605
NTAPI
 
8606
ZwDuplicateObject(
 
8607
  IN HANDLE SourceProcessHandle,
 
8608
  IN HANDLE SourceHandle,
 
8609
  IN HANDLE TargetProcessHandle OPTIONAL,
 
8610
  OUT PHANDLE TargetHandle OPTIONAL,
 
8611
  IN ACCESS_MASK DesiredAccess,
 
8612
  IN ULONG HandleAttributes,
 
8613
  IN ULONG Options);
 
8614
 
 
8615
NTSYSAPI
 
8616
NTSTATUS
 
8617
NTAPI
 
8618
ZwOpenDirectoryObject(
 
8619
  OUT PHANDLE DirectoryHandle,
 
8620
  IN ACCESS_MASK DesiredAccess,
 
8621
  IN POBJECT_ATTRIBUTES ObjectAttributes);
 
8622
 
 
8623
NTSYSAPI
 
8624
NTSTATUS
 
8625
NTAPI
 
8626
ZwAllocateVirtualMemory(
 
8627
  IN HANDLE ProcessHandle,
 
8628
  IN OUT PVOID *BaseAddress,
 
8629
  IN ULONG_PTR ZeroBits,
 
8630
  IN OUT PSIZE_T RegionSize,
 
8631
  IN ULONG AllocationType,
 
8632
  IN ULONG Protect);
 
8633
 
 
8634
NTSYSAPI
 
8635
NTSTATUS
 
8636
NTAPI
 
8637
ZwFreeVirtualMemory(
 
8638
  IN HANDLE ProcessHandle,
 
8639
  IN OUT PVOID *BaseAddress,
 
8640
  IN OUT PSIZE_T RegionSize,
 
8641
  IN ULONG FreeType);
 
8642
 
 
8643
NTSYSAPI
 
8644
NTSTATUS
 
8645
NTAPI
 
8646
ZwWaitForSingleObject(
 
8647
  IN HANDLE Handle,
 
8648
  IN BOOLEAN Alertable,
 
8649
  IN PLARGE_INTEGER Timeout OPTIONAL);
 
8650
 
 
8651
NTSYSAPI
 
8652
NTSTATUS
 
8653
NTAPI
 
8654
ZwSetEvent(
 
8655
  IN HANDLE EventHandle,
 
8656
  OUT PLONG PreviousState OPTIONAL);
 
8657
 
 
8658
NTSYSAPI
 
8659
NTSTATUS
 
8660
NTAPI
 
8661
ZwFlushVirtualMemory(
 
8662
  IN HANDLE ProcessHandle,
 
8663
  IN OUT PVOID *BaseAddress,
 
8664
  IN OUT PSIZE_T RegionSize,
 
8665
  OUT PIO_STATUS_BLOCK IoStatusBlock);
 
8666
 
 
8667
NTSYSAPI
 
8668
NTSTATUS
 
8669
NTAPI
 
8670
ZwQueryInformationToken(
 
8671
  IN HANDLE TokenHandle,
 
8672
  IN TOKEN_INFORMATION_CLASS TokenInformationClass,
 
8673
  OUT PVOID TokenInformation,
 
8674
  IN ULONG Length,
 
8675
  OUT PULONG ResultLength);
 
8676
 
 
8677
NTSYSAPI
 
8678
NTSTATUS
 
8679
NTAPI
 
8680
ZwSetSecurityObject(
 
8681
  IN HANDLE Handle,
 
8682
  IN SECURITY_INFORMATION SecurityInformation,
 
8683
  IN PSECURITY_DESCRIPTOR SecurityDescriptor);
 
8684
 
 
8685
NTSYSAPI
 
8686
NTSTATUS
 
8687
NTAPI
 
8688
ZwQuerySecurityObject(
 
8689
  IN HANDLE FileHandle,
 
8690
  IN SECURITY_INFORMATION SecurityInformation,
 
8691
  OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
 
8692
  IN ULONG Length,
 
8693
  OUT PULONG ResultLength);
 
8694
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 
8695
 
 
8696
#if (NTDDI_VERSION >= NTDDI_WINXP)
 
8697
 
 
8698
NTSYSAPI
 
8699
NTSTATUS
 
8700
NTAPI
 
8701
ZwOpenProcessTokenEx(
 
8702
  IN HANDLE ProcessHandle,
 
8703
  IN ACCESS_MASK DesiredAccess,
 
8704
  IN ULONG HandleAttributes,
 
8705
  OUT PHANDLE TokenHandle);
 
8706
 
 
8707
NTSYSAPI
 
8708
NTSTATUS
 
8709
NTAPI
 
8710
ZwOpenThreadTokenEx(
 
8711
  IN HANDLE ThreadHandle,
 
8712
  IN ACCESS_MASK DesiredAccess,
 
8713
  IN BOOLEAN OpenAsSelf,
 
8714
  IN ULONG HandleAttributes,
 
8715
  OUT PHANDLE TokenHandle);
 
8716
 
 
8717
#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 
8718
 
 
8719
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
8720
 
 
8721
NTSYSAPI
 
8722
NTSTATUS
 
8723
NTAPI
 
8724
ZwLockFile(
 
8725
  IN HANDLE FileHandle,
 
8726
  IN HANDLE Event OPTIONAL,
 
8727
  IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
 
8728
  IN PVOID ApcContext OPTIONAL,
 
8729
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
8730
  IN PLARGE_INTEGER ByteOffset,
 
8731
  IN PLARGE_INTEGER Length,
 
8732
  IN ULONG Key,
 
8733
  IN BOOLEAN FailImmediately,
 
8734
  IN BOOLEAN ExclusiveLock);
 
8735
 
 
8736
NTSYSAPI
 
8737
NTSTATUS
 
8738
NTAPI
 
8739
ZwUnlockFile(
 
8740
  IN HANDLE FileHandle,
 
8741
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
8742
  IN PLARGE_INTEGER ByteOffset,
 
8743
  IN PLARGE_INTEGER Length,
 
8744
  IN ULONG Key);
 
8745
 
 
8746
NTSYSAPI
 
8747
NTSTATUS
 
8748
NTAPI
 
8749
ZwQueryQuotaInformationFile(
 
8750
  IN HANDLE FileHandle,
 
8751
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
8752
  OUT PVOID Buffer,
 
8753
  IN ULONG Length,
 
8754
  IN BOOLEAN ReturnSingleEntry,
 
8755
  IN PVOID SidList,
 
8756
  IN ULONG SidListLength,
 
8757
  IN PSID StartSid OPTIONAL,
 
8758
  IN BOOLEAN RestartScan);
 
8759
 
 
8760
NTSYSAPI
 
8761
NTSTATUS
 
8762
NTAPI
 
8763
ZwSetQuotaInformationFile(
 
8764
  IN HANDLE FileHandle,
 
8765
  OUT PIO_STATUS_BLOCK IoStatusBlock,
 
8766
  IN PVOID Buffer,
 
8767
  IN ULONG Length);
 
8768
 
 
8769
NTSYSAPI
 
8770
NTSTATUS
 
8771
NTAPI
 
8772
ZwFlushBuffersFile(
 
8773
  IN HANDLE FileHandle,
 
8774
  OUT PIO_STATUS_BLOCK IoStatusBlock);
 
8775
#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 
8776
#if (NTDDI_VERSION >= NTDDI_WIN7)
 
8777
 
 
8778
NTSYSAPI
 
8779
NTSTATUS
 
8780
NTAPI
 
8781
ZwSetInformationToken(
 
8782
  IN HANDLE TokenHandle,
 
8783
  IN TOKEN_INFORMATION_CLASS TokenInformationClass,
 
8784
  IN PVOID TokenInformation,
 
8785
  IN ULONG TokenInformationLength);
 
8786
#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 
8787
 
 
8788
 
 
8789
/* #if !defined(_X86AMD64_)  FIXME : WHAT ?! */
 
8790
#if defined(_WIN64)
 
8791
 
 
8792
C_ASSERT(sizeof(ERESOURCE) == 0x68);
 
8793
C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x18);
 
8794
C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x1a);
 
8795
 
 
8796
#else
 
8797
 
 
8798
C_ASSERT(sizeof(ERESOURCE) == 0x38);
 
8799
C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x0c);
 
8800
C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x0e);
 
8801
 
 
8802
#endif
 
8803
/* #endif */
 
8804
 
 
8805
#if defined(_IA64_)
 
8806
#if (NTDDI_VERSION >= NTDDI_WIN2K)
 
8807
//DECLSPEC_DEPRECATED_DDK
 
8808
NTHALAPI
 
8809
ULONG
 
8810
NTAPI
 
8811
HalGetDmaAlignmentRequirement(
 
8812
  VOID);
 
8813
#endif
 
8814
#endif
 
8815
 
 
8816
#if defined(_M_IX86) || defined(_M_AMD64)
 
8817
#define HalGetDmaAlignmentRequirement() 1L
 
8818
#endif
 
8819
 
 
8820
extern NTKERNELAPI PUSHORT NlsOemLeadByteInfo;
 
8821
#define NLS_OEM_LEAD_BYTE_INFO            NlsOemLeadByteInfo
 
8822
 
 
8823
#ifdef NLS_MB_CODE_PAGE_TAG
 
8824
#undef NLS_MB_CODE_PAGE_TAG
 
8825
#endif
 
8826
#define NLS_MB_CODE_PAGE_TAG              NlsMbOemCodePageTag
 
8827
 
 
8828
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
8829
 
 
8830
typedef enum _NETWORK_OPEN_LOCATION_QUALIFIER {
 
8831
  NetworkOpenLocationAny,
 
8832
  NetworkOpenLocationRemote,
 
8833
  NetworkOpenLocationLoopback
 
8834
} NETWORK_OPEN_LOCATION_QUALIFIER;
 
8835
 
 
8836
typedef enum _NETWORK_OPEN_INTEGRITY_QUALIFIER {
 
8837
  NetworkOpenIntegrityAny,
 
8838
  NetworkOpenIntegrityNone,
 
8839
  NetworkOpenIntegritySigned,
 
8840
  NetworkOpenIntegrityEncrypted,
 
8841
  NetworkOpenIntegrityMaximum
 
8842
} NETWORK_OPEN_INTEGRITY_QUALIFIER;
 
8843
 
 
8844
#if (NTDDI_VERSION >= NTDDI_WIN7)
 
8845
 
 
8846
#define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_COLLAPSING 0x1
 
8847
#define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_DURABILITY 0x2
 
8848
#define NETWORK_OPEN_ECP_IN_FLAG_FORCE_BUFFERED_SYNCHRONOUS_IO_HACK 0x80000000
 
8849
 
 
8850
typedef struct _NETWORK_OPEN_ECP_CONTEXT {
 
8851
  USHORT Size;
 
8852
  USHORT Reserved;
 
8853
  _ANONYMOUS_STRUCT struct {
 
8854
    struct {
 
8855
      NETWORK_OPEN_LOCATION_QUALIFIER Location;
 
8856
      NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
 
8857
      ULONG Flags;
 
8858
    } in;
 
8859
    struct {
 
8860
      NETWORK_OPEN_LOCATION_QUALIFIER Location;
 
8861
      NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
 
8862
      ULONG Flags;
 
8863
    } out;
 
8864
  } DUMMYSTRUCTNAME;
 
8865
} NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
 
8866
 
 
8867
typedef struct _NETWORK_OPEN_ECP_CONTEXT_V0 {
 
8868
  USHORT Size;
 
8869
  USHORT Reserved;
 
8870
  _ANONYMOUS_STRUCT struct {
 
8871
    struct {
 
8872
    NETWORK_OPEN_LOCATION_QUALIFIER Location;
 
8873
    NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
 
8874
    } in;
 
8875
    struct {
 
8876
      NETWORK_OPEN_LOCATION_QUALIFIER Location;
 
8877
      NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
 
8878
    } out;
 
8879
  } DUMMYSTRUCTNAME;
 
8880
} NETWORK_OPEN_ECP_CONTEXT_V0, *PNETWORK_OPEN_ECP_CONTEXT_V0;
 
8881
 
 
8882
#elif (NTDDI_VERSION >= NTDDI_VISTA)
 
8883
typedef struct _NETWORK_OPEN_ECP_CONTEXT {
 
8884
  USHORT Size;
 
8885
  USHORT Reserved;
 
8886
  _ANONYMOUS_STRUCT struct {
 
8887
    struct {
 
8888
      NETWORK_OPEN_LOCATION_QUALIFIER Location;
 
8889
      NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
 
8890
    } in;
 
8891
    struct {
 
8892
      NETWORK_OPEN_LOCATION_QUALIFIER Location;
 
8893
      NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
 
8894
    } out;
 
8895
  } DUMMYSTRUCTNAME;
 
8896
} NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
 
8897
#endif
 
8898
 
 
8899
DEFINE_GUID(GUID_ECP_NETWORK_OPEN_CONTEXT, 0xc584edbf, 0x00df, 0x4d28, 0xb8, 0x84, 0x35, 0xba, 0xca, 0x89, 0x11, 0xe8);
 
8900
 
 
8901
#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 
8902
 
 
8903
 
 
8904
#if (NTDDI_VERSION >= NTDDI_VISTA)
 
8905
 
 
8906
typedef struct _PREFETCH_OPEN_ECP_CONTEXT {
 
8907
  PVOID Context;
 
8908
} PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT;
 
8909
 
 
8910
DEFINE_GUID(GUID_ECP_PREFETCH_OPEN, 0xe1777b21, 0x847e, 0x4837, 0xaa, 0x45, 0x64, 0x16, 0x1d, 0x28, 0x6, 0x55);
 
8911
 
 
8912
#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 
8913
 
 
8914
#if (NTDDI_VERSION >= NTDDI_WIN7)
 
8915
 
 
8916
DEFINE_GUID (GUID_ECP_NFS_OPEN, 0xf326d30c, 0xe5f8, 0x4fe7, 0xab, 0x74, 0xf5, 0xa3, 0x19, 0x6d, 0x92, 0xdb);
 
8917
DEFINE_GUID (GUID_ECP_SRV_OPEN, 0xbebfaebc, 0xaabf, 0x489d, 0x9d, 0x2c, 0xe9, 0xe3, 0x61, 0x10, 0x28, 0x53);
 
8918
 
 
8919
typedef struct sockaddr_storage *PSOCKADDR_STORAGE_NFS;
 
8920
 
 
8921
typedef struct _NFS_OPEN_ECP_CONTEXT {
 
8922
  PUNICODE_STRING ExportAlias;
 
8923
  PSOCKADDR_STORAGE_NFS ClientSocketAddress;
 
8924
} NFS_OPEN_ECP_CONTEXT, *PNFS_OPEN_ECP_CONTEXT, **PPNFS_OPEN_ECP_CONTEXT;
 
8925
 
 
8926
typedef struct _SRV_OPEN_ECP_CONTEXT {
 
8927
  PUNICODE_STRING ShareName;
 
8928
  PSOCKADDR_STORAGE_NFS SocketAddress;
 
8929
  BOOLEAN OplockBlockState;
 
8930
  BOOLEAN OplockAppState;
 
8931
  BOOLEAN OplockFinalState;
 
8932
} SRV_OPEN_ECP_CONTEXT, *PSRV_OPEN_ECP_CONTEXT;
 
8933
 
 
8934
#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 
8935
 
 
8936
#define PIN_WAIT                        (1)
 
8937
#define PIN_EXCLUSIVE                   (2)
 
8938
#define PIN_NO_READ                     (4)
 
8939
#define PIN_IF_BCB                      (8)
 
8940
#define PIN_CALLER_TRACKS_DIRTY_DATA    (32)
 
8941
#define PIN_HIGH_PRIORITY               (64)
 
8942
 
 
8943
#define MAP_WAIT                        1
 
8944
#define MAP_NO_READ                     (16)
 
8945
#define MAP_HIGH_PRIORITY               (64)
 
8946
 
 
8947
#define IOCTL_REDIR_QUERY_PATH          CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
 
8948
#define IOCTL_REDIR_QUERY_PATH_EX       CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 100, METHOD_NEITHER, FILE_ANY_ACCESS)
 
8949
 
 
8950
typedef struct _QUERY_PATH_REQUEST {
 
8951
  ULONG PathNameLength;
 
8952
  PIO_SECURITY_CONTEXT SecurityContext;
 
8953
  WCHAR FilePathName[1];
 
8954
} QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST;
 
8955
 
 
8956
typedef struct _QUERY_PATH_REQUEST_EX {
 
8957
  PIO_SECURITY_CONTEXT pSecurityContext;
 
8958
  ULONG EaLength;
 
8959
  PVOID pEaBuffer;
 
8960
  UNICODE_STRING PathName;
 
8961
  UNICODE_STRING DomainServiceName;
 
8962
  ULONG_PTR Reserved[ 3 ];
 
8963
} QUERY_PATH_REQUEST_EX, *PQUERY_PATH_REQUEST_EX;
 
8964
 
 
8965
typedef struct _QUERY_PATH_RESPONSE {
 
8966
  ULONG LengthAccepted;
 
8967
} QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE;
 
8968
 
 
8969
#define VOLSNAPCONTROLTYPE                              0x00000053
 
8970
#define IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES             CTL_CODE(VOLSNAPCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
 
8971
 
 
8972
/* FIXME : These definitions below don't belong here (or anywhere in ddk really) */
 
8973
#pragma pack(push,4)
 
8974
 
 
8975
#ifndef VER_PRODUCTBUILD
 
8976
#define VER_PRODUCTBUILD 10000
 
8977
#endif
 
8978
 
 
8979
#include "csq.h"
 
8980
 
 
8981
extern PACL                         SePublicDefaultDacl;
 
8982
extern PACL                         SeSystemDefaultDacl;
 
8983
 
 
8984
#define FS_LFN_APIS                             0x00004000
 
8985
 
 
8986
#define FILE_STORAGE_TYPE_SPECIFIED             0x00000041  /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
 
8987
#define FILE_STORAGE_TYPE_DEFAULT               (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
 
8988
#define FILE_STORAGE_TYPE_DIRECTORY             (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
 
8989
#define FILE_STORAGE_TYPE_FILE                  (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
 
8990
#define FILE_STORAGE_TYPE_DOCFILE               (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
 
8991
#define FILE_STORAGE_TYPE_JUNCTION_POINT        (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
 
8992
#define FILE_STORAGE_TYPE_CATALOG               (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
 
8993
#define FILE_STORAGE_TYPE_STRUCTURED_STORAGE    (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
 
8994
#define FILE_STORAGE_TYPE_EMBEDDING             (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
 
8995
#define FILE_STORAGE_TYPE_STREAM                (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
 
8996
#define FILE_MINIMUM_STORAGE_TYPE               FILE_STORAGE_TYPE_DEFAULT
 
8997
#define FILE_MAXIMUM_STORAGE_TYPE               FILE_STORAGE_TYPE_STREAM
 
8998
#define FILE_STORAGE_TYPE_MASK                  0x000f0000
 
8999
#define FILE_STORAGE_TYPE_SHIFT                 16
 
9000
 
 
9001
#define FILE_VC_QUOTAS_LOG_VIOLATIONS           0x00000004
304
9002
 
305
9003
#ifdef _X86_
306
9004
#define HARDWARE_PTE    HARDWARE_PTE_X86
307
9005
#define PHARDWARE_PTE   PHARDWARE_PTE_X86
308
9006
#endif
309
9007
 
310
 
#define IO_CHECK_CREATE_PARAMETERS      0x0200
311
 
#define IO_ATTACH_DEVICE                0x0400
312
 
 
313
9008
#define IO_ATTACH_DEVICE_API            0x80000000
314
9009
 
315
 
#define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE    64
316
 
#define IO_FILE_OBJECT_PAGED_POOL_CHARGE        1024
317
 
 
318
9010
#define IO_TYPE_APC                     18
319
9011
#define IO_TYPE_DPC                     19
320
9012
#define IO_TYPE_DEVICE_QUEUE            20
331
9023
 
332
9024
#define MEM_DOS_LIM                     0x40000000
333
9025
 
334
 
#define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
335
 
 
336
9026
#define OB_TYPE_TYPE                    1
337
9027
#define OB_TYPE_DIRECTORY               2
338
9028
#define OB_TYPE_SYMBOLIC_LINK           3
357
9047
#define OB_TYPE_IO_COMPLETION           22
358
9048
#define OB_TYPE_FILE                    23
359
9049
 
360
 
#define PIN_WAIT                        (1)
361
 
#define PIN_EXCLUSIVE                   (2)
362
 
#define PIN_NO_READ                     (4)
363
 
#define PIN_IF_BCB                      (8)
364
 
 
365
 
#define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
366
 
#define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
367
 
 
368
 
#define SEC_BASED       0x00200000
369
 
 
370
 
#define SECURITY_WORLD_SID_AUTHORITY    {0,0,0,0,0,1}
371
 
#define SECURITY_WORLD_RID              (0x00000000L)
372
 
 
373
 
#define SID_REVISION                    1
374
 
#define SID_MAX_SUB_AUTHORITIES         15
375
 
#define SID_RECOMMENDED_SUB_AUTHORITIES 1
376
 
 
377
 
#define TOKEN_ASSIGN_PRIMARY            (0x0001)
378
 
#define TOKEN_DUPLICATE                 (0x0002)
379
 
#define TOKEN_IMPERSONATE               (0x0004)
380
 
#define TOKEN_QUERY                     (0x0008)
381
 
#define TOKEN_QUERY_SOURCE              (0x0010)
382
 
#define TOKEN_ADJUST_PRIVILEGES         (0x0020)
383
 
#define TOKEN_ADJUST_GROUPS             (0x0040)
384
 
#define TOKEN_ADJUST_DEFAULT            (0x0080)
385
 
#define TOKEN_ADJUST_SESSIONID          (0x0100)
386
 
 
387
 
#define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
388
 
                          TOKEN_ASSIGN_PRIMARY     |\
389
 
                          TOKEN_DUPLICATE          |\
390
 
                          TOKEN_IMPERSONATE        |\
391
 
                          TOKEN_QUERY              |\
392
 
                          TOKEN_QUERY_SOURCE       |\
393
 
                          TOKEN_ADJUST_PRIVILEGES  |\
394
 
                          TOKEN_ADJUST_GROUPS      |\
395
 
                          TOKEN_ADJUST_DEFAULT     |\
396
 
                          TOKEN_ADJUST_SESSIONID)
397
 
 
398
 
#define TOKEN_READ       (STANDARD_RIGHTS_READ     |\
399
 
                          TOKEN_QUERY)
400
 
 
401
 
#define TOKEN_WRITE      (STANDARD_RIGHTS_WRITE    |\
402
 
                          TOKEN_ADJUST_PRIVILEGES  |\
403
 
                          TOKEN_ADJUST_GROUPS      |\
404
 
                          TOKEN_ADJUST_DEFAULT)
405
 
 
406
 
#define TOKEN_EXECUTE    (STANDARD_RIGHTS_EXECUTE)
407
 
 
408
 
#define TOKEN_SOURCE_LENGTH 8
 
9050
#define SEC_BASED 0x00200000
 
9051
 
409
9052
/* end winnt.h */
410
9053
 
411
 
#define TOKEN_HAS_TRAVERSE_PRIVILEGE    0x01
412
 
#define TOKEN_HAS_BACKUP_PRIVILEGE      0x02
413
 
#define TOKEN_HAS_RESTORE_PRIVILEGE     0x04
414
9054
#define TOKEN_HAS_ADMIN_GROUP           0x08
415
 
#define TOKEN_WRITE_RESTRICTED          0x08
416
 
#define TOKEN_IS_RESTRICTED             0x10
417
 
#define SE_BACKUP_PRIVILEGES_CHECKED    0x0100
418
 
 
419
 
#define VACB_MAPPING_GRANULARITY        (0x40000)
420
 
#define VACB_OFFSET_SHIFT               (18)
421
 
 
422
 
#define SE_OWNER_DEFAULTED              0x0001
423
 
#define SE_GROUP_DEFAULTED              0x0002
424
 
#define SE_DACL_PRESENT                 0x0004
425
 
#define SE_DACL_DEFAULTED               0x0008
426
 
#define SE_SACL_PRESENT                 0x0010
427
 
#define SE_SACL_DEFAULTED               0x0020
428
 
#define SE_DACL_UNTRUSTED               0x0040
429
 
#define SE_SERVER_SECURITY              0x0080
430
 
#define SE_DACL_AUTO_INHERIT_REQ        0x0100
431
 
#define SE_SACL_AUTO_INHERIT_REQ        0x0200
432
 
#define SE_DACL_AUTO_INHERITED          0x0400
433
 
#define SE_SACL_AUTO_INHERITED          0x0800
434
 
#define SE_DACL_PROTECTED               0x1000
435
 
#define SE_SACL_PROTECTED               0x2000
436
 
#define SE_RM_CONTROL_VALID             0x4000
437
 
#define SE_SELF_RELATIVE                0x8000
438
 
 
439
 
#ifndef _WINNT_H
440
 
#define _AUDIT_EVENT_TYPE_HACK 0
441
 
#endif
442
 
#if (_AUDIT_EVENT_TYPE_HACK == 1)
443
 
 
444
 
#else
445
 
typedef enum _AUDIT_EVENT_TYPE
446
 
{
447
 
    AuditEventObjectAccess,
448
 
    AuditEventDirectoryServiceAccess
449
 
} AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE;
450
 
#endif
451
 
 
452
 
#define AUDIT_ALLOW_NO_PRIVILEGE 0x1
453
 
 
454
 
#define FSCTL_REQUEST_OPLOCK_LEVEL_1    CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  0, METHOD_BUFFERED, FILE_ANY_ACCESS)
455
 
#define FSCTL_REQUEST_OPLOCK_LEVEL_2    CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  1, METHOD_BUFFERED, FILE_ANY_ACCESS)
456
 
#define FSCTL_REQUEST_BATCH_OPLOCK      CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  2, METHOD_BUFFERED, FILE_ANY_ACCESS)
457
 
#define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE  CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  3, METHOD_BUFFERED, FILE_ANY_ACCESS)
458
 
#define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  4, METHOD_BUFFERED, FILE_ANY_ACCESS)
459
 
#define FSCTL_OPLOCK_BREAK_NOTIFY       CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  5, METHOD_BUFFERED, FILE_ANY_ACCESS)
460
 
#define FSCTL_LOCK_VOLUME               CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  6, METHOD_BUFFERED, FILE_ANY_ACCESS)
461
 
#define FSCTL_UNLOCK_VOLUME             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  7, METHOD_BUFFERED, FILE_ANY_ACCESS)
462
 
#define FSCTL_DISMOUNT_VOLUME           CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  8, METHOD_BUFFERED, FILE_ANY_ACCESS)
463
 
 
464
 
#define FSCTL_IS_VOLUME_MOUNTED         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
465
 
#define FSCTL_IS_PATHNAME_VALID         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
466
 
#define FSCTL_MARK_VOLUME_DIRTY         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
467
 
 
468
 
#define FSCTL_QUERY_RETRIEVAL_POINTERS  CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14,  METHOD_NEITHER, FILE_ANY_ACCESS)
469
 
#define FSCTL_GET_COMPRESSION           CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
470
 
#define FSCTL_SET_COMPRESSION           CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
471
 
 
472
 
 
473
 
#define FSCTL_MARK_AS_SYSTEM_HIVE       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19,  METHOD_NEITHER, FILE_ANY_ACCESS)
474
 
#define FSCTL_OPLOCK_BREAK_ACK_NO_2     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
475
 
#define FSCTL_INVALIDATE_VOLUMES        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
476
 
#define FSCTL_QUERY_FAT_BPB             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
477
 
#define FSCTL_REQUEST_FILTER_OPLOCK     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
478
 
#define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
479
9055
 
480
9056
#if (VER_PRODUCTBUILD >= 1381)
481
 
 
482
 
#define FSCTL_GET_NTFS_VOLUME_DATA      CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
483
 
#define FSCTL_GET_NTFS_FILE_RECORD      CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
484
 
#define FSCTL_GET_VOLUME_BITMAP         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27,  METHOD_NEITHER, FILE_ANY_ACCESS)
485
 
#define FSCTL_GET_RETRIEVAL_POINTERS    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28,  METHOD_NEITHER, FILE_ANY_ACCESS)
486
 
#define FSCTL_MOVE_FILE                 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
487
 
#define FSCTL_IS_VOLUME_DIRTY           CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
488
9057
#define FSCTL_GET_HFS_INFORMATION       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
489
 
#define FSCTL_ALLOW_EXTENDED_DASD_IO    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER,  FILE_ANY_ACCESS)
490
 
 
491
9058
#endif /* (VER_PRODUCTBUILD >= 1381) */
492
9059
 
493
9060
#if (VER_PRODUCTBUILD >= 2195)
494
9061
 
495
9062
#define FSCTL_READ_PROPERTY_DATA        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
496
9063
#define FSCTL_WRITE_PROPERTY_DATA       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
497
 
#define FSCTL_FIND_FILES_BY_SID         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
498
9064
 
499
9065
#define FSCTL_DUMP_PROPERTY_DATA        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37,  METHOD_NEITHER, FILE_ANY_ACCESS)
500
 
#define FSCTL_SET_OBJECT_ID             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA)
501
 
#define FSCTL_GET_OBJECT_ID             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
502
 
#define FSCTL_DELETE_OBJECT_ID          CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA)
503
 
#define FSCTL_SET_REPARSE_POINT         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA)
504
 
#define FSCTL_GET_REPARSE_POINT         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
505
 
#define FSCTL_DELETE_REPARSE_POINT      CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA)
506
 
#define FSCTL_ENUM_USN_DATA             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44,  METHOD_NEITHER, FILE_READ_DATA)
507
 
#define FSCTL_SECURITY_ID_CHECK         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45,  METHOD_NEITHER, FILE_READ_DATA)
508
 
#define FSCTL_READ_USN_JOURNAL          CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46,  METHOD_NEITHER, FILE_READ_DATA)
509
 
#define FSCTL_SET_OBJECT_ID_EXTENDED    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA)
510
 
#define FSCTL_CREATE_OR_GET_OBJECT_ID   CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
511
 
#define FSCTL_SET_SPARSE                CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA)
512
 
#define FSCTL_SET_ZERO_DATA             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
513
 
#define FSCTL_QUERY_ALLOCATED_RANGES    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51,  METHOD_NEITHER, FILE_READ_DATA)
514
 
#define FSCTL_ENABLE_UPGRADE            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
515
 
#define FSCTL_SET_ENCRYPTION            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
516
 
#define FSCTL_ENCRYPTION_FSCTL_IO       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54,  METHOD_NEITHER, FILE_ANY_ACCESS)
517
 
#define FSCTL_WRITE_RAW_ENCRYPTED       CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55,  METHOD_NEITHER, FILE_ANY_ACCESS)
518
 
#define FSCTL_READ_RAW_ENCRYPTED        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56,  METHOD_NEITHER, FILE_ANY_ACCESS)
519
 
#define FSCTL_CREATE_USN_JOURNAL        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57,  METHOD_NEITHER, FILE_READ_DATA)
520
 
#define FSCTL_READ_FILE_USN_DATA        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58,  METHOD_NEITHER, FILE_READ_DATA)
521
 
#define FSCTL_WRITE_USN_CLOSE_RECORD    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59,  METHOD_NEITHER, FILE_READ_DATA)
522
 
#define FSCTL_EXTEND_VOLUME             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
523
 
#define FSCTL_QUERY_USN_JOURNAL         CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
524
 
#define FSCTL_DELETE_USN_JOURNAL        CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
525
 
#define FSCTL_MARK_HANDLE               CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
526
 
#define FSCTL_SIS_COPYFILE              CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
527
 
#define FSCTL_SIS_LINK_FILES            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
 
9066
 
528
9067
#define FSCTL_HSM_MSG                   CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
529
9068
#define FSCTL_NSS_CONTROL               CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
530
9069
#define FSCTL_HSM_DATA                  CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
531
 
#define FSCTL_RECALL_FILE               CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
532
9070
#define FSCTL_NSS_RCONTROL              CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
533
 
#define FSCTL_READ_FROM_PLEX            CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
534
 
#define FSCTL_FILE_PREFETCH             CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
535
 
 
536
9071
#endif /* (VER_PRODUCTBUILD >= 2195) */
537
9072
 
538
 
#define FSCTL_MAILSLOT_PEEK             CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
539
 
 
540
9073
#define FSCTL_NETWORK_SET_CONFIGURATION_INFO    CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
541
9074
#define FSCTL_NETWORK_GET_CONFIGURATION_INFO    CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
542
9075
#define FSCTL_NETWORK_GET_CONNECTION_INFO       CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
546
9079
#define FSCTL_NETWORK_SET_DOMAIN_NAME           CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
547
9080
#define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT     CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
548
9081
 
549
 
#define FSCTL_PIPE_ASSIGN_EVENT         CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
550
 
#define FSCTL_PIPE_DISCONNECT           CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
551
 
#define FSCTL_PIPE_LISTEN               CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
552
 
#define FSCTL_PIPE_PEEK                 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
553
 
#define FSCTL_PIPE_QUERY_EVENT          CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
554
 
#define FSCTL_PIPE_TRANSCEIVE           CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER,  FILE_READ_DATA | FILE_WRITE_DATA)
555
 
#define FSCTL_PIPE_WAIT                 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
556
 
#define FSCTL_PIPE_IMPERSONATE          CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
557
 
#define FSCTL_PIPE_SET_CLIENT_PROCESS   CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
558
 
#define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
559
 
#define FSCTL_PIPE_INTERNAL_READ        CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
560
 
#define FSCTL_PIPE_INTERNAL_WRITE       CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
561
 
#define FSCTL_PIPE_INTERNAL_TRANSCEIVE  CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
562
 
#define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
563
 
 
564
 
#define IOCTL_REDIR_QUERY_PATH          CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
565
 
 
566
 
typedef PVOID OPLOCK, *POPLOCK;
567
 
 
568
 
//
569
 
// Forwarders
570
 
//
571
 
struct _RTL_AVL_TABLE;
572
 
struct _RTL_GENERIC_TABLE;
573
 
 
574
 
typedef ULONG LBN;
575
 
typedef LBN *PLBN;
576
 
 
577
 
typedef ULONG VBN;
578
 
typedef VBN *PVBN;
579
 
 
580
 
typedef PVOID PNOTIFY_SYNC;
581
 
 
582
 
typedef enum _FAST_IO_POSSIBLE {
583
 
    FastIoIsNotPossible,
584
 
    FastIoIsPossible,
585
 
    FastIoIsQuestionable
586
 
} FAST_IO_POSSIBLE;
587
 
 
588
9082
typedef enum _FILE_STORAGE_TYPE {
589
9083
    StorageTypeDefault = 1,
590
9084
    StorageTypeDirectory,
596
9090
    StorageTypeStream
597
9091
} FILE_STORAGE_TYPE;
598
9092
 
599
 
typedef enum _OBJECT_INFORMATION_CLASS
600
 
{
601
 
    ObjectBasicInformation,
602
 
    ObjectNameInformation,
603
 
    ObjectTypeInformation,
604
 
    ObjectTypesInformation,
605
 
    ObjectHandleFlagInformation,
606
 
    ObjectSessionInformation,
607
 
    MaxObjectInfoClass
608
 
} OBJECT_INFORMATION_CLASS;
609
 
 
610
9093
typedef struct _OBJECT_BASIC_INFORMATION
611
9094
{
612
9095
    ULONG Attributes;
622
9105
    LARGE_INTEGER CreationTime;
623
9106
} OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
624
9107
 
625
 
typedef struct _KAPC_STATE {
626
 
    LIST_ENTRY  ApcListHead[2];
627
 
    PKPROCESS   Process;
628
 
    BOOLEAN     KernelApcInProgress;
629
 
    BOOLEAN     KernelApcPending;
630
 
    BOOLEAN     UserApcPending;
631
 
} KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE;
632
 
#define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
633
 
 
634
9108
typedef struct _BITMAP_RANGE {
635
9109
    LIST_ENTRY      Links;
636
9110
    LONGLONG        BasePage;
640
9114
    PULONG          Bitmap;
641
9115
} BITMAP_RANGE, *PBITMAP_RANGE;
642
9116
 
643
 
typedef struct _CACHE_UNINITIALIZE_EVENT {
644
 
    struct _CACHE_UNINITIALIZE_EVENT    *Next;
645
 
    KEVENT                              Event;
646
 
} CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT;
647
 
 
648
 
typedef struct _CC_FILE_SIZES {
649
 
    LARGE_INTEGER AllocationSize;
650
 
    LARGE_INTEGER FileSize;
651
 
    LARGE_INTEGER ValidDataLength;
652
 
} CC_FILE_SIZES, *PCC_FILE_SIZES;
653
 
 
654
 
typedef struct _COMPRESSED_DATA_INFO {
655
 
    USHORT  CompressionFormatAndEngine;
656
 
    UCHAR   CompressionUnitShift;
657
 
    UCHAR   ChunkShift;
658
 
    UCHAR   ClusterShift;
659
 
    UCHAR   Reserved;
660
 
    USHORT  NumberOfChunks;
661
 
    ULONG   CompressedChunkSizes[ANYSIZE_ARRAY];
662
 
} COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
663
 
 
664
 
typedef struct _SID_IDENTIFIER_AUTHORITY {
665
 
        UCHAR Value[6];
666
 
} SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
667
 
 
668
 
typedef struct _SID {
669
 
   UCHAR  Revision;
670
 
   UCHAR  SubAuthorityCount;
671
 
   SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
672
 
   ULONG SubAuthority[ANYSIZE_ARRAY];
673
 
} SID, *PISID;
674
 
typedef struct _SID_AND_ATTRIBUTES {
675
 
        PSID Sid;
676
 
        ULONG Attributes;
677
 
} SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;
678
 
typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
679
 
typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
680
 
 
681
 
 
682
 
 
683
 
//
684
 
// Universal well-known SIDs
685
 
//
686
 
#define SECURITY_NULL_SID_AUTHORITY         {0,0,0,0,0,0}
687
 
#define SECURITY_WORLD_SID_AUTHORITY        {0,0,0,0,0,1}
688
 
#define SECURITY_LOCAL_SID_AUTHORITY        {0,0,0,0,0,2}
689
 
#define SECURITY_CREATOR_SID_AUTHORITY      {0,0,0,0,0,3}
690
 
#define SECURITY_NON_UNIQUE_AUTHORITY       {0,0,0,0,0,4}
691
 
#define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
692
 
 
693
 
#define SECURITY_NULL_RID                 (0x00000000L)
694
 
#define SECURITY_WORLD_RID                (0x00000000L)
695
 
#define SECURITY_LOCAL_RID                (0x00000000L)
696
 
 
697
 
#define SECURITY_CREATOR_OWNER_RID        (0x00000000L)
698
 
#define SECURITY_CREATOR_GROUP_RID        (0x00000001L)
699
 
 
700
 
#define SECURITY_CREATOR_OWNER_SERVER_RID (0x00000002L)
701
 
#define SECURITY_CREATOR_GROUP_SERVER_RID (0x00000003L)
702
 
 
703
 
#define SECURITY_CREATOR_OWNER_RIGHTS_RID (0x00000004L)
704
 
 
705
 
 
706
 
 
707
 
//
708
 
// NT well-known SIDs
709
 
//
710
 
#define SECURITY_NT_AUTHORITY           {0,0,0,0,0,5}
711
 
 
712
 
#define SECURITY_DIALUP_RID             (0x00000001L)
713
 
#define SECURITY_NETWORK_RID            (0x00000002L)
714
 
#define SECURITY_BATCH_RID              (0x00000003L)
715
 
#define SECURITY_INTERACTIVE_RID        (0x00000004L)
716
 
#define SECURITY_LOGON_IDS_RID          (0x00000005L)
717
 
#define SECURITY_LOGON_IDS_RID_COUNT    (3L)
718
 
#define SECURITY_SERVICE_RID            (0x00000006L)
719
 
#define SECURITY_ANONYMOUS_LOGON_RID    (0x00000007L)
720
 
#define SECURITY_PROXY_RID              (0x00000008L)
721
 
#define SECURITY_ENTERPRISE_CONTROLLERS_RID (0x00000009L)
722
 
#define SECURITY_SERVER_LOGON_RID       SECURITY_ENTERPRISE_CONTROLLERS_RID
723
 
#define SECURITY_PRINCIPAL_SELF_RID     (0x0000000AL)
724
 
#define SECURITY_AUTHENTICATED_USER_RID (0x0000000BL)
725
 
#define SECURITY_RESTRICTED_CODE_RID    (0x0000000CL)
726
 
#define SECURITY_TERMINAL_SERVER_RID    (0x0000000DL)
727
 
#define SECURITY_REMOTE_LOGON_RID       (0x0000000EL)
728
 
#define SECURITY_THIS_ORGANIZATION_RID  (0x0000000FL)
729
 
#define SECURITY_IUSER_RID              (0x00000011L)
730
 
#define SECURITY_LOCAL_SYSTEM_RID       (0x00000012L)
731
 
#define SECURITY_LOCAL_SERVICE_RID      (0x00000013L)
732
 
#define SECURITY_NETWORK_SERVICE_RID    (0x00000014L)
733
 
 
734
 
#define SECURITY_NT_NON_UNIQUE          (0x00000015L)
735
 
#define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT  (3L)
736
 
 
737
 
#define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID (0x00000016L)
738
 
 
739
 
#define SECURITY_BUILTIN_DOMAIN_RID     (0x00000020L)
740
 
#define SECURITY_WRITE_RESTRICTED_CODE_RID (0x00000021L)
741
 
 
742
 
 
743
 
#define SECURITY_PACKAGE_BASE_RID       (0x00000040L)
744
 
#define SECURITY_PACKAGE_RID_COUNT      (2L)
745
 
#define SECURITY_PACKAGE_NTLM_RID       (0x0000000AL)
746
 
#define SECURITY_PACKAGE_SCHANNEL_RID   (0x0000000EL)
747
 
#define SECURITY_PACKAGE_DIGEST_RID     (0x00000015L)
748
 
 
749
 
#define SECURITY_MIN_BASE_RID           (0x00000050L)
750
 
 
751
 
#define SECURITY_SERVICE_ID_BASE_RID    (0x00000050L)
752
 
#define SECURITY_SERVICE_ID_RID_COUNT   (6L)
753
 
 
754
 
#define SECURITY_RESERVED_ID_BASE_RID   (0x00000051L)
755
 
 
756
 
#define SECURITY_APPPOOL_ID_BASE_RID    (0x00000052L)
757
 
#define SECURITY_APPPOOL_ID_RID_COUNT   (6L)
758
 
 
759
 
#define SECURITY_VIRTUALSERVER_ID_BASE_RID    (0x00000053L)
760
 
#define SECURITY_VIRTUALSERVER_ID_RID_COUNT   (6L)
761
 
 
762
 
#define SECURITY_MAX_BASE_RID           (0x0000006FL)
763
 
 
764
 
#define SECURITY_MAX_ALWAYS_FILTERED    (0x000003E7L)
765
 
#define SECURITY_MIN_NEVER_FILTERED     (0x000003E8L)
766
 
 
767
 
#define SECURITY_OTHER_ORGANIZATION_RID (0x000003E8L)
768
 
 
769
 
 
770
 
 
771
 
//
772
 
// Well-known domain relative sub-authority values (RIDs)
773
 
//
774
 
#define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS (0x000001F2L)
775
 
 
776
 
#define FOREST_USER_RID_MAX            (0x000001F3L)
777
 
 
778
 
//
779
 
// Well-known users
780
 
//
781
 
#define DOMAIN_USER_RID_ADMIN          (0x000001F4L)
782
 
#define DOMAIN_USER_RID_GUEST          (0x000001F5L)
783
 
#define DOMAIN_USER_RID_KRBTGT         (0x000001F6L)
784
 
 
785
 
#define DOMAIN_USER_RID_MAX            (0x000003E7L)
786
 
 
787
 
//
788
 
// Well-known groups
789
 
//
790
 
#define DOMAIN_GROUP_RID_ADMINS        (0x00000200L)
791
 
#define DOMAIN_GROUP_RID_USERS         (0x00000201L)
792
 
#define DOMAIN_GROUP_RID_GUESTS        (0x00000202L)
793
 
#define DOMAIN_GROUP_RID_COMPUTERS     (0x00000203L)
794
 
#define DOMAIN_GROUP_RID_CONTROLLERS   (0x00000204L)
795
 
#define DOMAIN_GROUP_RID_CERT_ADMINS   (0x00000205L)
796
 
#define DOMAIN_GROUP_RID_SCHEMA_ADMINS (0x00000206L)
797
 
#define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (0x00000207L)
798
 
#define DOMAIN_GROUP_RID_POLICY_ADMINS (0x00000208L)
799
 
#define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (0x00000209L)
800
 
 
801
 
//
802
 
// Well-known aliases
803
 
//
804
 
#define DOMAIN_ALIAS_RID_ADMINS                         (0x00000220L)
805
 
#define DOMAIN_ALIAS_RID_USERS                          (0x00000221L)
806
 
#define DOMAIN_ALIAS_RID_GUESTS                         (0x00000222L)
807
 
#define DOMAIN_ALIAS_RID_POWER_USERS                    (0x00000223L)
808
 
 
809
 
#define DOMAIN_ALIAS_RID_ACCOUNT_OPS                    (0x00000224L)
810
 
#define DOMAIN_ALIAS_RID_SYSTEM_OPS                     (0x00000225L)
811
 
#define DOMAIN_ALIAS_RID_PRINT_OPS                      (0x00000226L)
812
 
#define DOMAIN_ALIAS_RID_BACKUP_OPS                     (0x00000227L)
813
 
 
814
 
#define DOMAIN_ALIAS_RID_REPLICATOR                     (0x00000228L)
815
 
#define DOMAIN_ALIAS_RID_RAS_SERVERS                    (0x00000229L)
816
 
#define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS               (0x0000022AL)
817
 
#define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS           (0x0000022BL)
818
 
#define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS      (0x0000022CL)
819
 
#define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS (0x0000022DL)
820
 
 
821
 
#define DOMAIN_ALIAS_RID_MONITORING_USERS               (0x0000022EL)
822
 
#define DOMAIN_ALIAS_RID_LOGGING_USERS                  (0x0000022FL)
823
 
#define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS            (0x00000230L)
824
 
#define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS             (0x00000231L)
825
 
#define DOMAIN_ALIAS_RID_DCOM_USERS                     (0x00000232L)
826
 
#define DOMAIN_ALIAS_RID_IUSERS                         (0x00000238L)
827
 
#define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS               (0x00000239L)
828
 
#define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP     (0x0000023BL)
829
 
#define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (0x0000023CL)
830
 
#define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP        (0x0000023DL)
831
 
#define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP      (0x0000023EL)
832
 
 
833
 
 
834
 
#define SECURITY_MANDATORY_LABEL_AUTHORITY          {0,0,0,0,0,16}
835
 
#define SECURITY_MANDATORY_UNTRUSTED_RID            (0x00000000L)
836
 
#define SECURITY_MANDATORY_LOW_RID                  (0x00001000L)
837
 
#define SECURITY_MANDATORY_MEDIUM_RID               (0x00002000L)
838
 
#define SECURITY_MANDATORY_HIGH_RID                 (0x00003000L)
839
 
#define SECURITY_MANDATORY_SYSTEM_RID               (0x00004000L)
840
 
#define SECURITY_MANDATORY_PROTECTED_PROCESS_RID    (0x00005000L)
841
 
 
842
 
//
843
 
// SECURITY_MANDATORY_MAXIMUM_USER_RID is the highest RID that
844
 
// can be set by a usermode caller.
845
 
//
846
 
#define SECURITY_MANDATORY_MAXIMUM_USER_RID   SECURITY_MANDATORY_SYSTEM_RID
847
 
 
848
 
#define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
849
 
 
850
 
//
851
 
// Allocate the System Luid.  The first 1000 LUIDs are reserved.
852
 
// Use #999 here (0x3e7 = 999)
853
 
//
854
 
#define SYSTEM_LUID                     { 0x3e7, 0x0 }
855
 
#define ANONYMOUS_LOGON_LUID            { 0x3e6, 0x0 }
856
 
#define LOCALSERVICE_LUID               { 0x3e5, 0x0 }
857
 
#define NETWORKSERVICE_LUID             { 0x3e4, 0x0 }
858
 
#define IUSER_LUID                      { 0x3e3, 0x0 }
859
 
 
860
 
 
861
 
 
862
 
typedef struct _TOKEN_SOURCE {
863
 
        CHAR SourceName[TOKEN_SOURCE_LENGTH];
864
 
        LUID SourceIdentifier;
865
 
} TOKEN_SOURCE,*PTOKEN_SOURCE;
866
 
typedef struct _TOKEN_CONTROL {
867
 
        LUID TokenId;
868
 
        LUID AuthenticationId;
869
 
        LUID ModifiedId;
870
 
        TOKEN_SOURCE TokenSource;
871
 
} TOKEN_CONTROL,*PTOKEN_CONTROL;
872
 
typedef struct _TOKEN_DEFAULT_DACL {
873
 
        PACL DefaultDacl;
874
 
} TOKEN_DEFAULT_DACL,*PTOKEN_DEFAULT_DACL;
875
 
typedef struct _TOKEN_GROUPS {
876
 
        ULONG GroupCount;
877
 
        SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
878
 
} TOKEN_GROUPS,*PTOKEN_GROUPS,*LPTOKEN_GROUPS;
879
 
typedef struct _TOKEN_GROUPS_AND_PRIVILEGES {
880
 
        ULONG SidCount;
881
 
        ULONG SidLength;
882
 
        PSID_AND_ATTRIBUTES Sids;
883
 
        ULONG RestrictedSidCount;
884
 
        ULONG RestrictedSidLength;
885
 
        PSID_AND_ATTRIBUTES RestrictedSids;
886
 
        ULONG PrivilegeCount;
887
 
        ULONG PrivilegeLength;
888
 
        PLUID_AND_ATTRIBUTES Privileges;
889
 
        LUID AuthenticationId;
890
 
} TOKEN_GROUPS_AND_PRIVILEGES, *PTOKEN_GROUPS_AND_PRIVILEGES;
891
 
typedef struct _TOKEN_ORIGIN {
892
 
        LUID OriginatingLogonSession;
893
 
} TOKEN_ORIGIN, *PTOKEN_ORIGIN;
894
 
typedef struct _TOKEN_OWNER {
895
 
        PSID Owner;
896
 
} TOKEN_OWNER,*PTOKEN_OWNER;
897
 
typedef struct _TOKEN_PRIMARY_GROUP {
898
 
        PSID PrimaryGroup;
899
 
} TOKEN_PRIMARY_GROUP,*PTOKEN_PRIMARY_GROUP;
900
 
typedef struct _TOKEN_PRIVILEGES {
901
 
        ULONG PrivilegeCount;
902
 
        LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
903
 
} TOKEN_PRIVILEGES,*PTOKEN_PRIVILEGES,*LPTOKEN_PRIVILEGES;
904
 
typedef enum tagTOKEN_TYPE {
905
 
        TokenPrimary = 1,
906
 
        TokenImpersonation
907
 
} TOKEN_TYPE,*PTOKEN_TYPE;
908
 
typedef struct _TOKEN_STATISTICS {
909
 
        LUID TokenId;
910
 
        LUID AuthenticationId;
911
 
        LARGE_INTEGER ExpirationTime;
912
 
        TOKEN_TYPE TokenType;
913
 
        SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
914
 
        ULONG DynamicCharged;
915
 
        ULONG DynamicAvailable;
916
 
        ULONG GroupCount;
917
 
        ULONG PrivilegeCount;
918
 
        LUID ModifiedId;
919
 
} TOKEN_STATISTICS, *PTOKEN_STATISTICS;
920
 
typedef struct _TOKEN_USER {
921
 
        SID_AND_ATTRIBUTES User;
922
 
} TOKEN_USER, *PTOKEN_USER;
923
 
typedef USHORT SECURITY_DESCRIPTOR_CONTROL,*PSECURITY_DESCRIPTOR_CONTROL;
924
 
typedef struct _SECURITY_DESCRIPTOR {
925
 
        UCHAR Revision;
926
 
        UCHAR Sbz1;
927
 
        SECURITY_DESCRIPTOR_CONTROL Control;
928
 
        PSID Owner;
929
 
        PSID Group;
930
 
        PACL Sacl;
931
 
        PACL Dacl;
932
 
} SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
933
 
 
934
 
#define SECURITY_DESCRIPTOR_MIN_LENGTH   (sizeof(SECURITY_DESCRIPTOR))
935
 
 
936
 
typedef struct _OBJECT_TYPE_LIST {
937
 
    USHORT Level;
938
 
    USHORT Sbz;
939
 
    GUID *ObjectType;
940
 
    } OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST;
941
 
    
942
 
typedef struct _SECURITY_DESCRIPTOR_RELATIVE {
943
 
    UCHAR Revision;
944
 
    UCHAR Sbz1;
945
 
    SECURITY_DESCRIPTOR_CONTROL Control;
946
 
    ULONG Owner;
947
 
    ULONG Group;
948
 
    ULONG Sacl;
949
 
    ULONG Dacl;
950
 
} SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE;
951
 
typedef enum _TOKEN_INFORMATION_CLASS {
952
 
        TokenUser=1,TokenGroups,TokenPrivileges,TokenOwner,
953
 
        TokenPrimaryGroup,TokenDefaultDacl,TokenSource,TokenType,
954
 
        TokenImpersonationLevel,TokenStatistics,TokenRestrictedSids,
955
 
        TokenSessionId,TokenGroupsAndPrivileges,TokenSessionReference,
956
 
        TokenSandBoxInert,TokenAuditPolicy,TokenOrigin,
957
 
} TOKEN_INFORMATION_CLASS;
958
 
 
959
 
#define SYMLINK_FLAG_RELATIVE   1
960
 
 
961
 
typedef struct _REPARSE_DATA_BUFFER {
962
 
    ULONG  ReparseTag;
963
 
    USHORT ReparseDataLength;
964
 
    USHORT Reserved;
965
 
    union {
966
 
        struct {
967
 
            USHORT SubstituteNameOffset;
968
 
            USHORT SubstituteNameLength;
969
 
            USHORT PrintNameOffset;
970
 
            USHORT PrintNameLength;
971
 
            ULONG Flags;
972
 
            WCHAR PathBuffer[1];
973
 
        } SymbolicLinkReparseBuffer;
974
 
        struct {
975
 
            USHORT SubstituteNameOffset;
976
 
            USHORT SubstituteNameLength;
977
 
            USHORT PrintNameOffset;
978
 
            USHORT PrintNameLength;
979
 
            WCHAR PathBuffer[1];
980
 
        } MountPointReparseBuffer;
981
 
        struct {
982
 
            UCHAR  DataBuffer[1];
983
 
        } GenericReparseBuffer;
984
 
    };
985
 
} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
986
 
 
987
 
 
988
 
 
989
 
//
990
 
// MicroSoft reparse point tags
991
 
//
992
 
#define IO_REPARSE_TAG_MOUNT_POINT              (0xA0000003L)
993
 
#define IO_REPARSE_TAG_HSM                      (0xC0000004L)
994
 
#define IO_REPARSE_TAG_DRIVE_EXTENDER           (0x80000005L)
995
 
#define IO_REPARSE_TAG_HSM2                     (0x80000006L)
996
 
#define IO_REPARSE_TAG_SIS                      (0x80000007L)
997
 
#define IO_REPARSE_TAG_DFS                      (0x8000000AL)
998
 
#define IO_REPARSE_TAG_FILTER_MANAGER           (0x8000000BL)
999
 
#define IO_REPARSE_TAG_SYMLINK                  (0xA000000CL)
1000
 
#define IO_REPARSE_TAG_IIS_CACHE                (0xA0000010L)
1001
 
#define IO_REPARSE_TAG_DFSR                     (0x80000012L)
1002
 
 
1003
 
//
1004
 
// Reserved reparse tags
1005
 
//
1006
 
#define IO_REPARSE_TAG_RESERVED_ZERO            (0)
1007
 
#define IO_REPARSE_TAG_RESERVED_ONE             (1)
1008
 
#define IO_REPARSE_TAG_RESERVED_RANGE           IO_REPARSE_TAG_RESERVED_ONE
1009
 
 
1010
 
 
1011
 
#define REPARSE_DATA_BUFFER_HEADER_SIZE   FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
1012
 
 
1013
 
typedef struct _FILE_ACCESS_INFORMATION {
1014
 
    ACCESS_MASK AccessFlags;
1015
 
} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
1016
 
 
1017
 
typedef struct _FILE_ALLOCATION_INFORMATION {
1018
 
    LARGE_INTEGER AllocationSize;
1019
 
} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
1020
 
 
1021
 
typedef struct _FILE_BOTH_DIR_INFORMATION {
1022
 
    ULONG           NextEntryOffset;
1023
 
    ULONG           FileIndex;
1024
 
    LARGE_INTEGER   CreationTime;
1025
 
    LARGE_INTEGER   LastAccessTime;
1026
 
    LARGE_INTEGER   LastWriteTime;
1027
 
    LARGE_INTEGER   ChangeTime;
1028
 
    LARGE_INTEGER   EndOfFile;
1029
 
    LARGE_INTEGER   AllocationSize;
1030
 
    ULONG           FileAttributes;
1031
 
    ULONG           FileNameLength;
1032
 
    ULONG           EaSize;
1033
 
    CCHAR           ShortNameLength;
1034
 
    WCHAR           ShortName[12];
1035
 
    WCHAR           FileName[1];
1036
 
} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
1037
 
 
1038
 
typedef struct _FILE_COMPLETION_INFORMATION {
1039
 
    HANDLE  Port;
1040
 
    PVOID   Key;
1041
 
} FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
1042
 
 
1043
 
typedef struct _FILE_COMPRESSION_INFORMATION {
1044
 
    LARGE_INTEGER   CompressedFileSize;
1045
 
    USHORT          CompressionFormat;
1046
 
    UCHAR           CompressionUnitShift;
1047
 
    UCHAR           ChunkShift;
1048
 
    UCHAR           ClusterShift;
1049
 
    UCHAR           Reserved[3];
1050
 
} FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
1051
 
 
1052
9117
typedef struct _FILE_COPY_ON_WRITE_INFORMATION {
1053
9118
    BOOLEAN ReplaceIfExists;
1054
9119
    HANDLE  RootDirectory;
1056
9121
    WCHAR   FileName[1];
1057
9122
} FILE_COPY_ON_WRITE_INFORMATION, *PFILE_COPY_ON_WRITE_INFORMATION;
1058
9123
 
1059
 
typedef struct _FILE_DIRECTORY_INFORMATION {
1060
 
    ULONG           NextEntryOffset;
1061
 
    ULONG           FileIndex;
1062
 
    LARGE_INTEGER   CreationTime;
1063
 
    LARGE_INTEGER   LastAccessTime;
1064
 
    LARGE_INTEGER   LastWriteTime;
1065
 
    LARGE_INTEGER   ChangeTime;
1066
 
    LARGE_INTEGER   EndOfFile;
1067
 
    LARGE_INTEGER   AllocationSize;
1068
 
    ULONG           FileAttributes;
1069
 
    ULONG           FileNameLength;
1070
 
    WCHAR           FileName[1];
1071
 
} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
1072
 
 
1073
9124
typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
1074
9125
    ULONG           NextEntryOffset;
1075
9126
    ULONG           FileIndex;
1084
9135
    ULONG           EaSize;
1085
9136
    WCHAR           FileName[ANYSIZE_ARRAY];
1086
9137
} FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION;
1087
 
    
1088
 
typedef struct _FILE_ID_FULL_DIR_INFORMATION {
1089
 
    ULONG NextEntryOffset;
1090
 
    ULONG FileIndex;
1091
 
    LARGE_INTEGER CreationTime;
1092
 
    LARGE_INTEGER LastAccessTime;
1093
 
    LARGE_INTEGER LastWriteTime;
1094
 
    LARGE_INTEGER ChangeTime;
1095
 
    LARGE_INTEGER EndOfFile;
1096
 
    LARGE_INTEGER AllocationSize;
1097
 
    ULONG FileAttributes;
1098
 
    ULONG FileNameLength;
1099
 
    ULONG EaSize;
1100
 
    LARGE_INTEGER FileId;
1101
 
    WCHAR FileName[1];
1102
 
} FILE_ID_FULL_DIR_INFORMATION, *PFILE_ID_FULL_DIR_INFORMATION;
1103
 
 
1104
 
typedef struct _FILE_ID_BOTH_DIR_INFORMATION {
1105
 
    ULONG NextEntryOffset;
1106
 
    ULONG FileIndex;
1107
 
    LARGE_INTEGER CreationTime;
1108
 
    LARGE_INTEGER LastAccessTime;
1109
 
    LARGE_INTEGER LastWriteTime;
1110
 
    LARGE_INTEGER ChangeTime;
1111
 
    LARGE_INTEGER EndOfFile;
1112
 
    LARGE_INTEGER AllocationSize;
1113
 
    ULONG FileAttributes;
1114
 
    ULONG FileNameLength;
1115
 
    ULONG EaSize;
1116
 
    CCHAR ShortNameLength;
1117
 
    WCHAR ShortName[12];
1118
 
    LARGE_INTEGER FileId;
1119
 
    WCHAR FileName[1];
1120
 
} FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION;
1121
 
 
1122
 
typedef struct _FILE_EA_INFORMATION {
1123
 
    ULONG EaSize;
1124
 
} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
1125
 
 
1126
 
typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
1127
 
    ULONG   FileSystemAttributes;
1128
 
    ULONG   MaximumComponentNameLength;
1129
 
    ULONG   FileSystemNameLength;
1130
 
    WCHAR   FileSystemName[1];
1131
 
} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
1132
 
 
1133
 
typedef struct _FILE_FS_CONTROL_INFORMATION {
1134
 
    LARGE_INTEGER   FreeSpaceStartFiltering;
1135
 
    LARGE_INTEGER   FreeSpaceThreshold;
1136
 
    LARGE_INTEGER   FreeSpaceStopFiltering;
1137
 
    LARGE_INTEGER   DefaultQuotaThreshold;
1138
 
    LARGE_INTEGER   DefaultQuotaLimit;
1139
 
    ULONG           FileSystemControlFlags;
1140
 
} FILE_FS_CONTROL_INFORMATION, *PFILE_FS_CONTROL_INFORMATION;
1141
 
 
1142
 
typedef struct _FILE_FS_FULL_SIZE_INFORMATION {
1143
 
    LARGE_INTEGER   TotalAllocationUnits;
1144
 
    LARGE_INTEGER   CallerAvailableAllocationUnits;
1145
 
    LARGE_INTEGER   ActualAvailableAllocationUnits;
1146
 
    ULONG           SectorsPerAllocationUnit;
1147
 
    ULONG           BytesPerSector;
1148
 
} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
1149
 
 
1150
 
typedef struct _FILE_FS_LABEL_INFORMATION {
1151
 
    ULONG VolumeLabelLength;
1152
 
    WCHAR VolumeLabel[1];
1153
 
} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
1154
 
 
1155
 
#if (VER_PRODUCTBUILD >= 2195)
1156
 
 
1157
 
typedef struct _FILE_FS_OBJECT_ID_INFORMATION {
1158
 
    UCHAR ObjectId[16];
1159
 
    UCHAR ExtendedInfo[48];
1160
 
} FILE_FS_OBJECT_ID_INFORMATION, *PFILE_FS_OBJECT_ID_INFORMATION;
1161
 
 
1162
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
1163
 
 
1164
 
typedef struct _FILE_FS_SIZE_INFORMATION {
1165
 
    LARGE_INTEGER   TotalAllocationUnits;
1166
 
    LARGE_INTEGER   AvailableAllocationUnits;
1167
 
    ULONG           SectorsPerAllocationUnit;
1168
 
    ULONG           BytesPerSector;
1169
 
} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
1170
 
 
1171
 
typedef struct _FILE_FS_VOLUME_INFORMATION {
1172
 
    LARGE_INTEGER   VolumeCreationTime;
1173
 
    ULONG           VolumeSerialNumber;
1174
 
    ULONG           VolumeLabelLength;
1175
 
    BOOLEAN         SupportsObjects;
1176
 
    WCHAR           VolumeLabel[1];
1177
 
} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
1178
 
 
1179
 
typedef struct _FILE_FS_OBJECTID_INFORMATION
1180
 
{
1181
 
    UCHAR ObjectId[16];
1182
 
    UCHAR ExtendedInfo[48];
1183
 
} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
1184
 
 
1185
 
typedef struct _FILE_FS_DRIVER_PATH_INFORMATION
1186
 
{
1187
 
    BOOLEAN DriverInPath;
1188
 
    ULONG DriverNameLength;
1189
 
    WCHAR DriverName[1];
1190
 
} FILE_FS_DRIVER_PATH_INFORMATION, *PFILE_FS_DRIVER_PATH_INFORMATION;
1191
 
 
1192
 
typedef struct _FILE_FULL_DIR_INFORMATION {
1193
 
    ULONG           NextEntryOffset;
1194
 
    ULONG           FileIndex;
1195
 
    LARGE_INTEGER   CreationTime;
1196
 
    LARGE_INTEGER   LastAccessTime;
1197
 
    LARGE_INTEGER   LastWriteTime;
1198
 
    LARGE_INTEGER   ChangeTime;
1199
 
    LARGE_INTEGER   EndOfFile;
1200
 
    LARGE_INTEGER   AllocationSize;
1201
 
    ULONG           FileAttributes;
1202
 
    ULONG           FileNameLength;
1203
 
    ULONG           EaSize;
1204
 
    WCHAR           FileName[1];
1205
 
} FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
1206
 
 
1207
 
typedef struct _FILE_GET_EA_INFORMATION {
1208
 
    ULONG   NextEntryOffset;
1209
 
    UCHAR   EaNameLength;
1210
 
    CHAR    EaName[1];
1211
 
} FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
1212
 
 
1213
 
typedef struct _FILE_GET_QUOTA_INFORMATION {
1214
 
    ULONG   NextEntryOffset;
1215
 
    ULONG   SidLength;
1216
 
    SID     Sid;
1217
 
} FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION;
1218
 
 
1219
 
typedef struct _FILE_QUOTA_INFORMATION
1220
 
{
1221
 
    ULONG NextEntryOffset;
1222
 
    ULONG SidLength;
1223
 
    LARGE_INTEGER ChangeTime;
1224
 
    LARGE_INTEGER QuotaUsed;
1225
 
    LARGE_INTEGER QuotaThreshold;
1226
 
    LARGE_INTEGER QuotaLimit;
1227
 
    SID Sid;
1228
 
} FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
1229
 
 
1230
 
typedef struct _FILE_INTERNAL_INFORMATION {
1231
 
    LARGE_INTEGER IndexNumber;
1232
 
} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
1233
 
 
1234
 
typedef struct _FILE_LINK_INFORMATION {
1235
 
    BOOLEAN ReplaceIfExists;
1236
 
    HANDLE  RootDirectory;
1237
 
    ULONG   FileNameLength;
1238
 
    WCHAR   FileName[1];
1239
 
} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
1240
 
 
1241
 
typedef struct _FILE_LOCK_INFO
1242
 
{
1243
 
    LARGE_INTEGER StartingByte;
1244
 
    LARGE_INTEGER Length;
1245
 
    BOOLEAN ExclusiveLock;
1246
 
    ULONG Key;
1247
 
    PFILE_OBJECT FileObject;
1248
 
    PVOID ProcessId;
1249
 
    LARGE_INTEGER EndingByte;
1250
 
} FILE_LOCK_INFO, *PFILE_LOCK_INFO;
1251
 
 
1252
 
typedef struct _FILE_REPARSE_POINT_INFORMATION
1253
 
{
1254
 
    LONGLONG FileReference;
1255
 
    ULONG Tag;
1256
 
} FILE_REPARSE_POINT_INFORMATION, *PFILE_REPARSE_POINT_INFORMATION;
1257
 
 
1258
 
typedef struct _FILE_MOVE_CLUSTER_INFORMATION
1259
 
{
1260
 
    ULONG ClusterCount;
1261
 
    HANDLE RootDirectory;
1262
 
    ULONG FileNameLength;
1263
 
    WCHAR FileName[1];
1264
 
} FILE_MOVE_CLUSTER_INFORMATION, *PFILE_MOVE_CLUSTER_INFORMATION;
1265
 
 
1266
 
typedef struct _FILE_NOTIFY_INFORMATION
1267
 
{
1268
 
    ULONG NextEntryOffset;
1269
 
    ULONG Action;
1270
 
    ULONG FileNameLength;
1271
 
    WCHAR FileName[1];
1272
 
} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;
1273
9138
 
1274
9139
/* raw internal file lock struct returned from FsRtlGetNextFileLock */
1275
9140
typedef struct _FILE_SHARED_LOCK_ENTRY {
1286
9151
    FILE_LOCK_INFO  FileLock;
1287
9152
} FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
1288
9153
 
1289
 
typedef NTSTATUS (NTAPI *PCOMPLETE_LOCK_IRP_ROUTINE) (
1290
 
    IN PVOID    Context,
1291
 
    IN PIRP     Irp
1292
 
);
1293
 
 
1294
 
typedef VOID (NTAPI *PUNLOCK_ROUTINE) (
1295
 
    IN PVOID            Context,
1296
 
    IN PFILE_LOCK_INFO  FileLockInfo
1297
 
);
1298
 
 
1299
 
typedef struct _FILE_LOCK {
1300
 
    PCOMPLETE_LOCK_IRP_ROUTINE  CompleteLockIrpRoutine;
1301
 
    PUNLOCK_ROUTINE             UnlockRoutine;
1302
 
    BOOLEAN                     FastIoIsQuestionable;
1303
 
    BOOLEAN                     Pad[3];
1304
 
    PVOID                       LockInformation;
1305
 
    FILE_LOCK_INFO              LastReturnedLockInfo;
1306
 
    PVOID                       LastReturnedLock;
1307
 
} FILE_LOCK, *PFILE_LOCK;
1308
 
 
1309
9154
typedef struct _FILE_MAILSLOT_PEEK_BUFFER {
1310
9155
    ULONG ReadDataAvailable;
1311
9156
    ULONG NumberOfMessages;
1312
9157
    ULONG MessageLength;
1313
9158
} FILE_MAILSLOT_PEEK_BUFFER, *PFILE_MAILSLOT_PEEK_BUFFER;
1314
9159
 
1315
 
typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
1316
 
    ULONG           MaximumMessageSize;
1317
 
    ULONG           MailslotQuota;
1318
 
    ULONG           NextMessageSize;
1319
 
    ULONG           MessagesAvailable;
1320
 
    LARGE_INTEGER   ReadTimeout;
1321
 
} FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
1322
 
 
1323
 
typedef struct _FILE_MAILSLOT_SET_INFORMATION {
1324
 
    PLARGE_INTEGER ReadTimeout;
1325
 
} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
1326
 
 
1327
 
typedef struct _FILE_MODE_INFORMATION {
1328
 
    ULONG Mode;
1329
 
} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
1330
 
 
1331
 
typedef struct _FILE_ALL_INFORMATION {
1332
 
    FILE_BASIC_INFORMATION      BasicInformation;
1333
 
    FILE_STANDARD_INFORMATION   StandardInformation;
1334
 
    FILE_INTERNAL_INFORMATION   InternalInformation;
1335
 
    FILE_EA_INFORMATION         EaInformation;
1336
 
    FILE_ACCESS_INFORMATION     AccessInformation;
1337
 
    FILE_POSITION_INFORMATION   PositionInformation;
1338
 
    FILE_MODE_INFORMATION       ModeInformation;
1339
 
    FILE_ALIGNMENT_INFORMATION  AlignmentInformation;
1340
 
    FILE_NAME_INFORMATION       NameInformation;
1341
 
} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
1342
 
 
1343
 
typedef struct _FILE_NAMES_INFORMATION {
1344
 
    ULONG NextEntryOffset;
1345
 
    ULONG FileIndex;
1346
 
    ULONG FileNameLength;
1347
 
    WCHAR FileName[1];
1348
 
} FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
1349
 
 
1350
 
typedef struct _FILE_OBJECTID_INFORMATION {
1351
 
    LONGLONG        FileReference;
1352
 
    UCHAR           ObjectId[16];
1353
 
    _ANONYMOUS_UNION union {
1354
 
        struct {
1355
 
            UCHAR   BirthVolumeId[16];
1356
 
            UCHAR   BirthObjectId[16];
1357
 
            UCHAR   DomainId[16];
1358
 
        } ;
1359
 
        UCHAR       ExtendedInfo[48];
1360
 
    } DUMMYUNIONNAME;
1361
 
} FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION;
1362
 
 
1363
9160
typedef struct _FILE_OLE_CLASSID_INFORMATION {
1364
9161
    GUID ClassId;
1365
9162
} FILE_OLE_CLASSID_INFORMATION, *PFILE_OLE_CLASSID_INFORMATION;
1423
9220
    ULONG StateBitsMask;
1424
9221
} FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION;
1425
9222
 
1426
 
typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER {
1427
 
    HANDLE  EventHandle;
1428
 
    ULONG   KeyValue;
1429
 
} FILE_PIPE_ASSIGN_EVENT_BUFFER, *PFILE_PIPE_ASSIGN_EVENT_BUFFER;
1430
 
 
1431
 
typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER {
1432
 
    PVOID ClientSession;
1433
 
    PVOID ClientProcess;
1434
 
} FILE_PIPE_CLIENT_PROCESS_BUFFER, *PFILE_PIPE_CLIENT_PROCESS_BUFFER;
1435
 
 
1436
 
typedef struct _FILE_PIPE_EVENT_BUFFER {
1437
 
    ULONG NamedPipeState;
1438
 
    ULONG EntryType;
1439
 
    ULONG ByteCount;
1440
 
    ULONG KeyValue;
1441
 
    ULONG NumberRequests;
1442
 
} FILE_PIPE_EVENT_BUFFER, *PFILE_PIPE_EVENT_BUFFER;
1443
 
 
1444
 
typedef struct _FILE_PIPE_PEEK_BUFFER
1445
 
{
1446
 
    ULONG NamedPipeState;
1447
 
    ULONG ReadDataAvailable;
1448
 
    ULONG NumberOfMessages;
1449
 
    ULONG MessageLength;
1450
 
    CHAR Data[1];
1451
 
} FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
1452
 
 
1453
 
typedef struct _FILE_PIPE_INFORMATION {
1454
 
    ULONG ReadMode;
1455
 
    ULONG CompletionMode;
1456
 
} FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
1457
 
 
1458
 
typedef struct _FILE_PIPE_LOCAL_INFORMATION {
1459
 
    ULONG NamedPipeType;
1460
 
    ULONG NamedPipeConfiguration;
1461
 
    ULONG MaximumInstances;
1462
 
    ULONG CurrentInstances;
1463
 
    ULONG InboundQuota;
1464
 
    ULONG ReadDataAvailable;
1465
 
    ULONG OutboundQuota;
1466
 
    ULONG WriteQuotaAvailable;
1467
 
    ULONG NamedPipeState;
1468
 
    ULONG NamedPipeEnd;
1469
 
} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
1470
 
 
1471
 
typedef struct _FILE_PIPE_REMOTE_INFORMATION {
1472
 
    LARGE_INTEGER   CollectDataTime;
1473
 
    ULONG           MaximumCollectionCount;
1474
 
} FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
1475
 
 
1476
 
typedef struct _FILE_PIPE_WAIT_FOR_BUFFER {
1477
 
    LARGE_INTEGER   Timeout;
1478
 
    ULONG           NameLength;
1479
 
    BOOLEAN         TimeoutSpecified;
1480
 
    WCHAR           Name[1];
1481
 
} FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
1482
 
 
1483
 
typedef struct _FILE_RENAME_INFORMATION {
1484
 
    BOOLEAN ReplaceIfExists;
1485
 
    HANDLE  RootDirectory;
1486
 
    ULONG   FileNameLength;
1487
 
    WCHAR   FileName[1];
1488
 
} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
1489
 
 
1490
 
typedef struct _FILE_STREAM_INFORMATION {
1491
 
    ULONG           NextEntryOffset;
1492
 
    ULONG           StreamNameLength;
1493
 
    LARGE_INTEGER   StreamSize;
1494
 
    LARGE_INTEGER   StreamAllocationSize;
1495
 
    WCHAR           StreamName[1];
1496
 
} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
1497
 
 
1498
 
typedef struct _FILE_TRACKING_INFORMATION {
1499
 
    HANDLE  DestinationFile;
1500
 
    ULONG   ObjectInformationLength;
1501
 
    CHAR    ObjectInformation[1];
1502
 
} FILE_TRACKING_INFORMATION, *PFILE_TRACKING_INFORMATION;
1503
 
 
1504
 
#if (VER_PRODUCTBUILD >= 2195)
1505
 
typedef struct _FILE_ZERO_DATA_INFORMATION {
1506
 
    LARGE_INTEGER FileOffset;
1507
 
    LARGE_INTEGER BeyondFinalZero;
1508
 
} FILE_ZERO_DATA_INFORMATION, *PFILE_ZERO_DATA_INFORMATION;
1509
 
 
1510
 
typedef struct FILE_ALLOCATED_RANGE_BUFFER {
1511
 
    LARGE_INTEGER FileOffset;
1512
 
    LARGE_INTEGER Length;
1513
 
} FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER;
1514
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
1515
 
 
1516
 
#define FSRTL_FCB_HEADER_V0             (0x00)
1517
 
#define FSRTL_FCB_HEADER_V1             (0x01)
1518
 
 
1519
 
 
1520
 
typedef struct _FSRTL_COMMON_FCB_HEADER {
1521
 
    CSHORT          NodeTypeCode;
1522
 
    CSHORT          NodeByteSize;
1523
 
    UCHAR           Flags;
1524
 
    UCHAR           IsFastIoPossible;
1525
 
#if (VER_PRODUCTBUILD >= 1381)
1526
 
    UCHAR           Flags2;
1527
 
    UCHAR           Reserved;
1528
 
#endif /* (VER_PRODUCTBUILD >= 1381) */
1529
 
    PERESOURCE      Resource;
1530
 
    PERESOURCE      PagingIoResource;
1531
 
    LARGE_INTEGER   AllocationSize;
1532
 
    LARGE_INTEGER   FileSize;
1533
 
    LARGE_INTEGER   ValidDataLength;
1534
 
} FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER;
1535
 
 
1536
 
typedef enum _FSRTL_COMPARISON_RESULT
1537
 
{
1538
 
    LessThan = -1,
1539
 
    EqualTo = 0,
1540
 
    GreaterThan = 1
1541
 
} FSRTL_COMPARISON_RESULT;
1542
 
    
1543
 
#if (VER_PRODUCTBUILD >= 2600)
1544
 
 
1545
 
typedef struct _FSRTL_ADVANCED_FCB_HEADER {
1546
 
    CSHORT          NodeTypeCode;
1547
 
    CSHORT          NodeByteSize;
1548
 
    UCHAR           Flags;
1549
 
    UCHAR           IsFastIoPossible;
1550
 
    UCHAR           Flags2;
1551
 
    UCHAR           Reserved: 4;
1552
 
    UCHAR           Version: 4;
1553
 
    PERESOURCE      Resource;
1554
 
    PERESOURCE      PagingIoResource;
1555
 
    LARGE_INTEGER   AllocationSize;
1556
 
    LARGE_INTEGER   FileSize;
1557
 
    LARGE_INTEGER   ValidDataLength;
1558
 
    PFAST_MUTEX     FastMutex;
1559
 
    LIST_ENTRY      FilterContexts;
1560
 
    EX_PUSH_LOCK    PushLock;
1561
 
    PVOID           *FileContextSupportPointer;
1562
 
} FSRTL_ADVANCED_FCB_HEADER, *PFSRTL_ADVANCED_FCB_HEADER;
1563
 
 
1564
 
typedef struct _FSRTL_PER_STREAM_CONTEXT {
1565
 
    LIST_ENTRY     Links;
1566
 
    PVOID          OwnerId;
1567
 
    PVOID          InstanceId;
1568
 
    PFREE_FUNCTION FreeCallback;
1569
 
} FSRTL_PER_STREAM_CONTEXT, *PFSRTL_PER_STREAM_CONTEXT;
1570
 
 
1571
 
typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT
1572
 
{
1573
 
    LIST_ENTRY Links;
1574
 
    PVOID OwnerId;
1575
 
    PVOID InstanceId;
1576
 
} FSRTL_PER_FILEOBJECT_CONTEXT, *PFSRTL_PER_FILEOBJECT_CONTEXT;
1577
 
 
1578
 
#endif /* (VER_PRODUCTBUILD >= 2600) */
1579
 
 
1580
 
typedef struct _BASE_MCB
1581
 
{
1582
 
    ULONG MaximumPairCount;
1583
 
    ULONG PairCount;
1584
 
    USHORT PoolType;
1585
 
    USHORT Flags;
1586
 
    PVOID Mapping;
1587
 
} BASE_MCB, *PBASE_MCB;
1588
 
 
1589
 
typedef struct _LARGE_MCB
1590
 
{
1591
 
    PKGUARDED_MUTEX GuardedMutex;
1592
 
    BASE_MCB BaseMcb;
1593
 
} LARGE_MCB, *PLARGE_MCB;
1594
 
 
1595
 
typedef struct _MCB
1596
 
{
1597
 
    LARGE_MCB DummyFieldThatSizesThisStructureCorrectly;
1598
 
} MCB, *PMCB;
1599
 
 
1600
 
typedef struct _GENERATE_NAME_CONTEXT {
1601
 
    USHORT  Checksum;
1602
 
    BOOLEAN CheckSumInserted;
1603
 
    UCHAR   NameLength;
1604
 
    WCHAR   NameBuffer[8];
1605
 
    ULONG   ExtensionLength;
1606
 
    WCHAR   ExtensionBuffer[4];
1607
 
    ULONG   LastIndexValue;
1608
 
} GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
1609
 
 
1610
9223
typedef struct _MAPPING_PAIR {
1611
9224
    ULONGLONG Vcn;
1612
9225
    ULONGLONG Lcn;
1618
9231
    MAPPING_PAIR    Pair[1];
1619
9232
} GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
1620
9233
 
1621
 
typedef struct _KQUEUE {
1622
 
    DISPATCHER_HEADER   Header;
1623
 
    LIST_ENTRY          EntryListHead;
1624
 
    ULONG               CurrentCount;
1625
 
    ULONG               MaximumCount;
1626
 
    LIST_ENTRY          ThreadListHead;
1627
 
} KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
1628
 
 
1629
 
#define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
1630
 
 
1631
9234
typedef struct _MBCB {
1632
9235
    CSHORT          NodeTypeCode;
1633
9236
    CSHORT          NodeIsInZone;
1690
9293
    OBJECT_TYPE_INFO    ObjectsTypeInfo[1];
1691
9294
} OBJECT_ALL_TYPES_INFO, *POBJECT_ALL_TYPES_INFO;
1692
9295
 
1693
 
 
1694
 
typedef struct _PATHNAME_BUFFER {
1695
 
    ULONG PathNameLength;
1696
 
    WCHAR Name[1];
1697
 
} PATHNAME_BUFFER, *PPATHNAME_BUFFER;
1698
 
 
1699
 
typedef enum _RTL_GENERIC_COMPARE_RESULTS
1700
 
{
1701
 
    GenericLessThan,
1702
 
    GenericGreaterThan,
1703
 
    GenericEqual
1704
 
} RTL_GENERIC_COMPARE_RESULTS;
1705
 
 
1706
 
typedef enum _TABLE_SEARCH_RESULT
1707
 
{
1708
 
    TableEmptyTree,
1709
 
    TableFoundNode,
1710
 
    TableInsertAsLeft,
1711
 
    TableInsertAsRight
1712
 
} TABLE_SEARCH_RESULT;
1713
 
 
1714
 
typedef NTSTATUS
1715
 
(NTAPI *PRTL_AVL_MATCH_FUNCTION)(
1716
 
    struct _RTL_AVL_TABLE *Table,
1717
 
    PVOID UserData,
1718
 
    PVOID MatchData
1719
 
);
1720
 
 
1721
 
typedef RTL_GENERIC_COMPARE_RESULTS
1722
 
(NTAPI *PRTL_AVL_COMPARE_ROUTINE) (
1723
 
    struct _RTL_AVL_TABLE *Table,
1724
 
    PVOID FirstStruct,
1725
 
    PVOID SecondStruct
1726
 
);
1727
 
 
1728
 
typedef RTL_GENERIC_COMPARE_RESULTS
1729
 
(NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) (
1730
 
    struct _RTL_GENERIC_TABLE *Table,
1731
 
    PVOID FirstStruct,
1732
 
    PVOID SecondStruct
1733
 
);
1734
 
 
1735
 
typedef PVOID
1736
 
(NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
1737
 
    struct _RTL_GENERIC_TABLE *Table,
1738
 
    CLONG ByteSize
1739
 
);
1740
 
 
1741
 
typedef VOID
1742
 
(NTAPI *PRTL_GENERIC_FREE_ROUTINE) (
1743
 
    struct _RTL_GENERIC_TABLE *Table,
1744
 
    PVOID Buffer
1745
 
);
1746
 
 
1747
 
typedef PVOID
1748
 
(NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) (
1749
 
    struct _RTL_AVL_TABLE *Table,
1750
 
    CLONG ByteSize
1751
 
);
1752
 
 
1753
 
typedef VOID
1754
 
(NTAPI *PRTL_AVL_FREE_ROUTINE) (
1755
 
    struct _RTL_AVL_TABLE *Table,
1756
 
    PVOID Buffer
1757
 
);
1758
 
 
1759
 
typedef struct _PUBLIC_BCB {
1760
 
    CSHORT          NodeTypeCode;
1761
 
    CSHORT          NodeByteSize;
1762
 
    ULONG           MappedLength;
1763
 
    LARGE_INTEGER   MappedFileOffset;
1764
 
} PUBLIC_BCB, *PPUBLIC_BCB;
1765
 
 
1766
 
typedef struct _QUERY_PATH_REQUEST {
1767
 
    ULONG                   PathNameLength;
1768
 
    PIO_SECURITY_CONTEXT    SecurityContext;
1769
 
    WCHAR                   FilePathName[1];
1770
 
} QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST;
1771
 
 
1772
 
typedef struct _QUERY_PATH_RESPONSE {
1773
 
    ULONG LengthAccepted;
1774
 
} QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE;
1775
 
 
1776
 
typedef struct _RETRIEVAL_POINTERS_BUFFER {
1777
 
    ULONG               ExtentCount;
1778
 
    LARGE_INTEGER       StartingVcn;
1779
 
    struct {
1780
 
        LARGE_INTEGER   NextVcn;
1781
 
        LARGE_INTEGER   Lcn;
1782
 
    } Extents[1];
1783
 
} RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
1784
 
 
1785
 
typedef struct _RTL_SPLAY_LINKS {
1786
 
    struct _RTL_SPLAY_LINKS *Parent;
1787
 
    struct _RTL_SPLAY_LINKS *LeftChild;
1788
 
    struct _RTL_SPLAY_LINKS *RightChild;
1789
 
} RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
1790
 
 
1791
 
typedef struct _RTL_BALANCED_LINKS
1792
 
{
1793
 
    struct _RTL_BALANCED_LINKS *Parent;
1794
 
    struct _RTL_BALANCED_LINKS *LeftChild;
1795
 
    struct _RTL_BALANCED_LINKS *RightChild;
1796
 
    CHAR Balance;
1797
 
    UCHAR Reserved[3];
1798
 
} RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
1799
 
 
1800
 
typedef struct _RTL_GENERIC_TABLE
1801
 
{
1802
 
    PRTL_SPLAY_LINKS TableRoot;
1803
 
    LIST_ENTRY InsertOrderList;
1804
 
    PLIST_ENTRY OrderedPointer;
1805
 
    ULONG WhichOrderedElement;
1806
 
    ULONG NumberGenericTableElements;
1807
 
    PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
1808
 
    PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
1809
 
    PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
1810
 
    PVOID TableContext;
1811
 
} RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
1812
 
 
1813
 
typedef struct _UNICODE_PREFIX_TABLE_ENTRY
1814
 
{
1815
 
    CSHORT NodeTypeCode;
1816
 
    CSHORT NameLength;
1817
 
    struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
1818
 
    struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
1819
 
    RTL_SPLAY_LINKS Links;
1820
 
    PUNICODE_STRING Prefix;
1821
 
} UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
1822
 
    
1823
 
typedef struct _UNICODE_PREFIX_TABLE
1824
 
{
1825
 
    CSHORT NodeTypeCode;
1826
 
    CSHORT NameLength;
1827
 
    PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
1828
 
    PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
1829
 
} UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
1830
 
    
1831
 
NTSYSAPI
1832
 
VOID
1833
 
NTAPI
1834
 
RtlInitializeUnicodePrefix (
1835
 
    IN PUNICODE_PREFIX_TABLE PrefixTable
1836
 
);
1837
 
    
1838
 
NTSYSAPI
1839
 
BOOLEAN
1840
 
NTAPI
1841
 
RtlInsertUnicodePrefix (
1842
 
    IN PUNICODE_PREFIX_TABLE PrefixTable,
1843
 
    IN PUNICODE_STRING Prefix,
1844
 
    IN PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
1845
 
);
1846
 
    
1847
 
NTSYSAPI
1848
 
VOID
1849
 
NTAPI
1850
 
RtlRemoveUnicodePrefix (
1851
 
    IN PUNICODE_PREFIX_TABLE PrefixTable,
1852
 
    IN PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry
1853
 
);
1854
 
 
1855
 
NTSYSAPI
1856
 
PUNICODE_PREFIX_TABLE_ENTRY
1857
 
NTAPI
1858
 
RtlFindUnicodePrefix (
1859
 
    IN PUNICODE_PREFIX_TABLE PrefixTable,
1860
 
    IN PUNICODE_STRING FullName,
1861
 
    IN ULONG CaseInsensitiveIndex
1862
 
);
1863
 
    
1864
 
NTSYSAPI
1865
 
PUNICODE_PREFIX_TABLE_ENTRY
1866
 
NTAPI
1867
 
RtlNextUnicodePrefix (
1868
 
    IN PUNICODE_PREFIX_TABLE PrefixTable,
1869
 
    IN BOOLEAN Restart
1870
 
);
1871
 
 
1872
 
#undef PRTL_GENERIC_COMPARE_ROUTINE
1873
 
#undef PRTL_GENERIC_ALLOCATE_ROUTINE
1874
 
#undef PRTL_GENERIC_FREE_ROUTINE
1875
 
#undef RTL_GENERIC_TABLE
1876
 
#undef PRTL_GENERIC_TABLE
1877
 
 
1878
 
#define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
1879
 
#define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
1880
 
#define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
1881
 
#define RTL_GENERIC_TABLE RTL_AVL_TABLE
1882
 
#define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
1883
 
 
1884
 
#define RtlInitializeGenericTable               RtlInitializeGenericTableAvl
1885
 
#define RtlInsertElementGenericTable            RtlInsertElementGenericTableAvl
1886
 
#define RtlInsertElementGenericTableFull        RtlInsertElementGenericTableFullAvl
1887
 
#define RtlDeleteElementGenericTable            RtlDeleteElementGenericTableAvl
1888
 
#define RtlLookupElementGenericTable            RtlLookupElementGenericTableAvl
1889
 
#define RtlLookupElementGenericTableFull        RtlLookupElementGenericTableFullAvl
1890
 
#define RtlEnumerateGenericTable                RtlEnumerateGenericTableAvl
1891
 
#define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
1892
 
#define RtlGetElementGenericTable               RtlGetElementGenericTableAvl
1893
 
#define RtlNumberGenericTableElements           RtlNumberGenericTableElementsAvl
1894
 
#define RtlIsGenericTableEmpty                  RtlIsGenericTableEmptyAvl
1895
 
 
1896
 
typedef struct _RTL_AVL_TABLE
1897
 
{
1898
 
    RTL_BALANCED_LINKS BalancedRoot;
1899
 
    PVOID OrderedPointer;
1900
 
    ULONG WhichOrderedElement;
1901
 
    ULONG NumberGenericTableElements;
1902
 
    ULONG DepthOfTree;
1903
 
    PRTL_BALANCED_LINKS RestartKey;
1904
 
    ULONG DeleteCount;
1905
 
    PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
1906
 
    PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
1907
 
    PRTL_AVL_FREE_ROUTINE FreeRoutine;
1908
 
    PVOID TableContext;
1909
 
} RTL_AVL_TABLE, *PRTL_AVL_TABLE;
1910
 
 
1911
 
NTSYSAPI
1912
 
VOID
1913
 
NTAPI
1914
 
RtlInitializeGenericTableAvl(
1915
 
    PRTL_AVL_TABLE Table,
1916
 
    PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
1917
 
    PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
1918
 
    PRTL_AVL_FREE_ROUTINE FreeRoutine,
1919
 
    PVOID TableContext
1920
 
);
1921
 
 
1922
 
NTSYSAPI
1923
 
PVOID
1924
 
NTAPI
1925
 
RtlInsertElementGenericTableAvl (
1926
 
    PRTL_AVL_TABLE Table,
1927
 
    PVOID Buffer,
1928
 
    CLONG BufferSize,
1929
 
    PBOOLEAN NewElement OPTIONAL
1930
 
    );
1931
 
    
1932
 
NTSYSAPI
1933
 
BOOLEAN
1934
 
NTAPI
1935
 
RtlDeleteElementGenericTableAvl (
1936
 
    PRTL_AVL_TABLE Table,
1937
 
    PVOID Buffer
1938
 
    );
1939
 
    
1940
 
NTSYSAPI
1941
 
PVOID
1942
 
NTAPI
1943
 
RtlLookupElementGenericTableAvl (
1944
 
    PRTL_AVL_TABLE Table,
1945
 
    PVOID Buffer
1946
 
    );
1947
 
    
1948
 
NTSYSAPI
1949
 
PVOID
1950
 
NTAPI
1951
 
RtlEnumerateGenericTableWithoutSplayingAvl (
1952
 
    PRTL_AVL_TABLE Table,
1953
 
    PVOID *RestartKey
1954
 
    );
1955
 
 
1956
9296
#if defined(USE_LPC6432)
1957
9297
#define LPC_CLIENT_ID CLIENT_ID64
1958
9298
#define LPC_SIZE_T ULONGLONG
1985
9325
        } s2;
1986
9326
        ULONG ZeroInit;
1987
9327
    } u2;
1988
 
    union
 
9328
    __GNU_EXTENSION union
1989
9329
    {
1990
9330
        LPC_CLIENT_ID ClientId;
1991
9331
        double DoNotUseThisField;
1992
9332
    };
1993
9333
    ULONG MessageId;
1994
 
    union
 
9334
    __GNU_EXTENSION union
1995
9335
    {
1996
9336
        LPC_SIZE_T ClientViewSize;
1997
9337
        ULONG CallbackId;
2017
9357
    LPC_PVOID ViewBase;
2018
9358
} REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW;
2019
9359
 
2020
 
typedef struct _SE_EXPORTS {
2021
 
 
2022
 
    LUID    SeCreateTokenPrivilege;
2023
 
    LUID    SeAssignPrimaryTokenPrivilege;
2024
 
    LUID    SeLockMemoryPrivilege;
2025
 
    LUID    SeIncreaseQuotaPrivilege;
2026
 
    LUID    SeUnsolicitedInputPrivilege;
2027
 
    LUID    SeTcbPrivilege;
2028
 
    LUID    SeSecurityPrivilege;
2029
 
    LUID    SeTakeOwnershipPrivilege;
2030
 
    LUID    SeLoadDriverPrivilege;
2031
 
    LUID    SeCreatePagefilePrivilege;
2032
 
    LUID    SeIncreaseBasePriorityPrivilege;
2033
 
    LUID    SeSystemProfilePrivilege;
2034
 
    LUID    SeSystemtimePrivilege;
2035
 
    LUID    SeProfileSingleProcessPrivilege;
2036
 
    LUID    SeCreatePermanentPrivilege;
2037
 
    LUID    SeBackupPrivilege;
2038
 
    LUID    SeRestorePrivilege;
2039
 
    LUID    SeShutdownPrivilege;
2040
 
    LUID    SeDebugPrivilege;
2041
 
    LUID    SeAuditPrivilege;
2042
 
    LUID    SeSystemEnvironmentPrivilege;
2043
 
    LUID    SeChangeNotifyPrivilege;
2044
 
    LUID    SeRemoteShutdownPrivilege;
2045
 
 
2046
 
    PSID    SeNullSid;
2047
 
    PSID    SeWorldSid;
2048
 
    PSID    SeLocalSid;
2049
 
    PSID    SeCreatorOwnerSid;
2050
 
    PSID    SeCreatorGroupSid;
2051
 
 
2052
 
    PSID    SeNtAuthoritySid;
2053
 
    PSID    SeDialupSid;
2054
 
    PSID    SeNetworkSid;
2055
 
    PSID    SeBatchSid;
2056
 
    PSID    SeInteractiveSid;
2057
 
    PSID    SeLocalSystemSid;
2058
 
    PSID    SeAliasAdminsSid;
2059
 
    PSID    SeAliasUsersSid;
2060
 
    PSID    SeAliasGuestsSid;
2061
 
    PSID    SeAliasPowerUsersSid;
2062
 
    PSID    SeAliasAccountOpsSid;
2063
 
    PSID    SeAliasSystemOpsSid;
2064
 
    PSID    SeAliasPrintOpsSid;
2065
 
    PSID    SeAliasBackupOpsSid;
2066
 
 
2067
 
    PSID    SeAuthenticatedUsersSid;
2068
 
 
2069
 
    PSID    SeRestrictedSid;
2070
 
    PSID    SeAnonymousLogonSid;
2071
 
 
2072
 
    LUID    SeUndockPrivilege;
2073
 
    LUID    SeSyncAgentPrivilege;
2074
 
    LUID    SeEnableDelegationPrivilege;
2075
 
 
2076
 
} SE_EXPORTS, *PSE_EXPORTS;
2077
 
 
2078
 
extern PSE_EXPORTS SeExports;
2079
 
 
2080
 
typedef struct
2081
 
{
2082
 
  LARGE_INTEGER StartingLcn;
2083
 
} STARTING_LCN_INPUT_BUFFER, *PSTARTING_LCN_INPUT_BUFFER;
2084
 
 
2085
 
typedef struct _STARTING_VCN_INPUT_BUFFER {
2086
 
    LARGE_INTEGER StartingVcn;
2087
 
} STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER;
2088
 
 
2089
 
typedef struct _SECURITY_CLIENT_CONTEXT {
2090
 
    SECURITY_QUALITY_OF_SERVICE SecurityQos;
2091
 
    PACCESS_TOKEN               ClientToken;
2092
 
    BOOLEAN                     DirectlyAccessClientToken;
2093
 
    BOOLEAN                     DirectAccessEffectiveOnly;
2094
 
    BOOLEAN                     ServerIsRemote;
2095
 
    TOKEN_CONTROL               ClientTokenControl;
2096
 
} SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT;
2097
 
 
2098
 
//
2099
 
//  The following are the inherit flags that go into the AceFlags field
2100
 
//  of an Ace header.
2101
 
//
2102
 
#define OBJECT_INHERIT_ACE                (0x1)
2103
 
#define CONTAINER_INHERIT_ACE             (0x2)
2104
 
#define NO_PROPAGATE_INHERIT_ACE          (0x4)
2105
 
#define INHERIT_ONLY_ACE                  (0x8)
2106
 
#define INHERITED_ACE                     (0x10)
2107
 
#define VALID_INHERIT_FLAGS               (0x1F)
2108
 
 
2109
 
typedef struct _ACE_HEADER
2110
 
{
2111
 
    UCHAR AceType;
2112
 
    UCHAR AceFlags;
2113
 
    USHORT AceSize;
2114
 
} ACE_HEADER, *PACE_HEADER;
2115
 
 
2116
 
typedef struct _ACCESS_ALLOWED_ACE
2117
 
{
2118
 
    ACE_HEADER Header;
2119
 
    ACCESS_MASK Mask;
2120
 
    ULONG SidStart;
2121
 
} ACCESS_ALLOWED_ACE, *PACCESS_ALLOWED_ACE;
2122
 
 
2123
 
typedef struct _ACCESS_DENIED_ACE
2124
 
{
2125
 
    ACE_HEADER Header;
2126
 
    ACCESS_MASK Mask;
2127
 
    ULONG SidStart;
2128
 
} ACCESS_DENIED_ACE, *PACCESS_DENIED_ACE;
2129
 
 
2130
 
typedef struct _SYSTEM_AUDIT_ACE
2131
 
{
2132
 
    ACE_HEADER Header;
2133
 
    ACCESS_MASK Mask;
2134
 
    ULONG SidStart;
2135
 
} SYSTEM_AUDIT_ACE, *PSYSTEM_AUDIT_ACE;
2136
 
 
2137
 
typedef struct _SYSTEM_ALARM_ACE
2138
 
{
2139
 
    ACE_HEADER Header;
2140
 
    ACCESS_MASK Mask;
2141
 
    ULONG SidStart;
2142
 
} SYSTEM_ALARM_ACE, *PSYSTEM_ALARM_ACE;
2143
 
 
2144
 
typedef struct _SYSTEM_MANDATORY_LABEL_ACE
2145
 
{
2146
 
    ACE_HEADER Header;
2147
 
    ACCESS_MASK Mask;
2148
 
    ULONG SidStart;
2149
 
} SYSTEM_MANDATORY_LABEL_ACE, *PSYSTEM_MANDATORY_LABEL_ACE;
2150
 
 
2151
 
typedef struct _TUNNEL {
2152
 
    FAST_MUTEX          Mutex;
2153
 
    PRTL_SPLAY_LINKS    Cache;
2154
 
    LIST_ENTRY          TimerQueue;
2155
 
    USHORT              NumEntries;
2156
 
} TUNNEL, *PTUNNEL;
2157
 
 
2158
9360
typedef struct _VAD_HEADER {
2159
9361
    PVOID       StartVPN;
2160
9362
    PVOID       EndVPN;
2169
9371
    LIST_ENTRY  Secured;
2170
9372
} VAD_HEADER, *PVAD_HEADER;
2171
9373
 
2172
 
typedef struct
2173
 
{
2174
 
  LARGE_INTEGER StartingLcn;
2175
 
  LARGE_INTEGER BitmapSize;
2176
 
  UCHAR Buffer[1];
2177
 
} VOLUME_BITMAP_BUFFER, *PVOLUME_BITMAP_BUFFER;
2178
 
 
2179
 
#if (VER_PRODUCTBUILD >= 2600)
2180
 
 
2181
 
typedef BOOLEAN
2182
 
(NTAPI *PFILTER_REPORT_CHANGE) (
2183
 
    IN PVOID  NotifyContext,
2184
 
    IN PVOID  FilterContext
2185
 
);
2186
 
 
2187
 
typedef enum _FS_FILTER_SECTION_SYNC_TYPE {
2188
 
    SyncTypeOther = 0,
2189
 
    SyncTypeCreateSection
2190
 
} FS_FILTER_SECTION_SYNC_TYPE, *PFS_FILTER_SECTION_SYNC_TYPE;
2191
 
 
2192
 
typedef enum _FS_FILTER_STREAM_FO_NOTIFICATION_TYPE {
2193
 
    NotifyTypeCreate = 0,
2194
 
    NotifyTypeRetired
2195
 
} FS_FILTER_STREAM_FO_NOTIFICATION_TYPE, *PFS_FILTER_STREAM_FO_NOTIFICATION_TYPE;
2196
 
 
2197
 
typedef union _FS_FILTER_PARAMETERS {
2198
 
    struct {
2199
 
        PLARGE_INTEGER  EndingOffset;
2200
 
        PERESOURCE *ResourceToRelease;
2201
 
    } AcquireForModifiedPageWriter;
2202
 
 
2203
 
    struct {
2204
 
        PERESOURCE  ResourceToRelease;
2205
 
    } ReleaseForModifiedPageWriter;
2206
 
 
2207
 
    struct {
2208
 
        FS_FILTER_SECTION_SYNC_TYPE  SyncType;
2209
 
        ULONG  PageProtection;
2210
 
    } AcquireForSectionSynchronization;
2211
 
 
2212
 
    struct {
2213
 
        FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType;
2214
 
        BOOLEAN POINTER_ALIGNMENT SafeToRecurse;
2215
 
    } NotifyStreamFileObject;
2216
 
 
2217
 
    struct {
2218
 
        PVOID  Argument1;
2219
 
        PVOID  Argument2;
2220
 
        PVOID  Argument3;
2221
 
        PVOID  Argument4;
2222
 
        PVOID  Argument5;
2223
 
    } Others;
2224
 
} FS_FILTER_PARAMETERS, *PFS_FILTER_PARAMETERS;
2225
 
 
2226
 
typedef struct _FS_FILTER_CALLBACK_DATA {
2227
 
    ULONG                  SizeOfFsFilterCallbackData;
2228
 
    UCHAR                  Operation;
2229
 
    UCHAR                  Reserved;
2230
 
    struct _DEVICE_OBJECT  *DeviceObject;
2231
 
    struct _FILE_OBJECT    *FileObject;
2232
 
    FS_FILTER_PARAMETERS   Parameters;
2233
 
} FS_FILTER_CALLBACK_DATA, *PFS_FILTER_CALLBACK_DATA;
2234
 
 
2235
 
typedef NTSTATUS
2236
 
(NTAPI *PFS_FILTER_CALLBACK) (
2237
 
    IN PFS_FILTER_CALLBACK_DATA  Data,
2238
 
    OUT PVOID                    *CompletionContext
2239
 
);
2240
 
 
2241
 
typedef VOID
2242
 
(NTAPI *PFS_FILTER_COMPLETION_CALLBACK) (
2243
 
    IN PFS_FILTER_CALLBACK_DATA  Data,
2244
 
    IN NTSTATUS                  OperationStatus,
2245
 
    IN PVOID                     CompletionContext
2246
 
);
2247
 
 
2248
 
typedef struct _FS_FILTER_CALLBACKS {
2249
 
    ULONG                           SizeOfFsFilterCallbacks;
2250
 
    ULONG                           Reserved;
2251
 
    PFS_FILTER_CALLBACK             PreAcquireForSectionSynchronization;
2252
 
    PFS_FILTER_COMPLETION_CALLBACK  PostAcquireForSectionSynchronization;
2253
 
    PFS_FILTER_CALLBACK             PreReleaseForSectionSynchronization;
2254
 
    PFS_FILTER_COMPLETION_CALLBACK  PostReleaseForSectionSynchronization;
2255
 
    PFS_FILTER_CALLBACK             PreAcquireForCcFlush;
2256
 
    PFS_FILTER_COMPLETION_CALLBACK  PostAcquireForCcFlush;
2257
 
    PFS_FILTER_CALLBACK             PreReleaseForCcFlush;
2258
 
    PFS_FILTER_COMPLETION_CALLBACK  PostReleaseForCcFlush;
2259
 
    PFS_FILTER_CALLBACK             PreAcquireForModifiedPageWriter;
2260
 
    PFS_FILTER_COMPLETION_CALLBACK  PostAcquireForModifiedPageWriter;
2261
 
    PFS_FILTER_CALLBACK             PreReleaseForModifiedPageWriter;
2262
 
    PFS_FILTER_COMPLETION_CALLBACK  PostReleaseForModifiedPageWriter;
2263
 
} FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS;
2264
 
 
2265
 
typedef struct _READ_LIST {
2266
 
    PFILE_OBJECT          FileObject;
2267
 
    ULONG                 NumberOfEntries;
2268
 
    LOGICAL               IsImage;
2269
 
    FILE_SEGMENT_ELEMENT  List[ANYSIZE_ARRAY];
2270
 
} READ_LIST, *PREAD_LIST;
2271
 
 
2272
 
#endif
2273
 
 
2274
 
typedef NTSTATUS
2275
 
(NTAPI * PRTL_HEAP_COMMIT_ROUTINE) (
2276
 
    IN PVOID  Base,
2277
 
    IN OUT PVOID  *CommitAddress,
2278
 
    IN OUT PSIZE_T  CommitSize
2279
 
);
2280
 
 
2281
 
typedef struct _RTL_HEAP_PARAMETERS {
2282
 
    ULONG                     Length;
2283
 
    SIZE_T                    SegmentReserve;
2284
 
    SIZE_T                    SegmentCommit;
2285
 
    SIZE_T                    DeCommitFreeBlockThreshold;
2286
 
    SIZE_T                    DeCommitTotalFreeThreshold;
2287
 
    SIZE_T                    MaximumAllocationSize;
2288
 
    SIZE_T                    VirtualMemoryThreshold;
2289
 
    SIZE_T                    InitialCommit;
2290
 
    SIZE_T                    InitialReserve;
2291
 
    PRTL_HEAP_COMMIT_ROUTINE  CommitRoutine;
2292
 
    SIZE_T                    Reserved[2];
2293
 
} RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
2294
 
 
2295
 
NTKERNELAPI
2296
 
BOOLEAN
2297
 
NTAPI
2298
 
CcCanIWrite (
2299
 
    IN PFILE_OBJECT FileObject,
2300
 
    IN ULONG        BytesToWrite,
2301
 
    IN BOOLEAN      Wait,
2302
 
    IN BOOLEAN      Retrying
2303
 
);
2304
 
 
2305
 
NTKERNELAPI
2306
 
BOOLEAN
2307
 
NTAPI
2308
 
CcCopyRead (
2309
 
    IN PFILE_OBJECT         FileObject,
2310
 
    IN PLARGE_INTEGER       FileOffset,
2311
 
    IN ULONG                Length,
2312
 
    IN BOOLEAN              Wait,
2313
 
    OUT PVOID               Buffer,
2314
 
    OUT PIO_STATUS_BLOCK    IoStatus
2315
 
);
2316
 
 
2317
 
NTKERNELAPI
2318
 
BOOLEAN
2319
 
NTAPI
2320
 
CcCopyWrite (
2321
 
    IN PFILE_OBJECT     FileObject,
2322
 
    IN PLARGE_INTEGER   FileOffset,
2323
 
    IN ULONG            Length,
2324
 
    IN BOOLEAN          Wait,
2325
 
    IN PVOID            Buffer
2326
 
);
2327
 
 
2328
 
#define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
2329
 
 
2330
 
typedef VOID (NTAPI *PCC_POST_DEFERRED_WRITE) (
2331
 
    IN PVOID Context1,
2332
 
    IN PVOID Context2
2333
 
);
2334
 
 
2335
 
NTKERNELAPI
2336
 
VOID
2337
 
NTAPI
2338
 
CcDeferWrite (
2339
 
    IN PFILE_OBJECT             FileObject,
2340
 
    IN PCC_POST_DEFERRED_WRITE  PostRoutine,
2341
 
    IN PVOID                    Context1,
2342
 
    IN PVOID                    Context2,
2343
 
    IN ULONG                    BytesToWrite,
2344
 
    IN BOOLEAN                  Retrying
2345
 
);
2346
 
 
2347
 
NTKERNELAPI
2348
 
VOID
2349
 
NTAPI
2350
 
CcFastCopyRead (
2351
 
    IN PFILE_OBJECT         FileObject,
2352
 
    IN ULONG                FileOffset,
2353
 
    IN ULONG                Length,
2354
 
    IN ULONG                PageCount,
2355
 
    OUT PVOID               Buffer,
2356
 
    OUT PIO_STATUS_BLOCK    IoStatus
2357
 
);
2358
 
 
2359
 
NTKERNELAPI
2360
 
VOID
2361
 
NTAPI
2362
 
CcFastCopyWrite (
2363
 
    IN PFILE_OBJECT FileObject,
2364
 
    IN ULONG        FileOffset,
2365
 
    IN ULONG        Length,
2366
 
    IN PVOID        Buffer
2367
 
);
2368
 
 
2369
 
NTKERNELAPI
2370
 
VOID
2371
 
NTAPI
2372
 
CcFlushCache (
2373
 
    IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
2374
 
    IN PLARGE_INTEGER           FileOffset OPTIONAL,
2375
 
    IN ULONG                    Length,
2376
 
    OUT PIO_STATUS_BLOCK        IoStatus OPTIONAL
2377
 
);
2378
 
 
2379
 
typedef VOID (NTAPI *PDIRTY_PAGE_ROUTINE) (
2380
 
    IN PFILE_OBJECT     FileObject,
2381
 
    IN PLARGE_INTEGER   FileOffset,
2382
 
    IN ULONG            Length,
2383
 
    IN PLARGE_INTEGER   OldestLsn,
2384
 
    IN PLARGE_INTEGER   NewestLsn,
2385
 
    IN PVOID            Context1,
2386
 
    IN PVOID            Context2
2387
 
);
2388
 
 
2389
 
NTKERNELAPI
2390
 
LARGE_INTEGER
2391
 
NTAPI
2392
 
CcGetDirtyPages (
2393
 
    IN PVOID                LogHandle,
2394
 
    IN PDIRTY_PAGE_ROUTINE  DirtyPageRoutine,
2395
 
    IN PVOID                Context1,
2396
 
    IN PVOID                Context2
2397
 
);
2398
 
 
2399
 
NTKERNELAPI
2400
 
PFILE_OBJECT
2401
 
NTAPI
2402
 
CcGetFileObjectFromBcb (
2403
 
    IN PVOID Bcb
2404
 
);
2405
 
 
2406
 
NTKERNELAPI
2407
 
PFILE_OBJECT
2408
 
NTAPI
2409
 
CcGetFileObjectFromSectionPtrs (
2410
 
    IN PSECTION_OBJECT_POINTERS SectionObjectPointer
2411
 
);
2412
 
 
2413
 
#define CcGetFileSizePointer(FO) (                                     \
2414
 
    ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
2415
 
)
2416
 
 
2417
 
#if (VER_PRODUCTBUILD >= 2195)
2418
 
 
2419
 
NTKERNELAPI
2420
 
LARGE_INTEGER
2421
 
NTAPI
2422
 
CcGetFlushedValidData (
2423
 
    IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
2424
 
    IN BOOLEAN                  BcbListHeld
2425
 
);
2426
 
 
2427
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
2428
 
 
2429
9374
NTKERNELAPI
2430
9375
LARGE_INTEGER
2431
9376
NTAPI
2434
9379
    OUT PLARGE_INTEGER  OldestLsn OPTIONAL
2435
9380
);
2436
9381
 
2437
 
typedef BOOLEAN (NTAPI *PACQUIRE_FOR_LAZY_WRITE) (
2438
 
    IN PVOID    Context,
2439
 
    IN BOOLEAN  Wait
2440
 
);
2441
 
 
2442
 
typedef VOID (NTAPI *PRELEASE_FROM_LAZY_WRITE) (
2443
 
    IN PVOID Context
2444
 
);
2445
 
 
2446
 
typedef BOOLEAN (NTAPI *PACQUIRE_FOR_READ_AHEAD) (
2447
 
    IN PVOID    Context,
2448
 
    IN BOOLEAN  Wait
2449
 
);
2450
 
 
2451
 
typedef VOID (NTAPI *PRELEASE_FROM_READ_AHEAD) (
2452
 
    IN PVOID Context
2453
 
);
2454
 
 
2455
 
typedef struct _CACHE_MANAGER_CALLBACKS {
2456
 
    PACQUIRE_FOR_LAZY_WRITE     AcquireForLazyWrite;
2457
 
    PRELEASE_FROM_LAZY_WRITE    ReleaseFromLazyWrite;
2458
 
    PACQUIRE_FOR_READ_AHEAD     AcquireForReadAhead;
2459
 
    PRELEASE_FROM_READ_AHEAD    ReleaseFromReadAhead;
2460
 
} CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
2461
 
 
2462
 
NTKERNELAPI
2463
 
VOID
2464
 
NTAPI
2465
 
CcInitializeCacheMap (
2466
 
    IN PFILE_OBJECT             FileObject,
2467
 
    IN PCC_FILE_SIZES           FileSizes,
2468
 
    IN BOOLEAN                  PinAccess,
2469
 
    IN PCACHE_MANAGER_CALLBACKS Callbacks,
2470
 
    IN PVOID                    LazyWriteContext
2471
 
);
2472
 
 
2473
 
#define CcIsFileCached(FO) (                                                         \
2474
 
    ((FO)->SectionObjectPointer != NULL) &&                                          \
2475
 
    (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
2476
 
)
2477
 
 
2478
 
extern ULONG CcFastMdlReadWait;
2479
 
 
2480
 
NTKERNELAPI
2481
 
BOOLEAN
2482
 
NTAPI
2483
 
CcIsThereDirtyData (
2484
 
    IN PVPB Vpb
2485
 
);
2486
 
 
2487
 
NTKERNELAPI
2488
 
BOOLEAN
2489
 
NTAPI
2490
 
CcMapData (
2491
 
    IN PFILE_OBJECT     FileObject,
2492
 
    IN PLARGE_INTEGER   FileOffset,
2493
 
    IN ULONG            Length,
2494
 
    IN ULONG            Flags,
2495
 
    OUT PVOID           *Bcb,
2496
 
    OUT PVOID           *Buffer
2497
 
);
2498
 
 
2499
 
NTKERNELAPI
2500
 
VOID
2501
 
NTAPI
2502
 
CcMdlRead (
2503
 
    IN PFILE_OBJECT         FileObject,
2504
 
    IN PLARGE_INTEGER       FileOffset,
2505
 
    IN ULONG                Length,
2506
 
    OUT PMDL                *MdlChain,
2507
 
    OUT PIO_STATUS_BLOCK    IoStatus
2508
 
);
2509
 
 
2510
 
NTKERNELAPI
2511
 
VOID
2512
 
NTAPI
2513
 
CcMdlReadComplete (
2514
 
    IN PFILE_OBJECT FileObject,
2515
 
    IN PMDL         MdlChain
2516
 
);
2517
 
 
2518
 
NTKERNELAPI
2519
 
VOID
2520
 
NTAPI
2521
 
CcMdlWriteComplete (
2522
 
    IN PFILE_OBJECT     FileObject,
2523
 
    IN PLARGE_INTEGER   FileOffset,
2524
 
    IN PMDL             MdlChain
2525
 
);
2526
 
 
2527
 
#define MAP_WAIT        1
2528
 
 
2529
 
NTKERNELAPI
2530
 
BOOLEAN
2531
 
NTAPI
2532
 
CcPinMappedData (
2533
 
    IN PFILE_OBJECT     FileObject,
2534
 
    IN PLARGE_INTEGER   FileOffset,
2535
 
    IN ULONG            Length,
2536
 
    IN ULONG            Flags,
2537
 
    IN OUT PVOID        *Bcb
2538
 
);
2539
 
 
2540
 
NTKERNELAPI
2541
 
BOOLEAN
2542
 
NTAPI
2543
 
CcPinRead (
2544
 
    IN PFILE_OBJECT     FileObject,
2545
 
    IN PLARGE_INTEGER   FileOffset,
2546
 
    IN ULONG            Length,
2547
 
    IN ULONG            Flags,
2548
 
    OUT PVOID           *Bcb,
2549
 
    OUT PVOID           *Buffer
2550
 
);
2551
 
 
2552
 
NTKERNELAPI
2553
 
VOID
2554
 
NTAPI
2555
 
CcPrepareMdlWrite (
2556
 
    IN PFILE_OBJECT         FileObject,
2557
 
    IN PLARGE_INTEGER       FileOffset,
2558
 
    IN ULONG                Length,
2559
 
    OUT PMDL                *MdlChain,
2560
 
    OUT PIO_STATUS_BLOCK    IoStatus
2561
 
);
2562
 
 
2563
 
NTKERNELAPI
2564
 
BOOLEAN
2565
 
NTAPI
2566
 
CcPreparePinWrite (
2567
 
    IN PFILE_OBJECT     FileObject,
2568
 
    IN PLARGE_INTEGER   FileOffset,
2569
 
    IN ULONG            Length,
2570
 
    IN BOOLEAN          Zero,
2571
 
    IN ULONG            Flags,
2572
 
    OUT PVOID           *Bcb,
2573
 
    OUT PVOID           *Buffer
2574
 
);
2575
 
 
2576
 
NTKERNELAPI
2577
 
BOOLEAN
2578
 
NTAPI
2579
 
CcPurgeCacheSection (
2580
 
    IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
2581
 
    IN PLARGE_INTEGER           FileOffset OPTIONAL,
2582
 
    IN ULONG                    Length,
2583
 
    IN BOOLEAN                  UninitializeCacheMaps
2584
 
);
2585
 
 
2586
 
#define CcReadAhead(FO, FOFF, LEN) (                \
2587
 
    if ((LEN) >= 256) {                             \
2588
 
        CcScheduleReadAhead((FO), (FOFF), (LEN));   \
2589
 
    }                                               \
2590
 
)
2591
 
 
2592
 
#if (VER_PRODUCTBUILD >= 2195)
2593
 
 
2594
 
NTKERNELAPI
2595
 
PVOID
2596
 
NTAPI
2597
 
CcRemapBcb (
2598
 
    IN PVOID Bcb
2599
 
);
2600
 
 
2601
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
2602
 
 
2603
 
NTKERNELAPI
2604
 
VOID
2605
 
NTAPI
2606
 
CcRepinBcb (
2607
 
    IN PVOID Bcb
2608
 
);
2609
 
 
2610
 
NTKERNELAPI
2611
 
VOID
2612
 
NTAPI
2613
 
CcScheduleReadAhead (
2614
 
    IN PFILE_OBJECT     FileObject,
2615
 
    IN PLARGE_INTEGER   FileOffset,
2616
 
    IN ULONG            Length
2617
 
);
2618
 
 
2619
 
NTKERNELAPI
2620
 
VOID
2621
 
NTAPI
2622
 
CcSetAdditionalCacheAttributes (
2623
 
    IN PFILE_OBJECT FileObject,
2624
 
    IN BOOLEAN      DisableReadAhead,
2625
 
    IN BOOLEAN      DisableWriteBehind
2626
 
);
2627
 
 
2628
 
NTKERNELAPI
2629
 
VOID
2630
 
NTAPI
2631
 
CcSetBcbOwnerPointer (
2632
 
    IN PVOID Bcb,
2633
 
    IN PVOID OwnerPointer
2634
 
);
2635
 
 
2636
 
NTKERNELAPI
2637
 
VOID
2638
 
NTAPI
2639
 
CcSetDirtyPageThreshold (
2640
 
    IN PFILE_OBJECT FileObject,
2641
 
    IN ULONG        DirtyPageThreshold
2642
 
);
2643
 
 
2644
 
NTKERNELAPI
2645
 
VOID
2646
 
NTAPI
2647
 
CcSetDirtyPinnedData (
2648
 
    IN PVOID            BcbVoid,
2649
 
    IN PLARGE_INTEGER   Lsn OPTIONAL
2650
 
);
2651
 
 
2652
 
NTKERNELAPI
2653
 
VOID
2654
 
NTAPI
2655
 
CcSetFileSizes (
2656
 
    IN PFILE_OBJECT     FileObject,
2657
 
    IN PCC_FILE_SIZES   FileSizes
2658
 
);
2659
 
 
2660
 
typedef VOID (NTAPI *PFLUSH_TO_LSN) (
2661
 
    IN PVOID            LogHandle,
2662
 
    IN LARGE_INTEGER    Lsn
2663
 
);
2664
 
 
2665
 
NTKERNELAPI
2666
 
VOID
2667
 
NTAPI
2668
 
CcSetLogHandleForFile (
2669
 
    IN PFILE_OBJECT     FileObject,
2670
 
    IN PVOID            LogHandle,
2671
 
    IN PFLUSH_TO_LSN    FlushToLsnRoutine
2672
 
);
2673
 
 
2674
 
NTKERNELAPI
2675
 
VOID
2676
 
NTAPI
2677
 
CcSetReadAheadGranularity (
2678
 
    IN PFILE_OBJECT FileObject,
2679
 
    IN ULONG        Granularity     /* default: PAGE_SIZE */
2680
 
                                    /* allowed: 2^n * PAGE_SIZE */
2681
 
);
2682
 
 
2683
 
NTKERNELAPI
2684
 
BOOLEAN
2685
 
NTAPI
2686
 
CcUninitializeCacheMap (
2687
 
    IN PFILE_OBJECT                 FileObject,
2688
 
    IN PLARGE_INTEGER               TruncateSize OPTIONAL,
2689
 
    IN PCACHE_UNINITIALIZE_EVENT    UninitializeCompleteEvent OPTIONAL
2690
 
);
2691
 
 
2692
 
NTKERNELAPI
2693
 
VOID
2694
 
NTAPI
2695
 
CcUnpinData (
2696
 
    IN PVOID Bcb
2697
 
);
2698
 
 
2699
 
NTKERNELAPI
2700
 
VOID
2701
 
NTAPI
2702
 
CcUnpinDataForThread (
2703
 
    IN PVOID            Bcb,
2704
 
    IN ERESOURCE_THREAD ResourceThreadId
2705
 
);
2706
 
 
2707
 
NTKERNELAPI
2708
 
VOID
2709
 
NTAPI
2710
 
CcUnpinRepinnedBcb (
2711
 
    IN PVOID                Bcb,
2712
 
    IN BOOLEAN              WriteThrough,
2713
 
    OUT PIO_STATUS_BLOCK    IoStatus
2714
 
);
2715
 
 
2716
 
#if (VER_PRODUCTBUILD >= 2195)
2717
 
 
2718
 
NTKERNELAPI
2719
 
NTSTATUS
2720
 
NTAPI
2721
 
CcWaitForCurrentLazyWriterActivity (
2722
 
    VOID
2723
 
);
2724
 
 
2725
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
2726
 
 
2727
 
NTKERNELAPI
2728
 
BOOLEAN
2729
 
NTAPI
2730
 
CcZeroData (
2731
 
    IN PFILE_OBJECT     FileObject,
2732
 
    IN PLARGE_INTEGER   StartOffset,
2733
 
    IN PLARGE_INTEGER   EndOffset,
2734
 
    IN BOOLEAN          Wait
2735
 
);
2736
 
 
2737
 
NTKERNELAPI
2738
 
VOID
2739
 
NTAPI
2740
 
ExDisableResourceBoostLite (
2741
 
    IN PERESOURCE  Resource
2742
 
);
2743
 
 
2744
 
NTKERNELAPI
2745
 
SIZE_T
2746
 
NTAPI
2747
 
ExQueryPoolBlockSize (
2748
 
    IN PVOID      PoolBlock,
2749
 
    OUT PBOOLEAN  QuotaCharged
2750
 
);
2751
 
 
2752
 
#if (VER_PRODUCTBUILD >= 2600)
2753
 
 
2754
 
#ifndef __NTOSKRNL__
2755
 
NTKERNELAPI
2756
 
VOID
2757
 
FASTCALL
2758
 
ExInitializeRundownProtection (
2759
 
    IN PEX_RUNDOWN_REF  RunRef
2760
 
);
2761
 
 
2762
 
NTKERNELAPI
2763
 
VOID
2764
 
FASTCALL
2765
 
ExReInitializeRundownProtection (
2766
 
    IN PEX_RUNDOWN_REF  RunRef
2767
 
);
2768
 
 
2769
 
NTKERNELAPI
2770
 
BOOLEAN
2771
 
FASTCALL
2772
 
ExAcquireRundownProtection (
2773
 
    IN PEX_RUNDOWN_REF  RunRef
2774
 
);
2775
 
 
2776
 
NTKERNELAPI
2777
 
BOOLEAN
2778
 
FASTCALL
2779
 
ExAcquireRundownProtectionEx (
2780
 
    IN PEX_RUNDOWN_REF  RunRef,
2781
 
    IN ULONG            Count
2782
 
);
2783
 
 
2784
 
NTKERNELAPI
2785
 
VOID
2786
 
FASTCALL
2787
 
ExReleaseRundownProtection (
2788
 
    IN PEX_RUNDOWN_REF  RunRef
2789
 
);
2790
 
 
2791
 
NTKERNELAPI
2792
 
VOID
2793
 
FASTCALL
2794
 
ExReleaseRundownProtectionEx (
2795
 
    IN PEX_RUNDOWN_REF  RunRef,
2796
 
    IN ULONG            Count
2797
 
);
2798
 
 
2799
 
NTKERNELAPI
2800
 
VOID
2801
 
FASTCALL
2802
 
ExRundownCompleted (
2803
 
    IN PEX_RUNDOWN_REF  RunRef
2804
 
);
2805
 
 
2806
 
NTKERNELAPI
2807
 
VOID
2808
 
FASTCALL
2809
 
ExWaitForRundownProtectionRelease (
2810
 
    IN PEX_RUNDOWN_REF  RunRef
2811
 
);
2812
 
 
2813
 
#endif
2814
 
#endif /* (VER_PRODUCTBUILD >= 2600) */
2815
 
 
2816
 
 
2817
 
#define FsRtlSetupAdvancedHeader( _advhdr, _fmutx )                         \
2818
 
{                                                                           \
2819
 
    SetFlag( (_advhdr)->Flags, FSRTL_FLAG_ADVANCED_HEADER );                \
2820
 
    SetFlag( (_advhdr)->Flags2, FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS );     \
2821
 
    (_advhdr)->Version = FSRTL_FCB_HEADER_V1;                               \
2822
 
    InitializeListHead( &(_advhdr)->FilterContexts );                       \
2823
 
    if ((_fmutx) != NULL) {                                                 \
2824
 
        (_advhdr)->FastMutex = (_fmutx);                                    \
2825
 
    }                                                                       \
2826
 
    *((PULONG_PTR)(&(_advhdr)->PushLock)) = 0;                              \
2827
 
    /*ExInitializePushLock( &(_advhdr)->PushLock ); API Not avaliable downlevel*/\
2828
 
    (_advhdr)->FileContextSupportPointer = NULL;                            \
2829
 
}
2830
 
 
2831
 
NTKERNELAPI
2832
 
BOOLEAN
2833
 
NTAPI
2834
 
FsRtlAddBaseMcbEntry (
2835
 
    IN PBASE_MCB  Mcb,
2836
 
    IN LONGLONG   Vbn,
2837
 
    IN LONGLONG   Lbn,
2838
 
    IN LONGLONG   SectorCount
2839
 
);
2840
 
 
2841
 
NTKERNELAPI
2842
 
BOOLEAN
2843
 
NTAPI
2844
 
FsRtlAddLargeMcbEntry (
2845
 
    IN PLARGE_MCB  Mcb,
2846
 
    IN LONGLONG    Vbn,
2847
 
    IN LONGLONG    Lbn,
2848
 
    IN LONGLONG    SectorCount
2849
 
);
2850
 
 
2851
 
NTKERNELAPI
2852
 
BOOLEAN
2853
 
NTAPI
2854
 
FsRtlAddMcbEntry (
2855
 
    IN PMCB   Mcb,
2856
 
    IN VBN    Vbn,
2857
 
    IN LBN    Lbn,
2858
 
    IN ULONG  SectorCount
2859
 
);
2860
 
 
2861
 
NTKERNELAPI
2862
 
VOID
2863
 
NTAPI
2864
 
FsRtlAddToTunnelCache (
2865
 
    IN PTUNNEL          Cache,
2866
 
    IN ULONGLONG        DirectoryKey,
2867
 
    IN PUNICODE_STRING  ShortName,
2868
 
    IN PUNICODE_STRING  LongName,
2869
 
    IN BOOLEAN          KeyByShortName,
2870
 
    IN ULONG            DataLength,
2871
 
    IN PVOID            Data
2872
 
);
2873
 
 
2874
 
#if (VER_PRODUCTBUILD >= 2195)
2875
 
 
2876
 
PFILE_LOCK
2877
 
NTAPI
2878
 
FsRtlAllocateFileLock (
2879
 
    IN PCOMPLETE_LOCK_IRP_ROUTINE   CompleteLockIrpRoutine OPTIONAL,
2880
 
    IN PUNLOCK_ROUTINE              UnlockRoutine OPTIONAL
2881
 
);
2882
 
 
2883
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
2884
 
 
2885
9382
NTKERNELAPI
2886
9383
PVOID
2887
9384
NTAPI
2919
9416
NTKERNELAPI
2920
9417
BOOLEAN
2921
9418
NTAPI
2922
 
FsRtlAreNamesEqual (
2923
 
    IN PCUNICODE_STRING  Name1,
2924
 
    IN PCUNICODE_STRING  Name2,
2925
 
    IN BOOLEAN           IgnoreCase,
2926
 
    IN PCWCH             UpcaseTable OPTIONAL
2927
 
);
2928
 
 
2929
 
#define FsRtlAreThereCurrentFileLocks(FL) ( \
2930
 
    ((FL)->FastIoIsQuestionable)            \
2931
 
)
2932
 
 
2933
 
/*
2934
 
  FsRtlCheckLockForReadAccess:
2935
 
 
2936
 
  All this really does is pick out the lock parameters from the irp (io stack
2937
 
  location?), get IoGetRequestorProcess, and pass values on to
2938
 
  FsRtlFastCheckLockForRead.
2939
 
*/
2940
 
NTKERNELAPI
2941
 
BOOLEAN
2942
 
NTAPI
2943
 
FsRtlCheckLockForReadAccess (
2944
 
    IN PFILE_LOCK   FileLock,
2945
 
    IN PIRP         Irp
2946
 
);
2947
 
 
2948
 
/*
2949
 
  FsRtlCheckLockForWriteAccess:
2950
 
 
2951
 
  All this really does is pick out the lock parameters from the irp (io stack
2952
 
  location?), get IoGetRequestorProcess, and pass values on to
2953
 
  FsRtlFastCheckLockForWrite.
2954
 
*/
2955
 
NTKERNELAPI
2956
 
BOOLEAN
2957
 
NTAPI
2958
 
FsRtlCheckLockForWriteAccess (
2959
 
    IN PFILE_LOCK   FileLock,
2960
 
    IN PIRP         Irp
2961
 
);
2962
 
 
2963
 
typedef
2964
 
VOID
2965
 
(NTAPI*POPLOCK_WAIT_COMPLETE_ROUTINE) (
2966
 
    IN PVOID    Context,
2967
 
    IN PIRP     Irp
2968
 
);
2969
 
 
2970
 
typedef
2971
 
VOID
2972
 
(NTAPI*POPLOCK_FS_PREPOST_IRP) (
2973
 
    IN PVOID    Context,
2974
 
    IN PIRP     Irp
2975
 
);
2976
 
 
2977
 
NTKERNELAPI
2978
 
NTSTATUS
2979
 
NTAPI
2980
 
FsRtlCheckOplock (
2981
 
    IN POPLOCK                          Oplock,
2982
 
    IN PIRP                             Irp,
2983
 
    IN PVOID                            Context,
2984
 
    IN POPLOCK_WAIT_COMPLETE_ROUTINE    CompletionRoutine OPTIONAL,
2985
 
    IN POPLOCK_FS_PREPOST_IRP           PostIrpRoutine OPTIONAL
2986
 
);
2987
 
 
2988
 
NTKERNELAPI
2989
 
BOOLEAN
2990
 
NTAPI
2991
 
FsRtlCopyRead (
2992
 
    IN PFILE_OBJECT         FileObject,
2993
 
    IN PLARGE_INTEGER       FileOffset,
2994
 
    IN ULONG                Length,
2995
 
    IN BOOLEAN              Wait,
2996
 
    IN ULONG                LockKey,
2997
 
    OUT PVOID               Buffer,
2998
 
    OUT PIO_STATUS_BLOCK    IoStatus,
2999
 
    IN PDEVICE_OBJECT       DeviceObject
3000
 
);
3001
 
 
3002
 
NTKERNELAPI
3003
 
BOOLEAN
3004
 
NTAPI
3005
 
FsRtlCopyWrite (
3006
 
    IN PFILE_OBJECT         FileObject,
3007
 
    IN PLARGE_INTEGER       FileOffset,
3008
 
    IN ULONG                Length,
3009
 
    IN BOOLEAN              Wait,
3010
 
    IN ULONG                LockKey,
3011
 
    IN PVOID                Buffer,
3012
 
    OUT PIO_STATUS_BLOCK    IoStatus,
3013
 
    IN PDEVICE_OBJECT       DeviceObject
3014
 
);
3015
 
 
3016
 
#define HEAP_NO_SERIALIZE               0x00000001
3017
 
#define HEAP_GROWABLE                   0x00000002
3018
 
#define HEAP_GENERATE_EXCEPTIONS        0x00000004
3019
 
#define HEAP_ZERO_MEMORY                0x00000008
3020
 
#define HEAP_REALLOC_IN_PLACE_ONLY      0x00000010
3021
 
#define HEAP_TAIL_CHECKING_ENABLED      0x00000020
3022
 
#define HEAP_FREE_CHECKING_ENABLED      0x00000040
3023
 
#define HEAP_DISABLE_COALESCE_ON_FREE   0x00000080
3024
 
 
3025
 
#define HEAP_CREATE_ALIGN_16            0x00010000
3026
 
#define HEAP_CREATE_ENABLE_TRACING      0x00020000
3027
 
#define HEAP_CREATE_ENABLE_EXECUTE      0x00040000
3028
 
 
3029
 
NTSYSAPI
3030
 
PVOID
3031
 
NTAPI
3032
 
RtlCreateHeap (
3033
 
    IN ULONG                Flags,
3034
 
    IN PVOID                HeapBase OPTIONAL,
3035
 
    IN SIZE_T               ReserveSize OPTIONAL,
3036
 
    IN SIZE_T               CommitSize OPTIONAL,
3037
 
    IN PVOID                Lock OPTIONAL,
3038
 
    IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
3039
 
);
3040
 
 
3041
 
NTKERNELAPI
3042
 
BOOLEAN
3043
 
NTAPI
3044
 
FsRtlCurrentBatchOplock (
3045
 
    IN POPLOCK Oplock
3046
 
);
3047
 
 
3048
 
NTKERNELAPI
3049
 
VOID
3050
 
NTAPI
3051
 
FsRtlDeleteKeyFromTunnelCache (
3052
 
    IN PTUNNEL      Cache,
3053
 
    IN ULONGLONG    DirectoryKey
3054
 
);
3055
 
 
3056
 
NTKERNELAPI
3057
 
VOID
3058
 
NTAPI
3059
 
FsRtlDeleteTunnelCache (
3060
 
    IN PTUNNEL Cache
3061
 
);
3062
 
 
3063
 
NTKERNELAPI
3064
 
VOID
3065
 
NTAPI
3066
 
FsRtlDeregisterUncProvider (
3067
 
    IN HANDLE Handle
3068
 
);
3069
 
 
3070
 
NTSYSAPI
3071
 
PVOID
3072
 
NTAPI
3073
 
RtlDestroyHeap(
3074
 
    IN PVOID HeapHandle
3075
 
);
3076
 
 
3077
 
NTKERNELAPI
3078
 
VOID
3079
 
NTAPI
3080
 
FsRtlDissectDbcs (
3081
 
    IN ANSI_STRING    Name,
3082
 
    OUT PANSI_STRING  FirstPart,
3083
 
    OUT PANSI_STRING  RemainingPart
3084
 
);
3085
 
 
3086
 
NTKERNELAPI
3087
 
VOID
3088
 
NTAPI
3089
 
FsRtlDissectName (
3090
 
    IN UNICODE_STRING    Name,
3091
 
    OUT PUNICODE_STRING  FirstPart,
3092
 
    OUT PUNICODE_STRING  RemainingPart
3093
 
);
3094
 
 
3095
 
NTKERNELAPI
3096
 
BOOLEAN
3097
 
NTAPI
3098
 
FsRtlDoesDbcsContainWildCards (
3099
 
    IN PANSI_STRING Name
3100
 
);
3101
 
 
3102
 
NTKERNELAPI
3103
 
BOOLEAN
3104
 
NTAPI
3105
 
FsRtlDoesNameContainWildCards (
3106
 
    IN PUNICODE_STRING Name
3107
 
);
3108
 
 
3109
 
NTKERNELAPI
3110
 
BOOLEAN
3111
 
NTAPI
3112
 
FsRtlIsFatDbcsLegal (
3113
 
    IN ANSI_STRING DbcsName,
3114
 
    IN BOOLEAN WildCardsPermissible,
3115
 
    IN BOOLEAN PathNamePermissible,
3116
 
    IN BOOLEAN LeadingBackslashPermissible
3117
 
    );
3118
 
 
3119
 
 
3120
 
#define FsRtlCompleteRequest(IRP,STATUS) {         \
3121
 
    (IRP)->IoStatus.Status = (STATUS);             \
3122
 
    IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
3123
 
}
3124
 
 
3125
 
#define FsRtlEnterFileSystem    KeEnterCriticalRegion
3126
 
 
3127
 
#define FsRtlExitFileSystem     KeLeaveCriticalRegion
3128
 
 
3129
 
NTKERNELAPI
3130
 
BOOLEAN
3131
 
NTAPI
3132
 
FsRtlFastCheckLockForRead (
3133
 
    IN PFILE_LOCK           FileLock,
3134
 
    IN PLARGE_INTEGER       FileOffset,
3135
 
    IN PLARGE_INTEGER       Length,
3136
 
    IN ULONG                Key,
3137
 
    IN PFILE_OBJECT         FileObject,
3138
 
    IN PVOID                Process
3139
 
);
3140
 
 
3141
 
NTKERNELAPI
3142
 
BOOLEAN
3143
 
NTAPI
3144
 
FsRtlFastCheckLockForWrite (
3145
 
    IN PFILE_LOCK           FileLock,
3146
 
    IN PLARGE_INTEGER       FileOffset,
3147
 
    IN PLARGE_INTEGER       Length,
3148
 
    IN ULONG                Key,
3149
 
    IN PFILE_OBJECT         FileObject,
3150
 
    IN PVOID                Process
3151
 
);
3152
 
 
3153
 
#define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) (       \
3154
 
     FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11)   \
3155
 
)
3156
 
 
3157
 
NTKERNELAPI
3158
 
NTSTATUS
3159
 
NTAPI
3160
 
FsRtlFastUnlockAll (
3161
 
    IN PFILE_LOCK           FileLock,
3162
 
    IN PFILE_OBJECT         FileObject,
3163
 
    IN PEPROCESS            Process,
3164
 
    IN PVOID                Context OPTIONAL
3165
 
);
3166
 
/* ret: STATUS_RANGE_NOT_LOCKED */
3167
 
 
3168
 
NTKERNELAPI
3169
 
NTSTATUS
3170
 
NTAPI
3171
 
FsRtlFastUnlockAllByKey (
3172
 
    IN PFILE_LOCK           FileLock,
3173
 
    IN PFILE_OBJECT         FileObject,
3174
 
    IN PEPROCESS            Process,
3175
 
    IN ULONG                Key,
3176
 
    IN PVOID                Context OPTIONAL
3177
 
);
3178
 
/* ret: STATUS_RANGE_NOT_LOCKED */
3179
 
 
3180
 
NTKERNELAPI
3181
 
NTSTATUS
3182
 
NTAPI
3183
 
FsRtlFastUnlockSingle (
3184
 
    IN PFILE_LOCK           FileLock,
3185
 
    IN PFILE_OBJECT         FileObject,
3186
 
    IN PLARGE_INTEGER       FileOffset,
3187
 
    IN PLARGE_INTEGER       Length,
3188
 
    IN PEPROCESS            Process,
3189
 
    IN ULONG                Key,
3190
 
    IN PVOID                Context OPTIONAL,
3191
 
    IN BOOLEAN              AlreadySynchronized
3192
 
);
3193
 
/* ret:  STATUS_RANGE_NOT_LOCKED */
3194
 
 
3195
 
NTKERNELAPI
3196
 
BOOLEAN
3197
 
NTAPI
3198
 
FsRtlFindInTunnelCache (
3199
 
    IN PTUNNEL          Cache,
3200
 
    IN ULONGLONG        DirectoryKey,
3201
 
    IN PUNICODE_STRING  Name,
3202
 
    OUT PUNICODE_STRING ShortName,
3203
 
    OUT PUNICODE_STRING LongName,
3204
 
    IN OUT PULONG       DataLength,
3205
 
    OUT PVOID           Data
3206
 
);
3207
 
 
3208
 
#if (VER_PRODUCTBUILD >= 2195)
3209
 
 
3210
 
NTKERNELAPI
3211
 
VOID
3212
 
NTAPI
3213
 
FsRtlFreeFileLock (
3214
 
    IN PFILE_LOCK FileLock
3215
 
);
3216
 
 
3217
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
3218
 
 
3219
 
NTKERNELAPI
3220
 
NTSTATUS
3221
 
NTAPI
3222
 
FsRtlGetFileSize (
3223
 
    IN PFILE_OBJECT         FileObject,
3224
 
    IN OUT PLARGE_INTEGER   FileSize
3225
 
);
3226
 
 
3227
 
NTKERNELAPI
3228
 
BOOLEAN
3229
 
NTAPI
3230
 
FsRtlGetNextBaseMcbEntry (
3231
 
    IN PBASE_MCB   Mcb,
3232
 
    IN ULONG       RunIndex,
3233
 
    OUT PLONGLONG  Vbn,
3234
 
    OUT PLONGLONG  Lbn,
3235
 
    OUT PLONGLONG  SectorCount
3236
 
);
3237
 
 
3238
 
/*
3239
 
  FsRtlGetNextFileLock:
3240
 
 
3241
 
  ret: NULL if no more locks
3242
 
 
3243
 
  Internals:
3244
 
    FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
3245
 
    FileLock->LastReturnedLock as storage.
3246
 
    LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
3247
 
    list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
3248
 
    calls with Restart = FALSE.
3249
 
*/
3250
 
NTKERNELAPI
3251
 
PFILE_LOCK_INFO
3252
 
NTAPI
3253
 
FsRtlGetNextFileLock (
3254
 
    IN PFILE_LOCK   FileLock,
3255
 
    IN BOOLEAN      Restart
3256
 
);
3257
 
 
3258
 
NTKERNELAPI
3259
 
BOOLEAN
3260
 
NTAPI
3261
 
FsRtlGetNextLargeMcbEntry (
3262
 
    IN PLARGE_MCB  Mcb,
3263
 
    IN ULONG       RunIndex,
3264
 
    OUT PLONGLONG  Vbn,
3265
 
    OUT PLONGLONG  Lbn,
3266
 
    OUT PLONGLONG  SectorCount
3267
 
);
3268
 
 
3269
 
NTKERNELAPI
3270
 
BOOLEAN
3271
 
NTAPI
3272
 
FsRtlGetNextMcbEntry (
3273
 
    IN PMCB     Mcb,
3274
 
    IN ULONG    RunIndex,
3275
 
    OUT PVBN    Vbn,
3276
 
    OUT PLBN    Lbn,
3277
 
    OUT PULONG  SectorCount
3278
 
);
3279
 
 
3280
 
#define FsRtlGetPerStreamContextPointer(FO) (   \
3281
 
    (PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext \
3282
 
)
3283
 
 
3284
 
NTKERNELAPI
3285
 
VOID
3286
 
NTAPI
3287
 
FsRtlInitializeBaseMcb (
3288
 
    IN PBASE_MCB  Mcb,
3289
 
    IN POOL_TYPE  PoolType
3290
 
);
3291
 
 
3292
 
NTKERNELAPI
3293
 
VOID
3294
 
NTAPI
3295
 
FsRtlInitializeFileLock (
3296
 
    IN PFILE_LOCK                   FileLock,
3297
 
    IN PCOMPLETE_LOCK_IRP_ROUTINE   CompleteLockIrpRoutine OPTIONAL,
3298
 
    IN PUNLOCK_ROUTINE              UnlockRoutine OPTIONAL
3299
 
);
3300
 
 
3301
 
NTKERNELAPI
3302
 
VOID
3303
 
NTAPI
3304
 
FsRtlInitializeLargeMcb (
3305
 
    IN PLARGE_MCB  Mcb,
3306
 
    IN POOL_TYPE   PoolType
3307
 
);
3308
 
 
3309
 
NTKERNELAPI
3310
 
VOID
3311
 
NTAPI
3312
 
FsRtlInitializeMcb (
3313
 
    IN PMCB       Mcb,
3314
 
    IN POOL_TYPE  PoolType
3315
 
);
3316
 
 
3317
 
NTKERNELAPI
3318
 
VOID
3319
 
NTAPI
3320
 
FsRtlInitializeOplock (
3321
 
    IN OUT POPLOCK Oplock
3322
 
);
3323
 
 
3324
 
NTKERNELAPI
3325
 
VOID
3326
 
NTAPI
3327
 
FsRtlInitializeTunnelCache (
3328
 
    IN PTUNNEL Cache
3329
 
);
3330
 
 
3331
 
#define FsRtlInitPerStreamContext(PSC, O, I, FC) ( \
3332
 
    (PSC)->OwnerId = (O),                          \
3333
 
    (PSC)->InstanceId = (I),                       \
3334
 
    (PSC)->FreeCallback = (FC)                     \
3335
 
)
3336
 
 
3337
 
NTKERNELAPI
3338
 
NTSTATUS
3339
 
NTAPI
3340
 
FsRtlInsertPerStreamContext (
3341
 
    IN PFSRTL_ADVANCED_FCB_HEADER  PerStreamContext,
3342
 
    IN PFSRTL_PER_STREAM_CONTEXT   Ptr
3343
 
);
3344
 
 
3345
 
#define FsRtlIsAnsiCharacterLegalFat(C, WILD) (                                \
3346
 
    FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_FAT_LEGAL) |       \
3347
 
                                        ((WILD) ? FSRTL_WILD_CHARACTER : 0 ))  \
3348
 
)
3349
 
 
3350
 
#define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) (                               \
3351
 
    FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) |      \
3352
 
                                        ((WILD) ? FSRTL_WILD_CHARACTER : 0 ))  \
3353
 
)
3354
 
 
3355
 
#define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) (                               \
3356
 
    FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) |      \
3357
 
                                        ((WILD) ? FSRTL_WILD_CHARACTER : 0 ))  \
3358
 
)
3359
 
 
3360
 
#define FsRtlIsAnsiCharacterWild(C) (                                       \
3361
 
    FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \
3362
 
)
3363
 
 
3364
 
NTKERNELAPI
3365
 
BOOLEAN
3366
 
NTAPI
3367
 
FsRtlIsFatDbcsLegal (
3368
 
    IN ANSI_STRING  DbcsName,
3369
 
    IN BOOLEAN      WildCardsPermissible,
3370
 
    IN BOOLEAN      PathNamePermissible,
3371
 
    IN BOOLEAN      LeadingBackslashPermissible
3372
 
);
3373
 
 
3374
 
NTKERNELAPI
3375
 
BOOLEAN
3376
 
NTAPI
3377
 
FsRtlIsHpfsDbcsLegal (
3378
 
    IN ANSI_STRING  DbcsName,
3379
 
    IN BOOLEAN      WildCardsPermissible,
3380
 
    IN BOOLEAN      PathNamePermissible,
3381
 
    IN BOOLEAN      LeadingBackslashPermissible
3382
 
);
3383
 
 
3384
 
NTKERNELAPI
3385
 
BOOLEAN
3386
 
NTAPI
3387
 
FsRtlIsNameInExpression (
3388
 
    IN PUNICODE_STRING  Expression,
3389
 
    IN PUNICODE_STRING  Name,
3390
 
    IN BOOLEAN          IgnoreCase,
3391
 
    IN PWCHAR           UpcaseTable OPTIONAL
3392
 
);
3393
 
 
3394
 
NTKERNELAPI
3395
 
BOOLEAN
3396
 
NTAPI
3397
 
FsRtlIsNtstatusExpected (
3398
 
    IN NTSTATUS Ntstatus
3399
 
);
3400
 
 
3401
 
#define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
3402
 
 
3403
 
extern PUSHORT NlsOemLeadByteInfo;
3404
 
 
3405
 
#define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) (                               \
3406
 
    (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE :                           \
3407
 
              (NLS_MB_CODE_PAGE_TAG &&                                      \
3408
 
               (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0)))          \
3409
 
)
3410
 
 
3411
 
#define FsRtlIsUnicodeCharacterWild(C) (                                    \
3412
 
    (((C) >= 0x40) ?                                                        \
3413
 
    FALSE :                                                                 \
3414
 
    FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER ))       \
3415
 
)
3416
 
 
3417
 
NTKERNELAPI
3418
 
BOOLEAN
3419
 
NTAPI
3420
 
FsRtlLookupBaseMcbEntry (
3421
 
    IN PBASE_MCB   Mcb,
3422
 
    IN LONGLONG    Vbn,
3423
 
    OUT PLONGLONG  Lbn OPTIONAL,
3424
 
    OUT PLONGLONG  SectorCountFromLbn OPTIONAL,
3425
 
    OUT PLONGLONG  StartingLbn OPTIONAL,
3426
 
    OUT PLONGLONG  SectorCountFromStartingLbn OPTIONAL,
3427
 
    OUT PULONG     Index OPTIONAL
3428
 
);
3429
 
 
3430
 
NTKERNELAPI
3431
 
BOOLEAN
3432
 
NTAPI
3433
 
FsRtlLookupLargeMcbEntry (
3434
 
    IN PLARGE_MCB  Mcb,
3435
 
    IN LONGLONG    Vbn,
3436
 
    OUT PLONGLONG  Lbn OPTIONAL,
3437
 
    OUT PLONGLONG  SectorCountFromLbn OPTIONAL,
3438
 
    OUT PLONGLONG  StartingLbn OPTIONAL,
3439
 
    OUT PLONGLONG  SectorCountFromStartingLbn OPTIONAL,
3440
 
    OUT PULONG     Index OPTIONAL
3441
 
);
3442
 
 
3443
 
NTKERNELAPI
3444
 
BOOLEAN
3445
 
NTAPI
3446
 
FsRtlLookupLastBaseMcbEntry (
3447
 
    IN PBASE_MCB   Mcb,
3448
 
    OUT PLONGLONG  Vbn,
3449
 
    OUT PLONGLONG  Lbn
3450
 
);
3451
 
 
3452
 
NTKERNELAPI
3453
 
BOOLEAN
3454
 
NTAPI
3455
 
FsRtlLookupLastLargeMcbEntry (
3456
 
    IN PLARGE_MCB  Mcb,
3457
 
    OUT PLONGLONG  Vbn,
3458
 
    OUT PLONGLONG  Lbn
3459
 
);
3460
 
 
3461
 
NTKERNELAPI
3462
 
BOOLEAN
3463
 
NTAPI
3464
 
FsRtlLookupLastMcbEntry (
3465
 
    IN PMCB   Mcb,
3466
 
    OUT PVBN  Vbn,
3467
 
    OUT PLBN  Lbn
3468
 
);
3469
 
 
3470
 
NTKERNELAPI
3471
 
BOOLEAN
3472
 
NTAPI
3473
 
FsRtlLookupLastBaseMcbEntryAndIndex (
3474
 
    IN PBASE_MCB      OpaqueMcb,
3475
 
    IN OUT PLONGLONG  LargeVbn,
3476
 
    IN OUT PLONGLONG  LargeLbn,
3477
 
    IN OUT PULONG     Index
3478
 
);
3479
 
 
3480
 
NTKERNELAPI
3481
 
BOOLEAN
3482
 
NTAPI
3483
 
FsRtlLookupLastLargeMcbEntryAndIndex (
3484
 
    IN PLARGE_MCB  OpaqueMcb,
3485
 
    OUT PLONGLONG  LargeVbn,
3486
 
    OUT PLONGLONG  LargeLbn,
3487
 
    OUT PULONG     Index
3488
 
);
3489
 
 
3490
 
NTKERNELAPI
3491
 
BOOLEAN
3492
 
NTAPI
3493
 
FsRtlLookupMcbEntry (
3494
 
    IN PMCB     Mcb,
3495
 
    IN VBN      Vbn,
3496
 
    OUT PLBN    Lbn,
3497
 
    OUT PULONG  SectorCount OPTIONAL,
3498
 
    OUT PULONG  Index
3499
 
);
3500
 
 
3501
 
NTKERNELAPI
3502
 
PFSRTL_PER_STREAM_CONTEXT
3503
 
NTAPI
3504
 
FsRtlLookupPerStreamContextInternal (
3505
 
    IN PFSRTL_ADVANCED_FCB_HEADER  StreamContext,
3506
 
    IN PVOID                       OwnerId OPTIONAL,
3507
 
    IN PVOID                       InstanceId OPTIONAL
3508
 
);
3509
 
 
3510
 
NTKERNELAPI
3511
 
BOOLEAN
3512
 
NTAPI
3513
 
FsRtlMdlReadDev (
3514
 
    IN PFILE_OBJECT       FileObject,
3515
 
    IN PLARGE_INTEGER     FileOffset,
3516
 
    IN ULONG              Length,
3517
 
    IN ULONG              LockKey,
3518
 
    OUT PMDL              *MdlChain,
3519
 
    OUT PIO_STATUS_BLOCK  IoStatus,
3520
 
    IN PDEVICE_OBJECT     DeviceObject
 
9419
FsRtlIsFatDbcsLegal (
 
9420
    IN ANSI_STRING  DbcsName,
 
9421
    IN BOOLEAN      WildCardsPermissible,
 
9422
    IN BOOLEAN      PathNamePermissible,
 
9423
    IN BOOLEAN      LeadingBackslashPermissible
3521
9424
);
3522
9425
 
3523
9426
NTKERNELAPI
3531
9434
NTKERNELAPI
3532
9435
BOOLEAN
3533
9436
NTAPI
3534
 
FsRtlMdlReadCompleteDev (
3535
 
    IN PFILE_OBJECT     FileObject,
3536
 
    IN PMDL             MdlChain,
3537
 
    IN PDEVICE_OBJECT   DeviceObject
3538
 
);
3539
 
 
3540
 
NTKERNELAPI
3541
 
BOOLEAN
3542
 
NTAPI
3543
 
FsRtlPrepareMdlWriteDev (
3544
 
    IN PFILE_OBJECT       FileObject,
3545
 
    IN PLARGE_INTEGER     FileOffset,
3546
 
    IN ULONG              Length,
3547
 
    IN ULONG              LockKey,
3548
 
    OUT PMDL              *MdlChain,
3549
 
    OUT PIO_STATUS_BLOCK  IoStatus,
3550
 
    IN PDEVICE_OBJECT     DeviceObject
3551
 
);
3552
 
 
3553
 
NTKERNELAPI
3554
 
BOOLEAN
3555
 
NTAPI
3556
9437
FsRtlMdlWriteComplete (
3557
9438
    IN PFILE_OBJECT     FileObject,
3558
9439
    IN PLARGE_INTEGER   FileOffset,
3560
9441
);
3561
9442
 
3562
9443
NTKERNELAPI
3563
 
BOOLEAN
3564
 
NTAPI
3565
 
FsRtlMdlWriteCompleteDev (
3566
 
    IN PFILE_OBJECT     FileObject,
3567
 
    IN PLARGE_INTEGER   FileOffset,
3568
 
    IN PMDL             MdlChain,
3569
 
    IN PDEVICE_OBJECT   DeviceObject
3570
 
);
3571
 
 
3572
 
NTKERNELAPI
3573
 
NTSTATUS
3574
 
NTAPI
3575
 
FsRtlNormalizeNtstatus (
3576
 
    IN NTSTATUS Exception,
3577
 
    IN NTSTATUS GenericException
3578
 
);
3579
 
 
3580
 
NTKERNELAPI
3581
9444
VOID
3582
9445
NTAPI
3583
9446
FsRtlNotifyChangeDirectory (
3591
9454
);
3592
9455
 
3593
9456
NTKERNELAPI
3594
 
VOID
3595
 
NTAPI
3596
 
FsRtlNotifyCleanup (
3597
 
    IN PNOTIFY_SYNC NotifySync,
3598
 
    IN PLIST_ENTRY  NotifyList,
3599
 
    IN PVOID        FsContext
3600
 
);
3601
 
 
3602
 
typedef BOOLEAN (NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) (
3603
 
    IN PVOID                        NotifyContext,
3604
 
    IN PVOID                        TargetContext,
3605
 
    IN PSECURITY_SUBJECT_CONTEXT    SubjectContext
3606
 
);
3607
 
 
3608
 
NTKERNELAPI
3609
 
VOID
3610
 
NTAPI
3611
 
FsRtlNotifyFilterChangeDirectory (
3612
 
    IN PNOTIFY_SYNC                 NotifySync,
3613
 
    IN PLIST_ENTRY                  NotifyList,
3614
 
    IN PVOID                        FsContext,
3615
 
    IN PSTRING                      FullDirectoryName,
3616
 
    IN BOOLEAN                      WatchTree,
3617
 
    IN BOOLEAN                      IgnoreBuffer,
3618
 
    IN ULONG                        CompletionFilter,
3619
 
    IN PIRP                         NotifyIrp,
3620
 
    IN PCHECK_FOR_TRAVERSE_ACCESS   TraverseCallback OPTIONAL,
3621
 
    IN PSECURITY_SUBJECT_CONTEXT    SubjectContext OPTIONAL,
3622
 
    IN PFILTER_REPORT_CHANGE        FilterCallback OPTIONAL);
3623
 
 
3624
 
NTKERNELAPI
3625
 
VOID
3626
 
NTAPI
3627
 
FsRtlNotifyFilterReportChange (
3628
 
    IN PNOTIFY_SYNC   NotifySync,
3629
 
    IN PLIST_ENTRY    NotifyList,
3630
 
    IN PSTRING        FullTargetName,
3631
 
    IN USHORT         TargetNameOffset,
3632
 
    IN PSTRING        StreamName OPTIONAL,
3633
 
    IN PSTRING        NormalizedParentName OPTIONAL,
3634
 
    IN ULONG          FilterMatch,
3635
 
    IN ULONG          Action,
3636
 
    IN PVOID          TargetContext,
3637
 
    IN PVOID          FilterContext);
3638
 
 
3639
 
NTKERNELAPI
3640
 
VOID
3641
 
NTAPI
3642
 
FsRtlNotifyFullChangeDirectory (
3643
 
    IN PNOTIFY_SYNC                 NotifySync,
3644
 
    IN PLIST_ENTRY                  NotifyList,
3645
 
    IN PVOID                        FsContext,
3646
 
    IN PSTRING                      FullDirectoryName,
3647
 
    IN BOOLEAN                      WatchTree,
3648
 
    IN BOOLEAN                      IgnoreBuffer,
3649
 
    IN ULONG                        CompletionFilter,
3650
 
    IN PIRP                         NotifyIrp,
3651
 
    IN PCHECK_FOR_TRAVERSE_ACCESS   TraverseCallback OPTIONAL,
3652
 
    IN PSECURITY_SUBJECT_CONTEXT    SubjectContext OPTIONAL
3653
 
);
3654
 
 
3655
 
NTKERNELAPI
3656
 
VOID
3657
 
NTAPI
3658
 
FsRtlNotifyFullReportChange (
3659
 
    IN PNOTIFY_SYNC NotifySync,
3660
 
    IN PLIST_ENTRY  NotifyList,
3661
 
    IN PSTRING      FullTargetName,
3662
 
    IN USHORT       TargetNameOffset,
3663
 
    IN PSTRING      StreamName OPTIONAL,
3664
 
    IN PSTRING      NormalizedParentName OPTIONAL,
3665
 
    IN ULONG        FilterMatch,
3666
 
    IN ULONG        Action,
3667
 
    IN PVOID        TargetContext
3668
 
);
3669
 
 
3670
 
NTKERNELAPI
3671
 
VOID
3672
 
NTAPI
3673
 
FsRtlNotifyInitializeSync (
3674
 
    IN PNOTIFY_SYNC *NotifySync
3675
 
);
3676
 
 
3677
 
NTKERNELAPI
3678
 
VOID
3679
 
NTAPI
3680
 
FsRtlNotifyUninitializeSync (
3681
 
    IN PNOTIFY_SYNC *NotifySync
3682
 
);
3683
 
 
3684
 
#if (VER_PRODUCTBUILD >= 2195)
3685
 
 
3686
 
NTKERNELAPI
3687
 
NTSTATUS
3688
 
NTAPI
3689
 
FsRtlNotifyVolumeEvent (
3690
 
    IN PFILE_OBJECT FileObject,
3691
 
    IN ULONG        EventCode
3692
 
);
3693
 
 
3694
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
3695
 
 
3696
 
NTKERNELAPI
3697
 
ULONG
3698
 
NTAPI
3699
 
FsRtlNumberOfRunsInBaseMcb (
3700
 
    IN PBASE_MCB Mcb
3701
 
);
3702
 
 
3703
 
NTKERNELAPI
3704
 
ULONG
3705
 
NTAPI
3706
 
FsRtlNumberOfRunsInLargeMcb (
3707
 
    IN PLARGE_MCB Mcb
3708
 
);
3709
 
 
3710
 
NTKERNELAPI
3711
 
ULONG
3712
 
NTAPI
3713
 
FsRtlNumberOfRunsInMcb (
3714
 
    IN PMCB Mcb
3715
 
);
3716
 
 
3717
 
NTKERNELAPI
3718
 
NTSTATUS
3719
 
NTAPI
3720
 
FsRtlOplockFsctrl (
3721
 
    IN POPLOCK  Oplock,
3722
 
    IN PIRP     Irp,
3723
 
    IN ULONG    OpenCount
3724
 
);
3725
 
 
3726
 
NTKERNELAPI
3727
 
BOOLEAN
3728
 
NTAPI
3729
 
FsRtlOplockIsFastIoPossible (
3730
 
    IN POPLOCK Oplock
3731
 
);
3732
 
 
3733
 
typedef VOID
3734
 
(NTAPI *PFSRTL_STACK_OVERFLOW_ROUTINE) (
3735
 
    IN PVOID    Context,
3736
 
    IN PKEVENT  Event
3737
 
);
3738
 
 
3739
 
NTKERNELAPI
3740
 
VOID
3741
 
NTAPI
3742
 
FsRtlPostPagingFileStackOverflow (
3743
 
    IN PVOID                          Context,
3744
 
    IN PKEVENT                        Event,
3745
 
    IN PFSRTL_STACK_OVERFLOW_ROUTINE  StackOverflowRoutine
3746
 
);
3747
 
 
3748
 
NTKERNELAPI
3749
 
VOID
3750
 
NTAPI
3751
 
FsRtlPostStackOverflow (
3752
 
    IN PVOID                          Context,
3753
 
    IN PKEVENT                        Event,
3754
 
    IN PFSRTL_STACK_OVERFLOW_ROUTINE  StackOverflowRoutine
3755
 
);
3756
 
 
3757
 
/*
3758
 
  FsRtlPrivateLock:
3759
 
 
3760
 
  ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
3761
 
 
3762
 
  Internals:
3763
 
    -Calls IoCompleteRequest if Irp
3764
 
    -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
3765
 
*/
3766
 
NTKERNELAPI
3767
 
BOOLEAN
3768
 
NTAPI
3769
 
FsRtlPrivateLock (
3770
 
    IN PFILE_LOCK           FileLock,
3771
 
    IN PFILE_OBJECT         FileObject,
3772
 
    IN PLARGE_INTEGER       FileOffset,
3773
 
    IN PLARGE_INTEGER       Length,
3774
 
    IN PEPROCESS            Process,
3775
 
    IN ULONG                Key,
3776
 
    IN BOOLEAN              FailImmediately,
3777
 
    IN BOOLEAN              ExclusiveLock,
3778
 
    OUT PIO_STATUS_BLOCK    IoStatus,
3779
 
    IN PIRP                 Irp OPTIONAL,
3780
 
    IN PVOID                Context,
3781
 
    IN BOOLEAN              AlreadySynchronized
3782
 
);
3783
 
 
3784
 
/*
3785
 
  FsRtlProcessFileLock:
3786
 
 
3787
 
  ret:
3788
 
    -STATUS_INVALID_DEVICE_REQUEST
3789
 
    -STATUS_RANGE_NOT_LOCKED from unlock routines.
3790
 
    -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
3791
 
    (redirected IoStatus->Status).
3792
 
 
3793
 
  Internals:
3794
 
    -switch ( Irp->CurrentStackLocation->MinorFunction )
3795
 
        lock: return FsRtlPrivateLock;
3796
 
        unlocksingle: return FsRtlFastUnlockSingle;
3797
 
        unlockall: return FsRtlFastUnlockAll;
3798
 
        unlockallbykey: return FsRtlFastUnlockAllByKey;
3799
 
        default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
3800
 
                 return STATUS_INVALID_DEVICE_REQUEST;
3801
 
 
3802
 
    -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
3803
 
    -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
3804
 
*/
3805
 
NTKERNELAPI
3806
 
NTSTATUS
3807
 
NTAPI
3808
 
FsRtlProcessFileLock (
3809
 
    IN PFILE_LOCK   FileLock,
3810
 
    IN PIRP         Irp,
3811
 
    IN PVOID        Context OPTIONAL
3812
 
);
3813
 
 
3814
 
NTKERNELAPI
3815
 
NTSTATUS
3816
 
NTAPI
3817
 
FsRtlRegisterUncProvider (
3818
 
    IN OUT PHANDLE      MupHandle,
3819
 
    IN PUNICODE_STRING  RedirectorDeviceName,
3820
 
    IN BOOLEAN          MailslotsSupported
3821
 
);
3822
 
 
3823
 
NTKERNELAPI
3824
 
VOID
3825
 
NTAPI
3826
 
FsRtlRemoveBaseMcbEntry (
3827
 
    IN PBASE_MCB  Mcb,
3828
 
    IN LONGLONG   Vbn,
3829
 
    IN LONGLONG   SectorCount
3830
 
);
3831
 
 
3832
 
NTKERNELAPI
3833
 
VOID
3834
 
NTAPI
3835
 
FsRtlRemoveLargeMcbEntry (
3836
 
    IN PLARGE_MCB  Mcb,
3837
 
    IN LONGLONG    Vbn,
3838
 
    IN LONGLONG    SectorCount
3839
 
);
3840
 
 
3841
 
NTKERNELAPI
3842
 
VOID
3843
 
NTAPI
3844
 
FsRtlRemoveMcbEntry (
3845
 
    IN PMCB   Mcb,
3846
 
    IN VBN    Vbn,
3847
 
    IN ULONG  SectorCount
3848
 
);
3849
 
 
3850
 
NTKERNELAPI
3851
 
PFSRTL_PER_STREAM_CONTEXT
3852
 
NTAPI
3853
 
FsRtlRemovePerStreamContext (
3854
 
    IN PFSRTL_ADVANCED_FCB_HEADER  StreamContext,
3855
 
    IN PVOID                       OwnerId OPTIONAL,
3856
 
    IN PVOID                       InstanceId OPTIONAL
3857
 
);
3858
 
 
3859
 
NTKERNELAPI
3860
 
VOID
3861
 
NTAPI
3862
 
FsRtlResetBaseMcb (
3863
 
    IN PBASE_MCB Mcb
3864
 
);
3865
 
 
3866
 
NTKERNELAPI
3867
 
VOID
3868
 
NTAPI
3869
 
FsRtlResetLargeMcb (
3870
 
    IN PLARGE_MCB  Mcb,
3871
 
    IN BOOLEAN     SelfSynchronized
3872
 
);
3873
 
 
3874
 
NTKERNELAPI
3875
 
BOOLEAN
3876
 
NTAPI
3877
 
FsRtlSplitBaseMcb (
3878
 
    IN PBASE_MCB  Mcb,
3879
 
    IN LONGLONG   Vbn,
3880
 
    IN LONGLONG   Amount
3881
 
);
3882
 
 
3883
 
NTKERNELAPI
3884
 
BOOLEAN
3885
 
NTAPI
3886
 
FsRtlSplitLargeMcb (
3887
 
    IN PLARGE_MCB  Mcb,
3888
 
    IN LONGLONG    Vbn,
3889
 
    IN LONGLONG    Amount
3890
 
);
3891
 
 
3892
 
#define FsRtlSupportsPerStreamContexts(FO) (                       \
3893
 
    (BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) &&     \
3894
 
              FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \
3895
 
              FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS))               \
3896
 
)
3897
 
 
3898
 
NTKERNELAPI
3899
 
VOID
3900
 
NTAPI
3901
 
FsRtlTruncateBaseMcb (
3902
 
    IN PBASE_MCB  Mcb,
3903
 
    IN LONGLONG   Vbn
3904
 
);
3905
 
 
3906
 
NTKERNELAPI
3907
 
VOID
3908
 
NTAPI
3909
 
FsRtlTruncateLargeMcb (
3910
 
    IN PLARGE_MCB  Mcb,
3911
 
    IN LONGLONG    Vbn
3912
 
);
3913
 
 
3914
 
NTKERNELAPI
3915
 
VOID
3916
 
NTAPI
3917
 
FsRtlTruncateMcb (
3918
 
    IN PMCB  Mcb,
3919
 
    IN VBN   Vbn
3920
 
);
3921
 
 
3922
 
NTKERNELAPI
3923
 
VOID
3924
 
NTAPI
3925
 
FsRtlUninitializeBaseMcb (
3926
 
    IN PBASE_MCB Mcb
3927
 
);
3928
 
 
3929
 
NTKERNELAPI
3930
 
VOID
3931
 
NTAPI
3932
 
FsRtlUninitializeFileLock (
3933
 
    IN PFILE_LOCK FileLock
3934
 
);
3935
 
 
3936
 
NTKERNELAPI
3937
 
VOID
3938
 
NTAPI
3939
 
FsRtlUninitializeLargeMcb (
3940
 
    IN PLARGE_MCB Mcb
3941
 
);
3942
 
 
3943
 
NTKERNELAPI
3944
 
VOID
3945
 
NTAPI
3946
 
FsRtlUninitializeMcb (
3947
 
    IN PMCB Mcb
3948
 
);
3949
 
 
3950
 
NTKERNELAPI
3951
 
VOID
3952
 
NTAPI
3953
 
FsRtlUninitializeOplock (
3954
 
    IN OUT POPLOCK Oplock
3955
 
);
3956
 
 
3957
 
NTKERNELAPI
3958
 
UCHAR
3959
 
NTAPI
3960
 
KeSetIdealProcessorThread(
3961
 
    IN OUT PKTHREAD Thread,
3962
 
    IN UCHAR Processor
3963
 
);
3964
 
 
3965
 
NTKERNELAPI
3966
 
NTSTATUS
3967
 
NTAPI
3968
 
IoAttachDeviceToDeviceStackSafe(
3969
 
    IN PDEVICE_OBJECT   SourceDevice,
3970
 
    IN PDEVICE_OBJECT   TargetDevice,
3971
 
    OUT PDEVICE_OBJECT  *AttachedToDeviceObject
3972
 
);
3973
 
 
3974
 
NTKERNELAPI
3975
 
VOID
3976
 
NTAPI
3977
 
IoAcquireVpbSpinLock (
3978
 
    OUT PKIRQL Irql
3979
 
);
3980
 
 
3981
 
NTKERNELAPI
3982
 
NTSTATUS
3983
 
NTAPI
3984
 
IoCheckDesiredAccess (
3985
 
    IN OUT PACCESS_MASK DesiredAccess,
3986
 
    IN ACCESS_MASK      GrantedAccess
3987
 
);
3988
 
 
3989
 
NTKERNELAPI
3990
 
NTSTATUS
3991
 
NTAPI
3992
 
IoCheckEaBufferValidity (
3993
 
    IN PFILE_FULL_EA_INFORMATION    EaBuffer,
3994
 
    IN ULONG                        EaLength,
3995
 
    OUT PULONG                      ErrorOffset
3996
 
);
3997
 
 
3998
 
NTKERNELAPI
3999
 
NTSTATUS
4000
 
NTAPI
4001
 
IoCheckFunctionAccess (
4002
 
    IN ACCESS_MASK              GrantedAccess,
4003
 
    IN UCHAR                    MajorFunction,
4004
 
    IN UCHAR                    MinorFunction,
4005
 
    IN ULONG                    IoControlCode,
4006
 
    IN PVOID                    Argument1 OPTIONAL,
4007
 
    IN PVOID                    Argument2 OPTIONAL
4008
 
);
4009
 
 
4010
 
#if (VER_PRODUCTBUILD >= 2195)
4011
 
 
4012
 
NTKERNELAPI
4013
 
NTSTATUS
4014
 
NTAPI
4015
 
IoCheckQuotaBufferValidity (
4016
 
    IN PFILE_QUOTA_INFORMATION  QuotaBuffer,
4017
 
    IN ULONG                    QuotaLength,
4018
 
    OUT PULONG                  ErrorOffset
4019
 
);
4020
 
 
4021
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
4022
 
 
4023
 
NTKERNELAPI
4024
 
PFILE_OBJECT
4025
 
NTAPI
4026
 
IoCreateStreamFileObject (
4027
 
    IN PFILE_OBJECT     FileObject OPTIONAL,
4028
 
    IN PDEVICE_OBJECT   DeviceObject OPTIONAL
4029
 
);
4030
 
 
4031
 
#if (VER_PRODUCTBUILD >= 2195)
4032
 
 
4033
 
NTKERNELAPI
4034
 
PFILE_OBJECT
4035
 
NTAPI
4036
 
IoCreateStreamFileObjectLite (
4037
 
    IN PFILE_OBJECT     FileObject OPTIONAL,
4038
 
    IN PDEVICE_OBJECT   DeviceObject OPTIONAL
4039
 
);
4040
 
 
4041
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
4042
 
 
4043
 
NTKERNELAPI
4044
 
BOOLEAN
4045
 
NTAPI
4046
 
IoFastQueryNetworkAttributes (
4047
 
    IN POBJECT_ATTRIBUTES               ObjectAttributes,
4048
 
    IN ACCESS_MASK                      DesiredAccess,
4049
 
    IN ULONG                            OpenOptions,
4050
 
    OUT PIO_STATUS_BLOCK                IoStatus,
4051
 
    OUT PFILE_NETWORK_OPEN_INFORMATION  Buffer
4052
 
);
4053
 
 
4054
 
NTKERNELAPI
4055
 
PDEVICE_OBJECT
4056
 
NTAPI
4057
 
IoGetAttachedDevice (
4058
 
    IN PDEVICE_OBJECT DeviceObject
4059
 
);
4060
 
 
4061
 
NTKERNELAPI
4062
 
PDEVICE_OBJECT
4063
 
NTAPI
4064
 
IoGetBaseFileSystemDeviceObject (
4065
 
    IN PFILE_OBJECT FileObject
4066
 
);
4067
 
 
4068
 
#if (VER_PRODUCTBUILD >= 2600)
4069
 
 
4070
 
NTKERNELAPI
4071
 
PDEVICE_OBJECT
4072
 
NTAPI
4073
 
IoGetDeviceAttachmentBaseRef (
4074
 
    IN PDEVICE_OBJECT DeviceObject
4075
 
);
4076
 
 
4077
 
NTKERNELAPI
4078
 
NTSTATUS
4079
 
NTAPI
4080
 
IoGetDiskDeviceObject (
4081
 
    IN PDEVICE_OBJECT   FileSystemDeviceObject,
4082
 
    OUT PDEVICE_OBJECT  *DiskDeviceObject
4083
 
);
4084
 
 
4085
 
NTKERNELAPI
4086
 
PDEVICE_OBJECT
4087
 
NTAPI
4088
 
IoGetLowerDeviceObject (
4089
 
    IN PDEVICE_OBJECT DeviceObject
4090
 
);
4091
 
 
4092
 
#endif /* (VER_PRODUCTBUILD >= 2600) */
4093
 
 
4094
 
NTKERNELAPI
4095
 
PEPROCESS
4096
 
NTAPI
4097
 
IoGetRequestorProcess (
4098
 
    IN PIRP Irp
4099
 
);
4100
 
 
4101
 
#if (VER_PRODUCTBUILD >= 2195)
4102
 
 
4103
 
NTKERNELAPI
4104
 
ULONG
4105
 
NTAPI
4106
 
IoGetRequestorProcessId (
4107
 
    IN PIRP Irp
4108
 
);
4109
 
 
4110
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
4111
 
 
4112
 
NTKERNELAPI
4113
 
PIRP
4114
 
NTAPI
4115
 
IoGetTopLevelIrp (
4116
 
    VOID
4117
 
);
4118
 
 
4119
 
#define IoIsFileOpenedExclusively(FileObject) ( \
4120
 
    (BOOLEAN) !(                                \
4121
 
    (FileObject)->SharedRead ||                 \
4122
 
    (FileObject)->SharedWrite ||                \
4123
 
    (FileObject)->SharedDelete                  \
4124
 
    )                                           \
4125
 
)
4126
 
 
4127
 
NTKERNELAPI
4128
 
BOOLEAN
4129
 
NTAPI
4130
 
IoIsOperationSynchronous (
4131
 
    IN PIRP Irp
4132
 
);
4133
 
 
4134
 
NTKERNELAPI
4135
 
BOOLEAN
4136
 
NTAPI
4137
 
IoIsSystemThread (
4138
 
    IN PETHREAD Thread
4139
 
);
4140
 
 
4141
 
#if (VER_PRODUCTBUILD >= 2195)
4142
 
 
4143
 
NTKERNELAPI
4144
 
BOOLEAN
4145
 
NTAPI
4146
 
IoIsValidNameGraftingBuffer (
4147
 
    IN PIRP                 Irp,
4148
 
    IN PREPARSE_DATA_BUFFER ReparseBuffer
4149
 
);
4150
 
 
4151
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
4152
 
 
4153
 
NTKERNELAPI
4154
 
NTSTATUS
4155
 
NTAPI
4156
 
IoPageRead (
4157
 
    IN PFILE_OBJECT         FileObject,
4158
 
    IN PMDL                 Mdl,
4159
 
    IN PLARGE_INTEGER       Offset,
4160
 
    IN PKEVENT              Event,
4161
 
    OUT PIO_STATUS_BLOCK    IoStatusBlock
4162
 
);
4163
 
 
4164
 
NTKERNELAPI
4165
 
NTSTATUS
4166
 
NTAPI
4167
 
IoQueryFileInformation (
4168
 
    IN PFILE_OBJECT             FileObject,
4169
 
    IN FILE_INFORMATION_CLASS   FileInformationClass,
4170
 
    IN ULONG                    Length,
4171
 
    OUT PVOID                   FileInformation,
4172
 
    OUT PULONG                  ReturnedLength
4173
 
);
4174
 
 
4175
 
NTKERNELAPI
4176
 
NTSTATUS
4177
 
NTAPI
4178
 
IoQueryVolumeInformation (
4179
 
    IN PFILE_OBJECT         FileObject,
4180
 
    IN FS_INFORMATION_CLASS FsInformationClass,
4181
 
    IN ULONG                Length,
4182
 
    OUT PVOID               FsInformation,
4183
 
    OUT PULONG              ReturnedLength
4184
 
);
4185
 
 
4186
 
NTKERNELAPI
4187
 
VOID
4188
 
NTAPI
4189
 
IoQueueThreadIrp(
4190
 
    IN PIRP Irp
4191
 
);
4192
 
 
4193
 
NTKERNELAPI
4194
 
VOID
4195
 
NTAPI
4196
 
IoRegisterFileSystem (
4197
 
    IN OUT PDEVICE_OBJECT DeviceObject
4198
 
);
4199
 
 
4200
 
#if (VER_PRODUCTBUILD >= 1381)
4201
 
 
4202
 
typedef VOID (NTAPI *PDRIVER_FS_NOTIFICATION) (
4203
 
    IN PDEVICE_OBJECT DeviceObject,
4204
 
    IN BOOLEAN        DriverActive
4205
 
);
4206
 
 
4207
 
NTKERNELAPI
4208
 
NTSTATUS
4209
 
NTAPI
4210
 
IoRegisterFsRegistrationChange (
4211
 
    IN PDRIVER_OBJECT           DriverObject,
4212
 
    IN PDRIVER_FS_NOTIFICATION  DriverNotificationRoutine
4213
 
);
4214
 
 
4215
 
#endif /* (VER_PRODUCTBUILD >= 1381) */
4216
 
 
4217
 
NTKERNELAPI
4218
 
VOID
4219
 
NTAPI
4220
 
IoReleaseVpbSpinLock (
4221
 
    IN KIRQL Irql
4222
 
);
4223
 
 
4224
 
NTKERNELAPI
4225
 
VOID
4226
 
NTAPI
4227
 
IoSetDeviceToVerify (
4228
 
    IN PETHREAD         Thread,
4229
 
    IN PDEVICE_OBJECT   DeviceObject
4230
 
);
4231
 
 
4232
 
NTKERNELAPI
4233
 
NTSTATUS
4234
 
NTAPI
4235
 
IoSetInformation (
4236
 
    IN PFILE_OBJECT             FileObject,
4237
 
    IN FILE_INFORMATION_CLASS   FileInformationClass,
4238
 
    IN ULONG                    Length,
4239
 
    IN PVOID                    FileInformation
4240
 
);
4241
 
 
4242
 
NTKERNELAPI
4243
 
VOID
4244
 
NTAPI
4245
 
IoSetTopLevelIrp (
4246
 
    IN PIRP Irp
4247
 
);
4248
 
 
4249
 
NTKERNELAPI
4250
 
NTSTATUS
4251
 
NTAPI
4252
 
IoSynchronousPageWrite (
4253
 
    IN PFILE_OBJECT         FileObject,
4254
 
    IN PMDL                 Mdl,
4255
 
    IN PLARGE_INTEGER       FileOffset,
4256
 
    IN PKEVENT              Event,
4257
 
    OUT PIO_STATUS_BLOCK    IoStatusBlock
4258
 
);
4259
 
 
4260
 
NTKERNELAPI
4261
 
PEPROCESS
4262
 
NTAPI
4263
 
IoThreadToProcess (
4264
 
    IN PETHREAD Thread
4265
 
);
4266
 
 
4267
 
NTKERNELAPI
4268
 
VOID
4269
 
NTAPI
4270
 
IoUnregisterFileSystem (
4271
 
    IN OUT PDEVICE_OBJECT DeviceObject
4272
 
);
4273
 
 
4274
 
#if (VER_PRODUCTBUILD >= 1381)
4275
 
 
4276
 
NTKERNELAPI
4277
 
VOID
4278
 
NTAPI
4279
 
IoUnregisterFsRegistrationChange (
4280
 
    IN PDRIVER_OBJECT           DriverObject,
4281
 
    IN PDRIVER_FS_NOTIFICATION  DriverNotificationRoutine
4282
 
);
4283
 
 
4284
 
#endif /* (VER_PRODUCTBUILD >= 1381) */
4285
 
 
4286
 
NTKERNELAPI
4287
 
NTSTATUS
4288
 
NTAPI
4289
 
IoVerifyVolume (
4290
 
    IN PDEVICE_OBJECT   DeviceObject,
4291
 
    IN BOOLEAN          AllowRawMount
4292
 
);
4293
 
 
4294
 
#if !defined (_M_AMD64)
4295
 
 
4296
 
NTHALAPI
4297
 
KIRQL
4298
 
FASTCALL
4299
 
KeAcquireQueuedSpinLock (
4300
 
    IN KSPIN_LOCK_QUEUE_NUMBER Number
4301
 
);
4302
 
 
4303
 
NTHALAPI
4304
 
VOID
4305
 
FASTCALL
4306
 
KeReleaseQueuedSpinLock (
4307
 
    IN KSPIN_LOCK_QUEUE_NUMBER Number,
4308
 
    IN KIRQL OldIrql
4309
 
);
4310
 
 
4311
 
NTHALAPI
4312
 
KIRQL
4313
 
FASTCALL
4314
 
KeAcquireSpinLockRaiseToSynch(
4315
 
    IN OUT PKSPIN_LOCK SpinLock
4316
 
);
4317
 
 
4318
 
NTHALAPI
4319
 
LOGICAL
4320
 
FASTCALL
4321
 
KeTryToAcquireQueuedSpinLock(
4322
 
  KSPIN_LOCK_QUEUE_NUMBER Number,
4323
 
  PKIRQL OldIrql);
4324
 
 
4325
 
#else
4326
 
 
4327
 
NTKERNELAPI
4328
 
KIRQL
4329
 
FASTCALL
4330
 
KeAcquireQueuedSpinLock (
4331
 
    IN KSPIN_LOCK_QUEUE_NUMBER Number
4332
 
);
4333
 
 
4334
 
NTKERNELAPI
4335
 
VOID
4336
 
FASTCALL
4337
 
KeReleaseQueuedSpinLock (
4338
 
    IN KSPIN_LOCK_QUEUE_NUMBER Number,
4339
 
    IN KIRQL OldIrql
4340
 
);
4341
 
 
4342
 
NTKERNELAPI
4343
 
KIRQL
4344
 
KeAcquireSpinLockRaiseToSynch(
4345
 
    IN OUT PKSPIN_LOCK SpinLock
4346
 
);
4347
 
 
4348
 
NTKERNELAPI
4349
 
LOGICAL
4350
 
KeTryToAcquireQueuedSpinLock(
4351
 
  KSPIN_LOCK_QUEUE_NUMBER Number,
4352
 
  PKIRQL OldIrql);
4353
 
 
4354
 
#endif
4355
 
 
4356
 
NTKERNELAPI
4357
 
VOID
4358
 
NTAPI
4359
 
KeAttachProcess (
4360
 
    IN PKPROCESS Process
4361
 
);
4362
 
 
4363
 
NTKERNELAPI
4364
 
VOID
4365
 
NTAPI
4366
 
KeDetachProcess (
4367
 
    VOID
4368
 
);
4369
 
 
4370
 
NTKERNELAPI
4371
 
VOID
4372
 
NTAPI
4373
 
KeInitializeQueue (
4374
 
    IN PRKQUEUE Queue,
4375
 
    IN ULONG    Count OPTIONAL
4376
 
);
4377
 
 
4378
 
NTKERNELAPI
4379
 
LONG
4380
 
NTAPI
4381
 
KeInsertHeadQueue (
4382
 
    IN PRKQUEUE     Queue,
4383
 
    IN PLIST_ENTRY  Entry
4384
 
);
4385
 
 
4386
 
NTKERNELAPI
4387
 
LONG
4388
 
NTAPI
4389
 
KeInsertQueue (
4390
 
    IN PRKQUEUE     Queue,
4391
 
    IN PLIST_ENTRY  Entry
4392
 
);
4393
 
 
4394
 
NTKERNELAPI
4395
 
LONG
4396
 
NTAPI
4397
 
KeReadStateQueue (
4398
 
    IN PRKQUEUE Queue
4399
 
);
4400
 
 
4401
 
NTKERNELAPI
4402
 
PLIST_ENTRY
4403
 
NTAPI
4404
 
KeRemoveQueue (
4405
 
    IN PRKQUEUE         Queue,
4406
 
    IN KPROCESSOR_MODE  WaitMode,
4407
 
    IN PLARGE_INTEGER   Timeout OPTIONAL
4408
 
);
4409
 
 
4410
 
NTKERNELAPI
4411
 
PLIST_ENTRY
4412
 
NTAPI
4413
 
KeRundownQueue (
4414
 
    IN PRKQUEUE Queue
4415
 
);
4416
 
 
4417
 
NTKERNELAPI
4418
 
VOID
4419
 
NTAPI
4420
 
KeInitializeMutant (
4421
 
    IN PRKMUTANT  Mutant,
4422
 
    IN BOOLEAN    InitialOwner
4423
 
);
4424
 
 
4425
 
NTKERNELAPI
4426
 
LONG
4427
 
NTAPI
4428
 
KeReadStateMutant (
4429
 
    IN PRKMUTANT  Mutant
4430
 
);
4431
 
 
4432
 
NTKERNELAPI
4433
 
LONG
4434
 
NTAPI
4435
 
KeReleaseMutant (
4436
 
    IN PRKMUTANT  Mutant,
4437
 
    IN KPRIORITY  Increment,
4438
 
    IN BOOLEAN    Abandoned,
4439
 
    IN BOOLEAN    Wait
4440
 
);
4441
 
 
4442
 
#if (VER_PRODUCTBUILD >= 2195)
4443
 
 
4444
 
NTKERNELAPI
4445
 
VOID
4446
 
NTAPI
4447
 
KeStackAttachProcess (
4448
 
    IN PKPROCESS    Process,
4449
 
    OUT PKAPC_STATE ApcState
4450
 
);
4451
 
 
4452
 
NTKERNELAPI
4453
 
VOID
4454
 
NTAPI
4455
 
KeUnstackDetachProcess (
4456
 
    IN PKAPC_STATE ApcState
4457
 
);
4458
 
 
4459
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
4460
 
 
4461
 
NTKERNELAPI
4462
 
BOOLEAN
4463
 
NTAPI
4464
 
KeSetKernelStackSwapEnable(
4465
 
    IN BOOLEAN Enable
4466
 
);
4467
 
 
4468
 
NTKERNELAPI
4469
 
BOOLEAN
4470
 
NTAPI
4471
 
MmCanFileBeTruncated (
4472
 
    IN PSECTION_OBJECT_POINTERS     SectionObjectPointer,
4473
 
    IN PLARGE_INTEGER               NewFileSize
4474
 
);
4475
 
 
4476
 
NTKERNELAPI
4477
 
BOOLEAN
4478
 
NTAPI
4479
 
MmFlushImageSection (
4480
 
    IN PSECTION_OBJECT_POINTERS     SectionObjectPointer,
4481
 
    IN MMFLUSH_TYPE                 FlushType
4482
 
);
4483
 
 
4484
 
NTKERNELAPI
4485
 
BOOLEAN
4486
 
NTAPI
4487
 
MmForceSectionClosed (
4488
 
    IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
4489
 
    IN BOOLEAN                  DelayClose
4490
 
);
4491
 
 
4492
 
#if (VER_PRODUCTBUILD >= 1381)
4493
 
 
4494
 
NTKERNELAPI
4495
 
BOOLEAN
4496
 
NTAPI
4497
 
MmIsRecursiveIoFault (
4498
 
    VOID
4499
 
);
4500
 
 
4501
 
#else
4502
 
 
4503
 
#define MmIsRecursiveIoFault() (                            \
4504
 
    (PsGetCurrentThread()->DisablePageFaultClustering) |    \
4505
 
    (PsGetCurrentThread()->ForwardClusterOnly)              \
4506
 
)
4507
 
 
4508
 
#endif
4509
 
 
4510
 
 
4511
 
NTKERNELAPI
4512
 
BOOLEAN
4513
 
NTAPI
4514
 
MmSetAddressRangeModified (
4515
 
    IN PVOID    Address,
4516
 
    IN SIZE_T    Length
4517
 
);
4518
 
 
4519
 
NTKERNELAPI
4520
9457
NTSTATUS
4521
9458
NTAPI
4522
9459
ObCreateObject (
4541
9478
NTKERNELAPI
4542
9479
NTSTATUS
4543
9480
NTAPI
4544
 
ObInsertObject (
4545
 
    IN PVOID            Object,
4546
 
    IN PACCESS_STATE    PassedAccessState OPTIONAL,
4547
 
    IN ACCESS_MASK      DesiredAccess,
4548
 
    IN ULONG            AdditionalReferences,
4549
 
    OUT PVOID           *ReferencedObject OPTIONAL,
4550
 
    OUT PHANDLE         Handle
4551
 
);
4552
 
 
4553
 
NTKERNELAPI
4554
 
VOID
4555
 
NTAPI
4556
 
ObMakeTemporaryObject (
4557
 
    IN PVOID Object
4558
 
);
4559
 
 
4560
 
NTKERNELAPI
4561
 
NTSTATUS
4562
 
NTAPI
4563
 
ObOpenObjectByPointer (
4564
 
    IN PVOID            Object,
4565
 
    IN ULONG            HandleAttributes,
4566
 
    IN PACCESS_STATE    PassedAccessState OPTIONAL,
4567
 
    IN ACCESS_MASK      DesiredAccess OPTIONAL,
4568
 
    IN POBJECT_TYPE     ObjectType OPTIONAL,
4569
 
    IN KPROCESSOR_MODE  AccessMode,
4570
 
    OUT PHANDLE         Handle
4571
 
);
4572
 
 
4573
 
NTKERNELAPI
4574
 
NTSTATUS
4575
 
NTAPI
4576
 
ObQueryNameString (
4577
 
    IN PVOID                        Object,
4578
 
    OUT POBJECT_NAME_INFORMATION    ObjectNameInfo,
4579
 
    IN ULONG                        Length,
4580
 
    OUT PULONG                      ReturnLength
4581
 
);
4582
 
 
4583
 
NTKERNELAPI
4584
 
NTSTATUS
4585
 
NTAPI
4586
 
ObQueryObjectAuditingByHandle (
4587
 
    IN HANDLE       Handle,
4588
 
    OUT PBOOLEAN    GenerateOnClose
4589
 
);
4590
 
 
4591
 
NTKERNELAPI
4592
 
NTSTATUS
4593
 
NTAPI
4594
9481
ObReferenceObjectByName (
4595
9482
    IN PUNICODE_STRING  ObjectName,
4596
9483
    IN ULONG            Attributes,
4602
9489
    OUT PVOID           *Object
4603
9490
);
4604
9491
 
4605
 
NTKERNELAPI
4606
 
NTSTATUS
4607
 
NTAPI
4608
 
PsAssignImpersonationToken (
4609
 
    IN PETHREAD     Thread,
4610
 
    IN HANDLE       Token
4611
 
);
4612
 
 
4613
 
NTKERNELAPI
4614
 
VOID
4615
 
NTAPI
4616
 
PsChargePoolQuota (
4617
 
    IN PEPROCESS    Process,
4618
 
    IN POOL_TYPE    PoolType,
4619
 
    IN SIZE_T       Amount
4620
 
);
4621
 
 
4622
 
NTKERNELAPI
4623
 
NTSTATUS
4624
 
NTAPI
4625
 
PsChargeProcessPoolQuota (
4626
 
    IN PEPROCESS    Process,
4627
 
    IN POOL_TYPE    PoolType,
4628
 
    IN SIZE_T       Amount
4629
 
);
4630
 
 
4631
9492
#define PsDereferenceImpersonationToken(T)  \
4632
9493
            {if (ARGUMENT_PRESENT(T)) {     \
4633
9494
                (ObDereferenceObject((T))); \
4636
9497
            }                               \
4637
9498
}
4638
9499
 
4639
 
#define PsDereferencePrimaryToken(T) (ObDereferenceObject((T)))
4640
 
 
4641
 
NTKERNELAPI
4642
 
BOOLEAN
4643
 
NTAPI
4644
 
PsDisableImpersonation(
4645
 
    IN PETHREAD                 Thread,
4646
 
    IN PSE_IMPERSONATION_STATE  ImpersonationState
4647
 
);
4648
 
 
4649
 
NTKERNELAPI
4650
 
LARGE_INTEGER
4651
 
NTAPI
4652
 
PsGetProcessExitTime (
4653
 
    VOID
4654
 
);
4655
 
 
4656
 
NTKERNELAPI
4657
 
NTSTATUS
4658
 
NTAPI
4659
 
PsImpersonateClient(
4660
 
    IN PETHREAD                      Thread,
4661
 
    IN PACCESS_TOKEN                 Token,
4662
 
    IN BOOLEAN                       CopyOnOpen,
4663
 
    IN BOOLEAN                       EffectiveOnly,
4664
 
    IN SECURITY_IMPERSONATION_LEVEL  ImpersonationLevel
4665
 
);
4666
 
 
4667
 
NTKERNELAPI
4668
 
BOOLEAN
4669
 
NTAPI
4670
 
PsIsSystemThread(
4671
 
    IN PETHREAD Thread
4672
 
);
4673
 
 
4674
 
NTKERNELAPI
4675
 
BOOLEAN
4676
 
NTAPI
4677
 
PsIsThreadTerminating (
4678
 
    IN PETHREAD Thread
4679
 
);
4680
 
 
4681
 
NTKERNELAPI
4682
 
NTSTATUS
4683
 
NTAPI
4684
 
PsLookupProcessByProcessId (
4685
 
    IN HANDLE       ProcessId,
4686
 
    OUT PEPROCESS   *Process
4687
 
);
4688
 
 
4689
9500
NTKERNELAPI
4690
9501
NTSTATUS
4691
9502
NTAPI
4695
9506
    OUT PETHREAD    *Thread
4696
9507
);
4697
9508
 
4698
 
NTKERNELAPI
4699
 
NTSTATUS
4700
 
NTAPI
4701
 
PsLookupThreadByThreadId (
4702
 
    IN HANDLE       UniqueThreadId,
4703
 
    OUT PETHREAD    *Thread
4704
 
);
4705
 
 
4706
 
NTKERNELAPI
4707
 
PACCESS_TOKEN
4708
 
NTAPI
4709
 
PsReferenceImpersonationToken (
4710
 
    IN PETHREAD                         Thread,
4711
 
    OUT PBOOLEAN                        CopyOnUse,
4712
 
    OUT PBOOLEAN                        EffectiveOnly,
4713
 
    OUT PSECURITY_IMPERSONATION_LEVEL   Level
4714
 
);
4715
 
 
4716
 
NTKERNELAPI
4717
 
HANDLE
4718
 
NTAPI
4719
 
PsReferencePrimaryToken (
4720
 
    IN PEPROCESS Process
4721
 
);
4722
 
 
4723
 
NTKERNELAPI
4724
 
VOID
4725
 
NTAPI
4726
 
PsRestoreImpersonation(
4727
 
    IN PETHREAD                 Thread,
4728
 
    IN PSE_IMPERSONATION_STATE  ImpersonationState
4729
 
);
4730
 
 
4731
 
NTKERNELAPI
4732
 
VOID
4733
 
NTAPI
4734
 
PsReturnPoolQuota (
4735
 
    IN PEPROCESS    Process,
4736
 
    IN POOL_TYPE    PoolType,
4737
 
    IN SIZE_T       Amount
4738
 
);
4739
 
 
4740
 
NTKERNELAPI
4741
 
VOID
4742
 
NTAPI
4743
 
PsRevertToSelf (
4744
 
    VOID
4745
 
);
4746
 
 
4747
 
NTSYSAPI
4748
 
NTSTATUS
4749
 
NTAPI
4750
 
RtlAbsoluteToSelfRelativeSD (
4751
 
    IN PSECURITY_DESCRIPTOR              AbsoluteSecurityDescriptor,
4752
 
    IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
4753
 
    IN PULONG                            BufferLength
4754
 
);
4755
 
 
4756
 
NTSYSAPI
4757
 
PVOID
4758
 
NTAPI
4759
 
RtlAllocateHeap (
4760
 
    IN HANDLE  HeapHandle,
4761
 
    IN ULONG   Flags,
4762
 
    IN SIZE_T   Size
4763
 
);
4764
 
 
4765
 
NTSYSAPI
4766
 
NTSTATUS
4767
 
NTAPI
4768
 
RtlAppendStringToString(
4769
 
    PSTRING Destination,
4770
 
    const STRING *Source
4771
 
);
4772
 
 
4773
 
NTSYSAPI
4774
 
USHORT
4775
 
NTAPI
4776
 
RtlCaptureStackBackTrace (
4777
 
    IN ULONG FramesToSkip,
4778
 
    IN ULONG FramesToCapture,
4779
 
    OUT PVOID *BackTrace,
4780
 
    OUT PULONG BackTraceHash OPTIONAL
4781
 
);
4782
 
 
4783
 
NTSYSAPI
4784
 
SIZE_T
4785
 
NTAPI
4786
 
RtlCompareMemoryUlong (
4787
 
    PVOID Source,
4788
 
    SIZE_T Length,
4789
 
    ULONG Pattern
4790
 
);
4791
 
 
4792
 
NTSYSAPI
4793
 
NTSTATUS
4794
 
NTAPI
4795
 
RtlCompressBuffer (
4796
 
    IN USHORT   CompressionFormatAndEngine,
4797
 
    IN PUCHAR   UncompressedBuffer,
4798
 
    IN ULONG    UncompressedBufferSize,
4799
 
    OUT PUCHAR  CompressedBuffer,
4800
 
    IN ULONG    CompressedBufferSize,
4801
 
    IN ULONG    UncompressedChunkSize,
4802
 
    OUT PULONG  FinalCompressedSize,
4803
 
    IN PVOID    WorkSpace
4804
 
);
4805
 
 
4806
 
NTSYSAPI
4807
 
NTSTATUS
4808
 
NTAPI
4809
 
RtlCompressChunks (
4810
 
    IN PUCHAR                       UncompressedBuffer,
4811
 
    IN ULONG                        UncompressedBufferSize,
4812
 
    OUT PUCHAR                      CompressedBuffer,
4813
 
    IN ULONG                        CompressedBufferSize,
4814
 
    IN OUT PCOMPRESSED_DATA_INFO    CompressedDataInfo,
4815
 
    IN ULONG                        CompressedDataInfoLength,
4816
 
    IN PVOID                        WorkSpace
4817
 
);
4818
 
 
4819
 
NTSYSAPI
4820
 
NTSTATUS
4821
 
NTAPI
4822
 
RtlConvertSidToUnicodeString (
4823
 
    OUT PUNICODE_STRING DestinationString,
4824
 
    IN PSID             Sid,
4825
 
    IN BOOLEAN          AllocateDestinationString
4826
 
);
4827
 
 
4828
 
NTSYSAPI
4829
 
NTSTATUS
4830
 
NTAPI
4831
 
RtlCopySid (
4832
 
    IN ULONG   Length,
4833
 
    IN PSID    Destination,
4834
 
    IN PSID    Source
4835
 
);
4836
 
 
4837
 
NTSYSAPI
4838
 
BOOLEAN
4839
 
NTAPI
4840
 
RtlCreateUnicodeString(
4841
 
    PUNICODE_STRING DestinationString,
4842
 
    PCWSTR SourceString
4843
 
);
4844
 
 
4845
 
NTSYSAPI
4846
 
NTSTATUS
4847
 
NTAPI
4848
 
RtlDecompressBuffer (
4849
 
    IN USHORT   CompressionFormat,
4850
 
    OUT PUCHAR  UncompressedBuffer,
4851
 
    IN ULONG    UncompressedBufferSize,
4852
 
    IN PUCHAR   CompressedBuffer,
4853
 
    IN ULONG    CompressedBufferSize,
4854
 
    OUT PULONG  FinalUncompressedSize
4855
 
);
4856
 
 
4857
 
NTSYSAPI
4858
 
NTSTATUS
4859
 
NTAPI
4860
 
RtlDecompressChunks (
4861
 
    OUT PUCHAR                  UncompressedBuffer,
4862
 
    IN ULONG                    UncompressedBufferSize,
4863
 
    IN PUCHAR                   CompressedBuffer,
4864
 
    IN ULONG                    CompressedBufferSize,
4865
 
    IN PUCHAR                   CompressedTail,
4866
 
    IN ULONG                    CompressedTailSize,
4867
 
    IN PCOMPRESSED_DATA_INFO    CompressedDataInfo
4868
 
);
4869
 
 
4870
 
NTSYSAPI
4871
 
NTSTATUS
4872
 
NTAPI
4873
 
RtlDecompressFragment (
4874
 
    IN USHORT   CompressionFormat,
4875
 
    OUT PUCHAR  UncompressedFragment,
4876
 
    IN ULONG    UncompressedFragmentSize,
4877
 
    IN PUCHAR   CompressedBuffer,
4878
 
    IN ULONG    CompressedBufferSize,
4879
 
    IN ULONG    FragmentOffset,
4880
 
    OUT PULONG  FinalUncompressedSize,
4881
 
    IN PVOID    WorkSpace
4882
 
);
4883
 
 
4884
 
NTSYSAPI
4885
 
NTSTATUS
4886
 
NTAPI
4887
 
RtlDescribeChunk (
4888
 
    IN USHORT       CompressionFormat,
4889
 
    IN OUT PUCHAR   *CompressedBuffer,
4890
 
    IN PUCHAR       EndOfCompressedBufferPlus1,
4891
 
    OUT PUCHAR      *ChunkBuffer,
4892
 
    OUT PULONG      ChunkSize
4893
 
);
4894
 
 
4895
 
NTSYSAPI
4896
 
NTSTATUS
4897
 
NTAPI
4898
 
RtlDowncaseUnicodeString(
4899
 
    IN OUT PUNICODE_STRING UniDest,
4900
 
    IN PCUNICODE_STRING UniSource,
4901
 
    IN BOOLEAN AllocateDestinationString
4902
 
);
4903
 
 
4904
 
NTSYSAPI
4905
 
NTSTATUS
4906
 
NTAPI
4907
 
RtlDuplicateUnicodeString(
4908
 
    IN ULONG Flags,
4909
 
    IN PCUNICODE_STRING SourceString,
4910
 
    OUT PUNICODE_STRING DestinationString
4911
 
);
4912
 
 
4913
 
NTSYSAPI
4914
 
BOOLEAN
4915
 
NTAPI
4916
 
RtlEqualSid (
4917
 
    IN PSID Sid1,
4918
 
    IN PSID Sid2
4919
 
);
4920
 
 
4921
 
NTSYSAPI
4922
 
VOID
4923
 
NTAPI
4924
 
RtlFillMemoryUlong (
4925
 
    IN PVOID    Destination,
4926
 
    IN ULONG    Length,
4927
 
    IN ULONG    Fill
4928
 
);
4929
 
 
4930
 
NTSYSAPI
4931
 
BOOLEAN
4932
 
NTAPI
4933
 
RtlFreeHeap (
4934
 
    IN HANDLE  HeapHandle,
4935
 
    IN ULONG   Flags,
4936
 
    IN PVOID   P
4937
 
);
4938
 
 
4939
 
NTSYSAPI
4940
 
VOID
4941
 
NTAPI
4942
 
RtlFreeOemString (
4943
 
    IN POEM_STRING  OemString
4944
 
); 
4945
 
 
4946
 
NTSYSAPI
4947
 
VOID
4948
 
NTAPI
4949
 
RtlGenerate8dot3Name (
4950
 
    IN PUNICODE_STRING              Name,
4951
 
    IN BOOLEAN                      AllowExtendedCharacters,
4952
 
    IN OUT PGENERATE_NAME_CONTEXT   Context,
4953
 
    OUT PUNICODE_STRING             Name8dot3
4954
 
);
4955
 
 
4956
 
NTSYSAPI
4957
 
NTSTATUS
4958
 
NTAPI
4959
 
RtlGetCompressionWorkSpaceSize (
4960
 
    IN USHORT   CompressionFormatAndEngine,
4961
 
    OUT PULONG  CompressBufferWorkSpaceSize,
4962
 
    OUT PULONG  CompressFragmentWorkSpaceSize
4963
 
);
4964
 
 
4965
 
NTSYSAPI
4966
 
NTSTATUS
4967
 
NTAPI
4968
 
RtlGetDaclSecurityDescriptor (
4969
 
    IN PSECURITY_DESCRIPTOR SecurityDescriptor,
4970
 
    OUT PBOOLEAN            DaclPresent,
4971
 
    OUT PACL                *Dacl,
4972
 
    OUT PBOOLEAN            DaclDefaulted
4973
 
);
4974
 
 
4975
 
NTSYSAPI
4976
 
NTSTATUS
4977
 
NTAPI
4978
 
RtlGetGroupSecurityDescriptor (
4979
 
    IN PSECURITY_DESCRIPTOR SecurityDescriptor,
4980
 
    OUT PSID                *Group,
4981
 
    OUT PBOOLEAN            GroupDefaulted
4982
 
);
4983
 
 
4984
 
NTSYSAPI
4985
 
NTSTATUS
4986
 
NTAPI
4987
 
RtlGetOwnerSecurityDescriptor (
4988
 
    IN PSECURITY_DESCRIPTOR SecurityDescriptor,
4989
 
    OUT PSID                *Owner,
4990
 
    OUT PBOOLEAN            OwnerDefaulted
4991
 
);
4992
 
 
4993
 
NTSYSAPI
4994
 
NTSTATUS
4995
 
NTAPI
4996
 
RtlInitializeSid (
4997
 
    IN OUT PSID                     Sid,
4998
 
    IN PSID_IDENTIFIER_AUTHORITY    IdentifierAuthority,
4999
 
    IN UCHAR                        SubAuthorityCount
5000
 
);
5001
 
 
5002
 
NTSYSAPI
5003
 
BOOLEAN
5004
 
NTAPI
5005
 
RtlIsNameLegalDOS8Dot3(
5006
 
    IN PCUNICODE_STRING Name,
5007
 
    IN OUT POEM_STRING OemName OPTIONAL,
5008
 
    IN OUT PBOOLEAN NameContainsSpaces OPTIONAL
5009
 
);
5010
 
 
5011
 
NTSYSAPI
5012
 
ULONG
5013
 
NTAPI
5014
 
RtlLengthRequiredSid (
5015
 
    IN ULONG SubAuthorityCount
5016
 
);
5017
 
 
5018
 
NTSYSAPI
5019
 
ULONG
5020
 
NTAPI
5021
 
RtlLengthSid (
5022
 
    IN PSID Sid
5023
 
);
5024
 
 
5025
 
NTSYSAPI
5026
 
ULONG
5027
 
NTAPI
5028
 
RtlNtStatusToDosError (
5029
 
    IN NTSTATUS Status
5030
 
);
5031
 
 
5032
 
NTSYSAPI
5033
 
ULONG
5034
 
NTAPI
5035
 
RtlxUnicodeStringToOemSize(
5036
 
    PCUNICODE_STRING UnicodeString
5037
 
    );
5038
 
 
5039
 
NTSYSAPI
5040
 
ULONG
5041
 
NTAPI
5042
 
RtlxOemStringToUnicodeSize(
5043
 
    PCOEM_STRING OemString
5044
 
);
5045
 
 
5046
 
#define RtlOemStringToUnicodeSize(STRING) (                 \
5047
 
    NLS_MB_OEM_CODE_PAGE_TAG ?                              \
5048
 
    RtlxOemStringToUnicodeSize(STRING) :                    \
5049
 
    ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR)  \
5050
 
)
5051
 
 
5052
 
#define RtlOemStringToCountedUnicodeSize(STRING) (                    \
5053
 
    (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
5054
 
)
5055
 
 
5056
 
 
5057
 
NTSYSAPI
5058
 
NTSTATUS
5059
 
NTAPI
5060
 
RtlOemStringToUnicodeString(
5061
 
    IN OUT PUNICODE_STRING DestinationString,
5062
 
    IN PCOEM_STRING SourceString,
5063
 
    IN BOOLEAN AllocateDestinationString
5064
 
);
5065
 
 
5066
 
NTSYSAPI
5067
 
NTSTATUS
5068
 
NTAPI
5069
 
RtlUnicodeStringToOemString(
5070
 
    IN OUT POEM_STRING DestinationString,
5071
 
    IN PCUNICODE_STRING SourceString,
5072
 
    IN BOOLEAN AllocateDestinationString
5073
 
);
5074
 
 
5075
 
NTSYSAPI
5076
 
NTSTATUS
5077
 
NTAPI
5078
 
RtlOemStringToCountedUnicodeString(
5079
 
    IN OUT PUNICODE_STRING DestinationString,
5080
 
    IN PCOEM_STRING SourceString,
5081
 
    IN BOOLEAN AllocateDestinationString
5082
 
);
5083
 
    
5084
 
NTSYSAPI
5085
 
NTSTATUS
5086
 
NTAPI
5087
 
RtlUnicodeStringToCountedOemString(
5088
 
    IN OUT POEM_STRING DestinationString,
5089
 
    IN PCUNICODE_STRING SourceString,
5090
 
    IN BOOLEAN AllocateDestinationString
5091
 
);
5092
 
    
5093
 
NTSYSAPI
5094
 
NTSTATUS
5095
 
NTAPI
5096
 
RtlReserveChunk (
5097
 
    IN USHORT       CompressionFormat,
5098
 
    IN OUT PUCHAR   *CompressedBuffer,
5099
 
    IN PUCHAR       EndOfCompressedBufferPlus1,
5100
 
    OUT PUCHAR      *ChunkBuffer,
5101
 
    IN ULONG        ChunkSize
5102
 
);
5103
 
 
5104
 
NTSYSAPI
5105
 
VOID
5106
 
NTAPI
5107
 
RtlSecondsSince1970ToTime (
5108
 
    IN ULONG            SecondsSince1970,
5109
 
    OUT PLARGE_INTEGER  Time
5110
 
);
5111
 
 
5112
 
NTSYSAPI
5113
 
NTSTATUS
5114
 
NTAPI
5115
 
RtlSetGroupSecurityDescriptor (
5116
 
    IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
5117
 
    IN PSID                     Group,
5118
 
    IN BOOLEAN                  GroupDefaulted
5119
 
);
5120
 
 
5121
 
NTSYSAPI
5122
 
NTSTATUS
5123
 
NTAPI
5124
 
RtlSetOwnerSecurityDescriptor (
5125
 
    IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
5126
 
    IN PSID                     Owner,
5127
 
    IN BOOLEAN                  OwnerDefaulted
5128
 
);
5129
 
 
5130
9509
NTSYSAPI
5131
9510
NTSTATUS
5132
9511
NTAPI
5137
9516
    IN BOOLEAN                  SaclDefaulted
5138
9517
);
5139
9518
 
5140
 
NTSYSAPI
5141
 
PUCHAR
5142
 
NTAPI
5143
 
RtlSubAuthorityCountSid (
5144
 
    IN PSID Sid
5145
 
);
5146
 
 
5147
 
NTSYSAPI
5148
 
PULONG
5149
 
NTAPI
5150
 
RtlSubAuthoritySid (
5151
 
    IN PSID    Sid,
5152
 
    IN ULONG   SubAuthority
5153
 
);
5154
 
 
5155
 
NTSYSAPI
5156
 
NTSTATUS
5157
 
NTAPI
5158
 
RtlUnicodeStringToCountedOemString (
5159
 
    IN OUT POEM_STRING  DestinationString,
5160
 
    IN PCUNICODE_STRING SourceString,
5161
 
    IN BOOLEAN          AllocateDestinationString
5162
 
);
5163
 
 
5164
 
NTSYSAPI
5165
 
NTSTATUS
5166
 
NTAPI
5167
 
RtlUnicodeToMultiByteN(
5168
 
    OUT PCHAR MultiByteString,
5169
 
    IN ULONG MaxBytesInMultiByteString,
5170
 
    OUT PULONG BytesInMultiByteString OPTIONAL,
5171
 
    IN PWCH UnicodeString,
5172
 
    IN ULONG BytesInUnicodeString
5173
 
);
5174
 
 
5175
 
NTSYSAPI
5176
 
NTSTATUS
5177
 
NTAPI
5178
 
RtlOemToUnicodeN(
5179
 
    OUT PWSTR UnicodeString,
5180
 
    IN ULONG MaxBytesInUnicodeString,
5181
 
    OUT PULONG BytesInUnicodeString OPTIONAL,
5182
 
    IN PCH OemString,
5183
 
    IN ULONG BytesInOemString
5184
 
);
5185
 
 
5186
 
/* RTL Splay Tree Functions */
5187
 
NTSYSAPI
5188
 
PRTL_SPLAY_LINKS
5189
 
NTAPI
5190
 
RtlSplay(PRTL_SPLAY_LINKS Links);
5191
 
 
5192
 
NTSYSAPI
5193
 
PRTL_SPLAY_LINKS
5194
 
NTAPI
5195
 
RtlDelete(PRTL_SPLAY_LINKS Links);
5196
 
 
5197
 
NTSYSAPI
5198
 
VOID
5199
 
NTAPI
5200
 
RtlDeleteNoSplay(
5201
 
    PRTL_SPLAY_LINKS Links,
5202
 
    PRTL_SPLAY_LINKS *Root
5203
 
);
5204
 
 
5205
 
NTSYSAPI
5206
 
PRTL_SPLAY_LINKS
5207
 
NTAPI
5208
 
RtlSubtreeSuccessor(PRTL_SPLAY_LINKS Links);
5209
 
 
5210
 
NTSYSAPI
5211
 
PRTL_SPLAY_LINKS
5212
 
NTAPI
5213
 
RtlSubtreePredecessor(PRTL_SPLAY_LINKS Links);
5214
 
 
5215
 
NTSYSAPI
5216
 
PRTL_SPLAY_LINKS
5217
 
NTAPI
5218
 
RtlRealSuccessor(PRTL_SPLAY_LINKS Links);
5219
 
 
5220
 
NTSYSAPI
5221
 
PRTL_SPLAY_LINKS
5222
 
NTAPI
5223
 
RtlRealPredecessor(PRTL_SPLAY_LINKS Links);
5224
 
 
5225
 
#define RtlIsLeftChild(Links) \
5226
 
    (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
5227
 
 
5228
 
#define RtlIsRightChild(Links) \
5229
 
    (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
5230
 
 
5231
 
#define RtlRightChild(Links) \
5232
 
    ((PRTL_SPLAY_LINKS)(Links))->RightChild
5233
 
 
5234
 
#define RtlIsRoot(Links) \
5235
 
    (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
5236
 
 
5237
 
#define RtlLeftChild(Links) \
5238
 
    ((PRTL_SPLAY_LINKS)(Links))->LeftChild
5239
 
 
5240
 
#define RtlParent(Links) \
5241
 
    ((PRTL_SPLAY_LINKS)(Links))->Parent
5242
 
 
5243
 
#define RtlInitializeSplayLinks(Links)                  \
5244
 
    {                                                   \
5245
 
        PRTL_SPLAY_LINKS _SplayLinks;                   \
5246
 
        _SplayLinks = (PRTL_SPLAY_LINKS)(Links);        \
5247
 
        _SplayLinks->Parent = _SplayLinks;              \
5248
 
        _SplayLinks->LeftChild = NULL;                  \
5249
 
        _SplayLinks->RightChild = NULL;                 \
5250
 
    }
5251
 
 
5252
 
#define RtlInsertAsLeftChild(ParentLinks,ChildLinks)    \
5253
 
    {                                                   \
5254
 
        PRTL_SPLAY_LINKS _SplayParent;                  \
5255
 
        PRTL_SPLAY_LINKS _SplayChild;                   \
5256
 
        _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
5257
 
        _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks);   \
5258
 
        _SplayParent->LeftChild = _SplayChild;          \
5259
 
        _SplayChild->Parent = _SplayParent;             \
5260
 
    }
5261
 
 
5262
 
#define RtlInsertAsRightChild(ParentLinks,ChildLinks)   \
5263
 
    {                                                   \
5264
 
        PRTL_SPLAY_LINKS _SplayParent;                  \
5265
 
        PRTL_SPLAY_LINKS _SplayChild;                   \
5266
 
        _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
5267
 
        _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks);   \
5268
 
        _SplayParent->RightChild = _SplayChild;         \
5269
 
        _SplayChild->Parent = _SplayParent;             \
5270
 
    }
5271
 
 
5272
 
NTSYSAPI
5273
 
BOOLEAN
5274
 
NTAPI
5275
 
RtlValidSid (
5276
 
    IN PSID Sid
5277
 
);
5278
 
 
5279
 
//
5280
 
// RTL time functions
5281
 
//
5282
 
 
5283
 
NTSYSAPI
5284
 
BOOLEAN
5285
 
NTAPI
5286
 
RtlTimeToSecondsSince1980 (
5287
 
    PLARGE_INTEGER Time,
5288
 
    PULONG ElapsedSeconds
5289
 
);
5290
 
 
5291
 
NTSYSAPI
5292
 
VOID
5293
 
NTAPI
5294
 
RtlSecondsSince1980ToTime (
5295
 
    ULONG ElapsedSeconds,
5296
 
    PLARGE_INTEGER Time
5297
 
);
5298
 
 
5299
 
NTSYSAPI
5300
 
BOOLEAN
5301
 
NTAPI
5302
 
RtlTimeToSecondsSince1970 (
5303
 
    PLARGE_INTEGER Time,
5304
 
    PULONG ElapsedSeconds
5305
 
);
5306
 
 
5307
 
NTSYSAPI
5308
 
VOID
5309
 
NTAPI
5310
 
RtlSecondsSince1970ToTime (
5311
 
    ULONG ElapsedSeconds,
5312
 
    PLARGE_INTEGER Time
5313
 
);
5314
 
 
5315
 
NTKERNELAPI
5316
 
NTSTATUS
5317
 
NTAPI
5318
 
SeAppendPrivileges (
5319
 
    PACCESS_STATE   AccessState,
5320
 
    PPRIVILEGE_SET  Privileges
5321
 
);
5322
 
 
5323
 
NTKERNELAPI
5324
 
BOOLEAN
5325
 
NTAPI
5326
 
SeAuditingFileEvents (
5327
 
    IN BOOLEAN              AccessGranted,
5328
 
    IN PSECURITY_DESCRIPTOR SecurityDescriptor
5329
 
);
5330
 
 
5331
 
NTKERNELAPI
5332
 
BOOLEAN
5333
 
NTAPI
5334
 
SeAuditingFileOrGlobalEvents (
5335
 
    IN BOOLEAN                      AccessGranted,
5336
 
    IN PSECURITY_DESCRIPTOR         SecurityDescriptor,
5337
 
    IN PSECURITY_SUBJECT_CONTEXT    SubjectContext
5338
 
);
5339
 
 
5340
 
NTKERNELAPI
5341
 
VOID
5342
 
NTAPI
5343
 
SeCaptureSubjectContext (
5344
 
    OUT PSECURITY_SUBJECT_CONTEXT SubjectContext
5345
 
);
5346
 
 
5347
 
NTKERNELAPI
5348
 
NTSTATUS
5349
 
NTAPI
5350
 
SeCreateClientSecurity (
5351
 
    IN PETHREAD                     Thread,
5352
 
    IN PSECURITY_QUALITY_OF_SERVICE QualityOfService,
5353
 
    IN BOOLEAN                      RemoteClient,
5354
 
    OUT PSECURITY_CLIENT_CONTEXT    ClientContext
5355
 
);
5356
 
 
5357
 
#if (VER_PRODUCTBUILD >= 2195)
5358
 
 
5359
 
NTKERNELAPI
5360
 
NTSTATUS
5361
 
NTAPI
5362
 
SeCreateClientSecurityFromSubjectContext (
5363
 
    IN PSECURITY_SUBJECT_CONTEXT    SubjectContext,
5364
 
    IN PSECURITY_QUALITY_OF_SERVICE QualityOfService,
5365
 
    IN BOOLEAN                      ServerIsRemote,
5366
 
    OUT PSECURITY_CLIENT_CONTEXT    ClientContext
5367
 
);
5368
 
 
5369
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
5370
 
 
5371
 
 
5372
 
#define SeLengthSid( Sid ) \
5373
 
    (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
5374
 
 
5375
 
#define SeDeleteClientSecurity(C)  {                                           \
5376
 
            if (SeTokenType((C)->ClientToken) == TokenPrimary) {               \
5377
 
                PsDereferencePrimaryToken( (C)->ClientToken );                 \
5378
 
            } else {                                                           \
5379
 
                PsDereferenceImpersonationToken( (C)->ClientToken );           \
5380
 
            }                                                                  \
5381
 
}
5382
 
 
5383
 
NTKERNELAPI
5384
 
VOID
5385
 
NTAPI
5386
 
SeDeleteObjectAuditAlarm (
5387
 
    IN PVOID    Object,
5388
 
    IN HANDLE   Handle
5389
 
);
5390
 
 
5391
9519
#define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
5392
9520
 
5393
 
NTKERNELAPI
5394
 
VOID
5395
 
NTAPI
5396
 
SeFreePrivileges (
5397
 
    IN PPRIVILEGE_SET Privileges
5398
 
);
5399
 
 
5400
 
NTKERNELAPI
5401
 
VOID
5402
 
NTAPI
5403
 
SeImpersonateClient (
5404
 
    IN PSECURITY_CLIENT_CONTEXT ClientContext,
5405
 
    IN PETHREAD                 ServerThread OPTIONAL
5406
 
);
5407
 
 
5408
 
#if (VER_PRODUCTBUILD >= 2195)
5409
 
 
5410
 
NTKERNELAPI
5411
 
NTSTATUS
5412
 
NTAPI
5413
 
SeImpersonateClientEx (
5414
 
    IN PSECURITY_CLIENT_CONTEXT ClientContext,
5415
 
    IN PETHREAD                 ServerThread OPTIONAL
5416
 
);
5417
 
 
5418
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
5419
 
 
5420
 
NTKERNELAPI
5421
 
VOID
5422
 
NTAPI
5423
 
SeLockSubjectContext (
5424
 
    IN PSECURITY_SUBJECT_CONTEXT SubjectContext
5425
 
);
5426
 
 
5427
 
NTKERNELAPI
5428
 
NTSTATUS
5429
 
NTAPI
5430
 
SeMarkLogonSessionForTerminationNotification (
5431
 
    IN PLUID LogonId
5432
 
);
5433
 
 
5434
 
NTKERNELAPI
5435
 
VOID
5436
 
NTAPI
5437
 
SeOpenObjectAuditAlarm (
5438
 
    IN PUNICODE_STRING      ObjectTypeName,
5439
 
    IN PVOID                Object OPTIONAL,
5440
 
    IN PUNICODE_STRING      AbsoluteObjectName OPTIONAL,
5441
 
    IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5442
 
    IN PACCESS_STATE        AccessState,
5443
 
    IN BOOLEAN              ObjectCreated,
5444
 
    IN BOOLEAN              AccessGranted,
5445
 
    IN KPROCESSOR_MODE      AccessMode,
5446
 
    OUT PBOOLEAN            GenerateOnClose
5447
 
);
5448
 
 
5449
 
NTKERNELAPI
5450
 
VOID
5451
 
NTAPI
5452
 
SeOpenObjectForDeleteAuditAlarm (
5453
 
    IN PUNICODE_STRING      ObjectTypeName,
5454
 
    IN PVOID                Object OPTIONAL,
5455
 
    IN PUNICODE_STRING      AbsoluteObjectName OPTIONAL,
5456
 
    IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5457
 
    IN PACCESS_STATE        AccessState,
5458
 
    IN BOOLEAN              ObjectCreated,
5459
 
    IN BOOLEAN              AccessGranted,
5460
 
    IN KPROCESSOR_MODE      AccessMode,
5461
 
    OUT PBOOLEAN            GenerateOnClose
5462
 
);
5463
 
 
5464
 
NTKERNELAPI
5465
 
BOOLEAN
5466
 
NTAPI
5467
 
SePrivilegeCheck (
5468
 
    IN OUT PPRIVILEGE_SET           RequiredPrivileges,
5469
 
    IN PSECURITY_SUBJECT_CONTEXT    SubjectContext,
5470
 
    IN KPROCESSOR_MODE              AccessMode
5471
 
);
5472
 
 
5473
 
NTKERNELAPI
5474
 
NTSTATUS
5475
 
NTAPI
5476
 
SeQueryAuthenticationIdToken (
5477
 
    IN PACCESS_TOKEN    Token,
5478
 
    OUT PLUID           LogonId
5479
 
);
5480
 
 
5481
 
#if (VER_PRODUCTBUILD >= 2195)
5482
 
 
5483
 
NTKERNELAPI
5484
 
NTSTATUS
5485
 
NTAPI
5486
 
SeQueryInformationToken (
5487
 
    IN PACCESS_TOKEN           Token,
5488
 
    IN TOKEN_INFORMATION_CLASS TokenInformationClass,
5489
 
    OUT PVOID                  *TokenInformation
5490
 
);
5491
 
 
5492
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
5493
 
 
5494
 
NTKERNELAPI
5495
 
NTSTATUS
5496
 
NTAPI
5497
 
SeQuerySecurityDescriptorInfo (
5498
 
    IN PSECURITY_INFORMATION    SecurityInformation,
5499
 
    OUT PSECURITY_DESCRIPTOR    SecurityDescriptor,
5500
 
    IN OUT PULONG               Length,
5501
 
    IN PSECURITY_DESCRIPTOR     *ObjectsSecurityDescriptor
5502
 
);
5503
 
 
5504
 
#if (VER_PRODUCTBUILD >= 2195)
5505
 
 
5506
 
NTKERNELAPI
5507
 
NTSTATUS
5508
 
NTAPI
5509
 
SeQuerySessionIdToken (
5510
 
    IN PACCESS_TOKEN    Token,
5511
 
    IN PULONG           SessionId
5512
 
);
5513
 
 
5514
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
5515
 
 
5516
 
#define SeQuerySubjectContextToken( SubjectContext )                \
5517
 
    ( ARGUMENT_PRESENT(                                             \
5518
 
        ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken   \
5519
 
        ) ?                                                         \
5520
 
    ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken :     \
5521
 
    ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
5522
 
 
5523
 
typedef NTSTATUS (NTAPI *PSE_LOGON_SESSION_TERMINATED_ROUTINE) (
5524
 
    IN PLUID LogonId
5525
 
);
5526
 
 
5527
 
NTKERNELAPI
5528
 
NTSTATUS
5529
 
NTAPI
5530
 
SeRegisterLogonSessionTerminatedRoutine (
5531
 
    IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
5532
 
);
5533
 
 
5534
 
NTKERNELAPI
5535
 
VOID
5536
 
NTAPI
5537
 
SeReleaseSubjectContext (
5538
 
    IN PSECURITY_SUBJECT_CONTEXT SubjectContext
5539
 
);
5540
 
 
5541
 
NTKERNELAPI
5542
 
VOID
5543
 
NTAPI
5544
 
SeSetAccessStateGenericMapping (
5545
 
    PACCESS_STATE       AccessState,
5546
 
    PGENERIC_MAPPING    GenericMapping
5547
 
);
5548
 
 
5549
 
NTKERNELAPI
5550
 
NTSTATUS
5551
 
NTAPI
5552
 
SeSetSecurityDescriptorInfo (
5553
 
    IN PVOID                    Object OPTIONAL,
5554
 
    IN PSECURITY_INFORMATION    SecurityInformation,
5555
 
    IN PSECURITY_DESCRIPTOR     SecurityDescriptor,
5556
 
    IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
5557
 
    IN POOL_TYPE                PoolType,
5558
 
    IN PGENERIC_MAPPING         GenericMapping
5559
 
);
5560
 
 
5561
 
#if (VER_PRODUCTBUILD >= 2195)
5562
 
 
5563
 
NTKERNELAPI
5564
 
NTSTATUS
5565
 
NTAPI
5566
 
SeSetSecurityDescriptorInfoEx (
5567
 
    IN PVOID                    Object OPTIONAL,
5568
 
    IN PSECURITY_INFORMATION    SecurityInformation,
5569
 
    IN PSECURITY_DESCRIPTOR     ModificationDescriptor,
5570
 
    IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
5571
 
    IN ULONG                    AutoInheritFlags,
5572
 
    IN POOL_TYPE                PoolType,
5573
 
    IN PGENERIC_MAPPING         GenericMapping
5574
 
);
5575
 
 
5576
 
NTKERNELAPI
5577
 
BOOLEAN
5578
 
NTAPI
5579
 
SeTokenIsAdmin (
5580
 
    IN PACCESS_TOKEN Token
5581
 
);
5582
 
 
5583
 
NTKERNELAPI
5584
 
BOOLEAN
5585
 
NTAPI
5586
 
SeTokenIsRestricted (
5587
 
    IN PACCESS_TOKEN Token
5588
 
);
5589
 
 
5590
 
 
5591
 
NTSTATUS
5592
 
NTAPI
5593
 
SeLocateProcessImageName(
5594
 
    IN PEPROCESS Process,
5595
 
    OUT PUNICODE_STRING *pImageFileName
5596
 
);
5597
 
 
5598
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
5599
 
 
5600
 
NTKERNELAPI
5601
 
TOKEN_TYPE
5602
 
NTAPI
5603
 
SeTokenType (
5604
 
    IN PACCESS_TOKEN Token
5605
 
);
5606
 
 
5607
 
NTKERNELAPI
5608
 
VOID
5609
 
NTAPI
5610
 
SeUnlockSubjectContext (
5611
 
    IN PSECURITY_SUBJECT_CONTEXT SubjectContext
5612
 
);
5613
 
 
5614
 
NTKERNELAPI
5615
 
NTSTATUS
5616
 
NTAPI
5617
 
SeUnregisterLogonSessionTerminatedRoutine (
5618
 
    IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine
5619
 
);
5620
 
 
5621
9521
#if (VER_PRODUCTBUILD >= 2195)
5622
9522
 
5623
9523
NTSYSAPI
5644
9544
NTSYSAPI
5645
9545
NTSTATUS
5646
9546
NTAPI
5647
 
ZwAllocateVirtualMemory (
5648
 
    IN HANDLE       ProcessHandle,
5649
 
    IN OUT PVOID    *BaseAddress,
5650
 
    IN ULONG_PTR    ZeroBits,
5651
 
    IN OUT PSIZE_T  RegionSize,
5652
 
    IN ULONG        AllocationType,
5653
 
    IN ULONG        Protect
5654
 
);
5655
 
 
5656
 
NTSTATUS
5657
 
NTAPI
5658
 
NtAccessCheckByTypeAndAuditAlarm(
5659
 
    IN PUNICODE_STRING SubsystemName,
5660
 
    IN HANDLE HandleId,
5661
 
    IN PUNICODE_STRING ObjectTypeName,
5662
 
    IN PUNICODE_STRING ObjectName,
5663
 
    IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5664
 
    IN PSID PrincipalSelfSid,
5665
 
    IN ACCESS_MASK DesiredAccess,
5666
 
    IN AUDIT_EVENT_TYPE AuditType,
5667
 
    IN ULONG Flags,
5668
 
    IN POBJECT_TYPE_LIST ObjectTypeList,
5669
 
    IN ULONG ObjectTypeLength,
5670
 
    IN PGENERIC_MAPPING GenericMapping,
5671
 
    IN BOOLEAN ObjectCreation,
5672
 
    OUT PACCESS_MASK GrantedAccess,
5673
 
    OUT PNTSTATUS AccessStatus,
5674
 
    OUT PBOOLEAN GenerateOnClose
5675
 
);
5676
 
 
5677
 
NTSTATUS
5678
 
NTAPI
5679
 
NtAccessCheckByTypeResultListAndAuditAlarm(
5680
 
    IN PUNICODE_STRING SubsystemName,
5681
 
    IN HANDLE HandleId,
5682
 
    IN PUNICODE_STRING ObjectTypeName,
5683
 
    IN PUNICODE_STRING ObjectName,
5684
 
    IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5685
 
    IN PSID PrincipalSelfSid,
5686
 
    IN ACCESS_MASK DesiredAccess,
5687
 
    IN AUDIT_EVENT_TYPE AuditType,
5688
 
    IN ULONG Flags,
5689
 
    IN POBJECT_TYPE_LIST ObjectTypeList,
5690
 
    IN ULONG ObjectTypeLength,
5691
 
    IN PGENERIC_MAPPING GenericMapping,
5692
 
    IN BOOLEAN ObjectCreation,
5693
 
    OUT PACCESS_MASK GrantedAccess,
5694
 
    OUT PNTSTATUS AccessStatus,
5695
 
    OUT PBOOLEAN GenerateOnClose
5696
 
);
5697
 
 
5698
 
NTSTATUS
5699
 
NTAPI
5700
 
NtAccessCheckByTypeResultListAndAuditAlarmByHandle(
5701
 
    IN PUNICODE_STRING SubsystemName,
5702
 
    IN HANDLE HandleId,
5703
 
    IN HANDLE ClientToken,
5704
 
    IN PUNICODE_STRING ObjectTypeName,
5705
 
    IN PUNICODE_STRING ObjectName,
5706
 
    IN PSECURITY_DESCRIPTOR SecurityDescriptor,
5707
 
    IN PSID PrincipalSelfSid,
5708
 
    IN ACCESS_MASK DesiredAccess,
5709
 
    IN AUDIT_EVENT_TYPE AuditType,
5710
 
    IN ULONG Flags,
5711
 
    IN POBJECT_TYPE_LIST ObjectTypeList,
5712
 
    IN ULONG ObjectTypeLength,
5713
 
    IN PGENERIC_MAPPING GenericMapping,
5714
 
    IN BOOLEAN ObjectCreation,
5715
 
    OUT PACCESS_MASK GrantedAccess,
5716
 
    OUT PNTSTATUS AccessStatus,
5717
 
    OUT PBOOLEAN GenerateOnClose
5718
 
);
5719
 
 
5720
 
NTSYSAPI
5721
 
NTSTATUS
5722
 
NTAPI
5723
9547
ZwAccessCheckAndAuditAlarm (
5724
9548
    IN PUNICODE_STRING      SubsystemName,
5725
9549
    IN PVOID                HandleId,
5765
9589
NTSYSAPI
5766
9590
NTSTATUS
5767
9591
NTAPI
5768
 
ZwCreateSection (
5769
 
    OUT PHANDLE             SectionHandle,
5770
 
    IN ACCESS_MASK          DesiredAccess,
5771
 
    IN POBJECT_ATTRIBUTES   ObjectAttributes OPTIONAL,
5772
 
    IN PLARGE_INTEGER       MaximumSize OPTIONAL,
5773
 
    IN ULONG                SectionPageProtection,
5774
 
    IN ULONG                AllocationAttributes,
5775
 
    IN HANDLE               FileHandle OPTIONAL
5776
 
);
5777
 
 
5778
 
NTSYSAPI
5779
 
NTSTATUS
5780
 
NTAPI
5781
9592
ZwCreateSymbolicLinkObject (
5782
9593
    OUT PHANDLE             SymbolicLinkHandle,
5783
9594
    IN ACCESS_MASK          DesiredAccess,
5788
9599
NTSYSAPI
5789
9600
NTSTATUS
5790
9601
NTAPI
5791
 
ZwDeleteFile (
5792
 
    IN POBJECT_ATTRIBUTES ObjectAttributes
5793
 
);
5794
 
 
5795
 
NTSYSAPI
5796
 
NTSTATUS
5797
 
NTAPI
5798
 
ZwDeleteValueKey (
5799
 
    IN HANDLE           Handle,
5800
 
    IN PUNICODE_STRING  Name
5801
 
);
5802
 
 
5803
 
NTSYSAPI
5804
 
NTSTATUS
5805
 
NTAPI
5806
 
ZwDeviceIoControlFile (
5807
 
    IN HANDLE               FileHandle,
5808
 
    IN HANDLE               Event OPTIONAL,
5809
 
    IN PIO_APC_ROUTINE      ApcRoutine OPTIONAL,
5810
 
    IN PVOID                ApcContext OPTIONAL,
5811
 
    OUT PIO_STATUS_BLOCK    IoStatusBlock,
5812
 
    IN ULONG                IoControlCode,
5813
 
    IN PVOID                InputBuffer OPTIONAL,
5814
 
    IN ULONG                InputBufferLength,
5815
 
    OUT PVOID               OutputBuffer OPTIONAL,
5816
 
    IN ULONG                OutputBufferLength
5817
 
);
5818
 
 
5819
 
NTSYSAPI
5820
 
NTSTATUS
5821
 
NTAPI
5822
 
ZwDisplayString (
5823
 
    IN PUNICODE_STRING String
5824
 
);
5825
 
 
5826
 
NTSYSAPI
5827
 
NTSTATUS
5828
 
NTAPI
5829
 
ZwDuplicateObject (
5830
 
    IN HANDLE       SourceProcessHandle,
5831
 
    IN HANDLE       SourceHandle,
5832
 
    IN HANDLE       TargetProcessHandle OPTIONAL,
5833
 
    OUT PHANDLE     TargetHandle OPTIONAL,
5834
 
    IN ACCESS_MASK  DesiredAccess,
5835
 
    IN ULONG        HandleAttributes,
5836
 
    IN ULONG        Options
5837
 
);
5838
 
 
5839
 
NTSYSAPI
5840
 
NTSTATUS
5841
 
NTAPI
5842
 
ZwDuplicateToken (
5843
 
    IN HANDLE               ExistingTokenHandle,
5844
 
    IN ACCESS_MASK          DesiredAccess,
5845
 
    IN POBJECT_ATTRIBUTES   ObjectAttributes,
5846
 
    IN BOOLEAN              EffectiveOnly,
5847
 
    IN TOKEN_TYPE           TokenType,
5848
 
    OUT PHANDLE             NewTokenHandle
5849
 
);
5850
 
 
5851
 
NTSTATUS
5852
 
NTAPI
5853
 
NtFilterToken(
5854
 
    IN HANDLE ExistingTokenHandle,
5855
 
    IN ULONG Flags,
5856
 
    IN PTOKEN_GROUPS SidsToDisable OPTIONAL,
5857
 
    IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL,
5858
 
    IN PTOKEN_GROUPS RestrictedSids OPTIONAL,
5859
 
    OUT PHANDLE NewTokenHandle
5860
 
);
5861
 
 
5862
 
NTSYSAPI
5863
 
NTSTATUS
5864
 
NTAPI
5865
9602
ZwFlushInstructionCache (
5866
9603
    IN HANDLE   ProcessHandle,
5867
9604
    IN PVOID    BaseAddress OPTIONAL,
5881
9618
NTSYSAPI
5882
9619
NTSTATUS
5883
9620
NTAPI
5884
 
ZwFlushVirtualMemory (
5885
 
    IN HANDLE               ProcessHandle,
5886
 
    IN OUT PVOID            *BaseAddress,
5887
 
    IN OUT PULONG           FlushSize,
5888
 
    OUT PIO_STATUS_BLOCK    IoStatusBlock
5889
 
);
5890
 
 
5891
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
5892
 
 
5893
 
NTSYSAPI
5894
 
NTSTATUS
5895
 
NTAPI
5896
 
ZwFreeVirtualMemory (
5897
 
    IN HANDLE       ProcessHandle,
5898
 
    IN OUT PVOID    *BaseAddress,
5899
 
    IN OUT PSIZE_T  RegionSize,
5900
 
    IN ULONG        FreeType
5901
 
);
5902
 
 
5903
 
NTSYSAPI
5904
 
NTSTATUS
5905
 
NTAPI
5906
 
ZwFsControlFile (
5907
 
    IN HANDLE               FileHandle,
5908
 
    IN HANDLE               Event OPTIONAL,
5909
 
    IN PIO_APC_ROUTINE      ApcRoutine OPTIONAL,
5910
 
    IN PVOID                ApcContext OPTIONAL,
5911
 
    OUT PIO_STATUS_BLOCK    IoStatusBlock,
5912
 
    IN ULONG                FsControlCode,
5913
 
    IN PVOID                InputBuffer OPTIONAL,
5914
 
    IN ULONG                InputBufferLength,
5915
 
    OUT PVOID               OutputBuffer OPTIONAL,
5916
 
    IN ULONG                OutputBufferLength
5917
 
);
5918
 
 
5919
 
#if (VER_PRODUCTBUILD >= 2195)
5920
 
 
5921
 
NTSYSAPI
5922
 
NTSTATUS
5923
 
NTAPI
5924
9621
ZwInitiatePowerAction (
5925
9622
    IN POWER_ACTION         SystemAction,
5926
9623
    IN SYSTEM_POWER_STATE   MinSystemState,
5933
9630
NTSYSAPI
5934
9631
NTSTATUS
5935
9632
NTAPI
5936
 
ZwLoadDriver (
5937
 
    /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
5938
 
    IN PUNICODE_STRING RegistryPath
5939
 
);
5940
 
 
5941
 
NTSYSAPI
5942
 
NTSTATUS
5943
 
NTAPI
5944
9633
ZwLoadKey (
5945
9634
    IN POBJECT_ATTRIBUTES KeyObjectAttributes,
5946
9635
    IN POBJECT_ATTRIBUTES FileObjectAttributes
5949
9638
NTSYSAPI
5950
9639
NTSTATUS
5951
9640
NTAPI
5952
 
ZwNotifyChangeKey (
5953
 
    IN HANDLE               KeyHandle,
5954
 
    IN HANDLE               EventHandle OPTIONAL,
5955
 
    IN PIO_APC_ROUTINE      ApcRoutine OPTIONAL,
5956
 
    IN PVOID                ApcContext OPTIONAL,
5957
 
    OUT PIO_STATUS_BLOCK    IoStatusBlock,
5958
 
    IN ULONG                NotifyFilter,
5959
 
    IN BOOLEAN              WatchSubtree,
5960
 
    IN PVOID                Buffer,
5961
 
    IN ULONG                BufferLength,
5962
 
    IN BOOLEAN              Asynchronous
5963
 
);
5964
 
 
5965
 
NTSYSAPI
5966
 
NTSTATUS
5967
 
NTAPI
5968
 
ZwOpenDirectoryObject (
5969
 
    OUT PHANDLE             DirectoryHandle,
5970
 
    IN ACCESS_MASK          DesiredAccess,
5971
 
    IN POBJECT_ATTRIBUTES   ObjectAttributes
5972
 
);
5973
 
 
5974
 
NTSYSAPI
5975
 
NTSTATUS
5976
 
NTAPI
5977
 
ZwOpenEvent (
5978
 
    OUT PHANDLE             EventHandle,
5979
 
    IN ACCESS_MASK          DesiredAccess,
5980
 
    IN POBJECT_ATTRIBUTES   ObjectAttributes
5981
 
);
5982
 
 
5983
 
NTSYSAPI
5984
 
NTSTATUS
5985
 
NTAPI
5986
 
ZwOpenProcess (
5987
 
    OUT PHANDLE             ProcessHandle,
5988
 
    IN ACCESS_MASK          DesiredAccess,
5989
 
    IN POBJECT_ATTRIBUTES   ObjectAttributes,
5990
 
    IN PCLIENT_ID           ClientId OPTIONAL
5991
 
);
5992
 
 
5993
 
NTSYSAPI
5994
 
NTSTATUS
5995
 
NTAPI
5996
9641
ZwOpenProcessToken (
5997
9642
    IN HANDLE       ProcessHandle,
5998
9643
    IN ACCESS_MASK  DesiredAccess,
6019
9664
    OUT PHANDLE     TokenHandle
6020
9665
);
6021
9666
 
6022
 
#if (VER_PRODUCTBUILD >= 2195)
6023
 
 
6024
 
NTSYSAPI
6025
 
NTSTATUS
6026
 
NTAPI
6027
 
ZwPowerInformation (
6028
 
    IN POWER_INFORMATION_LEVEL  PowerInformationLevel,
6029
 
    IN PVOID                    InputBuffer OPTIONAL,
6030
 
    IN ULONG                    InputBufferLength,
6031
 
    OUT PVOID                   OutputBuffer OPTIONAL,
6032
 
    IN ULONG                    OutputBufferLength
6033
 
);
6034
 
 
6035
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
6036
 
 
6037
9667
NTSYSAPI
6038
9668
NTSTATUS
6039
9669
NTAPI
6050
9680
    OUT PLCID   Locale
6051
9681
);
6052
9682
 
6053
 
NTSYSAPI
6054
 
NTSTATUS
6055
 
NTAPI
6056
 
ZwQueryDirectoryFile (
6057
 
    IN HANDLE                   FileHandle,
6058
 
    IN HANDLE                   Event OPTIONAL,
6059
 
    IN PIO_APC_ROUTINE          ApcRoutine OPTIONAL,
6060
 
    IN PVOID                    ApcContext OPTIONAL,
6061
 
    OUT PIO_STATUS_BLOCK        IoStatusBlock,
6062
 
    OUT PVOID                   FileInformation,
6063
 
    IN ULONG                    Length,
6064
 
    IN FILE_INFORMATION_CLASS   FileInformationClass,
6065
 
    IN BOOLEAN                  ReturnSingleEntry,
6066
 
    IN PUNICODE_STRING          FileName OPTIONAL,
6067
 
    IN BOOLEAN                  RestartScan
6068
 
);
6069
 
 
6070
9683
#if (VER_PRODUCTBUILD >= 2195)
6071
9684
 
6072
9685
NTSYSAPI
6082
9695
    OUT PULONG      ReturnLength OPTIONAL
6083
9696
);
6084
9697
 
6085
 
NTSYSAPI
6086
 
NTSTATUS
6087
 
NTAPI
6088
 
ZwQueryEaFile (
6089
 
    IN HANDLE               FileHandle,
6090
 
    OUT PIO_STATUS_BLOCK    IoStatusBlock,
6091
 
    OUT PVOID               Buffer,
6092
 
    IN ULONG                Length,
6093
 
    IN BOOLEAN              ReturnSingleEntry,
6094
 
    IN PVOID                EaList OPTIONAL,
6095
 
    IN ULONG                EaListLength,
6096
 
    IN PULONG               EaIndex OPTIONAL,
6097
 
    IN BOOLEAN              RestartScan
6098
 
);
6099
 
 
6100
9698
#endif /* (VER_PRODUCTBUILD >= 2195) */
6101
9699
 
6102
9700
NTSYSAPI
6113
9711
NTSYSAPI
6114
9712
NTSTATUS
6115
9713
NTAPI
6116
 
ZwQueryInformationToken (
6117
 
    IN HANDLE                   TokenHandle,
6118
 
    IN TOKEN_INFORMATION_CLASS  TokenInformationClass,
6119
 
    OUT PVOID                   TokenInformation,
6120
 
    IN ULONG                    Length,
6121
 
    OUT PULONG                  ResultLength
6122
 
);
6123
 
 
6124
 
NTSYSAPI
6125
 
NTSTATUS
6126
 
NTAPI
6127
 
ZwQuerySecurityObject (
6128
 
    IN HANDLE                   FileHandle,
6129
 
    IN SECURITY_INFORMATION     SecurityInformation,
6130
 
    OUT PSECURITY_DESCRIPTOR    SecurityDescriptor,
6131
 
    IN ULONG                    Length,
6132
 
    OUT PULONG                  ResultLength
6133
 
);
6134
 
 
6135
 
NTSYSAPI
6136
 
NTSTATUS
6137
 
NTAPI
6138
 
ZwQueryVolumeInformationFile (
6139
 
    IN HANDLE               FileHandle,
6140
 
    OUT PIO_STATUS_BLOCK    IoStatusBlock,
6141
 
    OUT PVOID               FsInformation,
6142
 
    IN ULONG                Length,
6143
 
    IN FS_INFORMATION_CLASS FsInformationClass
6144
 
);
6145
 
 
6146
 
NTSYSAPI
6147
 
NTSTATUS
6148
 
NTAPI
6149
9714
ZwReplaceKey (
6150
9715
    IN POBJECT_ATTRIBUTES   NewFileObjectAttributes,
6151
9716
    IN HANDLE               KeyHandle,
6198
9763
    IN LANGID LanguageId
6199
9764
);
6200
9765
 
6201
 
NTSYSAPI
6202
 
NTSTATUS
6203
 
NTAPI
6204
 
ZwSetEaFile (
6205
 
    IN HANDLE               FileHandle,
6206
 
    OUT PIO_STATUS_BLOCK    IoStatusBlock,
6207
 
    OUT PVOID               Buffer,
6208
 
    IN ULONG                Length
6209
 
);
6210
 
 
6211
9766
#endif /* (VER_PRODUCTBUILD >= 2195) */
6212
9767
 
6213
9768
NTSYSAPI
6214
9769
NTSTATUS
6215
9770
NTAPI
6216
 
ZwSetEvent (
6217
 
    IN HANDLE   EventHandle,
6218
 
    OUT PLONG   PreviousState OPTIONAL
6219
 
);
6220
 
 
6221
 
NTSYSAPI
6222
 
NTSTATUS
6223
 
NTAPI
6224
9771
ZwSetInformationProcess (
6225
9772
    IN HANDLE           ProcessHandle,
6226
9773
    IN PROCESSINFOCLASS ProcessInformationClass,
6228
9775
    IN ULONG            ProcessInformationLength
6229
9776
);
6230
9777
 
6231
 
#if (VER_PRODUCTBUILD >= 2195)
6232
 
 
6233
 
NTSYSAPI
6234
 
NTSTATUS
6235
 
NTAPI
6236
 
ZwSetSecurityObject (
6237
 
    IN HANDLE               Handle,
6238
 
    IN SECURITY_INFORMATION SecurityInformation,
6239
 
    IN PSECURITY_DESCRIPTOR SecurityDescriptor
6240
 
);
6241
 
 
6242
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
6243
 
 
6244
9778
NTSYSAPI
6245
9779
NTSTATUS
6246
9780
NTAPI
6249
9783
    OUT PLARGE_INTEGER  OldTime OPTIONAL
6250
9784
);
6251
9785
 
6252
 
#if (VER_PRODUCTBUILD >= 2195)
6253
 
 
6254
 
NTSYSAPI
6255
 
NTSTATUS
6256
 
NTAPI
6257
 
ZwSetVolumeInformationFile (
6258
 
    IN HANDLE               FileHandle,
6259
 
    OUT PIO_STATUS_BLOCK    IoStatusBlock,
6260
 
    IN PVOID                FsInformation,
6261
 
    IN ULONG                Length,
6262
 
    IN FS_INFORMATION_CLASS FsInformationClass
6263
 
);
6264
 
 
6265
 
#endif /* (VER_PRODUCTBUILD >= 2195) */
6266
 
 
6267
 
NTSYSAPI
6268
 
NTSTATUS
6269
 
NTAPI
6270
 
ZwTerminateProcess (
6271
 
    IN HANDLE   ProcessHandle OPTIONAL,
6272
 
    IN NTSTATUS ExitStatus
6273
 
);
6274
 
 
6275
 
NTSYSAPI
6276
 
NTSTATUS
6277
 
NTAPI
6278
 
ZwUnloadDriver (
6279
 
    /* "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" */
6280
 
    IN PUNICODE_STRING RegistryPath
6281
 
);
6282
 
 
6283
9786
NTSYSAPI
6284
9787
NTSTATUS
6285
9788
NTAPI
6290
9793
NTSYSAPI
6291
9794
NTSTATUS
6292
9795
NTAPI
6293
 
ZwWaitForSingleObject (
6294
 
    IN HANDLE           Handle,
6295
 
    IN BOOLEAN          Alertable,
6296
 
    IN PLARGE_INTEGER   Timeout OPTIONAL
6297
 
);
6298
 
 
6299
 
NTSYSAPI
6300
 
NTSTATUS
6301
 
NTAPI
6302
9796
ZwWaitForMultipleObjects (
6303
9797
    IN ULONG            HandleCount,
6304
9798
    IN PHANDLE          Handles,
6319
9813
#ifdef __cplusplus
6320
9814
}
6321
9815
#endif
6322
 
 
6323
 
#endif /* _NTIFS_ */