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