4 * Windows Device Driver Kit
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
22 * DBG - Debugging enabled/disabled (0/1)
23 * POOL_TAGGING - Enable pool tagging
24 * _X86_ - X86 environment
31 #if !defined(_NTHAL_) && !defined(_NTIFS_)
32 #define _NTDDK_INCLUDED_
39 #define _CTYPE_DISABLE_MACROS
51 #include <stdarg.h> // FIXME
52 #include <basetyps.h> // FIXME
59 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
60 typedef struct _CALLBACK_OBJECT
*PCALLBACK_OBJECT
;
61 typedef struct _DEVICE_HANDLER_OBJECT
*PDEVICE_HANDLER_OBJECT
;
62 #if defined(_NTHAL_INCLUDED_)
63 typedef struct _KPROCESS
*PEPROCESS
;
64 typedef struct _ETHREAD
*PETHREAD
;
65 typedef struct _KAFFINITY_EX
*PKAFFINITY_EX
;
66 #elif defined(_NTIFS_INCLUDED_)
67 typedef struct _KPROCESS
*PEPROCESS
;
68 typedef struct _KTHREAD
*PETHREAD
;
70 typedef struct _EPROCESS
*PEPROCESS
;
71 typedef struct _ETHREAD
*PETHREAD
;
73 typedef struct _IO_TIMER
*PIO_TIMER
;
74 typedef struct _KINTERRUPT
*PKINTERRUPT
;
75 typedef struct _KTHREAD
*PKTHREAD
, *PRKTHREAD
;
76 typedef struct _OBJECT_TYPE
*POBJECT_TYPE
;
77 typedef struct _PEB
*PPEB
;
78 typedef struct _IMAGE_NT_HEADERS
*PIMAGE_NT_HEADERS32
;
79 typedef struct _IMAGE_NT_HEADERS64
*PIMAGE_NT_HEADERS64
;
82 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
84 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
87 #define PsGetCurrentProcess IoGetCurrentProcess
89 #if (NTDDI_VERSION >= NTDDI_VISTA)
90 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
91 #elif (NTDDI_VERSION >= NTDDI_WINXP)
92 extern NTSYSAPI CCHAR KeNumberProcessors
;
94 extern PCCHAR KeNumberProcessors
;
103 #define KERNEL_STACK_SIZE 12288
104 #define KERNEL_LARGE_STACK_SIZE 61440
105 #define KERNEL_LARGE_STACK_COMMIT 12288
107 #define SIZE_OF_80387_REGISTERS 80
109 #if !defined(RC_INVOKED)
111 #define CONTEXT_i386 0x10000
112 #define CONTEXT_i486 0x10000
113 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
114 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
115 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
116 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
117 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
118 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
120 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
121 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
122 CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \
123 CONTEXT_EXTENDED_REGISTERS)
125 #define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L)
127 #endif /* !defined(RC_INVOKED) */
129 typedef struct _FLOATING_SAVE_AREA
{
137 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
139 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
141 #include "pshpack4.h"
142 typedef struct _CONTEXT
{
150 FLOATING_SAVE_AREA FloatSave
;
167 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
168 } CONTEXT
, *PCONTEXT
;
175 #define KERNEL_STACK_SIZE 0x6000
176 #define KERNEL_LARGE_STACK_SIZE 0x12000
177 #define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
179 #define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
181 #define EXCEPTION_READ_FAULT 0
182 #define EXCEPTION_WRITE_FAULT 1
183 #define EXCEPTION_EXECUTE_FAULT 8
185 #if !defined(RC_INVOKED)
187 #define CONTEXT_AMD64 0x100000
189 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
190 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
191 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
192 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
193 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
195 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
196 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
198 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
200 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
201 #define CONTEXT_SERVICE_ACTIVE 0x10000000
202 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
203 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
205 #endif /* !defined(RC_INVOKED) */
207 #define INITIAL_MXCSR 0x1f80
208 #define INITIAL_FPCSR 0x027f
210 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
250 XMM_SAVE_AREA32 FltSave
;
272 M128A VectorRegister
[26];
273 ULONG64 VectorControl
;
274 ULONG64 DebugControl
;
275 ULONG64 LastBranchToRip
;
276 ULONG64 LastBranchFromRip
;
277 ULONG64 LastExceptionToRip
;
278 ULONG64 LastExceptionFromRip
;
279 } CONTEXT
, *PCONTEXT
;
283 typedef enum _WELL_KNOWN_SID_TYPE
{
287 WinCreatorOwnerSid
= 3,
288 WinCreatorGroupSid
= 4,
289 WinCreatorOwnerServerSid
= 5,
290 WinCreatorGroupServerSid
= 6,
291 WinNtAuthoritySid
= 7,
295 WinInteractiveSid
= 11,
297 WinAnonymousSid
= 13,
299 WinEnterpriseControllersSid
= 15,
301 WinAuthenticatedUserSid
= 17,
302 WinRestrictedCodeSid
= 18,
303 WinTerminalServerSid
= 19,
304 WinRemoteLogonIdSid
= 20,
306 WinLocalSystemSid
= 22,
307 WinLocalServiceSid
= 23,
308 WinNetworkServiceSid
= 24,
309 WinBuiltinDomainSid
= 25,
310 WinBuiltinAdministratorsSid
= 26,
311 WinBuiltinUsersSid
= 27,
312 WinBuiltinGuestsSid
= 28,
313 WinBuiltinPowerUsersSid
= 29,
314 WinBuiltinAccountOperatorsSid
= 30,
315 WinBuiltinSystemOperatorsSid
= 31,
316 WinBuiltinPrintOperatorsSid
= 32,
317 WinBuiltinBackupOperatorsSid
= 33,
318 WinBuiltinReplicatorSid
= 34,
319 WinBuiltinPreWindows2000CompatibleAccessSid
= 35,
320 WinBuiltinRemoteDesktopUsersSid
= 36,
321 WinBuiltinNetworkConfigurationOperatorsSid
= 37,
322 WinAccountAdministratorSid
= 38,
323 WinAccountGuestSid
= 39,
324 WinAccountKrbtgtSid
= 40,
325 WinAccountDomainAdminsSid
= 41,
326 WinAccountDomainUsersSid
= 42,
327 WinAccountDomainGuestsSid
= 43,
328 WinAccountComputersSid
= 44,
329 WinAccountControllersSid
= 45,
330 WinAccountCertAdminsSid
= 46,
331 WinAccountSchemaAdminsSid
= 47,
332 WinAccountEnterpriseAdminsSid
= 48,
333 WinAccountPolicyAdminsSid
= 49,
334 WinAccountRasAndIasServersSid
= 50,
335 WinNTLMAuthenticationSid
= 51,
336 WinDigestAuthenticationSid
= 52,
337 WinSChannelAuthenticationSid
= 53,
338 WinThisOrganizationSid
= 54,
339 WinOtherOrganizationSid
= 55,
340 WinBuiltinIncomingForestTrustBuildersSid
= 56,
341 WinBuiltinPerfMonitoringUsersSid
= 57,
342 WinBuiltinPerfLoggingUsersSid
= 58,
343 WinBuiltinAuthorizationAccessSid
= 59,
344 WinBuiltinTerminalServerLicenseServersSid
= 60,
345 WinBuiltinDCOMUsersSid
= 61,
346 WinBuiltinIUsersSid
= 62,
348 WinBuiltinCryptoOperatorsSid
= 64,
349 WinUntrustedLabelSid
= 65,
351 WinMediumLabelSid
= 67,
352 WinHighLabelSid
= 68,
353 WinSystemLabelSid
= 69,
354 WinWriteRestrictedCodeSid
= 70,
355 WinCreatorOwnerRightsSid
= 71,
356 WinCacheablePrincipalsGroupSid
= 72,
357 WinNonCacheablePrincipalsGroupSid
= 73,
358 WinEnterpriseReadonlyControllersSid
= 74,
359 WinAccountReadonlyControllersSid
= 75,
360 WinBuiltinEventLogReadersGroup
= 76,
361 WinNewEnterpriseReadonlyControllersSid
= 77,
362 WinBuiltinCertSvcDComAccessGroup
= 78,
363 WinMediumPlusLabelSid
= 79,
364 WinLocalLogonSid
= 80,
365 WinConsoleLogonSid
= 81,
366 WinThisOrganizationCertificateSid
= 82,
367 } WELL_KNOWN_SID_TYPE
;
369 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
371 #ifndef _RTL_RUN_ONCE_DEF
372 #define _RTL_RUN_ONCE_DEF
374 #define RTL_RUN_ONCE_INIT {0}
376 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL
377 #define RTL_RUN_ONCE_ASYNC 0x00000002UL
378 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL
380 #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
382 #define RTL_HASH_ALLOCATED_HEADER 0x00000001
384 #define RTL_HASH_RESERVED_SIGNATURE 0
386 /* RtlVerifyVersionInfo() ComparisonType */
389 #define VER_GREATER 2
390 #define VER_GREATER_EQUAL 3
392 #define VER_LESS_EQUAL 5
396 #define VER_CONDITION_MASK 7
397 #define VER_NUM_BITS_PER_CONDITION_MASK 3
399 /* RtlVerifyVersionInfo() TypeMask */
401 #define VER_MINORVERSION 0x0000001
402 #define VER_MAJORVERSION 0x0000002
403 #define VER_BUILDNUMBER 0x0000004
404 #define VER_PLATFORMID 0x0000008
405 #define VER_SERVICEPACKMINOR 0x0000010
406 #define VER_SERVICEPACKMAJOR 0x0000020
407 #define VER_SUITENAME 0x0000040
408 #define VER_PRODUCT_TYPE 0x0000080
410 #define VER_NT_WORKSTATION 0x0000001
411 #define VER_NT_DOMAIN_CONTROLLER 0x0000002
412 #define VER_NT_SERVER 0x0000003
414 #define VER_PLATFORM_WIN32s 0
415 #define VER_PLATFORM_WIN32_WINDOWS 1
416 #define VER_PLATFORM_WIN32_NT 2
418 typedef union _RTL_RUN_ONCE
{
420 } RTL_RUN_ONCE
, *PRTL_RUN_ONCE
;
422 typedef ULONG
/* LOGICAL */
423 (NTAPI
*PRTL_RUN_ONCE_INIT_FN
) (
424 IN OUT PRTL_RUN_ONCE RunOnce
,
425 IN OUT PVOID Parameter OPTIONAL
,
426 IN OUT PVOID
*Context OPTIONAL
);
428 #endif /* _RTL_RUN_ONCE_DEF */
430 typedef enum _TABLE_SEARCH_RESULT
{
435 } TABLE_SEARCH_RESULT
;
437 typedef enum _RTL_GENERIC_COMPARE_RESULTS
{
441 } RTL_GENERIC_COMPARE_RESULTS
;
444 struct _RTL_AVL_TABLE
;
446 typedef RTL_GENERIC_COMPARE_RESULTS
447 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
448 IN
struct _RTL_AVL_TABLE
*Table
,
449 IN PVOID FirstStruct
,
450 IN PVOID SecondStruct
);
453 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
454 IN
struct _RTL_AVL_TABLE
*Table
,
458 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
459 IN
struct _RTL_AVL_TABLE
*Table
,
463 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
) (
464 IN
struct _RTL_AVL_TABLE
*Table
,
468 typedef struct _RTL_BALANCED_LINKS
{
469 struct _RTL_BALANCED_LINKS
*Parent
;
470 struct _RTL_BALANCED_LINKS
*LeftChild
;
471 struct _RTL_BALANCED_LINKS
*RightChild
;
474 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
476 typedef struct _RTL_AVL_TABLE
{
477 RTL_BALANCED_LINKS BalancedRoot
;
478 PVOID OrderedPointer
;
479 ULONG WhichOrderedElement
;
480 ULONG NumberGenericTableElements
;
482 PRTL_BALANCED_LINKS RestartKey
;
484 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
485 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
486 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
488 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
490 #ifndef RTL_USE_AVL_TABLES
492 struct _RTL_GENERIC_TABLE
;
494 typedef RTL_GENERIC_COMPARE_RESULTS
495 (NTAPI
*PRTL_GENERIC_COMPARE_ROUTINE
) (
496 IN
struct _RTL_GENERIC_TABLE
*Table
,
497 IN PVOID FirstStruct
,
498 IN PVOID SecondStruct
);
501 (NTAPI
*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
502 IN
struct _RTL_GENERIC_TABLE
*Table
,
506 (NTAPI
*PRTL_GENERIC_FREE_ROUTINE
) (
507 IN
struct _RTL_GENERIC_TABLE
*Table
,
510 typedef struct _RTL_GENERIC_TABLE
{
511 PRTL_SPLAY_LINKS TableRoot
;
512 LIST_ENTRY InsertOrderList
;
513 PLIST_ENTRY OrderedPointer
;
514 ULONG WhichOrderedElement
;
515 ULONG NumberGenericTableElements
;
516 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
517 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
518 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
520 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
522 #if (NTDDI_VERSION >= NTDDI_WIN2K)
527 RtlInitializeGenericTable(
528 OUT PRTL_GENERIC_TABLE Table
,
529 IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
,
530 IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
,
531 IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine
,
532 IN PVOID TableContext OPTIONAL
);
537 RtlInsertElementGenericTable(
538 IN PRTL_GENERIC_TABLE Table
,
541 OUT PBOOLEAN NewElement OPTIONAL
);
546 RtlInsertElementGenericTableFull(
547 IN PRTL_GENERIC_TABLE Table
,
550 OUT PBOOLEAN NewElement OPTIONAL
,
551 IN PVOID NodeOrParent
,
552 IN TABLE_SEARCH_RESULT SearchResult
);
557 RtlDeleteElementGenericTable(
558 IN PRTL_GENERIC_TABLE Table
,
564 RtlLookupElementGenericTable(
565 IN PRTL_GENERIC_TABLE Table
,
571 RtlLookupElementGenericTableFull(
572 IN PRTL_GENERIC_TABLE Table
,
574 OUT PVOID
*NodeOrParent
,
575 OUT TABLE_SEARCH_RESULT
*SearchResult
);
580 RtlEnumerateGenericTable(
581 IN PRTL_GENERIC_TABLE Table
,
587 RtlEnumerateGenericTableWithoutSplaying(
588 IN PRTL_GENERIC_TABLE Table
,
589 IN OUT PVOID
*RestartKey
);
594 RtlGetElementGenericTable(
595 IN PRTL_GENERIC_TABLE Table
,
601 RtlNumberGenericTableElements(
602 IN PRTL_GENERIC_TABLE Table
);
607 RtlIsGenericTableEmpty(
608 IN PRTL_GENERIC_TABLE Table
);
610 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
612 #endif /* RTL_USE_AVL_TABLES */
614 #ifdef RTL_USE_AVL_TABLES
616 #undef PRTL_GENERIC_COMPARE_ROUTINE
617 #undef RTL_GENERIC_COMPARE_ROUTINE
618 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
619 #undef RTL_GENERIC_ALLOCATE_ROUTINE
620 #undef PRTL_GENERIC_FREE_ROUTINE
621 #undef RTL_GENERIC_FREE_ROUTINE
622 #undef RTL_GENERIC_TABLE
623 #undef PRTL_GENERIC_TABLE
625 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
626 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
627 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
628 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
629 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
630 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
631 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
632 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
634 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
635 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
636 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
637 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
638 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
639 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
640 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
641 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
642 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
643 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
644 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
646 #endif /* RTL_USE_AVL_TABLES */
648 typedef struct _RTL_SPLAY_LINKS
{
649 struct _RTL_SPLAY_LINKS
*Parent
;
650 struct _RTL_SPLAY_LINKS
*LeftChild
;
651 struct _RTL_SPLAY_LINKS
*RightChild
;
652 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
654 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY
{
657 } RTL_DYNAMIC_HASH_TABLE_ENTRY
, *PRTL_DYNAMIC_HASH_TABLE_ENTRY
;
659 typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT
{
660 PLIST_ENTRY ChainHead
;
661 PLIST_ENTRY PrevLinkage
;
663 } RTL_DYNAMIC_HASH_TABLE_CONTEXT
, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT
;
665 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
{
666 RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry
;
667 PLIST_ENTRY ChainHead
;
669 } RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR
;
671 typedef struct _RTL_DYNAMIC_HASH_TABLE
{
678 ULONG NonEmptyBuckets
;
679 ULONG NumEnumerators
;
681 } RTL_DYNAMIC_HASH_TABLE
, *PRTL_DYNAMIC_HASH_TABLE
;
683 typedef struct _OSVERSIONINFOA
{
684 ULONG dwOSVersionInfoSize
;
685 ULONG dwMajorVersion
;
686 ULONG dwMinorVersion
;
689 CHAR szCSDVersion
[128];
690 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
692 typedef struct _OSVERSIONINFOW
{
693 ULONG dwOSVersionInfoSize
;
694 ULONG dwMajorVersion
;
695 ULONG dwMinorVersion
;
698 WCHAR szCSDVersion
[128];
699 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
701 typedef struct _OSVERSIONINFOEXA
{
702 ULONG dwOSVersionInfoSize
;
703 ULONG dwMajorVersion
;
704 ULONG dwMinorVersion
;
707 CHAR szCSDVersion
[128];
708 USHORT wServicePackMajor
;
709 USHORT wServicePackMinor
;
713 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
715 typedef struct _OSVERSIONINFOEXW
{
716 ULONG dwOSVersionInfoSize
;
717 ULONG dwMajorVersion
;
718 ULONG dwMinorVersion
;
721 WCHAR szCSDVersion
[128];
722 USHORT wServicePackMajor
;
723 USHORT wServicePackMinor
;
727 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
730 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
731 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
732 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
733 typedef OSVERSIONINFOW OSVERSIONINFO
;
734 typedef POSVERSIONINFOW POSVERSIONINFO
;
735 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
737 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
738 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
739 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
740 typedef OSVERSIONINFOA OSVERSIONINFO
;
741 typedef POSVERSIONINFOA POSVERSIONINFO
;
742 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
745 #define HASH_ENTRY_KEY(x) ((x)->Signature)
747 #define RtlInitializeSplayLinks(Links) { \
748 PRTL_SPLAY_LINKS _SplayLinks; \
749 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
750 _SplayLinks->Parent = _SplayLinks; \
751 _SplayLinks->LeftChild = NULL; \
752 _SplayLinks->RightChild = NULL; \
755 #define RtlIsLeftChild(Links) \
756 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
758 #define RtlIsRightChild(Links) \
759 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
761 #define RtlRightChild(Links) \
762 ((PRTL_SPLAY_LINKS)(Links))->RightChild
764 #define RtlIsRoot(Links) \
765 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
767 #define RtlLeftChild(Links) \
768 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
770 #define RtlParent(Links) \
771 ((PRTL_SPLAY_LINKS)(Links))->Parent
773 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
775 PRTL_SPLAY_LINKS _SplayParent; \
776 PRTL_SPLAY_LINKS _SplayChild; \
777 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
778 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
779 _SplayParent->LeftChild = _SplayChild; \
780 _SplayChild->Parent = _SplayParent; \
783 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
785 PRTL_SPLAY_LINKS _SplayParent; \
786 PRTL_SPLAY_LINKS _SplayChild; \
787 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
788 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
789 _SplayParent->RightChild = _SplayChild; \
790 _SplayChild->Parent = _SplayParent; \
793 #define RtlEqualLuid(L1, L2) (((L1)->LowPart == (L2)->LowPart) && \
794 ((L1)->HighPart == (L2)->HighPart))
796 #define RtlIsZeroLuid(L1) ((BOOLEAN) (((L1)->LowPart | (L1)->HighPart) == 0))
798 #if !defined(MIDL_PASS)
803 RtlConvertLongToLuid(
810 Luid
.LowPart
= Temp
.u
.LowPart
;
811 Luid
.HighPart
= Temp
.u
.HighPart
;
818 RtlConvertUlongToLuid(
828 #endif /* !defined(MIDL_PASS) */
830 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
831 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
832 *CallersAddress = (PVOID)_ReturnAddress(); \
833 *CallersCaller = NULL;
835 #if (NTDDI_VERSION >= NTDDI_WIN2K)
839 RtlGetCallersAddress(
840 OUT PVOID
*CallersAddress
,
841 OUT PVOID
*CallersCaller
);
845 #if (NTDDI_VERSION >= NTDDI_WIN2K)
847 #define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8
853 IN OUT PRTL_SPLAY_LINKS Links
);
859 IN PRTL_SPLAY_LINKS Links
);
865 IN PRTL_SPLAY_LINKS Links
,
866 IN OUT PRTL_SPLAY_LINKS
*Root
);
872 IN PRTL_SPLAY_LINKS Links
);
877 RtlSubtreePredecessor(
878 IN PRTL_SPLAY_LINKS Links
);
884 IN PRTL_SPLAY_LINKS Links
);
890 IN PRTL_SPLAY_LINKS Links
);
895 RtlPrefixUnicodeString(
896 IN PCUNICODE_STRING String1
,
897 IN PCUNICODE_STRING String2
,
898 IN BOOLEAN CaseInSensitive
);
904 IN OUT PSTRING DestinationString
,
905 IN
const PSTRING SourceString
);
910 RtlUpcaseUnicodeString(
911 IN OUT PUNICODE_STRING DestinationString
,
912 IN PCUNICODE_STRING SourceString
,
913 IN BOOLEAN AllocateDestinationString
);
919 IN OUT PACCESS_MASK AccessMask
,
920 IN PGENERIC_MAPPING GenericMapping
);
925 RtlVolumeDeviceToDosName(
926 IN PVOID VolumeDeviceObject
,
927 OUT PUNICODE_STRING DosName
);
933 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
938 RtlVerifyVersionInfo(
939 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
941 IN ULONGLONG ConditionMask
);
947 IN
const PSTRING String1
,
948 IN
const PSTRING String2
,
949 IN BOOLEAN CaseInSensitive
);
955 OUT PSTRING DestinationString
,
956 IN
const PSTRING SourceString OPTIONAL
);
962 IN
const PSTRING String1
,
963 IN
const PSTRING String2
,
964 IN BOOLEAN CaseInSensitive
);
971 IN ULONG Base OPTIONAL
,
988 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
990 #if (NTDDI_VERSION >= NTDDI_WINXP)
995 RtlInitializeGenericTableAvl(
996 OUT PRTL_AVL_TABLE Table
,
997 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
998 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
999 IN PRTL_AVL_FREE_ROUTINE FreeRoutine
,
1000 IN PVOID TableContext OPTIONAL
);
1005 RtlInsertElementGenericTableAvl(
1006 IN PRTL_AVL_TABLE Table
,
1008 IN CLONG BufferSize
,
1009 OUT PBOOLEAN NewElement OPTIONAL
);
1014 RtlInsertElementGenericTableFullAvl(
1015 IN PRTL_AVL_TABLE Table
,
1017 IN CLONG BufferSize
,
1018 OUT PBOOLEAN NewElement OPTIONAL
,
1019 IN PVOID NodeOrParent
,
1020 IN TABLE_SEARCH_RESULT SearchResult
);
1025 RtlDeleteElementGenericTableAvl(
1026 IN PRTL_AVL_TABLE Table
,
1032 RtlLookupElementGenericTableAvl(
1033 IN PRTL_AVL_TABLE Table
,
1039 RtlLookupElementGenericTableFullAvl(
1040 IN PRTL_AVL_TABLE Table
,
1042 OUT PVOID
*NodeOrParent
,
1043 OUT TABLE_SEARCH_RESULT
*SearchResult
);
1048 RtlEnumerateGenericTableAvl(
1049 IN PRTL_AVL_TABLE Table
,
1050 IN BOOLEAN Restart
);
1055 RtlEnumerateGenericTableWithoutSplayingAvl(
1056 IN PRTL_AVL_TABLE Table
,
1057 IN OUT PVOID
*RestartKey
);
1062 RtlLookupFirstMatchingElementGenericTableAvl(
1063 IN PRTL_AVL_TABLE Table
,
1065 OUT PVOID
*RestartKey
);
1070 RtlEnumerateGenericTableLikeADirectory(
1071 IN PRTL_AVL_TABLE Table
,
1072 IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL
,
1073 IN PVOID MatchData OPTIONAL
,
1075 IN OUT PVOID
*RestartKey
,
1076 IN OUT PULONG DeleteCount
,
1082 RtlGetElementGenericTableAvl(
1083 IN PRTL_AVL_TABLE Table
,
1089 RtlNumberGenericTableElementsAvl(
1090 IN PRTL_AVL_TABLE Table
);
1095 RtlIsGenericTableEmptyAvl(
1096 IN PRTL_AVL_TABLE Table
);
1099 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
1101 #if (NTDDI_VERSION >= NTDDI_VISTA)
1106 RtlRunOnceInitialize(
1107 OUT PRTL_RUN_ONCE RunOnce
);
1112 RtlRunOnceExecuteOnce(
1113 IN OUT PRTL_RUN_ONCE RunOnce
,
1114 IN PRTL_RUN_ONCE_INIT_FN InitFn
,
1115 IN OUT PVOID Parameter OPTIONAL
,
1116 OUT PVOID
*Context OPTIONAL
);
1121 RtlRunOnceBeginInitialize(
1122 IN OUT PRTL_RUN_ONCE RunOnce
,
1124 OUT PVOID
*Context OPTIONAL
);
1130 IN OUT PRTL_RUN_ONCE RunOnce
,
1132 IN PVOID Context OPTIONAL
);
1138 IN ULONG OSMajorVersion
,
1139 IN ULONG OSMinorVersion
,
1140 IN ULONG SpMajorVersion
,
1141 IN ULONG SpMinorVersion
,
1142 OUT PULONG ReturnedProductType
);
1144 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1146 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
1148 #if (NTDDI_VERSION >= NTDDI_WIN7)
1153 RtlInitHashTableContext(
1154 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
1156 Context
->ChainHead
= NULL
;
1157 Context
->PrevLinkage
= NULL
;
1163 RtlInitHashTableContextFromEnumerator(
1164 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
,
1165 IN PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
)
1167 Context
->ChainHead
= Enumerator
->ChainHead
;
1168 Context
->PrevLinkage
= Enumerator
->HashEntry
.Linkage
.Blink
;
1174 RtlReleaseHashTableContext(
1175 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
1177 UNREFERENCED_PARAMETER(Context
);
1184 RtlTotalBucketsHashTable(
1185 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1187 return HashTable
->TableSize
;
1193 RtlNonEmptyBucketsHashTable(
1194 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1196 return HashTable
->NonEmptyBuckets
;
1202 RtlEmptyBucketsHashTable(
1203 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1205 return HashTable
->TableSize
- HashTable
->NonEmptyBuckets
;
1211 RtlTotalEntriesHashTable(
1212 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1214 return HashTable
->NumEntries
;
1220 RtlActiveEnumeratorsHashTable(
1221 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1223 return HashTable
->NumEnumerators
;
1226 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1228 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
1230 #if (NTDDI_VERSION >= NTDDI_WIN7)
1236 IN OUT PRTL_DYNAMIC_HASH_TABLE
*HashTable OPTIONAL
,
1244 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
1249 RtlInsertEntryHashTable(
1250 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1251 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
1252 IN ULONG_PTR Signature
,
1253 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
1258 RtlRemoveEntryHashTable(
1259 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1260 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
1261 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
1264 PRTL_DYNAMIC_HASH_TABLE_ENTRY
1266 RtlLookupEntryHashTable(
1267 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1268 IN ULONG_PTR Signature
,
1269 OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
1272 PRTL_DYNAMIC_HASH_TABLE_ENTRY
1274 RtlGetNextEntryHashTable(
1275 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1276 IN PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
);
1281 RtlInitEnumerationHashTable(
1282 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1283 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1286 PRTL_DYNAMIC_HASH_TABLE_ENTRY
1288 RtlEnumerateEntryHashTable(
1289 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1290 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1295 RtlEndEnumerationHashTable(
1296 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1297 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1302 RtlInitWeakEnumerationHashTable(
1303 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1304 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1307 PRTL_DYNAMIC_HASH_TABLE_ENTRY
1309 RtlWeaklyEnumerateEntryHashTable(
1310 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1311 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1316 RtlEndWeakEnumerationHashTable(
1317 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1318 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1324 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
1329 RtlContractHashTable(
1330 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
1332 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1334 #if defined(_AMD64_) || defined(_IA64_)
1335 //DECLSPEC_DEPRECATED_DDK_WINXP
1339 RtlLargeIntegerDivide(
1340 IN LARGE_INTEGER Dividend
,
1341 IN LARGE_INTEGER Divisor
,
1342 OUT PLARGE_INTEGER Remainder OPTIONAL
)
1345 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
1347 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
1353 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1357 RtlLargeIntegerDivide(
1358 IN LARGE_INTEGER Dividend
,
1359 IN LARGE_INTEGER Divisor
,
1360 OUT PLARGE_INTEGER Remainder OPTIONAL
);
1363 #endif /* defined(_AMD64_) || defined(_IA64_) */
1365 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
1366 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
1367 (TypeBitMask), (ComparisonType)))
1369 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1373 VerSetConditionMask(
1374 IN ULONGLONG ConditionMask
,
1376 IN UCHAR Condition
);
1379 /** Kernel debugger routines **/
1387 IN ULONG MaximumResponseLength
);
1389 #if (NTDDI_VERSION >= NTDDI_WIN7)
1391 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000
1392 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000
1393 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
1394 (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
1395 FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
1397 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
1398 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
1399 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
1403 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200
1404 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300
1405 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300
1407 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
1408 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
1409 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
1411 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1413 #define FILE_CHARACTERISTICS_PROPAGATED ( FILE_REMOVABLE_MEDIA | \
1414 FILE_READ_ONLY_DEVICE | \
1415 FILE_FLOPPY_DISKETTE | \
1416 FILE_WRITE_ONCE_MEDIA | \
1417 FILE_DEVICE_SECURE_OPEN )
1419 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1420 ULONG AlignmentRequirement
;
1421 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1423 typedef struct _FILE_NAME_INFORMATION
{
1424 ULONG FileNameLength
;
1426 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1429 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1430 ULONG FileAttributes
;
1432 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1434 typedef struct _FILE_DISPOSITION_INFORMATION
{
1436 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1438 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1439 LARGE_INTEGER EndOfFile
;
1440 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1442 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1443 LARGE_INTEGER ValidDataLength
;
1444 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1446 typedef struct _FILE_FS_LABEL_INFORMATION
{
1447 ULONG VolumeLabelLength
;
1448 WCHAR VolumeLabel
[1];
1449 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1451 typedef struct _FILE_FS_VOLUME_INFORMATION
{
1452 LARGE_INTEGER VolumeCreationTime
;
1453 ULONG VolumeSerialNumber
;
1454 ULONG VolumeLabelLength
;
1455 BOOLEAN SupportsObjects
;
1456 WCHAR VolumeLabel
[1];
1457 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1459 typedef struct _FILE_FS_SIZE_INFORMATION
{
1460 LARGE_INTEGER TotalAllocationUnits
;
1461 LARGE_INTEGER AvailableAllocationUnits
;
1462 ULONG SectorsPerAllocationUnit
;
1463 ULONG BytesPerSector
;
1464 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1466 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
1467 LARGE_INTEGER TotalAllocationUnits
;
1468 LARGE_INTEGER CallerAvailableAllocationUnits
;
1469 LARGE_INTEGER ActualAvailableAllocationUnits
;
1470 ULONG SectorsPerAllocationUnit
;
1471 ULONG BytesPerSector
;
1472 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
1474 typedef struct _FILE_FS_OBJECTID_INFORMATION
{
1476 UCHAR ExtendedInfo
[48];
1477 } FILE_FS_OBJECTID_INFORMATION
, *PFILE_FS_OBJECTID_INFORMATION
;
1479 typedef union _FILE_SEGMENT_ELEMENT
{
1481 ULONGLONG Alignment
;
1482 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1484 #define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1485 #define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1486 #define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1488 typedef enum _BUS_DATA_TYPE
{
1489 ConfigurationSpaceUndefined
= -1,
1497 PCMCIAConfiguration
,
1500 PNPISAConfiguration
,
1501 SgiInternalConfiguration
,
1503 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1505 typedef struct _KEY_NAME_INFORMATION
{
1508 } KEY_NAME_INFORMATION
, *PKEY_NAME_INFORMATION
;
1510 typedef struct _KEY_CACHED_INFORMATION
{
1511 LARGE_INTEGER LastWriteTime
;
1516 ULONG MaxValueNameLen
;
1517 ULONG MaxValueDataLen
;
1519 } KEY_CACHED_INFORMATION
, *PKEY_CACHED_INFORMATION
;
1521 typedef struct _KEY_VIRTUALIZATION_INFORMATION
{
1522 ULONG VirtualizationCandidate
:1;
1523 ULONG VirtualizationEnabled
:1;
1524 ULONG VirtualTarget
:1;
1525 ULONG VirtualStore
:1;
1526 ULONG VirtualSource
:1;
1528 } KEY_VIRTUALIZATION_INFORMATION
, *PKEY_VIRTUALIZATION_INFORMATION
;
1530 #define THREAD_CSWITCH_PMU_DISABLE FALSE
1531 #define THREAD_CSWITCH_PMU_ENABLE TRUE
1533 #define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001
1535 #define PROCESS_HANDLE_TRACING_MAX_STACKS 16
1537 typedef struct _NT_TIB
{
1538 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1542 _ANONYMOUS_UNION
union {
1546 PVOID ArbitraryUserPointer
;
1547 struct _NT_TIB
*Self
;
1550 typedef struct _NT_TIB32
{
1551 ULONG ExceptionList
;
1555 __GNU_EXTENSION
union {
1559 ULONG ArbitraryUserPointer
;
1561 } NT_TIB32
,*PNT_TIB32
;
1563 typedef struct _NT_TIB64
{
1564 ULONG64 ExceptionList
;
1567 ULONG64 SubSystemTib
;
1568 __GNU_EXTENSION
union {
1572 ULONG64 ArbitraryUserPointer
;
1574 } NT_TIB64
,*PNT_TIB64
;
1576 typedef enum _PROCESSINFOCLASS
{
1577 ProcessBasicInformation
,
1582 ProcessBasePriority
,
1583 ProcessRaisePriority
,
1585 ProcessExceptionPort
,
1587 ProcessLdtInformation
,
1589 ProcessDefaultHardErrorMode
,
1590 ProcessIoPortHandlers
,
1591 ProcessPooledUsageAndLimits
,
1592 ProcessWorkingSetWatch
,
1593 ProcessUserModeIOPL
,
1594 ProcessEnableAlignmentFaultFixup
,
1595 ProcessPriorityClass
,
1596 ProcessWx86Information
,
1598 ProcessAffinityMask
,
1599 ProcessPriorityBoost
,
1601 ProcessSessionInformation
,
1602 ProcessForegroundInformation
,
1603 ProcessWow64Information
,
1604 ProcessImageFileName
,
1605 ProcessLUIDDeviceMapsEnabled
,
1606 ProcessBreakOnTermination
,
1607 ProcessDebugObjectHandle
,
1609 ProcessHandleTracing
,
1611 ProcessExecuteFlags
,
1612 ProcessTlsInformation
,
1614 ProcessImageInformation
,
1616 ProcessPagePriority
,
1617 ProcessInstrumentationCallback
,
1618 ProcessThreadStackAllocation
,
1619 ProcessWorkingSetWatchEx
,
1620 ProcessImageFileNameWin32
,
1621 ProcessImageFileMapping
,
1622 ProcessAffinityUpdateMode
,
1623 ProcessMemoryAllocationMode
,
1624 ProcessGroupInformation
,
1625 ProcessTokenVirtualizationEnabled
,
1626 ProcessConsoleHostProcess
,
1627 ProcessWindowInformation
,
1631 typedef enum _THREADINFOCLASS
{
1632 ThreadBasicInformation
,
1637 ThreadImpersonationToken
,
1638 ThreadDescriptorTableEntry
,
1639 ThreadEnableAlignmentFaultFixup
,
1640 ThreadEventPair_Reusable
,
1641 ThreadQuerySetWin32StartAddress
,
1643 ThreadPerformanceCount
,
1644 ThreadAmILastThread
,
1645 ThreadIdealProcessor
,
1646 ThreadPriorityBoost
,
1647 ThreadSetTlsArrayAddress
,
1649 ThreadHideFromDebugger
,
1650 ThreadBreakOnTermination
,
1651 ThreadSwitchLegacyState
,
1653 ThreadLastSystemCall
,
1657 ThreadActualBasePriority
,
1658 ThreadTebInformation
,
1662 ThreadGroupInformation
,
1663 ThreadUmsInformation
,
1664 ThreadCounterProfiling
,
1665 ThreadIdealProcessorEx
,
1669 typedef struct _PAGE_PRIORITY_INFORMATION
{
1671 } PAGE_PRIORITY_INFORMATION
, *PPAGE_PRIORITY_INFORMATION
;
1673 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
1676 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1678 typedef struct _PROCESS_BASIC_INFORMATION
{
1679 NTSTATUS ExitStatus
;
1680 struct _PEB
*PebBaseAddress
;
1681 ULONG_PTR AffinityMask
;
1682 KPRIORITY BasePriority
;
1683 ULONG_PTR UniqueProcessId
;
1684 ULONG_PTR InheritedFromUniqueProcessId
;
1685 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1687 typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION
{
1689 PROCESS_BASIC_INFORMATION BasicInfo
;
1693 ULONG IsProtectedProcess
:1;
1694 ULONG IsWow64Process
:1;
1695 ULONG IsProcessDeleting
:1;
1696 ULONG IsCrossSessionCreate
:1;
1700 } PROCESS_EXTENDED_BASIC_INFORMATION
, *PPROCESS_EXTENDED_BASIC_INFORMATION
;
1702 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
1703 __GNU_EXTENSION
union {
1705 HANDLE DirectoryHandle
;
1709 UCHAR DriveType
[32];
1712 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1714 typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX
{
1717 HANDLE DirectoryHandle
;
1721 UCHAR DriveType
[32];
1725 } PROCESS_DEVICEMAP_INFORMATION_EX
, *PPROCESS_DEVICEMAP_INFORMATION_EX
;
1727 typedef struct _PROCESS_SESSION_INFORMATION
{
1729 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1731 typedef struct _PROCESS_HANDLE_TRACING_ENABLE
{
1733 } PROCESS_HANDLE_TRACING_ENABLE
, *PPROCESS_HANDLE_TRACING_ENABLE
;
1735 typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX
{
1738 } PROCESS_HANDLE_TRACING_ENABLE_EX
, *PPROCESS_HANDLE_TRACING_ENABLE_EX
;
1740 typedef struct _PROCESS_HANDLE_TRACING_ENTRY
{
1744 PVOID Stacks
[PROCESS_HANDLE_TRACING_MAX_STACKS
];
1745 } PROCESS_HANDLE_TRACING_ENTRY
, *PPROCESS_HANDLE_TRACING_ENTRY
;
1747 typedef struct _PROCESS_HANDLE_TRACING_QUERY
{
1750 PROCESS_HANDLE_TRACING_ENTRY HandleTrace
[1];
1751 } PROCESS_HANDLE_TRACING_QUERY
, *PPROCESS_HANDLE_TRACING_QUERY
;
1753 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
1754 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
1755 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
1756 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
1757 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
1759 typedef struct _QUOTA_LIMITS
{
1760 SIZE_T PagedPoolLimit
;
1761 SIZE_T NonPagedPoolLimit
;
1762 SIZE_T MinimumWorkingSetSize
;
1763 SIZE_T MaximumWorkingSetSize
;
1764 SIZE_T PagefileLimit
;
1765 LARGE_INTEGER TimeLimit
;
1766 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
1768 typedef union _RATE_QUOTA_LIMIT
{
1771 ULONG RatePercent
:7;
1774 } RATE_QUOTA_LIMIT
, *PRATE_QUOTA_LIMIT
;
1776 typedef struct _QUOTA_LIMITS_EX
{
1777 SIZE_T PagedPoolLimit
;
1778 SIZE_T NonPagedPoolLimit
;
1779 SIZE_T MinimumWorkingSetSize
;
1780 SIZE_T MaximumWorkingSetSize
;
1781 SIZE_T PagefileLimit
;
1782 LARGE_INTEGER TimeLimit
;
1783 SIZE_T WorkingSetLimit
;
1788 RATE_QUOTA_LIMIT CpuRateLimit
;
1789 } QUOTA_LIMITS_EX
, *PQUOTA_LIMITS_EX
;
1791 typedef struct _IO_COUNTERS
{
1792 ULONGLONG ReadOperationCount
;
1793 ULONGLONG WriteOperationCount
;
1794 ULONGLONG OtherOperationCount
;
1795 ULONGLONG ReadTransferCount
;
1796 ULONGLONG WriteTransferCount
;
1797 ULONGLONG OtherTransferCount
;
1798 } IO_COUNTERS
, *PIO_COUNTERS
;
1800 typedef struct _VM_COUNTERS
{
1801 SIZE_T PeakVirtualSize
;
1803 ULONG PageFaultCount
;
1804 SIZE_T PeakWorkingSetSize
;
1805 SIZE_T WorkingSetSize
;
1806 SIZE_T QuotaPeakPagedPoolUsage
;
1807 SIZE_T QuotaPagedPoolUsage
;
1808 SIZE_T QuotaPeakNonPagedPoolUsage
;
1809 SIZE_T QuotaNonPagedPoolUsage
;
1810 SIZE_T PagefileUsage
;
1811 SIZE_T PeakPagefileUsage
;
1812 } VM_COUNTERS
, *PVM_COUNTERS
;
1814 typedef struct _VM_COUNTERS_EX
{
1815 SIZE_T PeakVirtualSize
;
1817 ULONG PageFaultCount
;
1818 SIZE_T PeakWorkingSetSize
;
1819 SIZE_T WorkingSetSize
;
1820 SIZE_T QuotaPeakPagedPoolUsage
;
1821 SIZE_T QuotaPagedPoolUsage
;
1822 SIZE_T QuotaPeakNonPagedPoolUsage
;
1823 SIZE_T QuotaNonPagedPoolUsage
;
1824 SIZE_T PagefileUsage
;
1825 SIZE_T PeakPagefileUsage
;
1826 SIZE_T PrivateUsage
;
1827 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
1829 #define MAX_HW_COUNTERS 16
1830 #define THREAD_PROFILING_FLAG_DISPATCH 0x00000001
1832 typedef enum _HARDWARE_COUNTER_TYPE
{
1834 MaxHardwareCounterType
1835 } HARDWARE_COUNTER_TYPE
, *PHARDWARE_COUNTER_TYPE
;
1837 typedef struct _HARDWARE_COUNTER
{
1838 HARDWARE_COUNTER_TYPE Type
;
1841 } HARDWARE_COUNTER
, *PHARDWARE_COUNTER
;
1843 typedef struct _POOLED_USAGE_AND_LIMITS
{
1844 SIZE_T PeakPagedPoolUsage
;
1845 SIZE_T PagedPoolUsage
;
1846 SIZE_T PagedPoolLimit
;
1847 SIZE_T PeakNonPagedPoolUsage
;
1848 SIZE_T NonPagedPoolUsage
;
1849 SIZE_T NonPagedPoolLimit
;
1850 SIZE_T PeakPagefileUsage
;
1851 SIZE_T PagefileUsage
;
1852 SIZE_T PagefileLimit
;
1853 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
1855 typedef struct _PROCESS_ACCESS_TOKEN
{
1858 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1860 #define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL
1861 #define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
1863 typedef struct _PROCESS_EXCEPTION_PORT
{
1864 IN HANDLE ExceptionPortHandle
;
1865 IN OUT ULONG StateFlags
;
1866 } PROCESS_EXCEPTION_PORT
, *PPROCESS_EXCEPTION_PORT
;
1868 typedef struct _KERNEL_USER_TIMES
{
1869 LARGE_INTEGER CreateTime
;
1870 LARGE_INTEGER ExitTime
;
1871 LARGE_INTEGER KernelTime
;
1872 LARGE_INTEGER UserTime
;
1873 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1875 /* NtXxx Functions */
1881 OUT PHANDLE ProcessHandle
,
1882 IN ACCESS_MASK DesiredAccess
,
1883 IN POBJECT_ATTRIBUTES ObjectAttributes
,
1884 IN PCLIENT_ID ClientId OPTIONAL
);
1889 NtQueryInformationProcess(
1890 IN HANDLE ProcessHandle
,
1891 IN PROCESSINFOCLASS ProcessInformationClass
,
1892 OUT PVOID ProcessInformation OPTIONAL
,
1893 IN ULONG ProcessInformationLength
,
1894 OUT PULONG ReturnLength OPTIONAL
);
1896 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION
{
1897 SystemFirmwareTable_Enumerate
,
1898 SystemFirmwareTable_Get
1899 } SYSTEM_FIRMWARE_TABLE_ACTION
;
1901 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION
{
1902 ULONG ProviderSignature
;
1903 SYSTEM_FIRMWARE_TABLE_ACTION Action
;
1905 ULONG TableBufferLength
;
1906 UCHAR TableBuffer
[ANYSIZE_ARRAY
];
1907 } SYSTEM_FIRMWARE_TABLE_INFORMATION
, *PSYSTEM_FIRMWARE_TABLE_INFORMATION
;
1911 IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo
);
1913 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER
{
1914 ULONG ProviderSignature
;
1916 PFNFTH FirmwareTableHandler
;
1918 } SYSTEM_FIRMWARE_TABLE_HANDLER
, *PSYSTEM_FIRMWARE_TABLE_HANDLER
;
1921 (NTAPI
*PTIMER_APC_ROUTINE
)(
1922 IN PVOID TimerContext
,
1923 IN ULONG TimerLowValue
,
1924 IN LONG TimerHighValue
);
1926 typedef enum _TIMER_SET_INFORMATION_CLASS
{
1927 TimerSetCoalescableTimer
,
1929 } TIMER_SET_INFORMATION_CLASS
;
1931 #if (NTDDI_VERSION >= NTDDI_WIN7)
1932 typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO
{
1933 IN LARGE_INTEGER DueTime
;
1934 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
;
1935 IN PVOID TimerContext OPTIONAL
;
1936 IN
struct _COUNTED_REASON_CONTEXT
*WakeContext OPTIONAL
;
1937 IN ULONG Period OPTIONAL
;
1938 IN ULONG TolerableDelay
;
1939 OUT PBOOLEAN PreviousState OPTIONAL
;
1940 } TIMER_SET_COALESCABLE_TIMER_INFO
, *PTIMER_SET_COALESCABLE_TIMER_INFO
;
1941 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1944 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1947 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1948 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1949 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1950 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1952 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1953 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1954 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1955 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1956 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1958 #define XSTATE_LEGACY_FLOATING_POINT 0
1959 #define XSTATE_LEGACY_SSE 1
1960 #define XSTATE_GSSE 2
1962 #define XSTATE_MASK_LEGACY_FLOATING_POINT (1i64 << (XSTATE_LEGACY_FLOATING_POINT))
1963 #define XSTATE_MASK_LEGACY_SSE (1i64 << (XSTATE_LEGACY_SSE))
1964 #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
1965 #define XSTATE_MASK_GSSE (1i64 << (XSTATE_GSSE))
1967 #define MAXIMUM_XSTATE_FEATURES 64
1969 typedef struct _XSTATE_FEATURE
{
1972 } XSTATE_FEATURE
, *PXSTATE_FEATURE
;
1974 typedef struct _XSTATE_CONFIGURATION
{
1975 ULONG64 EnabledFeatures
;
1977 ULONG OptimizedSave
:1;
1978 XSTATE_FEATURE Features
[MAXIMUM_XSTATE_FEATURES
];
1979 } XSTATE_CONFIGURATION
, *PXSTATE_CONFIGURATION
;
1981 #define MAX_WOW64_SHARED_ENTRIES 16
1983 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
1984 #define NX_SUPPORT_POLICY_ALWAYSON 1
1985 #define NX_SUPPORT_POLICY_OPTIN 2
1986 #define NX_SUPPORT_POLICY_OPTOUT 3
1988 #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0
1989 #define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
1991 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
1992 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
1994 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2
1995 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
1997 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3
1998 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \
1999 (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
2001 #define SHARED_GLOBAL_FLAGS_SPARE_V 0x4
2002 #define SHARED_GLOBAL_FLAGS_SPARE \
2003 (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
2005 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5
2006 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \
2007 (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
2009 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6
2010 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \
2011 (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
2013 #define EX_INIT_BITS(Flags, Bit) \
2014 *((Flags)) |= (Bit) // Safe to use before concurrently accessible
2016 #define EX_TEST_SET_BIT(Flags, Bit) \
2017 InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
2019 #define EX_TEST_CLEAR_BIT(Flags, Bit) \
2020 InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
2022 typedef struct _KUSER_SHARED_DATA
{
2023 ULONG TickCountLowDeprecated
;
2024 ULONG TickCountMultiplier
;
2025 volatile KSYSTEM_TIME InterruptTime
;
2026 volatile KSYSTEM_TIME SystemTime
;
2027 volatile KSYSTEM_TIME TimeZoneBias
;
2028 USHORT ImageNumberLow
;
2029 USHORT ImageNumberHigh
;
2030 WCHAR NtSystemRoot
[260];
2031 ULONG MaxStackTraceDepth
;
2032 ULONG CryptoExponent
;
2034 ULONG LargePageMinimum
;
2036 NT_PRODUCT_TYPE NtProductType
;
2037 BOOLEAN ProductTypeIsValid
;
2038 ULONG NtMajorVersion
;
2039 ULONG NtMinorVersion
;
2040 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
2043 volatile ULONG TimeSlip
;
2044 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
2045 ULONG AltArchitecturePad
[1];
2046 LARGE_INTEGER SystemExpirationDate
;
2048 BOOLEAN KdDebuggerEnabled
;
2049 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2050 UCHAR NXSupportPolicy
;
2052 volatile ULONG ActiveConsoleId
;
2053 volatile ULONG DismountCount
;
2054 ULONG ComPlusPackage
;
2055 ULONG LastSystemRITEventTickCount
;
2056 ULONG NumberOfPhysicalPages
;
2057 BOOLEAN SafeBootMode
;
2058 #if (NTDDI_VERSION >= NTDDI_WIN7)
2062 UCHAR TscQpcEnabled
:1;
2063 UCHAR TscQpcSpareFlag
:1;
2064 UCHAR TscQpcShift
:6;
2069 #if (NTDDI_VERSION >= NTDDI_VISTA)
2071 ULONG SharedDataFlags
;
2073 ULONG DbgErrorPortPresent
:1;
2074 ULONG DbgElevationEnabled
:1;
2075 ULONG DbgVirtEnabled
:1;
2076 ULONG DbgInstallerDetectEnabled
:1;
2077 ULONG DbgSystemDllRelocated
:1;
2078 ULONG DbgDynProcessorEnabled
:1;
2079 ULONG DbgSEHValidationEnabled
:1;
2086 ULONG DataFlagsPad
[1];
2087 ULONGLONG TestRetInstruction
;
2089 ULONG SystemCallReturn
;
2090 ULONGLONG SystemCallPad
[3];
2091 _ANONYMOUS_UNION
union {
2092 volatile KSYSTEM_TIME TickCount
;
2093 volatile ULONG64 TickCountQuad
;
2094 _ANONYMOUS_STRUCT
struct {
2095 ULONG ReservedTickCountOverlay
[3];
2096 ULONG TickCountPad
[1];
2101 #if (NTDDI_VERSION >= NTDDI_WS03)
2102 LONGLONG ConsoleSessionForegroundProcessId
;
2103 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
2105 #if (NTDDI_VERSION >= NTDDI_VISTA)
2106 #if (NTDDI_VERSION >= NTDDI_WIN7)
2107 USHORT UserModeGlobalLogger
[16];
2109 USHORT UserModeGlobalLogger
[8];
2110 ULONG HeapTracingPid
[2];
2111 ULONG CritSecTracingPid
[2];
2113 ULONG ImageFileExecutionOptions
;
2114 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
2115 ULONG LangGenerationCount
;
2117 /* 4 bytes padding */
2119 ULONGLONG Reserved5
;
2120 volatile ULONG64 InterruptTimeBias
;
2122 #if (NTDDI_VERSION >= NTDDI_WIN7)
2123 volatile ULONG64 TscQpcBias
;
2124 volatile ULONG ActiveProcessorCount
;
2125 volatile USHORT ActiveGroupCount
;
2127 volatile ULONG AitSamplingValue
;
2128 volatile ULONG AppCompatFlag
;
2129 ULONGLONG SystemDllNativeRelocation
;
2130 ULONG SystemDllWowRelocation
;
2132 XSTATE_CONFIGURATION XState
;
2134 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
2136 #define CmResourceTypeMaximum 8
2138 typedef struct _CM_PCCARD_DEVICE_DATA
{
2144 ULONG LegacyBaseAddress
;
2146 } CM_PCCARD_DEVICE_DATA
, *PCM_PCCARD_DEVICE_DATA
;
2148 #define PCCARD_MAP_ERROR 0x01
2149 #define PCCARD_DEVICE_PCI 0x10
2151 #define PCCARD_SCAN_DISABLED 0x01
2152 #define PCCARD_MAP_ZERO 0x02
2153 #define PCCARD_NO_TIMER 0x03
2154 #define PCCARD_NO_PIC 0x04
2155 #define PCCARD_NO_LEGACY_BASE 0x05
2156 #define PCCARD_DUP_LEGACY_BASE 0x06
2157 #define PCCARD_NO_CONTROLLERS 0x07
2161 typedef enum _CONFIGURATION_TYPE
{
2164 FloatingPointProcessor
,
2174 MultiFunctionAdapter
,
2188 FloppyDiskPeripheral
,
2201 RealModeIrqRoutingTable
,
2202 RealModePCIEnumeration
,
2204 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
2205 #endif /* !_ARC_DDK_ */
2207 #if (NTDDI_VERSION < NTDDI_WIN7) || defined(_X86_) || !defined(NT_PROCESSOR_GROUPS)
2208 #define SINGLE_GROUP_LEGACY_API 1
2211 #if defined(_X86_) || defined(_AMD64_)
2212 #define PAUSE_PROCESSOR YieldProcessor();
2213 #elif defined(_IA64_)
2214 #define PAUSE_PROCESSOR __yield();
2217 #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
2220 (NTAPI
*PEXPAND_STACK_CALLOUT
) (
2221 IN PVOID Parameter OPTIONAL
);
2231 /* Kernel Functions */
2233 #if (NTDDI_VERSION >= NTDDI_WIN2K) && defined(SINGLE_GROUP_LEGACY_API)
2238 KeSetTargetProcessorDpc(
2245 KeQueryActiveProcessors(VOID
);
2249 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2256 IN KDPC_IMPORTANCE Importance
);
2262 IN OUT PRKEVENT Event
,
2263 IN KPRIORITY Increment
,
2269 KeSetBasePriorityThread(
2270 IN OUT PRKTHREAD Thread
,
2276 KeEnterCriticalRegion(VOID
);
2281 KeLeaveCriticalRegion(VOID
);
2288 IN ULONG BugCheckCode
);
2290 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2292 #if (NTDDI_VERSION >= NTDDI_WINXP)
2296 KeAreApcsDisabled(VOID
);
2299 #if (NTDDI_VERSION >= NTDDI_WS03)
2303 KeInvalidateAllCaches(VOID
);
2306 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
2311 KeExpandKernelStackAndCallout(
2312 IN PEXPAND_STACK_CALLOUT Callout
,
2313 IN PVOID Parameter OPTIONAL
,
2319 KeEnterGuardedRegion(VOID
);
2324 KeLeaveGuardedRegion(VOID
);
2328 #if (NTDDI_VERSION >= NTDDI_VISTA) && defined(SINGLE_GROUP_LEGACY_API)
2333 KeQueryActiveProcessorCount(
2334 OUT PKAFFINITY ActiveProcessors OPTIONAL
);
2339 KeQueryMaximumProcessorCount(VOID
);
2343 #if (NTDDI_VERSION >= NTDDI_WIN7)
2348 KeQueryActiveProcessorCountEx(
2349 IN USHORT GroupNumber
);
2354 KeQueryMaximumProcessorCountEx(
2355 IN USHORT GroupNumber
);
2360 KeQueryActiveGroupCount(VOID
);
2365 KeQueryMaximumGroupCount(VOID
);
2370 KeQueryGroupAffinity(
2371 IN USHORT GroupNumber
);
2376 KeGetCurrentProcessorNumberEx(
2377 OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL
);
2382 KeQueryNodeActiveAffinity(
2383 IN USHORT NodeNumber
,
2384 OUT PGROUP_AFFINITY Affinity OPTIONAL
,
2385 OUT PUSHORT Count OPTIONAL
);
2390 KeQueryNodeMaximumProcessorCount(
2391 IN USHORT NodeNumber
);
2396 KeQueryHighestNodeNumber(VOID
);
2401 KeGetCurrentNodeNumber(VOID
);
2406 KeQueryLogicalProcessorRelationship(
2407 IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
2408 IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
2409 OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL
,
2410 IN OUT PULONG Length
);
2415 KeSetHardwareCounterConfiguration(
2416 IN PHARDWARE_COUNTER CounterArray
,
2422 KeQueryHardwareCounterConfiguration(
2423 OUT PHARDWARE_COUNTER CounterArray
,
2424 IN ULONG MaximumCount
,
2427 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
2432 KeInvalidateRangeAllCaches(
2433 IN PVOID BaseAddress
,
2436 struct _LOADER_PARAMETER_BLOCK
;
2437 struct _CREATE_DISK
;
2438 struct _DRIVE_LAYOUT_INFORMATION_EX
;
2439 struct _SET_PARTITION_INFORMATION_EX
;
2444 #ifndef GUID_DEFINED
2445 #include <guiddef.h>
2450 ** IRP function codes
2453 #define IRP_MN_QUERY_DIRECTORY 0x01
2454 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
2456 #define IRP_MN_USER_FS_REQUEST 0x00
2457 #define IRP_MN_MOUNT_VOLUME 0x01
2458 #define IRP_MN_VERIFY_VOLUME 0x02
2459 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
2460 #define IRP_MN_TRACK_LINK 0x04
2461 #define IRP_MN_KERNEL_CALL 0x04
2463 #define IRP_MN_LOCK 0x01
2464 #define IRP_MN_UNLOCK_SINGLE 0x02
2465 #define IRP_MN_UNLOCK_ALL 0x03
2466 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
2468 #define IRP_MN_FLUSH_AND_PURGE 0x01
2470 #define IRP_MN_NORMAL 0x00
2471 #define IRP_MN_DPC 0x01
2472 #define IRP_MN_MDL 0x02
2473 #define IRP_MN_COMPLETE 0x04
2474 #define IRP_MN_COMPRESSED 0x08
2476 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
2477 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
2478 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
2480 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
2482 /* DEVICE_OBJECT.Flags */
2484 #define DO_DEVICE_HAS_NAME 0x00000040
2485 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
2486 #define DO_LONG_TERM_REQUESTS 0x00000200
2487 #define DO_NEVER_LAST_DEVICE 0x00000400
2488 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
2489 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
2490 #define DO_FORCE_NEITHER_IO 0x00080000
2491 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
2492 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
2493 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
2494 #define DO_DISALLOW_EXECUTE 0x00800000
2496 #define DRVO_REINIT_REGISTERED 0x00000008
2497 #define DRVO_INITIALIZED 0x00000010
2498 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
2499 #define DRVO_LEGACY_RESOURCES 0x00000040
2501 typedef enum _ARBITER_REQUEST_SOURCE
{
2502 ArbiterRequestUndefined
= -1,
2503 ArbiterRequestLegacyReported
,
2504 ArbiterRequestHalReported
,
2505 ArbiterRequestLegacyAssigned
,
2506 ArbiterRequestPnpDetected
,
2507 ArbiterRequestPnpEnumerated
2508 } ARBITER_REQUEST_SOURCE
;
2510 typedef enum _ARBITER_RESULT
{
2511 ArbiterResultUndefined
= -1,
2512 ArbiterResultSuccess
,
2513 ArbiterResultExternalConflict
,
2514 ArbiterResultNullRequest
2517 typedef enum _ARBITER_ACTION
{
2518 ArbiterActionTestAllocation
,
2519 ArbiterActionRetestAllocation
,
2520 ArbiterActionCommitAllocation
,
2521 ArbiterActionRollbackAllocation
,
2522 ArbiterActionQueryAllocatedResources
,
2523 ArbiterActionWriteReservedResources
,
2524 ArbiterActionQueryConflict
,
2525 ArbiterActionQueryArbitrate
,
2526 ArbiterActionAddReserved
,
2527 ArbiterActionBootAllocation
2528 } ARBITER_ACTION
, *PARBITER_ACTION
;
2530 typedef struct _ARBITER_CONFLICT_INFO
{
2531 PDEVICE_OBJECT OwningObject
;
2534 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
2536 typedef struct _ARBITER_PARAMETERS
{
2539 IN OUT PLIST_ENTRY ArbitrationList
;
2540 IN ULONG AllocateFromCount
;
2541 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
2544 IN OUT PLIST_ENTRY ArbitrationList
;
2545 IN ULONG AllocateFromCount
;
2546 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
2549 IN OUT PLIST_ENTRY ArbitrationList
;
2552 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
2553 } QueryAllocatedResources
;
2555 IN PDEVICE_OBJECT PhysicalDeviceObject
;
2556 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
2557 OUT PULONG ConflictCount
;
2558 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
2561 IN PLIST_ENTRY ArbitrationList
;
2564 IN PDEVICE_OBJECT ReserveDevice
;
2567 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
2569 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
2571 typedef struct _ARBITER_LIST_ENTRY
{
2572 LIST_ENTRY ListEntry
;
2573 ULONG AlternativeCount
;
2574 PIO_RESOURCE_DESCRIPTOR Alternatives
;
2575 PDEVICE_OBJECT PhysicalDeviceObject
;
2576 ARBITER_REQUEST_SOURCE RequestSource
;
2579 INTERFACE_TYPE InterfaceType
;
2582 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
2583 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
2584 ARBITER_RESULT Result
;
2585 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
2588 (NTAPI
*PARBITER_HANDLER
)(
2589 IN OUT PVOID Context
,
2590 IN ARBITER_ACTION Action
,
2591 IN OUT PARBITER_PARAMETERS Parameters
);
2593 #define ARBITER_PARTIAL 0x00000001
2595 typedef struct _ARBITER_INTERFACE
{
2599 PINTERFACE_REFERENCE InterfaceReference
;
2600 PINTERFACE_DEREFERENCE InterfaceDereference
;
2601 PARBITER_HANDLER ArbiterHandler
;
2603 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
2605 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
2606 HalInstalledBusInformation
,
2607 HalProfileSourceInformation
,
2608 HalInformationClassUnused1
,
2609 HalPowerInformation
,
2610 HalProcessorSpeedInformation
,
2611 HalCallbackInformation
,
2612 HalMapRegisterInformation
,
2613 HalMcaLogInformation
,
2614 HalFrameBufferCachingInformation
,
2615 HalDisplayBiosInformation
,
2616 HalProcessorFeatureInformation
,
2617 HalNumaTopologyInterface
,
2618 HalErrorInformation
,
2619 HalCmcLogInformation
,
2620 HalCpeLogInformation
,
2621 HalQueryMcaInterface
,
2622 HalQueryAMLIIllegalIOPortAddresses
,
2623 HalQueryMaxHotPlugMemoryAddress
,
2624 HalPartitionIpiInterface
,
2625 HalPlatformInformation
,
2626 HalQueryProfileSourceList
,
2627 HalInitLogInformation
,
2628 HalFrequencyInformation
,
2629 HalProcessorBrandString
,
2630 HalHypervisorInformation
,
2631 HalPlatformTimerInformation
,
2632 HalAcpiAuditInformation
2633 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
2635 typedef enum _HAL_SET_INFORMATION_CLASS
{
2636 HalProfileSourceInterval
,
2637 HalProfileSourceInterruptHandler
,
2638 HalMcaRegisterDriver
,
2639 HalKernelErrorHandler
,
2640 HalCmcRegisterDriver
,
2641 HalCpeRegisterDriver
,
2645 HalGenerateCmcInterrupt
,
2646 HalProfileSourceTimerHandler
,
2648 HalProfileDpgoSourceInterruptHandler
2649 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
2651 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
2652 KPROFILE_SOURCE Source
;
2654 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
2656 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
2657 KPROFILE_SOURCE Source
;
2660 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
2662 typedef struct _MAP_REGISTER_ENTRY
{
2664 BOOLEAN WriteToDevice
;
2665 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
2667 typedef struct _DEBUG_DEVICE_ADDRESS
{
2671 PUCHAR TranslatedAddress
;
2673 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
2675 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
2676 PHYSICAL_ADDRESS Start
;
2677 PHYSICAL_ADDRESS MaxEnd
;
2678 PVOID VirtualAddress
;
2682 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
2684 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
2693 BOOLEAN Initialized
;
2695 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
2696 DEBUG_MEMORY_REQUIREMENTS Memory
;
2697 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
2699 typedef struct _PM_DISPATCH_TABLE
{
2703 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
2705 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
2706 TranslateChildToParent
,
2707 TranslateParentToChild
2708 } RESOURCE_TRANSLATION_DIRECTION
;
2711 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
2712 IN OUT PVOID Context
,
2713 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
2714 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
2715 IN ULONG AlternativesCount OPTIONAL
,
2716 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
2717 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2718 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
2721 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
2722 IN PVOID Context OPTIONAL
,
2723 IN PIO_RESOURCE_DESCRIPTOR Source
,
2724 IN PDEVICE_OBJECT PhysicalDeviceObject
,
2725 OUT PULONG TargetCount
,
2726 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
2728 typedef struct _TRANSLATOR_INTERFACE
{
2732 PINTERFACE_REFERENCE InterfaceReference
;
2733 PINTERFACE_DEREFERENCE InterfaceDereference
;
2734 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
2735 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
2736 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
2739 (FASTCALL
*pHalExamineMBR
)(
2740 IN PDEVICE_OBJECT DeviceObject
,
2741 IN ULONG SectorSize
,
2742 IN ULONG MBRTypeIdentifier
,
2746 (FASTCALL
*pHalIoReadPartitionTable
)(
2747 IN PDEVICE_OBJECT DeviceObject
,
2748 IN ULONG SectorSize
,
2749 IN BOOLEAN ReturnRecognizedPartitions
,
2750 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2753 (FASTCALL
*pHalIoSetPartitionInformation
)(
2754 IN PDEVICE_OBJECT DeviceObject
,
2755 IN ULONG SectorSize
,
2756 IN ULONG PartitionNumber
,
2757 IN ULONG PartitionType
);
2760 (FASTCALL
*pHalIoWritePartitionTable
)(
2761 IN PDEVICE_OBJECT DeviceObject
,
2762 IN ULONG SectorSize
,
2763 IN ULONG SectorsPerTrack
,
2764 IN ULONG NumberOfHeads
,
2765 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2767 typedef PBUS_HANDLER
2768 (FASTCALL
*pHalHandlerForBus
)(
2769 IN INTERFACE_TYPE InterfaceType
,
2770 IN ULONG BusNumber
);
2773 (FASTCALL
*pHalReferenceBusHandler
)(
2774 IN PBUS_HANDLER BusHandler
);
2777 (NTAPI
*pHalQuerySystemInformation
)(
2778 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
2779 IN ULONG BufferSize
,
2780 IN OUT PVOID Buffer
,
2781 OUT PULONG ReturnedLength
);
2784 (NTAPI
*pHalSetSystemInformation
)(
2785 IN HAL_SET_INFORMATION_CLASS InformationClass
,
2786 IN ULONG BufferSize
,
2790 (NTAPI
*pHalQueryBusSlots
)(
2791 IN PBUS_HANDLER BusHandler
,
2792 IN ULONG BufferSize
,
2793 OUT PULONG SlotNumbers
,
2794 OUT PULONG ReturnedLength
);
2797 (NTAPI
*pHalInitPnpDriver
)(
2801 (NTAPI
*pHalInitPowerManagement
)(
2802 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
2803 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
2805 typedef struct _DMA_ADAPTER
*
2806 (NTAPI
*pHalGetDmaAdapter
)(
2808 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
2809 OUT PULONG NumberOfMapRegisters
);
2812 (NTAPI
*pHalGetInterruptTranslator
)(
2813 IN INTERFACE_TYPE ParentInterfaceType
,
2814 IN ULONG ParentBusNumber
,
2815 IN INTERFACE_TYPE BridgeInterfaceType
,
2818 OUT PTRANSLATOR_INTERFACE Translator
,
2819 OUT PULONG BridgeBusNumber
);
2822 (NTAPI
*pHalStartMirroring
)(
2826 (NTAPI
*pHalEndMirroring
)(
2827 IN ULONG PassNumber
);
2830 (NTAPI
*pHalMirrorPhysicalMemory
)(
2831 IN PHYSICAL_ADDRESS PhysicalAddress
,
2832 IN LARGE_INTEGER NumberOfBytes
);
2835 (NTAPI
*pHalMirrorVerify
)(
2836 IN PHYSICAL_ADDRESS PhysicalAddress
,
2837 IN LARGE_INTEGER NumberOfBytes
);
2840 (NTAPI
*pHalEndOfBoot
)(
2845 (NTAPI
*pHalTranslateBusAddress
)(
2846 IN INTERFACE_TYPE InterfaceType
,
2848 IN PHYSICAL_ADDRESS BusAddress
,
2849 IN OUT PULONG AddressSpace
,
2850 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
2854 (NTAPI
*pHalAssignSlotResources
)(
2855 IN PUNICODE_STRING RegistryPath
,
2856 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2857 IN PDRIVER_OBJECT DriverObject
,
2858 IN PDEVICE_OBJECT DeviceObject
,
2859 IN INTERFACE_TYPE BusType
,
2861 IN ULONG SlotNumber
,
2862 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
2866 (NTAPI
*pHalHaltSystem
)(
2871 (NTAPI
*pHalResetDisplay
)(
2876 (NTAPI
*pHalVectorToIDTEntry
)(
2881 (NTAPI
*pHalFindBusAddressTranslation
)(
2882 IN PHYSICAL_ADDRESS BusAddress
,
2883 IN OUT PULONG AddressSpace
,
2884 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
2885 IN OUT PULONG_PTR Context
,
2886 IN BOOLEAN NextBus
);
2890 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
2891 IN PVOID LoaderBlock OPTIONAL
,
2892 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
2896 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
2897 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
2901 (NTAPI
*pKdGetAcpiTablePhase0
)(
2902 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2903 IN ULONG Signature
);
2907 (NTAPI
*pHalGetAcpiTable
)(
2909 IN PCSTR OemId OPTIONAL
,
2910 IN PCSTR OemTableId OPTIONAL
);
2914 (NTAPI
*pKdCheckPowerButton
)(
2917 #if (NTDDI_VERSION >= NTDDI_VISTA)
2920 (NTAPI
*pKdMapPhysicalMemory64
)(
2921 IN PHYSICAL_ADDRESS PhysicalAddress
,
2922 IN ULONG NumberPages
,
2923 IN BOOLEAN FlushCurrentTLB
);
2927 (NTAPI
*pKdUnmapVirtualAddress
)(
2928 IN PVOID VirtualAddress
,
2929 IN ULONG NumberPages
,
2930 IN BOOLEAN FlushCurrentTLB
);
2934 (NTAPI
*pKdMapPhysicalMemory64
)(
2935 IN PHYSICAL_ADDRESS PhysicalAddress
,
2936 IN ULONG NumberPages
);
2940 (NTAPI
*pKdUnmapVirtualAddress
)(
2941 IN PVOID VirtualAddress
,
2942 IN ULONG NumberPages
);
2948 (NTAPI
*pKdGetPciDataByOffset
)(
2950 IN ULONG SlotNumber
,
2957 (NTAPI
*pKdSetPciDataByOffset
)(
2959 IN ULONG SlotNumber
,
2965 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
2971 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(
2976 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
2977 IN PCI_ERROR_HANDLER_CALLBACK Callback
);
2979 #if 1 /* Not present in WDK 7600 */
2981 (FASTCALL
*pHalIoAssignDriveLetters
)(
2982 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
2983 IN PSTRING NtDeviceName
,
2984 OUT PUCHAR NtSystemPath
,
2985 OUT PSTRING NtSystemPathString
);
2990 pHalQuerySystemInformation HalQuerySystemInformation
;
2991 pHalSetSystemInformation HalSetSystemInformation
;
2992 pHalQueryBusSlots HalQueryBusSlots
;
2994 pHalExamineMBR HalExamineMBR
;
2995 #if 1 /* Not present in WDK 7600 */
2996 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
2998 pHalIoReadPartitionTable HalIoReadPartitionTable
;
2999 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
3000 pHalIoWritePartitionTable HalIoWritePartitionTable
;
3001 pHalHandlerForBus HalReferenceHandlerForBus
;
3002 pHalReferenceBusHandler HalReferenceBusHandler
;
3003 pHalReferenceBusHandler HalDereferenceBusHandler
;
3004 pHalInitPnpDriver HalInitPnpDriver
;
3005 pHalInitPowerManagement HalInitPowerManagement
;
3006 pHalGetDmaAdapter HalGetDmaAdapter
;
3007 pHalGetInterruptTranslator HalGetInterruptTranslator
;
3008 pHalStartMirroring HalStartMirroring
;
3009 pHalEndMirroring HalEndMirroring
;
3010 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
3011 pHalEndOfBoot HalEndOfBoot
;
3012 pHalMirrorVerify HalMirrorVerify
;
3013 pHalGetAcpiTable HalGetCachedAcpiTable
;
3014 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
3016 pHalGetErrorCapList HalGetErrorCapList
;
3017 pHalInjectError HalInjectError
;
3019 } HAL_DISPATCH
, *PHAL_DISPATCH
;
3021 /* GCC/MSVC and WDK compatible declaration */
3022 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
3024 #if defined(_NTOSKRNL_) || defined(_BLDR_)
3025 #define HALDISPATCH (&HalDispatchTable)
3027 /* This is a WDK compatibility definition */
3028 #define HalDispatchTable (&HalDispatchTable)
3029 #define HALDISPATCH HalDispatchTable
3032 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
3033 #define HalDispatchTableVersion HALDISPATCH->Version
3034 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
3035 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
3036 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
3037 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
3038 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
3039 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
3040 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
3041 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
3042 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
3043 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
3044 #define HalStartMirroring HALDISPATCH->HalStartMirroring
3045 #define HalEndMirroring HALDISPATCH->HalEndMirroring
3046 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
3047 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
3048 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
3050 typedef struct _IMAGE_INFO
{
3051 _ANONYMOUS_UNION
union {
3053 _ANONYMOUS_STRUCT
struct {
3054 ULONG ImageAddressingMode
:8;
3055 ULONG SystemModeImage
:1;
3056 ULONG ImageMappedToAllPids
:1;
3057 ULONG ExtendedInfoPresent
:1;
3062 ULONG ImageSelector
;
3064 ULONG ImageSectionNumber
;
3065 } IMAGE_INFO
, *PIMAGE_INFO
;
3067 #define IMAGE_ADDRESSING_MODE_32BIT 3
3069 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
3070 IoQueryDeviceIdentifier
= 0,
3071 IoQueryDeviceConfigurationData
,
3072 IoQueryDeviceComponentInformation
,
3073 IoQueryDeviceMaxData
3074 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
3076 typedef struct _DISK_SIGNATURE
{
3077 ULONG PartitionStyle
;
3078 _ANONYMOUS_UNION
union {
3087 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
3089 extern NTKERNELAPI PVOID MmHighestUserAddress
;
3090 extern NTKERNELAPI PVOID MmSystemRangeStart
;
3091 extern NTKERNELAPI ULONG MmUserProbeAddress
;
3096 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3097 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3098 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
3099 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
3100 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
3102 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3104 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3105 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
3106 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
3107 #if !defined (_X86PAE_)
3108 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
3110 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
3113 #define KeGetPcr() PCR
3115 #define PCR_MINOR_VERSION 1
3116 #define PCR_MAJOR_VERSION 1
3118 typedef struct _KPCR
{
3122 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
3123 PVOID Used_StackBase
;
3126 ULONG ContextSwitches
;
3127 KAFFINITY SetMemberCopy
;
3131 struct _KPCR
*SelfPcr
;
3132 struct _KPRCB
*Prcb
;
3137 PVOID KdVersionBlock
;
3138 struct _KIDTENTRY
*IDT
;
3139 struct _KGDTENTRY
*GDT
;
3141 USHORT MajorVersion
;
3142 USHORT MinorVersion
;
3143 KAFFINITY SetMember
;
3144 ULONG StallScaleFactor
;
3148 UCHAR SecondLevelCacheAssociativity
;
3150 ULONG KernelReserved
[14];
3151 ULONG SecondLevelCacheSize
;
3152 ULONG HalReserved
[16];
3157 KeGetCurrentProcessorNumber(VOID
)
3159 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
3166 #define PTI_SHIFT 12L
3167 #define PDI_SHIFT 21L
3168 #define PPI_SHIFT 30L
3169 #define PXI_SHIFT 39L
3170 #define PTE_PER_PAGE 512
3171 #define PDE_PER_PAGE 512
3172 #define PPE_PER_PAGE 512
3173 #define PXE_PER_PAGE 512
3174 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
3175 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
3176 #define PPI_MASK (PPE_PER_PAGE - 1)
3177 #define PXI_MASK (PXE_PER_PAGE - 1)
3179 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
3180 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
3181 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
3182 #define PDE_BASE 0xFFFFF6FB40000000ULL
3183 #define PTE_BASE 0xFFFFF68000000000ULL
3184 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
3185 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
3186 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
3187 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
3189 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3190 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3191 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3192 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3193 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
3194 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
3196 typedef struct _KPCR
3198 _ANONYMOUS_UNION
union
3201 _ANONYMOUS_STRUCT
struct
3203 union _KGDTENTRY64
*GdtBase
;
3204 struct _KTSS64
*TssBase
;
3207 struct _KPRCB
*CurrentPrcb
;
3208 PKSPIN_LOCK_QUEUE LockArray
;
3212 union _KIDTENTRY64
*IdtBase
;
3215 UCHAR SecondLevelCacheAssociativity
;
3216 UCHAR ObsoleteNumber
;
3219 USHORT MajorVersion
;
3220 USHORT MinorVersion
;
3221 ULONG StallScaleFactor
;
3223 ULONG KernelReserved
[15];
3224 ULONG SecondLevelCacheSize
;
3225 ULONG HalReserved
[16];
3227 PVOID KdVersionBlock
;
3229 ULONG PcrAlign1
[24];
3236 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
3241 KeGetCurrentProcessorNumber(VOID
)
3243 return (ULONG
)__readgsword(0x184);
3246 #endif /* _AMD64_ */
3248 typedef enum _INTERLOCKED_RESULT
{
3249 ResultNegative
= RESULT_NEGATIVE
,
3250 ResultZero
= RESULT_ZERO
,
3251 ResultPositive
= RESULT_POSITIVE
3252 } INTERLOCKED_RESULT
;
3254 /* Executive Types */
3256 #define PROTECTED_POOL 0x80000000
3258 typedef struct _ZONE_SEGMENT_HEADER
{
3259 SINGLE_LIST_ENTRY SegmentList
;
3261 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
3263 typedef struct _ZONE_HEADER
{
3264 SINGLE_LIST_ENTRY FreeList
;
3265 SINGLE_LIST_ENTRY SegmentList
;
3267 ULONG TotalSegmentSize
;
3268 } ZONE_HEADER
, *PZONE_HEADER
;
3270 /* Executive Functions */
3272 static __inline PVOID
3274 IN PZONE_HEADER Zone
)
3276 if (Zone
->FreeList
.Next
)
3277 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
3278 return (PVOID
) Zone
->FreeList
.Next
;
3281 static __inline PVOID
3283 IN PZONE_HEADER Zone
,
3286 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
3287 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
3288 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
3293 * ExInterlockedAllocateFromZone(
3294 * IN PZONE_HEADER Zone,
3295 * IN PKSPIN_LOCK Lock)
3297 #define ExInterlockedAllocateFromZone(Zone, Lock) \
3298 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
3301 * ExInterlockedFreeToZone(
3302 * IN PZONE_HEADER Zone,
3304 * IN PKSPIN_LOCK Lock);
3306 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
3307 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
3312 * IN PZONE_HEADER Zone)
3314 #define ExIsFullZone(Zone) \
3315 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
3318 * ExIsObjectInFirstZoneSegment(
3319 * IN PZONE_HEADER Zone,
3322 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
3323 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
3324 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
3325 (Zone)->TotalSegmentSize)) )
3327 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
3328 #define ExAcquireResourceShared ExAcquireResourceSharedLite
3329 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
3330 #define ExDeleteResource ExDeleteResourceLite
3331 #define ExInitializeResource ExInitializeResourceLite
3332 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
3333 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
3334 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
3335 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
3337 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3343 IN OUT PZONE_HEADER Zone
,
3344 IN OUT PVOID Segment
,
3345 IN ULONG SegmentSize
);
3351 OUT PZONE_HEADER Zone
,
3353 IN OUT PVOID InitialSegment
,
3354 IN ULONG InitialSegmentSize
);
3359 ExInterlockedExtendZone(
3360 IN OUT PZONE_HEADER Zone
,
3361 IN OUT PVOID Segment
,
3362 IN ULONG SegmentSize
,
3363 IN OUT PKSPIN_LOCK Lock
);
3375 ExRaiseAccessViolation(
3382 ExRaiseDatatypeMisalignment(
3392 Exfi386InterlockedIncrementLong(
3393 IN OUT LONG
volatile *Addend
);
3398 Exfi386InterlockedDecrementLong(
3404 Exfi386InterlockedExchangeUlong(
3410 typedef struct _CONTROLLER_OBJECT
{
3413 PVOID ControllerExtension
;
3414 KDEVICE_QUEUE DeviceWaitQueue
;
3416 LARGE_INTEGER Spare2
;
3417 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
3419 typedef struct _CONFIGURATION_INFORMATION
{
3424 ULONG ScsiPortCount
;
3426 ULONG ParallelCount
;
3427 BOOLEAN AtDiskPrimaryAddressClaimed
;
3428 BOOLEAN AtDiskSecondaryAddressClaimed
;
3430 ULONG MediumChangerCount
;
3431 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
3435 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
3437 IN PUNICODE_STRING PathName
,
3438 IN INTERFACE_TYPE BusType
,
3440 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
3441 IN CONFIGURATION_TYPE ControllerType
,
3442 IN ULONG ControllerNumber
,
3443 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
3444 IN CONFIGURATION_TYPE PeripheralType
,
3445 IN ULONG PeripheralNumber
,
3446 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
3450 (NTAPI DRIVER_REINITIALIZE
)(
3451 IN
struct _DRIVER_OBJECT
*DriverObject
,
3455 typedef DRIVER_REINITIALIZE
*PDRIVER_REINITIALIZE
;
3457 /** Filesystem runtime library routines **/
3459 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3463 FsRtlIsTotalDeviceFailure(
3464 IN NTSTATUS Status
);
3467 /* Hardware Abstraction Layer Types */
3470 (NTAPI
*PciPin2Line
)(
3471 IN
struct _BUS_HANDLER
*BusHandler
,
3472 IN
struct _BUS_HANDLER
*RootHandler
,
3473 IN PCI_SLOT_NUMBER SlotNumber
,
3474 IN PPCI_COMMON_CONFIG PciData
);
3477 (NTAPI
*PciLine2Pin
)(
3478 IN
struct _BUS_HANDLER
*BusHandler
,
3479 IN
struct _BUS_HANDLER
*RootHandler
,
3480 IN PCI_SLOT_NUMBER SlotNumber
,
3481 IN PPCI_COMMON_CONFIG PciNewData
,
3482 IN PPCI_COMMON_CONFIG PciOldData
);
3485 (NTAPI
*PciReadWriteConfig
)(
3486 IN
struct _BUS_HANDLER
*BusHandler
,
3487 IN PCI_SLOT_NUMBER Slot
,
3492 #define PCI_DATA_TAG ' ICP'
3493 #define PCI_DATA_VERSION 1
3495 typedef struct _PCIBUSDATA
{
3498 PciReadWriteConfig ReadConfig
;
3499 PciReadWriteConfig WriteConfig
;
3500 PciPin2Line Pin2Line
;
3501 PciLine2Pin Line2Pin
;
3502 PCI_SLOT_NUMBER ParentSlot
;
3504 } PCIBUSDATA
, *PPCIBUSDATA
;
3506 /* Hardware Abstraction Layer Functions */
3508 #if !defined(NO_LEGACY_DRIVERS)
3510 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3515 HalAssignSlotResources(
3516 IN PUNICODE_STRING RegistryPath
,
3517 IN PUNICODE_STRING DriverClassName
,
3518 IN PDRIVER_OBJECT DriverObject
,
3519 IN PDEVICE_OBJECT DeviceObject
,
3520 IN INTERFACE_TYPE BusType
,
3522 IN ULONG SlotNumber
,
3523 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
3528 HalGetInterruptVector(
3529 IN INTERFACE_TYPE InterfaceType
,
3531 IN ULONG BusInterruptLevel
,
3532 IN ULONG BusInterruptVector
,
3534 OUT PKAFFINITY Affinity
);
3540 IN BUS_DATA_TYPE BusDataType
,
3542 IN ULONG SlotNumber
,
3548 #endif /* !defined(NO_LEGACY_DRIVERS) */
3550 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3556 IN PDEVICE_DESCRIPTION DeviceDescription
,
3557 IN OUT PULONG NumberOfMapRegisters
);
3563 IN ULONG Frequency
);
3568 IN PADAPTER_OBJECT DmaAdapter
);
3573 HalAcquireDisplayOwnership(
3574 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
3580 IN BUS_DATA_TYPE BusDataType
,
3582 IN ULONG SlotNumber
,
3589 HalGetBusDataByOffset(
3590 IN BUS_DATA_TYPE BusDataType
,
3592 IN ULONG SlotNumber
,
3600 HalSetBusDataByOffset(
3601 IN BUS_DATA_TYPE BusDataType
,
3603 IN ULONG SlotNumber
,
3611 HalTranslateBusAddress(
3612 IN INTERFACE_TYPE InterfaceType
,
3614 IN PHYSICAL_ADDRESS BusAddress
,
3615 IN OUT PULONG AddressSpace
,
3616 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
3620 #if (NTDDI_VERSION >= NTDDI_WINXP)
3625 IN PDEVICE_OBJECT DeviceObject
,
3626 IN ULONG SectorSize
,
3627 IN ULONG MBRTypeIdentifier
,
3631 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
3635 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3636 //DECLSPEC_DEPRECATED_DDK
3640 IoFreeAdapterChannel(
3641 IN PADAPTER_OBJECT AdapterObject
);
3643 //DECLSPEC_DEPRECATED_DDK
3647 IoFlushAdapterBuffers(
3648 IN PADAPTER_OBJECT AdapterObject
,
3650 IN PVOID MapRegisterBase
,
3653 IN BOOLEAN WriteToDevice
);
3655 //DECLSPEC_DEPRECATED_DDK
3660 IN PADAPTER_OBJECT AdapterObject
,
3661 IN PVOID MapRegisterBase
,
3662 IN ULONG NumberOfMapRegisters
);
3664 //DECLSPEC_DEPRECATED_DDK
3668 HalAllocateCommonBuffer(
3669 IN PADAPTER_OBJECT AdapterObject
,
3671 OUT PPHYSICAL_ADDRESS LogicalAddress
,
3672 IN BOOLEAN CacheEnabled
);
3674 //DECLSPEC_DEPRECATED_DDK
3678 HalFreeCommonBuffer(
3679 IN PADAPTER_OBJECT AdapterObject
,
3681 IN PHYSICAL_ADDRESS LogicalAddress
,
3682 IN PVOID VirtualAddress
,
3683 IN BOOLEAN CacheEnabled
);
3685 //DECLSPEC_DEPRECATED_DDK
3690 IN PADAPTER_OBJECT AdapterObject
);
3695 HalAllocateAdapterChannel(
3696 IN PADAPTER_OBJECT AdapterObject
,
3697 IN PWAIT_CONTEXT_BLOCK Wcb
,
3698 IN ULONG NumberOfMapRegisters
,
3699 IN PDRIVER_CONTROL ExecutionRoutine
);
3701 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3703 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
3705 /* I/O Manager Functions */
3708 * VOID IoAssignArcName(
3709 * IN PUNICODE_STRING ArcName,
3710 * IN PUNICODE_STRING DeviceName);
3712 #define IoAssignArcName(_ArcName, _DeviceName) ( \
3713 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
3717 * IoDeassignArcName(
3718 * IN PUNICODE_STRING ArcName)
3720 #define IoDeassignArcName IoDeleteSymbolicLink
3722 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3724 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
3728 IoAllocateAdapterChannel(
3729 IN PADAPTER_OBJECT AdapterObject
,
3730 IN PDEVICE_OBJECT DeviceObject
,
3731 IN ULONG NumberOfMapRegisters
,
3732 IN PDRIVER_CONTROL ExecutionRoutine
,
3736 //DECLSPEC_DEPRECATED_DDK
3741 IN PADAPTER_OBJECT AdapterObject
,
3743 IN PVOID MapRegisterBase
,
3745 IN OUT PULONG Length
,
3746 IN BOOLEAN WriteToDevice
);
3751 IoAllocateController(
3752 IN PCONTROLLER_OBJECT ControllerObject
,
3753 IN PDEVICE_OBJECT DeviceObject
,
3754 IN PDRIVER_CONTROL ExecutionRoutine
,
3755 IN PVOID Context OPTIONAL
);
3767 IN PCONTROLLER_OBJECT ControllerObject
);
3773 IN PCONTROLLER_OBJECT ControllerObject
);
3776 PCONFIGURATION_INFORMATION
3778 IoGetConfigurationInformation(
3784 IoGetDeviceToVerify(
3785 IN PETHREAD Thread
);
3791 IN PDEVICE_OBJECT DeviceObject
,
3792 IN PFILE_OBJECT FileObject
);
3797 IoGetFileObjectGenericMapping(
3803 IoMakeAssociatedIrp(
3805 IN CCHAR StackSize
);
3810 IoQueryDeviceDescription(
3811 IN PINTERFACE_TYPE BusType OPTIONAL
,
3812 IN PULONG BusNumber OPTIONAL
,
3813 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
3814 IN PULONG ControllerNumber OPTIONAL
,
3815 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
3816 IN PULONG PeripheralNumber OPTIONAL
,
3817 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
3818 IN OUT PVOID Context OPTIONAL
);
3825 IN PVPB Vpb OPTIONAL
,
3826 IN PDEVICE_OBJECT RealDeviceObject
);
3831 IoRaiseInformationalHardError(
3832 IN NTSTATUS ErrorStatus
,
3833 IN PUNICODE_STRING String OPTIONAL
,
3834 IN PKTHREAD Thread OPTIONAL
);
3839 IoRegisterBootDriverReinitialization(
3840 IN PDRIVER_OBJECT DriverObject
,
3841 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3842 IN PVOID Context OPTIONAL
);
3847 IoRegisterDriverReinitialization(
3848 IN PDRIVER_OBJECT DriverObject
,
3849 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3850 IN PVOID Context OPTIONAL
);
3855 IoAttachDeviceByPointer(
3856 IN PDEVICE_OBJECT SourceDevice
,
3857 IN PDEVICE_OBJECT TargetDevice
);
3862 IoReportDetectedDevice(
3863 IN PDRIVER_OBJECT DriverObject
,
3864 IN INTERFACE_TYPE LegacyBusType
,
3866 IN ULONG SlotNumber
,
3867 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
3868 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
3869 IN BOOLEAN ResourceAssigned
,
3870 IN OUT PDEVICE_OBJECT
*DeviceObject
);
3875 IoReportResourceForDetection(
3876 IN PDRIVER_OBJECT DriverObject
,
3877 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
3878 IN ULONG DriverListSize OPTIONAL
,
3879 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
3880 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
3881 IN ULONG DeviceListSize OPTIONAL
,
3882 OUT PBOOLEAN ConflictDetected
);
3887 IoReportResourceUsage(
3888 IN PUNICODE_STRING DriverClassName OPTIONAL
,
3889 IN PDRIVER_OBJECT DriverObject
,
3890 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
3891 IN ULONG DriverListSize OPTIONAL
,
3892 IN PDEVICE_OBJECT DeviceObject
,
3893 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
3894 IN ULONG DeviceListSize OPTIONAL
,
3895 IN BOOLEAN OverrideConflict
,
3896 OUT PBOOLEAN ConflictDetected
);
3901 IoSetHardErrorOrVerifyDevice(
3903 IN PDEVICE_OBJECT DeviceObject
);
3909 IN PUNICODE_STRING RegistryPath
,
3910 IN PUNICODE_STRING DriverClassName OPTIONAL
,
3911 IN PDRIVER_OBJECT DriverObject
,
3912 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
3913 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
3914 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
3916 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3918 #if (NTDDI_VERSION >= NTDDI_WINXP)
3924 IN PDEVICE_OBJECT DeviceObject
,
3925 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
3930 IoReadDiskSignature(
3931 IN PDEVICE_OBJECT DeviceObject
,
3932 IN ULONG BytesPerSector
,
3933 OUT PDISK_SIGNATURE Signature
);
3938 IoReadPartitionTable(
3939 IN PDEVICE_OBJECT DeviceObject
,
3940 IN ULONG SectorSize
,
3941 IN BOOLEAN ReturnRecognizedPartitions
,
3942 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
3947 IoReadPartitionTableEx(
3948 IN PDEVICE_OBJECT DeviceObject
,
3949 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
3954 IoSetPartitionInformation(
3955 IN PDEVICE_OBJECT DeviceObject
,
3956 IN ULONG SectorSize
,
3957 IN ULONG PartitionNumber
,
3958 IN ULONG PartitionType
);
3963 IoSetPartitionInformationEx(
3964 IN PDEVICE_OBJECT DeviceObject
,
3965 IN ULONG PartitionNumber
,
3966 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
3971 IoSetSystemPartition(
3972 IN PUNICODE_STRING VolumeNameString
);
3977 IoSetThreadHardErrorMode(
3978 IN BOOLEAN EnableHardErrors
);
3983 IoVerifyPartitionTable(
3984 IN PDEVICE_OBJECT DeviceObject
,
3985 IN BOOLEAN FixErrors
);
3990 IoVolumeDeviceToDosName(
3991 IN PVOID VolumeDeviceObject
,
3992 OUT PUNICODE_STRING DosName
);
3997 IoWritePartitionTable(
3998 IN PDEVICE_OBJECT DeviceObject
,
3999 IN ULONG SectorSize
,
4000 IN ULONG SectorsPerTrack
,
4001 IN ULONG NumberOfHeads
,
4002 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
4007 IoWritePartitionTableEx(
4008 IN PDEVICE_OBJECT DeviceObject
,
4009 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
4011 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4013 /* Memory Manager Types */
4015 typedef struct _PHYSICAL_MEMORY_RANGE
{
4016 PHYSICAL_ADDRESS BaseAddress
;
4017 LARGE_INTEGER NumberOfBytes
;
4018 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
4020 /* Memory Manager Functions */
4022 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4025 PPHYSICAL_MEMORY_RANGE
4027 MmGetPhysicalMemoryRanges(
4033 MmGetPhysicalAddress(
4034 IN PVOID BaseAddress
);
4039 MmIsNonPagedSystemAddressValid(
4040 IN PVOID VirtualAddress
);
4045 MmAllocateNonCachedMemory(
4046 IN SIZE_T NumberOfBytes
);
4051 MmFreeNonCachedMemory(
4052 IN PVOID BaseAddress
,
4053 IN SIZE_T NumberOfBytes
);
4058 MmGetVirtualForPhysical(
4059 IN PHYSICAL_ADDRESS PhysicalAddress
);
4064 MmMapUserAddressesToPage(
4065 IN PVOID BaseAddress
,
4066 IN SIZE_T NumberOfBytes
,
4067 IN PVOID PageAddress
);
4073 IN PHYSICAL_ADDRESS PhysicalAddress
,
4074 IN SIZE_T NumberOfBytes
,
4075 IN MEMORY_CACHING_TYPE CacheType
);
4080 MmMapViewInSessionSpace(
4082 OUT PVOID
*MappedBase
,
4083 IN OUT PSIZE_T ViewSize
);
4088 MmMapViewInSystemSpace(
4090 OUT PVOID
*MappedBase
,
4091 IN OUT PSIZE_T ViewSize
);
4097 IN PVOID VirtualAddress
);
4102 MmIsThisAnNtAsSystem(
4108 MmLockPagableSectionByHandle(
4109 IN PVOID ImageSectionHandle
);
4114 MmUnmapViewInSessionSpace(
4115 IN PVOID MappedBase
);
4120 MmUnmapViewInSystemSpace(
4121 IN PVOID MappedBase
);
4126 MmUnsecureVirtualMemory(
4127 IN HANDLE SecureHandle
);
4132 MmRemovePhysicalMemory(
4133 IN PPHYSICAL_ADDRESS StartAddress
,
4134 IN OUT PLARGE_INTEGER NumberOfBytes
);
4139 MmSecureVirtualMemory(
4142 IN ULONG ProbeMode
);
4147 MmUnmapVideoDisplay(
4148 IN PVOID BaseAddress
,
4149 IN SIZE_T NumberOfBytes
);
4151 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4153 /** Process manager types **/
4156 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
4158 IN HANDLE ProcessId
,
4162 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
4163 IN HANDLE ProcessId
,
4168 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
4169 IN PUNICODE_STRING FullImageName
,
4170 IN HANDLE ProcessId
,
4171 IN PIMAGE_INFO ImageInfo
);
4173 /** Process manager routines **/
4175 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4180 PsSetLoadImageNotifyRoutine(
4181 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4186 PsSetCreateThreadNotifyRoutine(
4187 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4192 PsSetCreateProcessNotifyRoutine(
4193 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
4199 PsGetCurrentProcessId(
4205 PsGetCurrentThreadId(
4212 OUT PULONG MajorVersion OPTIONAL
,
4213 OUT PULONG MinorVersion OPTIONAL
,
4214 OUT PULONG BuildNumber OPTIONAL
,
4215 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
4217 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4219 #if (NTDDI_VERSION >= NTDDI_WINXP)
4225 IN PEPROCESS Process
);
4230 PsRemoveCreateThreadNotifyRoutine(
4231 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4236 PsRemoveLoadImageNotifyRoutine(
4237 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4239 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4241 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
4243 /* Security reference monitor routines */
4245 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4249 SeSinglePrivilegeCheck(
4250 IN LUID PrivilegeValue
,
4251 IN KPROCESSOR_MODE PreviousMode
);
4254 /* ZwXxx Functions */
4256 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4261 IN HANDLE TimerHandle
,
4262 OUT PBOOLEAN CurrentState OPTIONAL
);
4267 OUT PHANDLE TimerHandle
,
4268 IN ACCESS_MASK DesiredAccess
,
4269 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4270 IN TIMER_TYPE TimerType
);
4275 OUT PHANDLE TimerHandle
,
4276 IN ACCESS_MASK DesiredAccess
,
4277 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4282 ZwSetInformationThread(
4283 IN HANDLE ThreadHandle
,
4284 IN THREADINFOCLASS ThreadInformationClass
,
4285 IN PVOID ThreadInformation
,
4286 IN ULONG ThreadInformationLength
);
4291 IN HANDLE TimerHandle
,
4292 IN PLARGE_INTEGER DueTime
,
4293 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
4294 IN PVOID TimerContext OPTIONAL
,
4295 IN BOOLEAN ResumeTimer
,
4296 IN LONG Period OPTIONAL
,
4297 OUT PBOOLEAN PreviousState OPTIONAL
);
4305 IN PUNICODE_STRING String
4308 #if (VER_PRODUCTBUILD >= 2195)
4313 ZwPowerInformation (
4314 IN POWER_INFORMATION_LEVEL PowerInformationLevel
,
4315 IN PVOID InputBuffer OPTIONAL
,
4316 IN ULONG InputBufferLength
,
4317 OUT PVOID OutputBuffer OPTIONAL
,
4318 IN ULONG OutputBufferLength
4321 #endif /* (VER_PRODUCTBUILD >= 2195) */
4326 ZwTerminateProcess (
4327 IN HANDLE ProcessHandle OPTIONAL
,
4328 IN NTSTATUS ExitStatus
4335 OUT PHANDLE ProcessHandle
,
4336 IN ACCESS_MASK DesiredAccess
,
4337 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4338 IN PCLIENT_ID ClientId OPTIONAL
4344 ZwQueryVolumeInformationFile(
4345 IN HANDLE FileHandle
,
4346 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4347 OUT PVOID FsInformation
,
4349 IN FS_INFORMATION_CLASS FsInformationClass
);
4354 ZwDeviceIoControlFile(
4355 IN HANDLE FileHandle
,
4356 IN HANDLE Event OPTIONAL
,
4357 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4358 IN PVOID ApcContext OPTIONAL
,
4359 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4360 IN ULONG IoControlCode
,
4361 IN PVOID InputBuffer OPTIONAL
,
4362 IN ULONG InputBufferLength
,
4363 OUT PVOID OutputBuffer OPTIONAL
,
4364 IN ULONG OutputBufferLength
);