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