[NDK]
[reactos.git] / include / xdk / ntifs.template.h
1 /*
2 * ntifs.h
3 *
4 * Windows NT Filesystem Driver Developer Kit
5 *
6 * This file is part of the ReactOS DDK package.
7 *
8 * Contributors:
9 * Amine Khaldi
10 * Timo Kreuzer (timo.kreuzer@reactos.org)
11 *
12 * THIS SOFTWARE IS NOT COPYRIGHTED
13 *
14 * This source code is offered for use in the public domain. You may
15 * use, modify or distribute it freely.
16 *
17 * This code is distributed in the hope that it will be useful but
18 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
19 * DISCLAIMED. This includes but is not limited to warranties of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 *
22 */
23
24 #pragma once
25
26 #define _NTIFS_INCLUDED_
27 #define _GNU_NTIFS_
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32
33 /* Dependencies */
34 #include <ntddk.h>
35 #include <excpt.h>
36 #include <ntdef.h>
37 #include <ntnls.h>
38 #include <ntstatus.h>
39 #include <bugcodes.h>
40 #include <ntiologc.h>
41
42 $define (_NTIFS_)
43
44 #ifndef FlagOn
45 #define FlagOn(_F,_SF) ((_F) & (_SF))
46 #endif
47
48 #ifndef BooleanFlagOn
49 #define BooleanFlagOn(F,SF) ((BOOLEAN)(((F) & (SF)) != 0))
50 #endif
51
52 #ifndef SetFlag
53 #define SetFlag(_F,_SF) ((_F) |= (_SF))
54 #endif
55
56 #ifndef ClearFlag
57 #define ClearFlag(_F,_SF) ((_F) &= ~(_SF))
58 #endif
59
60 typedef UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;
61 typedef STRING LSA_STRING, *PLSA_STRING;
62 typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES;
63
64 $include (setypes.h)
65 $include (rtltypes.h)
66 $include (rtlfuncs.h)
67
68 typedef enum _OBJECT_INFORMATION_CLASS {
69 ObjectBasicInformation = 0,
70 ObjectNameInformation = 1, /* FIXME, not in WDK */
71 ObjectTypeInformation = 2,
72 ObjectTypesInformation = 3, /* FIXME, not in WDK */
73 ObjectHandleFlagInformation = 4, /* FIXME, not in WDK */
74 ObjectSessionInformation = 5, /* FIXME, not in WDK */
75 MaxObjectInfoClass /* FIXME, not in WDK */
76 } OBJECT_INFORMATION_CLASS;
77
78 NTSYSCALLAPI
79 NTSTATUS
80 NTAPI
81 NtQueryObject(
82 IN HANDLE Handle OPTIONAL,
83 IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
84 OUT PVOID ObjectInformation OPTIONAL,
85 IN ULONG ObjectInformationLength,
86 OUT PULONG ReturnLength OPTIONAL);
87
88 #if (NTDDI_VERSION >= NTDDI_WIN2K)
89
90 NTSYSCALLAPI
91 NTSTATUS
92 NTAPI
93 NtOpenThreadToken(
94 IN HANDLE ThreadHandle,
95 IN ACCESS_MASK DesiredAccess,
96 IN BOOLEAN OpenAsSelf,
97 OUT PHANDLE TokenHandle);
98
99 NTSYSCALLAPI
100 NTSTATUS
101 NTAPI
102 NtOpenProcessToken(
103 IN HANDLE ProcessHandle,
104 IN ACCESS_MASK DesiredAccess,
105 OUT PHANDLE TokenHandle);
106
107 NTSYSCALLAPI
108 NTSTATUS
109 NTAPI
110 NtQueryInformationToken(
111 IN HANDLE TokenHandle,
112 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
113 OUT PVOID TokenInformation OPTIONAL,
114 IN ULONG TokenInformationLength,
115 OUT PULONG ReturnLength);
116
117 NTSYSCALLAPI
118 NTSTATUS
119 NTAPI
120 NtAdjustPrivilegesToken(
121 IN HANDLE TokenHandle,
122 IN BOOLEAN DisableAllPrivileges,
123 IN PTOKEN_PRIVILEGES NewState OPTIONAL,
124 IN ULONG BufferLength,
125 OUT PTOKEN_PRIVILEGES PreviousState,
126 OUT PULONG ReturnLength OPTIONAL);
127
128 NTSYSCALLAPI
129 NTSTATUS
130 NTAPI
131 NtCreateFile(
132 OUT PHANDLE FileHandle,
133 IN ACCESS_MASK DesiredAccess,
134 IN POBJECT_ATTRIBUTES ObjectAttributes,
135 OUT PIO_STATUS_BLOCK IoStatusBlock,
136 IN PLARGE_INTEGER AllocationSize OPTIONAL,
137 IN ULONG FileAttributes,
138 IN ULONG ShareAccess,
139 IN ULONG CreateDisposition,
140 IN ULONG CreateOptions,
141 IN PVOID EaBuffer,
142 IN ULONG EaLength);
143
144 NTSYSCALLAPI
145 NTSTATUS
146 NTAPI
147 NtDeviceIoControlFile(
148 IN HANDLE FileHandle,
149 IN HANDLE Event OPTIONAL,
150 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
151 IN PVOID ApcContext OPTIONAL,
152 OUT PIO_STATUS_BLOCK IoStatusBlock,
153 IN ULONG IoControlCode,
154 IN PVOID InputBuffer OPTIONAL,
155 IN ULONG InputBufferLength,
156 OUT PVOID OutputBuffer OPTIONAL,
157 IN ULONG OutputBufferLength);
158
159 NTSYSCALLAPI
160 NTSTATUS
161 NTAPI
162 NtFsControlFile(
163 IN HANDLE FileHandle,
164 IN HANDLE Event OPTIONAL,
165 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
166 IN PVOID ApcContext OPTIONAL,
167 OUT PIO_STATUS_BLOCK IoStatusBlock,
168 IN ULONG FsControlCode,
169 IN PVOID InputBuffer OPTIONAL,
170 IN ULONG InputBufferLength,
171 OUT PVOID OutputBuffer OPTIONAL,
172 IN ULONG OutputBufferLength);
173
174 NTSYSCALLAPI
175 NTSTATUS
176 NTAPI
177 NtLockFile(
178 IN HANDLE FileHandle,
179 IN HANDLE Event OPTIONAL,
180 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
181 IN PVOID ApcContext OPTIONAL,
182 OUT PIO_STATUS_BLOCK IoStatusBlock,
183 IN PLARGE_INTEGER ByteOffset,
184 IN PLARGE_INTEGER Length,
185 IN ULONG Key,
186 IN BOOLEAN FailImmediately,
187 IN BOOLEAN ExclusiveLock);
188
189 NTSYSCALLAPI
190 NTSTATUS
191 NTAPI
192 NtOpenFile(
193 OUT PHANDLE FileHandle,
194 IN ACCESS_MASK DesiredAccess,
195 IN POBJECT_ATTRIBUTES ObjectAttributes,
196 OUT PIO_STATUS_BLOCK IoStatusBlock,
197 IN ULONG ShareAccess,
198 IN ULONG OpenOptions);
199
200 NTSYSCALLAPI
201 NTSTATUS
202 NTAPI
203 NtQueryDirectoryFile(
204 IN HANDLE FileHandle,
205 IN HANDLE Event OPTIONAL,
206 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
207 IN PVOID ApcContext OPTIONAL,
208 OUT PIO_STATUS_BLOCK IoStatusBlock,
209 OUT PVOID FileInformation,
210 IN ULONG Length,
211 IN FILE_INFORMATION_CLASS FileInformationClass,
212 IN BOOLEAN ReturnSingleEntry,
213 IN PUNICODE_STRING FileName OPTIONAL,
214 IN BOOLEAN RestartScan);
215
216 NTSYSCALLAPI
217 NTSTATUS
218 NTAPI
219 NtQueryInformationFile(
220 IN HANDLE FileHandle,
221 OUT PIO_STATUS_BLOCK IoStatusBlock,
222 OUT PVOID FileInformation,
223 IN ULONG Length,
224 IN FILE_INFORMATION_CLASS FileInformationClass);
225
226 NTSYSCALLAPI
227 NTSTATUS
228 NTAPI
229 NtQueryQuotaInformationFile(
230 IN HANDLE FileHandle,
231 OUT PIO_STATUS_BLOCK IoStatusBlock,
232 OUT PVOID Buffer,
233 IN ULONG Length,
234 IN BOOLEAN ReturnSingleEntry,
235 IN PVOID SidList,
236 IN ULONG SidListLength,
237 IN PSID StartSid OPTIONAL,
238 IN BOOLEAN RestartScan);
239
240 NTSYSCALLAPI
241 NTSTATUS
242 NTAPI
243 NtQueryVolumeInformationFile(
244 IN HANDLE FileHandle,
245 OUT PIO_STATUS_BLOCK IoStatusBlock,
246 OUT PVOID FsInformation,
247 IN ULONG Length,
248 IN FS_INFORMATION_CLASS FsInformationClass);
249
250 NTSYSCALLAPI
251 NTSTATUS
252 NTAPI
253 NtReadFile(
254 IN HANDLE FileHandle,
255 IN HANDLE Event OPTIONAL,
256 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
257 IN PVOID ApcContext OPTIONAL,
258 OUT PIO_STATUS_BLOCK IoStatusBlock,
259 OUT PVOID Buffer,
260 IN ULONG Length,
261 IN PLARGE_INTEGER ByteOffset OPTIONAL,
262 IN PULONG Key OPTIONAL);
263
264 NTSYSCALLAPI
265 NTSTATUS
266 NTAPI
267 NtSetInformationFile(
268 IN HANDLE FileHandle,
269 OUT PIO_STATUS_BLOCK IoStatusBlock,
270 IN PVOID FileInformation,
271 IN ULONG Length,
272 IN FILE_INFORMATION_CLASS FileInformationClass);
273
274 NTSYSCALLAPI
275 NTSTATUS
276 NTAPI
277 NtSetQuotaInformationFile(
278 IN HANDLE FileHandle,
279 OUT PIO_STATUS_BLOCK IoStatusBlock,
280 IN PVOID Buffer,
281 IN ULONG Length);
282
283 NTSYSCALLAPI
284 NTSTATUS
285 NTAPI
286 NtSetVolumeInformationFile(
287 IN HANDLE FileHandle,
288 OUT PIO_STATUS_BLOCK IoStatusBlock,
289 IN PVOID FsInformation,
290 IN ULONG Length,
291 IN FS_INFORMATION_CLASS FsInformationClass);
292
293 NTSYSCALLAPI
294 NTSTATUS
295 NTAPI
296 NtWriteFile(
297 IN HANDLE FileHandle,
298 IN HANDLE Event OPTIONAL,
299 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
300 IN PVOID ApcContext OPTIONAL,
301 OUT PIO_STATUS_BLOCK IoStatusBlock,
302 IN PVOID Buffer,
303 IN ULONG Length,
304 IN PLARGE_INTEGER ByteOffset OPTIONAL,
305 IN PULONG Key OPTIONAL);
306
307 NTSYSCALLAPI
308 NTSTATUS
309 NTAPI
310 NtUnlockFile(
311 IN HANDLE FileHandle,
312 OUT PIO_STATUS_BLOCK IoStatusBlock,
313 IN PLARGE_INTEGER ByteOffset,
314 IN PLARGE_INTEGER Length,
315 IN ULONG Key);
316
317 NTSYSCALLAPI
318 NTSTATUS
319 NTAPI
320 NtSetSecurityObject(
321 IN HANDLE Handle,
322 IN SECURITY_INFORMATION SecurityInformation,
323 IN PSECURITY_DESCRIPTOR SecurityDescriptor);
324
325 NTSYSCALLAPI
326 NTSTATUS
327 NTAPI
328 NtQuerySecurityObject(
329 IN HANDLE Handle,
330 IN SECURITY_INFORMATION SecurityInformation,
331 OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
332 IN ULONG Length,
333 OUT PULONG LengthNeeded);
334
335 NTSYSCALLAPI
336 NTSTATUS
337 NTAPI
338 NtClose(
339 IN HANDLE Handle);
340
341 NTSYSCALLAPI
342 NTSTATUS
343 NTAPI
344 NtAllocateVirtualMemory(
345 IN HANDLE ProcessHandle,
346 IN OUT PVOID *BaseAddress,
347 IN ULONG_PTR ZeroBits,
348 IN OUT PSIZE_T RegionSize,
349 IN ULONG AllocationType,
350 IN ULONG Protect);
351
352 NTSYSCALLAPI
353 NTSTATUS
354 NTAPI
355 NtFreeVirtualMemory(
356 IN HANDLE ProcessHandle,
357 IN OUT PVOID *BaseAddress,
358 IN OUT PSIZE_T RegionSize,
359 IN ULONG FreeType);
360
361 #endif
362
363 #if (NTDDI_VERSION >= NTDDI_WINXP)
364
365 NTSYSCALLAPI
366 NTSTATUS
367 NTAPI
368 NtOpenThreadTokenEx(
369 IN HANDLE ThreadHandle,
370 IN ACCESS_MASK DesiredAccess,
371 IN BOOLEAN OpenAsSelf,
372 IN ULONG HandleAttributes,
373 OUT PHANDLE TokenHandle);
374
375 NTSYSCALLAPI
376 NTSTATUS
377 NTAPI
378 NtOpenProcessTokenEx(
379 IN HANDLE ProcessHandle,
380 IN ACCESS_MASK DesiredAccess,
381 IN ULONG HandleAttributes,
382 OUT PHANDLE TokenHandle);
383
384 NTSYSAPI
385 NTSTATUS
386 NTAPI
387 NtOpenJobObjectToken(
388 IN HANDLE JobHandle,
389 IN ACCESS_MASK DesiredAccess,
390 OUT PHANDLE TokenHandle);
391
392 NTSYSCALLAPI
393 NTSTATUS
394 NTAPI
395 NtDuplicateToken(
396 IN HANDLE ExistingTokenHandle,
397 IN ACCESS_MASK DesiredAccess,
398 IN POBJECT_ATTRIBUTES ObjectAttributes,
399 IN BOOLEAN EffectiveOnly,
400 IN TOKEN_TYPE TokenType,
401 OUT PHANDLE NewTokenHandle);
402
403 NTSYSCALLAPI
404 NTSTATUS
405 NTAPI
406 NtFilterToken(
407 IN HANDLE ExistingTokenHandle,
408 IN ULONG Flags,
409 IN PTOKEN_GROUPS SidsToDisable OPTIONAL,
410 IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL,
411 IN PTOKEN_GROUPS RestrictedSids OPTIONAL,
412 OUT PHANDLE NewTokenHandle);
413
414 NTSYSCALLAPI
415 NTSTATUS
416 NTAPI
417 NtImpersonateAnonymousToken(
418 IN HANDLE ThreadHandle);
419
420 NTSYSCALLAPI
421 NTSTATUS
422 NTAPI
423 NtSetInformationToken(
424 IN HANDLE TokenHandle,
425 IN TOKEN_INFORMATION_CLASS TokenInformationClass,
426 IN PVOID TokenInformation,
427 IN ULONG TokenInformationLength);
428
429 NTSYSCALLAPI
430 NTSTATUS
431 NTAPI
432 NtAdjustGroupsToken(
433 IN HANDLE TokenHandle,
434 IN BOOLEAN ResetToDefault,
435 IN PTOKEN_GROUPS NewState OPTIONAL,
436 IN ULONG BufferLength OPTIONAL,
437 OUT PTOKEN_GROUPS PreviousState,
438 OUT PULONG ReturnLength);
439
440 NTSYSCALLAPI
441 NTSTATUS
442 NTAPI
443 NtPrivilegeCheck(
444 IN HANDLE ClientToken,
445 IN OUT PPRIVILEGE_SET RequiredPrivileges,
446 OUT PBOOLEAN Result);
447
448 NTSYSCALLAPI
449 NTSTATUS
450 NTAPI
451 NtAccessCheckAndAuditAlarm(
452 IN PUNICODE_STRING SubsystemName,
453 IN PVOID HandleId OPTIONAL,
454 IN PUNICODE_STRING ObjectTypeName,
455 IN PUNICODE_STRING ObjectName,
456 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
457 IN ACCESS_MASK DesiredAccess,
458 IN PGENERIC_MAPPING GenericMapping,
459 IN BOOLEAN ObjectCreation,
460 OUT PACCESS_MASK GrantedAccess,
461 OUT PNTSTATUS AccessStatus,
462 OUT PBOOLEAN GenerateOnClose);
463
464 NTSYSCALLAPI
465 NTSTATUS
466 NTAPI
467 NtAccessCheckByTypeAndAuditAlarm(
468 IN PUNICODE_STRING SubsystemName,
469 IN PVOID HandleId,
470 IN PUNICODE_STRING ObjectTypeName,
471 IN PUNICODE_STRING ObjectName,
472 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
473 IN PSID PrincipalSelfSid OPTIONAL,
474 IN ACCESS_MASK DesiredAccess,
475 IN AUDIT_EVENT_TYPE AuditType,
476 IN ULONG Flags,
477 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL,
478 IN ULONG ObjectTypeLength,
479 IN PGENERIC_MAPPING GenericMapping,
480 IN BOOLEAN ObjectCreation,
481 OUT PACCESS_MASK GrantedAccess,
482 OUT PNTSTATUS AccessStatus,
483 OUT PBOOLEAN GenerateOnClose);
484
485 NTSYSCALLAPI
486 NTSTATUS
487 NTAPI
488 NtAccessCheckByTypeResultListAndAuditAlarm(
489 IN PUNICODE_STRING SubsystemName,
490 IN PVOID HandleId OPTIONAL,
491 IN PUNICODE_STRING ObjectTypeName,
492 IN PUNICODE_STRING ObjectName,
493 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
494 IN PSID PrincipalSelfSid OPTIONAL,
495 IN ACCESS_MASK DesiredAccess,
496 IN AUDIT_EVENT_TYPE AuditType,
497 IN ULONG Flags,
498 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL,
499 IN ULONG ObjectTypeLength,
500 IN PGENERIC_MAPPING GenericMapping,
501 IN BOOLEAN ObjectCreation,
502 OUT PACCESS_MASK GrantedAccess,
503 OUT PNTSTATUS AccessStatus,
504 OUT PBOOLEAN GenerateOnClose);
505
506 NTSTATUS
507 NTAPI
508 NtAccessCheckByTypeResultListAndAuditAlarmByHandle(
509 IN PUNICODE_STRING SubsystemName,
510 IN PVOID HandleId OPTIONAL,
511 IN HANDLE ClientToken,
512 IN PUNICODE_STRING ObjectTypeName,
513 IN PUNICODE_STRING ObjectName,
514 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
515 IN PSID PrincipalSelfSid OPTIONAL,
516 IN ACCESS_MASK DesiredAccess,
517 IN AUDIT_EVENT_TYPE AuditType,
518 IN ULONG Flags,
519 IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL,
520 IN ULONG ObjectTypeLength,
521 IN PGENERIC_MAPPING GenericMapping,
522 IN BOOLEAN ObjectCreation,
523 OUT PACCESS_MASK GrantedAccess,
524 OUT PNTSTATUS AccessStatus,
525 OUT PBOOLEAN GenerateOnClose);
526
527 NTSYSCALLAPI
528 NTSTATUS
529 NTAPI
530 NtOpenObjectAuditAlarm(
531 IN PUNICODE_STRING SubsystemName,
532 IN PVOID HandleId OPTIONAL,
533 IN PUNICODE_STRING ObjectTypeName,
534 IN PUNICODE_STRING ObjectName,
535 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
536 IN HANDLE ClientToken,
537 IN ACCESS_MASK DesiredAccess,
538 IN ACCESS_MASK GrantedAccess,
539 IN PPRIVILEGE_SET Privileges OPTIONAL,
540 IN BOOLEAN ObjectCreation,
541 IN BOOLEAN AccessGranted,
542 OUT PBOOLEAN GenerateOnClose);
543
544 NTSYSCALLAPI
545 NTSTATUS
546 NTAPI
547 NtPrivilegeObjectAuditAlarm(
548 IN PUNICODE_STRING SubsystemName,
549 IN PVOID HandleId OPTIONAL,
550 IN HANDLE ClientToken,
551 IN ACCESS_MASK DesiredAccess,
552 IN PPRIVILEGE_SET Privileges,
553 IN BOOLEAN AccessGranted);
554
555 NTSYSCALLAPI
556 NTSTATUS
557 NTAPI
558 NtCloseObjectAuditAlarm(
559 IN PUNICODE_STRING SubsystemName,
560 IN PVOID HandleId OPTIONAL,
561 IN BOOLEAN GenerateOnClose);
562
563 NTSYSCALLAPI
564 NTSTATUS
565 NTAPI
566 NtDeleteObjectAuditAlarm(
567 IN PUNICODE_STRING SubsystemName,
568 IN PVOID HandleId OPTIONAL,
569 IN BOOLEAN GenerateOnClose);
570
571 NTSYSCALLAPI
572 NTSTATUS
573 NTAPI
574 NtPrivilegedServiceAuditAlarm(
575 IN PUNICODE_STRING SubsystemName,
576 IN PUNICODE_STRING ServiceName,
577 IN HANDLE ClientToken,
578 IN PPRIVILEGE_SET Privileges,
579 IN BOOLEAN AccessGranted);
580
581 NTSYSCALLAPI
582 NTSTATUS
583 NTAPI
584 NtSetInformationThread(
585 IN HANDLE ThreadHandle,
586 IN THREADINFOCLASS ThreadInformationClass,
587 IN PVOID ThreadInformation,
588 IN ULONG ThreadInformationLength);
589
590 NTSYSCALLAPI
591 NTSTATUS
592 NTAPI
593 NtCreateSection(
594 OUT PHANDLE SectionHandle,
595 IN ACCESS_MASK DesiredAccess,
596 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
597 IN PLARGE_INTEGER MaximumSize OPTIONAL,
598 IN ULONG SectionPageProtection,
599 IN ULONG AllocationAttributes,
600 IN HANDLE FileHandle OPTIONAL);
601
602 #endif
603
604 #define COMPRESSION_FORMAT_NONE (0x0000)
605 #define COMPRESSION_FORMAT_DEFAULT (0x0001)
606 #define COMPRESSION_FORMAT_LZNT1 (0x0002)
607 #define COMPRESSION_ENGINE_STANDARD (0x0000)
608 #define COMPRESSION_ENGINE_MAXIMUM (0x0100)
609 #define COMPRESSION_ENGINE_HIBER (0x0200)
610
611 #define MAX_UNICODE_STACK_BUFFER_LENGTH 256
612
613 #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
614
615 #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
616 #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
617
618 typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE;
619
620 typedef enum _SECURITY_LOGON_TYPE {
621 UndefinedLogonType = 0,
622 Interactive = 2,
623 Network,
624 Batch,
625 Service,
626 Proxy,
627 Unlock,
628 NetworkCleartext,
629 NewCredentials,
630 #if (_WIN32_WINNT >= 0x0501)
631 RemoteInteractive,
632 CachedInteractive,
633 #endif
634 #if (_WIN32_WINNT >= 0x0502)
635 CachedRemoteInteractive,
636 CachedUnlock
637 #endif
638 } SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE;
639
640 #ifndef _NTLSA_AUDIT_
641 #define _NTLSA_AUDIT_
642
643 #ifndef GUID_DEFINED
644 #include <guiddef.h>
645 #endif
646
647 #endif /* _NTLSA_AUDIT_ */
648
649 NTSTATUS
650 NTAPI
651 LsaRegisterLogonProcess(
652 IN PLSA_STRING LogonProcessName,
653 OUT PHANDLE LsaHandle,
654 OUT PLSA_OPERATIONAL_MODE SecurityMode);
655
656 NTSTATUS
657 NTAPI
658 LsaLogonUser(
659 IN HANDLE LsaHandle,
660 IN PLSA_STRING OriginName,
661 IN SECURITY_LOGON_TYPE LogonType,
662 IN ULONG AuthenticationPackage,
663 IN PVOID AuthenticationInformation,
664 IN ULONG AuthenticationInformationLength,
665 IN PTOKEN_GROUPS LocalGroups OPTIONAL,
666 IN PTOKEN_SOURCE SourceContext,
667 OUT PVOID *ProfileBuffer,
668 OUT PULONG ProfileBufferLength,
669 OUT PLUID LogonId,
670 OUT PHANDLE Token,
671 OUT PQUOTA_LIMITS Quotas,
672 OUT PNTSTATUS SubStatus);
673
674 NTSTATUS
675 NTAPI
676 LsaFreeReturnBuffer(
677 IN PVOID Buffer);
678
679 #ifndef _NTLSA_IFS_
680 #define _NTLSA_IFS_
681 #endif
682
683 #define MSV1_0_PACKAGE_NAME "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
684 #define MSV1_0_PACKAGE_NAMEW L"MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
685 #define MSV1_0_PACKAGE_NAMEW_LENGTH sizeof(MSV1_0_PACKAGE_NAMEW) - sizeof(WCHAR)
686
687 #define MSV1_0_SUBAUTHENTICATION_KEY "SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1_0"
688 #define MSV1_0_SUBAUTHENTICATION_VALUE "Auth"
689
690 #define MSV1_0_CHALLENGE_LENGTH 8
691 #define MSV1_0_USER_SESSION_KEY_LENGTH 16
692 #define MSV1_0_LANMAN_SESSION_KEY_LENGTH 8
693
694 #define MSV1_0_CLEARTEXT_PASSWORD_ALLOWED 0x02
695 #define MSV1_0_UPDATE_LOGON_STATISTICS 0x04
696 #define MSV1_0_RETURN_USER_PARAMETERS 0x08
697 #define MSV1_0_DONT_TRY_GUEST_ACCOUNT 0x10
698 #define MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT 0x20
699 #define MSV1_0_RETURN_PASSWORD_EXPIRY 0x40
700 #define MSV1_0_USE_CLIENT_CHALLENGE 0x80
701 #define MSV1_0_TRY_GUEST_ACCOUNT_ONLY 0x100
702 #define MSV1_0_RETURN_PROFILE_PATH 0x200
703 #define MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY 0x400
704 #define MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT 0x800
705
706 #define MSV1_0_DISABLE_PERSONAL_FALLBACK 0x00001000
707 #define MSV1_0_ALLOW_FORCE_GUEST 0x00002000
708
709 #if (_WIN32_WINNT >= 0x0502)
710 #define MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED 0x00004000
711 #define MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY 0x00008000
712 #endif
713
714 #define MSV1_0_SUBAUTHENTICATION_DLL_EX 0x00100000
715 #define MSV1_0_ALLOW_MSVCHAPV2 0x00010000
716
717 #if (_WIN32_WINNT >= 0x0600)
718 #define MSV1_0_S4U2SELF 0x00020000
719 #define MSV1_0_CHECK_LOGONHOURS_FOR_S4U 0x00040000
720 #endif
721
722 #define MSV1_0_SUBAUTHENTICATION_DLL 0xFF000000
723 #define MSV1_0_SUBAUTHENTICATION_DLL_SHIFT 24
724 #define MSV1_0_MNS_LOGON 0x01000000
725
726 #define MSV1_0_SUBAUTHENTICATION_DLL_RAS 2
727 #define MSV1_0_SUBAUTHENTICATION_DLL_IIS 132
728
729 #define LOGON_GUEST 0x01
730 #define LOGON_NOENCRYPTION 0x02
731 #define LOGON_CACHED_ACCOUNT 0x04
732 #define LOGON_USED_LM_PASSWORD 0x08
733 #define LOGON_EXTRA_SIDS 0x20
734 #define LOGON_SUBAUTH_SESSION_KEY 0x40
735 #define LOGON_SERVER_TRUST_ACCOUNT 0x80
736 #define LOGON_NTLMV2_ENABLED 0x100
737 #define LOGON_RESOURCE_GROUPS 0x200
738 #define LOGON_PROFILE_PATH_RETURNED 0x400
739 #define LOGON_NT_V2 0x800
740 #define LOGON_LM_V2 0x1000
741 #define LOGON_NTLM_V2 0x2000
742
743 #if (_WIN32_WINNT >= 0x0600)
744
745 #define LOGON_OPTIMIZED 0x4000
746 #define LOGON_WINLOGON 0x8000
747 #define LOGON_PKINIT 0x10000
748 #define LOGON_NO_OPTIMIZED 0x20000
749
750 #endif
751
752 #define MSV1_0_SUBAUTHENTICATION_FLAGS 0xFF000000
753
754 #define LOGON_GRACE_LOGON 0x01000000
755
756 #define MSV1_0_OWF_PASSWORD_LENGTH 16
757 #define MSV1_0_CRED_LM_PRESENT 0x1
758 #define MSV1_0_CRED_NT_PRESENT 0x2
759 #define MSV1_0_CRED_VERSION 0
760
761 #define MSV1_0_NTLM3_RESPONSE_LENGTH 16
762 #define MSV1_0_NTLM3_OWF_LENGTH 16
763
764 #if (_WIN32_WINNT == 0x0500)
765 #define MSV1_0_MAX_NTLM3_LIFE 1800
766 #else
767 #define MSV1_0_MAX_NTLM3_LIFE 129600
768 #endif
769 #define MSV1_0_MAX_AVL_SIZE 64000
770
771 #if (_WIN32_WINNT >= 0x0501)
772
773 #define MSV1_0_AV_FLAG_FORCE_GUEST 0x00000001
774
775 #if (_WIN32_WINNT >= 0x0600)
776 #define MSV1_0_AV_FLAG_MIC_HANDSHAKE_MESSAGES 0x00000002
777 #endif
778
779 #endif
780
781 #define MSV1_0_NTLM3_INPUT_LENGTH (sizeof(MSV1_0_NTLM3_RESPONSE) - MSV1_0_NTLM3_RESPONSE_LENGTH)
782
783 #if(_WIN32_WINNT >= 0x0502)
784 #define MSV1_0_NTLM3_MIN_NT_RESPONSE_LENGTH RTL_SIZEOF_THROUGH_FIELD(MSV1_0_NTLM3_RESPONSE, AvPairsOff)
785 #endif
786
787 #define USE_PRIMARY_PASSWORD 0x01
788 #define RETURN_PRIMARY_USERNAME 0x02
789 #define RETURN_PRIMARY_LOGON_DOMAINNAME 0x04
790 #define RETURN_NON_NT_USER_SESSION_KEY 0x08
791 #define GENERATE_CLIENT_CHALLENGE 0x10
792 #define GCR_NTLM3_PARMS 0x20
793 #define GCR_TARGET_INFO 0x40
794 #define RETURN_RESERVED_PARAMETER 0x80
795 #define GCR_ALLOW_NTLM 0x100
796 #define GCR_USE_OEM_SET 0x200
797 #define GCR_MACHINE_CREDENTIAL 0x400
798 #define GCR_USE_OWF_PASSWORD 0x800
799 #define GCR_ALLOW_LM 0x1000
800 #define GCR_ALLOW_NO_TARGET 0x2000
801
802 typedef enum _MSV1_0_LOGON_SUBMIT_TYPE {
803 MsV1_0InteractiveLogon = 2,
804 MsV1_0Lm20Logon,
805 MsV1_0NetworkLogon,
806 MsV1_0SubAuthLogon,
807 MsV1_0WorkstationUnlockLogon = 7,
808 MsV1_0S4ULogon = 12,
809 MsV1_0VirtualLogon = 82
810 } MSV1_0_LOGON_SUBMIT_TYPE, *PMSV1_0_LOGON_SUBMIT_TYPE;
811
812 typedef enum _MSV1_0_PROFILE_BUFFER_TYPE {
813 MsV1_0InteractiveProfile = 2,
814 MsV1_0Lm20LogonProfile,
815 MsV1_0SmartCardProfile
816 } MSV1_0_PROFILE_BUFFER_TYPE, *PMSV1_0_PROFILE_BUFFER_TYPE;
817
818 typedef struct _MSV1_0_INTERACTIVE_LOGON {
819 MSV1_0_LOGON_SUBMIT_TYPE MessageType;
820 UNICODE_STRING LogonDomainName;
821 UNICODE_STRING UserName;
822 UNICODE_STRING Password;
823 } MSV1_0_INTERACTIVE_LOGON, *PMSV1_0_INTERACTIVE_LOGON;
824
825 typedef struct _MSV1_0_INTERACTIVE_PROFILE {
826 MSV1_0_PROFILE_BUFFER_TYPE MessageType;
827 USHORT LogonCount;
828 USHORT BadPasswordCount;
829 LARGE_INTEGER LogonTime;
830 LARGE_INTEGER LogoffTime;
831 LARGE_INTEGER KickOffTime;
832 LARGE_INTEGER PasswordLastSet;
833 LARGE_INTEGER PasswordCanChange;
834 LARGE_INTEGER PasswordMustChange;
835 UNICODE_STRING LogonScript;
836 UNICODE_STRING HomeDirectory;
837 UNICODE_STRING FullName;
838 UNICODE_STRING ProfilePath;
839 UNICODE_STRING HomeDirectoryDrive;
840 UNICODE_STRING LogonServer;
841 ULONG UserFlags;
842 } MSV1_0_INTERACTIVE_PROFILE, *PMSV1_0_INTERACTIVE_PROFILE;
843
844 typedef struct _MSV1_0_LM20_LOGON {
845 MSV1_0_LOGON_SUBMIT_TYPE MessageType;
846 UNICODE_STRING LogonDomainName;
847 UNICODE_STRING UserName;
848 UNICODE_STRING Workstation;
849 UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
850 STRING CaseSensitiveChallengeResponse;
851 STRING CaseInsensitiveChallengeResponse;
852 ULONG ParameterControl;
853 } MSV1_0_LM20_LOGON, * PMSV1_0_LM20_LOGON;
854
855 typedef struct _MSV1_0_SUBAUTH_LOGON {
856 MSV1_0_LOGON_SUBMIT_TYPE MessageType;
857 UNICODE_STRING LogonDomainName;
858 UNICODE_STRING UserName;
859 UNICODE_STRING Workstation;
860 UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
861 STRING AuthenticationInfo1;
862 STRING AuthenticationInfo2;
863 ULONG ParameterControl;
864 ULONG SubAuthPackageId;
865 } MSV1_0_SUBAUTH_LOGON, * PMSV1_0_SUBAUTH_LOGON;
866
867 #if (_WIN32_WINNT >= 0x0600)
868
869 #define MSV1_0_S4U_LOGON_FLAG_CHECK_LOGONHOURS 0x2
870
871 typedef struct _MSV1_0_S4U_LOGON {
872 MSV1_0_LOGON_SUBMIT_TYPE MessageType;
873 ULONG Flags;
874 UNICODE_STRING UserPrincipalName;
875 UNICODE_STRING DomainName;
876 } MSV1_0_S4U_LOGON, *PMSV1_0_S4U_LOGON;
877
878 #endif
879
880 typedef struct _MSV1_0_LM20_LOGON_PROFILE {
881 MSV1_0_PROFILE_BUFFER_TYPE MessageType;
882 LARGE_INTEGER KickOffTime;
883 LARGE_INTEGER LogoffTime;
884 ULONG UserFlags;
885 UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH];
886 UNICODE_STRING LogonDomainName;
887 UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH];
888 UNICODE_STRING LogonServer;
889 UNICODE_STRING UserParameters;
890 } MSV1_0_LM20_LOGON_PROFILE, * PMSV1_0_LM20_LOGON_PROFILE;
891
892 typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL {
893 ULONG Version;
894 ULONG Flags;
895 UCHAR LmPassword[MSV1_0_OWF_PASSWORD_LENGTH];
896 UCHAR NtPassword[MSV1_0_OWF_PASSWORD_LENGTH];
897 } MSV1_0_SUPPLEMENTAL_CREDENTIAL, *PMSV1_0_SUPPLEMENTAL_CREDENTIAL;
898
899 typedef struct _MSV1_0_NTLM3_RESPONSE {
900 UCHAR Response[MSV1_0_NTLM3_RESPONSE_LENGTH];
901 UCHAR RespType;
902 UCHAR HiRespType;
903 USHORT Flags;
904 ULONG MsgWord;
905 ULONGLONG TimeStamp;
906 UCHAR ChallengeFromClient[MSV1_0_CHALLENGE_LENGTH];
907 ULONG AvPairsOff;
908 UCHAR Buffer[1];
909 } MSV1_0_NTLM3_RESPONSE, *PMSV1_0_NTLM3_RESPONSE;
910
911 typedef enum _MSV1_0_AVID {
912 MsvAvEOL,
913 MsvAvNbComputerName,
914 MsvAvNbDomainName,
915 MsvAvDnsComputerName,
916 MsvAvDnsDomainName,
917 #if (_WIN32_WINNT >= 0x0501)
918 MsvAvDnsTreeName,
919 MsvAvFlags,
920 #if (_WIN32_WINNT >= 0x0600)
921 MsvAvTimestamp,
922 MsvAvRestrictions,
923 MsvAvTargetName,
924 MsvAvChannelBindings,
925 #endif
926 #endif
927 } MSV1_0_AVID;
928
929 typedef struct _MSV1_0_AV_PAIR {
930 USHORT AvId;
931 USHORT AvLen;
932 } MSV1_0_AV_PAIR, *PMSV1_0_AV_PAIR;
933
934 typedef enum _MSV1_0_PROTOCOL_MESSAGE_TYPE {
935 MsV1_0Lm20ChallengeRequest = 0,
936 MsV1_0Lm20GetChallengeResponse,
937 MsV1_0EnumerateUsers,
938 MsV1_0GetUserInfo,
939 MsV1_0ReLogonUsers,
940 MsV1_0ChangePassword,
941 MsV1_0ChangeCachedPassword,
942 MsV1_0GenericPassthrough,
943 MsV1_0CacheLogon,
944 MsV1_0SubAuth,
945 MsV1_0DeriveCredential,
946 MsV1_0CacheLookup,
947 #if (_WIN32_WINNT >= 0x0501)
948 MsV1_0SetProcessOption,
949 #endif
950 #if (_WIN32_WINNT >= 0x0600)
951 MsV1_0ConfigLocalAliases,
952 MsV1_0ClearCachedCredentials,
953 #endif
954 } MSV1_0_PROTOCOL_MESSAGE_TYPE, *PMSV1_0_PROTOCOL_MESSAGE_TYPE;
955
956 typedef struct _MSV1_0_LM20_CHALLENGE_REQUEST {
957 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
958 } MSV1_0_LM20_CHALLENGE_REQUEST, *PMSV1_0_LM20_CHALLENGE_REQUEST;
959
960 typedef struct _MSV1_0_LM20_CHALLENGE_RESPONSE {
961 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
962 UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
963 } MSV1_0_LM20_CHALLENGE_RESPONSE, *PMSV1_0_LM20_CHALLENGE_RESPONSE;
964
965 typedef struct _MSV1_0_GETCHALLENRESP_REQUEST_V1 {
966 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
967 ULONG ParameterControl;
968 LUID LogonId;
969 UNICODE_STRING Password;
970 UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
971 } MSV1_0_GETCHALLENRESP_REQUEST_V1, *PMSV1_0_GETCHALLENRESP_REQUEST_V1;
972
973 typedef struct _MSV1_0_GETCHALLENRESP_REQUEST {
974 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
975 ULONG ParameterControl;
976 LUID LogonId;
977 UNICODE_STRING Password;
978 UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
979 UNICODE_STRING UserName;
980 UNICODE_STRING LogonDomainName;
981 UNICODE_STRING ServerName;
982 } MSV1_0_GETCHALLENRESP_REQUEST, *PMSV1_0_GETCHALLENRESP_REQUEST;
983
984 typedef struct _MSV1_0_GETCHALLENRESP_RESPONSE {
985 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
986 STRING CaseSensitiveChallengeResponse;
987 STRING CaseInsensitiveChallengeResponse;
988 UNICODE_STRING UserName;
989 UNICODE_STRING LogonDomainName;
990 UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH];
991 UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH];
992 } MSV1_0_GETCHALLENRESP_RESPONSE, *PMSV1_0_GETCHALLENRESP_RESPONSE;
993
994 typedef struct _MSV1_0_ENUMUSERS_REQUEST {
995 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
996 } MSV1_0_ENUMUSERS_REQUEST, *PMSV1_0_ENUMUSERS_REQUEST;
997
998 typedef struct _MSV1_0_ENUMUSERS_RESPONSE {
999 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
1000 ULONG NumberOfLoggedOnUsers;
1001 PLUID LogonIds;
1002 PULONG EnumHandles;
1003 } MSV1_0_ENUMUSERS_RESPONSE, *PMSV1_0_ENUMUSERS_RESPONSE;
1004
1005 typedef struct _MSV1_0_GETUSERINFO_REQUEST {
1006 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
1007 LUID LogonId;
1008 } MSV1_0_GETUSERINFO_REQUEST, *PMSV1_0_GETUSERINFO_REQUEST;
1009
1010 typedef struct _MSV1_0_GETUSERINFO_RESPONSE {
1011 MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
1012 PSID UserSid;
1013 UNICODE_STRING UserName;
1014 UNICODE_STRING LogonDomainName;
1015 UNICODE_STRING LogonServer;
1016 SECURITY_LOGON_TYPE LogonType;
1017 } MSV1_0_GETUSERINFO_RESPONSE, *PMSV1_0_GETUSERINFO_RESPONSE;
1018
1019 $include (iotypes.h)
1020
1021 typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION {
1022 ULONG Attributes;
1023 ACCESS_MASK GrantedAccess;
1024 ULONG HandleCount;
1025 ULONG PointerCount;
1026 ULONG Reserved[10];
1027 } PUBLIC_OBJECT_BASIC_INFORMATION, *PPUBLIC_OBJECT_BASIC_INFORMATION;
1028
1029 typedef struct _PUBLIC_OBJECT_TYPE_INFORMATION {
1030 UNICODE_STRING TypeName;
1031 ULONG Reserved [22];
1032 } PUBLIC_OBJECT_TYPE_INFORMATION, *PPUBLIC_OBJECT_TYPE_INFORMATION;
1033
1034 typedef struct _SECURITY_CLIENT_CONTEXT {
1035 SECURITY_QUALITY_OF_SERVICE SecurityQos;
1036 PACCESS_TOKEN ClientToken;
1037 BOOLEAN DirectlyAccessClientToken;
1038 BOOLEAN DirectAccessEffectiveOnly;
1039 BOOLEAN ServerIsRemote;
1040 TOKEN_CONTROL ClientTokenControl;
1041 } SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT;
1042
1043 #define SYSTEM_PAGE_PRIORITY_BITS 3
1044 #define SYSTEM_PAGE_PRIORITY_LEVELS (1 << SYSTEM_PAGE_PRIORITY_BITS)
1045
1046 typedef struct _KAPC_STATE {
1047 LIST_ENTRY ApcListHead[MaximumMode];
1048 PKPROCESS Process;
1049 BOOLEAN KernelApcInProgress;
1050 BOOLEAN KernelApcPending;
1051 BOOLEAN UserApcPending;
1052 } KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE;
1053
1054 #define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
1055
1056 #define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
1057
1058 typedef struct _KQUEUE {
1059 DISPATCHER_HEADER Header;
1060 LIST_ENTRY EntryListHead;
1061 volatile ULONG CurrentCount;
1062 ULONG MaximumCount;
1063 LIST_ENTRY ThreadListHead;
1064 } KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
1065
1066 $include (kefuncs.h)
1067 $include (extypes.h)
1068 $include (exfuncs.h)
1069 $include (sefuncs.h)
1070 $include (psfuncs.h)
1071 $include (iofuncs.h)
1072 $include (potypes.h)
1073 $include (pofuncs.h)
1074 $include (mmtypes.h)
1075 $include (mmfuncs.h)
1076 $include (obfuncs.h)
1077 $include (fsrtltypes.h)
1078 $include (fsrtlfuncs.h)
1079 $include (cctypes.h)
1080 $include (ccfuncs.h)
1081 $include (zwfuncs.h)
1082
1083 /* #if !defined(_X86AMD64_) FIXME : WHAT ?! */
1084 #if defined(_WIN64)
1085
1086 C_ASSERT(sizeof(ERESOURCE) == 0x68);
1087 C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x18);
1088 C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x1a);
1089
1090 #else
1091
1092 C_ASSERT(sizeof(ERESOURCE) == 0x38);
1093 C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x0c);
1094 C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x0e);
1095
1096 #endif
1097 /* #endif */
1098
1099 #if defined(_IA64_)
1100 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1101 //DECLSPEC_DEPRECATED_DDK
1102 NTHALAPI
1103 ULONG
1104 NTAPI
1105 HalGetDmaAlignmentRequirement(
1106 VOID);
1107 #endif
1108 #endif
1109
1110 #if defined(_M_IX86) || defined(_M_AMD64)
1111 #define HalGetDmaAlignmentRequirement() 1L
1112 #endif
1113
1114 extern NTKERNELAPI PUSHORT NlsOemLeadByteInfo;
1115 #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
1116
1117 #ifdef NLS_MB_CODE_PAGE_TAG
1118 #undef NLS_MB_CODE_PAGE_TAG
1119 #endif
1120 #define NLS_MB_CODE_PAGE_TAG NlsMbOemCodePageTag
1121
1122 #if (NTDDI_VERSION >= NTDDI_VISTA)
1123
1124 typedef enum _NETWORK_OPEN_LOCATION_QUALIFIER {
1125 NetworkOpenLocationAny,
1126 NetworkOpenLocationRemote,
1127 NetworkOpenLocationLoopback
1128 } NETWORK_OPEN_LOCATION_QUALIFIER;
1129
1130 typedef enum _NETWORK_OPEN_INTEGRITY_QUALIFIER {
1131 NetworkOpenIntegrityAny,
1132 NetworkOpenIntegrityNone,
1133 NetworkOpenIntegritySigned,
1134 NetworkOpenIntegrityEncrypted,
1135 NetworkOpenIntegrityMaximum
1136 } NETWORK_OPEN_INTEGRITY_QUALIFIER;
1137
1138 #if (NTDDI_VERSION >= NTDDI_WIN7)
1139
1140 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_COLLAPSING 0x1
1141 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_DURABILITY 0x2
1142 #define NETWORK_OPEN_ECP_IN_FLAG_FORCE_BUFFERED_SYNCHRONOUS_IO_HACK 0x80000000
1143
1144 typedef struct _NETWORK_OPEN_ECP_CONTEXT {
1145 USHORT Size;
1146 USHORT Reserved;
1147 _ANONYMOUS_STRUCT struct {
1148 struct {
1149 NETWORK_OPEN_LOCATION_QUALIFIER Location;
1150 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
1151 ULONG Flags;
1152 } in;
1153 struct {
1154 NETWORK_OPEN_LOCATION_QUALIFIER Location;
1155 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
1156 ULONG Flags;
1157 } out;
1158 } DUMMYSTRUCTNAME;
1159 } NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
1160
1161 typedef struct _NETWORK_OPEN_ECP_CONTEXT_V0 {
1162 USHORT Size;
1163 USHORT Reserved;
1164 _ANONYMOUS_STRUCT struct {
1165 struct {
1166 NETWORK_OPEN_LOCATION_QUALIFIER Location;
1167 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
1168 } in;
1169 struct {
1170 NETWORK_OPEN_LOCATION_QUALIFIER Location;
1171 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
1172 } out;
1173 } DUMMYSTRUCTNAME;
1174 } NETWORK_OPEN_ECP_CONTEXT_V0, *PNETWORK_OPEN_ECP_CONTEXT_V0;
1175
1176 #elif (NTDDI_VERSION >= NTDDI_VISTA)
1177 typedef struct _NETWORK_OPEN_ECP_CONTEXT {
1178 USHORT Size;
1179 USHORT Reserved;
1180 _ANONYMOUS_STRUCT struct {
1181 struct {
1182 NETWORK_OPEN_LOCATION_QUALIFIER Location;
1183 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
1184 } in;
1185 struct {
1186 NETWORK_OPEN_LOCATION_QUALIFIER Location;
1187 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
1188 } out;
1189 } DUMMYSTRUCTNAME;
1190 } NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
1191 #endif
1192
1193 DEFINE_GUID(GUID_ECP_NETWORK_OPEN_CONTEXT, 0xc584edbf, 0x00df, 0x4d28, 0xb8, 0x84, 0x35, 0xba, 0xca, 0x89, 0x11, 0xe8);
1194
1195 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1196
1197
1198 #if (NTDDI_VERSION >= NTDDI_VISTA)
1199
1200 typedef struct _PREFETCH_OPEN_ECP_CONTEXT {
1201 PVOID Context;
1202 } PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT;
1203
1204 DEFINE_GUID(GUID_ECP_PREFETCH_OPEN, 0xe1777b21, 0x847e, 0x4837, 0xaa, 0x45, 0x64, 0x16, 0x1d, 0x28, 0x6, 0x55);
1205
1206 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1207
1208 #if (NTDDI_VERSION >= NTDDI_WIN7)
1209
1210 DEFINE_GUID (GUID_ECP_NFS_OPEN, 0xf326d30c, 0xe5f8, 0x4fe7, 0xab, 0x74, 0xf5, 0xa3, 0x19, 0x6d, 0x92, 0xdb);
1211 DEFINE_GUID (GUID_ECP_SRV_OPEN, 0xbebfaebc, 0xaabf, 0x489d, 0x9d, 0x2c, 0xe9, 0xe3, 0x61, 0x10, 0x28, 0x53);
1212
1213 typedef struct sockaddr_storage *PSOCKADDR_STORAGE_NFS;
1214
1215 typedef struct _NFS_OPEN_ECP_CONTEXT {
1216 PUNICODE_STRING ExportAlias;
1217 PSOCKADDR_STORAGE_NFS ClientSocketAddress;
1218 } NFS_OPEN_ECP_CONTEXT, *PNFS_OPEN_ECP_CONTEXT, **PPNFS_OPEN_ECP_CONTEXT;
1219
1220 typedef struct _SRV_OPEN_ECP_CONTEXT {
1221 PUNICODE_STRING ShareName;
1222 PSOCKADDR_STORAGE_NFS SocketAddress;
1223 BOOLEAN OplockBlockState;
1224 BOOLEAN OplockAppState;
1225 BOOLEAN OplockFinalState;
1226 } SRV_OPEN_ECP_CONTEXT, *PSRV_OPEN_ECP_CONTEXT;
1227
1228 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1229
1230 #define PIN_WAIT (1)
1231 #define PIN_EXCLUSIVE (2)
1232 #define PIN_NO_READ (4)
1233 #define PIN_IF_BCB (8)
1234 #define PIN_CALLER_TRACKS_DIRTY_DATA (32)
1235 #define PIN_HIGH_PRIORITY (64)
1236
1237 #define MAP_WAIT 1
1238 #define MAP_NO_READ (16)
1239 #define MAP_HIGH_PRIORITY (64)
1240
1241 #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
1242 #define IOCTL_REDIR_QUERY_PATH_EX CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 100, METHOD_NEITHER, FILE_ANY_ACCESS)
1243
1244 typedef struct _QUERY_PATH_REQUEST {
1245 ULONG PathNameLength;
1246 PIO_SECURITY_CONTEXT SecurityContext;
1247 WCHAR FilePathName[1];
1248 } QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST;
1249
1250 typedef struct _QUERY_PATH_REQUEST_EX {
1251 PIO_SECURITY_CONTEXT pSecurityContext;
1252 ULONG EaLength;
1253 PVOID pEaBuffer;
1254 UNICODE_STRING PathName;
1255 UNICODE_STRING DomainServiceName;
1256 ULONG_PTR Reserved[ 3 ];
1257 } QUERY_PATH_REQUEST_EX, *PQUERY_PATH_REQUEST_EX;
1258
1259 typedef struct _QUERY_PATH_RESPONSE {
1260 ULONG LengthAccepted;
1261 } QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE;
1262
1263 #define VOLSNAPCONTROLTYPE 0x00000053
1264 #define IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES CTL_CODE(VOLSNAPCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1265
1266 /* FIXME : These definitions below don't belong here (or anywhere in ddk really) */
1267 #pragma pack(push,4)
1268
1269 #ifndef VER_PRODUCTBUILD
1270 #define VER_PRODUCTBUILD 10000
1271 #endif
1272
1273 #include "csq.h"
1274
1275 extern PACL SePublicDefaultDacl;
1276 extern PACL SeSystemDefaultDacl;
1277
1278 #define FS_LFN_APIS 0x00004000
1279
1280 #define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
1281 #define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
1282 #define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
1283 #define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
1284 #define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
1285 #define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
1286 #define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
1287 #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
1288 #define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
1289 #define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
1290 #define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
1291 #define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
1292 #define FILE_STORAGE_TYPE_MASK 0x000f0000
1293 #define FILE_STORAGE_TYPE_SHIFT 16
1294
1295 #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
1296
1297 #ifdef _X86_
1298 #define HARDWARE_PTE HARDWARE_PTE_X86
1299 #define PHARDWARE_PTE PHARDWARE_PTE_X86
1300 #endif
1301
1302 #define IO_ATTACH_DEVICE_API 0x80000000
1303
1304 #define IO_TYPE_APC 18
1305 #define IO_TYPE_DPC 19
1306 #define IO_TYPE_DEVICE_QUEUE 20
1307 #define IO_TYPE_EVENT_PAIR 21
1308 #define IO_TYPE_INTERRUPT 22
1309 #define IO_TYPE_PROFILE 23
1310
1311 #define IRP_BEING_VERIFIED 0x10
1312
1313 #define MAILSLOT_CLASS_FIRSTCLASS 1
1314 #define MAILSLOT_CLASS_SECONDCLASS 2
1315
1316 #define MAILSLOT_SIZE_AUTO 0
1317
1318 #define MEM_DOS_LIM 0x40000000
1319
1320 #define OB_TYPE_TYPE 1
1321 #define OB_TYPE_DIRECTORY 2
1322 #define OB_TYPE_SYMBOLIC_LINK 3
1323 #define OB_TYPE_TOKEN 4
1324 #define OB_TYPE_PROCESS 5
1325 #define OB_TYPE_THREAD 6
1326 #define OB_TYPE_EVENT 7
1327 #define OB_TYPE_EVENT_PAIR 8
1328 #define OB_TYPE_MUTANT 9
1329 #define OB_TYPE_SEMAPHORE 10
1330 #define OB_TYPE_TIMER 11
1331 #define OB_TYPE_PROFILE 12
1332 #define OB_TYPE_WINDOW_STATION 13
1333 #define OB_TYPE_DESKTOP 14
1334 #define OB_TYPE_SECTION 15
1335 #define OB_TYPE_KEY 16
1336 #define OB_TYPE_PORT 17
1337 #define OB_TYPE_ADAPTER 18
1338 #define OB_TYPE_CONTROLLER 19
1339 #define OB_TYPE_DEVICE 20
1340 #define OB_TYPE_DRIVER 21
1341 #define OB_TYPE_IO_COMPLETION 22
1342 #define OB_TYPE_FILE 23
1343
1344 #define SEC_BASED 0x00200000
1345
1346 /* end winnt.h */
1347
1348 #define TOKEN_HAS_ADMIN_GROUP 0x08
1349
1350 #if (VER_PRODUCTBUILD >= 1381)
1351 #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
1352 #endif /* (VER_PRODUCTBUILD >= 1381) */
1353
1354 #if (VER_PRODUCTBUILD >= 2195)
1355
1356 #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
1357 #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
1358
1359 #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
1360
1361 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
1362 #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
1363 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1364 #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
1365 #endif /* (VER_PRODUCTBUILD >= 2195) */
1366
1367 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
1368 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
1369 #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
1370 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
1371 #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
1372 #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
1373 #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
1374 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
1375
1376 typedef enum _FILE_STORAGE_TYPE {
1377 StorageTypeDefault = 1,
1378 StorageTypeDirectory,
1379 StorageTypeFile,
1380 StorageTypeJunctionPoint,
1381 StorageTypeCatalog,
1382 StorageTypeStructuredStorage,
1383 StorageTypeEmbedding,
1384 StorageTypeStream
1385 } FILE_STORAGE_TYPE;
1386
1387 typedef struct _OBJECT_BASIC_INFORMATION
1388 {
1389 ULONG Attributes;
1390 ACCESS_MASK GrantedAccess;
1391 ULONG HandleCount;
1392 ULONG PointerCount;
1393 ULONG PagedPoolCharge;
1394 ULONG NonPagedPoolCharge;
1395 ULONG Reserved[ 3 ];
1396 ULONG NameInfoSize;
1397 ULONG TypeInfoSize;
1398 ULONG SecurityDescriptorSize;
1399 LARGE_INTEGER CreationTime;
1400 } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
1401
1402 typedef struct _BITMAP_RANGE {
1403 LIST_ENTRY Links;
1404 LONGLONG BasePage;
1405 ULONG FirstDirtyPage;
1406 ULONG LastDirtyPage;
1407 ULONG DirtyPages;
1408 PULONG Bitmap;
1409 } BITMAP_RANGE, *PBITMAP_RANGE;
1410
1411 typedef struct _FILE_COPY_ON_WRITE_INFORMATION {
1412 BOOLEAN ReplaceIfExists;
1413 HANDLE RootDirectory;
1414 ULONG FileNameLength;
1415 WCHAR FileName[1];
1416 } FILE_COPY_ON_WRITE_INFORMATION, *PFILE_COPY_ON_WRITE_INFORMATION;
1417
1418 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
1419 ULONG NextEntryOffset;
1420 ULONG FileIndex;
1421 LARGE_INTEGER CreationTime;
1422 LARGE_INTEGER LastAccessTime;
1423 LARGE_INTEGER LastWriteTime;
1424 LARGE_INTEGER ChangeTime;
1425 LARGE_INTEGER EndOfFile;
1426 LARGE_INTEGER AllocationSize;
1427 ULONG FileAttributes;
1428 ULONG FileNameLength;
1429 ULONG EaSize;
1430 WCHAR FileName[ANYSIZE_ARRAY];
1431 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION;
1432
1433 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
1434 typedef struct _FILE_SHARED_LOCK_ENTRY {
1435 PVOID Unknown1;
1436 PVOID Unknown2;
1437 FILE_LOCK_INFO FileLock;
1438 } FILE_SHARED_LOCK_ENTRY, *PFILE_SHARED_LOCK_ENTRY;
1439
1440 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
1441 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY {
1442 LIST_ENTRY ListEntry;
1443 PVOID Unknown1;
1444 PVOID Unknown2;
1445 FILE_LOCK_INFO FileLock;
1446 } FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
1447
1448 typedef struct _FILE_MAILSLOT_PEEK_BUFFER {
1449 ULONG ReadDataAvailable;
1450 ULONG NumberOfMessages;
1451 ULONG MessageLength;
1452 } FILE_MAILSLOT_PEEK_BUFFER, *PFILE_MAILSLOT_PEEK_BUFFER;
1453
1454 typedef struct _FILE_OLE_CLASSID_INFORMATION {
1455 GUID ClassId;
1456 } FILE_OLE_CLASSID_INFORMATION, *PFILE_OLE_CLASSID_INFORMATION;
1457
1458 typedef struct _FILE_OLE_ALL_INFORMATION {
1459 FILE_BASIC_INFORMATION BasicInformation;
1460 FILE_STANDARD_INFORMATION StandardInformation;
1461 FILE_INTERNAL_INFORMATION InternalInformation;
1462 FILE_EA_INFORMATION EaInformation;
1463 FILE_ACCESS_INFORMATION AccessInformation;
1464 FILE_POSITION_INFORMATION PositionInformation;
1465 FILE_MODE_INFORMATION ModeInformation;
1466 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
1467 USN LastChangeUsn;
1468 USN ReplicationUsn;
1469 LARGE_INTEGER SecurityChangeTime;
1470 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
1471 FILE_OBJECTID_INFORMATION ObjectIdInformation;
1472 FILE_STORAGE_TYPE StorageType;
1473 ULONG OleStateBits;
1474 ULONG OleId;
1475 ULONG NumberOfStreamReferences;
1476 ULONG StreamIndex;
1477 ULONG SecurityId;
1478 BOOLEAN ContentIndexDisable;
1479 BOOLEAN InheritContentIndexDisable;
1480 FILE_NAME_INFORMATION NameInformation;
1481 } FILE_OLE_ALL_INFORMATION, *PFILE_OLE_ALL_INFORMATION;
1482
1483 typedef struct _FILE_OLE_DIR_INFORMATION {
1484 ULONG NextEntryOffset;
1485 ULONG FileIndex;
1486 LARGE_INTEGER CreationTime;
1487 LARGE_INTEGER LastAccessTime;
1488 LARGE_INTEGER LastWriteTime;
1489 LARGE_INTEGER ChangeTime;
1490 LARGE_INTEGER EndOfFile;
1491 LARGE_INTEGER AllocationSize;
1492 ULONG FileAttributes;
1493 ULONG FileNameLength;
1494 FILE_STORAGE_TYPE StorageType;
1495 GUID OleClassId;
1496 ULONG OleStateBits;
1497 BOOLEAN ContentIndexDisable;
1498 BOOLEAN InheritContentIndexDisable;
1499 WCHAR FileName[1];
1500 } FILE_OLE_DIR_INFORMATION, *PFILE_OLE_DIR_INFORMATION;
1501
1502 typedef struct _FILE_OLE_INFORMATION {
1503 LARGE_INTEGER SecurityChangeTime;
1504 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
1505 FILE_OBJECTID_INFORMATION ObjectIdInformation;
1506 FILE_STORAGE_TYPE StorageType;
1507 ULONG OleStateBits;
1508 BOOLEAN ContentIndexDisable;
1509 BOOLEAN InheritContentIndexDisable;
1510 } FILE_OLE_INFORMATION, *PFILE_OLE_INFORMATION;
1511
1512 typedef struct _FILE_OLE_STATE_BITS_INFORMATION {
1513 ULONG StateBits;
1514 ULONG StateBitsMask;
1515 } FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION;
1516
1517 typedef struct _MAPPING_PAIR {
1518 ULONGLONG Vcn;
1519 ULONGLONG Lcn;
1520 } MAPPING_PAIR, *PMAPPING_PAIR;
1521
1522 typedef struct _GET_RETRIEVAL_DESCRIPTOR {
1523 ULONG NumberOfPairs;
1524 ULONGLONG StartVcn;
1525 MAPPING_PAIR Pair[1];
1526 } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
1527
1528 typedef struct _MBCB {
1529 CSHORT NodeTypeCode;
1530 CSHORT NodeIsInZone;
1531 ULONG PagesToWrite;
1532 ULONG DirtyPages;
1533 ULONG Reserved;
1534 LIST_ENTRY BitmapRanges;
1535 LONGLONG ResumeWritePage;
1536 BITMAP_RANGE BitmapRange1;
1537 BITMAP_RANGE BitmapRange2;
1538 BITMAP_RANGE BitmapRange3;
1539 } MBCB, *PMBCB;
1540
1541 typedef struct _MOVEFILE_DESCRIPTOR {
1542 HANDLE FileHandle;
1543 ULONG Reserved;
1544 LARGE_INTEGER StartVcn;
1545 LARGE_INTEGER TargetLcn;
1546 ULONG NumVcns;
1547 ULONG Reserved1;
1548 } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
1549
1550 typedef struct _OBJECT_BASIC_INFO {
1551 ULONG Attributes;
1552 ACCESS_MASK GrantedAccess;
1553 ULONG HandleCount;
1554 ULONG ReferenceCount;
1555 ULONG PagedPoolUsage;
1556 ULONG NonPagedPoolUsage;
1557 ULONG Reserved[3];
1558 ULONG NameInformationLength;
1559 ULONG TypeInformationLength;
1560 ULONG SecurityDescriptorLength;
1561 LARGE_INTEGER CreateTime;
1562 } OBJECT_BASIC_INFO, *POBJECT_BASIC_INFO;
1563
1564 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO {
1565 BOOLEAN Inherit;
1566 BOOLEAN ProtectFromClose;
1567 } OBJECT_HANDLE_ATTRIBUTE_INFO, *POBJECT_HANDLE_ATTRIBUTE_INFO;
1568
1569 typedef struct _OBJECT_NAME_INFO {
1570 UNICODE_STRING ObjectName;
1571 WCHAR ObjectNameBuffer[1];
1572 } OBJECT_NAME_INFO, *POBJECT_NAME_INFO;
1573
1574 typedef struct _OBJECT_PROTECTION_INFO {
1575 BOOLEAN Inherit;
1576 BOOLEAN ProtectHandle;
1577 } OBJECT_PROTECTION_INFO, *POBJECT_PROTECTION_INFO;
1578
1579 typedef struct _OBJECT_TYPE_INFO {
1580 UNICODE_STRING ObjectTypeName;
1581 UCHAR Unknown[0x58];
1582 WCHAR ObjectTypeNameBuffer[1];
1583 } OBJECT_TYPE_INFO, *POBJECT_TYPE_INFO;
1584
1585 typedef struct _OBJECT_ALL_TYPES_INFO {
1586 ULONG NumberOfObjectTypes;
1587 OBJECT_TYPE_INFO ObjectsTypeInfo[1];
1588 } OBJECT_ALL_TYPES_INFO, *POBJECT_ALL_TYPES_INFO;
1589
1590 #if defined(USE_LPC6432)
1591 #define LPC_CLIENT_ID CLIENT_ID64
1592 #define LPC_SIZE_T ULONGLONG
1593 #define LPC_PVOID ULONGLONG
1594 #define LPC_HANDLE ULONGLONG
1595 #else
1596 #define LPC_CLIENT_ID CLIENT_ID
1597 #define LPC_SIZE_T SIZE_T
1598 #define LPC_PVOID PVOID
1599 #define LPC_HANDLE HANDLE
1600 #endif
1601
1602 typedef struct _PORT_MESSAGE
1603 {
1604 union
1605 {
1606 struct
1607 {
1608 CSHORT DataLength;
1609 CSHORT TotalLength;
1610 } s1;
1611 ULONG Length;
1612 } u1;
1613 union
1614 {
1615 struct
1616 {
1617 CSHORT Type;
1618 CSHORT DataInfoOffset;
1619 } s2;
1620 ULONG ZeroInit;
1621 } u2;
1622 __GNU_EXTENSION union
1623 {
1624 LPC_CLIENT_ID ClientId;
1625 double DoNotUseThisField;
1626 };
1627 ULONG MessageId;
1628 __GNU_EXTENSION union
1629 {
1630 LPC_SIZE_T ClientViewSize;
1631 ULONG CallbackId;
1632 };
1633 } PORT_MESSAGE, *PPORT_MESSAGE;
1634
1635 #define LPC_KERNELMODE_MESSAGE (CSHORT)((USHORT)0x8000)
1636
1637 typedef struct _PORT_VIEW
1638 {
1639 ULONG Length;
1640 LPC_HANDLE SectionHandle;
1641 ULONG SectionOffset;
1642 LPC_SIZE_T ViewSize;
1643 LPC_PVOID ViewBase;
1644 LPC_PVOID ViewRemoteBase;
1645 } PORT_VIEW, *PPORT_VIEW;
1646
1647 typedef struct _REMOTE_PORT_VIEW
1648 {
1649 ULONG Length;
1650 LPC_SIZE_T ViewSize;
1651 LPC_PVOID ViewBase;
1652 } REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW;
1653
1654 typedef struct _VAD_HEADER {
1655 PVOID StartVPN;
1656 PVOID EndVPN;
1657 struct _VAD_HEADER* ParentLink;
1658 struct _VAD_HEADER* LeftLink;
1659 struct _VAD_HEADER* RightLink;
1660 ULONG Flags; /* LSB = CommitCharge */
1661 PVOID ControlArea;
1662 PVOID FirstProtoPte;
1663 PVOID LastPTE;
1664 ULONG Unknown;
1665 LIST_ENTRY Secured;
1666 } VAD_HEADER, *PVAD_HEADER;
1667
1668 NTKERNELAPI
1669 LARGE_INTEGER
1670 NTAPI
1671 CcGetLsnForFileObject (
1672 IN PFILE_OBJECT FileObject,
1673 OUT PLARGE_INTEGER OldestLsn OPTIONAL
1674 );
1675
1676 NTKERNELAPI
1677 PVOID
1678 NTAPI
1679 FsRtlAllocatePool (
1680 IN POOL_TYPE PoolType,
1681 IN ULONG NumberOfBytes
1682 );
1683
1684 NTKERNELAPI
1685 PVOID
1686 NTAPI
1687 FsRtlAllocatePoolWithQuota (
1688 IN POOL_TYPE PoolType,
1689 IN ULONG NumberOfBytes
1690 );
1691
1692 NTKERNELAPI
1693 PVOID
1694 NTAPI
1695 FsRtlAllocatePoolWithQuotaTag (
1696 IN POOL_TYPE PoolType,
1697 IN ULONG NumberOfBytes,
1698 IN ULONG Tag
1699 );
1700
1701 NTKERNELAPI
1702 PVOID
1703 NTAPI
1704 FsRtlAllocatePoolWithTag (
1705 IN POOL_TYPE PoolType,
1706 IN ULONG NumberOfBytes,
1707 IN ULONG Tag
1708 );
1709
1710 NTKERNELAPI
1711 BOOLEAN
1712 NTAPI
1713 FsRtlIsFatDbcsLegal (
1714 IN ANSI_STRING DbcsName,
1715 IN BOOLEAN WildCardsPermissible,
1716 IN BOOLEAN PathNamePermissible,
1717 IN BOOLEAN LeadingBackslashPermissible
1718 );
1719
1720 NTKERNELAPI
1721 BOOLEAN
1722 NTAPI
1723 FsRtlMdlReadComplete (
1724 IN PFILE_OBJECT FileObject,
1725 IN PMDL MdlChain
1726 );
1727
1728 NTKERNELAPI
1729 BOOLEAN
1730 NTAPI
1731 FsRtlMdlWriteComplete (
1732 IN PFILE_OBJECT FileObject,
1733 IN PLARGE_INTEGER FileOffset,
1734 IN PMDL MdlChain
1735 );
1736
1737 NTKERNELAPI
1738 VOID
1739 NTAPI
1740 FsRtlNotifyChangeDirectory (
1741 IN PNOTIFY_SYNC NotifySync,
1742 IN PVOID FsContext,
1743 IN PSTRING FullDirectoryName,
1744 IN PLIST_ENTRY NotifyList,
1745 IN BOOLEAN WatchTree,
1746 IN ULONG CompletionFilter,
1747 IN PIRP NotifyIrp
1748 );
1749
1750 NTKERNELAPI
1751 NTSTATUS
1752 NTAPI
1753 ObCreateObject (
1754 IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL,
1755 IN POBJECT_TYPE ObjectType,
1756 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
1757 IN KPROCESSOR_MODE AccessMode,
1758 IN OUT PVOID ParseContext OPTIONAL,
1759 IN ULONG ObjectSize,
1760 IN ULONG PagedPoolCharge OPTIONAL,
1761 IN ULONG NonPagedPoolCharge OPTIONAL,
1762 OUT PVOID *Object
1763 );
1764
1765 NTKERNELAPI
1766 ULONG
1767 NTAPI
1768 ObGetObjectPointerCount (
1769 IN PVOID Object
1770 );
1771
1772 NTKERNELAPI
1773 NTSTATUS
1774 NTAPI
1775 ObReferenceObjectByName (
1776 IN PUNICODE_STRING ObjectName,
1777 IN ULONG Attributes,
1778 IN PACCESS_STATE PassedAccessState OPTIONAL,
1779 IN ACCESS_MASK DesiredAccess OPTIONAL,
1780 IN POBJECT_TYPE ObjectType,
1781 IN KPROCESSOR_MODE AccessMode,
1782 IN OUT PVOID ParseContext OPTIONAL,
1783 OUT PVOID *Object
1784 );
1785
1786 #define PsDereferenceImpersonationToken(T) \
1787 {if (ARGUMENT_PRESENT(T)) { \
1788 (ObDereferenceObject((T))); \
1789 } else { \
1790 ; \
1791 } \
1792 }
1793
1794 NTKERNELAPI
1795 NTSTATUS
1796 NTAPI
1797 PsLookupProcessThreadByCid (
1798 IN PCLIENT_ID Cid,
1799 OUT PEPROCESS *Process OPTIONAL,
1800 OUT PETHREAD *Thread
1801 );
1802
1803 NTSYSAPI
1804 NTSTATUS
1805 NTAPI
1806 RtlSetSaclSecurityDescriptor (
1807 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1808 IN BOOLEAN SaclPresent,
1809 IN PACL Sacl,
1810 IN BOOLEAN SaclDefaulted
1811 );
1812
1813 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
1814
1815 #if (VER_PRODUCTBUILD >= 2195)
1816
1817 NTSYSAPI
1818 NTSTATUS
1819 NTAPI
1820 ZwAdjustPrivilegesToken (
1821 IN HANDLE TokenHandle,
1822 IN BOOLEAN DisableAllPrivileges,
1823 IN PTOKEN_PRIVILEGES NewState,
1824 IN ULONG BufferLength,
1825 OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL,
1826 OUT PULONG ReturnLength
1827 );
1828
1829 #endif /* (VER_PRODUCTBUILD >= 2195) */
1830
1831 NTSYSAPI
1832 NTSTATUS
1833 NTAPI
1834 ZwAlertThread (
1835 IN HANDLE ThreadHandle
1836 );
1837
1838 NTSYSAPI
1839 NTSTATUS
1840 NTAPI
1841 ZwAccessCheckAndAuditAlarm (
1842 IN PUNICODE_STRING SubsystemName,
1843 IN PVOID HandleId,
1844 IN PUNICODE_STRING ObjectTypeName,
1845 IN PUNICODE_STRING ObjectName,
1846 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1847 IN ACCESS_MASK DesiredAccess,
1848 IN PGENERIC_MAPPING GenericMapping,
1849 IN BOOLEAN ObjectCreation,
1850 OUT PACCESS_MASK GrantedAccess,
1851 OUT PBOOLEAN AccessStatus,
1852 OUT PBOOLEAN GenerateOnClose
1853 );
1854
1855 #if (VER_PRODUCTBUILD >= 2195)
1856
1857 NTSYSAPI
1858 NTSTATUS
1859 NTAPI
1860 ZwCancelIoFile (
1861 IN HANDLE FileHandle,
1862 OUT PIO_STATUS_BLOCK IoStatusBlock
1863 );
1864
1865 #endif /* (VER_PRODUCTBUILD >= 2195) */
1866
1867 NTSYSAPI
1868 NTSTATUS
1869 NTAPI
1870 ZwClearEvent (
1871 IN HANDLE EventHandle
1872 );
1873
1874 NTSYSAPI
1875 NTSTATUS
1876 NTAPI
1877 ZwCloseObjectAuditAlarm (
1878 IN PUNICODE_STRING SubsystemName,
1879 IN PVOID HandleId,
1880 IN BOOLEAN GenerateOnClose
1881 );
1882
1883 NTSYSAPI
1884 NTSTATUS
1885 NTAPI
1886 ZwCreateSymbolicLinkObject (
1887 OUT PHANDLE SymbolicLinkHandle,
1888 IN ACCESS_MASK DesiredAccess,
1889 IN POBJECT_ATTRIBUTES ObjectAttributes,
1890 IN PUNICODE_STRING TargetName
1891 );
1892
1893 NTSYSAPI
1894 NTSTATUS
1895 NTAPI
1896 ZwFlushInstructionCache (
1897 IN HANDLE ProcessHandle,
1898 IN PVOID BaseAddress OPTIONAL,
1899 IN ULONG FlushSize
1900 );
1901
1902 NTSYSAPI
1903 NTSTATUS
1904 NTAPI
1905 ZwFlushBuffersFile(
1906 IN HANDLE FileHandle,
1907 OUT PIO_STATUS_BLOCK IoStatusBlock
1908 );
1909
1910 #if (VER_PRODUCTBUILD >= 2195)
1911
1912 NTSYSAPI
1913 NTSTATUS
1914 NTAPI
1915 ZwInitiatePowerAction (
1916 IN POWER_ACTION SystemAction,
1917 IN SYSTEM_POWER_STATE MinSystemState,
1918 IN ULONG Flags,
1919 IN BOOLEAN Asynchronous
1920 );
1921
1922 #endif /* (VER_PRODUCTBUILD >= 2195) */
1923
1924 NTSYSAPI
1925 NTSTATUS
1926 NTAPI
1927 ZwLoadKey (
1928 IN POBJECT_ATTRIBUTES KeyObjectAttributes,
1929 IN POBJECT_ATTRIBUTES FileObjectAttributes
1930 );
1931
1932 NTSYSAPI
1933 NTSTATUS
1934 NTAPI
1935 ZwOpenProcessToken (
1936 IN HANDLE ProcessHandle,
1937 IN ACCESS_MASK DesiredAccess,
1938 OUT PHANDLE TokenHandle
1939 );
1940
1941 NTSYSAPI
1942 NTSTATUS
1943 NTAPI
1944 ZwOpenThread (
1945 OUT PHANDLE ThreadHandle,
1946 IN ACCESS_MASK DesiredAccess,
1947 IN POBJECT_ATTRIBUTES ObjectAttributes,
1948 IN PCLIENT_ID ClientId
1949 );
1950
1951 NTSYSAPI
1952 NTSTATUS
1953 NTAPI
1954 ZwOpenThreadToken (
1955 IN HANDLE ThreadHandle,
1956 IN ACCESS_MASK DesiredAccess,
1957 IN BOOLEAN OpenAsSelf,
1958 OUT PHANDLE TokenHandle
1959 );
1960
1961 NTSYSAPI
1962 NTSTATUS
1963 NTAPI
1964 ZwPulseEvent (
1965 IN HANDLE EventHandle,
1966 OUT PLONG PreviousState OPTIONAL
1967 );
1968
1969 NTSYSAPI
1970 NTSTATUS
1971 NTAPI
1972 ZwQueryDefaultLocale (
1973 IN BOOLEAN ThreadOrSystem,
1974 OUT PLCID Locale
1975 );
1976
1977 #if (VER_PRODUCTBUILD >= 2195)
1978
1979 NTSYSAPI
1980 NTSTATUS
1981 NTAPI
1982 ZwQueryDirectoryObject (
1983 IN HANDLE DirectoryHandle,
1984 OUT PVOID Buffer,
1985 IN ULONG Length,
1986 IN BOOLEAN ReturnSingleEntry,
1987 IN BOOLEAN RestartScan,
1988 IN OUT PULONG Context,
1989 OUT PULONG ReturnLength OPTIONAL
1990 );
1991
1992 #endif /* (VER_PRODUCTBUILD >= 2195) */
1993
1994 NTSYSAPI
1995 NTSTATUS
1996 NTAPI
1997 ZwQueryInformationProcess (
1998 IN HANDLE ProcessHandle,
1999 IN PROCESSINFOCLASS ProcessInformationClass,
2000 OUT PVOID ProcessInformation,
2001 IN ULONG ProcessInformationLength,
2002 OUT PULONG ReturnLength OPTIONAL
2003 );
2004
2005 NTSYSAPI
2006 NTSTATUS
2007 NTAPI
2008 ZwReplaceKey (
2009 IN POBJECT_ATTRIBUTES NewFileObjectAttributes,
2010 IN HANDLE KeyHandle,
2011 IN POBJECT_ATTRIBUTES OldFileObjectAttributes
2012 );
2013
2014 NTSYSAPI
2015 NTSTATUS
2016 NTAPI
2017 ZwResetEvent (
2018 IN HANDLE EventHandle,
2019 OUT PLONG PreviousState OPTIONAL
2020 );
2021
2022 #if (VER_PRODUCTBUILD >= 2195)
2023
2024 NTSYSAPI
2025 NTSTATUS
2026 NTAPI
2027 ZwRestoreKey (
2028 IN HANDLE KeyHandle,
2029 IN HANDLE FileHandle,
2030 IN ULONG Flags
2031 );
2032
2033 #endif /* (VER_PRODUCTBUILD >= 2195) */
2034
2035 NTSYSAPI
2036 NTSTATUS
2037 NTAPI
2038 ZwSaveKey (
2039 IN HANDLE KeyHandle,
2040 IN HANDLE FileHandle
2041 );
2042
2043 NTSYSAPI
2044 NTSTATUS
2045 NTAPI
2046 ZwSetDefaultLocale (
2047 IN BOOLEAN ThreadOrSystem,
2048 IN LCID Locale
2049 );
2050
2051 #if (VER_PRODUCTBUILD >= 2195)
2052
2053 NTSYSAPI
2054 NTSTATUS
2055 NTAPI
2056 ZwSetDefaultUILanguage (
2057 IN LANGID LanguageId
2058 );
2059
2060 #endif /* (VER_PRODUCTBUILD >= 2195) */
2061
2062 NTSYSAPI
2063 NTSTATUS
2064 NTAPI
2065 ZwSetInformationProcess (
2066 IN HANDLE ProcessHandle,
2067 IN PROCESSINFOCLASS ProcessInformationClass,
2068 IN PVOID ProcessInformation,
2069 IN ULONG ProcessInformationLength
2070 );
2071
2072 NTSYSAPI
2073 NTSTATUS
2074 NTAPI
2075 ZwSetSystemTime (
2076 IN PLARGE_INTEGER NewTime,
2077 OUT PLARGE_INTEGER OldTime OPTIONAL
2078 );
2079
2080 NTSYSAPI
2081 NTSTATUS
2082 NTAPI
2083 ZwUnloadKey (
2084 IN POBJECT_ATTRIBUTES KeyObjectAttributes
2085 );
2086
2087 NTSYSAPI
2088 NTSTATUS
2089 NTAPI
2090 ZwWaitForMultipleObjects (
2091 IN ULONG HandleCount,
2092 IN PHANDLE Handles,
2093 IN WAIT_TYPE WaitType,
2094 IN BOOLEAN Alertable,
2095 IN PLARGE_INTEGER Timeout OPTIONAL
2096 );
2097
2098 NTSYSAPI
2099 NTSTATUS
2100 NTAPI
2101 ZwYieldExecution (
2102 VOID
2103 );
2104
2105 #pragma pack(pop)
2106
2107 #ifdef __cplusplus
2108 }
2109 #endif