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