[XDK]
[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_WIN7)
1123 typedef struct _ECP_HEADER ECP_HEADER, *PECP_HEADER;
1124 #endif
1125
1126 #if (NTDDI_VERSION >= NTDDI_VISTA)
1127
1128 typedef enum _NETWORK_OPEN_LOCATION_QUALIFIER {
1129 NetworkOpenLocationAny,
1130 NetworkOpenLocationRemote,
1131 NetworkOpenLocationLoopback
1132 } NETWORK_OPEN_LOCATION_QUALIFIER;
1133
1134 typedef enum _NETWORK_OPEN_INTEGRITY_QUALIFIER {
1135 NetworkOpenIntegrityAny,
1136 NetworkOpenIntegrityNone,
1137 NetworkOpenIntegritySigned,
1138 NetworkOpenIntegrityEncrypted,
1139 NetworkOpenIntegrityMaximum
1140 } NETWORK_OPEN_INTEGRITY_QUALIFIER;
1141
1142 #if (NTDDI_VERSION >= NTDDI_WIN7)
1143
1144 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_COLLAPSING 0x1
1145 #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_DURABILITY 0x2
1146 #define NETWORK_OPEN_ECP_IN_FLAG_FORCE_BUFFERED_SYNCHRONOUS_IO_HACK 0x80000000
1147
1148 typedef struct _NETWORK_OPEN_ECP_CONTEXT {
1149 USHORT Size;
1150 USHORT Reserved;
1151 _ANONYMOUS_STRUCT struct {
1152 struct {
1153 NETWORK_OPEN_LOCATION_QUALIFIER Location;
1154 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
1155 ULONG Flags;
1156 } in;
1157 struct {
1158 NETWORK_OPEN_LOCATION_QUALIFIER Location;
1159 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
1160 ULONG Flags;
1161 } out;
1162 } DUMMYSTRUCTNAME;
1163 } NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
1164
1165 typedef struct _NETWORK_OPEN_ECP_CONTEXT_V0 {
1166 USHORT Size;
1167 USHORT Reserved;
1168 _ANONYMOUS_STRUCT struct {
1169 struct {
1170 NETWORK_OPEN_LOCATION_QUALIFIER Location;
1171 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
1172 } in;
1173 struct {
1174 NETWORK_OPEN_LOCATION_QUALIFIER Location;
1175 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
1176 } out;
1177 } DUMMYSTRUCTNAME;
1178 } NETWORK_OPEN_ECP_CONTEXT_V0, *PNETWORK_OPEN_ECP_CONTEXT_V0;
1179
1180 #elif (NTDDI_VERSION >= NTDDI_VISTA)
1181 typedef struct _NETWORK_OPEN_ECP_CONTEXT {
1182 USHORT Size;
1183 USHORT Reserved;
1184 _ANONYMOUS_STRUCT struct {
1185 struct {
1186 NETWORK_OPEN_LOCATION_QUALIFIER Location;
1187 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
1188 } in;
1189 struct {
1190 NETWORK_OPEN_LOCATION_QUALIFIER Location;
1191 NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
1192 } out;
1193 } DUMMYSTRUCTNAME;
1194 } NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
1195 #endif
1196
1197 DEFINE_GUID(GUID_ECP_NETWORK_OPEN_CONTEXT, 0xc584edbf, 0x00df, 0x4d28, 0xb8, 0x84, 0x35, 0xba, 0xca, 0x89, 0x11, 0xe8);
1198
1199 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1200
1201
1202 #if (NTDDI_VERSION >= NTDDI_VISTA)
1203
1204 typedef struct _PREFETCH_OPEN_ECP_CONTEXT {
1205 PVOID Context;
1206 } PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT;
1207
1208 DEFINE_GUID(GUID_ECP_PREFETCH_OPEN, 0xe1777b21, 0x847e, 0x4837, 0xaa, 0x45, 0x64, 0x16, 0x1d, 0x28, 0x6, 0x55);
1209
1210 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1211
1212 #if (NTDDI_VERSION >= NTDDI_WIN7)
1213
1214 DEFINE_GUID (GUID_ECP_NFS_OPEN, 0xf326d30c, 0xe5f8, 0x4fe7, 0xab, 0x74, 0xf5, 0xa3, 0x19, 0x6d, 0x92, 0xdb);
1215 DEFINE_GUID (GUID_ECP_SRV_OPEN, 0xbebfaebc, 0xaabf, 0x489d, 0x9d, 0x2c, 0xe9, 0xe3, 0x61, 0x10, 0x28, 0x53);
1216
1217 typedef struct sockaddr_storage *PSOCKADDR_STORAGE_NFS;
1218
1219 typedef struct _NFS_OPEN_ECP_CONTEXT {
1220 PUNICODE_STRING ExportAlias;
1221 PSOCKADDR_STORAGE_NFS ClientSocketAddress;
1222 } NFS_OPEN_ECP_CONTEXT, *PNFS_OPEN_ECP_CONTEXT, **PPNFS_OPEN_ECP_CONTEXT;
1223
1224 typedef struct _SRV_OPEN_ECP_CONTEXT {
1225 PUNICODE_STRING ShareName;
1226 PSOCKADDR_STORAGE_NFS SocketAddress;
1227 BOOLEAN OplockBlockState;
1228 BOOLEAN OplockAppState;
1229 BOOLEAN OplockFinalState;
1230 } SRV_OPEN_ECP_CONTEXT, *PSRV_OPEN_ECP_CONTEXT;
1231
1232 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1233
1234 #define PIN_WAIT (1)
1235 #define PIN_EXCLUSIVE (2)
1236 #define PIN_NO_READ (4)
1237 #define PIN_IF_BCB (8)
1238 #define PIN_CALLER_TRACKS_DIRTY_DATA (32)
1239 #define PIN_HIGH_PRIORITY (64)
1240
1241 #define MAP_WAIT 1
1242 #define MAP_NO_READ (16)
1243 #define MAP_HIGH_PRIORITY (64)
1244
1245 #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
1246 #define IOCTL_REDIR_QUERY_PATH_EX CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 100, METHOD_NEITHER, FILE_ANY_ACCESS)
1247
1248 typedef struct _QUERY_PATH_REQUEST {
1249 ULONG PathNameLength;
1250 PIO_SECURITY_CONTEXT SecurityContext;
1251 WCHAR FilePathName[1];
1252 } QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST;
1253
1254 typedef struct _QUERY_PATH_REQUEST_EX {
1255 PIO_SECURITY_CONTEXT pSecurityContext;
1256 ULONG EaLength;
1257 PVOID pEaBuffer;
1258 UNICODE_STRING PathName;
1259 UNICODE_STRING DomainServiceName;
1260 ULONG_PTR Reserved[ 3 ];
1261 } QUERY_PATH_REQUEST_EX, *PQUERY_PATH_REQUEST_EX;
1262
1263 typedef struct _QUERY_PATH_RESPONSE {
1264 ULONG LengthAccepted;
1265 } QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE;
1266
1267 #define VOLSNAPCONTROLTYPE 0x00000053
1268 #define IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES CTL_CODE(VOLSNAPCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1269
1270 /* FIXME : These definitions below don't belong here (or anywhere in ddk really) */
1271 #pragma pack(push,4)
1272
1273 #ifndef VER_PRODUCTBUILD
1274 #define VER_PRODUCTBUILD 10000
1275 #endif
1276
1277 #include "csq.h"
1278
1279 extern PACL SePublicDefaultDacl;
1280 extern PACL SeSystemDefaultDacl;
1281
1282 #define FS_LFN_APIS 0x00004000
1283
1284 #define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
1285 #define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
1286 #define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
1287 #define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
1288 #define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
1289 #define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
1290 #define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
1291 #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
1292 #define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
1293 #define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
1294 #define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
1295 #define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
1296 #define FILE_STORAGE_TYPE_MASK 0x000f0000
1297 #define FILE_STORAGE_TYPE_SHIFT 16
1298
1299 #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
1300
1301 #ifdef _X86_
1302 #define HARDWARE_PTE HARDWARE_PTE_X86
1303 #define PHARDWARE_PTE PHARDWARE_PTE_X86
1304 #endif
1305
1306 #define IO_ATTACH_DEVICE_API 0x80000000
1307
1308 #define IO_TYPE_APC 18
1309 #define IO_TYPE_DPC 19
1310 #define IO_TYPE_DEVICE_QUEUE 20
1311 #define IO_TYPE_EVENT_PAIR 21
1312 #define IO_TYPE_INTERRUPT 22
1313 #define IO_TYPE_PROFILE 23
1314
1315 #define IRP_BEING_VERIFIED 0x10
1316
1317 #define MAILSLOT_CLASS_FIRSTCLASS 1
1318 #define MAILSLOT_CLASS_SECONDCLASS 2
1319
1320 #define MAILSLOT_SIZE_AUTO 0
1321
1322 #define MEM_DOS_LIM 0x40000000
1323
1324 #define OB_TYPE_TYPE 1
1325 #define OB_TYPE_DIRECTORY 2
1326 #define OB_TYPE_SYMBOLIC_LINK 3
1327 #define OB_TYPE_TOKEN 4
1328 #define OB_TYPE_PROCESS 5
1329 #define OB_TYPE_THREAD 6
1330 #define OB_TYPE_EVENT 7
1331 #define OB_TYPE_EVENT_PAIR 8
1332 #define OB_TYPE_MUTANT 9
1333 #define OB_TYPE_SEMAPHORE 10
1334 #define OB_TYPE_TIMER 11
1335 #define OB_TYPE_PROFILE 12
1336 #define OB_TYPE_WINDOW_STATION 13
1337 #define OB_TYPE_DESKTOP 14
1338 #define OB_TYPE_SECTION 15
1339 #define OB_TYPE_KEY 16
1340 #define OB_TYPE_PORT 17
1341 #define OB_TYPE_ADAPTER 18
1342 #define OB_TYPE_CONTROLLER 19
1343 #define OB_TYPE_DEVICE 20
1344 #define OB_TYPE_DRIVER 21
1345 #define OB_TYPE_IO_COMPLETION 22
1346 #define OB_TYPE_FILE 23
1347
1348 #define SEC_BASED 0x00200000
1349
1350 /* end winnt.h */
1351
1352 #define TOKEN_HAS_ADMIN_GROUP 0x08
1353
1354 #if (VER_PRODUCTBUILD >= 1381)
1355 #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
1356 #endif /* (VER_PRODUCTBUILD >= 1381) */
1357
1358 #if (VER_PRODUCTBUILD >= 2195)
1359
1360 #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
1361 #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
1362
1363 #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
1364
1365 #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
1366 #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
1367 #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1368 #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
1369 #endif /* (VER_PRODUCTBUILD >= 2195) */
1370
1371 #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
1372 #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
1373 #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
1374 #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
1375 #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
1376 #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
1377 #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
1378 #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
1379
1380 typedef enum _FILE_STORAGE_TYPE {
1381 StorageTypeDefault = 1,
1382 StorageTypeDirectory,
1383 StorageTypeFile,
1384 StorageTypeJunctionPoint,
1385 StorageTypeCatalog,
1386 StorageTypeStructuredStorage,
1387 StorageTypeEmbedding,
1388 StorageTypeStream
1389 } FILE_STORAGE_TYPE;
1390
1391 typedef struct _OBJECT_BASIC_INFORMATION
1392 {
1393 ULONG Attributes;
1394 ACCESS_MASK GrantedAccess;
1395 ULONG HandleCount;
1396 ULONG PointerCount;
1397 ULONG PagedPoolCharge;
1398 ULONG NonPagedPoolCharge;
1399 ULONG Reserved[ 3 ];
1400 ULONG NameInfoSize;
1401 ULONG TypeInfoSize;
1402 ULONG SecurityDescriptorSize;
1403 LARGE_INTEGER CreationTime;
1404 } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
1405
1406 typedef struct _BITMAP_RANGE {
1407 LIST_ENTRY Links;
1408 LONGLONG BasePage;
1409 ULONG FirstDirtyPage;
1410 ULONG LastDirtyPage;
1411 ULONG DirtyPages;
1412 PULONG Bitmap;
1413 } BITMAP_RANGE, *PBITMAP_RANGE;
1414
1415 typedef struct _FILE_COPY_ON_WRITE_INFORMATION {
1416 BOOLEAN ReplaceIfExists;
1417 HANDLE RootDirectory;
1418 ULONG FileNameLength;
1419 WCHAR FileName[1];
1420 } FILE_COPY_ON_WRITE_INFORMATION, *PFILE_COPY_ON_WRITE_INFORMATION;
1421
1422 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
1423 ULONG NextEntryOffset;
1424 ULONG FileIndex;
1425 LARGE_INTEGER CreationTime;
1426 LARGE_INTEGER LastAccessTime;
1427 LARGE_INTEGER LastWriteTime;
1428 LARGE_INTEGER ChangeTime;
1429 LARGE_INTEGER EndOfFile;
1430 LARGE_INTEGER AllocationSize;
1431 ULONG FileAttributes;
1432 ULONG FileNameLength;
1433 ULONG EaSize;
1434 WCHAR FileName[ANYSIZE_ARRAY];
1435 } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION;
1436
1437 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
1438 typedef struct _FILE_SHARED_LOCK_ENTRY {
1439 PVOID Unknown1;
1440 PVOID Unknown2;
1441 FILE_LOCK_INFO FileLock;
1442 } FILE_SHARED_LOCK_ENTRY, *PFILE_SHARED_LOCK_ENTRY;
1443
1444 /* raw internal file lock struct returned from FsRtlGetNextFileLock */
1445 typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY {
1446 LIST_ENTRY ListEntry;
1447 PVOID Unknown1;
1448 PVOID Unknown2;
1449 FILE_LOCK_INFO FileLock;
1450 } FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
1451
1452 typedef struct _FILE_MAILSLOT_PEEK_BUFFER {
1453 ULONG ReadDataAvailable;
1454 ULONG NumberOfMessages;
1455 ULONG MessageLength;
1456 } FILE_MAILSLOT_PEEK_BUFFER, *PFILE_MAILSLOT_PEEK_BUFFER;
1457
1458 typedef struct _FILE_OLE_CLASSID_INFORMATION {
1459 GUID ClassId;
1460 } FILE_OLE_CLASSID_INFORMATION, *PFILE_OLE_CLASSID_INFORMATION;
1461
1462 typedef struct _FILE_OLE_ALL_INFORMATION {
1463 FILE_BASIC_INFORMATION BasicInformation;
1464 FILE_STANDARD_INFORMATION StandardInformation;
1465 FILE_INTERNAL_INFORMATION InternalInformation;
1466 FILE_EA_INFORMATION EaInformation;
1467 FILE_ACCESS_INFORMATION AccessInformation;
1468 FILE_POSITION_INFORMATION PositionInformation;
1469 FILE_MODE_INFORMATION ModeInformation;
1470 FILE_ALIGNMENT_INFORMATION AlignmentInformation;
1471 USN LastChangeUsn;
1472 USN ReplicationUsn;
1473 LARGE_INTEGER SecurityChangeTime;
1474 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
1475 FILE_OBJECTID_INFORMATION ObjectIdInformation;
1476 FILE_STORAGE_TYPE StorageType;
1477 ULONG OleStateBits;
1478 ULONG OleId;
1479 ULONG NumberOfStreamReferences;
1480 ULONG StreamIndex;
1481 ULONG SecurityId;
1482 BOOLEAN ContentIndexDisable;
1483 BOOLEAN InheritContentIndexDisable;
1484 FILE_NAME_INFORMATION NameInformation;
1485 } FILE_OLE_ALL_INFORMATION, *PFILE_OLE_ALL_INFORMATION;
1486
1487 typedef struct _FILE_OLE_DIR_INFORMATION {
1488 ULONG NextEntryOffset;
1489 ULONG FileIndex;
1490 LARGE_INTEGER CreationTime;
1491 LARGE_INTEGER LastAccessTime;
1492 LARGE_INTEGER LastWriteTime;
1493 LARGE_INTEGER ChangeTime;
1494 LARGE_INTEGER EndOfFile;
1495 LARGE_INTEGER AllocationSize;
1496 ULONG FileAttributes;
1497 ULONG FileNameLength;
1498 FILE_STORAGE_TYPE StorageType;
1499 GUID OleClassId;
1500 ULONG OleStateBits;
1501 BOOLEAN ContentIndexDisable;
1502 BOOLEAN InheritContentIndexDisable;
1503 WCHAR FileName[1];
1504 } FILE_OLE_DIR_INFORMATION, *PFILE_OLE_DIR_INFORMATION;
1505
1506 typedef struct _FILE_OLE_INFORMATION {
1507 LARGE_INTEGER SecurityChangeTime;
1508 FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
1509 FILE_OBJECTID_INFORMATION ObjectIdInformation;
1510 FILE_STORAGE_TYPE StorageType;
1511 ULONG OleStateBits;
1512 BOOLEAN ContentIndexDisable;
1513 BOOLEAN InheritContentIndexDisable;
1514 } FILE_OLE_INFORMATION, *PFILE_OLE_INFORMATION;
1515
1516 typedef struct _FILE_OLE_STATE_BITS_INFORMATION {
1517 ULONG StateBits;
1518 ULONG StateBitsMask;
1519 } FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION;
1520
1521 typedef struct _MAPPING_PAIR {
1522 ULONGLONG Vcn;
1523 ULONGLONG Lcn;
1524 } MAPPING_PAIR, *PMAPPING_PAIR;
1525
1526 typedef struct _GET_RETRIEVAL_DESCRIPTOR {
1527 ULONG NumberOfPairs;
1528 ULONGLONG StartVcn;
1529 MAPPING_PAIR Pair[1];
1530 } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
1531
1532 typedef struct _MBCB {
1533 CSHORT NodeTypeCode;
1534 CSHORT NodeIsInZone;
1535 ULONG PagesToWrite;
1536 ULONG DirtyPages;
1537 ULONG Reserved;
1538 LIST_ENTRY BitmapRanges;
1539 LONGLONG ResumeWritePage;
1540 BITMAP_RANGE BitmapRange1;
1541 BITMAP_RANGE BitmapRange2;
1542 BITMAP_RANGE BitmapRange3;
1543 } MBCB, *PMBCB;
1544
1545 typedef struct _MOVEFILE_DESCRIPTOR {
1546 HANDLE FileHandle;
1547 ULONG Reserved;
1548 LARGE_INTEGER StartVcn;
1549 LARGE_INTEGER TargetLcn;
1550 ULONG NumVcns;
1551 ULONG Reserved1;
1552 } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
1553
1554 typedef struct _OBJECT_BASIC_INFO {
1555 ULONG Attributes;
1556 ACCESS_MASK GrantedAccess;
1557 ULONG HandleCount;
1558 ULONG ReferenceCount;
1559 ULONG PagedPoolUsage;
1560 ULONG NonPagedPoolUsage;
1561 ULONG Reserved[3];
1562 ULONG NameInformationLength;
1563 ULONG TypeInformationLength;
1564 ULONG SecurityDescriptorLength;
1565 LARGE_INTEGER CreateTime;
1566 } OBJECT_BASIC_INFO, *POBJECT_BASIC_INFO;
1567
1568 typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO {
1569 BOOLEAN Inherit;
1570 BOOLEAN ProtectFromClose;
1571 } OBJECT_HANDLE_ATTRIBUTE_INFO, *POBJECT_HANDLE_ATTRIBUTE_INFO;
1572
1573 typedef struct _OBJECT_NAME_INFO {
1574 UNICODE_STRING ObjectName;
1575 WCHAR ObjectNameBuffer[1];
1576 } OBJECT_NAME_INFO, *POBJECT_NAME_INFO;
1577
1578 typedef struct _OBJECT_PROTECTION_INFO {
1579 BOOLEAN Inherit;
1580 BOOLEAN ProtectHandle;
1581 } OBJECT_PROTECTION_INFO, *POBJECT_PROTECTION_INFO;
1582
1583 typedef struct _OBJECT_TYPE_INFO {
1584 UNICODE_STRING ObjectTypeName;
1585 UCHAR Unknown[0x58];
1586 WCHAR ObjectTypeNameBuffer[1];
1587 } OBJECT_TYPE_INFO, *POBJECT_TYPE_INFO;
1588
1589 typedef struct _OBJECT_ALL_TYPES_INFO {
1590 ULONG NumberOfObjectTypes;
1591 OBJECT_TYPE_INFO ObjectsTypeInfo[1];
1592 } OBJECT_ALL_TYPES_INFO, *POBJECT_ALL_TYPES_INFO;
1593
1594 #if defined(USE_LPC6432)
1595 #define LPC_CLIENT_ID CLIENT_ID64
1596 #define LPC_SIZE_T ULONGLONG
1597 #define LPC_PVOID ULONGLONG
1598 #define LPC_HANDLE ULONGLONG
1599 #else
1600 #define LPC_CLIENT_ID CLIENT_ID
1601 #define LPC_SIZE_T SIZE_T
1602 #define LPC_PVOID PVOID
1603 #define LPC_HANDLE HANDLE
1604 #endif
1605
1606 typedef struct _PORT_MESSAGE
1607 {
1608 union
1609 {
1610 struct
1611 {
1612 CSHORT DataLength;
1613 CSHORT TotalLength;
1614 } s1;
1615 ULONG Length;
1616 } u1;
1617 union
1618 {
1619 struct
1620 {
1621 CSHORT Type;
1622 CSHORT DataInfoOffset;
1623 } s2;
1624 ULONG ZeroInit;
1625 } u2;
1626 __GNU_EXTENSION union
1627 {
1628 LPC_CLIENT_ID ClientId;
1629 double DoNotUseThisField;
1630 };
1631 ULONG MessageId;
1632 __GNU_EXTENSION union
1633 {
1634 LPC_SIZE_T ClientViewSize;
1635 ULONG CallbackId;
1636 };
1637 } PORT_MESSAGE, *PPORT_MESSAGE;
1638
1639 #define LPC_KERNELMODE_MESSAGE (CSHORT)((USHORT)0x8000)
1640
1641 typedef struct _PORT_VIEW
1642 {
1643 ULONG Length;
1644 LPC_HANDLE SectionHandle;
1645 ULONG SectionOffset;
1646 LPC_SIZE_T ViewSize;
1647 LPC_PVOID ViewBase;
1648 LPC_PVOID ViewRemoteBase;
1649 } PORT_VIEW, *PPORT_VIEW;
1650
1651 typedef struct _REMOTE_PORT_VIEW
1652 {
1653 ULONG Length;
1654 LPC_SIZE_T ViewSize;
1655 LPC_PVOID ViewBase;
1656 } REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW;
1657
1658 typedef struct _VAD_HEADER {
1659 PVOID StartVPN;
1660 PVOID EndVPN;
1661 struct _VAD_HEADER* ParentLink;
1662 struct _VAD_HEADER* LeftLink;
1663 struct _VAD_HEADER* RightLink;
1664 ULONG Flags; /* LSB = CommitCharge */
1665 PVOID ControlArea;
1666 PVOID FirstProtoPte;
1667 PVOID LastPTE;
1668 ULONG Unknown;
1669 LIST_ENTRY Secured;
1670 } VAD_HEADER, *PVAD_HEADER;
1671
1672 NTKERNELAPI
1673 LARGE_INTEGER
1674 NTAPI
1675 CcGetLsnForFileObject (
1676 IN PFILE_OBJECT FileObject,
1677 OUT PLARGE_INTEGER OldestLsn OPTIONAL
1678 );
1679
1680 NTKERNELAPI
1681 PVOID
1682 NTAPI
1683 FsRtlAllocatePool (
1684 IN POOL_TYPE PoolType,
1685 IN ULONG NumberOfBytes
1686 );
1687
1688 NTKERNELAPI
1689 PVOID
1690 NTAPI
1691 FsRtlAllocatePoolWithQuota (
1692 IN POOL_TYPE PoolType,
1693 IN ULONG NumberOfBytes
1694 );
1695
1696 NTKERNELAPI
1697 PVOID
1698 NTAPI
1699 FsRtlAllocatePoolWithQuotaTag (
1700 IN POOL_TYPE PoolType,
1701 IN ULONG NumberOfBytes,
1702 IN ULONG Tag
1703 );
1704
1705 NTKERNELAPI
1706 PVOID
1707 NTAPI
1708 FsRtlAllocatePoolWithTag (
1709 IN POOL_TYPE PoolType,
1710 IN ULONG NumberOfBytes,
1711 IN ULONG Tag
1712 );
1713
1714 NTKERNELAPI
1715 BOOLEAN
1716 NTAPI
1717 FsRtlIsFatDbcsLegal (
1718 IN ANSI_STRING DbcsName,
1719 IN BOOLEAN WildCardsPermissible,
1720 IN BOOLEAN PathNamePermissible,
1721 IN BOOLEAN LeadingBackslashPermissible
1722 );
1723
1724 NTKERNELAPI
1725 BOOLEAN
1726 NTAPI
1727 FsRtlMdlReadComplete (
1728 IN PFILE_OBJECT FileObject,
1729 IN PMDL MdlChain
1730 );
1731
1732 NTKERNELAPI
1733 BOOLEAN
1734 NTAPI
1735 FsRtlMdlWriteComplete (
1736 IN PFILE_OBJECT FileObject,
1737 IN PLARGE_INTEGER FileOffset,
1738 IN PMDL MdlChain
1739 );
1740
1741 NTKERNELAPI
1742 VOID
1743 NTAPI
1744 FsRtlNotifyChangeDirectory (
1745 IN PNOTIFY_SYNC NotifySync,
1746 IN PVOID FsContext,
1747 IN PSTRING FullDirectoryName,
1748 IN PLIST_ENTRY NotifyList,
1749 IN BOOLEAN WatchTree,
1750 IN ULONG CompletionFilter,
1751 IN PIRP NotifyIrp
1752 );
1753
1754 NTKERNELAPI
1755 NTSTATUS
1756 NTAPI
1757 ObCreateObject (
1758 IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL,
1759 IN POBJECT_TYPE ObjectType,
1760 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
1761 IN KPROCESSOR_MODE AccessMode,
1762 IN OUT PVOID ParseContext OPTIONAL,
1763 IN ULONG ObjectSize,
1764 IN ULONG PagedPoolCharge OPTIONAL,
1765 IN ULONG NonPagedPoolCharge OPTIONAL,
1766 OUT PVOID *Object
1767 );
1768
1769 NTKERNELAPI
1770 ULONG
1771 NTAPI
1772 ObGetObjectPointerCount (
1773 IN PVOID Object
1774 );
1775
1776 NTKERNELAPI
1777 NTSTATUS
1778 NTAPI
1779 ObReferenceObjectByName (
1780 IN PUNICODE_STRING ObjectName,
1781 IN ULONG Attributes,
1782 IN PACCESS_STATE PassedAccessState OPTIONAL,
1783 IN ACCESS_MASK DesiredAccess OPTIONAL,
1784 IN POBJECT_TYPE ObjectType,
1785 IN KPROCESSOR_MODE AccessMode,
1786 IN OUT PVOID ParseContext OPTIONAL,
1787 OUT PVOID *Object
1788 );
1789
1790 #define PsDereferenceImpersonationToken(T) \
1791 {if (ARGUMENT_PRESENT(T)) { \
1792 (ObDereferenceObject((T))); \
1793 } else { \
1794 ; \
1795 } \
1796 }
1797
1798 NTKERNELAPI
1799 NTSTATUS
1800 NTAPI
1801 PsLookupProcessThreadByCid (
1802 IN PCLIENT_ID Cid,
1803 OUT PEPROCESS *Process OPTIONAL,
1804 OUT PETHREAD *Thread
1805 );
1806
1807 NTSYSAPI
1808 NTSTATUS
1809 NTAPI
1810 RtlSetSaclSecurityDescriptor (
1811 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
1812 IN BOOLEAN SaclPresent,
1813 IN PACL Sacl,
1814 IN BOOLEAN SaclDefaulted
1815 );
1816
1817 #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
1818
1819 #if (VER_PRODUCTBUILD >= 2195)
1820
1821 NTSYSAPI
1822 NTSTATUS
1823 NTAPI
1824 ZwAdjustPrivilegesToken (
1825 IN HANDLE TokenHandle,
1826 IN BOOLEAN DisableAllPrivileges,
1827 IN PTOKEN_PRIVILEGES NewState,
1828 IN ULONG BufferLength,
1829 OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL,
1830 OUT PULONG ReturnLength
1831 );
1832
1833 #endif /* (VER_PRODUCTBUILD >= 2195) */
1834
1835 NTSYSAPI
1836 NTSTATUS
1837 NTAPI
1838 ZwAlertThread (
1839 IN HANDLE ThreadHandle
1840 );
1841
1842 NTSYSAPI
1843 NTSTATUS
1844 NTAPI
1845 ZwAccessCheckAndAuditAlarm (
1846 IN PUNICODE_STRING SubsystemName,
1847 IN PVOID HandleId,
1848 IN PUNICODE_STRING ObjectTypeName,
1849 IN PUNICODE_STRING ObjectName,
1850 IN PSECURITY_DESCRIPTOR SecurityDescriptor,
1851 IN ACCESS_MASK DesiredAccess,
1852 IN PGENERIC_MAPPING GenericMapping,
1853 IN BOOLEAN ObjectCreation,
1854 OUT PACCESS_MASK GrantedAccess,
1855 OUT PBOOLEAN AccessStatus,
1856 OUT PBOOLEAN GenerateOnClose
1857 );
1858
1859 #if (VER_PRODUCTBUILD >= 2195)
1860
1861 NTSYSAPI
1862 NTSTATUS
1863 NTAPI
1864 ZwCancelIoFile (
1865 IN HANDLE FileHandle,
1866 OUT PIO_STATUS_BLOCK IoStatusBlock
1867 );
1868
1869 #endif /* (VER_PRODUCTBUILD >= 2195) */
1870
1871 NTSYSAPI
1872 NTSTATUS
1873 NTAPI
1874 ZwClearEvent (
1875 IN HANDLE EventHandle
1876 );
1877
1878 NTSYSAPI
1879 NTSTATUS
1880 NTAPI
1881 ZwCloseObjectAuditAlarm (
1882 IN PUNICODE_STRING SubsystemName,
1883 IN PVOID HandleId,
1884 IN BOOLEAN GenerateOnClose
1885 );
1886
1887 NTSYSAPI
1888 NTSTATUS
1889 NTAPI
1890 ZwCreateSymbolicLinkObject (
1891 OUT PHANDLE SymbolicLinkHandle,
1892 IN ACCESS_MASK DesiredAccess,
1893 IN POBJECT_ATTRIBUTES ObjectAttributes,
1894 IN PUNICODE_STRING TargetName
1895 );
1896
1897 NTSYSAPI
1898 NTSTATUS
1899 NTAPI
1900 ZwFlushInstructionCache (
1901 IN HANDLE ProcessHandle,
1902 IN PVOID BaseAddress OPTIONAL,
1903 IN ULONG FlushSize
1904 );
1905
1906 NTSYSAPI
1907 NTSTATUS
1908 NTAPI
1909 ZwFlushBuffersFile(
1910 IN HANDLE FileHandle,
1911 OUT PIO_STATUS_BLOCK IoStatusBlock
1912 );
1913
1914 #if (VER_PRODUCTBUILD >= 2195)
1915
1916 NTSYSAPI
1917 NTSTATUS
1918 NTAPI
1919 ZwInitiatePowerAction (
1920 IN POWER_ACTION SystemAction,
1921 IN SYSTEM_POWER_STATE MinSystemState,
1922 IN ULONG Flags,
1923 IN BOOLEAN Asynchronous
1924 );
1925
1926 #endif /* (VER_PRODUCTBUILD >= 2195) */
1927
1928 NTSYSAPI
1929 NTSTATUS
1930 NTAPI
1931 ZwLoadKey (
1932 IN POBJECT_ATTRIBUTES KeyObjectAttributes,
1933 IN POBJECT_ATTRIBUTES FileObjectAttributes
1934 );
1935
1936 NTSYSAPI
1937 NTSTATUS
1938 NTAPI
1939 ZwOpenProcessToken (
1940 IN HANDLE ProcessHandle,
1941 IN ACCESS_MASK DesiredAccess,
1942 OUT PHANDLE TokenHandle
1943 );
1944
1945 NTSYSAPI
1946 NTSTATUS
1947 NTAPI
1948 ZwOpenThread (
1949 OUT PHANDLE ThreadHandle,
1950 IN ACCESS_MASK DesiredAccess,
1951 IN POBJECT_ATTRIBUTES ObjectAttributes,
1952 IN PCLIENT_ID ClientId
1953 );
1954
1955 NTSYSAPI
1956 NTSTATUS
1957 NTAPI
1958 ZwOpenThreadToken (
1959 IN HANDLE ThreadHandle,
1960 IN ACCESS_MASK DesiredAccess,
1961 IN BOOLEAN OpenAsSelf,
1962 OUT PHANDLE TokenHandle
1963 );
1964
1965 NTSYSAPI
1966 NTSTATUS
1967 NTAPI
1968 ZwPulseEvent (
1969 IN HANDLE EventHandle,
1970 OUT PLONG PreviousState OPTIONAL
1971 );
1972
1973 NTSYSAPI
1974 NTSTATUS
1975 NTAPI
1976 ZwQueryDefaultLocale (
1977 IN BOOLEAN ThreadOrSystem,
1978 OUT PLCID Locale
1979 );
1980
1981 #if (VER_PRODUCTBUILD >= 2195)
1982
1983 NTSYSAPI
1984 NTSTATUS
1985 NTAPI
1986 ZwQueryDirectoryObject (
1987 IN HANDLE DirectoryHandle,
1988 OUT PVOID Buffer,
1989 IN ULONG Length,
1990 IN BOOLEAN ReturnSingleEntry,
1991 IN BOOLEAN RestartScan,
1992 IN OUT PULONG Context,
1993 OUT PULONG ReturnLength OPTIONAL
1994 );
1995
1996 #endif /* (VER_PRODUCTBUILD >= 2195) */
1997
1998 NTSYSAPI
1999 NTSTATUS
2000 NTAPI
2001 ZwQueryInformationProcess (
2002 IN HANDLE ProcessHandle,
2003 IN PROCESSINFOCLASS ProcessInformationClass,
2004 OUT PVOID ProcessInformation,
2005 IN ULONG ProcessInformationLength,
2006 OUT PULONG ReturnLength OPTIONAL
2007 );
2008
2009 NTSYSAPI
2010 NTSTATUS
2011 NTAPI
2012 ZwReplaceKey (
2013 IN POBJECT_ATTRIBUTES NewFileObjectAttributes,
2014 IN HANDLE KeyHandle,
2015 IN POBJECT_ATTRIBUTES OldFileObjectAttributes
2016 );
2017
2018 NTSYSAPI
2019 NTSTATUS
2020 NTAPI
2021 ZwResetEvent (
2022 IN HANDLE EventHandle,
2023 OUT PLONG PreviousState OPTIONAL
2024 );
2025
2026 #if (VER_PRODUCTBUILD >= 2195)
2027
2028 NTSYSAPI
2029 NTSTATUS
2030 NTAPI
2031 ZwRestoreKey (
2032 IN HANDLE KeyHandle,
2033 IN HANDLE FileHandle,
2034 IN ULONG Flags
2035 );
2036
2037 #endif /* (VER_PRODUCTBUILD >= 2195) */
2038
2039 NTSYSAPI
2040 NTSTATUS
2041 NTAPI
2042 ZwSaveKey (
2043 IN HANDLE KeyHandle,
2044 IN HANDLE FileHandle
2045 );
2046
2047 NTSYSAPI
2048 NTSTATUS
2049 NTAPI
2050 ZwSetDefaultLocale (
2051 IN BOOLEAN ThreadOrSystem,
2052 IN LCID Locale
2053 );
2054
2055 #if (VER_PRODUCTBUILD >= 2195)
2056
2057 NTSYSAPI
2058 NTSTATUS
2059 NTAPI
2060 ZwSetDefaultUILanguage (
2061 IN LANGID LanguageId
2062 );
2063
2064 #endif /* (VER_PRODUCTBUILD >= 2195) */
2065
2066 NTSYSAPI
2067 NTSTATUS
2068 NTAPI
2069 ZwSetInformationProcess (
2070 IN HANDLE ProcessHandle,
2071 IN PROCESSINFOCLASS ProcessInformationClass,
2072 IN PVOID ProcessInformation,
2073 IN ULONG ProcessInformationLength
2074 );
2075
2076 NTSYSAPI
2077 NTSTATUS
2078 NTAPI
2079 ZwSetSystemTime (
2080 IN PLARGE_INTEGER NewTime,
2081 OUT PLARGE_INTEGER OldTime OPTIONAL
2082 );
2083
2084 NTSYSAPI
2085 NTSTATUS
2086 NTAPI
2087 ZwUnloadKey (
2088 IN POBJECT_ATTRIBUTES KeyObjectAttributes
2089 );
2090
2091 NTSYSAPI
2092 NTSTATUS
2093 NTAPI
2094 ZwWaitForMultipleObjects (
2095 IN ULONG HandleCount,
2096 IN PHANDLE Handles,
2097 IN WAIT_TYPE WaitType,
2098 IN BOOLEAN Alertable,
2099 IN PLARGE_INTEGER Timeout OPTIONAL
2100 );
2101
2102 NTSYSAPI
2103 NTSTATUS
2104 NTAPI
2105 ZwYieldExecution (
2106 VOID
2107 );
2108
2109 #pragma pack(pop)
2110
2111 #ifdef __cplusplus
2112 }
2113 #endif