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