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
68 #endif /* _NTLSA_AUDIT_ */
69 #endif /* _NTLSA_IFS_ */
71 struct _LOADER_PARAMETER_BLOCK
;
73 struct _DRIVE_LAYOUT_INFORMATION_EX
;
74 struct _SET_PARTITION_INFORMATION_EX
;
76 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
77 typedef struct _DEVICE_HANDLER_OBJECT
*PDEVICE_HANDLER_OBJECT
;
78 #if defined(_NTHAL_INCLUDED_)
79 typedef struct _KAFFINITY_EX
*PKAFFINITY_EX
;
81 typedef struct _PEB
*PPEB
;
85 typedef struct _IMAGE_NT_HEADERS
*PIMAGE_NT_HEADERS32
;
86 typedef struct _IMAGE_NT_HEADERS64
*PIMAGE_NT_HEADERS64
;
89 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
91 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
94 #endif /* _NTIMAGE_ */
96 #define PsGetCurrentProcess IoGetCurrentProcess
98 #if (NTDDI_VERSION >= NTDDI_VISTA)
99 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
100 #elif (NTDDI_VERSION >= NTDDI_WINXP)
101 extern NTSYSAPI CCHAR KeNumberProcessors
;
103 extern PCCHAR KeNumberProcessors
;
110 #define KERNEL_STACK_SIZE 12288
111 #define KERNEL_LARGE_STACK_SIZE 61440
112 #define KERNEL_LARGE_STACK_COMMIT 12288
114 #define SIZE_OF_80387_REGISTERS 80
116 #if !defined(RC_INVOKED)
118 #define CONTEXT_i386 0x10000
119 #define CONTEXT_i486 0x10000
120 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
121 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
122 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
123 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
124 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
125 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
127 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
128 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
129 CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \
130 CONTEXT_EXTENDED_REGISTERS)
132 #define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L)
134 #endif /* !defined(RC_INVOKED) */
136 typedef struct _FLOATING_SAVE_AREA
{
144 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
146 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
148 #include "pshpack4.h"
149 typedef struct _CONTEXT
{
157 FLOATING_SAVE_AREA FloatSave
;
174 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
182 #define KERNEL_STACK_SIZE 0x6000
183 #define KERNEL_LARGE_STACK_SIZE 0x12000
184 #define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
186 #define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
188 #define EXCEPTION_READ_FAULT 0
189 #define EXCEPTION_WRITE_FAULT 1
190 #define EXCEPTION_EXECUTE_FAULT 8
192 #if !defined(RC_INVOKED)
194 #define CONTEXT_AMD64 0x100000
196 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
197 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
198 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
199 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
200 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
202 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
203 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
205 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
207 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
208 #define CONTEXT_SERVICE_ACTIVE 0x10000000
209 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
210 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
212 #endif /* !defined(RC_INVOKED) */
214 #define INITIAL_MXCSR 0x1f80
215 #define INITIAL_FPCSR 0x027f
217 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
257 XMM_SAVE_AREA32 FltSave
;
279 M128A VectorRegister
[26];
280 ULONG64 VectorControl
;
281 ULONG64 DebugControl
;
282 ULONG64 LastBranchToRip
;
283 ULONG64 LastBranchFromRip
;
284 ULONG64 LastExceptionToRip
;
285 ULONG64 LastExceptionFromRip
;
290 typedef enum _WELL_KNOWN_SID_TYPE
{
294 WinCreatorOwnerSid
= 3,
295 WinCreatorGroupSid
= 4,
296 WinCreatorOwnerServerSid
= 5,
297 WinCreatorGroupServerSid
= 6,
298 WinNtAuthoritySid
= 7,
302 WinInteractiveSid
= 11,
304 WinAnonymousSid
= 13,
306 WinEnterpriseControllersSid
= 15,
308 WinAuthenticatedUserSid
= 17,
309 WinRestrictedCodeSid
= 18,
310 WinTerminalServerSid
= 19,
311 WinRemoteLogonIdSid
= 20,
313 WinLocalSystemSid
= 22,
314 WinLocalServiceSid
= 23,
315 WinNetworkServiceSid
= 24,
316 WinBuiltinDomainSid
= 25,
317 WinBuiltinAdministratorsSid
= 26,
318 WinBuiltinUsersSid
= 27,
319 WinBuiltinGuestsSid
= 28,
320 WinBuiltinPowerUsersSid
= 29,
321 WinBuiltinAccountOperatorsSid
= 30,
322 WinBuiltinSystemOperatorsSid
= 31,
323 WinBuiltinPrintOperatorsSid
= 32,
324 WinBuiltinBackupOperatorsSid
= 33,
325 WinBuiltinReplicatorSid
= 34,
326 WinBuiltinPreWindows2000CompatibleAccessSid
= 35,
327 WinBuiltinRemoteDesktopUsersSid
= 36,
328 WinBuiltinNetworkConfigurationOperatorsSid
= 37,
329 WinAccountAdministratorSid
= 38,
330 WinAccountGuestSid
= 39,
331 WinAccountKrbtgtSid
= 40,
332 WinAccountDomainAdminsSid
= 41,
333 WinAccountDomainUsersSid
= 42,
334 WinAccountDomainGuestsSid
= 43,
335 WinAccountComputersSid
= 44,
336 WinAccountControllersSid
= 45,
337 WinAccountCertAdminsSid
= 46,
338 WinAccountSchemaAdminsSid
= 47,
339 WinAccountEnterpriseAdminsSid
= 48,
340 WinAccountPolicyAdminsSid
= 49,
341 WinAccountRasAndIasServersSid
= 50,
342 WinNTLMAuthenticationSid
= 51,
343 WinDigestAuthenticationSid
= 52,
344 WinSChannelAuthenticationSid
= 53,
345 WinThisOrganizationSid
= 54,
346 WinOtherOrganizationSid
= 55,
347 WinBuiltinIncomingForestTrustBuildersSid
= 56,
348 WinBuiltinPerfMonitoringUsersSid
= 57,
349 WinBuiltinPerfLoggingUsersSid
= 58,
350 WinBuiltinAuthorizationAccessSid
= 59,
351 WinBuiltinTerminalServerLicenseServersSid
= 60,
352 WinBuiltinDCOMUsersSid
= 61,
353 WinBuiltinIUsersSid
= 62,
355 WinBuiltinCryptoOperatorsSid
= 64,
356 WinUntrustedLabelSid
= 65,
358 WinMediumLabelSid
= 67,
359 WinHighLabelSid
= 68,
360 WinSystemLabelSid
= 69,
361 WinWriteRestrictedCodeSid
= 70,
362 WinCreatorOwnerRightsSid
= 71,
363 WinCacheablePrincipalsGroupSid
= 72,
364 WinNonCacheablePrincipalsGroupSid
= 73,
365 WinEnterpriseReadonlyControllersSid
= 74,
366 WinAccountReadonlyControllersSid
= 75,
367 WinBuiltinEventLogReadersGroup
= 76,
368 WinNewEnterpriseReadonlyControllersSid
= 77,
369 WinBuiltinCertSvcDComAccessGroup
= 78,
370 WinMediumPlusLabelSid
= 79,
371 WinLocalLogonSid
= 80,
372 WinConsoleLogonSid
= 81,
373 WinThisOrganizationCertificateSid
= 82,
374 } WELL_KNOWN_SID_TYPE
;
376 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
378 #ifndef _RTL_RUN_ONCE_DEF
379 #define _RTL_RUN_ONCE_DEF
381 #define RTL_RUN_ONCE_INIT {0}
383 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL
384 #define RTL_RUN_ONCE_ASYNC 0x00000002UL
385 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL
387 #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
389 #define RTL_HASH_ALLOCATED_HEADER 0x00000001
391 #define RTL_HASH_RESERVED_SIGNATURE 0
393 /* RtlVerifyVersionInfo() ComparisonType */
396 #define VER_GREATER 2
397 #define VER_GREATER_EQUAL 3
399 #define VER_LESS_EQUAL 5
403 #define VER_CONDITION_MASK 7
404 #define VER_NUM_BITS_PER_CONDITION_MASK 3
406 /* RtlVerifyVersionInfo() TypeMask */
408 #define VER_MINORVERSION 0x0000001
409 #define VER_MAJORVERSION 0x0000002
410 #define VER_BUILDNUMBER 0x0000004
411 #define VER_PLATFORMID 0x0000008
412 #define VER_SERVICEPACKMINOR 0x0000010
413 #define VER_SERVICEPACKMAJOR 0x0000020
414 #define VER_SUITENAME 0x0000040
415 #define VER_PRODUCT_TYPE 0x0000080
417 #define VER_NT_WORKSTATION 0x0000001
418 #define VER_NT_DOMAIN_CONTROLLER 0x0000002
419 #define VER_NT_SERVER 0x0000003
421 #define VER_PLATFORM_WIN32s 0
422 #define VER_PLATFORM_WIN32_WINDOWS 1
423 #define VER_PLATFORM_WIN32_NT 2
425 typedef union _RTL_RUN_ONCE
{
427 } RTL_RUN_ONCE
, *PRTL_RUN_ONCE
;
429 typedef ULONG
/* LOGICAL */
430 (NTAPI
*PRTL_RUN_ONCE_INIT_FN
) (
431 IN OUT PRTL_RUN_ONCE RunOnce
,
432 IN OUT PVOID Parameter OPTIONAL
,
433 IN OUT PVOID
*Context OPTIONAL
);
435 #endif /* _RTL_RUN_ONCE_DEF */
437 typedef enum _TABLE_SEARCH_RESULT
{
442 } TABLE_SEARCH_RESULT
;
444 typedef enum _RTL_GENERIC_COMPARE_RESULTS
{
448 } RTL_GENERIC_COMPARE_RESULTS
;
451 struct _RTL_AVL_TABLE
;
453 typedef RTL_GENERIC_COMPARE_RESULTS
454 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
455 IN
struct _RTL_AVL_TABLE
*Table
,
456 IN PVOID FirstStruct
,
457 IN PVOID SecondStruct
);
460 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
461 IN
struct _RTL_AVL_TABLE
*Table
,
465 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
466 IN
struct _RTL_AVL_TABLE
*Table
,
470 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
) (
471 IN
struct _RTL_AVL_TABLE
*Table
,
475 typedef struct _RTL_BALANCED_LINKS
{
476 struct _RTL_BALANCED_LINKS
*Parent
;
477 struct _RTL_BALANCED_LINKS
*LeftChild
;
478 struct _RTL_BALANCED_LINKS
*RightChild
;
481 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
483 typedef struct _RTL_AVL_TABLE
{
484 RTL_BALANCED_LINKS BalancedRoot
;
485 PVOID OrderedPointer
;
486 ULONG WhichOrderedElement
;
487 ULONG NumberGenericTableElements
;
489 PRTL_BALANCED_LINKS RestartKey
;
491 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
492 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
493 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
495 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
497 #ifndef RTL_USE_AVL_TABLES
499 struct _RTL_GENERIC_TABLE
;
501 typedef RTL_GENERIC_COMPARE_RESULTS
502 (NTAPI
*PRTL_GENERIC_COMPARE_ROUTINE
) (
503 IN
struct _RTL_GENERIC_TABLE
*Table
,
504 IN PVOID FirstStruct
,
505 IN PVOID SecondStruct
);
508 (NTAPI
*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
509 IN
struct _RTL_GENERIC_TABLE
*Table
,
513 (NTAPI
*PRTL_GENERIC_FREE_ROUTINE
) (
514 IN
struct _RTL_GENERIC_TABLE
*Table
,
517 typedef struct _RTL_SPLAY_LINKS
{
518 struct _RTL_SPLAY_LINKS
*Parent
;
519 struct _RTL_SPLAY_LINKS
*LeftChild
;
520 struct _RTL_SPLAY_LINKS
*RightChild
;
521 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
523 typedef struct _RTL_GENERIC_TABLE
{
524 PRTL_SPLAY_LINKS TableRoot
;
525 LIST_ENTRY InsertOrderList
;
526 PLIST_ENTRY OrderedPointer
;
527 ULONG WhichOrderedElement
;
528 ULONG NumberGenericTableElements
;
529 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
530 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
531 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
533 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
535 #if (NTDDI_VERSION >= NTDDI_WIN2K)
540 RtlInitializeGenericTable(
541 OUT PRTL_GENERIC_TABLE Table
,
542 IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
,
543 IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
,
544 IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine
,
545 IN PVOID TableContext OPTIONAL
);
550 RtlInsertElementGenericTable(
551 IN PRTL_GENERIC_TABLE Table
,
554 OUT PBOOLEAN NewElement OPTIONAL
);
559 RtlInsertElementGenericTableFull(
560 IN PRTL_GENERIC_TABLE Table
,
563 OUT PBOOLEAN NewElement OPTIONAL
,
564 IN PVOID NodeOrParent
,
565 IN TABLE_SEARCH_RESULT SearchResult
);
570 RtlDeleteElementGenericTable(
571 IN PRTL_GENERIC_TABLE Table
,
577 RtlLookupElementGenericTable(
578 IN PRTL_GENERIC_TABLE Table
,
584 RtlLookupElementGenericTableFull(
585 IN PRTL_GENERIC_TABLE Table
,
587 OUT PVOID
*NodeOrParent
,
588 OUT TABLE_SEARCH_RESULT
*SearchResult
);
593 RtlEnumerateGenericTable(
594 IN PRTL_GENERIC_TABLE Table
,
600 RtlEnumerateGenericTableWithoutSplaying(
601 IN PRTL_GENERIC_TABLE Table
,
602 IN OUT PVOID
*RestartKey
);
607 RtlGetElementGenericTable(
608 IN PRTL_GENERIC_TABLE Table
,
614 RtlNumberGenericTableElements(
615 IN PRTL_GENERIC_TABLE Table
);
620 RtlIsGenericTableEmpty(
621 IN PRTL_GENERIC_TABLE Table
);
623 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
625 #endif /* RTL_USE_AVL_TABLES */
627 #ifdef RTL_USE_AVL_TABLES
629 #undef PRTL_GENERIC_COMPARE_ROUTINE
630 #undef RTL_GENERIC_COMPARE_ROUTINE
631 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
632 #undef RTL_GENERIC_ALLOCATE_ROUTINE
633 #undef PRTL_GENERIC_FREE_ROUTINE
634 #undef RTL_GENERIC_FREE_ROUTINE
635 #undef RTL_GENERIC_TABLE
636 #undef PRTL_GENERIC_TABLE
638 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
639 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
640 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
641 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
642 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
643 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
644 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
645 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
647 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
648 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
649 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
650 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
651 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
652 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
653 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
654 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
655 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
656 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
657 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
659 #endif /* RTL_USE_AVL_TABLES */
661 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY
{
664 } RTL_DYNAMIC_HASH_TABLE_ENTRY
, *PRTL_DYNAMIC_HASH_TABLE_ENTRY
;
666 typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT
{
667 PLIST_ENTRY ChainHead
;
668 PLIST_ENTRY PrevLinkage
;
670 } RTL_DYNAMIC_HASH_TABLE_CONTEXT
, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT
;
672 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
{
673 RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry
;
674 PLIST_ENTRY ChainHead
;
676 } RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR
;
678 typedef struct _RTL_DYNAMIC_HASH_TABLE
{
685 ULONG NonEmptyBuckets
;
686 ULONG NumEnumerators
;
688 } RTL_DYNAMIC_HASH_TABLE
, *PRTL_DYNAMIC_HASH_TABLE
;
690 typedef struct _OSVERSIONINFOA
{
691 ULONG dwOSVersionInfoSize
;
692 ULONG dwMajorVersion
;
693 ULONG dwMinorVersion
;
696 CHAR szCSDVersion
[128];
697 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
699 typedef struct _OSVERSIONINFOW
{
700 ULONG dwOSVersionInfoSize
;
701 ULONG dwMajorVersion
;
702 ULONG dwMinorVersion
;
705 WCHAR szCSDVersion
[128];
706 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
708 typedef struct _OSVERSIONINFOEXA
{
709 ULONG dwOSVersionInfoSize
;
710 ULONG dwMajorVersion
;
711 ULONG dwMinorVersion
;
714 CHAR szCSDVersion
[128];
715 USHORT wServicePackMajor
;
716 USHORT wServicePackMinor
;
720 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
722 typedef struct _OSVERSIONINFOEXW
{
723 ULONG dwOSVersionInfoSize
;
724 ULONG dwMajorVersion
;
725 ULONG dwMinorVersion
;
728 WCHAR szCSDVersion
[128];
729 USHORT wServicePackMajor
;
730 USHORT wServicePackMinor
;
734 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
737 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
738 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
739 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
740 typedef OSVERSIONINFOW OSVERSIONINFO
;
741 typedef POSVERSIONINFOW POSVERSIONINFO
;
742 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
744 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
745 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
746 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
747 typedef OSVERSIONINFOA OSVERSIONINFO
;
748 typedef POSVERSIONINFOA POSVERSIONINFO
;
749 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
752 #define HASH_ENTRY_KEY(x) ((x)->Signature)
754 #define RtlInitializeSplayLinks(Links) { \
755 PRTL_SPLAY_LINKS _SplayLinks; \
756 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
757 _SplayLinks->Parent = _SplayLinks; \
758 _SplayLinks->LeftChild = NULL; \
759 _SplayLinks->RightChild = NULL; \
762 #define RtlIsLeftChild(Links) \
763 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
765 #define RtlIsRightChild(Links) \
766 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
768 #define RtlRightChild(Links) \
769 ((PRTL_SPLAY_LINKS)(Links))->RightChild
771 #define RtlIsRoot(Links) \
772 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
774 #define RtlLeftChild(Links) \
775 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
777 #define RtlParent(Links) \
778 ((PRTL_SPLAY_LINKS)(Links))->Parent
780 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
782 PRTL_SPLAY_LINKS _SplayParent; \
783 PRTL_SPLAY_LINKS _SplayChild; \
784 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
785 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
786 _SplayParent->LeftChild = _SplayChild; \
787 _SplayChild->Parent = _SplayParent; \
790 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
792 PRTL_SPLAY_LINKS _SplayParent; \
793 PRTL_SPLAY_LINKS _SplayChild; \
794 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
795 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
796 _SplayParent->RightChild = _SplayChild; \
797 _SplayChild->Parent = _SplayParent; \
800 #if !defined(MIDL_PASS)
805 RtlConvertLongToLuid(
812 Luid
.LowPart
= Temp
.u
.LowPart
;
813 Luid
.HighPart
= Temp
.u
.HighPart
;
820 RtlConvertUlongToLuid(
830 #endif /* !defined(MIDL_PASS) */
832 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
833 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
834 *CallersAddress = (PVOID)_ReturnAddress(); \
835 *CallersCaller = NULL;
837 #if (NTDDI_VERSION >= NTDDI_WIN2K)
841 RtlGetCallersAddress(
842 OUT PVOID
*CallersAddress
,
843 OUT PVOID
*CallersCaller
);
847 #if (NTDDI_VERSION >= NTDDI_WIN2K)
849 #define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8
855 IN OUT PRTL_SPLAY_LINKS Links
);
861 IN PRTL_SPLAY_LINKS Links
);
867 IN PRTL_SPLAY_LINKS Links
,
868 IN OUT PRTL_SPLAY_LINKS
*Root
);
874 IN PRTL_SPLAY_LINKS Links
);
879 RtlSubtreePredecessor(
880 IN PRTL_SPLAY_LINKS Links
);
886 IN PRTL_SPLAY_LINKS Links
);
892 IN PRTL_SPLAY_LINKS Links
);
897 RtlPrefixUnicodeString(
898 IN PCUNICODE_STRING String1
,
899 IN PCUNICODE_STRING String2
,
900 IN BOOLEAN CaseInSensitive
);
906 IN OUT PSTRING DestinationString
,
907 IN
const PSTRING SourceString
);
912 RtlUpcaseUnicodeString(
913 IN OUT PUNICODE_STRING DestinationString
,
914 IN PCUNICODE_STRING SourceString
,
915 IN BOOLEAN AllocateDestinationString
);
921 IN OUT PACCESS_MASK AccessMask
,
922 IN PGENERIC_MAPPING GenericMapping
);
927 RtlVolumeDeviceToDosName(
928 IN PVOID VolumeDeviceObject
,
929 OUT PUNICODE_STRING DosName
);
935 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
940 RtlVerifyVersionInfo(
941 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
943 IN ULONGLONG ConditionMask
);
949 IN
const PSTRING String1
,
950 IN
const PSTRING String2
,
951 IN BOOLEAN CaseInSensitive
);
957 OUT PSTRING DestinationString
,
958 IN
const PSTRING SourceString OPTIONAL
);
964 IN
const PSTRING String1
,
965 IN
const PSTRING String2
,
966 IN BOOLEAN CaseInSensitive
);
973 IN ULONG Base OPTIONAL
,
990 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
992 #if (NTDDI_VERSION >= NTDDI_WINXP)
997 RtlInitializeGenericTableAvl(
998 OUT PRTL_AVL_TABLE Table
,
999 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
1000 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
1001 IN PRTL_AVL_FREE_ROUTINE FreeRoutine
,
1002 IN PVOID TableContext OPTIONAL
);
1007 RtlInsertElementGenericTableAvl(
1008 IN PRTL_AVL_TABLE Table
,
1010 IN CLONG BufferSize
,
1011 OUT PBOOLEAN NewElement OPTIONAL
);
1016 RtlInsertElementGenericTableFullAvl(
1017 IN PRTL_AVL_TABLE Table
,
1019 IN CLONG BufferSize
,
1020 OUT PBOOLEAN NewElement OPTIONAL
,
1021 IN PVOID NodeOrParent
,
1022 IN TABLE_SEARCH_RESULT SearchResult
);
1027 RtlDeleteElementGenericTableAvl(
1028 IN PRTL_AVL_TABLE Table
,
1034 RtlLookupElementGenericTableAvl(
1035 IN PRTL_AVL_TABLE Table
,
1041 RtlLookupElementGenericTableFullAvl(
1042 IN PRTL_AVL_TABLE Table
,
1044 OUT PVOID
*NodeOrParent
,
1045 OUT TABLE_SEARCH_RESULT
*SearchResult
);
1050 RtlEnumerateGenericTableAvl(
1051 IN PRTL_AVL_TABLE Table
,
1052 IN BOOLEAN Restart
);
1057 RtlEnumerateGenericTableWithoutSplayingAvl(
1058 IN PRTL_AVL_TABLE Table
,
1059 IN OUT PVOID
*RestartKey
);
1064 RtlLookupFirstMatchingElementGenericTableAvl(
1065 IN PRTL_AVL_TABLE Table
,
1067 OUT PVOID
*RestartKey
);
1072 RtlEnumerateGenericTableLikeADirectory(
1073 IN PRTL_AVL_TABLE Table
,
1074 IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL
,
1075 IN PVOID MatchData OPTIONAL
,
1077 IN OUT PVOID
*RestartKey
,
1078 IN OUT PULONG DeleteCount
,
1084 RtlGetElementGenericTableAvl(
1085 IN PRTL_AVL_TABLE Table
,
1091 RtlNumberGenericTableElementsAvl(
1092 IN PRTL_AVL_TABLE Table
);
1097 RtlIsGenericTableEmptyAvl(
1098 IN PRTL_AVL_TABLE Table
);
1101 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
1103 #if (NTDDI_VERSION >= NTDDI_VISTA)
1108 RtlRunOnceInitialize(
1109 OUT PRTL_RUN_ONCE RunOnce
);
1114 RtlRunOnceExecuteOnce(
1115 IN OUT PRTL_RUN_ONCE RunOnce
,
1116 IN PRTL_RUN_ONCE_INIT_FN InitFn
,
1117 IN OUT PVOID Parameter OPTIONAL
,
1118 OUT PVOID
*Context OPTIONAL
);
1123 RtlRunOnceBeginInitialize(
1124 IN OUT PRTL_RUN_ONCE RunOnce
,
1126 OUT PVOID
*Context OPTIONAL
);
1132 IN OUT PRTL_RUN_ONCE RunOnce
,
1134 IN PVOID Context OPTIONAL
);
1140 IN ULONG OSMajorVersion
,
1141 IN ULONG OSMinorVersion
,
1142 IN ULONG SpMajorVersion
,
1143 IN ULONG SpMinorVersion
,
1144 OUT PULONG ReturnedProductType
);
1146 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1148 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
1150 #if (NTDDI_VERSION >= NTDDI_WIN7)
1155 RtlInitHashTableContext(
1156 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
1158 Context
->ChainHead
= NULL
;
1159 Context
->PrevLinkage
= NULL
;
1165 RtlInitHashTableContextFromEnumerator(
1166 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
,
1167 IN PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
)
1169 Context
->ChainHead
= Enumerator
->ChainHead
;
1170 Context
->PrevLinkage
= Enumerator
->HashEntry
.Linkage
.Blink
;
1176 RtlReleaseHashTableContext(
1177 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
1179 UNREFERENCED_PARAMETER(Context
);
1186 RtlTotalBucketsHashTable(
1187 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1189 return HashTable
->TableSize
;
1195 RtlNonEmptyBucketsHashTable(
1196 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1198 return HashTable
->NonEmptyBuckets
;
1204 RtlEmptyBucketsHashTable(
1205 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1207 return HashTable
->TableSize
- HashTable
->NonEmptyBuckets
;
1213 RtlTotalEntriesHashTable(
1214 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1216 return HashTable
->NumEntries
;
1222 RtlActiveEnumeratorsHashTable(
1223 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1225 return HashTable
->NumEnumerators
;
1228 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1230 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
1232 #if (NTDDI_VERSION >= NTDDI_WIN7)
1238 IN OUT PRTL_DYNAMIC_HASH_TABLE
*HashTable OPTIONAL
,
1246 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
1251 RtlInsertEntryHashTable(
1252 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1253 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
1254 IN ULONG_PTR Signature
,
1255 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
1260 RtlRemoveEntryHashTable(
1261 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1262 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
1263 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
1266 PRTL_DYNAMIC_HASH_TABLE_ENTRY
1268 RtlLookupEntryHashTable(
1269 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1270 IN ULONG_PTR Signature
,
1271 OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
1274 PRTL_DYNAMIC_HASH_TABLE_ENTRY
1276 RtlGetNextEntryHashTable(
1277 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1278 IN PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
);
1283 RtlInitEnumerationHashTable(
1284 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1285 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1288 PRTL_DYNAMIC_HASH_TABLE_ENTRY
1290 RtlEnumerateEntryHashTable(
1291 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1292 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1297 RtlEndEnumerationHashTable(
1298 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1299 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1304 RtlInitWeakEnumerationHashTable(
1305 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1306 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1309 PRTL_DYNAMIC_HASH_TABLE_ENTRY
1311 RtlWeaklyEnumerateEntryHashTable(
1312 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1313 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1318 RtlEndWeakEnumerationHashTable(
1319 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1320 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1326 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
1331 RtlContractHashTable(
1332 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
1334 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1336 #if defined(_AMD64_) || defined(_IA64_)
1337 //DECLSPEC_DEPRECATED_DDK_WINXP
1341 RtlLargeIntegerDivide(
1342 IN LARGE_INTEGER Dividend
,
1343 IN LARGE_INTEGER Divisor
,
1344 OUT PLARGE_INTEGER Remainder OPTIONAL
)
1347 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
1349 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
1355 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1359 RtlLargeIntegerDivide(
1360 IN LARGE_INTEGER Dividend
,
1361 IN LARGE_INTEGER Divisor
,
1362 OUT PLARGE_INTEGER Remainder OPTIONAL
);
1365 #endif /* defined(_AMD64_) || defined(_IA64_) */
1367 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
1368 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
1369 (TypeBitMask), (ComparisonType)))
1371 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1375 VerSetConditionMask(
1376 IN ULONGLONG ConditionMask
,
1378 IN UCHAR Condition
);
1381 /** Kernel debugger routines **/
1389 IN ULONG MaximumResponseLength
);
1391 #if (NTDDI_VERSION >= NTDDI_WIN7)
1393 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000
1394 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000
1395 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
1396 (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
1397 FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
1399 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
1400 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
1401 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
1405 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200
1406 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300
1407 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300
1409 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
1410 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
1411 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
1413 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1415 #define FILE_CHARACTERISTICS_PROPAGATED ( FILE_REMOVABLE_MEDIA | \
1416 FILE_READ_ONLY_DEVICE | \
1417 FILE_FLOPPY_DISKETTE | \
1418 FILE_WRITE_ONCE_MEDIA | \
1419 FILE_DEVICE_SECURE_OPEN )
1421 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1422 ULONG AlignmentRequirement
;
1423 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1425 typedef struct _FILE_NAME_INFORMATION
{
1426 ULONG FileNameLength
;
1428 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1431 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1432 ULONG FileAttributes
;
1434 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1436 typedef struct _FILE_DISPOSITION_INFORMATION
{
1438 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1440 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1441 LARGE_INTEGER EndOfFile
;
1442 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1444 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1445 LARGE_INTEGER ValidDataLength
;
1446 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1448 typedef struct _FILE_FS_LABEL_INFORMATION
{
1449 ULONG VolumeLabelLength
;
1450 WCHAR VolumeLabel
[1];
1451 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1453 typedef struct _FILE_FS_VOLUME_INFORMATION
{
1454 LARGE_INTEGER VolumeCreationTime
;
1455 ULONG VolumeSerialNumber
;
1456 ULONG VolumeLabelLength
;
1457 BOOLEAN SupportsObjects
;
1458 WCHAR VolumeLabel
[1];
1459 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1461 typedef struct _FILE_FS_SIZE_INFORMATION
{
1462 LARGE_INTEGER TotalAllocationUnits
;
1463 LARGE_INTEGER AvailableAllocationUnits
;
1464 ULONG SectorsPerAllocationUnit
;
1465 ULONG BytesPerSector
;
1466 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1468 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
1469 LARGE_INTEGER TotalAllocationUnits
;
1470 LARGE_INTEGER CallerAvailableAllocationUnits
;
1471 LARGE_INTEGER ActualAvailableAllocationUnits
;
1472 ULONG SectorsPerAllocationUnit
;
1473 ULONG BytesPerSector
;
1474 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
1476 typedef struct _FILE_FS_OBJECTID_INFORMATION
{
1478 UCHAR ExtendedInfo
[48];
1479 } FILE_FS_OBJECTID_INFORMATION
, *PFILE_FS_OBJECTID_INFORMATION
;
1481 typedef union _FILE_SEGMENT_ELEMENT
{
1483 ULONGLONG Alignment
;
1484 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1486 #define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1487 #define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1488 #define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1490 typedef enum _BUS_DATA_TYPE
{
1491 ConfigurationSpaceUndefined
= -1,
1499 PCMCIAConfiguration
,
1502 PNPISAConfiguration
,
1503 SgiInternalConfiguration
,
1505 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1507 typedef struct _KEY_NAME_INFORMATION
{
1510 } KEY_NAME_INFORMATION
, *PKEY_NAME_INFORMATION
;
1512 typedef struct _KEY_CACHED_INFORMATION
{
1513 LARGE_INTEGER LastWriteTime
;
1518 ULONG MaxValueNameLen
;
1519 ULONG MaxValueDataLen
;
1521 } KEY_CACHED_INFORMATION
, *PKEY_CACHED_INFORMATION
;
1523 typedef struct _KEY_VIRTUALIZATION_INFORMATION
{
1524 ULONG VirtualizationCandidate
:1;
1525 ULONG VirtualizationEnabled
:1;
1526 ULONG VirtualTarget
:1;
1527 ULONG VirtualStore
:1;
1528 ULONG VirtualSource
:1;
1530 } KEY_VIRTUALIZATION_INFORMATION
, *PKEY_VIRTUALIZATION_INFORMATION
;
1532 #define THREAD_CSWITCH_PMU_DISABLE FALSE
1533 #define THREAD_CSWITCH_PMU_ENABLE TRUE
1535 #define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001
1537 #define PROCESS_HANDLE_TRACING_MAX_STACKS 16
1539 typedef struct _NT_TIB
{
1540 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1544 _ANONYMOUS_UNION
union {
1548 PVOID ArbitraryUserPointer
;
1549 struct _NT_TIB
*Self
;
1552 typedef struct _NT_TIB32
{
1553 ULONG ExceptionList
;
1557 __GNU_EXTENSION
union {
1561 ULONG ArbitraryUserPointer
;
1563 } NT_TIB32
,*PNT_TIB32
;
1565 typedef struct _NT_TIB64
{
1566 ULONG64 ExceptionList
;
1569 ULONG64 SubSystemTib
;
1570 __GNU_EXTENSION
union {
1574 ULONG64 ArbitraryUserPointer
;
1576 } NT_TIB64
,*PNT_TIB64
;
1578 typedef enum _PROCESSINFOCLASS
{
1579 ProcessBasicInformation
,
1584 ProcessBasePriority
,
1585 ProcessRaisePriority
,
1587 ProcessExceptionPort
,
1589 ProcessLdtInformation
,
1591 ProcessDefaultHardErrorMode
,
1592 ProcessIoPortHandlers
,
1593 ProcessPooledUsageAndLimits
,
1594 ProcessWorkingSetWatch
,
1595 ProcessUserModeIOPL
,
1596 ProcessEnableAlignmentFaultFixup
,
1597 ProcessPriorityClass
,
1598 ProcessWx86Information
,
1600 ProcessAffinityMask
,
1601 ProcessPriorityBoost
,
1603 ProcessSessionInformation
,
1604 ProcessForegroundInformation
,
1605 ProcessWow64Information
,
1606 ProcessImageFileName
,
1607 ProcessLUIDDeviceMapsEnabled
,
1608 ProcessBreakOnTermination
,
1609 ProcessDebugObjectHandle
,
1611 ProcessHandleTracing
,
1613 ProcessExecuteFlags
,
1614 ProcessTlsInformation
,
1616 ProcessImageInformation
,
1618 ProcessPagePriority
,
1619 ProcessInstrumentationCallback
,
1620 ProcessThreadStackAllocation
,
1621 ProcessWorkingSetWatchEx
,
1622 ProcessImageFileNameWin32
,
1623 ProcessImageFileMapping
,
1624 ProcessAffinityUpdateMode
,
1625 ProcessMemoryAllocationMode
,
1626 ProcessGroupInformation
,
1627 ProcessTokenVirtualizationEnabled
,
1628 ProcessConsoleHostProcess
,
1629 ProcessWindowInformation
,
1633 typedef enum _THREADINFOCLASS
{
1634 ThreadBasicInformation
,
1639 ThreadImpersonationToken
,
1640 ThreadDescriptorTableEntry
,
1641 ThreadEnableAlignmentFaultFixup
,
1642 ThreadEventPair_Reusable
,
1643 ThreadQuerySetWin32StartAddress
,
1645 ThreadPerformanceCount
,
1646 ThreadAmILastThread
,
1647 ThreadIdealProcessor
,
1648 ThreadPriorityBoost
,
1649 ThreadSetTlsArrayAddress
,
1651 ThreadHideFromDebugger
,
1652 ThreadBreakOnTermination
,
1653 ThreadSwitchLegacyState
,
1655 ThreadLastSystemCall
,
1659 ThreadActualBasePriority
,
1660 ThreadTebInformation
,
1664 ThreadGroupInformation
,
1665 ThreadUmsInformation
,
1666 ThreadCounterProfiling
,
1667 ThreadIdealProcessorEx
,
1671 typedef struct _PAGE_PRIORITY_INFORMATION
{
1673 } PAGE_PRIORITY_INFORMATION
, *PPAGE_PRIORITY_INFORMATION
;
1675 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
1678 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1680 typedef struct _PROCESS_BASIC_INFORMATION
{
1681 NTSTATUS ExitStatus
;
1682 struct _PEB
*PebBaseAddress
;
1683 ULONG_PTR AffinityMask
;
1684 KPRIORITY BasePriority
;
1685 ULONG_PTR UniqueProcessId
;
1686 ULONG_PTR InheritedFromUniqueProcessId
;
1687 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1689 typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION
{
1691 PROCESS_BASIC_INFORMATION BasicInfo
;
1695 ULONG IsProtectedProcess
:1;
1696 ULONG IsWow64Process
:1;
1697 ULONG IsProcessDeleting
:1;
1698 ULONG IsCrossSessionCreate
:1;
1702 } PROCESS_EXTENDED_BASIC_INFORMATION
, *PPROCESS_EXTENDED_BASIC_INFORMATION
;
1704 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
1705 __GNU_EXTENSION
union {
1707 HANDLE DirectoryHandle
;
1711 UCHAR DriveType
[32];
1714 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1716 typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX
{
1719 HANDLE DirectoryHandle
;
1723 UCHAR DriveType
[32];
1727 } PROCESS_DEVICEMAP_INFORMATION_EX
, *PPROCESS_DEVICEMAP_INFORMATION_EX
;
1729 typedef struct _PROCESS_SESSION_INFORMATION
{
1731 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1733 typedef struct _PROCESS_HANDLE_TRACING_ENABLE
{
1735 } PROCESS_HANDLE_TRACING_ENABLE
, *PPROCESS_HANDLE_TRACING_ENABLE
;
1737 typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX
{
1740 } PROCESS_HANDLE_TRACING_ENABLE_EX
, *PPROCESS_HANDLE_TRACING_ENABLE_EX
;
1742 typedef struct _PROCESS_HANDLE_TRACING_ENTRY
{
1746 PVOID Stacks
[PROCESS_HANDLE_TRACING_MAX_STACKS
];
1747 } PROCESS_HANDLE_TRACING_ENTRY
, *PPROCESS_HANDLE_TRACING_ENTRY
;
1749 typedef struct _PROCESS_HANDLE_TRACING_QUERY
{
1752 PROCESS_HANDLE_TRACING_ENTRY HandleTrace
[1];
1753 } PROCESS_HANDLE_TRACING_QUERY
, *PPROCESS_HANDLE_TRACING_QUERY
;
1755 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
1756 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
1757 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
1758 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
1759 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
1761 typedef struct _QUOTA_LIMITS
{
1762 SIZE_T PagedPoolLimit
;
1763 SIZE_T NonPagedPoolLimit
;
1764 SIZE_T MinimumWorkingSetSize
;
1765 SIZE_T MaximumWorkingSetSize
;
1766 SIZE_T PagefileLimit
;
1767 LARGE_INTEGER TimeLimit
;
1768 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
1770 typedef union _RATE_QUOTA_LIMIT
{
1773 ULONG RatePercent
:7;
1776 } RATE_QUOTA_LIMIT
, *PRATE_QUOTA_LIMIT
;
1778 typedef struct _QUOTA_LIMITS_EX
{
1779 SIZE_T PagedPoolLimit
;
1780 SIZE_T NonPagedPoolLimit
;
1781 SIZE_T MinimumWorkingSetSize
;
1782 SIZE_T MaximumWorkingSetSize
;
1783 SIZE_T PagefileLimit
;
1784 LARGE_INTEGER TimeLimit
;
1785 SIZE_T WorkingSetLimit
;
1790 RATE_QUOTA_LIMIT CpuRateLimit
;
1791 } QUOTA_LIMITS_EX
, *PQUOTA_LIMITS_EX
;
1793 typedef struct _IO_COUNTERS
{
1794 ULONGLONG ReadOperationCount
;
1795 ULONGLONG WriteOperationCount
;
1796 ULONGLONG OtherOperationCount
;
1797 ULONGLONG ReadTransferCount
;
1798 ULONGLONG WriteTransferCount
;
1799 ULONGLONG OtherTransferCount
;
1800 } IO_COUNTERS
, *PIO_COUNTERS
;
1802 typedef struct _VM_COUNTERS
{
1803 SIZE_T PeakVirtualSize
;
1805 ULONG PageFaultCount
;
1806 SIZE_T PeakWorkingSetSize
;
1807 SIZE_T WorkingSetSize
;
1808 SIZE_T QuotaPeakPagedPoolUsage
;
1809 SIZE_T QuotaPagedPoolUsage
;
1810 SIZE_T QuotaPeakNonPagedPoolUsage
;
1811 SIZE_T QuotaNonPagedPoolUsage
;
1812 SIZE_T PagefileUsage
;
1813 SIZE_T PeakPagefileUsage
;
1814 } VM_COUNTERS
, *PVM_COUNTERS
;
1816 typedef struct _VM_COUNTERS_EX
{
1817 SIZE_T PeakVirtualSize
;
1819 ULONG PageFaultCount
;
1820 SIZE_T PeakWorkingSetSize
;
1821 SIZE_T WorkingSetSize
;
1822 SIZE_T QuotaPeakPagedPoolUsage
;
1823 SIZE_T QuotaPagedPoolUsage
;
1824 SIZE_T QuotaPeakNonPagedPoolUsage
;
1825 SIZE_T QuotaNonPagedPoolUsage
;
1826 SIZE_T PagefileUsage
;
1827 SIZE_T PeakPagefileUsage
;
1828 SIZE_T PrivateUsage
;
1829 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
1831 #define MAX_HW_COUNTERS 16
1832 #define THREAD_PROFILING_FLAG_DISPATCH 0x00000001
1834 typedef enum _HARDWARE_COUNTER_TYPE
{
1836 MaxHardwareCounterType
1837 } HARDWARE_COUNTER_TYPE
, *PHARDWARE_COUNTER_TYPE
;
1839 typedef struct _HARDWARE_COUNTER
{
1840 HARDWARE_COUNTER_TYPE Type
;
1843 } HARDWARE_COUNTER
, *PHARDWARE_COUNTER
;
1845 typedef struct _POOLED_USAGE_AND_LIMITS
{
1846 SIZE_T PeakPagedPoolUsage
;
1847 SIZE_T PagedPoolUsage
;
1848 SIZE_T PagedPoolLimit
;
1849 SIZE_T PeakNonPagedPoolUsage
;
1850 SIZE_T NonPagedPoolUsage
;
1851 SIZE_T NonPagedPoolLimit
;
1852 SIZE_T PeakPagefileUsage
;
1853 SIZE_T PagefileUsage
;
1854 SIZE_T PagefileLimit
;
1855 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
1857 typedef struct _PROCESS_ACCESS_TOKEN
{
1860 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1862 #define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL
1863 #define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
1865 typedef struct _PROCESS_EXCEPTION_PORT
{
1866 IN HANDLE ExceptionPortHandle
;
1867 IN OUT ULONG StateFlags
;
1868 } PROCESS_EXCEPTION_PORT
, *PPROCESS_EXCEPTION_PORT
;
1870 typedef struct _KERNEL_USER_TIMES
{
1871 LARGE_INTEGER CreateTime
;
1872 LARGE_INTEGER ExitTime
;
1873 LARGE_INTEGER KernelTime
;
1874 LARGE_INTEGER UserTime
;
1875 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1877 /* NtXxx Functions */
1883 OUT PHANDLE ProcessHandle
,
1884 IN ACCESS_MASK DesiredAccess
,
1885 IN POBJECT_ATTRIBUTES ObjectAttributes
,
1886 IN PCLIENT_ID ClientId OPTIONAL
);
1891 NtQueryInformationProcess(
1892 IN HANDLE ProcessHandle
,
1893 IN PROCESSINFOCLASS ProcessInformationClass
,
1894 OUT PVOID ProcessInformation OPTIONAL
,
1895 IN ULONG ProcessInformationLength
,
1896 OUT PULONG ReturnLength OPTIONAL
);
1898 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION
{
1899 SystemFirmwareTable_Enumerate
,
1900 SystemFirmwareTable_Get
1901 } SYSTEM_FIRMWARE_TABLE_ACTION
;
1903 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION
{
1904 ULONG ProviderSignature
;
1905 SYSTEM_FIRMWARE_TABLE_ACTION Action
;
1907 ULONG TableBufferLength
;
1908 UCHAR TableBuffer
[ANYSIZE_ARRAY
];
1909 } SYSTEM_FIRMWARE_TABLE_INFORMATION
, *PSYSTEM_FIRMWARE_TABLE_INFORMATION
;
1913 IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo
);
1915 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER
{
1916 ULONG ProviderSignature
;
1918 PFNFTH FirmwareTableHandler
;
1920 } SYSTEM_FIRMWARE_TABLE_HANDLER
, *PSYSTEM_FIRMWARE_TABLE_HANDLER
;
1923 (NTAPI
*PTIMER_APC_ROUTINE
)(
1924 IN PVOID TimerContext
,
1925 IN ULONG TimerLowValue
,
1926 IN LONG TimerHighValue
);
1928 typedef enum _TIMER_SET_INFORMATION_CLASS
{
1929 TimerSetCoalescableTimer
,
1931 } TIMER_SET_INFORMATION_CLASS
;
1933 #if (NTDDI_VERSION >= NTDDI_WIN7)
1934 typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO
{
1935 IN LARGE_INTEGER DueTime
;
1936 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
;
1937 IN PVOID TimerContext OPTIONAL
;
1938 IN
struct _COUNTED_REASON_CONTEXT
*WakeContext OPTIONAL
;
1939 IN ULONG Period OPTIONAL
;
1940 IN ULONG TolerableDelay
;
1941 OUT PBOOLEAN PreviousState OPTIONAL
;
1942 } TIMER_SET_COALESCABLE_TIMER_INFO
, *PTIMER_SET_COALESCABLE_TIMER_INFO
;
1943 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1946 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1949 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1950 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1951 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1952 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1954 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1955 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1956 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1957 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1958 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1960 #define XSTATE_LEGACY_FLOATING_POINT 0
1961 #define XSTATE_LEGACY_SSE 1
1962 #define XSTATE_GSSE 2
1964 #define XSTATE_MASK_LEGACY_FLOATING_POINT (1i64 << (XSTATE_LEGACY_FLOATING_POINT))
1965 #define XSTATE_MASK_LEGACY_SSE (1i64 << (XSTATE_LEGACY_SSE))
1966 #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
1967 #define XSTATE_MASK_GSSE (1i64 << (XSTATE_GSSE))
1969 #define MAXIMUM_XSTATE_FEATURES 64
1971 typedef struct _XSTATE_FEATURE
{
1974 } XSTATE_FEATURE
, *PXSTATE_FEATURE
;
1976 typedef struct _XSTATE_CONFIGURATION
{
1977 ULONG64 EnabledFeatures
;
1979 ULONG OptimizedSave
:1;
1980 XSTATE_FEATURE Features
[MAXIMUM_XSTATE_FEATURES
];
1981 } XSTATE_CONFIGURATION
, *PXSTATE_CONFIGURATION
;
1983 #define MAX_WOW64_SHARED_ENTRIES 16
1985 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
1986 #define NX_SUPPORT_POLICY_ALWAYSON 1
1987 #define NX_SUPPORT_POLICY_OPTIN 2
1988 #define NX_SUPPORT_POLICY_OPTOUT 3
1990 #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0
1991 #define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
1993 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
1994 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
1996 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2
1997 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
1999 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3
2000 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \
2001 (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
2003 #define SHARED_GLOBAL_FLAGS_SPARE_V 0x4
2004 #define SHARED_GLOBAL_FLAGS_SPARE \
2005 (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
2007 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5
2008 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \
2009 (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
2011 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6
2012 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \
2013 (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
2015 #define EX_INIT_BITS(Flags, Bit) \
2016 *((Flags)) |= (Bit) // Safe to use before concurrently accessible
2018 #define EX_TEST_SET_BIT(Flags, Bit) \
2019 InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
2021 #define EX_TEST_CLEAR_BIT(Flags, Bit) \
2022 InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
2024 typedef struct _KUSER_SHARED_DATA
{
2025 ULONG TickCountLowDeprecated
;
2026 ULONG TickCountMultiplier
;
2027 volatile KSYSTEM_TIME InterruptTime
;
2028 volatile KSYSTEM_TIME SystemTime
;
2029 volatile KSYSTEM_TIME TimeZoneBias
;
2030 USHORT ImageNumberLow
;
2031 USHORT ImageNumberHigh
;
2032 WCHAR NtSystemRoot
[260];
2033 ULONG MaxStackTraceDepth
;
2034 ULONG CryptoExponent
;
2036 ULONG LargePageMinimum
;
2038 NT_PRODUCT_TYPE NtProductType
;
2039 BOOLEAN ProductTypeIsValid
;
2040 ULONG NtMajorVersion
;
2041 ULONG NtMinorVersion
;
2042 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
2045 volatile ULONG TimeSlip
;
2046 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
2047 ULONG AltArchitecturePad
[1];
2048 LARGE_INTEGER SystemExpirationDate
;
2050 BOOLEAN KdDebuggerEnabled
;
2051 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2052 UCHAR NXSupportPolicy
;
2054 volatile ULONG ActiveConsoleId
;
2055 volatile ULONG DismountCount
;
2056 ULONG ComPlusPackage
;
2057 ULONG LastSystemRITEventTickCount
;
2058 ULONG NumberOfPhysicalPages
;
2059 BOOLEAN SafeBootMode
;
2060 #if (NTDDI_VERSION >= NTDDI_WIN7)
2064 UCHAR TscQpcEnabled
:1;
2065 UCHAR TscQpcSpareFlag
:1;
2066 UCHAR TscQpcShift
:6;
2071 #if (NTDDI_VERSION >= NTDDI_VISTA)
2073 ULONG SharedDataFlags
;
2075 ULONG DbgErrorPortPresent
:1;
2076 ULONG DbgElevationEnabled
:1;
2077 ULONG DbgVirtEnabled
:1;
2078 ULONG DbgInstallerDetectEnabled
:1;
2079 ULONG DbgSystemDllRelocated
:1;
2080 ULONG DbgDynProcessorEnabled
:1;
2081 ULONG DbgSEHValidationEnabled
:1;
2088 ULONG DataFlagsPad
[1];
2089 ULONGLONG TestRetInstruction
;
2091 ULONG SystemCallReturn
;
2092 ULONGLONG SystemCallPad
[3];
2093 _ANONYMOUS_UNION
union {
2094 volatile KSYSTEM_TIME TickCount
;
2095 volatile ULONG64 TickCountQuad
;
2096 _ANONYMOUS_STRUCT
struct {
2097 ULONG ReservedTickCountOverlay
[3];
2098 ULONG TickCountPad
[1];
2103 #if (NTDDI_VERSION >= NTDDI_WS03)
2104 LONGLONG ConsoleSessionForegroundProcessId
;
2105 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
2107 #if (NTDDI_VERSION >= NTDDI_VISTA)
2108 #if (NTDDI_VERSION >= NTDDI_WIN7)
2109 USHORT UserModeGlobalLogger
[16];
2111 USHORT UserModeGlobalLogger
[8];
2112 ULONG HeapTracingPid
[2];
2113 ULONG CritSecTracingPid
[2];
2115 ULONG ImageFileExecutionOptions
;
2116 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
2117 ULONG LangGenerationCount
;
2119 /* 4 bytes padding */
2121 ULONGLONG Reserved5
;
2122 volatile ULONG64 InterruptTimeBias
;
2124 #if (NTDDI_VERSION >= NTDDI_WIN7)
2125 volatile ULONG64 TscQpcBias
;
2126 volatile ULONG ActiveProcessorCount
;
2127 volatile USHORT ActiveGroupCount
;
2129 volatile ULONG AitSamplingValue
;
2130 volatile ULONG AppCompatFlag
;
2131 ULONGLONG SystemDllNativeRelocation
;
2132 ULONG SystemDllWowRelocation
;
2134 XSTATE_CONFIGURATION XState
;
2136 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
2138 #define CmResourceTypeMaximum 8
2140 typedef struct _CM_PCCARD_DEVICE_DATA
{
2146 ULONG LegacyBaseAddress
;
2148 } CM_PCCARD_DEVICE_DATA
, *PCM_PCCARD_DEVICE_DATA
;
2150 #define PCCARD_MAP_ERROR 0x01
2151 #define PCCARD_DEVICE_PCI 0x10
2153 #define PCCARD_SCAN_DISABLED 0x01
2154 #define PCCARD_MAP_ZERO 0x02
2155 #define PCCARD_NO_TIMER 0x03
2156 #define PCCARD_NO_PIC 0x04
2157 #define PCCARD_NO_LEGACY_BASE 0x05
2158 #define PCCARD_DUP_LEGACY_BASE 0x06
2159 #define PCCARD_NO_CONTROLLERS 0x07
2163 typedef enum _CONFIGURATION_TYPE
{
2166 FloatingPointProcessor
,
2176 MultiFunctionAdapter
,
2190 FloppyDiskPeripheral
,
2203 RealModeIrqRoutingTable
,
2204 RealModePCIEnumeration
,
2206 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
2207 #endif /* !_ARC_DDK_ */
2209 #if defined(_X86_) || defined(_AMD64_)
2210 #define PAUSE_PROCESSOR YieldProcessor();
2211 #elif defined(_IA64_)
2212 #define PAUSE_PROCESSOR __yield();
2215 #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
2218 (NTAPI
*PEXPAND_STACK_CALLOUT
) (
2219 IN PVOID Parameter OPTIONAL
);
2221 /* Kernel Functions */
2223 #if (NTDDI_VERSION >= NTDDI_WIN2K) && defined(SINGLE_GROUP_LEGACY_API)
2228 KeSetTargetProcessorDpc(
2235 KeQueryActiveProcessors(VOID
);
2239 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2246 IN KDPC_IMPORTANCE Importance
);
2252 IN OUT PRKEVENT Event
,
2253 IN KPRIORITY Increment
,
2259 KeSetBasePriorityThread(
2260 IN OUT PRKTHREAD Thread
,
2266 KeEnterCriticalRegion(VOID
);
2271 KeLeaveCriticalRegion(VOID
);
2278 IN ULONG BugCheckCode
);
2280 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2282 #if (NTDDI_VERSION >= NTDDI_WINXP)
2286 KeAreApcsDisabled(VOID
);
2289 #if (NTDDI_VERSION >= NTDDI_WS03)
2293 KeInvalidateAllCaches(VOID
);
2296 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
2301 KeExpandKernelStackAndCallout(
2302 IN PEXPAND_STACK_CALLOUT Callout
,
2303 IN PVOID Parameter OPTIONAL
,
2309 KeEnterGuardedRegion(VOID
);
2314 KeLeaveGuardedRegion(VOID
);
2318 #if (NTDDI_VERSION >= NTDDI_VISTA) && defined(SINGLE_GROUP_LEGACY_API)
2323 KeQueryActiveProcessorCount(
2324 OUT PKAFFINITY ActiveProcessors OPTIONAL
);
2329 KeQueryMaximumProcessorCount(VOID
);
2333 #if (NTDDI_VERSION >= NTDDI_WIN7)
2338 KeQueryActiveProcessorCountEx(
2339 IN USHORT GroupNumber
);
2344 KeQueryMaximumProcessorCountEx(
2345 IN USHORT GroupNumber
);
2350 KeQueryActiveGroupCount(VOID
);
2355 KeQueryMaximumGroupCount(VOID
);
2360 KeQueryGroupAffinity(
2361 IN USHORT GroupNumber
);
2366 KeGetCurrentProcessorNumberEx(
2367 OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL
);
2372 KeQueryNodeActiveAffinity(
2373 IN USHORT NodeNumber
,
2374 OUT PGROUP_AFFINITY Affinity OPTIONAL
,
2375 OUT PUSHORT Count OPTIONAL
);
2380 KeQueryNodeMaximumProcessorCount(
2381 IN USHORT NodeNumber
);
2386 KeQueryHighestNodeNumber(VOID
);
2391 KeGetCurrentNodeNumber(VOID
);
2396 KeQueryLogicalProcessorRelationship(
2397 IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
2398 IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
2399 OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL
,
2400 IN OUT PULONG Length
);
2405 KeSetHardwareCounterConfiguration(
2406 IN PHARDWARE_COUNTER CounterArray
,
2412 KeQueryHardwareCounterConfiguration(
2413 OUT PHARDWARE_COUNTER CounterArray
,
2414 IN ULONG MaximumCount
,
2417 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
2422 KeInvalidateRangeAllCaches(
2423 IN PVOID BaseAddress
,
2428 /* Executive Types */
2430 typedef struct _ZONE_SEGMENT_HEADER
{
2431 SINGLE_LIST_ENTRY SegmentList
;
2433 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
2435 typedef struct _ZONE_HEADER
{
2436 SINGLE_LIST_ENTRY FreeList
;
2437 SINGLE_LIST_ENTRY SegmentList
;
2439 ULONG TotalSegmentSize
;
2440 } ZONE_HEADER
, *PZONE_HEADER
;
2442 #if defined(POOL_TAGGING)
2443 #define ExFreePool(a) ExFreePoolWithTag(a,0)
2446 #define PROTECTED_POOL 0x80000000
2448 /* Executive Functions */
2450 static __inline PVOID
2452 IN PZONE_HEADER Zone
)
2454 if (Zone
->FreeList
.Next
)
2455 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
2456 return (PVOID
) Zone
->FreeList
.Next
;
2459 static __inline PVOID
2461 IN PZONE_HEADER Zone
,
2464 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
2465 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
2466 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
2471 * ExInterlockedAllocateFromZone(
2472 * IN PZONE_HEADER Zone,
2473 * IN PKSPIN_LOCK Lock)
2475 #define ExInterlockedAllocateFromZone(Zone, Lock) \
2476 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
2479 * ExInterlockedFreeToZone(
2480 * IN PZONE_HEADER Zone,
2482 * IN PKSPIN_LOCK Lock);
2484 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
2485 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
2490 * IN PZONE_HEADER Zone)
2492 #define ExIsFullZone(Zone) \
2493 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
2496 * ExIsObjectInFirstZoneSegment(
2497 * IN PZONE_HEADER Zone,
2500 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
2501 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
2502 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
2503 (Zone)->TotalSegmentSize)) )
2505 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
2506 #define ExAcquireResourceShared ExAcquireResourceSharedLite
2507 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
2508 #define ExDeleteResource ExDeleteResourceLite
2509 #define ExInitializeResource ExInitializeResourceLite
2510 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
2511 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
2512 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
2513 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
2515 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2521 IN OUT PZONE_HEADER Zone
,
2522 IN OUT PVOID Segment
,
2523 IN ULONG SegmentSize
);
2529 OUT PZONE_HEADER Zone
,
2531 IN OUT PVOID InitialSegment
,
2532 IN ULONG InitialSegmentSize
);
2537 ExInterlockedExtendZone(
2538 IN OUT PZONE_HEADER Zone
,
2539 IN OUT PVOID Segment
,
2540 IN ULONG SegmentSize
,
2541 IN OUT PKSPIN_LOCK Lock
);
2553 ExRaiseAccessViolation(VOID
);
2559 ExRaiseDatatypeMisalignment(VOID
);
2561 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2563 /* Filesystem runtime library routines */
2565 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2569 FsRtlIsTotalDeviceFailure(
2570 IN NTSTATUS Status
);
2573 /* Memory Manager Types */
2575 typedef struct _PHYSICAL_MEMORY_RANGE
{
2576 PHYSICAL_ADDRESS BaseAddress
;
2577 LARGE_INTEGER NumberOfBytes
;
2578 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2581 (*PMM_ROTATE_COPY_CALLBACK_FUNCTION
) (
2582 IN PMDL DestinationMdl
,
2586 typedef enum _MM_ROTATE_DIRECTION
{
2588 MmToFrameBufferNoCopy
,
2590 MmToRegularMemoryNoCopy
,
2591 MmMaximumRotateDirection
2592 } MM_ROTATE_DIRECTION
, *PMM_ROTATE_DIRECTION
;
2594 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2595 typedef ULONG NODE_REQUIREMENT
;
2596 #define MM_ANY_NODE_OK 0x80000000
2599 /* Memory Manager Functions */
2601 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2604 PPHYSICAL_MEMORY_RANGE
2606 MmGetPhysicalMemoryRanges(VOID
);
2611 MmGetPhysicalAddress(
2612 IN PVOID BaseAddress
);
2617 MmIsNonPagedSystemAddressValid(
2618 IN PVOID VirtualAddress
);
2623 MmAllocateNonCachedMemory(
2624 IN SIZE_T NumberOfBytes
);
2629 MmFreeNonCachedMemory(
2630 IN PVOID BaseAddress
,
2631 IN SIZE_T NumberOfBytes
);
2636 MmGetVirtualForPhysical(
2637 IN PHYSICAL_ADDRESS PhysicalAddress
);
2642 MmMapUserAddressesToPage(
2643 IN PVOID BaseAddress
,
2644 IN SIZE_T NumberOfBytes
,
2645 IN PVOID PageAddress
);
2651 IN PHYSICAL_ADDRESS PhysicalAddress
,
2652 IN SIZE_T NumberOfBytes
,
2653 IN MEMORY_CACHING_TYPE CacheType
);
2658 MmMapViewInSessionSpace(
2660 OUT PVOID
*MappedBase
,
2661 IN OUT PSIZE_T ViewSize
);
2666 MmMapViewInSystemSpace(
2668 OUT PVOID
*MappedBase
,
2669 IN OUT PSIZE_T ViewSize
);
2675 IN PVOID VirtualAddress
);
2680 MmIsThisAnNtAsSystem(VOID
);
2685 MmLockPagableSectionByHandle(
2686 IN PVOID ImageSectionHandle
);
2691 MmUnmapViewInSessionSpace(
2692 IN PVOID MappedBase
);
2697 MmUnmapViewInSystemSpace(
2698 IN PVOID MappedBase
);
2703 MmUnsecureVirtualMemory(
2704 IN HANDLE SecureHandle
);
2709 MmRemovePhysicalMemory(
2710 IN PPHYSICAL_ADDRESS StartAddress
,
2711 IN OUT PLARGE_INTEGER NumberOfBytes
);
2716 MmSecureVirtualMemory(
2719 IN ULONG ProbeMode
);
2724 MmUnmapVideoDisplay(
2725 IN PVOID BaseAddress
,
2726 IN SIZE_T NumberOfBytes
);
2731 MmAddPhysicalMemory(
2732 IN PPHYSICAL_ADDRESS StartAddress
,
2733 IN OUT PLARGE_INTEGER NumberOfBytes
);
2738 MmAllocateContiguousMemory(
2739 IN SIZE_T NumberOfBytes
,
2740 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
2745 MmAllocateContiguousMemorySpecifyCache(
2746 IN SIZE_T NumberOfBytes
,
2747 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
2748 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
2749 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
2750 IN MEMORY_CACHING_TYPE CacheType
);
2755 MmAllocateContiguousMemorySpecifyCacheNode(
2756 IN SIZE_T NumberOfBytes
,
2757 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
2758 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
2759 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
2760 IN MEMORY_CACHING_TYPE CacheType
,
2761 IN NODE_REQUIREMENT PreferredNode
);
2766 MmFreeContiguousMemory(
2767 IN PVOID BaseAddress
);
2772 MmFreeContiguousMemorySpecifyCache(
2773 IN PVOID BaseAddress
,
2774 IN SIZE_T NumberOfBytes
,
2775 IN MEMORY_CACHING_TYPE CacheType
);
2777 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2779 #if (NTDDI_VERSION >= NTDDI_WS03)
2783 MmCreateMirror(VOID
);
2786 #if (NTDDI_VERSION >= NTDDI_VISTA)
2789 MmRotatePhysicalView(
2790 IN PVOID VirtualAddress
,
2791 IN OUT PSIZE_T NumberOfBytes
,
2792 IN PMDLX NewMdl OPTIONAL
,
2793 IN MM_ROTATE_DIRECTION Direction
,
2794 IN PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction
,
2795 IN PVOID Context OPTIONAL
);
2798 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2802 SeSinglePrivilegeCheck(
2803 IN LUID PrivilegeValue
,
2804 IN KPROCESSOR_MODE PreviousMode
);
2807 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
2809 #if !defined(_PSGETCURRENTTHREAD_)
2810 #define _PSGETCURRENTTHREAD_
2815 PsGetCurrentThread(VOID
)
2817 return (PETHREAD
)KeGetCurrentThread();
2822 /** Process Manager types **/
2825 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
2827 IN HANDLE ProcessId
,
2830 typedef struct _PS_CREATE_NOTIFY_INFO
{
2835 IN ULONG FileOpenNameAvailable
:1;
2836 IN ULONG Reserved
:31;
2839 IN HANDLE ParentProcessId
;
2840 IN CLIENT_ID CreatingThreadId
;
2841 IN OUT
struct _FILE_OBJECT
*FileObject
;
2842 IN PCUNICODE_STRING ImageFileName
;
2843 IN PCUNICODE_STRING CommandLine OPTIONAL
;
2844 IN OUT NTSTATUS CreationStatus
;
2845 } PS_CREATE_NOTIFY_INFO
, *PPS_CREATE_NOTIFY_INFO
;
2848 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE_EX
)(
2849 IN OUT PEPROCESS Process
,
2850 IN HANDLE ProcessId
,
2851 IN PPS_CREATE_NOTIFY_INFO CreateInfo OPTIONAL
);
2854 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
2855 IN HANDLE ProcessId
,
2859 #define IMAGE_ADDRESSING_MODE_32BIT 3
2861 typedef struct _IMAGE_INFO
{
2862 _ANONYMOUS_UNION
union {
2864 _ANONYMOUS_STRUCT
struct {
2865 ULONG ImageAddressingMode
:8;
2866 ULONG SystemModeImage
:1;
2867 ULONG ImageMappedToAllPids
:1;
2868 ULONG ExtendedInfoPresent
:1;
2873 ULONG ImageSelector
;
2875 ULONG ImageSectionNumber
;
2876 } IMAGE_INFO
, *PIMAGE_INFO
;
2878 typedef struct _IMAGE_INFO_EX
{
2880 IMAGE_INFO ImageInfo
;
2881 struct _FILE_OBJECT
*FileObject
;
2882 } IMAGE_INFO_EX
, *PIMAGE_INFO_EX
;
2885 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
2886 IN PUNICODE_STRING FullImageName
,
2887 IN HANDLE ProcessId
,
2888 IN PIMAGE_INFO ImageInfo
);
2890 /** Process Manager functions **/
2892 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2897 PsSetCreateProcessNotifyRoutine(
2898 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
2904 PsSetCreateThreadNotifyRoutine(
2905 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2910 PsSetLoadImageNotifyRoutine(
2911 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2916 PsGetCurrentProcessId(VOID
);
2921 PsGetCurrentThreadId(VOID
);
2927 OUT PULONG MajorVersion OPTIONAL
,
2928 OUT PULONG MinorVersion OPTIONAL
,
2929 OUT PULONG BuildNumber OPTIONAL
,
2930 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
2932 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2934 #if (NTDDI_VERSION >= NTDDI_WINXP)
2940 IN PEPROCESS Process
);
2946 IN PETHREAD Thread
);
2951 PsRemoveCreateThreadNotifyRoutine(
2952 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2957 PsRemoveLoadImageNotifyRoutine(
2958 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2963 PsGetProcessCreateTimeQuadPart(
2964 IN PEPROCESS Process
);
2966 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2968 #if (NTDDI_VERSION >= NTDDI_WS03)
2972 PsGetThreadProcessId(
2973 IN PETHREAD Thread
);
2976 #if (NTDDI_VERSION >= NTDDI_VISTA)
2981 PsSetCurrentThreadPrefetching(
2982 IN BOOLEAN Prefetching
);
2987 PsIsCurrentThreadPrefetching(VOID
);
2991 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
2995 PsSetCreateProcessNotifyRoutineEx(
2996 IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine
,
3000 /* I/O Manager Types */
3003 ** IRP function codes
3006 #define IRP_MN_QUERY_DIRECTORY 0x01
3007 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
3009 #define IRP_MN_USER_FS_REQUEST 0x00
3010 #define IRP_MN_MOUNT_VOLUME 0x01
3011 #define IRP_MN_VERIFY_VOLUME 0x02
3012 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
3013 #define IRP_MN_TRACK_LINK 0x04
3014 #define IRP_MN_KERNEL_CALL 0x04
3016 #define IRP_MN_LOCK 0x01
3017 #define IRP_MN_UNLOCK_SINGLE 0x02
3018 #define IRP_MN_UNLOCK_ALL 0x03
3019 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
3021 #define IRP_MN_FLUSH_AND_PURGE 0x01
3023 #define IRP_MN_NORMAL 0x00
3024 #define IRP_MN_DPC 0x01
3025 #define IRP_MN_MDL 0x02
3026 #define IRP_MN_COMPLETE 0x04
3027 #define IRP_MN_COMPRESSED 0x08
3029 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
3030 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
3031 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
3033 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
3035 #define IO_CHECK_CREATE_PARAMETERS 0x0200
3036 #define IO_ATTACH_DEVICE 0x0400
3037 #define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800
3041 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
3043 IN PUNICODE_STRING PathName
,
3044 IN INTERFACE_TYPE BusType
,
3046 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
3047 IN CONFIGURATION_TYPE ControllerType
,
3048 IN ULONG ControllerNumber
,
3049 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
3050 IN CONFIGURATION_TYPE PeripheralType
,
3051 IN ULONG PeripheralNumber
,
3052 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
3054 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
3055 IoQueryDeviceIdentifier
= 0,
3056 IoQueryDeviceConfigurationData
,
3057 IoQueryDeviceComponentInformation
,
3058 IoQueryDeviceMaxData
3059 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
3062 (NTAPI
*PDRIVER_REINITIALIZE
)(
3063 IN
struct _DRIVER_OBJECT
*DriverObject
,
3064 IN PVOID Context OPTIONAL
,
3067 typedef struct _CONTROLLER_OBJECT
{
3070 PVOID ControllerExtension
;
3071 KDEVICE_QUEUE DeviceWaitQueue
;
3073 LARGE_INTEGER Spare2
;
3074 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
3076 /* DEVICE_OBJECT.Flags */
3078 #define DO_VERIFY_VOLUME 0x00000002
3079 #define DO_BUFFERED_IO 0x00000004
3080 #define DO_EXCLUSIVE 0x00000008
3081 #define DO_DIRECT_IO 0x00000010
3082 #define DO_MAP_IO_BUFFER 0x00000020
3083 #define DO_DEVICE_HAS_NAME 0x00000040
3084 #define DO_DEVICE_INITIALIZING 0x00000080
3085 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
3086 #define DO_LONG_TERM_REQUESTS 0x00000200
3087 #define DO_NEVER_LAST_DEVICE 0x00000400
3088 #define DO_SHUTDOWN_REGISTERED 0x00000800
3089 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
3090 #define DO_POWER_PAGABLE 0x00002000
3091 #define DO_POWER_INRUSH 0x00004000
3092 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
3093 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
3094 #define DO_FORCE_NEITHER_IO 0x00080000
3095 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
3096 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
3097 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
3098 #define DO_DISALLOW_EXECUTE 0x00800000
3100 #define DRVO_REINIT_REGISTERED 0x00000008
3101 #define DRVO_INITIALIZED 0x00000010
3102 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
3103 #define DRVO_LEGACY_RESOURCES 0x00000040
3105 typedef struct _CONFIGURATION_INFORMATION
{
3110 ULONG ScsiPortCount
;
3112 ULONG ParallelCount
;
3113 BOOLEAN AtDiskPrimaryAddressClaimed
;
3114 BOOLEAN AtDiskSecondaryAddressClaimed
;
3116 ULONG MediumChangerCount
;
3117 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
3119 typedef struct _DISK_SIGNATURE
{
3120 ULONG PartitionStyle
;
3121 _ANONYMOUS_UNION
union {
3130 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
3132 typedef struct _TXN_PARAMETER_BLOCK
{
3135 PVOID TransactionObject
;
3136 } TXN_PARAMETER_BLOCK
, *PTXN_PARAMETER_BLOCK
;
3138 #define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE)
3140 typedef struct _IO_DRIVER_CREATE_CONTEXT
{
3142 struct _ECP_LIST
*ExtraCreateParameter
;
3143 PVOID DeviceObjectHint
;
3144 PTXN_PARAMETER_BLOCK TxnParameters
;
3145 } IO_DRIVER_CREATE_CONTEXT
, *PIO_DRIVER_CREATE_CONTEXT
;
3147 typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD
{
3151 PINTERFACE_REFERENCE InterfaceReference
;
3152 PINTERFACE_DEREFERENCE InterfaceDereference
;
3153 PGET_SET_DEVICE_DATA SetBusData
;
3154 PGET_SET_DEVICE_DATA GetBusData
;
3156 } AGP_TARGET_BUS_INTERFACE_STANDARD
, *PAGP_TARGET_BUS_INTERFACE_STANDARD
;
3159 (NTAPI
*PGET_LOCATION_STRING
)(
3160 IN OUT PVOID Context OPTIONAL
,
3161 OUT PWCHAR
*LocationStrings
);
3163 typedef struct _PNP_LOCATION_INTERFACE
{
3167 PINTERFACE_REFERENCE InterfaceReference
;
3168 PINTERFACE_DEREFERENCE InterfaceDereference
;
3169 PGET_LOCATION_STRING GetLocationString
;
3170 } PNP_LOCATION_INTERFACE
, *PPNP_LOCATION_INTERFACE
;
3172 typedef enum _ARBITER_ACTION
{
3173 ArbiterActionTestAllocation
,
3174 ArbiterActionRetestAllocation
,
3175 ArbiterActionCommitAllocation
,
3176 ArbiterActionRollbackAllocation
,
3177 ArbiterActionQueryAllocatedResources
,
3178 ArbiterActionWriteReservedResources
,
3179 ArbiterActionQueryConflict
,
3180 ArbiterActionQueryArbitrate
,
3181 ArbiterActionAddReserved
,
3182 ArbiterActionBootAllocation
3183 } ARBITER_ACTION
, *PARBITER_ACTION
;
3185 typedef struct _ARBITER_CONFLICT_INFO
{
3186 PDEVICE_OBJECT OwningObject
;
3189 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
3191 typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS
{
3192 IN OUT PLIST_ENTRY ArbitrationList
;
3193 IN ULONG AllocateFromCount
;
3194 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
3195 } ARBITER_TEST_ALLOCATION_PARAMETERS
, *PARBITER_TEST_ALLOCATION_PARAMETERS
;
3197 typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS
{
3198 IN OUT PLIST_ENTRY ArbitrationList
;
3199 IN ULONG AllocateFromCount
;
3200 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
3201 } ARBITER_RETEST_ALLOCATION_PARAMETERS
, *PARBITER_RETEST_ALLOCATION_PARAMETERS
;
3203 typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS
{
3204 IN OUT PLIST_ENTRY ArbitrationList
;
3205 } ARBITER_BOOT_ALLOCATION_PARAMETERS
, *PARBITER_BOOT_ALLOCATION_PARAMETERS
;
3207 typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
{
3208 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
3209 } ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
;
3211 typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS
{
3212 IN PDEVICE_OBJECT PhysicalDeviceObject
;
3213 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
3214 OUT PULONG ConflictCount
;
3215 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
3216 } ARBITER_QUERY_CONFLICT_PARAMETERS
, *PARBITER_QUERY_CONFLICT_PARAMETERS
;
3218 typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS
{
3219 IN PLIST_ENTRY ArbitrationList
;
3220 } ARBITER_QUERY_ARBITRATE_PARAMETERS
, *PARBITER_QUERY_ARBITRATE_PARAMETERS
;
3222 typedef struct _ARBITER_ADD_RESERVED_PARAMETERS
{
3223 IN PDEVICE_OBJECT ReserveDevice
;
3224 } ARBITER_ADD_RESERVED_PARAMETERS
, *PARBITER_ADD_RESERVED_PARAMETERS
;
3226 typedef struct _ARBITER_PARAMETERS
{
3228 ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation
;
3229 ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation
;
3230 ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation
;
3231 ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources
;
3232 ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict
;
3233 ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate
;
3234 ARBITER_ADD_RESERVED_PARAMETERS AddReserved
;
3236 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
3238 typedef enum _ARBITER_REQUEST_SOURCE
{
3239 ArbiterRequestUndefined
= -1,
3240 ArbiterRequestLegacyReported
,
3241 ArbiterRequestHalReported
,
3242 ArbiterRequestLegacyAssigned
,
3243 ArbiterRequestPnpDetected
,
3244 ArbiterRequestPnpEnumerated
3245 } ARBITER_REQUEST_SOURCE
;
3247 typedef enum _ARBITER_RESULT
{
3248 ArbiterResultUndefined
= -1,
3249 ArbiterResultSuccess
,
3250 ArbiterResultExternalConflict
,
3251 ArbiterResultNullRequest
3254 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
3256 typedef struct _ARBITER_LIST_ENTRY
{
3257 LIST_ENTRY ListEntry
;
3258 ULONG AlternativeCount
;
3259 PIO_RESOURCE_DESCRIPTOR Alternatives
;
3260 PDEVICE_OBJECT PhysicalDeviceObject
;
3261 ARBITER_REQUEST_SOURCE RequestSource
;
3264 INTERFACE_TYPE InterfaceType
;
3267 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
3268 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
3269 ARBITER_RESULT Result
;
3270 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
3273 (NTAPI
*PARBITER_HANDLER
)(
3274 IN OUT PVOID Context
,
3275 IN ARBITER_ACTION Action
,
3276 IN OUT PARBITER_PARAMETERS Parameters
);
3278 #define ARBITER_PARTIAL 0x00000001
3280 typedef struct _ARBITER_INTERFACE
{
3284 PINTERFACE_REFERENCE InterfaceReference
;
3285 PINTERFACE_DEREFERENCE InterfaceDereference
;
3286 PARBITER_HANDLER ArbiterHandler
;
3288 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
3290 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
3291 TranslateChildToParent
,
3292 TranslateParentToChild
3293 } RESOURCE_TRANSLATION_DIRECTION
;
3296 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
3297 IN OUT PVOID Context OPTIONAL
,
3298 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
3299 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
3300 IN ULONG AlternativesCount OPTIONAL
,
3301 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
3302 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3303 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
3306 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
3307 IN OUT PVOID Context OPTIONAL
,
3308 IN PIO_RESOURCE_DESCRIPTOR Source
,
3309 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3310 OUT PULONG TargetCount
,
3311 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
3313 typedef struct _TRANSLATOR_INTERFACE
{
3317 PINTERFACE_REFERENCE InterfaceReference
;
3318 PINTERFACE_DEREFERENCE InterfaceDereference
;
3319 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
3320 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
3321 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
3323 typedef struct _PCI_AGP_CAPABILITY
{
3324 PCI_CAPABILITIES_HEADER Header
;
3328 struct _PCI_AGP_STATUS
{
3333 ULONG HostTransDisable
:1;
3335 ULONG ITA_Coherent
:1;
3336 ULONG SideBandAddressing
:1;
3337 ULONG CalibrationCycle
:3;
3338 ULONG AsyncRequestSize
:3;
3342 ULONG RequestQueueDepthMaximum
:8;
3344 struct _PCI_AGP_COMMAND
{
3347 ULONG FastWriteEnable
:1;
3348 ULONG FourGBEnable
:1;
3353 ULONG CalibrationCycle
:3;
3354 ULONG AsyncReqSize
:3;
3356 ULONG RequestQueueDepth
:8;
3358 } PCI_AGP_CAPABILITY
, *PPCI_AGP_CAPABILITY
;
3360 typedef enum _EXTENDED_AGP_REGISTER
{
3368 } EXTENDED_AGP_REGISTER
, *PEXTENDED_AGP_REGISTER
;
3370 typedef struct _PCI_AGP_ISOCH_STATUS
{
3377 } PCI_AGP_ISOCH_STATUS
, *PPCI_AGP_ISOCH_STATUS
;
3379 typedef struct _PCI_AGP_CONTROL
{
3381 ULONG GTLB_Enable
:1;
3383 ULONG CAL_Disable
:1;
3385 } PCI_AGP_CONTROL
, *PPCI_AGP_CONTROL
;
3387 typedef struct _PCI_AGP_APERTURE_PAGE_SIZE
{
3388 USHORT PageSizeMask
:11;
3390 USHORT PageSizeSelect
:4;
3391 } PCI_AGP_APERTURE_PAGE_SIZE
, *PPCI_AGP_APERTURE_PAGE_SIZE
;
3393 typedef struct _PCI_AGP_ISOCH_COMMAND
{
3397 } PCI_AGP_ISOCH_COMMAND
, *PPCI_AGP_ISOCH_COMMAND
;
3399 typedef struct PCI_AGP_EXTENDED_CAPABILITY
{
3400 PCI_AGP_ISOCH_STATUS IsochStatus
;
3401 PCI_AGP_CONTROL AgpControl
;
3402 USHORT ApertureSize
;
3403 PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize
;
3406 PCI_AGP_ISOCH_COMMAND IsochCommand
;
3407 } PCI_AGP_EXTENDED_CAPABILITY
, *PPCI_AGP_EXTENDED_CAPABILITY
;
3409 #define PCI_AGP_RATE_1X 0x1
3410 #define PCI_AGP_RATE_2X 0x2
3411 #define PCI_AGP_RATE_4X 0x4
3413 #define PCIX_MODE_CONVENTIONAL_PCI 0x0
3414 #define PCIX_MODE1_66MHZ 0x1
3415 #define PCIX_MODE1_100MHZ 0x2
3416 #define PCIX_MODE1_133MHZ 0x3
3417 #define PCIX_MODE2_266_66MHZ 0x9
3418 #define PCIX_MODE2_266_100MHZ 0xA
3419 #define PCIX_MODE2_266_133MHZ 0xB
3420 #define PCIX_MODE2_533_66MHZ 0xD
3421 #define PCIX_MODE2_533_100MHZ 0xE
3422 #define PCIX_MODE2_533_133MHZ 0xF
3424 #define PCIX_VERSION_MODE1_ONLY 0x0
3425 #define PCIX_VERSION_MODE2_ECC 0x1
3426 #define PCIX_VERSION_DUAL_MODE_ECC 0x2
3428 typedef struct _PCIX_BRIDGE_CAPABILITY
{
3429 PCI_CAPABILITIES_HEADER Header
;
3433 USHORT Bus133MHzCapable
:1;
3434 USHORT SplitCompletionDiscarded
:1;
3435 USHORT UnexpectedSplitCompletion
:1;
3436 USHORT SplitCompletionOverrun
:1;
3437 USHORT SplitRequestDelayed
:1;
3438 USHORT BusModeFrequency
:4;
3441 USHORT Bus266MHzCapable
:1;
3442 USHORT Bus533MHzCapable
:1;
3448 ULONG FunctionNumber
:3;
3449 ULONG DeviceNumber
:5;
3451 ULONG Device64Bit
:1;
3452 ULONG Device133MHzCapable
:1;
3453 ULONG SplitCompletionDiscarded
:1;
3454 ULONG UnexpectedSplitCompletion
:1;
3455 ULONG SplitCompletionOverrun
:1;
3456 ULONG SplitRequestDelayed
:1;
3459 ULONG Device266MHzCapable
:1;
3460 ULONG Device533MHzCapable
:1;
3464 USHORT UpstreamSplitTransactionCapacity
;
3465 USHORT UpstreamSplitTransactionLimit
;
3466 USHORT DownstreamSplitTransactionCapacity
;
3467 USHORT DownstreamSplitTransactionLimit
;
3470 ULONG SelectSecondaryRegisters
:1;
3471 ULONG ErrorPresentInOtherBank
:1;
3472 ULONG AdditionalCorrectableError
:1;
3473 ULONG AdditionalUncorrectableError
:1;
3475 ULONG ErrorCorrected
:1;
3477 ULONG ErrorFirstCommand
:4;
3478 ULONG ErrorSecondCommand
:4;
3479 ULONG ErrorUpperAttributes
:4;
3480 ULONG ControlUpdateEnable
:1;
3482 ULONG DisableSingleBitCorrection
:1;
3487 ULONG EccFirstAddress
;
3488 ULONG EccSecondAddress
;
3490 } PCIX_BRIDGE_CAPABILITY
, *PPCIX_BRIDGE_CAPABILITY
;
3492 typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY
{
3493 PCI_CAPABILITIES_HEADER Header
;
3497 } PCI_SUBSYSTEM_IDS_CAPABILITY
, *PPCI_SUBSYSTEM_IDS_CAPABILITY
;
3499 #define OSC_FIRMWARE_FAILURE 0x02
3500 #define OSC_UNRECOGNIZED_UUID 0x04
3501 #define OSC_UNRECOGNIZED_REVISION 0x08
3502 #define OSC_CAPABILITIES_MASKED 0x10
3504 #define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01
3506 typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD
{
3509 ULONG ExtendedConfigOpRegions
:1;
3510 ULONG ActiveStatePowerManagement
:1;
3511 ULONG ClockPowerManagement
:1;
3512 ULONG SegmentGroups
:1;
3513 ULONG MessageSignaledInterrupts
:1;
3514 ULONG WindowsHardwareErrorArchitecture
:1;
3519 } PCI_ROOT_BUS_OSC_SUPPORT_FIELD
, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD
;
3521 typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD
{
3524 ULONG ExpressNativeHotPlug
:1;
3525 ULONG ShpcNativeHotPlug
:1;
3526 ULONG ExpressNativePME
:1;
3527 ULONG ExpressAdvancedErrorReporting
:1;
3528 ULONG ExpressCapabilityStructure
:1;
3533 } PCI_ROOT_BUS_OSC_CONTROL_FIELD
, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD
;
3535 typedef enum _PCI_HARDWARE_INTERFACE
{
3540 } PCI_HARDWARE_INTERFACE
, *PPCI_HARDWARE_INTERFACE
;
3547 typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY
{
3548 PCI_HARDWARE_INTERFACE SecondaryInterface
;
3550 BOOLEAN BusCapabilitiesFound
;
3551 ULONG CurrentSpeedAndMode
;
3552 ULONG SupportedSpeedsAndModes
;
3553 BOOLEAN DeviceIDMessagingCapable
;
3554 PCI_BUS_WIDTH SecondaryBusWidth
;
3556 PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport
;
3557 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest
;
3558 PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted
;
3559 } PCI_ROOT_BUS_HARDWARE_CAPABILITY
, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY
;
3561 typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER
{
3563 USHORT CapabilityVersion
:4;
3564 USHORT DeviceType
:4;
3565 USHORT SlotImplemented
:1;
3566 USHORT InterruptMessageNumber
:5;
3570 } PCI_EXPRESS_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_CAPABILITIES_REGISTER
;
3572 typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
{
3574 ULONG MaxPayloadSizeSupported
:3;
3575 ULONG PhantomFunctionsSupported
:2;
3576 ULONG ExtendedTagSupported
:1;
3577 ULONG L0sAcceptableLatency
:3;
3578 ULONG L1AcceptableLatency
:3;
3580 ULONG RoleBasedErrorReporting
:1;
3582 ULONG CapturedSlotPowerLimit
:8;
3583 ULONG CapturedSlotPowerLimitScale
:2;
3587 } PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER
;
3589 #define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07;
3591 typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER
{
3593 USHORT CorrectableErrorEnable
:1;
3594 USHORT NonFatalErrorEnable
:1;
3595 USHORT FatalErrorEnable
:1;
3596 USHORT UnsupportedRequestErrorEnable
:1;
3597 USHORT EnableRelaxedOrder
:1;
3598 USHORT MaxPayloadSize
:3;
3599 USHORT ExtendedTagEnable
:1;
3600 USHORT PhantomFunctionsEnable
:1;
3601 USHORT AuxPowerEnable
:1;
3602 USHORT NoSnoopEnable
:1;
3603 USHORT MaxReadRequestSize
:3;
3604 USHORT BridgeConfigRetryEnable
:1;
3607 } PCI_EXPRESS_DEVICE_CONTROL_REGISTER
, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER
;
3609 #define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F;
3611 typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER
{
3613 USHORT CorrectableErrorDetected
:1;
3614 USHORT NonFatalErrorDetected
:1;
3615 USHORT FatalErrorDetected
:1;
3616 USHORT UnsupportedRequestDetected
:1;
3617 USHORT AuxPowerDetected
:1;
3618 USHORT TransactionsPending
:1;
3622 } PCI_EXPRESS_DEVICE_STATUS_REGISTER
, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER
;
3624 typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
{
3626 ULONG MaximumLinkSpeed
:4;
3627 ULONG MaximumLinkWidth
:6;
3628 ULONG ActiveStatePMSupport
:2;
3629 ULONG L0sExitLatency
:3;
3630 ULONG L1ExitLatency
:3;
3631 ULONG ClockPowerManagement
:1;
3632 ULONG SurpriseDownErrorReportingCapable
:1;
3633 ULONG DataLinkLayerActiveReportingCapable
:1;
3638 } PCI_EXPRESS_LINK_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER
;
3640 typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER
{
3642 USHORT ActiveStatePMControl
:2;
3644 USHORT ReadCompletionBoundary
:1;
3645 USHORT LinkDisable
:1;
3646 USHORT RetrainLink
:1;
3647 USHORT CommonClockConfig
:1;
3648 USHORT ExtendedSynch
:1;
3649 USHORT EnableClockPowerManagement
:1;
3653 } PCI_EXPRESS_LINK_CONTROL_REGISTER
, *PPCI_EXPRESS_LINK_CONTROL_REGISTER
;
3655 typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER
{
3660 USHORT LinkTraining
:1;
3661 USHORT SlotClockConfig
:1;
3662 USHORT DataLinkLayerActive
:1;
3666 } PCI_EXPRESS_LINK_STATUS_REGISTER
, *PPCI_EXPRESS_LINK_STATUS_REGISTER
;
3668 typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
{
3670 ULONG AttentionButtonPresent
:1;
3671 ULONG PowerControllerPresent
:1;
3672 ULONG MRLSensorPresent
:1;
3673 ULONG AttentionIndicatorPresent
:1;
3674 ULONG PowerIndicatorPresent
:1;
3675 ULONG HotPlugSurprise
:1;
3676 ULONG HotPlugCapable
:1;
3677 ULONG SlotPowerLimit
:8;
3678 ULONG SlotPowerLimitScale
:2;
3679 ULONG ElectromechanicalLockPresent
:1;
3680 ULONG NoCommandCompletedSupport
:1;
3681 ULONG PhysicalSlotNumber
:13;
3684 } PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER
;
3686 typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER
{
3688 USHORT AttentionButtonEnable
:1;
3689 USHORT PowerFaultDetectEnable
:1;
3690 USHORT MRLSensorEnable
:1;
3691 USHORT PresenceDetectEnable
:1;
3692 USHORT CommandCompletedEnable
:1;
3693 USHORT HotPlugInterruptEnable
:1;
3694 USHORT AttentionIndicatorControl
:2;
3695 USHORT PowerIndicatorControl
:2;
3696 USHORT PowerControllerControl
:1;
3697 USHORT ElectromechanicalLockControl
:1;
3698 USHORT DataLinkStateChangeEnable
:1;
3702 } PCI_EXPRESS_SLOT_CONTROL_REGISTER
, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER
;
3704 typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER
{
3706 USHORT AttentionButtonPressed
:1;
3707 USHORT PowerFaultDetected
:1;
3708 USHORT MRLSensorChanged
:1;
3709 USHORT PresenceDetectChanged
:1;
3710 USHORT CommandCompleted
:1;
3711 USHORT MRLSensorState
:1;
3712 USHORT PresenceDetectState
:1;
3713 USHORT ElectromechanicalLockEngaged
:1;
3714 USHORT DataLinkStateChanged
:1;
3718 } PCI_EXPRESS_SLOT_STATUS_REGISTER
, *PPCI_EXPRESS_SLOT_STATUS_REGISTER
;
3720 typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER
{
3722 USHORT CorrectableSerrEnable
:1;
3723 USHORT NonFatalSerrEnable
:1;
3724 USHORT FatalSerrEnable
:1;
3725 USHORT PMEInterruptEnable
:1;
3726 USHORT CRSSoftwareVisibilityEnable
:1;
3730 } PCI_EXPRESS_ROOT_CONTROL_REGISTER
, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER
;
3732 typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
{
3734 USHORT CRSSoftwareVisibility
:1;
3738 } PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER
;
3740 typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER
{
3742 ULONG PMERequestorId
:16;
3748 } PCI_EXPRESS_ROOT_STATUS_REGISTER
, *PPCI_EXPRESS_ROOT_STATUS_REGISTER
;
3750 typedef struct _PCI_EXPRESS_CAPABILITY
{
3751 PCI_CAPABILITIES_HEADER Header
;
3752 PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities
;
3753 PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities
;
3754 PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl
;
3755 PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus
;
3756 PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities
;
3757 PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl
;
3758 PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus
;
3759 PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities
;
3760 PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl
;
3761 PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus
;
3762 PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl
;
3763 PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities
;
3764 PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus
;
3765 } PCI_EXPRESS_CAPABILITY
, *PPCI_EXPRESS_CAPABILITY
;
3770 } PCI_EXPRESS_MRL_STATE
;
3775 } PCI_EXPRESS_CARD_PRESENCE
;
3781 } PCI_EXPRESS_INDICATOR_STATE
;
3786 } PCI_EXPRESS_POWER_STATE
;
3789 L0sEntrySupport
= 1,
3790 L0sAndL1EntrySupport
= 3
3791 } PCI_EXPRESS_ASPM_SUPPORT
;
3794 L0sAndL1EntryDisabled
,
3797 L0sAndL1EntryEnabled
3798 } PCI_EXPRESS_ASPM_CONTROL
;
3809 } PCI_EXPRESS_L0s_EXIT_LATENCY
;
3820 } PCI_EXPRESS_L1_EXIT_LATENCY
;
3823 PciExpressEndpoint
= 0,
3824 PciExpressLegacyEndpoint
,
3825 PciExpressRootPort
= 4,
3826 PciExpressUpstreamSwitchPort
,
3827 PciExpressDownstreamSwitchPort
,
3828 PciExpressToPciXBridge
,
3829 PciXToExpressBridge
,
3830 PciExpressRootComplexIntegratedEndpoint
,
3831 PciExpressRootComplexEventCollector
3832 } PCI_EXPRESS_DEVICE_TYPE
;
3835 MaxPayload128Bytes
= 0,
3838 MaxPayload1024Bytes
,
3839 MaxPayload2048Bytes
,
3841 } PCI_EXPRESS_MAX_PAYLOAD_SIZE
;
3843 typedef union _PCI_EXPRESS_PME_REQUESTOR_ID
{
3845 USHORT FunctionNumber
:3;
3846 USHORT DeviceNumber
:5;
3850 } PCI_EXPRESS_PME_REQUESTOR_ID
, *PPCI_EXPRESS_PME_REQUESTOR_ID
;
3852 /* I/O Manager Functions */
3855 * VOID IoAssignArcName(
3856 * IN PUNICODE_STRING ArcName,
3857 * IN PUNICODE_STRING DeviceName);
3859 #define IoAssignArcName(_ArcName, _DeviceName) ( \
3860 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
3864 * IoDeassignArcName(
3865 * IN PUNICODE_STRING ArcName)
3867 #define IoDeassignArcName IoDeleteSymbolicLink
3872 IoInitializeDriverCreateContext(
3873 PIO_DRIVER_CREATE_CONTEXT DriverContext
)
3875 RtlZeroMemory(DriverContext
, sizeof(IO_DRIVER_CREATE_CONTEXT
));
3876 DriverContext
->Size
= sizeof(IO_DRIVER_CREATE_CONTEXT
);
3879 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3881 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
3885 IoAllocateAdapterChannel(
3886 IN PADAPTER_OBJECT AdapterObject
,
3887 IN PDEVICE_OBJECT DeviceObject
,
3888 IN ULONG NumberOfMapRegisters
,
3889 IN PDRIVER_CONTROL ExecutionRoutine
,
3893 //DECLSPEC_DEPRECATED_DDK
3898 IN PADAPTER_OBJECT AdapterObject
,
3900 IN PVOID MapRegisterBase
,
3902 IN OUT PULONG Length
,
3903 IN BOOLEAN WriteToDevice
);
3908 IoAllocateController(
3909 IN PCONTROLLER_OBJECT ControllerObject
,
3910 IN PDEVICE_OBJECT DeviceObject
,
3911 IN PDRIVER_CONTROL ExecutionRoutine
,
3912 IN PVOID Context OPTIONAL
);
3924 IN PCONTROLLER_OBJECT ControllerObject
);
3930 IN PCONTROLLER_OBJECT ControllerObject
);
3933 PCONFIGURATION_INFORMATION
3935 IoGetConfigurationInformation(VOID
);
3940 IoGetDeviceToVerify(
3941 IN PETHREAD Thread
);
3947 IN PDEVICE_OBJECT DeviceObject
,
3948 IN PFILE_OBJECT FileObject
);
3953 IoGetFileObjectGenericMapping(VOID
);
3958 IoMakeAssociatedIrp(
3960 IN CCHAR StackSize
);
3965 IoQueryDeviceDescription(
3966 IN PINTERFACE_TYPE BusType OPTIONAL
,
3967 IN PULONG BusNumber OPTIONAL
,
3968 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
3969 IN PULONG ControllerNumber OPTIONAL
,
3970 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
3971 IN PULONG PeripheralNumber OPTIONAL
,
3972 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
3973 IN OUT PVOID Context OPTIONAL
);
3980 IN PVPB Vpb OPTIONAL
,
3981 IN PDEVICE_OBJECT RealDeviceObject
);
3986 IoRaiseInformationalHardError(
3987 IN NTSTATUS ErrorStatus
,
3988 IN PUNICODE_STRING String OPTIONAL
,
3989 IN PKTHREAD Thread OPTIONAL
);
3994 IoRegisterBootDriverReinitialization(
3995 IN PDRIVER_OBJECT DriverObject
,
3996 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3997 IN PVOID Context OPTIONAL
);
4002 IoRegisterDriverReinitialization(
4003 IN PDRIVER_OBJECT DriverObject
,
4004 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
4005 IN PVOID Context OPTIONAL
);
4010 IoAttachDeviceByPointer(
4011 IN PDEVICE_OBJECT SourceDevice
,
4012 IN PDEVICE_OBJECT TargetDevice
);
4017 IoReportDetectedDevice(
4018 IN PDRIVER_OBJECT DriverObject
,
4019 IN INTERFACE_TYPE LegacyBusType
,
4021 IN ULONG SlotNumber
,
4022 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
4023 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
4024 IN BOOLEAN ResourceAssigned
,
4025 IN OUT PDEVICE_OBJECT
*DeviceObject OPTIONAL
);
4030 IoReportResourceForDetection(
4031 IN PDRIVER_OBJECT DriverObject
,
4032 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
4033 IN ULONG DriverListSize OPTIONAL
,
4034 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
4035 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
4036 IN ULONG DeviceListSize OPTIONAL
,
4037 OUT PBOOLEAN ConflictDetected
);
4042 IoReportResourceUsage(
4043 IN PUNICODE_STRING DriverClassName OPTIONAL
,
4044 IN PDRIVER_OBJECT DriverObject
,
4045 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
4046 IN ULONG DriverListSize OPTIONAL
,
4047 IN PDEVICE_OBJECT DeviceObject
,
4048 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
4049 IN ULONG DeviceListSize OPTIONAL
,
4050 IN BOOLEAN OverrideConflict
,
4051 OUT PBOOLEAN ConflictDetected
);
4056 IoSetHardErrorOrVerifyDevice(
4058 IN PDEVICE_OBJECT DeviceObject
);
4064 IN PUNICODE_STRING RegistryPath
,
4065 IN PUNICODE_STRING DriverClassName OPTIONAL
,
4066 IN PDRIVER_OBJECT DriverObject
,
4067 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
4068 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
4069 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
4074 IoSetThreadHardErrorMode(
4075 IN BOOLEAN EnableHardErrors
);
4077 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4079 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
4084 IoIsFileOriginRemote(
4085 IN PFILE_OBJECT FileObject
);
4091 IN PFILE_OBJECT FileObject
,
4096 #if (NTDDI_VERSION >= NTDDI_WINXP)
4101 IoReadPartitionTable(
4102 IN PDEVICE_OBJECT DeviceObject
,
4103 IN ULONG SectorSize
,
4104 IN BOOLEAN ReturnRecognizedPartitions
,
4105 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
4110 IoSetPartitionInformation(
4111 IN PDEVICE_OBJECT DeviceObject
,
4112 IN ULONG SectorSize
,
4113 IN ULONG PartitionNumber
,
4114 IN ULONG PartitionType
);
4119 IoWritePartitionTable(
4120 IN PDEVICE_OBJECT DeviceObject
,
4121 IN ULONG SectorSize
,
4122 IN ULONG SectorsPerTrack
,
4123 IN ULONG NumberOfHeads
,
4124 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
4130 IN PDEVICE_OBJECT DeviceObject
,
4131 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
4136 IoReadDiskSignature(
4137 IN PDEVICE_OBJECT DeviceObject
,
4138 IN ULONG BytesPerSector
,
4139 OUT PDISK_SIGNATURE Signature
);
4144 IoReadPartitionTableEx(
4145 IN PDEVICE_OBJECT DeviceObject
,
4146 OUT
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
4151 IoSetPartitionInformationEx(
4152 IN PDEVICE_OBJECT DeviceObject
,
4153 IN ULONG PartitionNumber
,
4154 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
4159 IoSetSystemPartition(
4160 IN PUNICODE_STRING VolumeNameString
);
4165 IoVerifyPartitionTable(
4166 IN PDEVICE_OBJECT DeviceObject
,
4167 IN BOOLEAN FixErrors
);
4172 IoVolumeDeviceToDosName(
4173 IN PVOID VolumeDeviceObject
,
4174 OUT PUNICODE_STRING DosName
);
4179 IoWritePartitionTableEx(
4180 IN PDEVICE_OBJECT DeviceObject
,
4181 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
4186 IoCreateFileSpecifyDeviceObjectHint(
4187 OUT PHANDLE FileHandle
,
4188 IN ACCESS_MASK DesiredAccess
,
4189 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4190 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4191 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
4192 IN ULONG FileAttributes
,
4193 IN ULONG ShareAccess
,
4194 IN ULONG Disposition
,
4195 IN ULONG CreateOptions
,
4196 IN PVOID EaBuffer OPTIONAL
,
4198 IN CREATE_FILE_TYPE CreateFileType
,
4199 IN PVOID InternalParameters OPTIONAL
,
4201 IN PVOID DeviceObject OPTIONAL
);
4206 IoAttachDeviceToDeviceStackSafe(
4207 IN PDEVICE_OBJECT SourceDevice
,
4208 IN PDEVICE_OBJECT TargetDevice
,
4209 OUT PDEVICE_OBJECT
*AttachedToDeviceObject
);
4211 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4213 #if (NTDDI_VERSION >= NTDDI_WS03)
4217 IoGetPagingIoPriority(
4221 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
4224 IoTranslateBusAddress(
4225 IN INTERFACE_TYPE InterfaceType
,
4227 IN PHYSICAL_ADDRESS BusAddress
,
4228 IN OUT PULONG AddressSpace
,
4229 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
4232 #if (NTDDI_VERSION >= NTDDI_VISTA)
4237 IoUpdateDiskGeometry(
4238 IN PDEVICE_OBJECT DeviceObject
,
4239 IN
struct _DISK_GEOMETRY_EX
* OldDiskGeometry
,
4240 IN
struct _DISK_GEOMETRY_EX
* NewDiskGeometry
);
4242 PTXN_PARAMETER_BLOCK
4244 IoGetTransactionParameterBlock(
4245 IN PFILE_OBJECT FileObject
);
4251 OUT PHANDLE FileHandle
,
4252 IN ACCESS_MASK DesiredAccess
,
4253 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4254 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4255 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
4256 IN ULONG FileAttributes
,
4257 IN ULONG ShareAccess
,
4258 IN ULONG Disposition
,
4259 IN ULONG CreateOptions
,
4260 IN PVOID EaBuffer OPTIONAL
,
4262 IN CREATE_FILE_TYPE CreateFileType
,
4263 IN PVOID InternalParameters OPTIONAL
,
4265 IN PIO_DRIVER_CREATE_CONTEXT DriverContext OPTIONAL
);
4269 IoSetIrpExtraCreateParameter(
4271 IN
struct _ECP_LIST
*ExtraCreateParameter
);
4275 IoClearIrpExtraCreateParameter(
4280 IoGetIrpExtraCreateParameter(
4282 OUT
struct _ECP_LIST
**ExtraCreateParameter OPTIONAL
);
4286 IoIsFileObjectIgnoringSharing(
4287 IN PFILE_OBJECT FileObject
);
4289 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4291 #if (NTDDI_VERSION >= NTDDI_WIN7)
4294 IoSetFileObjectIgnoreSharing(
4295 IN PFILE_OBJECT FileObject
);
4301 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
4305 typedef PBUS_HANDLER
4306 (FASTCALL
*pHalHandlerForBus
)(
4307 IN INTERFACE_TYPE InterfaceType
,
4308 IN ULONG BusNumber
);
4311 (FASTCALL
*pHalReferenceBusHandler
)(
4312 IN PBUS_HANDLER BusHandler
);
4314 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
4315 HalInstalledBusInformation
,
4316 HalProfileSourceInformation
,
4317 HalInformationClassUnused1
,
4318 HalPowerInformation
,
4319 HalProcessorSpeedInformation
,
4320 HalCallbackInformation
,
4321 HalMapRegisterInformation
,
4322 HalMcaLogInformation
,
4323 HalFrameBufferCachingInformation
,
4324 HalDisplayBiosInformation
,
4325 HalProcessorFeatureInformation
,
4326 HalNumaTopologyInterface
,
4327 HalErrorInformation
,
4328 HalCmcLogInformation
,
4329 HalCpeLogInformation
,
4330 HalQueryMcaInterface
,
4331 HalQueryAMLIIllegalIOPortAddresses
,
4332 HalQueryMaxHotPlugMemoryAddress
,
4333 HalPartitionIpiInterface
,
4334 HalPlatformInformation
,
4335 HalQueryProfileSourceList
,
4336 HalInitLogInformation
,
4337 HalFrequencyInformation
,
4338 HalProcessorBrandString
,
4339 HalHypervisorInformation
,
4340 HalPlatformTimerInformation
,
4341 HalAcpiAuditInformation
4342 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
4344 typedef enum _HAL_SET_INFORMATION_CLASS
{
4345 HalProfileSourceInterval
,
4346 HalProfileSourceInterruptHandler
,
4347 HalMcaRegisterDriver
,
4348 HalKernelErrorHandler
,
4349 HalCmcRegisterDriver
,
4350 HalCpeRegisterDriver
,
4354 HalGenerateCmcInterrupt
,
4355 HalProfileSourceTimerHandler
,
4357 HalProfileDpgoSourceInterruptHandler
4358 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
4361 (NTAPI
*pHalQuerySystemInformation
)(
4362 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
4363 IN ULONG BufferSize
,
4364 IN OUT PVOID Buffer
,
4365 OUT PULONG ReturnedLength
);
4368 (NTAPI
*pHalSetSystemInformation
)(
4369 IN HAL_SET_INFORMATION_CLASS InformationClass
,
4370 IN ULONG BufferSize
,
4374 (FASTCALL
*pHalExamineMBR
)(
4375 IN PDEVICE_OBJECT DeviceObject
,
4376 IN ULONG SectorSize
,
4377 IN ULONG MBRTypeIdentifier
,
4381 (FASTCALL
*pHalIoReadPartitionTable
)(
4382 IN PDEVICE_OBJECT DeviceObject
,
4383 IN ULONG SectorSize
,
4384 IN BOOLEAN ReturnRecognizedPartitions
,
4385 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
4388 (FASTCALL
*pHalIoSetPartitionInformation
)(
4389 IN PDEVICE_OBJECT DeviceObject
,
4390 IN ULONG SectorSize
,
4391 IN ULONG PartitionNumber
,
4392 IN ULONG PartitionType
);
4395 (FASTCALL
*pHalIoWritePartitionTable
)(
4396 IN PDEVICE_OBJECT DeviceObject
,
4397 IN ULONG SectorSize
,
4398 IN ULONG SectorsPerTrack
,
4399 IN ULONG NumberOfHeads
,
4400 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
4403 (NTAPI
*pHalQueryBusSlots
)(
4404 IN PBUS_HANDLER BusHandler
,
4405 IN ULONG BufferSize
,
4406 OUT PULONG SlotNumbers
,
4407 OUT PULONG ReturnedLength
);
4410 (NTAPI
*pHalInitPnpDriver
)(
4413 typedef struct _PM_DISPATCH_TABLE
{
4417 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
4420 (NTAPI
*pHalInitPowerManagement
)(
4421 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
4422 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
4424 typedef struct _DMA_ADAPTER
*
4425 (NTAPI
*pHalGetDmaAdapter
)(
4427 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
4428 OUT PULONG NumberOfMapRegisters
);
4431 (NTAPI
*pHalGetInterruptTranslator
)(
4432 IN INTERFACE_TYPE ParentInterfaceType
,
4433 IN ULONG ParentBusNumber
,
4434 IN INTERFACE_TYPE BridgeInterfaceType
,
4437 OUT PTRANSLATOR_INTERFACE Translator
,
4438 OUT PULONG BridgeBusNumber
);
4441 (NTAPI
*pHalStartMirroring
)(
4445 (NTAPI
*pHalEndMirroring
)(
4446 IN ULONG PassNumber
);
4449 (NTAPI
*pHalMirrorPhysicalMemory
)(
4450 IN PHYSICAL_ADDRESS PhysicalAddress
,
4451 IN LARGE_INTEGER NumberOfBytes
);
4454 (NTAPI
*pHalMirrorVerify
)(
4455 IN PHYSICAL_ADDRESS PhysicalAddress
,
4456 IN LARGE_INTEGER NumberOfBytes
);
4459 (NTAPI
*pHalTranslateBusAddress
)(
4460 IN INTERFACE_TYPE InterfaceType
,
4462 IN PHYSICAL_ADDRESS BusAddress
,
4463 IN OUT PULONG AddressSpace
,
4464 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
4467 (NTAPI
*pHalAssignSlotResources
)(
4468 IN PUNICODE_STRING RegistryPath
,
4469 IN PUNICODE_STRING DriverClassName OPTIONAL
,
4470 IN PDRIVER_OBJECT DriverObject
,
4471 IN PDEVICE_OBJECT DeviceObject
,
4472 IN INTERFACE_TYPE BusType
,
4474 IN ULONG SlotNumber
,
4475 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
4478 (NTAPI
*pHalHaltSystem
)(
4482 (NTAPI
*pHalResetDisplay
)(
4485 typedef struct _MAP_REGISTER_ENTRY
{
4487 BOOLEAN WriteToDevice
;
4488 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
4491 (NTAPI
*pHalVectorToIDTEntry
)(
4495 (NTAPI
*pHalFindBusAddressTranslation
)(
4496 IN PHYSICAL_ADDRESS BusAddress
,
4497 IN OUT PULONG AddressSpace
,
4498 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
4499 IN OUT PULONG_PTR Context
,
4500 IN BOOLEAN NextBus
);
4502 typedef struct _DEBUG_DEVICE_ADDRESS
{
4506 PUCHAR TranslatedAddress
;
4508 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
4510 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
4511 PHYSICAL_ADDRESS Start
;
4512 PHYSICAL_ADDRESS MaxEnd
;
4513 PVOID VirtualAddress
;
4517 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
4519 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
4528 BOOLEAN Initialized
;
4530 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
4531 DEBUG_MEMORY_REQUIREMENTS Memory
;
4532 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
4535 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
4536 IN PVOID LoaderBlock OPTIONAL
,
4537 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
4540 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
4541 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
4544 (NTAPI
*pKdGetAcpiTablePhase0
)(
4545 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
4546 IN ULONG Signature
);
4549 (NTAPI
*pKdCheckPowerButton
)(
4553 (NTAPI
*pHalEndOfBoot
)(
4556 #if (NTDDI_VERSION >= NTDDI_VISTA)
4558 (NTAPI
*pKdMapPhysicalMemory64
)(
4559 IN PHYSICAL_ADDRESS PhysicalAddress
,
4560 IN ULONG NumberPages
,
4561 IN BOOLEAN FlushCurrentTLB
);
4564 (NTAPI
*pKdUnmapVirtualAddress
)(
4565 IN PVOID VirtualAddress
,
4566 IN ULONG NumberPages
,
4567 IN BOOLEAN FlushCurrentTLB
);
4570 (NTAPI
*pKdMapPhysicalMemory64
)(
4571 IN PHYSICAL_ADDRESS PhysicalAddress
,
4572 IN ULONG NumberPages
);
4575 (NTAPI
*pKdUnmapVirtualAddress
)(
4576 IN PVOID VirtualAddress
,
4577 IN ULONG NumberPages
);
4581 (NTAPI
*pHalGetAcpiTable
)(
4583 IN PCSTR OemId OPTIONAL
,
4584 IN PCSTR OemTableId OPTIONAL
);
4587 (NTAPI
*pKdGetPciDataByOffset
)(
4589 IN ULONG SlotNumber
,
4595 (NTAPI
*pKdSetPciDataByOffset
)(
4597 IN ULONG SlotNumber
,
4604 (*pHalGetErrorCapList
)(
4605 IN OUT PULONG CapsListLength
,
4606 IN OUT PUCHAR ErrorCapList
);
4610 IN ULONG BufferLength
,
4615 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(
4619 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
4620 IN PCI_ERROR_HANDLER_CALLBACK Callback
);
4622 #if 1 /* Not present in WDK 7600 */
4624 (FASTCALL
*pHalIoAssignDriveLetters
)(
4625 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
4626 IN PSTRING NtDeviceName
,
4627 OUT PUCHAR NtSystemPath
,
4628 OUT PSTRING NtSystemPathString
);
4633 pHalQuerySystemInformation HalQuerySystemInformation
;
4634 pHalSetSystemInformation HalSetSystemInformation
;
4635 pHalQueryBusSlots HalQueryBusSlots
;
4637 pHalExamineMBR HalExamineMBR
;
4638 #if 1 /* Not present in WDK 7600 */
4639 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
4641 pHalIoReadPartitionTable HalIoReadPartitionTable
;
4642 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
4643 pHalIoWritePartitionTable HalIoWritePartitionTable
;
4644 pHalHandlerForBus HalReferenceHandlerForBus
;
4645 pHalReferenceBusHandler HalReferenceBusHandler
;
4646 pHalReferenceBusHandler HalDereferenceBusHandler
;
4647 pHalInitPnpDriver HalInitPnpDriver
;
4648 pHalInitPowerManagement HalInitPowerManagement
;
4649 pHalGetDmaAdapter HalGetDmaAdapter
;
4650 pHalGetInterruptTranslator HalGetInterruptTranslator
;
4651 pHalStartMirroring HalStartMirroring
;
4652 pHalEndMirroring HalEndMirroring
;
4653 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
4654 pHalEndOfBoot HalEndOfBoot
;
4655 pHalMirrorVerify HalMirrorVerify
;
4656 pHalGetAcpiTable HalGetCachedAcpiTable
;
4657 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
4659 pHalGetErrorCapList HalGetErrorCapList
;
4660 pHalInjectError HalInjectError
;
4662 } HAL_DISPATCH
, *PHAL_DISPATCH
;
4664 /* GCC/MSVC and WDK compatible declaration */
4665 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
4667 #if defined(_NTOSKRNL_) || defined(_BLDR_)
4668 #define HALDISPATCH (&HalDispatchTable)
4670 /* This is a WDK compatibility definition */
4671 #define HalDispatchTable (&HalDispatchTable)
4672 #define HALDISPATCH HalDispatchTable
4675 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
4676 #define HalDispatchTableVersion HALDISPATCH->Version
4677 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
4678 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
4679 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
4680 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
4681 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
4682 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
4683 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
4684 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
4685 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
4686 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
4687 #define HalStartMirroring HALDISPATCH->HalStartMirroring
4688 #define HalEndMirroring HALDISPATCH->HalEndMirroring
4689 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
4690 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
4691 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
4692 #define HalGetCachedAcpiTable HALDISPATCH->HalGetCachedAcpiTable
4693 #define HalSetPciErrorHandlerCallback HALDISPATCH->HalSetPciErrorHandlerCallback
4695 #define HalGetErrorCapList HALDISPATCH->HalGetErrorCapList
4696 #define HalInjectError HALDISPATCH->HalInjectError
4699 typedef struct _HAL_BUS_INFORMATION
{
4700 INTERFACE_TYPE BusType
;
4701 BUS_DATA_TYPE ConfigurationType
;
4704 } HAL_BUS_INFORMATION
, *PHAL_BUS_INFORMATION
;
4706 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
4707 KPROFILE_SOURCE Source
;
4710 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
4712 typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX
{
4713 KPROFILE_SOURCE Source
;
4716 ULONG_PTR DefInterval
;
4717 ULONG_PTR MaxInterval
;
4718 ULONG_PTR MinInterval
;
4719 } HAL_PROFILE_SOURCE_INFORMATION_EX
, *PHAL_PROFILE_SOURCE_INFORMATION_EX
;
4721 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
4722 KPROFILE_SOURCE Source
;
4724 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
4726 typedef struct _HAL_PROFILE_SOURCE_LIST
{
4727 KPROFILE_SOURCE Source
;
4729 } HAL_PROFILE_SOURCE_LIST
, *PHAL_PROFILE_SOURCE_LIST
;
4731 typedef enum _HAL_DISPLAY_BIOS_INFORMATION
{
4732 HalDisplayInt10Bios
,
4733 HalDisplayEmulatedBios
,
4735 } HAL_DISPLAY_BIOS_INFORMATION
, *PHAL_DISPLAY_BIOS_INFORMATION
;
4737 typedef struct _HAL_POWER_INFORMATION
{
4739 } HAL_POWER_INFORMATION
, *PHAL_POWER_INFORMATION
;
4741 typedef struct _HAL_PROCESSOR_SPEED_INFO
{
4742 ULONG ProcessorSpeed
;
4743 } HAL_PROCESSOR_SPEED_INFORMATION
, *PHAL_PROCESSOR_SPEED_INFORMATION
;
4745 typedef struct _HAL_CALLBACKS
{
4746 PCALLBACK_OBJECT SetSystemInformation
;
4747 PCALLBACK_OBJECT BusCheck
;
4748 } HAL_CALLBACKS
, *PHAL_CALLBACKS
;
4750 typedef struct _HAL_PROCESSOR_FEATURE
{
4751 ULONG UsableFeatureBits
;
4752 } HAL_PROCESSOR_FEATURE
;
4755 (NTAPI
*PHALIOREADWRITEHANDLER
)(
4759 IN OUT PULONG pdwData
);
4761 typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST
{
4764 ULONG OSVersionTrigger
;
4765 PHALIOREADWRITEHANDLER IOHandler
;
4766 } HAL_AMLI_BAD_IO_ADDRESS_LIST
, *PHAL_AMLI_BAD_IO_ADDRESS_LIST
;
4768 #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
4771 (NTAPI
*PHALMCAINTERFACELOCK
)(
4775 (NTAPI
*PHALMCAINTERFACEUNLOCK
)(
4779 (NTAPI
*PHALMCAINTERFACEREADREGISTER
)(
4780 IN UCHAR BankNumber
,
4781 IN OUT PVOID Exception
);
4783 typedef struct _HAL_MCA_INTERFACE
{
4784 PHALMCAINTERFACELOCK Lock
;
4785 PHALMCAINTERFACEUNLOCK Unlock
;
4786 PHALMCAINTERFACEREADREGISTER ReadRegister
;
4787 } HAL_MCA_INTERFACE
;
4790 ApicDestinationModePhysical
= 1,
4791 ApicDestinationModeLogicalFlat
,
4792 ApicDestinationModeLogicalClustered
,
4793 ApicDestinationModeUnknown
4794 } HAL_APIC_DESTINATION_MODE
, *PHAL_APIC_DESTINATION_MODE
;
4796 #if defined(_AMD64_)
4798 struct _KTRAP_FRAME
;
4799 struct _KEXCEPTION_FRAME
;
4801 typedef ERROR_SEVERITY
4802 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
4804 IN
struct _KTRAP_FRAME
*TrapFrame
,
4805 IN
struct _KEXCEPTION_FRAME
*ExceptionFrame
,
4806 IN PMCA_EXCEPTION Exception
);
4810 #if defined(_X86_) || defined(_IA64_)
4817 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
4819 IN PMCA_EXCEPTION BankLog
);
4822 typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK
;
4824 typedef struct _MCA_DRIVER_INFO
{
4825 PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback
;
4826 PKDEFERRED_ROUTINE DpcCallback
;
4827 PVOID DeviceContext
;
4828 } MCA_DRIVER_INFO
, *PMCA_DRIVER_INFO
;
4830 typedef struct _HAL_ERROR_INFO
{
4834 ULONG McaPreviousEventsCount
;
4835 ULONG McaCorrectedEventsCount
;
4836 ULONG McaKernelDeliveryFails
;
4837 ULONG McaDriverDpcQueueFails
;
4840 ULONG CmcPollingInterval
;
4841 ULONG CmcInterruptsCount
;
4842 ULONG CmcKernelDeliveryFails
;
4843 ULONG CmcDriverDpcQueueFails
;
4844 ULONG CmcGetStateFails
;
4845 ULONG CmcClearStateFails
;
4849 ULONG CpePollingInterval
;
4850 ULONG CpeInterruptsCount
;
4851 ULONG CpeKernelDeliveryFails
;
4852 ULONG CpeDriverDpcQueueFails
;
4853 ULONG CpeGetStateFails
;
4854 ULONG CpeClearStateFails
;
4855 ULONG CpeInterruptSources
;
4857 ULONGLONG KernelReserved
[4];
4858 } HAL_ERROR_INFO
, *PHAL_ERROR_INFO
;
4860 #define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1)
4861 #define HAL_MCE_DISABLED ((ULONG)0)
4863 #define HAL_CMC_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
4864 #define HAL_CMC_DISABLED HAL_MCE_DISABLED
4866 #define HAL_CPE_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
4867 #define HAL_CPE_DISABLED HAL_MCE_DISABLED
4869 #define HAL_MCA_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
4870 #define HAL_MCA_DISABLED HAL_MCE_DISABLED
4873 (NTAPI
*PDRIVER_CMC_EXCEPTION_CALLBACK
)(
4875 IN PCMC_EXCEPTION CmcLog
);
4878 (NTAPI
*PDRIVER_CPE_EXCEPTION_CALLBACK
)(
4880 IN PCPE_EXCEPTION CmcLog
);
4882 typedef struct _CMC_DRIVER_INFO
{
4883 PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback
;
4884 PKDEFERRED_ROUTINE DpcCallback
;
4885 PVOID DeviceContext
;
4886 } CMC_DRIVER_INFO
, *PCMC_DRIVER_INFO
;
4888 typedef struct _CPE_DRIVER_INFO
{
4889 PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback
;
4890 PKDEFERRED_ROUTINE DpcCallback
;
4891 PVOID DeviceContext
;
4892 } CPE_DRIVER_INFO
, *PCPE_DRIVER_INFO
;
4894 #endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
4899 (*HALSENDCROSSPARTITIONIPI
)(
4900 IN USHORT ProcessorID
,
4901 IN UCHAR HardwareVector
);
4904 (*HALRESERVECROSSPARTITIONINTERRUPTVECTOR
)(
4907 IN OUT PGROUP_AFFINITY Affinity
,
4908 OUT PUCHAR HardwareVector
);
4911 (*HALFREECROSSPARTITIONINTERRUPTVECTOR
)(
4913 IN PGROUP_AFFINITY Affinity
);
4915 typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE
{
4916 HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi
;
4917 HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector
;
4918 HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector
;
4919 } HAL_CROSS_PARTITION_IPI_INTERFACE
;
4921 #define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \
4922 FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE, \
4923 HalFreeCrossPartitionInterruptVector)
4925 #endif /* defined(_IA64_) */
4927 typedef struct _HAL_PLATFORM_INFORMATION
{
4928 ULONG PlatformFlags
;
4929 } HAL_PLATFORM_INFORMATION
, *PHAL_PLATFORM_INFORMATION
;
4931 #define HAL_PLATFORM_DISABLE_WRITE_COMBINING 0x01L
4932 #define HAL_PLATFORM_DISABLE_PTCG 0x04L
4933 #define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY 0x08L
4934 #define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO 0x10L
4935 #define HAL_PLATFORM_ACPI_TABLES_CACHED 0x20L
4939 #ifndef USE_DMA_MACROS
4940 #define USE_DMA_MACROS
4943 #ifndef NO_LEGACY_DRIVERS
4944 #define NO_LEGACY_DRIVERS
4947 #endif /* defined(_WIN64) */
4949 typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
{
4950 ResourceTypeSingle
= 0,
4952 ResourceTypeExtendedCounterConfiguration
,
4953 ResourceTypeOverflow
,
4955 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
;
4957 typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
{
4958 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type
;
4962 ULONG ExtendedRegisterAddress
;
4968 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
;
4970 typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST
{
4972 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors
[ANYSIZE_ARRAY
];
4973 } PHYSICAL_COUNTER_RESOURCE_LIST
, *PPHYSICAL_COUNTER_RESOURCE_LIST
;
4976 (NTAPI
*PciPin2Line
)(
4977 IN
struct _BUS_HANDLER
*BusHandler
,
4978 IN
struct _BUS_HANDLER
*RootHandler
,
4979 IN PCI_SLOT_NUMBER SlotNumber
,
4980 IN PPCI_COMMON_CONFIG PciData
);
4983 (NTAPI
*PciLine2Pin
)(
4984 IN
struct _BUS_HANDLER
*BusHandler
,
4985 IN
struct _BUS_HANDLER
*RootHandler
,
4986 IN PCI_SLOT_NUMBER SlotNumber
,
4987 IN PPCI_COMMON_CONFIG PciNewData
,
4988 IN PPCI_COMMON_CONFIG PciOldData
);
4991 (NTAPI
*PciReadWriteConfig
)(
4992 IN
struct _BUS_HANDLER
*BusHandler
,
4993 IN PCI_SLOT_NUMBER Slot
,
4998 #define PCI_DATA_TAG ' ICP'
4999 #define PCI_DATA_VERSION 1
5001 typedef struct _PCIBUSDATA
{
5004 PciReadWriteConfig ReadConfig
;
5005 PciReadWriteConfig WriteConfig
;
5006 PciPin2Line Pin2Line
;
5007 PciLine2Pin Line2Pin
;
5008 PCI_SLOT_NUMBER ParentSlot
;
5010 } PCIBUSDATA
, *PPCIBUSDATA
;
5012 #ifndef _PCIINTRF_X_
5013 #define _PCIINTRF_X_
5016 (NTAPI
*PCI_READ_WRITE_CONFIG
)(
5025 (NTAPI
*PCI_PIN_TO_LINE
)(
5027 IN PPCI_COMMON_CONFIG PciData
);
5030 (NTAPI
*PCI_LINE_TO_PIN
)(
5032 IN PPCI_COMMON_CONFIG PciNewData
,
5033 IN PPCI_COMMON_CONFIG PciOldData
);
5036 (NTAPI
*PCI_ROOT_BUS_CAPABILITY
)(
5038 OUT PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability
);
5041 (NTAPI
*PCI_EXPRESS_WAKE_CONTROL
)(
5043 IN BOOLEAN EnableWake
);
5045 typedef struct _PCI_BUS_INTERFACE_STANDARD
{
5049 PINTERFACE_REFERENCE InterfaceReference
;
5050 PINTERFACE_DEREFERENCE InterfaceDereference
;
5051 PCI_READ_WRITE_CONFIG ReadConfig
;
5052 PCI_READ_WRITE_CONFIG WriteConfig
;
5053 PCI_PIN_TO_LINE PinToLine
;
5054 PCI_LINE_TO_PIN LineToPin
;
5055 PCI_ROOT_BUS_CAPABILITY RootBusCapability
;
5056 PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl
;
5057 } PCI_BUS_INTERFACE_STANDARD
, *PPCI_BUS_INTERFACE_STANDARD
;
5059 #define PCI_BUS_INTERFACE_STANDARD_VERSION 1
5061 #endif /* _PCIINTRF_X_ */
5063 /* Hardware Abstraction Layer Functions */
5065 #if !defined(NO_LEGACY_DRIVERS)
5067 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5072 HalAssignSlotResources(
5073 IN PUNICODE_STRING RegistryPath
,
5074 IN PUNICODE_STRING DriverClassName
,
5075 IN PDRIVER_OBJECT DriverObject
,
5076 IN PDEVICE_OBJECT DeviceObject
,
5077 IN INTERFACE_TYPE BusType
,
5079 IN ULONG SlotNumber
,
5080 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
5085 HalGetInterruptVector(
5086 IN INTERFACE_TYPE InterfaceType
,
5088 IN ULONG BusInterruptLevel
,
5089 IN ULONG BusInterruptVector
,
5091 OUT PKAFFINITY Affinity
);
5097 IN BUS_DATA_TYPE BusDataType
,
5099 IN ULONG SlotNumber
,
5107 IN BUS_DATA_TYPE BusDataType
,
5109 IN ULONG SlotNumber
,
5117 IN ULONG Frequency
);
5121 #endif /* !defined(NO_LEGACY_DRIVERS) */
5123 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
5127 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5128 //DECLSPEC_DEPRECATED_DDK
5132 IoFreeAdapterChannel(
5133 IN PADAPTER_OBJECT AdapterObject
);
5135 //DECLSPEC_DEPRECATED_DDK
5139 IoFlushAdapterBuffers(
5140 IN PADAPTER_OBJECT AdapterObject
,
5142 IN PVOID MapRegisterBase
,
5145 IN BOOLEAN WriteToDevice
);
5147 //DECLSPEC_DEPRECATED_DDK
5152 IN PADAPTER_OBJECT AdapterObject
,
5153 IN PVOID MapRegisterBase
,
5154 IN ULONG NumberOfMapRegisters
);
5156 //DECLSPEC_DEPRECATED_DDK
5160 HalAllocateCommonBuffer(
5161 IN PADAPTER_OBJECT AdapterObject
,
5163 OUT PPHYSICAL_ADDRESS LogicalAddress
,
5164 IN BOOLEAN CacheEnabled
);
5166 //DECLSPEC_DEPRECATED_DDK
5170 HalFreeCommonBuffer(
5171 IN PADAPTER_OBJECT AdapterObject
,
5173 IN PHYSICAL_ADDRESS LogicalAddress
,
5174 IN PVOID VirtualAddress
,
5175 IN BOOLEAN CacheEnabled
);
5177 //DECLSPEC_DEPRECATED_DDK
5182 IN PADAPTER_OBJECT AdapterObject
);
5187 HalAllocateAdapterChannel(
5188 IN PADAPTER_OBJECT AdapterObject
,
5189 IN PWAIT_CONTEXT_BLOCK Wcb
,
5190 IN ULONG NumberOfMapRegisters
,
5191 IN PDRIVER_CONTROL ExecutionRoutine
);
5193 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5195 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
5197 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5203 IN PDEVICE_DESCRIPTION DeviceDescription
,
5204 OUT PULONG NumberOfMapRegisters
);
5209 IN PADAPTER_OBJECT DmaAdapter
);
5214 HalAcquireDisplayOwnership(
5215 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
5220 HalGetBusDataByOffset(
5221 IN BUS_DATA_TYPE BusDataType
,
5223 IN ULONG SlotNumber
,
5231 HalSetBusDataByOffset(
5232 IN BUS_DATA_TYPE BusDataType
,
5234 IN ULONG SlotNumber
,
5242 HalTranslateBusAddress(
5243 IN INTERFACE_TYPE InterfaceType
,
5245 IN PHYSICAL_ADDRESS BusAddress
,
5246 IN OUT PULONG AddressSpace
,
5247 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
5252 HalAllocateCrashDumpRegisters(
5253 IN PADAPTER_OBJECT AdapterObject
,
5254 IN OUT PULONG NumberOfMapRegisters
);
5258 HalGetScatterGatherList(
5259 IN PADAPTER_OBJECT DmaAdapter
,
5260 IN PDEVICE_OBJECT DeviceObject
,
5264 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
5266 IN BOOLEAN WriteToDevice
);
5270 HalPutScatterGatherList(
5271 IN PADAPTER_OBJECT DmaAdapter
,
5272 IN PSCATTER_GATHER_LIST ScatterGather
,
5273 IN BOOLEAN WriteToDevice
);
5275 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5277 #if (NTDDI_VERSION >= NTDDI_WINXP)
5282 IN PDEVICE_OBJECT DeviceObject
,
5283 IN ULONG SectorSize
,
5284 IN ULONG MBRTypeIdentifier
,
5288 #if (NTDDI_VERSION >= NTDDI_WIN7)
5292 HalAllocateHardwareCounters(
5293 IN PGROUP_AFFINITY GroupAffinty
,
5294 IN ULONG GroupCount
,
5295 IN PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList
,
5296 OUT PHANDLE CounterSetHandle
);
5300 HalFreeHardwareCounters(
5301 IN HANDLE CounterSetHandle
);
5308 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5312 HalGetDmaAlignmentRequirement(VOID
);
5314 #endif /* defined(_IA64_) */
5316 #if defined(_M_IX86) || defined(_M_AMD64)
5317 #define HalGetDmaAlignmentRequirement() 1L
5320 #if (NTDDI_VERSION >= NTDDI_WIN7)
5322 typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR
*PWHEA_ERROR_SOURCE_DESCRIPTOR
;
5323 typedef struct _WHEA_ERROR_RECORD
*PWHEA_ERROR_RECORD
;
5329 IN PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource
,
5330 IN PWHEA_ERROR_RECORD ErrorRecord
);
5334 typedef struct _WHEA_ERROR_RECORD
*PWHEA_ERROR_RECORD
;
5340 IN PWHEA_ERROR_RECORD ErrorRecord
);
5342 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
5344 /* ZwXxx Functions */
5349 ZwAllocateLocallyUniqueId(
5356 IN HANDLE ProcessHandle OPTIONAL
,
5357 IN NTSTATUS ExitStatus
);
5363 OUT PHANDLE ProcessHandle
,
5364 IN ACCESS_MASK DesiredAccess
,
5365 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5366 IN PCLIENT_ID ClientId OPTIONAL
);
5368 #if (NTDDI_VERSION >= NTDDI_WIN2K)
5373 IN HANDLE TimerHandle
,
5374 OUT PBOOLEAN CurrentState OPTIONAL
);
5379 OUT PHANDLE TimerHandle
,
5380 IN ACCESS_MASK DesiredAccess
,
5381 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
5382 IN TIMER_TYPE TimerType
);
5387 OUT PHANDLE TimerHandle
,
5388 IN ACCESS_MASK DesiredAccess
,
5389 IN POBJECT_ATTRIBUTES ObjectAttributes
);
5394 ZwSetInformationThread(
5395 IN HANDLE ThreadHandle
,
5396 IN THREADINFOCLASS ThreadInformationClass
,
5397 IN PVOID ThreadInformation
,
5398 IN ULONG ThreadInformationLength
);
5403 IN HANDLE TimerHandle
,
5404 IN PLARGE_INTEGER DueTime
,
5405 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
5406 IN PVOID TimerContext OPTIONAL
,
5407 IN BOOLEAN ResumeTimer
,
5408 IN LONG Period OPTIONAL
,
5409 OUT PBOOLEAN PreviousState OPTIONAL
);
5415 IN PUNICODE_STRING String
);
5421 IN POWER_INFORMATION_LEVEL PowerInformationLevel
,
5422 IN PVOID InputBuffer OPTIONAL
,
5423 IN ULONG InputBufferLength
,
5424 OUT PVOID OutputBuffer OPTIONAL
,
5425 IN ULONG OutputBufferLength
);
5430 ZwQueryVolumeInformationFile(
5431 IN HANDLE FileHandle
,
5432 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5433 OUT PVOID FsInformation
,
5435 IN FS_INFORMATION_CLASS FsInformationClass
);
5440 ZwDeviceIoControlFile(
5441 IN HANDLE FileHandle
,
5442 IN HANDLE Event OPTIONAL
,
5443 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
5444 IN PVOID ApcContext OPTIONAL
,
5445 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5446 IN ULONG IoControlCode
,
5447 IN PVOID InputBuffer OPTIONAL
,
5448 IN ULONG InputBufferLength
,
5449 OUT PVOID OutputBuffer OPTIONAL
,
5450 IN ULONG OutputBufferLength
);
5452 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
5454 #if (NTDDI_VERSION >= NTDDI_WIN7)
5458 IN HANDLE TimerHandle
,
5459 IN TIMER_SET_INFORMATION_CLASS TimerSetInformationClass
,
5460 IN OUT PVOID TimerSetInformation
,
5461 IN ULONG TimerSetInformationLength
);
5466 extern NTKERNELAPI PVOID MmHighestUserAddress
;
5467 extern NTKERNELAPI PVOID MmSystemRangeStart
;
5468 extern NTKERNELAPI ULONG MmUserProbeAddress
;
5470 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
5471 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
5472 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
5473 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
5474 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
5476 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
5478 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
5479 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
5480 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
5481 #if !defined (_X86PAE_)
5482 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
5484 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
5487 #define KeGetPcr() PCR
5489 #define PCR_MINOR_VERSION 1
5490 #define PCR_MAJOR_VERSION 1
5492 typedef struct _KPCR
{
5496 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
5497 PVOID Used_StackBase
;
5500 ULONG ContextSwitches
;
5501 KAFFINITY SetMemberCopy
;
5505 struct _KPCR
*SelfPcr
;
5506 struct _KPRCB
*Prcb
;
5511 PVOID KdVersionBlock
;
5512 struct _KIDTENTRY
*IDT
;
5513 struct _KGDTENTRY
*GDT
;
5515 USHORT MajorVersion
;
5516 USHORT MinorVersion
;
5517 KAFFINITY SetMember
;
5518 ULONG StallScaleFactor
;
5522 UCHAR SecondLevelCacheAssociativity
;
5524 ULONG KernelReserved
[14];
5525 ULONG SecondLevelCacheSize
;
5526 ULONG HalReserved
[16];
5531 KeGetCurrentProcessorNumber(VOID
)
5533 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
5536 typedef enum _INTERLOCKED_RESULT
{
5537 ResultNegative
= RESULT_NEGATIVE
,
5538 ResultZero
= RESULT_ZERO
,
5539 ResultPositive
= RESULT_POSITIVE
5540 } INTERLOCKED_RESULT
;
5545 Exfi386InterlockedIncrementLong(
5546 IN OUT LONG
volatile *Addend
);
5551 Exfi386InterlockedDecrementLong(
5557 Exfi386InterlockedExchangeUlong(
5565 #define PTI_SHIFT 12L
5566 #define PDI_SHIFT 21L
5567 #define PPI_SHIFT 30L
5568 #define PXI_SHIFT 39L
5569 #define PTE_PER_PAGE 512
5570 #define PDE_PER_PAGE 512
5571 #define PPE_PER_PAGE 512
5572 #define PXE_PER_PAGE 512
5573 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
5574 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
5575 #define PPI_MASK (PPE_PER_PAGE - 1)
5576 #define PXI_MASK (PXE_PER_PAGE - 1)
5578 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
5579 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
5580 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
5581 #define PDE_BASE 0xFFFFF6FB40000000ULL
5582 #define PTE_BASE 0xFFFFF68000000000ULL
5583 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
5584 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
5585 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
5586 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
5588 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
5589 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
5590 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
5591 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
5592 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
5593 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
5595 typedef struct _KPCR
5597 _ANONYMOUS_UNION
union
5600 _ANONYMOUS_STRUCT
struct
5602 union _KGDTENTRY64
*GdtBase
;
5603 struct _KTSS64
*TssBase
;
5606 struct _KPRCB
*CurrentPrcb
;
5607 PKSPIN_LOCK_QUEUE LockArray
;
5611 union _KIDTENTRY64
*IdtBase
;
5614 UCHAR SecondLevelCacheAssociativity
;
5615 UCHAR ObsoleteNumber
;
5618 USHORT MajorVersion
;
5619 USHORT MinorVersion
;
5620 ULONG StallScaleFactor
;
5622 ULONG KernelReserved
[15];
5623 ULONG SecondLevelCacheSize
;
5624 ULONG HalReserved
[16];
5626 PVOID KdVersionBlock
;
5628 ULONG PcrAlign1
[24];
5635 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
5640 KeGetCurrentProcessorNumber(VOID
)
5642 return (ULONG
)__readgsword(0x184);
5645 #endif /* _AMD64_ */