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