This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/WATCOM/h/nt/ddk/ntddk.h

5073 lines
202 KiB
C
Raw Permalink Normal View History

/*
* ntddk.h NT Device Driver Kit (DDK) functions
*
* =========================================================================
*
* Open Watcom Project
*
* Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
*
* This file is automatically generated. Do not edit directly.
*
* =========================================================================
*/
#ifndef _NTDDK_
#define _NTDDK_
#ifndef _ENABLE_AUTODEPEND
#pragma read_only_file;
#endif
#include <wdm.h>
#include <mce.h>
#ifdef __cplusplus
extern "C" {
#endif
/* Primitive data types */
typedef GUID UUID;
typedef ULONG NODE_REQUIREMENT;
/* Kernel stack sizes */
#ifdef _X86_
#define KERNEL_STACK_SIZE 12288
#define KERNEL_LARGE_STACK_SIZE 61440
#define KERNEL_LARGE_STACK_COMMIT 12288
#endif
/* Size of the 80387 registers in the x86 context record */
#ifdef _X86_
#define SIZE_OF_80387_REGISTERS 80
#endif
/* Context flags for the x86 processor */
#ifdef _X86_
#define CONTEXT_i386 0x00010000L
#define CONTEXT_i486 0x00010000L
#define CONTEXT_CONTROL (CONTEXT_i386 | 0x00000001L)
#define CONTEXT_INTEGER (CONTEXT_i386 | 0x00000002L)
#define CONTEXT_SEGMENTS (CONTEXT_i386 | 0x00000004L)
#define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 0x00000008L)
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x00000010L)
#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386 | 0x00000020L)
#define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L)
#define CONTEXT_FULL \
(CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
#define CONTEXT_ALL \
(CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \
CONTEXT_EXTENDED_REGISTERS)
#endif
/* Unsolicited input privilege */
#define SE_UNSOLICITED_INPUT_PRIVILEGE 6L
/* Run once initializer */
#define RTL_RUN_ONCE_INIT { 0 }
/* Run once flags */
#define RTL_RUN_ONCE_CHECK_ONLY 0x00000001L
#define RTL_RUN_ONCE_ASYNC 0x00000002L
#define RTL_RUN_ONCE_INIT_FAILED 0x00000004L
/* Hash flags */
#define RTL_HASH_ALLOCATED_HEADER 0x00000001L
/* Stack walking mode frames to skip shift */
#define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8
/* Version comparison operators */
#define VER_EQUAL 1
#define VER_GREATER 2
#define VER_GREATER_EQUAL 3
#define VER_LESS 4
#define VER_LESS_EQUAL 5
#define VER_AND 6
#define VER_OR 7
/* Version information types */
#define VER_MINORVERSION 0x00000001L
#define VER_MAJORVERSION 0x00000002L
#define VER_BUILDNUMBER 0x00000004L
#define VER_PLATFORMID 0x00000008L
#define VER_SERVICEPACKMINOR 0x00000010L
#define VER_SERVICEPACKMAJOR 0x00000020L
#define VER_SUITENAME 0x00000040L
#define VER_PRODUCT_TYPE 0x00000080L
/* Version product types */
#define VER_NT_WORKSTATION 0x01
#define VER_NT_DOMAIN_CONTROLLER 0x02
#define VER_NT_SERVER 0x03
/* Version platform identifiers */
#define VER_PLATFORM_WIN32s 0L
#define VER_PLATFORM_WIN32_WINDOWS 1L
#define VER_PLATFORM_WIN32_NT 2L
/* File device characteristics */
#if (NTDDI_VERSION >= 0x06010000)
#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000L
#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000L
#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
(FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200L
#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300L
#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300L
#else
#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200L
#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300L
#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300L
#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX \
FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX \
FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
#endif
#define FILE_CHARACTERISTICS_PROPAGATED \
(FILE_REMOVABLE_MEDIA | FILE_READ_ONLY_DEVICE | FILE_FLOPPY_DISKETTE | \
FILE_WRITE_ONCE_MEDIA | FILE_DEVICE_SECURE_OPEN)
/* AVIO device I/O control codes */
#define IOCTL_AVIO_ALLOCATE_STREAM \
CTL_CODE( FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS )
#define IOCTL_AVIO_FREE_STREAM \
CTL_CODE( FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS )
#define IOCTL_AVIO_MODIFY_STREAM \
CTL_CODE( FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS )
/* Process device map flags */
#define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001L
/* Maximum number of process handle tracing stacks */
#define PROCESS_HANDLE_TRACING_MAX_STACKS 16
/* Quota limits flags */
#define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001L
#define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002L
#define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004L
#define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008L
#define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010L
/* Maximum number of hardware counters */
#define MAX_HW_COUNTERS 16
/* Thread profiling flags */
#define THREAD_PROFILING_FLAG_DISPATCH 0x00000001L
/* Process exception port state flags */
#define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 3
#define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS \
((ULONG_PTR)((1 << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
/* Processor control region version numbers */
#ifdef _X86_
#define PCR_MINOR_VERSION 1
#define PCR_MAJOR_VERSION 1
#endif
/* Various shifts */
#ifdef _X86_
#define PDI_SHIFT_X86 22
#define PDI_SHIFT_X86PAE 21
#define PDI_SHIFT PDI_SHIFT_X86
#define PPI_SHIFT 30
#define PTI_SHIFT 12
#endif
/* Guard page size */
#ifdef _X86_
#define GUARD_PAGE_SIZE PAGE_SIZE
#endif
/* Memory management special addresses */
#ifdef _X86_
#define MM_SYSTEM_SPACE_END 0xFFFFFFFF
#define MM_LOWEST_USER_ADDRESS ((PVOID)0x00010000)
#define MM_LOWEST_SYSTEM_ADDRESS ((PVOID)0xC0C00000)
#endif
/* Driver verifier flags */
#define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
#define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
#define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
#define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
#define DRIVER_VERIFIER_IO_CHECKING 0x0010
/* Extended state features */
#define XSTATE_LEGACY_FLOATING_POINT 0
#define XSTATE_LEGACY_SSE 1
#define XSTATE_GSSE 2
#define MAXIMUM_XSTATE_FEATURES 64
/* Extended state feature masks */
#define XSTATE_MASK_LEGACY_FLOATING_POINT (1LL << XSTATE_LEGACY_FLOATING_POINT)
#define XSTATE_MASK_LEGACY_SSE (1LL << XSTATE_LEGACY_SSE)
#define XSTATE_MASK_GSSE (1LL << XSTATE_GSSE)
#define XSTATE_MASK_LEGACY \
(XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
/* Maximum number of WOW64 shared entries */
#define MAX_WOW64_SHARED_ENTRIES 16
/* NX support policy values */
#define NX_SUPPORT_POLICY_ALWAYSOFF 0
#define NX_SUPPORT_POLICY_ALWAYSON 1
#define NX_SUPPORT_POLICY_OPTIN 2
#define NX_SUPPORT_POLICY_OPTOUT 3
/* Shared global flags */
#define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0
#define SHARED_GLOBAL_FLAGS_ERROR_PORT 0x00000001L
#define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 1
#define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED 0x00000002L
#define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 2
#define SHARED_GLOBAL_FLAGS_VIRT_ENABLED 0x00000004L
#define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 3
#define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED 0x00000008L
#define SHARED_GLOBAL_FLAGS_SPARE_V 4
#define SHARED_GLOBAL_FLAGS_SPARE 0x00000010L
#define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 5
#define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED 0x00000020L
#define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 6
#define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED 0x00000040L
/* Maximum resource type */
#define CmResourceTypeMaximum 8
/* PC card flags */
#define PCCARD_MAP_ERROR 0x01
#define PCCARD_DEVICE_PCI 0x10
/* PC card error codes */
#define PCCARD_SCAN_DISABLED 0x01
#define PCCARD_MAP_ZERO 0x02
#define PCCARD_NO_TIMER 0x03
#define PCCARD_NO_PIC 0x04
#define PCCARD_NO_LEGACY_BASE 0x05
#define PCCARD_DUP_LEGACY_BASE 0x06
#define PCCARD_NO_CONTROLLERS 0x07
/* Maximum expansion size */
#define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2 ))
/* Pool tag high order bit */
#define PROTECTED_POOL 0x80000000L
/* Node requirement special value */
#define MM_ANY_NODE_OK 0x80000000L
/* Image addressing modes */
#define IMAGE_ADDRESSING_MODE_32BIT 3
/* I/O request packet minor function codes for directory control */
#define IRP_MN_QUERY_DIRECTORY 0x01
#define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
/* I/O request packet minor function codes for file system control */
#define IRP_MN_USER_FS_REQUEST 0x00
#define IRP_MN_MOUNT_VOLUME 0x01
#define IRP_MN_VERIFY_VOLUME 0x02
#define IRP_MN_LOAD_FILE_SYSTEM 0x03
#define IRP_MN_TRACK_LINK 0x04
#define IRP_MN_KERNEL_CALL 0x04
/* I/O request packet minor function codes for lock control */
#define IRP_MN_LOCK 0x01
#define IRP_MN_UNLOCK_SINGLE 0x02
#define IRP_MN_UNLOCK_ALL 0x03
#define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
/* I/O request packet flush minor function code */
#define IRP_MN_FLUSH_AND_PURGE 0x01
/* I/O request packet minor function codes for read and write */
#define IRP_MN_NORMAL 0x00
#define IRP_MN_DPC 0x01
#define IRP_MN_MDL 0x02
#define IRP_MN_COMPLETE 0x04
#define IRP_MN_COMPRESSED 0x08
#define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
#define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
#define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
#define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
/* I/O flags */
#define IO_CHECK_CREATE_PARAMETERS 0x0200
#define IO_ATTACH_DEVICE 0x0400
#define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800
/* Device object flags */
#define DO_DEVICE_HAS_NAME 0x00000040L
#define DO_SYSTEM_BOOT_PARTITION 0x00000100L
#define DO_LONG_TERM_REQUESTS 0x00000200L
#define DO_NEVER_LAST_DEVICE 0x00000400L
#define DO_LOW_PRIORITY_FILESYSTEM 0x00010000L
#define DO_SUPPORTS_TRANSACTIONS 0x00040000L
#define DO_FORCE_NEITHER_IO 0x00080000L
#define DO_VOLUME_DEVICE_OBJECT 0x00100000L
#define DO_SYSTEM_SYSTEM_PARTITION 0x00200000L
#define DO_SYSTEM_CRITICAL_PARTITION 0x00400000L
#define DO_DISALLOW_EXECUTE 0x00800000L
/* Driver object flags */
#define DRVO_REINIT_REGISTERED 0x00000008L
#define DRVO_INITIALIZED 0x00000010L
#define DRVO_BOOTREINIT_REGISTERED 0x00000020L
#define DRVO_LEGACY_RESOURCES 0x00000040L
/* Transaction file system context */
#define TXF_MINIVERSION_DEFAULT_VIEW 0xFFFE
/* Arbiter flags */
#define ARBITER_FLAG_BOOT_CONFIG 0x00000001L
/* Arbiter interface flags */
#define ARBITER_PARTIAL 0x00000001L
/* Hardware abstraction layer dispatch table version number */
#define HAL_DISPATCH_VERSION 4
/* Hardware abstraction layer MCE constants */
#ifdef _X86_
#define HAL_MCE_INTERRUPTS_BASED 0xFFFFFFFFL
#define HAL_MCE_DISABLED 0x00000000L
#define HAL_CMC_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
#define HAL_CMC_DISABLED HAL_MCE_DISABLED
#define HAL_CPE_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
#define HAL_CPE_DISABLED HAL_MCE_DISABLED
#define HAL_MCA_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
#define HAL_MCA_DISABLED HAL_MCE_DISABLED
#endif
/* Hardware abstraction layer platform flags */
#define HAL_PLATFORM_DISABLE_WRITE_COMBINING 0x00000001L
#define HAL_PLATFORM_DISABLE_PTCG 0x00000004L
#define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY 0x00000008L
#define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO 0x00000010L
#define HAL_PLATFORM_ACPI_TABLES_CACHED 0x00000020L
/* PCI AGP rates */
#define PCI_AGP_RATE_1X 0x00000001L
#define PCI_AGP_RATE_2X 0x00000002L
#define PCI_AGP_RATE_4X 0x00000004L
/* PCI bus mode frequencies */
#define PCIX_MODE_CONVENTIONAL_PCI 0x00000000L
#define PCIX_MODE1_66MHZ 0x00000001L
#define PCIX_MODE1_100MHZ 0x00000002L
#define PCIX_MODE1_133MHZ 0x00000003L
#define PCIX_MODE2_266_66MHZ 0x00000009L
#define PCIX_MODE2_266_100MHZ 0x0000000AL
#define PCIX_MODE2_266_133MHZ 0x0000000BL
#define PCIX_MODE2_533_66MHZ 0x0000000DL
#define PCIX_MODE2_533_100MHZ 0x0000000EL
#define PCIX_MODE2_533_133MHZ 0x0000000FL
/* PCI version numbers */
#define PCIX_VERSION_MODE1_ONLY 0x00000000L
#define PCIX_VERSION_MODE2_ECC 0x00000001L
#define PCIX_VERSION_DUAL_MODE_ECC 0x00000002L
/* OSC flags */
#define OSC_FIRMWARE_FAILURE 0x02
#define OSC_UNRECOGNIZED_UUID 0x04
#define OSC_UNRECOGNIZED_REVISION 0x08
#define OSC_CAPABILITIES_MASKED 0x10
/* PCI root bus OSC method capability revision */
#define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01
/* PCI data tag and version number */
#define PCI_DATA_TAG ' ICP'
#define PCI_DATA_VERSION 1
/* PCI bus interface standard version number */
#define PCI_BUS_INTERFACE_STANDARD_VERSION 1
/* Error types */
#define ERRTYP_INTERNAL 0x01
#define ERRTYP_BUS 0x10
#define ERRTYP_MEM 0x04
#define ERRTYP_TLB 0x05
#define ERRTYP_CACHE 0x06
#define ERRTYP_FUNCTION 0x07
#define ERRTYP_SELFTEST 0x08
#define ERRTYP_FLOW 0x09
#define ERRTYP_MAP 0x11
#define ERRTYP_IMPROPER 0x12
#define ERRTYP_UNIMPL 0x13
#define ERRTYP_LOSSOFLOCKSTEP 0x14
#define ERRTYP_RESPONSE 0x15
#define ERRTYP_PARITY 0x16
#define ERRTYP_PROTOCOL 0x17
#define ERRTYP_PATHERROR 0x18
#define ERRTYP_TIMEOUT 0x19
#define ERRTYP_POISONED 0x1A
/* Generic processor types */
#define GENPROC_PROCTYPE_XPF 0
#define GENPROC_PROCTYPE_IPF 1
/* Generic processor instruction sets */
#define GENPROC_PROCISA_X86 0
#define GENPROC_PROCISA_IPF 1
#define GENPROC_PROCISA_X64 2
/* Generic processor error types */
#define GENPROC_PROCERRTYPE_UNKNOWN 0
#define GENPROC_PROCERRTYPE_CACHE 1
#define GENPROC_PROCERRTYPE_TLB 2
#define GENPROC_PROCERRTYPE_BUS 4
#define GENPROC_PROCERRTYPE_MAE 8
/* Generic processor operations */
#define GENPROC_OP_GENERIC 0
#define GENPROC_OP_DATAREAD 1
#define GENPROC_OP_DATAWRITE 2
#define GENPROC_OP_INSTRUCTIONEXE 3
/* Generic processor flags */
#define GENPROC_FLAGS_RESTARTABLE 0x01
#define GENPROC_FLAGS_PRECISEIP 0x02
#define GENPROC_FLAGS_OVERFLOW 0x04
#define GENPROC_FLAGS_CORRECTED 0x08
/* XPF cache check transaction types */
#define XPF_CACHE_CHECK_TRANSACTIONTYPE_INSTRUCTION 0
#define XPF_CACHE_CHECK_TRANSACTIONTYPE_DATAACCESS 1
#define XPF_CACHE_CHECK_TRANSACTIONTYPE_GENERIC 2
/* XPF cache check operations */
#define XPF_CACHE_CHECK_OPERATION_GENERIC 0
#define XPF_CACHE_CHECK_OPERATION_GENREAD 1
#define XPF_CACHE_CHECK_OPERATION_GENWRITE 2
#define XPF_CACHE_CHECK_OPERATION_DATAREAD 3
#define XPF_CACHE_CHECK_OPERATION_DATAWRITE 4
#define XPF_CACHE_CHECK_OPERATION_INSTRUCTIONFETCH 5
#define XPF_CACHE_CHECK_OPERATION_PREFETCH 6
#define XPF_CACHE_CHECK_OPERATION_EVICTION 7
#define XPF_CACHE_CHECK_OPERATION_SNOOP 8
/* XPF TLB check transaction types */
#define XPF_TLB_CHECK_TRANSACTIONTYPE_INSTRUCTION 0
#define XPF_TLB_CHECK_TRANSACTIONTYPE_DATAACCESS 1
#define XPF_TLB_CHECK_TRANSACTIONTYPE_GENERIC 2
/* XPF TLB check operations */
#define XPF_TLB_CHECK_OPERATION_GENERIC 0
#define XPF_TLB_CHECK_OPERATION_GENREAD 1
#define XPF_TLB_CHECK_OPERATION_GENWRITE 2
#define XPF_TLB_CHECK_OPERATION_DATAREAD 3
#define XPF_TLB_CHECK_OPERATION_DATAWRITE 4
#define XPF_TLB_CHECK_OPERATION_INSTRUCTIONFETCH 5
#define XPF_TLB_CHECK_OPERATION_PREFETCH 6
/* XPF bus check transaction types */
#define XPF_BUS_CHECK_TRANSACTIONTYPE_INSTRUCTION 0
#define XPF_BUS_CHECK_TRANSACTIONTYPE_DATAACCESS 1
#define XPF_BUS_CHECK_TRANSACTIONTYPE_GENERIC 2
/* XPF bus check operations */
#define XPF_BUS_CHECK_OPERATION_GENERIC 0
#define XPF_BUS_CHECK_OPERATION_GENREAD 1
#define XPF_BUS_CHECK_OPERATION_GENWRITE 2
#define XPF_BUS_CHECK_OPERATION_DATAREAD 3
#define XPF_BUS_CHECK_OPERATION_DATAWRITE 4
#define XPF_BUS_CHECK_OPERATION_INSTRUCTIONFETCH 5
#define XPF_BUS_CHECK_OPERATION_PREFETCH 6
/* XPF bus check participation types */
#define XPF_BUS_CHECK_PARTICIPATION_PROCORIGINATED 0
#define XPF_BUS_CHECK_PARTICIPATION_PROCRESPONDED 1
#define XPF_BUS_CHECK_PARTICIPATION_PROCOBSERVED 2
#define XPF_BUS_CHECK_PARTICIPATION_GENERIC 3
/* XPF bus check address spaces */
#define XPF_BUS_CHECK_ADDRESS_MEMORY 0
#define XPF_BUS_CHECK_ADDRESS_RESERVED 1
#define XPF_BUS_CHECK_ADDRESS_IO 2
#define XPF_BUS_CHECK_ADDRESS_OTHER 3
/* XPF micro-architecture specific check error types */
#define XPF_MS_CHECK_ERRORTYPE_NOERROR 0
#define XPF_MS_CHECK_ERRORTYPE_UNCLASSIFIED 1
#define XPF_MS_CHECK_ERRORTYPE_MCROMPARITY 2
#define XPF_MS_CHECK_ERRORTYPE_EXTERNAL 3
#define XPF_MS_CHECK_ERRORTYPE_FRC 4
#define XPF_MS_CHECK_ERRORTYPE_INTERNALUNCLASSIFIED 5
/* XPF context information constants */
#define XPF_CONTEXT_INFO_UNCLASSIFIEDDATA 0
#define XPF_CONTEXT_INFO_MSRREGISTERS 1
#define XPF_CONTEXT_INFO_32BITCONTEXT 2
#define XPF_CONTEXT_INFO_64BITCONTEXT 3
#define XPF_CONTEXT_INFO_FXSAVE 4
#define XPF_CONTEXT_INFO_32BITDEBUGREGS 5
#define XPF_CONTEXT_INFO_64BITDEBUGREGS 6
#define XPF_CONTEXT_INFO_MMREGISTERS 7
/* Windows Hardware Error Architecture memory error types */
#define WHEA_MEMERRTYPE_UNKNOWN 0x00
#define WHEA_MEMERRTYPE_NOERROR 0x01
#define WHEA_MEMERRTYPE_SINGLEBITECC 0x02
#define WHEA_MEMERRTYPE_MULTIBITECC 0x03
#define WHEA_MEMERRTYPE_SINGLESYMCHIPKILL 0x04
#define WHEA_MEMERRTYPE_MULTISYMCHIPKILL 0x05
#define WHEA_MEMERRTYPE_MASTERABORT 0x06
#define WHEA_MEMERRTYPE_TARGETABORT 0x07
#define WHEA_MEMERRTYPE_PARITYERROR 0x08
#define WHEA_MEMERRTYPE_WATCHDOGTIMEOUT 0x09
#define WHEA_MEMERRTYPE_INVALIDADDRESS 0x0A
#define WHEA_MEMERRTYPE_MIRRORBROKEN 0x0B
#define WHEA_MEMERRTYPE_MEMORYSPARING 0x0C
/* Windows Hardware Error Architecture error source descriptor version number */
#define WHEA_ERROR_SOURCE_DESCRIPTOR_VERSION_10 10
/* Maximum number of MC banks */
#define WHEA_MAX_MC_BANKS 32
/* Windows Hardware Error Architecture error source flags */
#define WHEA_ERROR_SOURCE_FLAG_FIRMWAREFIRST 0x00000001L
#define WHEA_ERROR_SOURCE_FLAG_GLOBAL 0x00000002L
#define WHEA_ERROR_SOURCE_FLAG_PREALLOCATE_PER_PROCESSOR 0x00000004L
#define WHEA_ERROR_SOURCE_FLAG_DEFAULTSOURCE 0x80000000L
/* Windows Hardware Error Architecture error source descriptor types */
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_XPFMCE 0L
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_XPFCMC 1L
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_XPFNMI 2L
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_IPFMCA 3L
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_IPFCMC 4L
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_IPFCPE 5L
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_AERROOTPORT 6L
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_AERENDPOINT 7L
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_AERBRIDGE 8L
#define WHEA_ERROR_SOURCE_DESCRIPTOR_TYPE_GENERIC 9L
/* Windows Hardware Error Architecture XPF MC bank status formats */
#define WHEA_XPF_MC_BANK_STATUSFORMAT_IA32MCA 0L
#define WHEA_XPF_MC_BANK_STATUSFORMAT_Intel64MCA 1L
#define WHEA_XPF_MC_BANK_STATUSFORMAT_AMD64MCA 2L
/* Windows Hardware Error Architecture notification types */
#define WHEA_NOTIFICATION_TYPE_POLLED 0L
#define WHEA_NOTIFICATION_TYPE_EXTERNALINTERRUPT 1L
#define WHEA_NOTIFICATION_TYPE_LOCALINTERRUPT 2L
#define WHEA_NOTIFICATION_TYPE_SCI 3L
#define WHEA_NOTIFICATION_TYPE_NMI 4L
/* Windows Hardware Error Architecture section descriptor flags */
#define WHEA_SECTION_DESCRIPTOR_FLAGS_PRIMARY 0x00000001L
#define WHEA_SECTION_DESCRIPTOR_FLAGS_CONTAINMENTWRN 0x00000002L
#define WHEA_SECTION_DESCRIPTOR_FLAGS_RESET 0x00000004L
#define WHEA_SECTION_DESCRIPTOR_FLAGS_THRESHOLDEXCEEDED 0x00000008L
#define WHEA_SECTION_DESCRIPTOR_FLAGS_RESOURCENA 0x00000010L
#define WHEA_SECTION_DESCRIPTOR_FLAGS_LATENTERROR 0x00000020L
/* Windows Hardware Error Architecture section descriptor revision */
#define WHEA_ERROR_RECORD_SECTION_DESCRIPTOR_REVISION 0x0201
#if WHEA_DOWNLEVEL_TYPE_NAMES
#define WHEA_SECTION_DESCRIPTOR_REVISION \
WHEA_ERROR_RECORD_SECTION_DESCRIPTOR_REVISION
#endif
/* Windows Hardware Error Architecture error record flags */
#define WHEA_ERROR_RECORD_FLAGS_RECOVERED 0x00000001L
#define WHEA_ERROR_RECORD_FLAGS_PREVIOUSERROR 0x00000002L
#define WHEA_ERROR_RECORD_FLAGS_SIMULATED 0x00000004L
/* Windows Hardware Error Architecture error record validation flags */
#define WHEA_ERROR_RECORD_VALID_PLATFORMID 0x00000001L
#define WHEA_ERROR_RECORD_VALID_TIMESTAMP 0x00000002L
#define WHEA_ERROR_RECORD_VALID_PARTITIONID 0x00000004L
/* Windows Hardware Error Architecture error record signature and revision number */
#define WHEA_ERROR_RECORD_SIGNATURE 'REPC'
#define WHEA_ERROR_RECORD_REVISON 0x0210
#define WHEA_ERROR_RECORD_SIGNATURE_END 0xFFFFFFFFL
/* PCIX bus error types */
#define PCIXBUS_ERRTYPE_UNKNOWN 0x0000
#define PCIXBUS_ERRTYPE_DATAPARITY 0x0001
#define PCIXBUS_ERRTYPE_SYSTEM 0x0002
#define PCIXBUS_ERRTYPE_MASTERABORT 0x0003
#define PCIXBUS_ERRTYPE_BUSTIMEOUT 0x0004
#define PCIXBUS_ERRTYPE_MASTERDATAPARITY 0x0005
#define PCIXBUS_ERRTYPE_ADDRESSPARITY 0x0006
#define PCIXBUS_ERRTYPE_COMMANDPARITY 0x0007
/* Windows Hardware Error Architecture firmware record types */
#define WHEA_FIRMWARE_RECORD_TYPE_IPFSAL 0
/* Maximum number of XPF MCA extended registers */
#define WHEA_XPF_MCA_EXTREG_MAX_COUNT 24
/* Windows Hardware Error Architecture XPF MCA section version number */
#define WHEA_XPF_MCA_SECTION_VERSION 1L
/* Windows Hardware Error Architecture error packet version numbers and signatures */
#define WHEA_ERROR_PACKET_V1_SIGNATURE 'tPrE'
#define WHEA_ERROR_PACKET_V1_VERSION 2L
#define WHEA_ERROR_PACKET_V2_SIGNATURE 'AEHW'
#define WHEA_ERROR_PACKET_V2_VERSION 3L
#if (NTDDI_VERSION >= 0x06010000)
#define WHEA_ERROR_PACKET_SIGNATURE WHEA_ERROR_PACKET_V2_SIGNATURE
#define WHEA_ERROR_PACKET_VERSION WHEA_ERROR_PACKET_V2_VERSION
#else
#define WHEA_ERROR_PACKET_SIGNATURE WHEA_ERROR_PACKET_V1_SIGNATURE
#define WHEA_ERROR_PACKET_VERSION WHEA_ERROR_PACKET_V1_VERSION
#define WHEA_ERROR_PKT_SIGNATURE WHEA_ERROR_PACKET_SIGNATURE
#define WHEA_ERROR_PKT_VERSION WHEA_ERROR_PACKET_VERSION
#endif
/* Injection error types */
#define INJECT_ERRTYPE_PROCESSOR_CORRECTABLE 0x00000001L
#define INJECT_ERRTYPE_PROCESSOR_UNCORRECTABLENONFATAL 0x00000002L
#define INJECT_ERRTYPE_PROCESSOR_UNCORRECTABLEFATAL 0x00000004L
#define INJECT_ERRTYPE_MEMORY_CORRECTABLE 0x00000008L
#define INJECT_ERRTYPE_MEMORY_UNCORRECTABLENONFATAL 0x00000010L
#define INJECT_ERRTYPE_MEMORY_UNCORRECTABLEFATAL 0x00000020L
#define INJECT_ERRTYPE_PCIEXPRESS_CORRECTABLE 0x00000040L
#define INJECT_ERRTYPE_PCIEXPRESS_UNCORRECTABLENONFATAL 0x00000080L
#define INJECT_ERRTYPE_PCIEXPRESS_UNCORRECTABLEFATAL 0x00000100L
#define INJECT_ERRTYPE_PLATFORM_CORRECTABLE 0x00000200L
#define INJECT_ERRTYPE_PLATFORM_UNCORRECTABLENONFATAL 0x00000400L
#define INJECT_ERRTYPE_PLATFORM_UNCORRECTABLEFATAL 0x00000800L
/* Windows Hardware Error Architecture plugin registration packet version number */
#define WHEA_PLUGIN_REGISTRATION_PACKET_VERSION 0x00010000L
/* PSHED functional area mask flags */
#define PshedFADiscovery 0x00000001L
#define PshedFAErrorSourceControl 0x00000002L
#define PshedFAErrorRecordPersistence 0x00000004L
#define PshedFAErrorInfoRetrieval 0x00000008L
#define PshedFAErrorRecovery 0x00000010L
#define PshedFAErrorInjection 0x00000020L
/* Opaque data types */
typedef struct _PEB *PPEB;
typedef struct _BUS_HANDLER *PBUS_HANDLER;
#if (NTDDI_VERSION >= 0x06010000)
typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR *PWHEA_ERROR_SOURCE_DESCRIPTOR;
#endif
/* Floating save area for the x86 context */
#ifdef _X86_
typedef struct _FLOATING_SAVE_AREA {
ULONG ControlWord;
ULONG StatusWord;
ULONG TagWord;
ULONG ErrorOffset;
ULONG ErrorSelector;
ULONG DataOffset;
ULONG DataSelector;
UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
ULONG Cr0NpxState;
} FLOATING_SAVE_AREA;
typedef FLOATING_SAVE_AREA *PFLOATING_SAVE_AREA;
#endif
/* Context record for the x86 processor */
#ifdef _X86_
typedef struct _CONTEXT {
ULONG ContextFlags;
ULONG Dr0;
ULONG Dr1;
ULONG Dr2;
ULONG Dr3;
ULONG Dr6;
ULONG Dr7;
FLOATING_SAVE_AREA FloatSave;
ULONG SegGs;
ULONG SegFs;
ULONG SegEs;
ULONG SegDs;
ULONG Edi;
ULONG Esi;
ULONG Ebx;
ULONG Edx;
ULONG Ecx;
ULONG Eax;
ULONG Ebp;
ULONG Eip;
ULONG SegCs;
ULONG EFlags;
ULONG Esp;
ULONG SegSs;
UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
} CONTEXT;
typedef CONTEXT *PCONTEXT;
#endif
/* Well known SID types */
typedef enum {
WinNullSid = 0,
WinWorldSid = 1,
WinLocalSid = 2,
WinCreatorOwnerSid = 3,
WinCreatorGroupSid = 4,
WinCreatorOwnerServerSid = 5,
WinCreatorGroupServerSid = 6,
WinNtAuthoritySid = 7,
WinDialupSid = 8,
WinNetworkSid = 9,
WinBatchSid = 10,
WinInteractiveSid = 11,
WinServiceSid = 12,
WinAnonymousSid = 13,
WinProxySid = 14,
WinEnterpriseControllersSid = 15,
WinSelfSid = 16,
WinAuthenticatedUserSid = 17,
WinRestrictedCodeSid = 18,
WinTerminalServerSid = 19,
WinRemoteLogonIdSid = 20,
WinLogonIdsSid = 21,
WinLocalSystemSid = 22,
WinLocalServiceSid = 23,
WinNetworkServiceSid = 24,
WinBuiltinDomainSid = 25,
WinBuiltinAdministratorsSid = 26,
WinBuiltinUsersSid = 27,
WinBuiltinGuestsSid = 28,
WinBuiltinPowerUsersSid = 29,
WinBuiltinAccountOperatorsSid = 30,
WinBuiltinSystemOperatorsSid = 31,
WinBuiltinPrintOperatorsSid = 32,
WinBuiltinBackupOperatorsSid = 33,
WinBuiltinReplicatorSid = 34,
WinBuiltinPreWindows2000CompatibleAccessSid = 35,
WinBuiltinRemoteDesktopUsersSid = 36,
WinBuiltinNetworkConfigurationOperatorsSid = 37,
WinAccountAdministratorSid = 38,
WinAccountGuestSid = 39,
WinAccountKrbtgtSid = 40,
WinAccountDomainAdminsSid = 41,
WinAccountDomainUsersSid = 42,
WinAccountDomainGuestsSid = 43,
WinAccountComputersSid = 44,
WinAccountControllersSid = 45,
WinAccountCertAdminsSid = 46,
WinAccountSchemaAdminsSid = 47,
WinAccountEnterpriseAdminsSid = 48,
WinAccountPolicyAdminsSid = 49,
WinAccountRasAndIasServersSid = 50,
WinNTLMAuthenticationSid = 51,
WinDigestAuthenticationSid = 52,
WinSChannelAuthenticationSid = 53,
WinThisOrganizationSid = 54,
WinOtherOrganizationSid = 55,
WinBuiltinIncomingForestTrustBuildersSid = 56,
WinBuiltinPerfMonitoringUsersSid = 57,
WinBuiltinPerfLoggingUsersSid = 58,
WinBuiltinAuthorizationAccessSid = 59,
WinBuiltinTerminalServerLicenseServersSid = 60,
WinBuiltinDCOMUsersSid = 61,
WinBuiltinIUsersSid = 62,
WinIUserSid = 63,
WinBuiltinCryptoOperatorsSid = 64,
WinUntrustedLabelSid = 65,
WinLowLabelSid = 66,
WinMediumLabelSid = 67,
WinHighLabelSid = 68,
WinSystemLabelSid = 69,
WinWriteRestrictedCodeSid = 70,
WinCreatorOwnerRightsSid = 71,
WinCacheablePrincipalsGroupSid = 72,
WinNonCacheablePrincipalsGroupSid = 73,
WinEnterpriseReadonlyControllersSid = 74,
WinAccountReadonlyControllersSid = 75,
WinBuiltinEventLogReadersGroup = 76,
WinNewEnterpriseReadonlyControllersSid = 77,
WinBuiltinCertSvcDComAccessGroup = 78,
WinMediumPlusLabelSid = 79,
WinLocalLogonSid = 80,
WinConsoleLogonSid = 81,
WinThisOrganizationCertificateSid = 82
} WELL_KNOWN_SID_TYPE;
/* Run once */
typedef union _RTL_RUN_ONCE {
PVOID Ptr;
} RTL_RUN_ONCE;
typedef RTL_RUN_ONCE *PRTL_RUN_ONCE;
/* Run once initialization function */
typedef ULONG (NTAPI RTL_RUN_ONCE_INIT_FN)( PRTL_RUN_ONCE, PVOID, PVOID * );
typedef RTL_RUN_ONCE_INIT_FN *PRTL_RUN_ONCE_INIT_FN;
/* Table search results */
typedef enum _TABLE_SEARCH_RESULT {
TableEmptyTree = 0,
TableFoundNode = 1,
TableInsertAsLeft = 2,
TableInsertAsRight = 3
} TABLE_SEARCH_RESULT;
/* Generic compare results */
typedef enum _RTL_GENERIC_COMPARE_RESULTS {
GenericLessThan = 0,
GenericGreaterThan = 1,
GenericEqual = 2
} RTL_GENERIC_COMPARE_RESULTS;
/* AVL callbacks */
typedef RTL_GENERIC_COMPARE_RESULTS (NTAPI RTL_AVL_COMPARE_ROUTINE)( struct _RTL_AVL_TABLE *, PVOID, PVOID );
typedef PVOID (NTAPI RTL_AVL_ALLOCATE_ROUTINE)( struct _RTL_AVL_TABLE *, CLONG );
typedef VOID (NTAPI RTL_AVL_FREE_ROUTINE)( struct _RTL_AVL_TABLE *, PVOID );
typedef NTSTATUS (NTAPI RTL_AVL_MATCH_FUNCTION)( struct _RTL_AVL_TABLE *, PVOID, PVOID );
typedef RTL_AVL_COMPARE_ROUTINE *PRTL_AVL_COMPARE_ROUTINE;
typedef RTL_AVL_ALLOCATE_ROUTINE *PRTL_AVL_ALLOCATE_ROUTINE;
typedef RTL_AVL_FREE_ROUTINE *PRTL_AVL_FREE_ROUTINE;
typedef RTL_AVL_MATCH_FUNCTION *PRTL_AVL_MATCH_FUNCTION;
#ifdef RTL_USE_AVL_TABLES
#define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
#define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
#define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
#define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
#define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
#define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
#endif
/* Balacned links */
typedef struct _RTL_BALANCED_LINKS {
struct _RTL_BALANCED_LINKS *Parent;
struct _RTL_BALANCED_LINKS *LeftChild;
struct _RTL_BALANCED_LINKS *RightChild;
CHAR Balance;
UCHAR Reserved[3];
} RTL_BALANCED_LINKS;
typedef RTL_BALANCED_LINKS *PRTL_BALANCED_LINKS;
/* AVL table */
typedef struct _RTL_AVL_TABLE {
RTL_BALANCED_LINKS BalancedRoot;
PVOID OrderedPointer;
ULONG WhichOrderedElement;
ULONG NumberGenericTableElements;
ULONG DepthOfTree;
PRTL_BALANCED_LINKS RestartKey;
ULONG DeleteCount;
PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
PRTL_AVL_FREE_ROUTINE FreeRoutine;
PVOID TableContext;
} RTL_AVL_TABLE;
typedef RTL_AVL_TABLE *PRTL_AVL_TABLE;
#ifdef RTL_USE_AVL_TABLES
#define RTL_GENERIC_TABLE RTL_AVL_TABLE
#define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
#endif
/* Splay links */
typedef struct _RTL_SPLAY_LINKS {
struct _RTL_SPLAY_LINKS *Parent;
struct _RTL_SPLAY_LINKS *LeftChild;
struct _RTL_SPLAY_LINKS *RightChild;
} RTL_SPLAY_LINKS;
typedef RTL_SPLAY_LINKS *PRTL_SPLAY_LINKS;
/* Generic table callbacks */
#ifndef RTL_USE_AVL_TABLES
typedef RTL_GENERIC_COMPARE_RESULTS (NTAPI RTL_GENERIC_COMPARE_ROUTINE)( struct _RTL_GENERIC_TABLE *, PVOID, PVOID );
typedef PVOID (NTAPI RTL_GENERIC_ALLOCATE_ROUTINE)( struct _RTL_GENERIC_TABLE *, CLONG );
typedef VOID (NTAPI RTL_GENERIC_FREE_ROUTINE)( struct _RTL_GENERIC_TABLE *, PVOID );
typedef RTL_GENERIC_COMPARE_ROUTINE *PRTL_GENERIC_COMPARE_ROUTINE;
typedef RTL_GENERIC_ALLOCATE_ROUTINE *PRTL_GENERIC_ALLOCATE_ROUTINE;
typedef RTL_GENERIC_FREE_ROUTINE *PRTL_GENERIC_FREE_ROUTINE;
#endif
/* Generic table */
#ifndef RTL_USE_AVL_TABLES
typedef struct _RTL_GENERIC_TABLE {
PRTL_SPLAY_LINKS TableRoots;
LIST_ENTRY InsertOrderList;
PLIST_ENTRY OrderedPointer;
ULONG WhichOrderedElement;
ULONG NumberGenericTableElements;
PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
PVOID TableContext;
} RTL_GENERIC_TABLE;
typedef RTL_GENERIC_TABLE *PRTL_GENERIC_TABLE;
#endif
/* Dynamic hash table entry */
typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY {
LIST_ENTRY Linkage;
ULONG_PTR Signature;
} RTL_DYNAMIC_HASH_TABLE_ENTRY;
typedef RTL_DYNAMIC_HASH_TABLE_ENTRY *PRTL_DYNAMIC_HASH_TABLE_ENTRY;
/* Macro to manipulate hash entries */
#define HASH_ENTRY_KEY( x ) ((x)->Signature)
/* Dynamic hash table context */
typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT {
PLIST_ENTRY ChainHead;
PLIST_ENTRY PrevLinkage;
ULONG_PTR Signature;
} RTL_DYNAMIC_HASH_TABLE_CONTEXT;
typedef RTL_DYNAMIC_HASH_TABLE_CONTEXT *PRTL_DYNAMIC_HASH_TABLE_CONTEXT;
/* Dynamic hash table enumerator */
typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR {
RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry;
PLIST_ENTRY ChainHead;
ULONG BucketIndex;
} RTL_DYNAMIC_HASH_TABLE_ENUMERATOR;
typedef RTL_DYNAMIC_HASH_TABLE_ENUMERATOR *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR;
/* Dynamic hash table */
typedef struct _RTL_DYNAMIC_HASH_TABLE {
ULONG Flags;
ULONG Shift;
ULONG TableSize;
ULONG Pivot;
ULONG DivisorMask;
ULONG NumEntries;
ULONG NonEmptyBuckets;
ULONG NumEnumerators;
PVOID Directory;
} RTL_DYNAMIC_HASH_TABLE;
typedef RTL_DYNAMIC_HASH_TABLE *PRTL_DYNAMIC_HASH_TABLE;
/* Operating system version information */
typedef struct _OSVERSIONINFOA {
ULONG dwOSVersionInfoSize;
ULONG dwMajorVersion;
ULONG dwMinorVersion;
ULONG dwBuildNumber;
ULONG dwPlatformId;
CHAR szCSDVersion[128];
} OSVERSIONINFOA;
typedef OSVERSIONINFOA *POSVERSIONINFOA;
typedef OSVERSIONINFOA *LPOSVERSIONINFOA;
typedef struct _OSVERSIONINFOW {
ULONG dwOSVersionInfoSize;
ULONG dwMajorVersion;
ULONG dwMinorVersion;
ULONG dwBuildNumber;
ULONG dwPlatformId;
WCHAR szCSDVersion[128];
} OSVERSIONINFOW;
typedef OSVERSIONINFOW *POSVERSIONINFOW;
typedef OSVERSIONINFOW *LPOSVERSIONINFOW;
typedef OSVERSIONINFOW RTL_OSVERSIONINFOW;
typedef OSVERSIONINFOW *PRTL_OSVERSIONINFOW;
#ifdef UNICODE
typedef OSVERSIONINFOW OSVERSIONINFO;
typedef POSVERSIONINFOW POSVERSIONINFO;
typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
#else
typedef OSVERSIONINFOA OSVERSIONINFO;
typedef POSVERSIONINFOA POSVERSIONINFO;
typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
#endif
/* Operating system version information (extended version) */
typedef struct _OSVERSIONINFOEXA {
ULONG dwOSVersionInfoSize;
ULONG dwMajorVersion;
ULONG dwMinorVersion;
ULONG dwBuildNumber;
ULONG dwPlatformId;
CHAR szCSDVersion[128];
USHORT wServicePackMajor;
USHORT wServicePackMinor;
USHORT wSuiteMask;
UCHAR wProductType;
UCHAR wReserved;
} OSVERSIONINFOEXA;
typedef OSVERSIONINFOEXA *POSVERSIONINFOEXA;
typedef OSVERSIONINFOEXA *LPOSVERSIONINFOEXA;
typedef struct _OSVERSIONINFOEXW {
ULONG dwOSVersionInfoSize;
ULONG dwMajorVersion;
ULONG dwMinorVersion;
ULONG dwBuildNumber;
ULONG dwPlatformId;
WCHAR szCSDVersion[128];
USHORT wServicePackMajor;
USHORT wServicePackMinor;
USHORT wSuiteMask;
UCHAR wProductType;
UCHAR wReserved;
} OSVERSIONINFOEXW;
typedef OSVERSIONINFOEXW *POSVERSIONINFOEXW;
typedef OSVERSIONINFOEXW *LPOSVERSIONINFOEXW;
typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW;
typedef OSVERSIONINFOEXW *PRTL_OSVERSIONINFOEXW;
#ifdef UNICODE
typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
#else
typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
#endif
/* File alignment information */
typedef struct _FILE_ALIGNMENT_INFORMATION {
ULONG AlignmentRequirement;
} FILE_ALIGNMENT_INFORMATION;
typedef FILE_ALIGNMENT_INFORMATION *PFILE_ALIGNMENT_INFORMATION;
/* File name information */
typedef struct _FILE_NAME_INFORMATION {
ULONG FileNameLength;
WCHAR FileName[1];
} FILE_NAME_INFORMATION;
typedef FILE_NAME_INFORMATION *PFILE_NAME_INFORMATION;
/* File attribute tag information */
typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {
ULONG FileAttributes;
ULONG ReparseTag;
} FILE_ATTRIBUTE_TAG_INFORMATION;
typedef FILE_ATTRIBUTE_TAG_INFORMATION *PFILE_ATTRIBUTE_TAG_INFORMATION;
/* File disposition information */
typedef struct _FILE_DISPOSITION_INFORMATION {
BOOLEAN DeleteFile;
} FILE_DISPOSITION_INFORMATION;
typedef FILE_DISPOSITION_INFORMATION *PFILE_DISPOSITION_INFORMATION;
/* File end of file information */
typedef struct _FILE_END_OF_FILE_INFORMATION {
LARGE_INTEGER EndOfFile;
} FILE_END_OF_FILE_INFORMATION;
typedef FILE_END_OF_FILE_INFORMATION *PFILE_END_OF_FILE_INFORMATION;
/* File valid data length information */
typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION {
LARGE_INTEGER ValidDataLength;
} FILE_VALID_DATA_LENGTH_INFORMATION;
/* File system label information */
typedef struct _FILE_FS_LABEL_INFORMATION {
ULONG VolumeLabelLength;
WCHAR VolumeLabel[1];
} FILE_FS_LABEL_INFORMATION;
typedef FILE_FS_LABEL_INFORMATION *PFILE_FS_LABEL_INFORMATION;
/* File system volume information */
typedef struct _FILE_FS_VOLUME_INFORMATION {
LARGE_INTEGER VolumeCreationTime;
ULONG VolumeSerialNumber;
ULONG VolumeLabelLength;
BOOLEAN SupportsObjects;
WCHAR VolumeLabel[1];
} FILE_FS_VOLUME_INFORMATION;
typedef FILE_FS_VOLUME_INFORMATION *PFILE_FS_VOLUME_INFORMATION;
/* File system size information */
typedef struct _FILE_FS_SIZE_INFORMATION {
LARGE_INTEGER TotalAllocationUnits;
LARGE_INTEGER AvailableAllocationUnits;
ULONG SectorsPerAllocationUnit;
ULONG BytesPerSector;
} FILE_FS_SIZE_INFORMATION;
typedef FILE_FS_SIZE_INFORMATION *PFILE_FS_SIZE_INFORMATION;
/* File system full size information */
typedef struct _FILE_FS_FULL_SIZE_INFORMATION {
LARGE_INTEGER TotalAllocationUnits;
LARGE_INTEGER CallerAvailableAllocationUnits;
LARGE_INTEGER ActualAvailableAllocationUnits;
ULONG SectorsPerAllocationUnit;
ULONG BytesPerSector;
} FILE_FS_FULL_SIZE_INFORMATION;
typedef FILE_FS_FULL_SIZE_INFORMATION *PFILE_FS_FULL_SIZE_INFORMATION;
/* File system object identifier information */
typedef struct _FILE_FS_OBJECTID_INFORMATION {
UCHAR ObjectId[16];
UCHAR ExtendedInfo[48];
} FILE_FS_OBJECTID_INFORMATION;
typedef FILE_FS_OBJECTID_INFORMATION *PFILE_FS_OBJECTID_INFORMATION;
/* File segment element */
typedef union _FILE_SEGMENT_ELEMENT {
PVOID64 Buffer;
ULONGLONG Alignment;
} FILE_SEGMENT_ELEMENT;
typedef FILE_SEGMENT_ELEMENT *PFILE_SEGMENT_ELEMENT;
/* Bus data types */
typedef enum _BUS_DATA_TYPE {
ConfigurationSpaceUndefined = -1,
Cmos = 0,
EisaConfiguration = 1,
Pos = 2,
CbusConfiguration = 3,
PCIConfiguration = 4,
VMEConfiguration = 5,
NuBusConfiguration = 6,
PCMCIAConfiguration = 7,
MPIConfiguration = 8,
MPSAConfiguration = 9,
PNPISAConfiguration = 10,
SgiInternalConfiguration = 11,
MaximumBusDataType = 12
} BUS_DATA_TYPE;
typedef BUS_DATA_TYPE *PBUS_DATA_TYPE;
/* Registry key name information */
typedef struct _KEY_NAME_INFORMATION {
ULONG NameLength;
WCHAR Name[1];
} KEY_NAME_INFORMATION;
typedef KEY_NAME_INFORMATION *PKEY_NAME_INFORMATION;
/* Registry key cached information */
typedef struct _KEY_CACHED_INFORMATION {
LARGE_INTEGER LastWriteTime;
ULONG TitleIndex;
ULONG SubKeys;
ULONG MaxNameLen;
ULONG Values;
ULONG MaxValueNameLen;
ULONG MaxValueDataLen;
ULONG NameLength;
} KEY_CACHED_INFORMATION;
typedef KEY_CACHED_INFORMATION *PKEY_CACHED_INFORMATION;
/* Registry key virtualization information */
typedef struct _KEY_VIRTUALIZATION_INFORMATION {
ULONG VirtualizationCandidate : 1;
ULONG VirtualizationEnabled : 1;
ULONG VirtualTarget : 1;
ULONG VirtualStore : 1;
ULONG VirtualSource : 1;
ULONG Reserved : 27;
} KEY_VIRTUALIZATION_INFORMATION;
typedef KEY_VIRTUALIZATION_INFORMATION *PKEY_VIRTUALIZATION_INFORMATION;
/* NT thread information block */
typedef struct _NT_TIB {
struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
PVOID StackBase;
PVOID StackLimit;
PVOID SubSystemTib;
union {
PVOID FiberData;
ULONG Version;
};
PVOID ArbitraryUserPointer;
struct _NT_TIB *Self;
} NT_TIB;
typedef NT_TIB *PNT_TIB;
/* NT thread information block (32-bit version) */
typedef struct _NT_TIB32 {
ULONG ExceptionList;
ULONG StackBase;
ULONG StackLimit;
ULONG SubSystemTib;
union {
ULONG FiberData;
ULONG Version;
};
ULONG ArbitraryUserPointer;
ULONG Self;
} NT_TIB32;
typedef NT_TIB32 *PNT_TIB32;
/* NT thread information block (64-bit version) */
typedef struct _NT_TIB64 {
ULONG64 ExceptionList;
ULONG64 StackBase;
ULONG64 StackLimit;
ULONG64 SubSystemTib;
union {
ULONG64 FiberData;
ULONG Version;
};
ULONG64 ArbitraryUserPointer;
ULONG64 Self;
} NT_TIB64;
typedef NT_TIB64 *PNT_TIB64;
/* Process information classes */
typedef enum _PROCESSINFOCLASS {
ProcessBasicInformation = 0,
ProcessQuotaLimits = 1,
ProcessIoCounters = 2,
ProcessVmCounters = 3,
ProcessTimes = 4,
ProcessBasePriority = 5,
ProcessRaisePriority = 6,
ProcessDebugPort = 7,
ProcessExceptionPort = 8,
ProcessAccessToken = 9,
ProcessLdtInformation = 10,
ProcessLdtSize = 11,
ProcessDefaultHardErrorMode = 12,
ProcessIoPortHandlers = 13,
ProcessPooledUsageAndLimits = 14,
ProcessWorkingSetWatch = 15,
ProcessUserModeIOPL = 16,
ProcessEnableAlignmentFaultFixup = 17,
ProcessPriorityClass = 18,
ProcessWx86Information = 19,
ProcessHandleCount = 20,
ProcessAffinityMask = 21,
ProcessPriorityBoost = 22,
ProcessDeviceMap = 23,
ProcessSessionInformation = 24,
ProcessForegroundInformation = 25,
ProcessWow64Information = 26,
ProcessImageFileName = 27,
ProcessLUIDDeviceMapsEnabled = 28,
ProcessBreakOnTermination = 29,
ProcessDebugObjectHandle = 30,
ProcessDebugFlags = 31,
ProcessHandleTracing = 32,
ProcessIoPriority = 33,
ProcessExecuteFlags = 34,
ProcessTlsInformation = 35,
ProcessCookie = 36,
ProcessImageInformation = 37,
ProcessCycleTime = 38,
ProcessPagePriority = 39,
ProcessInstrumentationCallback = 40,
ProcessThreadStackAllocation = 41,
ProcessWorkingSetWatchEx = 42,
ProcessImageFileNameWin32 = 43,
ProcessImageFileMapping = 44,
ProcessAffinityUpdateMode = 45,
ProcessMemoryAllocationMode = 46,
ProcessGroupInformation = 47,
ProcessTokenVirtualizationEnabled = 48,
ProcessConsoleHostProcess = 49,
ProcessWindowInformation = 50,
MaxProcessInfoClass = 51
} PROCESSINFOCLASS;
/* Thread information classes */
typedef enum _THREADINFOCLASS {
ThreadBasicInformation = 0,
ThreadTimes = 1,
ThreadPriority = 2,
ThreadBasePriority = 3,
ThreadAffinityMask = 4,
ThreadImpersonationToken = 5,
ThreadDescriptorTableEntry = 6,
ThreadEnableAlignmentFaultFixup = 7,
ThreadEventPair_Reusable = 8,
ThreadQuerySetWin32StartAddress = 9,
ThreadZeroTlsCell = 10,
ThreadPerformanceCount = 11,
ThreadAmILastThread = 12,
ThreadIdealProcessor = 13,
ThreadPriorityBoost = 14,
ThreadSetTlsArrayAddress = 15,
ThreadIsIoPending = 16,
ThreadHideFromDebugger = 17,
ThreadBreakOnTermination = 18,
ThreadSwitchLegacyState = 19,
ThreadIsTerminated = 20,
ThreadLastSystemCall = 21,
ThreadIoPriority = 22,
ThreadCycleTime = 23,
ThreadPagePriority = 24,
ThreadActualBasePriority = 25,
ThreadTebInformation = 26,
ThreadCSwitchMon = 27,
ThreadCSwitchPmu = 28,
ThreadWow64Context = 29,
ThreadGroupInformation = 30,
ThreadUmsInformation = 31,
ThreadCounterProfiling = 32,
ThreadIdealProcessorEx = 33,
MaxThreadInfoClass = 34
} THREADINFOCLASS;
/* Page priority information */
typedef struct _PAGE_PRIORITY_INFORMATION {
ULONG PagePriority;
} PAGE_PRIORITY_INFORMATION;
typedef PAGE_PRIORITY_INFORMATION *PPAGE_PRIORITY_INFORMATION;
/* Process working set watch information */
typedef struct _PROCESS_WS_WATCH_INFORMATION {
PVOID FaultingPc;
PVOID FaultingVa;
} PROCESS_WS_WATCH_INFORMATION;
typedef PROCESS_WS_WATCH_INFORMATION *PPROCESS_WS_WATCH_INFORMATION;
/* Process basic information */
typedef struct _PROCESS_BASIC_INFORMATION {
NTSTATUS ExitStatus;
PPEB PebBaseAddress;
ULONG_PTR AffinityMask;
KPRIORITY BasePriority;
ULONG_PTR UniqueProcessId;
ULONG_PTR InheritedFromUniqueProcessId;
} PROCESS_BASIC_INFORMATION;
typedef PROCESS_BASIC_INFORMATION *PPROCESS_BASIC_INFORMATION;
/* Process extended basic information */
typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION {
SIZE_T Size;
PROCESS_BASIC_INFORMATION BasicInfo;
union {
ULONG Flags;
struct {
ULONG IsProtectedProcess : 1;
ULONG IsWow64Process : 1;
ULONG IsProcessDeleting : 1;
ULONG IsCrossSessionCreate : 1;
ULONG SpareBits : 28;
};
};
} PROCESS_EXTENDED_BASIC_INFORMATION;
typedef PROCESS_EXTENDED_BASIC_INFORMATION *PPROCESS_EXTENDED_BASIC_INFORMATION;
/* Process device map information */
typedef struct _PROCESS_DEVICEMAP_INFORMATION {
union {
struct {
HANDLE DirectoryHandle;
} Set;
struct {
ULONG DriveMap;
UCHAR DriveType[32];
} Query;
};
} PROCESS_DEVICEMAP_INFORMATION;
typedef PROCESS_DEVICEMAP_INFORMATION *PPROCESS_DEVICEMAP_INFORMATION;
/* Process device map information (extended version) */
typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX {
union {
struct {
HANDLE DirectoryHandle;
} Set;
struct {
ULONG DriveMap;
UCHAR DriveType[32];
} Query;
};
ULONG Flags;
} PROCESS_DEVICEMAP_INFORMATION_EX;
typedef PROCESS_DEVICEMAP_INFORMATION_EX *PPROCESS_DEVICEMAP_INFORMATION_EX;
/* Process session information */
typedef struct _PROCESS_SESSION_INFORMATION {
ULONG SessionId;
} PROCESS_SESSION_INFORMATION;
typedef PROCESS_SESSION_INFORMATION *PPROCESS_SESSION_INFORMATION;
/* Process handle tracing enable information */
typedef struct _PROCESS_HANDLE_TRACING_ENABLE {
ULONG Flags;
} PROCESS_HANDLE_TRACING_ENABLE;
typedef PROCESS_HANDLE_TRACING_ENABLE *PPROCESS_HANDLE_TRACING_ENABLE;
/* Process handle tracing enable information (extended version) */
typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX {
ULONG Flags;
ULONG TotalSlots;
} PROCESS_HANDLE_TRACING_ENABLE_EX;
typedef PROCESS_HANDLE_TRACING_ENABLE_EX *PPROCESS_HANDLE_TRACING_ENABLE_EX;
/* Process handle tracing entry */
typedef struct _PROCESS_HANDLE_TRACING_ENTRY {
HANDLE Handle;
CLIENT_ID ClientId;
ULONG Type;
PVOID Stacks[PROCESS_HANDLE_TRACING_MAX_STACKS];
} PROCESS_HANDLE_TRACING_ENTRY;
typedef PROCESS_HANDLE_TRACING_ENTRY *PPROCESS_HANDLE_TRACING_ENTRY;
/* Process handle tracing query */
typedef struct _PROCESS_HANDLE_TRACING_QUERY {
HANDLE Handle;
ULONG TotalTraces;
PROCESS_HANDLE_TRACING_ENTRY HandleTrace[1];
} PROCESS_HANDLE_TRACING_QUERY;
typedef PROCESS_HANDLE_TRACING_QUERY *PPROCESS_HANDLE_TRACING_QUERY;
/* Quota limits */
typedef struct _QUOTA_LIMITS {
SIZE_T PagedPoolLimit;
SIZE_T NonPagedPoolLimit;
SIZE_T MinimumWorkingSetSize;
SIZE_T MaximumWorkingSetSize;
SIZE_T PagefileLimit;
LARGE_INTEGER TimeLimit;
} QUOTA_LIMITS;
typedef QUOTA_LIMITS *PQUOTA_LIMITS;
/* Rate quota limit */
typedef union _RATE_QUOTA_LIMIT {
ULONG RateData;
struct {
ULONG RatePercent : 7;
ULONG Reserved0 : 25;
};
} RATE_QUOTA_LIMIT;
typedef RATE_QUOTA_LIMIT *PRATE_QUOTA_LIMIT;
/* Quota limits (extended version) */
typedef struct _QUOTA_LIMITS_EX {
SIZE_T PagedPoolLimit;
SIZE_T NonPagedPoolLimit;
SIZE_T MinimumWorkingSetSize;
SIZE_T MaximumWorkingSetSize;
SIZE_T PagefileLimit;
LARGE_INTEGER TimeLimit;
SIZE_T WorkingSetLimit;
SIZE_T Reserved2;
SIZE_T Reserved3;
SIZE_T Reserved4;
ULONG Flags;
RATE_QUOTA_LIMIT CpuRateLimit;
} QUOTA_LIMITS_EX;
typedef QUOTA_LIMITS_EX *PQUOTA_LIMITS_EX;
/* I/O counters */
typedef struct _IO_COUNTERS {
ULONGLONG ReadOperationCount;
ULONGLONG WriteOperationCount;
ULONGLONG OtherOperationCount;
ULONGLONG ReadTransferCount;
ULONGLONG WriteTransferCount;
ULONGLONG OtherTransferCount;
} IO_COUNTERS;
typedef IO_COUNTERS *PIO_COUNTERS;
/* Virtual memory counters */
typedef struct _VM_COUNTERS {
SIZE_T PeakVirtualSize;
SIZE_T VirtualSize;
ULONG PageFaultCount;
SIZE_T PeakWorkingSetSize;
SIZE_T WorkingSetSize;
SIZE_T QuotaPeakPagedPoolUsage;
SIZE_T QuotaPagedPoolUsage;
SIZE_T QuotaPeakNonPagedPoolUsage;
SIZE_T QuotaNonPagedPoolUsage;
SIZE_T PagefileUsage;
SIZE_T PeakPagefileUsage;
} VM_COUNTERS;
typedef VM_COUNTERS *PVM_COUNTERS;
/* Virtual memory counters (extended version) */
typedef struct _VM_COUNTERS_EX {
SIZE_T PeakVirtualSize;
SIZE_T VirtualSize;
ULONG PageFaultCount;
SIZE_T PeakWorkingSetSize;
SIZE_T WorkingSetSize;
SIZE_T QuotaPeakPagedPoolUsage;
SIZE_T QuotaPagedPoolUsage;
SIZE_T QuotaPeakNonPagedPoolUsage;
SIZE_T QuotaNonPagedPoolUsage;
SIZE_T PagefileUsage;
SIZE_T PeakPagefileUsage;
SIZE_T PrivateUsage;
} VM_COUNTERS_EX;
typedef VM_COUNTERS_EX *PVM_COUNTERS_EX;
/* Hardware counter types */
typedef enum _HARDWARE_COUNTER_TYPE {
PMCCounter = 0,
MaxHardwareCounterType = 1
} HARDWARE_COUNTER_TYPE;
typedef HARDWARE_COUNTER_TYPE *PHARDWARE_COUNTER_TYPE;
/* Hardware counter */
typedef struct _HARDWARE_COUNTER {
HARDWARE_COUNTER_TYPE Type;
ULONG Reserved;
ULONG64 Index;
} HARDWARE_COUNTER;
typedef HARDWARE_COUNTER *PHARDWARE_COUNTER;
/* Pooled usage and limits */
typedef struct _POOLED_USAGE_AND_LIMITS {
SIZE_T PeakPagedPoolUsage;
SIZE_T PagedPoolUsage;
SIZE_T PagedPoolLimit;
SIZE_T PeakNonPagedPoolUsage;
SIZE_T NonPagedPoolUsage;
SIZE_T NonPagedPoolLimit;
SIZE_T PeakPagefileUsage;
SIZE_T PagefileUsage;
SIZE_T PagefileLimit;
} POOLED_USAGE_AND_LIMITS;
typedef POOLED_USAGE_AND_LIMITS *PPOOLED_USAGE_AND_LIMITS;
/* Process access token */
typedef struct _PROCESS_ACCESS_TOKEN {
HANDLE Token;
HANDLE Thread;
} PROCESS_ACCESS_TOKEN;
typedef PROCESS_ACCESS_TOKEN *PPROCESS_ACCESS_TOKEN;
/* Process exception port */
typedef struct _PROCESS_EXCEPTION_PORT {
HANDLE ExceptionPortHandle;
ULONG StateFlags;
} PROCESS_EXCEPTION_PORT;
typedef PROCESS_EXCEPTION_PORT *PPROCESS_EXCEPTION_PORT;
/* Kernel and user times */
typedef struct _KERNEL_USER_TIMES {
LARGE_INTEGER CreateTime;
LARGE_INTEGER ExitTime;
LARGE_INTEGER KernelTime;
LARGE_INTEGER UserTime;
} KERNEL_USER_TIMES;
typedef KERNEL_USER_TIMES *PKERNEL_USER_TIMES;
/* Kernel processor control region */
#ifdef _X86_
typedef struct _KPCR {
union {
NT_TIB NtTib;
struct {
struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
PVOID Used_StackBase;
PVOID Spare2;
PVOID TssCopy;
ULONG ContextSwitches;
KAFFINITY SetMemberCopy;
PVOID Used_Self;
};
};
struct _KPCR *SelfPcr;
struct _KPRCB *Prcb;
KIRQL Irql;
ULONG IPR;
ULONG IrrActive;
ULONG IDR;
PVOID KdVersionBlock;
struct _KIDTENTRY *IDT;
struct _KGDTENTRY *GDT;
struct _KTSS *TSS;
USHORT MajorVersion;
USHORT MinorVersion;
KAFFINITY SetMember;
ULONG StallScaleFactor;
UCHAR SpareUnused;
UCHAR Number;
UCHAR Spare0;
UCHAR SecondLevelCacheAssociativity;
ULONG VdmAlert;
ULONG KernelReserved[14];
ULONG SeconeLevelCacheSize;
ULONG HalReserved[16];
} KPCR;
typedef KPCR *PKPCR;
#endif
/* Interlocked results */
#ifdef _X86_
typedef enum _INTERLOCKED_RESULT {
ResultNegative = RESULT_NEGATIVE,
ResultZero = RESULT_ZERO,
ResultPositive = RESULT_POSITIVE
} INTERLOCKED_RESULT;
#endif
/* System firmware table actions */
typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION {
SystemFirmwareTable_Enumerate = 0,
SystemFirmwareTable_Get = 1
} SYSTEM_FIRMWARE_TABLE_ACTION;
/* System firmware table information */
typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION {
ULONG ProviderSignature;
SYSTEM_FIRMWARE_TABLE_ACTION Action;
ULONG TableID;
ULONG TableBufferLength;
UCHAR TableBuffer[ANYSIZE_ARRAY];
} SYSTEM_FIRMWARE_TABLE_INFORMATION;
typedef SYSTEM_FIRMWARE_TABLE_INFORMATION *PSYSTEM_FIRMWARE_TABLE_INFORMATION;
/* Firmware table handler callback */
typedef NTSTATUS (__cdecl *PFNFTH)( PSYSTEM_FIRMWARE_TABLE_INFORMATION );
/* System firmware table handler */
typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER {
ULONG ProviderSignature;
BOOLEAN Register;
PFNFTH FirmwareTableHandler;
PVOID DriverObject;
} SYSTEM_FIRMWARE_TABLE_HANDLER;
typedef SYSTEM_FIRMWARE_TABLE_HANDLER *PSYSTEM_FIRMWARE_TABLE_HANDLER;
/* Timer APC routine */
typedef VOID (NTAPI *PTIMER_APC_ROUTINE)( PVOID, ULONG, LONG );
/* Timer set information classes */
typedef enum _TIMER_SET_INFORMATION_CLASS {
TimerSetCoalescableTimer = 0,
MaxTimerInfoClass = 1
} TIMER_SET_INFORMATION_CLASS;
/* Timer set coalescable timer information */
#if (NTDDI_VERSION >= 0x06010000)
typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO {
LARGE_INTEGER DueTime;
PTIMER_APC_ROUTINE TimerApcRoutine;
PVOID TimerContext;
struct _COUNTED_REASON_CONTEXT *WakeContext;
ULONG Period;
ULONG TolerableDelay;
PBOOLEAN PreviousState;
} TIMER_SET_COALESCABLE_TIMER_INFO;
typedef TIMER_SET_COALESCABLE_TIMER_INFO *PTIMER_SET_COALESCABLE_TIMER_INFO;
#endif
/* Driver verifier thunk routine */
typedef ULONG_PTR (NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)( PVOID );
/* Driver verifier thunk pairs */
typedef struct _DRIVER_VERIFIER_THUNK_PAIRS {
PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine;
PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine;
} DRIVER_VERIFIER_THUNK_PAIRS;
typedef DRIVER_VERIFIER_THUNK_PAIRS *PDRIVER_VERIFIER_THUNK_PAIRS;
/* Extended state feature */
typedef struct _XSTATE_FEATURE {
ULONG Offset;
ULONG Size;
} XSTATE_FEATURE;
typedef XSTATE_FEATURE *PXSTATE_FEATURE;
/* Extended state configuration */
typedef struct _XSTATE_CONFIGURATION {
ULONG64 EnabledFeatures;
ULONG Size;
ULONG OptimizedSave : 1;
XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES];
} XSTATE_CONFIGURATION;
typedef XSTATE_CONFIGURATION *PXSTATE_CONFIGURATION;
/* Kernel/user shared data */
typedef struct _KUSER_SHARED_DATA {
ULONG TickCountLowDeprecated;
ULONG TickCountMultiplier;
volatile KSYSTEM_TIME InterruptTime;
volatile KSYSTEM_TIME SystemTime;
volatile KSYSTEM_TIME TimeZoneBias;
USHORT ImageNumberLow;
USHORT ImageNumberHigh;
WCHAR NtSystemRoot[260];
ULONG MaxStackTraceDepth;
ULONG CryptoExponent;
ULONG TimeZoneId;
ULONG LargePageMinimum;
ULONG Reserved2[7];
NT_PRODUCT_TYPE NtProductType;
BOOLEAN ProductTypeIsValid;
ULONG NtMajorVersion;
ULONG NtMinorVersion;
BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
ULONG Reserved1;
ULONG Reserved3;
volatile ULONG TimeSlip;
ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
ULONG AltArchitecturePad[1];
LARGE_INTEGER SystemExpirationDate;
ULONG SuiteMask;
BOOLEAN KdDebuggerEnabled;
UCHAR NXSupportPolicy;
volatile ULONG ActiveConsoleId;
volatile ULONG DismountCount;
ULONG ComPlusPackage;
ULONG LastSystemRITEventTickCount;
ULONG NumberOfPhysicalPages;
BOOLEAN SafeBootMode;
union {
UCHAR TscQpcData;
struct {
UCHAR TscQpcEnabled : 1;
UCHAR TscQpcSpareFlag : 1;
UCHAR TscQpcShift : 6;
};
};
UCHAR TscQpcPad[2];
union {
ULONG SharedDataFlags;
struct {
ULONG DbgErrorPortPresent : 1;
ULONG DbgElevationEnabled : 1;
ULONG DbgVirtEnabled : 1;
ULONG DbgInstallerDetectEnabled : 1;
ULONG DbgSystemDllRelocated : 1;
ULONG DbgDynProcessorEnabled : 1;
ULONG DbgSEHValidationEnabled : 1;
ULONG SpareBits : 25;
};
};
ULONG DataFlagsPad[1];
ULONGLONG TestRetInstruction;
ULONG SystemCall;
ULONG SystemCallReturn;
ULONGLONG SystemCallPad[3];
union {
volatile KSYSTEM_TIME TickCount;
volatile ULONG64 TickCountQuad;
struct {
ULONG ReservedTickCountOverlay[3];
ULONG TickCountPad[1];
};
};
ULONG Cookie;
ULONG CookiePad[1];
LONGLONG ConsoleSessionForegroundProcessId;
ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES];
USHORT UserModeGlobalLogger[16];
ULONG ImageFileExecutionOptions;
ULONGLONG Reserved5;
volatile ULONG64 InterruptTimeBias;
volatile ULONG64 TscQpcBias;
volatile ULONG ActiveProcessorCount;
volatile USHORT ActiveGroupCount;
USHORT Reserved4;
volatile ULONG AitSamplingValue;
volatile ULONG AppCompatFlag;
ULONGLONG SystemDllNativeRelocation;
ULONG SystemDllWowRelocation;
ULONG XStatePad[1];
XSTATE_CONFIGURATION XState;
} KUSER_SHARED_DATA;
typedef KUSER_SHARED_DATA *PKUSER_SHARED_DATA;
/* PC card device data */
typedef struct _CM_PCCARD_DEVICE_DATA {
UCHAR Flags;
UCHAR ErrorCode;
USHORT Reserved;
ULONG BusData;
ULONG DeviceId;
ULONG LegacyBaseAddress;
UCHAR IRQMap[16];
} CM_PCCARD_DEVICE_DATA;
typedef CM_PCCARD_DEVICE_DATA *PCM_PCCARD_DEVICE_DATA;
/* Configuration types */
typedef enum _CONFIGURATION_TYPE {
ArcSystem = 0,
CentralProcessor = 1,
FloatingPointProcessor = 2,
PrimaryIcache = 3,
PrimaryDcache = 4,
SecondaryIcache = 5,
SecondaryDcache = 6,
SecondaryCache = 7,
EisaAdapter = 8,
TcAdapter = 9,
ScsiAdapter = 10,
DtiAdapter = 11,
MultiFunctionAdapter = 12,
DiskController = 13,
TapeController = 14,
CdromController = 15,
WormController = 16,
SerialController = 17,
NetworkController = 18,
DisplayController = 19,
ParallelController = 20,
PointerController = 21,
KeyboardController = 22,
AudioController = 23,
OtherController = 24,
DiskPeripheral = 25,
FloppyDiskPeripheral = 26,
TapePeripheral = 27,
ModemPeripheral = 28,
MonitorPeripheral = 29,
PrinterPeripheral = 30,
PointerPeripheral = 31,
KeyboardPeripheral = 32,
TerminalPeripheral = 33,
OtherPeripheral = 34,
LinePeripheral = 35,
NetworkPeripheral = 36,
SystemMemory = 37,
DockingInformation = 38,
RealModeIrqRoutingTable = 39,
RealModePCIEnumeration = 40,
MaximumType = 41
} CONFIGURATION_TYPE;
typedef CONFIGURATION_TYPE *PCONFIGURATION_TYPE;
/* Expand stack callout */
typedef VOID (NTAPI EXPAND_STACK_CALLOUT)( PVOID );
typedef EXPAND_STACK_CALLOUT *PEXPAND_STACK_CALLOUT;
/* Zone segment header */
typedef struct _ZONE_SEGMENT_HEADER {
SINGLE_LIST_ENTRY SegmentList;
PVOID Reserved;
} ZONE_SEGMENT_HEADER;
typedef ZONE_SEGMENT_HEADER *PZONE_SEGMENT_HEADER;
/* Zone header */
typedef struct _ZONE_HEADER {
SINGLE_LIST_ENTRY FreeList;
SINGLE_LIST_ENTRY SegmentList;
ULONG BlockSize;
ULONG TotalSegmentSize;
} ZONE_HEADER;
typedef ZONE_HEADER *PZONE_HEADER;
/* Physical memory range */
typedef struct _PHYSICAL_MEMORY_RANGE {
PHYSICAL_ADDRESS BaseAddress;
LARGE_INTEGER NumberOfBytes;
} PHYSICAL_MEMORY_RANGE;
typedef PHYSICAL_MEMORY_RANGE *PPHYSICAL_MEMORY_RANGE;
/* Memory management rotate copy callback function */
typedef NTSTATUS (NTAPI *PMM_ROTATE_COPY_CALLBACK_FUNCTION)( PMDL, PMDL, PVOID );
/* Memory management rotate directions */
typedef enum _MM_ROTATE_DIRECTION {
MmToFrameBuffer = 0,
MmToFrameBufferNoCopy = 1,
MmToRegularMemory = 2,
MmToRegularMemoryNoCopy = 3,
MmMaximumRotateDirection = 4
} MM_ROTATE_DIRECTION;
typedef MM_ROTATE_DIRECTION *PMM_ROTATE_DIRECTION;
/* Image information */
typedef struct _IMAGE_INFO {
union {
ULONG Properties;
struct {
ULONG ImageAddressingMode : 8;
ULONG SystemModeImage : 1;
ULONG ImageMappedToAllPids : 1;
ULONG ExtendedInfoPresent : 1;
ULONG Reserved : 21;
};
};
PVOID ImageBase;
ULONG ImageSelector;
SIZE_T ImageSize;
ULONG ImageSectionNumber;
} IMAGE_INFO;
typedef IMAGE_INFO *PIMAGE_INFO;
/* Image information (extended version) */
typedef struct _IMAGE_INFO_EX {
SIZE_T Size;
IMAGE_INFO ImageInfo;
struct _FILE_OBJECT *FileObject;
} IMAGE_INFO_EX;
typedef IMAGE_INFO_EX *PIMAGE_INFO_EX;
/* Process create notification information */
typedef struct _PS_CREATE_NOTIFY_INFO {
SIZE_T Size;
union {
ULONG Flags;
struct {
ULONG FileOpenNameAvailable : 1;
ULONG Reserved : 31;
};
};
HANDLE ParentProcessId;
CLIENT_ID CreatingThreadId;
struct _FILE_OBJECT *FileObject;
PCUNICODE_STRING ImageFileName;
PCUNICODE_STRING CommandLine;
NTSTATUS CreationStatus;
} PS_CREATE_NOTIFY_INFO;
typedef PS_CREATE_NOTIFY_INFO *PPS_CREATE_NOTIFY_INFO;
/* Notification callbacks */
typedef VOID (NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)( HANDLE, HANDLE, BOOLEAN );
typedef VOID (NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE_EX)( PEPROCESS, HANDLE, PPS_CREATE_NOTIFY_INFO );
typedef VOID (NTAPI *PCREATE_THREAD_NOTIFY_ROUTINE)( HANDLE, HANDLE, BOOLEAN );
typedef VOID (NTAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)( PUNICODE_STRING, HANDLE, PIMAGE_INFO );
/* I/O query device callback */
typedef NTSTATUS (NTAPI *PIO_QUERY_DEVICE_ROUTINE)( PVOID, PUNICODE_STRING, INTERFACE_TYPE, ULONG, PKEY_VALUE_FULL_INFORMATION *, CONFIGURATION_TYPE, ULONG, PKEY_VALUE_FULL_INFORMATION *, CONFIGURATION_TYPE, ULONG, PKEY_VALUE_FULL_INFORMATION * );
/* I/O query device data formats */
typedef enum _IO_QUERY_DEVICE_DATA_FORMAT {
IoQueryDeviceIdentifier = 0,
IoQueryDeviceConfigurationData = 1,
IoQueryDeviceComponentInformation = 2,
IoQueryDeviceMaxData = 3
} IO_QUERY_DEVICE_DATA_FORMAT;
typedef IO_QUERY_DEVICE_DATA_FORMAT *PIO_QUERY_DEVICE_DATA_FORMAT;
/* Driver reinitialization callback */
typedef VOID NTAPI DRIVER_REINITIALIZE( struct _DRIVER_OBJECT *, PVOID, ULONG );
typedef DRIVER_REINITIALIZE *PDRIVER_REINITIALIZE;
/* Controller object */
typedef struct _CONTROLLER_OBJECT {
CSHORT Type;
CSHORT Size;
PVOID ControllerExtension;
KDEVICE_QUEUE DeviceWaitQueue;
ULONG Spare1;
LARGE_INTEGER Spare2;
} CONTROLLER_OBJECT;
typedef CONTROLLER_OBJECT *PCONTROLLER_OBJECT;
/* Configuration information */
typedef struct _CONFIGURATION_INFORMATION {
ULONG DiskCount;
ULONG FloppyCount;
ULONG CdRomCount;
ULONG TapeCount;
ULONG ScsiPortCount;
ULONG SerialCount;
ULONG ParallelCount;
BOOLEAN AtDiskPrimaryAddressClaimed;
BOOLEAN AtDiskSecondaryAddressClaimed;
ULONG Version;
ULONG MediumChangerCount;
} CONFIGURATION_INFORMATION;
typedef CONFIGURATION_INFORMATION *PCONFIGURATION_INFORMATION;
/* Disk signature */
typedef struct _DISK_SIGNATURE {
ULONG PartitionStyle;
union {
struct {
ULONG Signature;
ULONG CheckSum;
} Mbr;
struct {
GUID DiskId;
} Gpt;
};
} DISK_SIGNATURE;
typedef DISK_SIGNATURE *PDISK_SIGNATURE;
/* Transaction parameter block */
typedef struct _TXN_PARAMETER_BLOCK {
USHORT Length;
USHORT TxFsContext;
PVOID TransactionObject;
} TXN_PARAMETER_BLOCK;
typedef TXN_PARAMETER_BLOCK *PTXN_PARAMETER_BLOCK;
/* I/O driver create context */
typedef struct _IO_DRIVER_CREATE_CONTEXT {
CSHORT Size;
struct _ECP_LIST *ExtraCreateParameter;
PVOID DeviceObjectHint;
PTXN_PARAMETER_BLOCK TxnParameters;
} IO_DRIVER_CREATE_CONTEXT;
typedef IO_DRIVER_CREATE_CONTEXT *PIO_DRIVER_CREATE_CONTEXT;
/* AGP target bus interface standard */
typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD {
USHORT Size;
USHORT Version;
PVOID Context;
PINTERFACE_REFERENCE InterfaceReference;
PINTERFACE_DEREFERENCE InterfaceDereference;
PGET_SET_DEVICE_DATA SetBusData;
PGET_SET_DEVICE_DATA GetBusData;
UCHAR CapabilityID;
} AGP_TARGET_BUS_INTERFACE_STANDARD;
typedef AGP_TARGET_BUS_INTERFACE_STANDARD *PAGP_TARGET_BUS_INTERFACE_STANDARD;
/* Device location interface callbacks */
typedef NTSTATUS (NTAPI *PGET_LOCATION_STRING)( PVOID, PWCHAR * );
/* Plug and Play location interface */
typedef struct _PNP_LOCATION_INTERFACE {
USHORT Size;
USHORT Version;
PVOID Context;
PINTERFACE_REFERENCE InterfaceReference;
PINTERFACE_DEREFERENCE InterfaceDereference;
PGET_LOCATION_STRING GetLocationString;
} PNP_LOCATION_INTERFACE;
typedef PNP_LOCATION_INTERFACE *PPNP_LOCATION_INTERFACE;
/* Arbiter actions */
typedef enum _ARBITER_ACTION {
ArbiterActionTestAllocation = 0,
ArbiterActionRetestAllocation = 1,
ArbiterActionCommitAllocation = 2,
ArbiterActionRollbackAllocation = 3,
ArbiterActionQueryAllocatedResources = 4,
ArbiterActionWriteReservedResources = 5,
ArbiterActionQueryConflict = 6,
ArbiterActionQueryArbitrate = 7,
ArbiterActionAddReserved = 8,
ArbiterActionBootAllocation = 9
} ARBITER_ACTION;
typedef ARBITER_ACTION *PARBITER_ACTION;
/* Arbiter conflict information */
typedef struct _ARBITER_CONFLICT_INFO {
PDEVICE_OBJECT OwningObject;
ULONGLONG Start;
ULONGLONG End;
} ARBITER_CONFLICT_INFO;
typedef ARBITER_CONFLICT_INFO *PARBITER_CONFLICT_INFO;
/* Arbiter test allocation parameters */
typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS {
PLIST_ENTRY ArbitrationList;
ULONG AllocateFromCount;
PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
} ARBITER_TEST_ALLOCATION_PARAMETERS;
typedef ARBITER_TEST_ALLOCATION_PARAMETERS *PARBITER_TEST_ALLOCATION_PARAMETERS;
/* Arbiter retest allocation parameters */
typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS {
PLIST_ENTRY ArbitrationList;
ULONG AllocateFromCount;
PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
} ARBITER_RETEST_ALLOCATION_PARAMETERS;
typedef ARBITER_RETEST_ALLOCATION_PARAMETERS *PARBITER_RETEST_ALLOCATION_PARAMETERS;
/* Arbiter boot allocation parameters */
typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS {
PLIST_ENTRY ArbitrationList;
} ARBITER_BOOT_ALLOCATION_PARAMETERS;
typedef ARBITER_BOOT_ALLOCATION_PARAMETERS *PARBITER_BOOT_ALLOCATION_PARAMETERS;
/* Arbiter query allocated resources parameters */
typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS {
PCM_PARTIAL_RESOURCE_LIST *AllocatedResources;
} ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS;
typedef ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS;
/* Arbiter query conflict parameters */
typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS {
PDEVICE_OBJECT PhysicalDeviceObject;
PIO_RESOURCE_DESCRIPTOR ConflictingResource;
PULONG ConflictCount;
PARBITER_CONFLICT_INFO *Conflicts;
} ARBITER_QUERY_CONFLICT_PARAMETERS;
typedef ARBITER_QUERY_CONFLICT_PARAMETERS *PARBITER_QUERY_CONFLICT_PARAMETERS;
/* Arbiter query arbitrate parameters */
typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS {
PLIST_ENTRY ArbitrationList;
} ARBITER_QUERY_ARBITRATE_PARAMETERS;
typedef ARBITER_QUERY_ARBITRATE_PARAMETERS *PARBITER_QUERY_ARBITRATE_PARAMETERS;
/* Arbiter add reserved parameters */
typedef struct _ARBITER_ADD_RESERVED_PARAMETERS {
PDEVICE_OBJECT ReserveDevice;
} ARBITER_ADD_RESERVED_PARAMETERS;
typedef ARBITER_ADD_RESERVED_PARAMETERS *PARBITER_ADD_RESERVED_PARAMETERS;
/* Arbiter parameters */
typedef struct _ARBITER_PARAMETERS {
union {
ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation;
ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation;
ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation;
ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources;
ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict;
ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate;
ARBITER_ADD_RESERVED_PARAMETERS AddReserved;
} Parameters;
} ARBITER_PARAMETERS;
typedef ARBITER_PARAMETERS *PARBITER_PARAMETERS;
/* Arbiter request sources */
typedef enum _ARBITER_REQUEST_SOURCE {
ArbiterRequestUndefined = -1,
ArbiterRequestLegacyReported = 0,
ArbiterRequestHalReported = 1,
ArbiterRequestLegacyAssigned = 2,
ArbiterRequestPnpDetected = 3,
ArbiterRequestPnpEnumerated = 4
} ARBITER_REQUEST_SOURCE;
/* Arbiter results */
typedef enum _ARBITER_RESULT {
ArbiterResultUndefined = -1,
ArbiterResultSuccess = 0,
ArbiterResultExternalConflict = 1,
ArbiterResultNullRequest = 2
} ARBITER_RESULT;
/* Arbiter list entry */
typedef struct _ARBITER_LIST_ENTRY {
LIST_ENTRY ListEntry;
ULONG AlternativeCount;
PIO_RESOURCE_DESCRIPTOR Alternatives;
PDEVICE_OBJECT PhysicalDeviceObject;
ARBITER_REQUEST_SOURCE RequestSource;
ULONG Flags;
LONG_PTR WorkSpace;
INTERFACE_TYPE InterfaceType;
ULONG SlotNumber;
ULONG BusNumber;
PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment;
PIO_RESOURCE_DESCRIPTOR SelectedAlternative;
ARBITER_RESULT Result;
} ARBITER_LIST_ENTRY;
typedef ARBITER_LIST_ENTRY *PARBITER_LIST_ENTRY;
/* Arbiter handler */
typedef NTSTATUS (NTAPI *PARBITER_HANDLER)( PVOID, ARBITER_ACTION, PARBITER_PARAMETERS );
/* Arbiter interface */
typedef struct _ARBITER_INTERFACE {
USHORT Size;
USHORT Version;
PVOID Context;
PINTERFACE_REFERENCE InterfaceReference;
PINTERFACE_DEREFERENCE InterfaceDereference;
PARBITER_HANDLER ArbiterHandler;
ULONG Flags;
} ARBITER_INTERFACE;
typedef ARBITER_INTERFACE *PARBITER_INTERFACE;
/* Resource translation directions */
typedef enum _RESOURCE_TRANSLATION_DIRECTION {
TranslateChildToParent = 0,
TranslatePartentToChild = 1
} RESOURCE_TRANSLATION_DIRECTION;
/* Resource translation callbacks */
typedef NTSTATUS (NTAPI *PTRANSLATE_RESOURCE_HANDLER)( PVOID, PCM_PARTIAL_RESOURCE_DESCRIPTOR, RESOURCE_TRANSLATION_DIRECTION, ULONG, IO_RESOURCE_DESCRIPTOR [], PDEVICE_OBJECT, PCM_PARTIAL_RESOURCE_LIST );
typedef NTSTATUS (NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)( PVOID, PIO_RESOURCE_DESCRIPTOR, PDEVICE_OBJECT, PULONG, PIO_RESOURCE_DESCRIPTOR * );
/* Translator interface */
typedef struct _TRANSLATOR_INTERFACE {
USHORT Size;
USHORT Version;
PVOID Context;
PINTERFACE_REFERENCE InterfaceReference;
PINTERFACE_DEREFERENCE InterfaceDereference;
PTRANSLATE_RESOURCE_HANDLER TranslateResources;
PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements;
} TRANSLATOR_INTERFACE;
typedef TRANSLATOR_INTERFACE *PTRANSLATOR_INTERFACE;
/* Hardware abstraction layer reset display parameters callback */
typedef BOOLEAN (NTAPI *PHAL_RESET_DISPLAY_PARAMETERS)( ULONG, ULONG );
/* Hardware abstraction layer query information classes */
typedef enum _HAL_QUERY_INFORMATION_CLASS {
HalInstalledBusInformation = 0,
HalProfileSourceInformation = 1,
HalPowerInformation = 3,
HalProcessorSpeedInformation = 4,
HalCallbackInformation = 5,
HalMapRegisterInformation = 6,
HalMcaLogInformation = 7,
HalFrameBufferCachingInformation = 8,
HalDisplayBiosInformation = 9,
HalProcessorFeatureInformation = 10,
HalNumaTopologyInterface = 11,
HalErrorInformation = 12,
HalCmcLogInformation = 13,
HalCpeLogInformation = 14,
HalQueryMcaInformation = 15,
HalQueryAMLIIllegalIOPortAddresses = 16,
HalQueryMaxHotPlugMemoryAddress = 17,
HalPartitionIpiInterface = 18,
HalPlatformInformation = 19,
HalQueryProfileSourceList = 20,
HalInitLogInformation = 21,
HalFrequencyInformation = 22,
HalProcessorBrandString = 23,
HalHypervisorInformation = 24,
HalPlatformTimerInformation = 25,
HalAcpiAuditInformation = 26
} HAL_QUERY_INFORMATION_CLASS;
typedef HAL_QUERY_INFORMATION_CLASS *PHAL_QUERY_INFORMATION_CLASS;
/* Hardware abstraction layer set information classes */
typedef enum _HAL_SET_INFORMATION_CLASS {
HalProfileSourceInterval = 0,
HalProfileSourceInterruptHandler = 1,
HalMcaRegisterDriver = 2,
HalKernelErrorHandler = 3,
HalCmcRegisterDriver = 4,
HalCpeRegisterDriver = 5,
HalMcaLog = 6,
HalCmcLog = 7,
HalCpeLog = 8,
HalGenerateCmcInterrupt = 9,
HalProfileSourceTimerHandler = 10,
HalEnlightment = 11,
HalProfileDpgoSourceInterruptHandler = 12
} HAL_SET_INFORMATION_CLASS;
typedef HAL_SET_INFORMATION_CLASS *PHAL_SET_INFORMATION_CLASS;
/* Power management dispatch table */
typedef struct _PM_DISPATCH_TABLE {
ULONG Signature;
ULONG Version;
PVOID Function[1];
} PM_DISPATCH_TABLE;
typedef PM_DISPATCH_TABLE *PPM_DISPATCH_TABLE;
/* PCI error handler callback */
typedef VOID (NTAPI *PCI_ERROR_HANDLER_CALLBACK)( VOID );
/* Hardware abstraction layer callbacks */
typedef PBUS_HANDLER (FASTCALL *pHalHandlerForBus)( INTERFACE_TYPE, ULONG );
typedef VOID (FASTCALL *pHalReferenceBusHandler)( PBUS_HANDLER );
typedef NTSTATUS (NTAPI *pHalQuerySystemInformation)( HAL_QUERY_INFORMATION_CLASS, ULONG, PVOID, PULONG );
typedef NTSTATUS (NTAPI *pHalSetSystemInformation)( HAL_SET_INFORMATION_CLASS, ULONG, PVOID );
typedef VOID (FASTCALL *pHalExamineMBR)( PDEVICE_OBJECT, ULONG, ULONG, PVOID * );
typedef NTSTATUS (FASTCALL *pHalIoReadPartitionTable)( PDEVICE_OBJECT, ULONG, BOOLEAN, struct _DRIVE_LAYOUT_INFORMATION ** );
typedef NTSTATUS (FASTCALL *pHalIoSetPartitionInformation)( PDEVICE_OBJECT, ULONG, ULONG, ULONG );
typedef NTSTATUS (FASTCALL *pHalIoWritePartitionTable)( PDEVICE_OBJECT, ULONG, ULONG, ULONG, struct _DRIVE_LAYOUT_INFORMATION * );
typedef NTSTATUS (NTAPI *pHalQueryBusSlots)( PBUS_HANDLER, ULONG, PULONG, PULONG );
typedef NTSTATUS (NTAPI *pHalInitPnpDriver)( VOID );
typedef NTSTATUS (NTAPI *pHalInitPowerManagement)( PPM_DISPATCH_TABLE, PPM_DISPATCH_TABLE * );
typedef struct _DMA_ADAPTER * (NTAPI *pHalGetDmaAdapter)( PVOID, struct _DEVICE_DESCRIPTION *, PULONG );
typedef NTSTATUS (NTAPI *pHalGetInterruptTranslator)( INTERFACE_TYPE, ULONG, INTERFACE_TYPE, USHORT, USHORT, PTRANSLATOR_INTERFACE, PULONG );
typedef BOOLEAN (NTAPI *pHalTranslateBusAddress)( INTERFACE_TYPE, ULONG, PHYSICAL_ADDRESS, PULONG, PPHYSICAL_ADDRESS );
typedef NTSTATUS (NTAPI *pHalAssignSlotResources)( PUNICODE_STRING, PUNICODE_STRING, PDRIVER_OBJECT, PDEVICE_OBJECT, INTERFACE_TYPE, ULONG, ULONG, PCM_RESOURCE_LIST * );
typedef VOID (NTAPI *pHalHaltSystem)( VOID );
typedef BOOLEAN (NTAPI *pHalResetDisplay)( VOID );
typedef UCHAR (NTAPI *pHalVectorToIDTEntry)( ULONG );
typedef BOOLEAN (NTAPI *pHalFindBusAddressTranslation)( PHYSICAL_ADDRESS, PULONG, PPHYSICAL_ADDRESS, PULONG_PTR, BOOLEAN );
typedef NTSTATUS (NTAPI *pHalStartMirroring)( VOID );
typedef NTSTATUS (NTAPI *pHalEndMirroring)( ULONG );
typedef NTSTATUS (NTAPI *pHalMirrorPhysicalMemory)( PHYSICAL_ADDRESS, LARGE_INTEGER );
typedef NTSTATUS (NTAPI *pHalMirrorVerify)( PHYSICAL_ADDRESS, LARGE_INTEGER );
typedef VOID (NTAPI *pHalEndOfBoot)( VOID );
typedef PVOID (NTAPI *pHalGetAcpiTable)( ULONG, PCSTR, PCSTR );
typedef VOID (NTAPI *pHalSetPciErrorHandlerCallback)( PCI_ERROR_HANDLER_CALLBACK );
/* Map register entry */
typedef struct _MAP_REGISTER_ENTRY {
PVOID MapRegister;
BOOLEAN WriteToDevice;
} MAP_REGISTER_ENTRY;
typedef MAP_REGISTER_ENTRY *PMAP_REGISTER_ENTRY;
/* Debug device address */
typedef struct {
UCHAR Type;
BOOLEAN Valid;
UCHAR Reserved[2];
PUCHAR TranslatedAddress;
ULONG Length;
} DEBUG_DEVICE_ADDRESS;
typedef DEBUG_DEVICE_ADDRESS *PDEBUG_DEVICE_ADDRESS;
/* Debug memory requirements */
typedef struct {
PHYSICAL_ADDRESS Start;
PHYSICAL_ADDRESS MaxEnd;
PVOID VirtualAddress;
ULONG Length;
BOOLEAN Cached;
BOOLEAN Aligned;
} DEBUG_MEMORY_REQUIREMENTS;
typedef DEBUG_MEMORY_REQUIREMENTS *PDEBUG_MEMORY_REQUIREMENTS;
/* Debug device descriptor */
typedef struct {
ULONG Bus;
USHORT Segment;
ULONG Slot;
USHORT VendorID;
USHORT DeviceID;
UCHAR BaseClass;
UCHAR SubClass;
UCHAR ProgIf;
BOOLEAN Initialized;
BOOLEAN Configured;
DEBUG_DEVICE_ADDRESS BaseAddress[6];
DEBUG_MEMORY_REQUIREMENTS Memory;
} DEBUG_DEVICE_DESCRIPTOR;
typedef DEBUG_DEVICE_DESCRIPTOR *PDEBUG_DEVICE_DESCRIPTOR;
/* Kernel debugger callbacks */
typedef NTSTATUS (NTAPI *pKdSetupPciDeviceForDebugging)( PVOID, PDEBUG_DEVICE_DESCRIPTOR );
typedef NTSTATUS (NTAPI *pKdReleasePciDeviceForDebugging)( PDEBUG_DEVICE_DESCRIPTOR );
typedef NTSTATUS (NTAPI *pKdGetAcpiTablePhase0)( struct _LOADER_PARAMETER_BLOCK *, ULONG );
typedef VOID (NTAPI *pKdCheckPowerButton)( VOID );
typedef PVOID (NTAPI *pKdMapPhysicalMemory64)( PHYSICAL_ADDRESS, ULONG, BOOLEAN );
typedef VOID (NTAPI *pKdUnmapVirtualAddress)( PVOID, ULONG, BOOLEAN );
typedef ULONG (NTAPI *pKdGetPciDataByOffset)( ULONG, ULONG, PVOID, ULONG, ULONG );
typedef ULONG (NTAPI *pKdSetPciDataByOffset)( ULONG, ULONG, PVOID, ULONG, ULONG );
/* Hardware abstraction layer dispatch table */
typedef struct {
ULONG Version;
pHalQuerySystemInformation HalQuerySystemInformation;
pHalSetSystemInformation HalSetSystemInformation;
pHalQueryBusSlots HalQueryBusSlots;
ULONG Spare1;
pHalExamineMBR HalExamineMBR;
pHalIoReadPartitionTable HalIoReadPartitionTable;
pHalIoSetPartitionInformation HalIoSetPartitionInformation;
pHalIoWritePartitionTable HalIoWritePartitionTable;
pHalHandlerForBus HalReferenceHandlerForBus;
pHalReferenceBusHandler HalReferenceBusHandler;
pHalReferenceBusHandler HalDereferenceBusHandler;
pHalInitPnpDriver HalInitPnpDriver;
pHalInitPowerManagement HalInitPowerManagement;
pHalGetDmaAdapter HalGetDmaAdapter;
pHalGetInterruptTranslator HalGetInterruptTranslator;
pHalStartMirroring HalStartMirroring;
pHalEndMirroring HalEndMirroring;
pHalMirrorPhysicalMemory HalMirrorPhysicalMemory;
pHalEndOfBoot HalEndOfBoot;
pHalMirrorVerify HalMirrorVerify;
pHalGetAcpiTable HalGetCachedAcpiTable;
pHalSetPciErrorHandlerCallback HalSetpciErrorHandlerCallback;
} HAL_DISPATCH;
typedef HAL_DISPATCH *PHAL_DISPATCH;
/* Hardware abstraction layer bus information */
typedef struct _HAL_BUS_INFORMATION {
INTERFACE_TYPE BusType;
BUS_DATA_TYPE ConfigurationType;
ULONG BusNumber;
ULONG Reserved;
} HAL_BUS_INFORMATION;
typedef HAL_BUS_INFORMATION *PHAL_BUS_INFORMATION;
/* Hardware abstraction layer profile source information */
typedef struct _HAL_PROFILE_SOURCE_INFORMATION {
KPROFILE_SOURCE Source;
BOOLEAN Supported;
ULONG Interval;
} HAL_PROFILE_SOURCE_INFORMATION;
typedef HAL_PROFILE_SOURCE_INFORMATION *PHAL_PROFILE_SOURCE_INFORMATION;
/* Hardware abstraction layer profile source information (extended version) */
typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX {
KPROFILE_SOURCE Source;
BOOLEAN Supported;
ULONG_PTR Interval;
ULONG_PTR DefInterval;
ULONG_PTR MaxInterval;
ULONG_PTR MinInterval;
} HAL_PROFILE_SOURCE_INFORMATION_EX;
typedef HAL_PROFILE_SOURCE_INFORMATION_EX *PHAL_PROFILE_SOURCE_INFORMATION_EX;
/* Hardware abstraction layer profile source interval */
typedef struct _HAL_PROFILE_SOURCE_INTERVAL {
KPROFILE_SOURCE Source;
ULONG_PTR Interval;
} HAL_PROFILE_SOURCE_INTERVAL;
typedef HAL_PROFILE_SOURCE_INTERVAL *PHAL_PROFILE_SOURCE_INTERVAL;
/* Hardware abstraction layer profile source list */
typedef struct _HAL_PROFILE_SOURCE_LIST {
KPROFILE_SOURCE Source;
PWSTR Description;
} HAL_PROFILE_SOURCE_LIST;
typedef HAL_PROFILE_SOURCE_LIST *PHAL_PROFILE_SOURCE_LIST;
/* Hardware abstraction layer display BIOS information */
typedef enum _HAL_DISPLAY_BIOS_INFORMATION {
HalDisplayInt10Bios = 0,
HalDisplayEmulatedBios = 1,
HalDispalyNoBios = 2
} HAL_DISPLAY_BIOS_INFORMATION;
typedef HAL_DISPLAY_BIOS_INFORMATION *PHAL_DISPLAY_BIOS_INFORMATION;
/* Hardware abstraction layer power information */
typedef struct _HAL_POWER_INFORMATION {
ULONG TBD;
} HAL_POWER_INFORMATION;
typedef HAL_POWER_INFORMATION *PHAL_POWER_INFORMATION;
/* Hardware abstraction layer processor speed information */
typedef struct _HAL_PROCESSOR_SPEED_INFO {
ULONG ProcessorSpeed;
} HAL_PROCESSOR_SPEED_INFO;
typedef HAL_PROCESSOR_SPEED_INFO *PHAL_PROCESSOR_SPEED_INFO;
/* Hardware abstraction layer callbacks */
typedef struct _HAL_CALLBACKS {
PCALLBACK_OBJECT SetSystemInformation;
PCALLBACK_OBJECT BusCheck;
} HAL_CALLBACKS;
typedef HAL_CALLBACKS *PHAL_CALLBACKS;
/* Hardware abstraction layer processor feature */
typedef struct _HAL_PROCESSOR_FEATURE {
ULONG UsableFeatureBits;
} HAL_PROCESSOR_FEATURE;
typedef HAL_PROCESSOR_FEATURE *PHAL_PROCESSOR_FEATURE;
/* Hardware abstraction layer I/O read/write handler */
typedef NTSTATUS (NTAPI *PHALIOREADWRITEHANDLER)( BOOLEAN, ULONG, ULONG, PULONG );
/* Hardware abstraction layer bad I/O address list */
typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST {
ULONG BadAddrBegin;
ULONG BadAddrSize;
ULONG OSVersionTrigger;
PHALIOREADWRITEHANDLER IOHandler;
} HAL_AMLI_BAD_IO_ADDRESS_LIST;
typedef HAL_AMLI_BAD_IO_ADDRESS_LIST *PHAL_AMLI_BAD_IO_ADDRESS_LIST;
/* Hardware abstraction layer MCA interface callbacks */
#ifdef _X86_
typedef VOID (NTAPI *PHALMCAINTERFACELOCK)( VOID );
typedef VOID (NTAPI *PHALMCAINTERFACEUNLOCK)( VOID );
typedef NTSTATUS (NTAPI *PHALMCAINTERFACEREADREGISTER)( UCHAR, PVOID );
#endif
/* Hardware abstraction layer MCA interface */
#ifdef _X86_
typedef struct _HAL_MCA_INTERFACE {
PHALMCAINTERFACELOCK Lock;
PHALMCAINTERFACEUNLOCK Unlock;
PHALMCAINTERFACEREADREGISTER ReadRegister;
} HAL_MCA_INTERFACE;
#endif
/* Hardware abstraction layer APIC destination modes */
#ifdef _X86_
typedef enum {
ApicDestinationModePhysical = 1,
ApicDestinationModeLogicalFlat = 2,
ApicDestinationModeLogicalClustered = 3,
ApicDestinationModeUnknown = 4
} HAL_APIC_DESTINATION_MODE;
typedef HAL_APIC_DESTINATION_MODE *PHAL_APIC_DESTINATION_MODE;
#endif
/* Driver exception callback */
#ifdef _X86_
typedef VOID (NTAPI *PDRIVER_EXCPTN_CALLBACK)( PVOID, PMCA_EXCEPTION );
typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK;
#endif
/* MCA driver information */
#ifdef _X86_
typedef struct _MCA_DRIVER_INFO {
PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback;
PKDEFERRED_ROUTINE DpcCallback;
PVOID DeviceContext;
} MCA_DRIVER_INFO;
typedef MCA_DRIVER_INFO *PMCA_DRIVER_INFO;
#endif
/* Hardware abstraction layer error information */
#ifdef _X86_
typedef struct _HAL_ERROR_INFO {
ULONG Version;
ULONG InitMaxSize;
ULONG McaMaxSize;
ULONG McaPreviousEventsCount;
ULONG McaCorrectedEventsCount;
ULONG McaKernelDeliveryFails;
ULONG McaDriverDpcQueueFails;
ULONG McaReserved;
ULONG CmcMaxSize;
ULONG CmcPollingInterval;
ULONG CmcInterruptsCount;
ULONG CmcKernelDeliveryFails;
ULONG CmcDriverDpcQueueFails;
ULONG CmcGetStateFails;
ULONG CmcClearStateFails;
ULONG CmcReserved;
ULONGLONG CmcLogId;
ULONG CpeMaxSize;
ULONG CpePollingInterval;
ULONG CpeInterruptsCount;
ULONG CpeKernelDeliveryFails;
ULONG CpeDriverDpcQueueFails;
ULONG CpeGetStateFails;
ULONG CpeClearStateFails;
ULONG CpeInterruptSources;
ULONGLONG CpeLogId;
ULONGLONG KernelReserved[4];
} HAL_ERROR_INFO;
typedef HAL_ERROR_INFO *PHAL_ERROR_INFO;
#endif
/* Driver exception callbacks */
#ifdef _X86_
typedef VOID (NTAPI *PDRIVER_CMC_EXCEPTION_CALLBACK)( PVOID, PCMC_EXCEPTION );
typedef VOID (NTAPI *PDRIVER_CPE_EXCEPTION_CALLBACK)( PVOID, PCPE_EXCEPTION );
#endif
/* CMC driver information */
#ifdef _X86_
typedef struct _CMC_DRIVER_INFO {
PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback;
PKDEFERRED_ROUTINE DpcCallback;
PVOID DeviceContext;
} CMC_DRIVER_INFO;
typedef CMC_DRIVER_INFO *PCMC_DRIVER_INFO;
#endif
/* CPE driver information */
#ifdef _X86_
typedef struct _CPE_DRIVER_INFO {
PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback;
PKDEFERRED_ROUTINE DpcCallback;
PVOID DeviceContext;
} CPE_DRIVER_INFO;
typedef CPE_DRIVER_INFO *PCPE_DRIVER_INFO;
#endif
/* Hardware abstraction layer platform information */
typedef struct _HAL_PLATFORM_INFORMATION {
ULONG PlatformFlags;
} HAL_PLATFORM_INFORMATION;
typedef HAL_PLATFORM_INFORMATION *PHAL_PLATFORM_INFORMATION;
/* Physical couter resource descriptor types */
typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE {
ResourceTypeSingle = 0,
ResourceTypeRange = 1,
ResourceTypeExtendedCounterConfiguration = 2,
ResourceTypeOverflow = 3,
ResourceTypeMax = 4
} PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE;
/* Physical counter resource descriptor */
typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR {
PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type;
ULONG Flags;
union {
ULONG CounterIndex;
ULONG ExtendedRegisterAddress;
struct {
ULONG Begin;
ULONG End;
} Range;
} u;
} PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR;
typedef PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR;
/* Physical counter resource list */
typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST {
ULONG Count;
PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors[ANYSIZE_ARRAY];
} PHYSICAL_COUNTER_RESOURCE_LIST;
typedef PHYSICAL_COUNTER_RESOURCE_LIST *PPHYSICAL_COUNTER_RESOURCE_LIST;
/* PCI AGP capability */
typedef struct _PCI_AGP_CAPABILITY {
PCI_CAPABILITIES_HEADER Header;
USHORT Minor : 4;
USHORT Major : 4;
USHORT Rsvd1 : 8;
struct _PCI_AGP_STATUS {
ULONG Rate : 3;
ULONG Agp3Mode : 1;
ULONG FastWrite : 1;
ULONG FourGB : 1;
ULONG HostTransDisable : 1;
ULONG Gart64 : 1;
ULONG ITA_Coherent : 1;
ULONG SideBandAddressing : 1;
ULONG CalibrationCycle : 3;
ULONG AsyncRequestSize : 3;
ULONG Rsvd1 : 1;
ULONG Isoch : 1;
ULONG Rsvd2 : 6;
ULONG RequestQueueDepthMaximum : 8;
} AGPStatus;
struct _PCI_AGP_COMMAND {
ULONG Rate : 3;
ULONG Rsvd1 : 1;
ULONG FastWriteEnable : 1;
ULONG FourGBEnable : 1;
ULONG Rsvd2 : 1;
ULONG Gart64 : 1;
ULONG AGPEnable : 1;
ULONG SBAEnable : 1;
ULONG CalibrationCycle : 3;
ULONG AsyncReqSize : 3;
ULONG Rsvd3 : 8;
ULONG RequestQueueDepth : 8;
} AGPCommand;
} PCI_AGP_CAPABILITY;
typedef PCI_AGP_CAPABILITY *PPCI_AGP_CAPABILITY;
/* Extended AGP registers */
typedef enum _EXTENDED_AGP_REGISTER {
IsochStatus = 0,
AgpControl = 1,
ApertureSize = 2,
AperturePageSize = 3,
GartLow = 4,
GartHigh = 5,
IsochCommand = 6
} EXTENDED_AGP_REGISTER;
typedef EXTENDED_AGP_REGISTER *PEXTENDED_AGP_REGISTER;
/* PCI AGP ISOCH status */
typedef struct _PCI_AGP_ISOCH_STATUS {
ULONG ErrorCode : 2;
ULONG Rsvd1 : 1;
ULONG Isoch_L : 3;
ULONG Isoch_Y : 2;
ULONG Isoch_N : 8;
ULONG Rsvd2 : 16;
} PCI_AGP_ISOCH_STATUS;
typedef PCI_AGP_ISOCH_STATUS *PPCI_AGP_ISOCH_STATUS;
/* PCI AGP control */
typedef struct _PCI_AGP_CONTROL {
ULONG Rsvd1 : 7;
ULONG GTLB_Enable : 1;
ULONG AP_Enable : 1;
ULONG CAL_Disable : 1;
ULONG Rsvd2 : 22;
} PCI_AGP_CONTROL;
typedef PCI_AGP_CONTROL *PPCI_AGP_CONTROL;
/* PCI AGP aperture page size */
typedef struct _PCI_AGP_APERTURE_PAGE_SIZE {
USHORT PageSizeMask : 11;
USHORT Rsvd1 : 1;
USHORT PageSizeSelect : 4;
} PCI_AGP_APERTURE_PAGE_SIZE;
typedef PCI_AGP_APERTURE_PAGE_SIZE *PPCI_AGP_APERTURE_PAGE_SIZE;
/* PCI AGP ISOCH command */
typedef struct _PCI_AGP_ISOCH_COMMAND {
USHORT Rsvd1 : 6;
USHORT Isoch_Y : 2;
USHORT Isoch_N : 8;
} PCI_AGP_ISOCH_COMMAND;
typedef PCI_AGP_ISOCH_COMMAND *PPCI_AGP_ISOCH_COMMAND;
/* PCI AGP extended capability */
typedef struct PCI_AGP_EXTENDED_CAPABILITY {
PCI_AGP_ISOCH_STATUS IsochStatus;
PCI_AGP_CONTROL AgpControl;
USHORT ApertureSize;
PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize;
ULONG GartLow;
ULONG GartHigh;
PCI_AGP_ISOCH_COMMAND IsochCommand;
} PCI_AGP_EXTENDED_CAPABILITY;
typedef PCI_AGP_EXTENDED_CAPABILITY *PPCI_AGP_EXTENDED_CAPABILITY;
/* PCI bridge capability */
typedef struct _PCIX_BRIDGE_CAPABILITY {
PCI_CAPABILITIES_HEADER Header;
union {
struct {
USHORT Bus64Bit : 1;
USHORT Bus133MHzCapable : 1;
USHORT SplitCompletionDiscarded : 1;
USHORT UnexpectedSplitCompletion : 1;
USHORT SplitCompletionOverrun : 1;
USHORT SplitRequestDelayed : 1;
USHORT BusModeFrequency : 4;
USHORT Rsvd : 2;
USHORT Version : 2;
USHORT Bus266MHzCapable : 1;
USHORT Bus533MHzCapable : 1;
};
USHORT AsUSHORT;
} SecondaryStatus;
union {
struct {
ULONG FunctionNumber : 3;
ULONG DeviceNumber : 5;
ULONG BusNumber : 8;
ULONG Device64Bit : 1;
ULONG Device133MHzCapable : 1;
ULONG SplitCompletionDiscarded : 1;
ULONG UnexpectedSplitCompletion : 1;
ULONG SplitCompletionOverrun : 1;
ULONG SplitRequestDelayed : 1;
ULONG Rsvd : 7;
ULONG DIMCapable : 1;
ULONG Device266MHzCapable : 1;
ULONG Device533MHzCapable : 1;
};
ULONG AsULONG;
} BridgeStatus;
USHORT UpstreamSplitTransactionCapacity;
USHORT UpstreamSplitTransactionLimit;
USHORT DownstreamSplitTransactionCapacity;
USHORT DownstreamSplitTransactionLimit;
union {
struct {
ULONG SelectSecondaryRegisters : 1;
ULONG ErrorPresentInOtherBank : 1;
ULONG AdditionalCorrectableError : 1;
ULONG AdditionalUncorrectableError : 1;
ULONG ErrorPhase : 3;
ULONG ErrorCorrected : 1;
ULONG Syndrome : 8;
ULONG ErrorFirstCommand : 4;
ULONG ErrorSecondCommand : 4;
ULONG ErrorUpperAttributes : 4;
ULONG ControlUpdateEnable : 1;
ULONG Rsvd : 1;
ULONG DisableSingleBitCorrection : 1;
ULONG EccMode : 1;
};
ULONG AsULONG;
} EccControlStatus;
ULONG EccFirstAddress;
ULONG EccSecondAddress;
ULONG EccAttribute;
} PCIX_BRIDGE_CAPABILITY;
typedef PCIX_BRIDGE_CAPABILITY *PPCIX_BRIDGE_CAPABILITY;
/* PCI subsystem identifiers capability */
typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY {
PCI_CAPABILITIES_HEADER Header;
USHORT Reserved;
USHORT SubVendorID;
USHORT SubSystemID;
} PCI_SUBSYSTEM_IDS_CAPABILITY;
typedef PCI_SUBSYSTEM_IDS_CAPABILITY *PPCI_SUBSYSTEM_IDS_CAPABILITY;
/* PCI root bus OSC support field */
typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD {
union {
struct {
ULONG ExtendedConfigOpRegions : 1;
ULONG ActiveStatePowerManagement : 1;
ULONG ClockPowerManagement : 1;
ULONG SegmentGroups : 1;
ULONG MessageSignaledInterrupts : 1;
ULONG WindowsHardwareErrorArchitecture : 1;
ULONG Reserved : 26;
};
ULONG AsULONG;
} u;
} PCI_ROOT_BUS_OSC_SUPPORT_FIELD;
typedef PCI_ROOT_BUS_OSC_SUPPORT_FIELD *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD;
/* PCI root bus OSC control field */
typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD {
union {
struct {
ULONG ExpressNativeHotPlug : 1;
ULONG ShpcNativeHotPlug : 1;
ULONG ExpressNativePME : 1;
ULONG ExpressAdvancedErrorReporting : 1;
ULONG ExpressCapabilityStructure : 1;
ULONG Reserved : 27;
};
ULONG AsULONG;
} u;
} PCI_ROOT_BUS_OSC_CONTROL_FIELD;
typedef PCI_ROOT_BUS_OSC_CONTROL_FIELD *PPCI_ROOT_BUS_OSC_CONTROL_FIELD;
/* PCI hardware interfaces */
typedef enum _PCI_HARDWARE_INTERFACE {
PciConventional = 0,
PciXMode1 = 1,
PciXMode2 = 2,
PciExpress = 3
} PCI_HARDWARE_INTERFACE;
typedef PCI_HARDWARE_INTERFACE *PPCI_HARDWARE_INTERFACE;
/* PCI bus widths */
typedef enum {
BusWidth32Bits = 0,
BusWidth64Bits = 1
} PCI_BUS_WIDTH;
/* PCI root bus hardware capability */
typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY {
PCI_HARDWARE_INTERFACE SecondaryInterface;
struct {
BOOLEAN BusCapabilitiesFound;
ULONG CurrentSpeedAndMode;
ULONG SupportedSpeedsAndModes;
BOOLEAN DeviceIDMessagingCapable;
PCI_BUS_WIDTH SecondaryBusWidth;
};
PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport;
PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlSupport;
PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted;
} PCI_ROOT_BUS_HARDWARE_CAPABILITY;
typedef PCI_ROOT_BUS_HARDWARE_CAPABILITY *PPCI_ROOT_BUS_HARDWARE_CAPABILITY;
/* PCI express capabilities register */
typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER {
struct {
USHORT CapabilitiesVersion : 4;
USHORT DeviceType : 4;
USHORT SlotImplemented : 1;
USHORT InterruptMessageNumber : 5;
USHORT Rsvd : 2;
};
USHORT AsUSHORT;
} PCI_EXPRESS_CAPABILITIES_REGISTER;
typedef PCI_EXPRESS_CAPABILITIES_REGISTER *PPCI_EXPRESS_CAPABILITIES_REGISTER;
/* PCI express device capabilities register */
typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER {
struct {
ULONG MaxPayloadSizeSupported : 3;
ULONG PhantomFunctionsSupported : 2;
ULONG ExtendedTagSupported : 1;
ULONG L0sAcceptableLatency : 3;
ULONG L1AcceptableLatency : 3;
ULONG Undefined : 3;
ULONG RoleBasedErrorReporting : 1;
ULONG Rsvd1 : 2;
ULONG CapturedSlotPowerLimit : 8;
ULONG CapturedSlotPowerLimitScale : 2;
ULONG Rsvd2 : 4;
};
ULONG AsULONG;
} PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER;
typedef PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER;
/* PCI express device control register */
typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER {
struct {
USHORT CorrectableErrorEnable : 1;
USHORT NonFatalErrorEnable : 1;
USHORT FatalErrorEnable : 1;
USHORT UnsupportedRequestErrorEnable : 1;
USHORT EnableRelaxedOrder : 1;
USHORT MaxPayloadSize : 3;
USHORT ExtendedTagEnable : 1;
USHORT PhantomFunctionsEnable : 1;
USHORT AuxPowerEnable : 1;
USHORT NoSnoopEnable : 1;
USHORT MaxReadRequestSize : 3;
USHORT BridgeConfigRetryEnable : 1;
};
USHORT AsUSHORT;
} PCI_EXPRESS_DEVICE_CONTROL_REGISTER;
typedef PCI_EXPRESS_DEVICE_CONTROL_REGISTER *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER;
/* PCI express device status register */
typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER {
struct {
USHORT CorrectableErrorDetected : 1;
USHORT NonFatalErrorDetected : 1;
USHORT FatalErrorDetected : 1;
USHORT UnsupportedRequestDetected : 1;
USHORT AuxPowerDetected : 1;
USHORT TransactionsPending : 1;
USHORT Rsvd : 10;
};
USHORT AsUSHORT;
} PCI_EXPRESS_DEVICE_STATUS_REGISTER;
typedef PCI_EXPRESS_DEVICE_STATUS_REGISTER *PPCI_EXPRESS_DEVICE_STATUS_REGISTER;
/* PCI express link capabilities register */
typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER {
struct {
ULONG MaximumLinkSpeed : 4;
ULONG MaximumLinkWidth : 6;
ULONG ActiveStatePMSupport : 2;
ULONG L0sExitLatency : 3;
ULONG L1ExitLatency : 3;
ULONG ClockPowerManagement : 1;
ULONG SurpriseDownErrorReportingCapable : 1;
ULONG DataLinkLayerActiveReportingCapable : 1;
ULONG Rsvd : 3;
ULONG PortNumber : 8;
};
ULONG AsULONG;
} PCI_EXPRESS_LINK_CAPABILITIES_REGISTER;
typedef PCI_EXPRESS_LINK_CAPABILITIES_REGISTER *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER;
/* PCI express link control register */
typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER {
struct {
USHORT ActiveStatePMControl : 2;
USHORT Rsvd1 : 1;
USHORT ReadCompletionBoundary : 1;
USHORT LinkDisable : 1;
USHORT RetrainLink : 1;
USHORT CommonClockConfig : 1;
USHORT ExtendedSynch : 1;
USHORT EnableClockPowerManagement : 1;
USHORT Rsvd2 : 7;
};
USHORT AsUSHORT;
} PCI_EXPRESS_LINK_CONTROL_REGISTER;
typedef PCI_EXPRESS_LINK_CONTROL_REGISTER *PPCI_EXPRESS_LINK_CONTROL_REGISTER;
/* PCI express link status register */
typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER {
struct {
USHORT LinkSpeed : 4;
USHORT LinkWidth : 6;
USHORT Undefined : 1;
USHORT LinkTraining : 1;
USHORT SlotClockConfig : 1;
USHORT DataLinkLayerActive : 1;
USHORT Rsvd : 2;
};
USHORT AsUSHORT;
} PCI_EXPRESS_LINK_STATUS_REGISTER;
typedef PCI_EXPRESS_LINK_STATUS_REGISTER *PPCI_EXPRESS_LINK_STATUS_REGISTER;
/* PCI express slot capabilities register */
typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER {
struct {
ULONG AttentionButtonPresent : 1;
ULONG PowerControllerPresent : 1;
ULONG MRLSensorPresent : 1;
ULONG AttentionIndicatorPresent : 1;
ULONG PowerIndicatorPresent : 1;
ULONG HotPlugSurprise : 1;
ULONG HotPlugCapable : 1;
ULONG SlotPowerLimit : 8;
ULONG SlotPowerLimitScale : 2;
ULONG ElectromechanicalLockPresent : 1;
ULONG NoCommandCompletedSupport : 1;
ULONG PhysicalSlotNumber : 13;
};
ULONG AsULONG;
} PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER;
typedef PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER;
/* PCI express slot control register */
typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER {
struct {
USHORT AttentionButtonEnable : 1;
USHORT PowerFaultDetectEnable : 1;
USHORT MRLSensorEnable : 1;
USHORT PresenceDetectEnable : 1;
USHORT CommandCompletedEnable : 1;
USHORT HotPlugInterruptEnable : 1;
USHORT AttentionIndicatorControl : 2;
USHORT PowerIndicatorControl : 2;
USHORT PowerControllerControl : 1;
USHORT ElectromechanicalLockControl : 1;
USHORT DataLinkStateChangeEnable : 1;
USHORT Rsvd : 3;
};
USHORT AsUSHORT;
} PCI_EXPRESS_SLOT_CONTROL_REGISTER;
typedef PCI_EXPRESS_SLOT_CONTROL_REGISTER *PPCI_EXPRESS_SLOT_CONTROL_REGISTER;
/* PCI express slot status register */
typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER {
struct {
USHORT AttentionButtonPressed : 1;
USHORT PowerFaultDetected : 1;
USHORT MRLSensorChanged : 1;
USHORT PresenceDetectChanged : 1;
USHORT CommandCompleted : 1;
USHORT MRLSensorState : 1;
USHORT PresenceDetectState : 1;
USHORT ElectromechanicalLockEngaged : 1;
USHORT DataLinkStateChanged : 1;
USHORT Rsvd : 7;
};
USHORT AsUSHORT;
} PCI_EXPRESS_SLOT_STATUS_REGISTER;
typedef PCI_EXPRESS_SLOT_STATUS_REGISTER *PPCI_EXPRESS_SLOT_STATUS_REGISTER;
/* PCI express root control register */
typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER {
struct {
USHORT CorrectableSerrEnable : 1;
USHORT NonFatalSerrEnable : 1;
USHORT FatalSerrEnable : 1;
USHORT PMEInterruptEnable : 1;
USHORT CRSSoftwareVisibilityEnable : 1;
USHORT Rsvd : 11;
};
USHORT AsUSHORT;
} PCI_EXPRESS_ROOT_CONTROL_REGISTER;
typedef PCI_EXPRESS_ROOT_CONTROL_REGISTER *PPCI_EXPRESS_ROOT_CONTROL_REGISTER;
/* PCI express root capabilities register */
typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER {
struct {
USHORT CRSSoftwareVisibility : 1;
USHORT Rsvd : 15;
};
USHORT AsUSHORT;
} PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER;
typedef PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER;
/* PCI express root status register */
typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER {
struct {
ULONG PMERequestorId : 16;
ULONG PMEStatus : 1;
ULONG PMEPending : 1;
ULONG Rsvd : 14;
};
ULONG AsULONG;
} PCI_EXPRESS_ROOT_STATUS_REGISTER;
typedef PCI_EXPRESS_ROOT_STATUS_REGISTER *PPCI_EXPRESS_ROOT_STATUS_REGISTER;
/* PCI express capability */
typedef struct _PCI_EXPRESS_CAPABILITY {
PCI_CAPABILITIES_HEADER Header;
PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities;
PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities;
PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl;
PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus;
PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities;
PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl;
PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus;
PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities;
PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl;
PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus;
PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl;
PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities;
PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus;
} PCI_EXPRESS_CAPABILITY;
typedef PCI_EXPRESS_CAPABILITY *PPCI_EXPRESS_CAPABILITY;
/* PCI express MRL states */
typedef enum {
MRLClosed = 0,
MRLOpen = 1
} PCI_EXPRESS_MRL_STATE;
/* PCI express card presence values */
typedef enum {
SlotEmpty = 0,
CardPresent = 1
} PCI_EXPRESS_CARD_PRESENCE;
/* PCI express indicator states */
typedef enum {
IndicatorOn = 1,
IndicatorBlink = 2,
IndicatorOff = 3
} PCI_EXPRESS_INDICATOR_STATE;
/* PCI express power states */
typedef enum {
PowerOn = 0,
PowerOff = 1
} PCI_EXPRESS_POWER_STATE;
/* PCI express ASPM support values */
typedef enum {
L0sEntrySupport = 1,
L0sAndL1EntrySupport = 3
} PCI_EXPRESS_ASPM_SUPPORT;
/* PCI express ASPM control values */
typedef enum {
L0sAndL1EntryDisabled = 0,
L0sEntryEnabled = 1,
L1EntryEnabled = 2,
L0sAndL1EntryEnabled = 3
} PCI_EXPRESS_ASPM_CONTROL;
/* PCI express L0s exit latency values */
typedef enum {
L0s_Below64ns = 0,
L0s_64ns_128ns = 1,
L0s_128ns_256ns = 2,
L0s_256ns_512ns = 3,
L0s_512ns_1us = 4,
L0s_1us_2us = 5,
L0s_2us_4s = 6,
L0s_Above4us = 7
} PCI_EXPRESS_L0s_EXIT_LATENCY;
/* PCI express L1 exit latency values */
typedef enum {
L1_Below1us = 0,
L1_1us_2us = 1,
L1_2us_4us = 2,
L1_4us_8us = 4,
L1_8us_16us = 8,
L1_16us_32us = 16,
L1_32us_64us = 32,
L1_Above64us = 64
} PCI_EXPRESS_L1_EXIT_LATENCY;
/* PCI express device types */
typedef enum {
PciExpressEndpoint = 0,
PciExpressLegacyEndpoint = 1,
PciExpressRootPart = 4,
PciExpressUpstreamSwitchPort = 5,
PciExpressDownstreamSwitchPort = 6,
PciExpressToPciXBridge = 7,
PciXToExpressBridge = 8,
PciExpressRootComplexIntegratedEndpoint = 9,
PciExpressRootComplexEventCollector = 10
} PCI_EXPRESS_DEVICE_TYPE;
/* PCI express maximum payload sizes */
typedef enum {
MaxPayload128Bytes = 0,
MaxPayload256Bytes = 1,
MaxPayload512Bytes = 2,
MaxPayload1024Bytes = 4,
MaxPayload2048Bytes = 8,
MaxPayload4096Bytes = 16
} PCI_EXPRESS_MAX_PAYLOAD_SIZE;
/* PCI express PME requestor identifier */
typedef union _PCI_EXPRESS_PME_REQUESTOR_ID {
struct {
USHORT FunctionNumber : 3;
USHORT DeviceNumber : 5;
USHORT BusNumber : 8;
};
USHORT AsUSHORT;
} PCI_EXPRESS_PME_REQUESTOR_ID;
typedef PCI_EXPRESS_PME_REQUESTOR_ID *PPCI_EXPRESS_PME_REQUESTOR_ID;
/* PCI callbacks */
typedef VOID (NTAPI *PciPin2Line)( struct _BUS_HANDLER *, struct _BUS_HANDLER *, PCI_SLOT_NUMBER, PPCI_COMMON_CONFIG );
typedef VOID (NTAPI *PciLine2Pin)( struct _BUS_HANDLER *, struct _BUS_HANDLER *, PCI_SLOT_NUMBER, PPCI_COMMON_CONFIG, PPCI_COMMON_CONFIG );
typedef VOID (NTAPI *PciReadWriteConfig)( struct _BUS_HANDLER *, PCI_SLOT_NUMBER, PVOID, ULONG, ULONG );
/* PCI bus data */
typedef struct _PCIBUSDATA {
ULONG Tag;
ULONG Version;
PciReadWriteConfig ReadConfig;
PciReadWriteConfig WriteConfig;
PciPin2Line Pin2Line;
PciLine2Pin Line2Pin;
PCI_SLOT_NUMBER ParentSlot;
PVOID Reserved[4];
} PCIBUSDATA;
typedef PCIBUSDATA *PPCIBUSDATA;
/* PCI bus interface callbacks */
typedef ULONG (NTAPI *PCI_READ_WRITE_CONFIG)( PVOID, ULONG, ULONG, PVOID, ULONG, ULONG );
typedef VOID (NTAPI *PCI_PIN_TO_LINE)( PVOID, PPCI_COMMON_CONFIG );
typedef VOID (NTAPI *PCI_LINE_TO_PIN)( PVOID, PPCI_COMMON_CONFIG, PPCI_COMMON_CONFIG );
typedef VOID (NTAPI *PCI_ROOT_BUS_CAPABILITY)( PVOID, PPCI_ROOT_BUS_HARDWARE_CAPABILITY );
typedef VOID (NTAPI *PCI_EXPRESS_WAKE_CONTROL)( PVOID, BOOLEAN );
/* PCI bus interface standard */
typedef struct _PCI_BUS_INTERFACE_STANDARD {
USHORT Size;
USHORT Version;
PVOID Context;
PINTERFACE_REFERENCE InterfaceReference;
PINTERFACE_DEREFERENCE InterfaceDereference;
PCI_READ_WRITE_CONFIG ReadConfig;
PCI_READ_WRITE_CONFIG WriteConfig;
PCI_PIN_TO_LINE PinToLine;
PCI_LINE_TO_PIN LineToPin;
PCI_ROOT_BUS_CAPABILITY RootBusCapability;
PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl;
} PCI_BUS_INTERFACE_STANDARD;
typedef PCI_BUS_INTERFACE_STANDARD *PPCI_BUS_INTERFACE_STANDARD;
/* Windows Hardware Error Architecture physical address data type */
#define WHEA_PHYSICAL_ADDRESS LARGE_INTEGER
/* Windows Hardware Error Architecture error source types */
typedef enum _WHEA_ERROR_SOURCE_TYPE {
WheaErrSrcTypeMCE = 0x00,
WheaErrSrcTypeCMC = 0x01,
WheaErrSrcTypeCPE = 0x02,
WheaErrSrcTypeNMI = 0x03,
WheaErrSrcTypePCIe = 0x04,
WheaErrSrcTypeGeneric = 0x05,
WheaErrSrcTypeINIT = 0x06,
WheaErrSrcTypeBOOT = 0x07,
WheaErrSrcTypeSCIGeneric = 0x08,
WheaErrSrcTypeIPFMCA = 0x09,
WheaErrSrcTypeIPFCMC = 0x0A,
WheaErrSrcTypeIPFCPE = 0x0B,
WheaErrSrcTypeMax = 0x0C
} WHEA_ERROR_SOURCE_TYPE;
typedef WHEA_ERROR_SOURCE_TYPE *PWHEA_ERROR_SOURCE_TYPE;
/* Windows Hardware Error Architecture error source states */
typedef enum _WHEA_ERROR_SOURCE_STATE {
WheaErrSrcStateStopped = 0x01,
WheaErrSrcStateStarted = 0x02
} WHEA_ERROR_SOURCE_STATE;
typedef WHEA_ERROR_SOURCE_STATE *PWHEA_ERROR_SOURCE_STATE;
/* The following structures get 1-byte packing. */
#include <pshpack1.h>
/* Windows Hardware Error Architecture notification flags */
typedef union _WHEA_NOTIFICATION_FLAGS {
struct {
USHORT PollIntervalRW : 1;
USHORT SwitchToPollingThresholdRW : 1;
USHORT SwitchToPollingWindowRW : 1;
USHORT ErrorThresholdRW : 1;
USHORT ErrorThresholdWindowRW : 1;
USHORT Reserved : 11;
};
USHORT AsUSHORT;
} WHEA_NOTIFICATION_FLAGS;
typedef WHEA_NOTIFICATION_FLAGS *PWHEA_NOTIFICATION_FLAGS;
/* XPF MC bank flags */
typedef union _XPF_MC_BANK_FLAGS {
struct {
UCHAR ClearOnInitializationRW : 1;
UCHAR ControlDataRW : 1;
UCHAR Reserved : 6;
};
UCHAR AsUCHAR;
} XPF_MC_BANK_FLAGS;
typedef XPF_MC_BANK_FLAGS *PXPF_MC_BANK_FLAGS;
/* XPF MCE flags */
typedef union _XPF_MCE_FLAGS {
struct {
ULONG MCG_CapabilityRW : 1;
ULONG MCG_GlobalControlRW : 1;
ULONG Reserved : 30;
};
ULONG AsULONG;
} XPF_MCE_FLAGS;
typedef XPF_MCE_FLAGS *PXPF_MCE_FLAGS;
/* Advanced error reporting root port descriptor flags */
typedef union _AER_ROOTPORT_DESCRIPTOR_FLAGS {
struct {
USHORT UncorrectableErrorMaskRW : 1;
USHORT UncorrectableErrorSeverityRW : 1;
USHORT CorrectableErrorMaskRW : 1;
USHORT AdvancedCapsAndControlRW : 1;
USHORT RootErrorCommandRW : 1;
USHORT Reserved : 11;
};
USHORT AsUSHORT;
} AER_ROOTPORT_DESCRIPTOR_FLAGS;
typedef AER_ROOTPORT_DESCRIPTOR_FLAGS *PAER_ROOTPORT_DESCRIPTOR_FLAGS;
/* Advanced error reporting endpoint descriptor flags */
typedef union _AER_ENDPOINT_DESCRIPTOR_FLAGS {
struct {
USHORT UncorrectableErrorMaskRW : 1;
USHORT UncorrectableErrorSeverityRW : 1;
USHORT CorrectableErrorMaskRW : 1;
USHORT AdvancedCapsAndControlRW : 1;
USHORT Reserved : 12;
};
USHORT AsUSHORT;
} AER_ENDPOINT_DESCRIPTOR_FLAGS;
typedef AER_ENDPOINT_DESCRIPTOR_FLAGS *PAER_ENDPOINT_DESCRIPTOR_FLAGS;
/* Advanced error reporting bridge descriptor flags */
typedef union _AER_BRIDGE_DESCRIPTOR_FLAGS {
struct {
USHORT UncorrectableErrorMaskRW : 1;
USHORT UncorrectableErrorSeverityRW : 1;
USHORT CorrectableErrorMaskRW : 1;
USHORT AdvancedCapsAndControlRW : 1;
USHORT SecondaryUncorrectableErrorMaskRW : 1;
USHORT SecondaryUncorrectableErrorSeverityRW : 1;
USHORT SecondaryCapsAndControlRW : 1;
USHORT Reserved : 9;
};
USHORT AsUSHORT;
} AER_BRIDGE_DESCRIPTOR_FLAGS;
typedef AER_BRIDGE_DESCRIPTOR_FLAGS *PAER_BRIDGE_DESCRIPTOR_FLAGS;
/* Windows Hardware Error Architecture notification descriptor */
typedef struct _WHEA_NOTIFICATION_DESCRIPTOR {
UCHAR Type;
UCHAR Length;
WHEA_NOTIFICATION_FLAGS Flags;
union {
struct {
ULONG PollInterval;
} Polled;
struct {
ULONG PollInterval;
ULONG Vector;
ULONG SwitchToPollingThreshold;
ULONG SwitchToPollingWindow;
ULONG ErrorThreshold;
ULONG ErrorThresholdWindow;
} Interrupt;
struct {
ULONG PollInterval;
ULONG Vector;
ULONG SwitchToPollingThreshold;
ULONG SwitchToPollingWindow;
ULONG ErrorThreshold;
ULONG ErrorThresholdWindow;
} LocalInterrupt;
struct {
ULONG PollInterval;
ULONG Vector;
ULONG SwitchToPollingThreshold;
ULONG SwitchToPollingWindow;
ULONG ErrorThreshold;
ULONG ErrorThresholdWindow;
} Sci;
struct {
ULONG PollInterval;
ULONG Vector;
ULONG SwitchToPollingThreshold;
ULONG SwitchToPollingWindow;
ULONG ErrorThreshold;
ULONG ErrorThresholdWindow;
} Nmi;
} u;
} WHEA_NOTIFICATION_DESCRIPTOR;
typedef WHEA_NOTIFICATION_DESCRIPTOR *PWHEA_NOTIFICATION_DESCRIPTOR;
/* Windows Hardware Error Architecture XPF MC bank descriptor */
typedef struct _WHEA_XPF_MC_BANK_DESCRIPTOR {
UCHAR BankNumber;
BOOLEAN ClearOnInitialization;
UCHAR StatusDataFormat;
XPF_MC_BANK_FLAGS Flags;
ULONG ControlMsr;
ULONG StatusMsr;
ULONG AddressMsr;
ULONG MiscMsr;
ULONGLONG ControlData;
} WHEA_XPF_MC_BANK_DESCRIPTOR;
typedef WHEA_XPF_MC_BANK_DESCRIPTOR *PWHEA_XPF_MC_BANK_DESCRIPTOR;
/* Windows Hardware Error Architecture XPF MCE descriptor */
typedef struct _WHEA_XPF_MCE_DESCRIPTOR {
USHORT Type;
UCHAR Enabled;
UCHAR NumberOfBanks;
XPF_MCE_FLAGS Flags;
ULONGLONG MCG_Capability;
ULONGLONG MCG_GlobalControl;
WHEA_XPF_MC_BANK_DESCRIPTOR Banks[WHEA_MAX_MC_BANKS];
} WHEA_XPF_MCE_DESCRIPTOR;
typedef WHEA_XPF_MCE_DESCRIPTOR *PWHEA_XPF_MCE_DESCRIPTOR;
/* Windows Hardware Error Architecture XPF CMC descriptor */
typedef struct _WHEA_XPF_CMC_DESCRIPTOR {
USHORT Type;
BOOLEAN Enabled;
UCHAR NumberOfBanks;
ULONG Reserved;
WHEA_NOTIFICATION_DESCRIPTOR Notify;
WHEA_XPF_MC_BANK_DESCRIPTOR Banks[WHEA_MAX_MC_BANKS];
} WHEA_XPF_CMC_DESCRIPTOR;
typedef WHEA_XPF_CMC_DESCRIPTOR *PWHEA_XPF_CMC_DESCRIPTOR;
/* Windows Hardware Error Architecture PCI slot number */
typedef struct _WHEA_PCI_SLOT_NUMBER {
union {
struct {
ULONG DeviceNumber : 5;
ULONG FunctionNumber : 3;
ULONG Reserved : 24;
} bits;
ULONG AsULONG;
} u;
} WHEA_PCI_SLOT_NUMBER;
typedef WHEA_PCI_SLOT_NUMBER *PWHEA_PCI_SLOT_NUMBER;
/* Windows Hardware Error Architecture XPF NMI descriptor */
typedef struct _WHEA_XPF_NMI_DESCRIPTOR {
USHORT Type;
BOOLEAN Enabled;
} WHEA_XPF_NMI_DESCRIPTOR;
typedef WHEA_XPF_NMI_DESCRIPTOR *PWHEA_XPF_NMI_DESCRIPTOR;
/* Windows Hardware Error Architecture advanced error reporting root port descriptor */
typedef struct _WHEA_AER_ROOTPORT_DESCRIPTOR {
USHORT Type;
BOOLEAN Enabled;
UCHAR Reserved;
ULONG BusNumber;
WHEA_PCI_SLOT_NUMBER Slot;
USHORT DeviceControl;
AER_ROOTPORT_DESCRIPTOR_FLAGS Flags;
ULONG UncorrectableErrorMask;
ULONG UncorrectableErrorSeverity;
ULONG CorrectableErrorMask;
ULONG AdvancedCapsAndControl;
ULONG RootErrorCommand;
} WHEA_AER_ROOTPORT_DESCRIPTOR;
typedef WHEA_AER_ROOTPORT_DESCRIPTOR *PWHEA_AER_ROOTPORT_DESCRIPTOR;
/* Windows Hardware Error Architecture advanced error reporting endpoint descriptor */
typedef struct _WHEA_AER_ENDPOINT_DESCRIPTOR {
USHORT Type;
BOOLEAN Enabled;
UCHAR Reserved;
ULONG BusNumber;
WHEA_PCI_SLOT_NUMBER Slot;
USHORT DeviceControl;
AER_ENDPOINT_DESCRIPTOR_FLAGS Flags;
ULONG UncorrectableErrorMask;
ULONG UncorrectableErrorSeverity;
ULONG CorrectableErrorMask;
ULONG AdvancedCapsAndControl;
} WHEA_AER_ENDPOINT_DESCRIPTOR;
typedef WHEA_AER_ENDPOINT_DESCRIPTOR *PWHEA_AER_ENDPOINT_DESCRIPTOR;
/* Windows Hardware Error Architecture advanced error reporting bridge descriptor */
typedef struct _WHEA_AER_BRIDGE_DESCRIPTOR {
USHORT Type;
BOOLEAN Enabled;
UCHAR Reserved;
ULONG BusNumber;
WHEA_PCI_SLOT_NUMBER Slot;
USHORT DeviceControl;
AER_BRIDGE_DESCRIPTOR_FLAGS Flags;
ULONG UncorrectableErrorMask;
ULONG UncorrectableErrorSeverity;
ULONG CorrectableErrorMask;
ULONG AdvancedCapsAndControl;
ULONG SecondaryUncorrectableErrorMask;
ULONG SecondaryUncorrectableErrorSev;
ULONG SecondaryCapsAndControl;
} WHEA_AER_BRIDGE_DESCRIPTOR;
typedef WHEA_AER_BRIDGE_DESCRIPTOR *PWHEA_AER_BRIDGE_DESCRIPTOR;
/* Windows Hardware Error Architecture generic error descriptor */
typedef struct _WHEA_GENERIC_ERROR_DESCRIPTOR {
USHORT Type;
UCHAR Reserved;
UCHAR Enabled;
ULONG ErrStatusBlockLength;
ULONG RelatedErrorSourceId;
UCHAR ErrStatusAddressSpaceID;
UCHAR ErrStatusAddressBitWidth;
UCHAR ErrStatusAddressBitOffset;
UCHAR ErrStatusAddressAccessSize;
WHEA_PHYSICAL_ADDRESS ErrStatusAddress;
WHEA_NOTIFICATION_DESCRIPTOR Notify;
} WHEA_GENERIC_ERROR_DESCRIPTOR;
typedef WHEA_GENERIC_ERROR_DESCRIPTOR *PWHEA_GENERIC_ERROR_DESCRIPTOR;
/* Windows Hardware Error Architecture IPF MCA descriptor */
typedef struct _WHEA_IPF_MCA_DESCRIPTOR {
USHORT Type;
UCHAR Enabled;
UCHAR Reserved;
} WHEA_IPF_MCA_DESCRIPTOR;
typedef WHEA_IPF_MCA_DESCRIPTOR *PWHEA_IPF_MCA_DESCRIPTOR;
/* Windows Hardware Error Architecture IPF CMC descriptor */
typedef struct _WHEA_IPF_CMC_DESCRIPTOR {
USHORT Type;
UCHAR Enabled;
UCHAR Reserved;
} WHEA_IPF_CMC_DESCRIPTOR;
typedef WHEA_IPF_CMC_DESCRIPTOR *PWHEA_IPF_CMC_DESCRIPTOR;
/* Windows Hardware Error Architecture IPF CPE descriptor */
typedef struct _WHEA_IPF_CPE_DESCRIPTOR {
USHORT Type;
UCHAR Enabled;
UCHAR Reserved;
} WHEA_IPF_CPE_DESCRIPTOR;
typedef WHEA_IPF_CPE_DESCRIPTOR *PWHEA_IPF_CPE_DESCRIPTOR;
/* Windows Hardware Error Architecture error source descriptor */
typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR {
ULONG Length;
ULONG Version;
WHEA_ERROR_SOURCE_TYPE Type;
WHEA_ERROR_SOURCE_STATE State;
ULONG MaxRawDataLength;
ULONG NumRecordsToPreallocate;
ULONG MaxSectionsPerRecord;
ULONG ErrorSourceId;
ULONG PlatformErrorSourceId;
ULONG Flags;
union {
WHEA_XPF_MCE_DESCRIPTOR XpfMceDescriptor;
WHEA_XPF_CMC_DESCRIPTOR XpfCmcDescriptor;
WHEA_XPF_NMI_DESCRIPTOR XpfNmiDescriptor;
WHEA_IPF_MCA_DESCRIPTOR IpfMcaDescriptor;
WHEA_IPF_CMC_DESCRIPTOR IpfCmcDescriptor;
WHEA_IPF_CPE_DESCRIPTOR IpfCpeDescriptor;
WHEA_AER_ROOTPORT_DESCRIPTOR AerRootportDescriptor;
WHEA_AER_ENDPOINT_DESCRIPTOR AerEndpointDescriptor;
WHEA_AER_BRIDGE_DESCRIPTOR AerBridgeDescriptor;
WHEA_GENERIC_ERROR_DESCRIPTOR GenErrDescriptor;
} Info;
} WHEA_ERROR_SOURCE_DESCRIPTOR;
typedef WHEA_ERROR_SOURCE_DESCRIPTOR *PWHEA_ERROR_SOURCE_DESCRIPTOR;
/* Windows Hardware Error Architecture revision */
typedef union _WHEA_REVISION {
struct {
UCHAR MinorRevision;
UCHAR MajorRevision;
};
USHORT AsUSHORT;
} WHEA_REVISION;
typedef WHEA_REVISION *PWHEA_REVISION;
/* Windows Hardware Error Architecture error severities */
typedef enum _WHEA_ERROR_SEVERITY {
WheaErrSevRecoverable = 0,
WheaErrSevFatal = 1,
WheaErrSevCorrected = 2,
WheaErrSevInformational = 3
} WHEA_ERROR_SEVERITY;
typedef WHEA_ERROR_SEVERITY *PWHEA_ERROR_SEVERITY;
/* Windows Hardware Error Architecture timestamp */
typedef union _WHEA_TIMESTAMP {
struct {
ULONG Seconds : 8;
ULONG Minutes : 8;
ULONG Hours : 8;
ULONG Precise : 1;
ULONG Reserved : 7;
ULONG Day : 8;
ULONG Month : 8;
ULONG Year : 8;
ULONG Century : 8;
};
LARGE_INTEGER AsLARGE_INTEGER;
} WHEA_TIMESTAMP;
typedef WHEA_TIMESTAMP *PWHEA_TIMESTAMP;
/* Windows Hardware Error Architecture persistence information */
typedef union _WHEA_PERSISTENCE_INFO {
#if 0
struct {
ULONGLONG Signature : 16;
ULONGLONG Length : 24;
ULONGLONG Identifier : 16;
ULONGLONG Attributes : 2;
ULONGLONG DoNotLog : 1;
ULONGLONG Reserved : 5;
};
#endif
ULONGLONG AsULONGLONG;
} WHEA_PERSISTENCE_INFO;
typedef WHEA_PERSISTENCE_INFO *PWHEA_PERSISTENCE_INFO;
/* Windows Hardware Error Architecture error status */
typedef union _WHEA_ERROR_STATUS {
ULONGLONG ErrorStatus;
struct {
ULONG Reserved1 : 8;
ULONG ErrorType : 8;
ULONG Address : 1;
ULONG Control : 1;
ULONG Data : 1;
ULONG Responder : 1;
ULONG Requester : 1;
ULONG FirstError : 1;
ULONG Overflow : 1;
ULONG Reserved2 : 9;
ULONG Reserved3 : 32;
};
} WHEA_ERROR_STATUS;
typedef WHEA_ERROR_STATUS *PWHEA_ERROR_STATUS;
/* Windows Hardware Error Architecture error record header valid bits */
typedef union _WHEA_ERROR_RECORD_HEADER_VALIDBITS {
struct {
ULONG PlatformId : 1;
ULONG Timestamp : 1;
ULONG PartitionId : 1;
ULONG Reserved : 29;
};
ULONG AsULONG;
} WHEA_ERROR_RECORD_HEADER_VALIDBITS;
typedef WHEA_ERROR_RECORD_HEADER_VALIDBITS *PWHEA_ERROR_RECORD_HEADER_VALIDBITS;
/* Windows Hardware Error architecture error record header flags */
typedef union _WHEA_ERROR_RECORD_HEADER_FLAGS {
struct {
ULONG Recovered : 1;
ULONG PreviousError : 1;
ULONG Simulated : 1;
ULONG Reserved : 29;
};
ULONG AsULONG;
} WHEA_ERROR_RECORD_HEADER_FLAGS;
typedef WHEA_ERROR_RECORD_HEADER_FLAGS *PWHEA_ERROR_RECORD_HEADER_FLAGS;
/* Windows Hardware Error Architecture error record header */
typedef struct _WHEA_ERROR_RECORD_HEADER {
ULONG Signature;
WHEA_REVISION Revision;
ULONG SignatureEnd;
USHORT SectionCount;
WHEA_ERROR_SEVERITY Severity;
WHEA_ERROR_RECORD_HEADER_VALIDBITS ValidationBits;
ULONG Length;
WHEA_TIMESTAMP Timestamp;
GUID PlatformId;
GUID PartitionId;
GUID CreatorId;
GUID NotifyType;
ULONGLONG RecordId;
WHEA_ERROR_RECORD_HEADER_FLAGS Flags;
WHEA_PERSISTENCE_INFO PersistenceInfo;
UCHAR Reserved[12];
} WHEA_ERROR_RECORD_HEADER;
typedef WHEA_ERROR_RECORD_HEADER *PWHEA_ERROR_RECORD_HEADER;
/* Windows Hardware Error Architecture error record section descriptor flags */
typedef union _WHEA_ERROR_RECORD_SECTION_DESCRIPTOR_FLAGS {
struct {
ULONG Primary : 1;
ULONG ContainmentWarning : 1;
ULONG Reset : 1;
ULONG ThresholdExceeded : 1;
ULONG ResourceNotAvailable : 1;
ULONG LatentError : 1;
ULONG Reserved : 26;
};
ULONG AsULONG;
} WHEA_ERROR_RECORD_SECTION_DESCRIPTOR_FLAGS;
typedef WHEA_ERROR_RECORD_SECTION_DESCRIPTOR_FLAGS *PWHEA_ERROR_RECORD_SECTION_DESCRIPTOR_FLAGS;
/* Windows Hardware Error Architecture error record section descriptor valid bits */
typedef union _WHEA_ERROR_RECORD_SECTION_DESCRIPTOR_VALIDBITS {
struct {
UCHAR FRUId : 1;
UCHAR FRUText : 1;
UCHAR Reserved : 6;
};
UCHAR AsUCHAR;
} WHEA_ERROR_RECORD_SECTION_DESCRIPTOR_VALIDBITS;
typedef WHEA_ERROR_RECORD_SECTION_DESCRIPTOR_VALIDBITS *PWHEA_ERROR_RECORD_SECTION_DESCRIPTOR_VALIDBITS;
/* Windows Hardware Error Architecture error record section descriptor */
typedef struct _WHEA_ERROR_RECORD_SECTION_DESCRIPTOR {
ULONG SectionOffset;
ULONG SectionLength;
WHEA_REVISION Revision;
WHEA_ERROR_RECORD_SECTION_DESCRIPTOR_VALIDBITS ValidationBits;
UCHAR Reserved;
WHEA_ERROR_RECORD_SECTION_DESCRIPTOR_FLAGS Flags;
GUID SectionType;
GUID FRUId;
WHEA_ERROR_SEVERITY SectionSeverity;
CCHAR FRUText[20];
} WHEA_ERROR_RECORD_SECTION_DESCRIPTOR;
typedef WHEA_ERROR_RECORD_SECTION_DESCRIPTOR *PWHEA_ERROR_RECORD_SECTION_DESCRIPTOR;
/* Windows Hardware Error Architecture error record */
typedef struct _WHEA_ERROR_RECORD {
WHEA_ERROR_RECORD_HEADER Header;
WHEA_ERROR_RECORD_SECTION_DESCRIPTOR SectionDescriptor[1];
} WHEA_ERROR_RECORD;
typedef WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD;
/* Windows Hardware Error Architecture processor family information */
typedef union _WHEA_PROCESSOR_FAMILY_INFO {
struct {
ULONG Stepping : 4;
ULONG Model : 4;
ULONG Family : 4;
ULONG ProcessorType : 2;
ULONG Reserved1 : 2;
ULONG ExtendedModel : 4;
ULONG ExtendedFamily : 8;
ULONG Reserved2 : 4;
ULONG Reserved3;
};
ULONGLONG AsULONGLONG;
} WHEA_PROCESSOR_FAMILY_INFO;
typedef WHEA_PROCESSOR_FAMILY_INFO *PWHEA_PROCESSOR_FAMILY_INFO;
/* Windows Hardware Error Architecture processor generic error section valid bits */
typedef union _WHEA_PROCESSOR_GENERIC_ERROR_SECTION_VALIDBITS {
struct {
ULONG ProcessorType : 1;
ULONG InstructionSet : 1;
ULONG ErrorType : 1;
ULONG Operation : 1;
ULONG Flags : 1;
ULONG Level : 1;
ULONG CPUVersion : 1;
ULONG CPUBrandString : 1;
ULONG ProcessorId : 1;
ULONG TargetAddress : 1;
ULONG RequesterId : 1;
ULONG ResponderId : 1;
ULONG InstructionPointer : 1;
ULONG Reserved : 19;
ULONG Reserved2 : 32;
};
ULONGLONG ValidBits;
} WHEA_PROCESSOR_GENERIC_ERROR_SECTION_VALIDBITS;
typedef WHEA_PROCESSOR_GENERIC_ERROR_SECTION_VALIDBITS *PWHEA_PROCESSOR_GENERIC_ERROR_SECTION_VALIDBITS;
#if WHEA_DOWNLEVEL_TYPE_NAMES
typedef WHEA_PROCESSOR_GENERIC_ERROR_SECTION_VALIDBITS WHEA_GENERIC_PROCESSOR_ERROR_VALIDBITS;
typedef WHEA_PROCESSOR_GENERIC_ERROR_SECTION_VALIDBITS *PWHEA_GENERIC_PROCESSOR_ERROR_VALIDBITS;
#endif
/* Windows Hardware Error Architecture processor generic error section */
typedef struct _WHEA_PROCESSOR_GENERIC_ERROR_SECTION {
WHEA_PROCESSOR_GENERIC_ERROR_SECTION_VALIDBITS ValidBits;
UCHAR ProcessorType;
UCHAR InstructionSet;
UCHAR ErrorType;
UCHAR Operation;
UCHAR Flags;
UCHAR Level;
USHORT Reserved;
ULONGLONG CPUVersion;
UCHAR CPUBrandString[128];
ULONGLONG ProcessorId;
ULONGLONG TargetAddress;
ULONGLONG RequesterId;
ULONGLONG ResponderId;
ULONGLONG InstructionPointer;
} WHEA_PROCESSOR_GENERIC_ERROR_SECTION;
typedef WHEA_PROCESSOR_GENERIC_ERROR_SECTION *PWHEA_PROCESSOR_GENERIC_ERROR_SECTION;
#if WHEA_DOWNLEVEL_TYPE_NAMES
typedef WHEA_PROCESSOR_GENERIC_ERROR_SECTION WHEA_GENERIC_PROCESSOR_ERROR;
typedef WHEA_PROCESSOR_GENERIC_ERROR_SECTION *PWHEA_GENERIC_PROCESSOR_ERROR;
#endif
/* Windows Hardware Error Architecture XPF cache check */
typedef union _WHEA_XPF_CACHE_CHECK {
struct {
ULONG TransactionTypeValid : 1;
ULONG OperationValid : 1;
ULONG LevelValid : 1;
ULONG ProcessorContextCorruptValid : 1;
ULONG UncorrectedValid : 1;
ULONG PreciseIPValid : 1;
ULONG RestartableIPValid : 1;
ULONG OverflowValid : 1;
ULONG ReservedValid : 8;
ULONG TransactionType : 2;
ULONG Operation : 4;
ULONG Level : 3;
ULONG ProcessorContextCorrupt : 1;
ULONG Uncorrected : 1;
ULONG PreciseIP : 1;
ULONG RestartableIP : 1;
ULONG Overflow : 1;
ULONG Reserved : 2;
ULONG Reserved2;
};
ULONGLONG XpfCacheCheck;
} WHEA_XPF_CACHE_CHECK;
typedef WHEA_XPF_CACHE_CHECK *PWHEA_XPF_CACHE_CHECK;
/* Windows Hardware Error Architecture XPF TLB check */
typedef union _WHEA_XPF_TLB_CHECK {
struct {
ULONG TransactionTypeValid : 1;
ULONG OperationValid : 1;
ULONG LevelValid : 1;
ULONG ProcessorContextCorruptValid : 1;
ULONG UncorrectedValid : 1;
ULONG PreciseIPValid : 1;
ULONG RestartableIPValid : 1;
ULONG OverflowValid : 1;
ULONG ReservedValid : 8;
ULONG TransactionType : 2;
ULONG Operation : 4;
ULONG Level : 3;
ULONG ProcessorContextCorrupt : 1;
ULONG Uncorrected : 1;
ULONG PreciseIP : 1;
ULONG RestartableIP : 1;
ULONG Overflow : 1;
ULONG Reserved : 2;
ULONG Reserved2;
};
ULONGLONG XpfTLBCheck;
} WHEA_XPF_TLB_CHECK;
typedef WHEA_XPF_TLB_CHECK *PWHEA_XPF_TLB_CHECK;
/* Windows Hardware Error Architecture XPF bus check */
typedef union _WHEA_XPF_BUS_CHECK {
struct {
ULONG TransactionTypeValid : 1;
ULONG OperationValid : 1;
ULONG LevelValid : 1;
ULONG ProcessorContextCorruptValid : 1;
ULONG UncorrectedValid : 1;
ULONG PreciseIPValid : 1;
ULONG RestartableIPValid : 1;
ULONG OverflowValid : 1;
ULONG ParticipationValid : 1;
ULONG TimeoutValid : 1;
ULONG AddressSpaceValid : 1;
ULONG ReservedValid : 5;
ULONG TransactionType : 2;
ULONG Operation : 4;
ULONG Level : 3;
ULONG ProcessorContextCorrupt : 1;
ULONG Uncorrected : 1;
ULONG PreciseIP : 1;
ULONG RestartableIP : 1;
ULONG Overflow : 1;
ULONG Participation : 2;
ULONG Timeout : 1;
ULONG AddressSpace : 2;
ULONG Reserved : 29;
};
ULONGLONG XpfBusCheck;
} WHEA_XPF_BUS_CHECK;
typedef WHEA_XPF_BUS_CHECK *PWHEA_XPF_BUS_CHECK;
/* Windows Hardware Error Architecture XPF micro-architecture specific check */
typedef union _WHEA_XPF_MS_CHECK {
struct {
ULONG ErrorTypeValid : 1;
ULONG ProcessorContextCorruptValid : 1;
ULONG UncorrectedValid : 1;
ULONG PreciseIPValid : 1;
ULONG RestartableIPValid : 1;
ULONG OverflowValid : 1;
ULONG ReservedValue : 10;
ULONG ErrorType : 3;
ULONG ProcessorContextCorrupt : 1;
ULONG Uncorrected : 1;
ULONG PreciseIP : 1;
ULONG RestartableIP : 1;
ULONG Overflow : 1;
ULONG Reserved : 8;
ULONG Reserved2;
};
ULONGLONG XpfMsCheck;
} WHEA_XPF_MS_CHECK;
typedef WHEA_XPF_MS_CHECK *PWHEA_XPF_MS_CHECK;
/* Windows Hardware Error Architecture XPF processor information valid bits */
typedef union _WHEA_XPF_PROCINFO_VALIDBITS {
struct {
ULONG CheckInfo : 1;
ULONG TargetId : 1;
ULONG RequesterId : 1;
ULONG ResponderId : 1;
ULONG InstructionPointer : 1;
ULONG Reserved : 27;
ULONG Reserved2;
};
ULONGLONG ValidBits;
} WHEA_XPF_PROCINFO_VALIDBITS;
typedef WHEA_XPF_PROCINFO_VALIDBITS *PWHEA_XPF_PROCINFO_VALIDBITS;
/* Windows Hardware Error Architecture XPF processor information */
typedef struct _WHEA_XPF_PROCINFO {
GUID CheckInfoId;
WHEA_XPF_PROCINFO_VALIDBITS ValidBits;
union {
WHEA_XPF_CACHE_CHECK CacheCheck;
WHEA_XPF_TLB_CHECK TlbCheck;
WHEA_XPF_BUS_CHECK BusCheck;
WHEA_XPF_MS_CHECK MsCheck;
ULONGLONG AsULONGLONG;
} CheckInfo;
ULONGLONG TargetId;
ULONGLONG RequesterId;
ULONGLONG ResponderId;
ULONGLONG InstructionPointer;
} WHEA_XPF_PROCINFO;
typedef WHEA_XPF_PROCINFO *PWHEA_XPF_PROCINFO;
/* Windows Hardware Error Architecture x86 register state */
typedef struct _WHEA_X86_REGISTER_STATE {
ULONG Eax;
ULONG Ebx;
ULONG Ecx;
ULONG Edx;
ULONG Esi;
ULONG Edi;
ULONG Ebp;
ULONG Esp;
USHORT Cs;
USHORT Ds;
USHORT Ss;
USHORT Es;
USHORT Fs;
USHORT Gs;
ULONG Eflags;
ULONG Eip;
ULONG Cr0;
ULONG Cr1;
ULONG Cr2;
ULONG Cr3;
ULONG Cr4;
ULONGLONG Gdtr;
ULONGLONG Idtr;
USHORT Ldtr;
USHORT Tr;
} WHEA_X86_REGISTER_STATE;
typedef WHEA_X86_REGISTER_STATE *PWHEA_X86_REGISTER_STATE;
/* Windows Hardware Error Architecture 128-bit number */
typedef struct _WHEA128A {
ULONGLONG Low;
LONGLONG High;
} WHEA128A;
typedef WHEA128A *PWHEA128A;
/* Windows Hardware Error Architecture X64 register state */
typedef struct _WHEA_X64_REGISTER_STATE {
ULONGLONG Rax;
ULONGLONG Rbx;
ULONGLONG Rcx;
ULONGLONG Rdx;
ULONGLONG Rsi;
ULONGLONG Rdi;
ULONGLONG Rbp;
ULONGLONG Rsp;
ULONGLONG R8;
ULONGLONG R9;
ULONGLONG R10;
ULONGLONG R11;
ULONGLONG R12;
ULONGLONG R13;
ULONGLONG R14;
ULONGLONG R15;
USHORT Cs;
USHORT Ds;
USHORT Ss;
USHORT Es;
USHORT Fs;
USHORT Gs;
ULONG Reserved;
ULONGLONG Rflags;
ULONGLONG Eip;
ULONGLONG Cr0;
ULONGLONG Cr1;
ULONGLONG Cr2;
ULONGLONG Cr3;
ULONGLONG Cr4;
ULONGLONG Cr8;
WHEA128A Gdtr;
WHEA128A Idtr;
USHORT Ldtr;
USHORT Tr;
} WHEA_X64_REGISTER_STATE;
typedef WHEA_X64_REGISTER_STATE *PWHEA_X64_REGISTER_STATE;
/* Windows Hardware Error Architecture XPF context information */
typedef struct _WHEA_XPF_CONTEXT_INFO {
USHORT RegisterContextType;
USHORT RegisterArraySize;
ULONG MSRAddress;
ULONGLONG MmRegisterAddress;
} WHEA_XPF_CONTEXT_INFO;
typedef WHEA_XPF_CONTEXT_INFO *PWHEA_XPF_CONTEXT_INFO;
/* Windows Hardware Error Architecture XPF processor error section valid bits */
typedef union _WHEA_XPF_PROCESSOR_ERROR_SECTION_VALIDBITS {
struct {
ULONG LocalAPICId : 1;
ULONG CpuId : 1;
ULONG ProcInfoCount : 6;
ULONG ContextInfoCount : 6;
ULONG Reserved : 18;
ULONG Reserved2;
};
ULONGLONG ValidBits;
} WHEA_XPF_PROCESSOR_ERROR_SECTION_VALIDBITS;
typedef WHEA_XPF_PROCESSOR_ERROR_SECTION_VALIDBITS *PWHEA_XPF_PROCESSOR_ERROR_SECTION_VALIDBITS;
#if WHEA_DOWNLEVEL_TYPE_NAMES
typedef WHEA_XPF_PROCESSOR_ERROR_SECTION_VALIDBITS WHEA_XPF_PROCESSOR_ERROR_VALIDBITS;
typedef WHEA_XPF_PROCESSOR_ERROR_SECTION_VALIDBITS *PWHEA_XPF_PROCESSOR_ERROR_VALIDBITS;
#endif
/* Windows Hardware Error Architecture XPF processor error section */
typedef struct _WHEA_XPF_PROCESSOR_ERROR_SECTION {
WHEA_XPF_PROCESSOR_ERROR_SECTION_VALIDBITS ValidBits;
ULONGLONG LocalAPICId;
UCHAR CpuId[48];
UCHAR VariableInfo[ANYSIZE_ARRAY];
} WHEA_XPF_PROCESSOR_ERROR_SECTION;
typedef WHEA_XPF_PROCESSOR_ERROR_SECTION *PWHEA_XPF_PROCESSOR_ERROR_SECTION;
#if WHEA_DOWNLEVEL_TYPE_NAMES
typedef WHEA_XPF_PROCESSOR_ERROR_SECTION WHEA_XPF_PROCESSOR_ERROR;
typedef WHEA_XPF_PROCESSOR_ERROR_SECTION *PWHEA_XPF_PROCESSOR_ERROR;
#endif
/* Windows Hardware Error Architecture memory error section valid bits */
typedef union _WHEA_MEMORY_ERROR_SECTION_VALIDBITS {
struct {
ULONG ErrorStatus : 1;
ULONG PhysicalAddress : 1;
ULONG PhysicalAddressMask : 1;
ULONG Node : 1;
ULONG Card : 1;
ULONG Module : 1;
ULONG Bank : 1;
ULONG Device : 1;
ULONG Row : 1;
ULONG Column : 1;
ULONG BitPosition : 1;
ULONG RequesterId : 1;
ULONG ResponderId : 1;
ULONG TargetId : 1;
ULONG ErrorType : 1;
ULONG Reserved : 17;
ULONG Reserved2;
};
ULONGLONG ValidBits;
} WHEA_MEMORY_ERROR_SECTION_VALIDBITS;
typedef WHEA_MEMORY_ERROR_SECTION_VALIDBITS *PWHEA_MEMORY_ERROR_SECTION_VALIDBITS;
#if WHEA_DOWNLEVEL_TYPE_NAMES
typedef WHEA_MEMORY_ERROR_SECTION_VALIDBITS WHEA_MEMORY_ERROR_VALIDBITS;
typedef WHEA_MEMORY_ERROR_SECTION_VALIDBITS *PWHEA_MEMORY_ERROR_VALIDBITS;
#endif
/* Windows Hardware Error Architecture memory error section */
typedef struct _WHEA_MEMORY_ERROR_SECTION {
WHEA_MEMORY_ERROR_SECTION_VALIDBITS ValidBits;
WHEA_ERROR_STATUS ErrorStatus;
ULONGLONG PhysicalAddress;
ULONGLONG PhysicalAddressMask;
USHORT Node;
USHORT Card;
USHORT Module;
USHORT Bank;
USHORT Device;
USHORT Row;
USHORT Column;
USHORT BitPosition;
ULONGLONG RequesterId;
ULONGLONG ResponderId;
ULONGLONG TargetId;
UCHAR ErrorType;
} WHEA_MEMORY_ERROR_SECTION;
typedef WHEA_MEMORY_ERROR_SECTION *PWHEA_MEMORY_ERROR_SECTION;
#if WHEA_DOWNLEVEL_TYPE_NAMES
typedef WHEA_MEMORY_ERROR_SECTION WHEA_MEMORY_ERROR;
typedef WHEA_MEMORY_ERROR_SECTION *PWHEA_MEMORY_ERROR;
#endif
/* Windows Hardware Error Architecture PCI express error section valid bits */
typedef union _WHEA_PCIEXPRESS_ERROR_SECTION_VALIDBITS {
struct {
ULONG PortType : 1;
ULONG Version : 1;
ULONG CommandStatus : 1;
ULONG DeviceId : 1;
ULONG DeviceSerialNumber : 1;
ULONG BridgeControlStatus : 1;
ULONG ExpressCapability : 1;
ULONG AerInfo : 1;
ULONG Reserved : 24;
ULONG Reserved2;
};
ULONGLONG ValidBits;
} WHEA_PCIEXPRESS_ERROR_SECTION_VALIDBITS;
typedef WHEA_PCIEXPRESS_ERROR_SECTION_VALIDBITS *PWHEA_PCIEXPRESS_ERROR_SECTION_VALIDBITS;
#if WHEA_DOWNLEVEL_TYPE_NAMES
typedef WHEA_PCIEXPRESS_ERROR_SECTION_VALIDBITS WHEA_PCI_EXPRESS_ERROR_VALIDBITS;
typedef WHEA_PCIEXPRESS_ERROR_SECTION_VALIDBITS *PWHEA_PCI_EXPRESS_ERROR_VALIDBITS;
#endif
/* Windows Hardware Error Architecture PCI express device identifier */
typedef struct _WHEA_PCIEXPRESS_DEVICE_ID {
USHORT VendorID;
USHORT DeviceID;
ULONG ClassCode : 24;
ULONG FunctionNumber : 8;
ULONG DeviceNumber : 8;
ULONG Segment : 16;
ULONG PrimaryBusNumber : 8;
ULONG SecondaryBusNumber : 8;
ULONG Reserved1 : 3;
ULONG SlotNumber : 13;
ULONG Reserved2 : 8;
} WHEA_PCIEXPRESS_DEVICE_ID;
typedef WHEA_PCIEXPRESS_DEVICE_ID *PWHEA_PCIEXPRESS_DEVICE_ID;
/* Windows Hardware Error Architecture PCI express version */
typedef union _WHEA_PCIEXPRESS_VERSION {
struct {
UCHAR MinorVersion;
UCHAR MajorVersion;
USHORT Reserved;
};
ULONG AsULONG;
} WHEA_PCIEXPRESS_VERSION;
typedef WHEA_PCIEXPRESS_VERSION *PWHEA_PCIEXPRESS_VERSION;
/* Windows Hardware Error Architecture PCI express command status */
typedef union _WHEA_PCIEXPRESS_COMMAND_STATUS {
struct {
USHORT Command;
USHORT Status;
};
ULONG AsULONG;
} WHEA_PCIEXPRESS_COMMAND_STATUS;
typedef WHEA_PCIEXPRESS_COMMAND_STATUS *PWHEA_PCIEXPRESS_COMMAND_STATUS;
/* Windows Hardware Error Architecture PCI express bridge control status */
typedef union _WHEA_PCIEXPRESS_BRIDGE_CONTROL_STATUS {
struct {
USHORT BridgeSecondaryStatus;
USHORT BridgeControl;
};
ULONG AsULONG;
} WHEA_PCIEXPRESS_BRIDGE_CONTROL_STATUS;
typedef WHEA_PCIEXPRESS_BRIDGE_CONTROL_STATUS *PWHEA_PCIEXPRESS_BRIDGE_CONTROL_STATUS;
/* Windows Hardware Error Architecture PCI express device types */
typedef enum _WHEA_PCIEXPRESS_DEVICE_TYPE {
WheaPciExpressEndpoint = 0,
WheaPciExpressLegacyEndpoint = 1,
WheaPciExpressRootPart = 2,
WheaPciExpressUpstreamSwitchPort = 3,
WheaPciExpressDownstreamSwitchPort = 4,
WheaPciExpressToPciXBridge = 5,
WheaPciXToExpressBridge = 6,
WheaPciExpressRootComplexIntegratedEndpoint = 7,
WheaPciExpressRootComplexEventCollector = 8
} WHEA_PCIEXPRESS_DEVICE_TYPE;
/* Windows Hardware Error Architecture PCI express error section */
typedef struct _WHEA_PCIEXPRESS_ERROR_SECTION {
WHEA_PCIEXPRESS_ERROR_SECTION_VALIDBITS ValidBits;
WHEA_PCIEXPRESS_DEVICE_TYPE PortType;
WHEA_PCIEXPRESS_VERSION Version;
WHEA_PCIEXPRESS_COMMAND_STATUS CommandStatus;
ULONG Reserved;
WHEA_PCIEXPRESS_DEVICE_ID DeviceId;
ULONGLONG DeviceSerialNumber;
WHEA_PCIEXPRESS_BRIDGE_CONTROL_STATUS BridgeControlStatus;
UCHAR ExpressCapability[60];
UCHAR AerInfo[96];
} WHEA_PCIEXPRESS_ERROR_SECTION;
typedef WHEA_PCIEXPRESS_ERROR_SECTION *PWHEA_PCIEXPRESS_ERROR_SECTION;
#if WHEA_DOWNLEVEL_TYPE_NAMES
typedef WHEA_PCIEXPRESS_ERROR_SECTION WHEA_PCIEXPRESS_ERROR;
typedef WHEA_PCIEXPRESS_ERROR_SECTION *PWHEA_PCIEXPRESS_ERROR;
#endif
/* Windows Hardware Error Architecture PCIX bus error section valid bits */
typedef union _WHEA_PCIXBUS_ERROR_SECTION_VALIDBITS {
struct {
ULONG ErrorStatus : 1;
ULONG ErrorType : 1;
ULONG BusId : 1;
ULONG BusAddress : 1;
ULONG BusData : 1;
ULONG BusCommand : 1;
ULONG RequesterId : 1;
ULONG CompleterId : 1;
ULONG TargetId : 1;
ULONG Reserved : 23;
ULONG Reserved2;
};
ULONGLONG ValidBits;
} WHEA_PCIXBUS_ERROR_SECTION_VALIDBITS;
typedef WHEA_PCIXBUS_ERROR_SECTION_VALIDBITS *PWHEA_PCIXBUS_ERROR_SECTION_VALIDBITS;
#if WHEA_PCIXBUS_TYPE_NAMES
typedef WHEA_PCIXBUS_ERROR_SECTION_VALIDBITS WHEA_PCIXBUS_ERROR_VALIDBITS;
typedef WHEA_PCIXBUS_ERROR_SECTION_VALIDBITS *PWHEA_PCIXBUS_ERROR_VALIDBITS;
#endif
/* Windows Hardware Error Architecture PCIX bus identifier */
typedef union _WHEA_PCIXBUS_ID {
struct {
UCHAR BusNumber;
UCHAR BusSegment;
};
USHORT AsUSHORT;
} WHEA_PCIXBUS_ID;
typedef WHEA_PCIXBUS_ID *PWHEA_PCIXBUS_ID;
/* Windows Hardware Error Architecture PCIX bus command */
typedef union _WHEA_PCIXBUS_COMMAND {
#if 0
struct {
ULONGLONG Command : 56;
ULONGLONG PCIXCommand : 1;
ULONGLONG Reserved : 7;
};
#endif
ULONGLONG AsULONGLONG;
} WHEA_PCIXBUS_COMMAND;
typedef WHEA_PCIXBUS_COMMAND *PWHEA_PCIXBUS_COMMAND;
/* Windows Hardware Error Architecture PCIX bus error section */
typedef struct _WHEA_PCIXBUS_ERROR_SECTION {
WHEA_PCIXBUS_ERROR_SECTION_VALIDBITS ValidBits;
WHEA_ERROR_STATUS ErrorStatus;
USHORT ErrorType;
WHEA_PCIXBUS_ID BusId;
ULONG Reserved;
ULONGLONG BusAddress;
ULONGLONG BusData;
WHEA_PCIXBUS_COMMAND BusCommand;
ULONGLONG RequesterId;
ULONGLONG CompleterId;
ULONGLONG TargetId;
} WHEA_PCIXBUS_ERROR_SECTION;
typedef WHEA_PCIXBUS_ERROR_SECTION *PWHEA_PCIXBUS_ERROR_SECTION;
#if WHEA_DOWNLEVEL_TYPE_NAMES
typedef WHEA_PCIXBUS_ERROR_SECTION WHEA_PCIXBUS_ERROR;
typedef WHEA_PCIXBUS_ERROR_SECTION *PWHEA_PCIXBUS_ERROR;
#endif
/* Windows Hardware Error Architecture PCIX device error section valid bits */
typedef union _WHEA_PCIXDEVICE_ERROR_SECTION_VALIDBITS {
struct {
ULONG ErrorStatus : 1;
ULONG IdInfo : 1;
ULONG MemoryNumber : 1;
ULONG IdNumber : 1;
ULONG RegisterDataPairs : 1;
ULONG Reserved : 27;
ULONG Reserved2;
};
ULONGLONG ValidBits;
} WHEA_PCIXDEVICE_ERROR_SECTION_VALIDBITS;
typedef WHEA_PCIXDEVICE_ERROR_SECTION_VALIDBITS *PWHEA_PCIXDEVICE_ERROR_SECTION_VALID_BITS;
#if WHEA_DOWNLEVEL_TYPE_NAMES
typedef WHEA_PCIXDEVICE_ERROR_SECTION_VALIDBITS WHEA_PCIXDEVICE_ERROR_VALIDBITS;
typedef WHEA_PCIXDEVICE_ERROR_SECTION_VALIDBITS *PWHEA_PCIXDEVICE_ERROR_VALIDBITS;
#endif
/* Windows Hardware Error Architecture PCIX device identifier */
typedef struct _WHEA_PCIXDEVICE_ID {
USHORT VendorId;
USHORT DeviceId;
ULONG ClassCode : 24;
ULONG FunctionNumber : 8;
ULONG DeviceNumber : 8;
ULONG BusNumber : 8;
ULONG SegmentNumber : 8;
ULONG Reserved1 : 8;
ULONG Reserved2;
} WHEA_PCIXDEVICE_ID;
typedef WHEA_PCIXDEVICE_ID *PWHEA_PCIXDEVICE_ID;
/* Windows Hardware Error Architecture PCIX device register pair */
typedef struct WHEA_PCIXDEVICE_REGISTER_PAIR {
ULONGLONG Register;
ULONGLONG Data;
} WHEA_PCIXDEVICE_REGISTER_PAIR;
typedef WHEA_PCIXDEVICE_REGISTER_PAIR *PWHEA_PCIXDEVICE_REGISTER_PAIR;
/* Windows Hardware Error Architecture PCIX device error section */
typedef struct _WHEA_PCIXDEVICE_ERROR_SECTION {
WHEA_PCIXDEVICE_ERROR_SECTION_VALIDBITS ValidBits;
WHEA_ERROR_STATUS ErrorStatus;
WHEA_PCIXDEVICE_ID IdInfo;
ULONG MemoryNumber;
ULONG IoNumber;
WHEA_PCIXDEVICE_REGISTER_PAIR RegisterDataPairs[ANYSIZE_ARRAY];
} WHEA_PCIXDEVICE_ERROR_SECTION;
typedef WHEA_PCIXDEVICE_ERROR_SECTION *PWHEA_PCIXDEVICE_ERROR_SECTION;
#if WHEA_DOWNLEVEL_TYPE_NAMES
typedef WHEA_PCIXDEVICE_ERROR_SECTION WHEA_PCIXDEVICE_ERROR;
typedef WHEA_PCIXDEVICE_ERROR_SECTION *PWHEA_PCIXDEVICE_ERROR;
#endif
/* Windows Hardware Error Architecture firmware error record reference */
typedef struct _WHEA_FIRMWARE_ERROR_RECORD_REFERENCE {
UCHAR Type;
UCHAR Reserved[7];
ULONGLONG FirmwareRecordId;
} WHEA_FIRMWARE_ERROR_RECORD_REFERENCE;
typedef WHEA_FIRMWARE_ERROR_RECORD_REFERENCE *PWHEA_FIRMWARE_ERROR_RECORD_REFERENCE;
#if WHEA_DOWNLEVEL_TYPE_NAMES
typedef WHEA_FIRMWARE_ERROR_RECORD_REFERENCE WHEA_FIRMWARE_RECORD;
typedef WHEA_FIRMWARE_ERROR_RECORD_REFERENCE *PWHEA_FIRMWARE_RECORD;
#endif
/* MCG status */
typedef union _MCG_STATUS {
struct {
ULONG RestartIpValid : 1;
ULONG ErrorIpValid : 1;
ULONG MachineCheckInProgress : 1;
ULONG Reserved1 : 29;
ULONG Reserved2;
};
ULONGLONG QuadPart;
} MCG_STATUS;
typedef MCG_STATUS *PMCG_STATUS;
/* MCI status */
typedef union _MCI_STATUS {
struct {
USHORT McaErrorCode;
USHORT ModelErrorCode;
ULONG OtherInformation : 23;
ULONG ActionRequired : 1;
ULONG Signalling : 1;
ULONG ContextCorrupt : 1;
ULONG AddressValid : 1;
ULONG MiscValid : 1;
ULONG ErrorEnabled : 1;
ULONG UncorrectedError : 1;
ULONG StatusOverflow : 1;
ULONG Valid : 1;
};
ULONG64 QuadPart;
} MCI_STATUS;
typedef MCI_STATUS *PMCI_STATUS;
/* Windows Hardware Error Architecture CPU vendors */
typedef enum _WHEA_CPU_VENDOR {
WheaCpuVendorOther = 0,
WheaCpuVendorIntel = 1,
WheaCpuVendorAmd = 2
} WHEA_CPU_VENDOR;
typedef WHEA_CPU_VENDOR *PWHEA_CPU_VENDOR;
/* Windows Hardware Error Architecture XPF MCA section */
typedef struct _WHEA_XPF_MCA_SECTION {
ULONG VersionNumber;
WHEA_CPU_VENDOR CpuVendor;
LARGE_INTEGER Timestamp;
ULONG ProcessorNumber;
MCG_STATUS GlobalStatus;
ULONGLONG InstructionPointer;
ULONG BankNumber;
MCI_STATUS Status;
ULONGLONG Address;
ULONGLONG Misc;
ULONG ExtendedRegisterCount;
ULONG Reserved2;
ULONGLONG ExtendedRegisters[WHEA_XPF_MCA_EXTREG_MAX_COUNT];
} WHEA_XPF_MCA_SECTION;
typedef WHEA_XPF_MCA_SECTION *PWHEA_XPF_MCA_SECTION;
/* Windows Hardware Error Architecture NMI error section flags */
typedef union _WHEA_NMI_ERROR_SECTION_FLAGS {
struct {
ULONG HypervisorError : 1;
ULONG Reserved : 31;
};
ULONG AsULONG;
} WHEA_NMI_ERROR_SECTION_FLAGS;
typedef WHEA_NMI_ERROR_SECTION_FLAGS *PWHEA_ERROR_SECTION_FLAGS;
/* Windows Hardware Error Architecture NMI error section */
typedef struct _WHEA_NMI_ERROR_SECTION {
UCHAR Data[8];
WHEA_NMI_ERROR_SECTION_FLAGS Flags;
} WHEA_NMI_ERROR_SECTION;
typedef WHEA_NMI_ERROR_SECTION *PWHEA_NMI_ERROR_SECTION;
/* Windows Hardware Error Architecture error types */
typedef enum _WHEA_ERROR_TYPE {
WheaErrTypeProcessor = 0,
WheaErrTypeMemory = 1,
WheaErrTypePCIExpress = 2,
WheaErrTypeNMI = 3,
WheaErrTypePCIXBus = 4,
WheaErrTypePCIXDevice = 5,
WheaErrTypeGeneric = 6
} WHEA_ERROR_TYPE;
/* Windows Hardware Error Architecture error packet flags */
typedef union _WHEA_ERROR_PACKET_FLAGS {
struct {
ULONG PreviousError : 1;
ULONG Reserved1 : 1;
ULONG HypervisorError : 1;
ULONG Simulated : 1;
ULONG PlatformPfaControl : 1;
ULONG PlatformDirectedOffline : 1;
ULONG Reserved2 : 26;
};
ULONG AsULONG;
} WHEA_ERROR_PACKET_FLAGS;
typedef WHEA_ERROR_PACKET_FLAGS *PWHEA_ERROR_PACKET_FLAGS;
/* Windows Hardware Error Architecture error packet data formats */
typedef enum _WHEA_ERROR_PACKET_DATA_FORMAT {
WheaDataFormatIPFSalRecord = 0,
WheaDataFormatXPFMCA = 1,
WheaDataFormatMemory = 2,
WheaDataFormatPCIExpress = 3,
WheaDataFormatNMIPort = 4,
WheaDataFormatPCIXBus = 5,
WheaDataFormatPCIXDevice = 6,
WheaDataFormatGeneric = 7,
WheaDataFormatMax = 8
} WHEA_ERROR_PACKET_DATA_FORMAT;
typedef WHEA_ERROR_PACKET_DATA_FORMAT *PWHEA_ERROR_PACKET_DATA_FORMAT;
/* Windows Hardware Error Architecture raw data format */
typedef enum _WHEA_RAW_DATA_FORMAT {
WheaRawDataFormatIPFSalRecord = 0x00,
WheaRawDataFormatIA32MCA = 0x01,
WheaRawDataFormatIntel64MCA = 0x02,
WheaRawDataFormatAMD64MCA = 0x03,
WheaRawDataFormatMemory = 0x04,
WheaRawDataFormatPCIExpress = 0x05,
WheaRawDataFormatNMIPort = 0x06,
WheaRawDataFormatPCIXBus = 0x07,
WheaRawDataFormatPCIXDevice = 0x08,
WheaRawDataFormatGeneric = 0x09,
WheaRawDataFormatMax = 0x0A
} WHEA_RAW_DATA_FORMAT;
typedef WHEA_RAW_DATA_FORMAT *PWHEA_RAW_DATA_FORMAT;
/* Windows Hardware Error Architecture error packet (version 1) */
typedef struct _WHEA_ERROR_PACKET_V1 {
ULONG Signature;
WHEA_ERROR_PACKET_FLAGS Flags;
ULONG Size;
ULONG RawDataLength;
ULONGLONG Reserved1;
ULONGLONG Context;
WHEA_ERROR_TYPE ErrorType;
WHEA_ERROR_SEVERITY ErrorSeverity;
ULONG ErrorSourceId;
WHEA_ERROR_SOURCE_TYPE ErrorSourceType;
ULONG Reserved2;
ULONG Version;
ULONGLONG Cpu;
union {
WHEA_PROCESSOR_GENERIC_ERROR_SECTION ProcessorError;
WHEA_MEMORY_ERROR_SECTION MemoryError;
WHEA_NMI_ERROR_SECTION NmiError;
WHEA_PCIEXPRESS_ERROR_SECTION PciExpressError;
WHEA_PCIXBUS_ERROR_SECTION PciXBusError;
WHEA_PCIXDEVICE_ERROR_SECTION PciXDeviceError;
} u;
WHEA_RAW_DATA_FORMAT RawDataFormat;
ULONG RawDataOffset;
UCHAR RawData[1];
} WHEA_ERROR_PACKET_V1;
typedef WHEA_ERROR_PACKET_V1 *PWHEA_ERROR_PACKET_V1;
/* Windows Hardware Error Architecture error packet (version 2) */
typedef struct _WHEA_ERROR_PACKET_V2 {
ULONG Signature;
ULONG Version;
ULONG Length;
WHEA_ERROR_PACKET_FLAGS Flags;
WHEA_ERROR_TYPE ErrorType;
WHEA_ERROR_SEVERITY ErrorSeverity;
ULONG ErrorSourceId;
WHEA_ERROR_SOURCE_TYPE ErrorSourceType;
GUID NotifyType;
ULONGLONG Context;
WHEA_ERROR_PACKET_DATA_FORMAT DataFormat;
ULONG Reserved1;
ULONG DataOffset;
ULONG DataLength;
ULONG PshedDataOffset;
ULONG PshedDataLength;
} WHEA_ERROR_PACKET_V2;
typedef WHEA_ERROR_PACKET_V2 *PWHEA_ERROR_PACKET_V2;
/* Windows Hardware Error Architecture error packet */
#if (NTDDI_VERSION >= 0x06010000)
typedef WHEA_ERROR_PACKET_V2 WHEA_ERROR_PACKET;
typedef WHEA_ERROR_PACKET_V2 *PWHEA_ERROR_PACKET;
#else
typedef WHEA_ERROR_PACKET_V1 WHEA_ERROR_PACKET;
typedef WHEA_ERROR_PACKET_V1 *PWHEA_ERROR_PACKET;
#endif
/* Windows Hardware Error Architecture generic error block status */
typedef union _WHEA_GENERIC_ERROR_BLOCKSTATUS {
struct {
ULONG UncorrectableError : 1;
ULONG CorrectableError : 1;
ULONG MultipleUncorrectableErrors : 1;
ULONG MultipleCorrectableErrors : 1;
ULONG ErrorDataEntryCount : 10;
ULONG Reserved : 18;
};
ULONG AsULONG;
} WHEA_GENERIC_ERROR_BLOCKSTATUS;
typedef WHEA_GENERIC_ERROR_BLOCKSTATUS *PWHEA_GENERIC_ERROR_BLOCKSTATUS;
/* Windows Hardware Error Architecture generic error */
typedef struct _WHEA_GENERIC_ERROR {
WHEA_GENERIC_ERROR_BLOCKSTATUS BlockStatus;
ULONG RawDataOffset;
ULONG RawDataLength;
ULONG DataLength;
WHEA_ERROR_SEVERITY ErrorSeverity;
UCHAR Data[1];
} WHEA_GENERIC_ERROR;
typedef WHEA_GENERIC_ERROR *PWHEA_GENERIC_ERROR;
/* Windows Hardware Error Architecture generic error data entry */
typedef struct _WHEA_GENERIC_ERROR_DATA_ENTRY {
GUID SectionType;
WHEA_ERROR_SEVERITY ErrorSeverity;
WHEA_REVISION Revision;
UCHAR ValidBits;
UCHAR Flags;
ULONG ErrorDataLength;
GUID FRUId;
UCHAR FRUText[20];
UCHAR Data[1];
} WHEA_GENERIC_ERROR_DATA_ENTRY;
typedef WHEA_GENERIC_ERROR_DATA_ENTRY *PWHEA_GENERIC_ERROR_DATA_ENTRY;
/* Revert to default packing. */
#include <poppack.h>
/* Windows Hardware Error Architecture error injection capabilities */
typedef union _WHEA_ERROR_INJECTION_CAPABILITIES {
struct {
ULONG ProcessorCorrectable : 1;
ULONG ProcessorUncorrectableNonFatal : 1;
ULONG ProcessorUncorrectableFatal : 1;
ULONG MemoryCorrectable : 1;
ULONG MemoryUncorrectableNonFatal : 1;
ULONG MemoryUncorrectableFatal : 1;
ULONG PCIExpressCorrectable : 1;
ULONG PCIExpressUncorrectableNonFatal : 1;
ULONG PCIExpressUncorrectableFatal : 1;
ULONG PlatformCorrectable : 1;
ULONG PlatformUncorrectableNonFatal : 1;
ULONG PlatformUncorrectableFatal : 1;
ULONG IA64Corrected : 1;
ULONG IA64Recoverable : 1;
ULONG IA64Fatal : 1;
ULONG IA64RecoverableCache : 1;
ULONG IA64RecoverableRegFile : 1;
ULONG Reserved : 15;
};
ULONG AsULONG;
} WHEA_ERROR_INJECTION_CAPABILITIES;
typedef WHEA_ERROR_INJECTION_CAPABILITIES *PWHEA_ERROR_INJECTION_CAPABILITIES;
/* PSHED plugin callbacks */
typedef NTSTATUS (NTAPI *PSHED_PI_GET_ALL_ERROR_SOURCES)( PVOID, PULONG, PWHEA_ERROR_SOURCE_DESCRIPTOR *, PULONG );
typedef NTSTATUS (NTAPI *PSHED_PI_GET_ERROR_SOURCE_INFO)( PVOID, PWHEA_ERROR_SOURCE_DESCRIPTOR );
typedef NTSTATUS (NTAPI *PSHED_PI_SET_ERROR_SOURCE_INFO)( PVOID, PWHEA_ERROR_SOURCE_DESCRIPTOR );
typedef NTSTATUS (NTAPI *PSHED_PI_ENABLE_ERROR_SOURCE)( PVOID, PWHEA_ERROR_SOURCE_DESCRIPTOR );
typedef NTSTATUS (NTAPI *PSHED_PI_DISABLE_ERROR_SOURCE)( PVOID, PWHEA_ERROR_SOURCE_DESCRIPTOR );
typedef NTSTATUS (NTAPI *PSHED_PI_WRITE_ERROR_RECORD)( PVOID, ULONG, ULONG, PWHEA_ERROR_RECORD );
typedef NTSTATUS (NTAPI *PSHED_PI_READ_ERROR_RECORD)( PVOID, ULONG, ULONGLONG, PULONGLONG, PULONG, PWHEA_ERROR_RECORD );
typedef NTSTATUS (NTAPI *PSHED_PI_CLEAR_ERROR_RECORD)( PVOID, ULONG, ULONGLONG );
typedef NTSTATUS (NTAPI *PSHED_PI_RETRIEVE_ERROR_INFO)( PVOID, PWHEA_ERROR_SOURCE_DESCRIPTOR, ULONGLONG, PWHEA_ERROR_PACKET );
typedef NTSTATUS (NTAPI *PSHED_PI_FINALIZE_ERROR_RECORD)( PVOID, PWHEA_ERROR_SOURCE_DESCRIPTOR, ULONG, PWHEA_ERROR_RECORD );
typedef NTSTATUS (NTAPI *PSHED_PI_CLEAR_ERROR_STATUS)( PVOID, PWHEA_ERROR_SOURCE_DESCRIPTOR, ULONG, PWHEA_ERROR_RECORD );
typedef NTSTATUS (NTAPI *PSHED_PI_ATTEMPT_ERROR_RECOVERY)( PVOID, ULONG, PWHEA_ERROR_RECORD );
typedef NTSTATUS (NTAPI *PSHED_PI_GET_INJECTION_CAPABILITIES)( PVOID, PWHEA_ERROR_INJECTION_CAPABILITIES );
typedef NTSTATUS (NTAPI *PSHED_PI_INJECT_ERROR)( PVOID, ULONGLONG, ULONGLONG, ULONGLONG, ULONGLONG, ULONGLONG );
/* Windows Hardware Error Architecture PSHED plugin callbacks */
typedef struct _WHEA_PSHED_PLUGIN_CALLBACKS {
PSHED_PI_GET_ALL_ERROR_SOURCES GetAllErrorSources;
PVOID Reserved;
PSHED_PI_GET_ERROR_SOURCE_INFO GetErrorSourceInfo;
PSHED_PI_SET_ERROR_SOURCE_INFO SetErrorSourceInfo;
PSHED_PI_ENABLE_ERROR_SOURCE EnableErrorSource;
PSHED_PI_DISABLE_ERROR_SOURCE DisableErrorSource;
PSHED_PI_WRITE_ERROR_RECORD WriteErrorSource;
PSHED_PI_READ_ERROR_RECORD ReadErrorSource;
PSHED_PI_RETRIEVE_ERROR_INFO RetrieveErrorInfo;
PSHED_PI_FINALIZE_ERROR_RECORD FinalizeErrorRecord;
PSHED_PI_CLEAR_ERROR_STATUS ClearErrorStatus;
PSHED_PI_ATTEMPT_ERROR_RECOVERY AttemptRecovery;
PSHED_PI_GET_INJECTION_CAPABILITIES GetInjectionCapabilities;
PSHED_PI_INJECT_ERROR InjectError;
} WHEA_PSHED_PLUGIN_CALLBACKS;
typedef WHEA_PSHED_PLUGIN_CALLBACKS *PWHEA_PSHED_PLUGIN_CALLBACKS;
/* Windows Hardware Error Architecture PSHED plugin registration packet */
typedef struct _WHEA_PSHED_PLUGIN_REGISTRATION_PACKET {
ULONG Length;
ULONG Version;
PVOID Context;
ULONG FunctionalAreaMask;
ULONG Reserved;
WHEA_PSHED_PLUGIN_CALLBACKS Callbacks;
} WHEA_PSHED_PLUGIN_REGISTRATION_PACKET;
typedef WHEA_PSHED_PLUGIN_REGISTRATION_PACKET *PWHEA_PSHED_PLUGIN_REGISTRATION_PACKET;
/* Global variables in NTOSKRNL.EXE */
extern NTKERNELAPI PHAL_DISPATCH HalDispatchTable;
extern NTKERNELAPI PEPROCESS PsInitialSystemProcess;
#ifdef _X86_
extern NTKERNELAPI PVOID MmHighestUserAddress;
extern NTKERNELAPI PVOID MmSystemRangeStart;
extern NTKERNELAPI ULONG MmUserProbeAddress;
#endif
/* Functions in NTDLL.DLL and NTOSKRNL.EXE */
NTSYSAPI ULONG NTAPI DbgPrompt( PCCH, PCH, ULONG );
NTSYSAPI NTSTATUS NTAPI RtlRunOnceBeginInitialize( PRTL_RUN_ONCE, ULONG, PVOID * );
NTSYSAPI NTSTATUS NTAPI RtlRunOnceComplete( PRTL_RUN_ONCE, ULONG, PVOID );
NTSYSAPI NTSTATUS NTAPI RtlRunOnceExecuteOnce( PRTL_RUN_ONCE, PRTL_RUN_ONCE_INIT_FN, PVOID, PVOID * );
NTSYSAPI VOID NTAPI RtlRunOnceInitialize( PRTL_RUN_ONCE );
NTSYSAPI NTSTATUS NTAPI ZwAllocateLocallyUniqueId( PLUID );
NTSYSAPI NTSTATUS NTAPI ZwOpenProcess( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PCLIENT_ID );
NTSYSAPI NTSTATUS NTAPI ZwTerminateProcess( HANDLE, NTSTATUS );
#if (NTDDI_VERSION >= 0x05000000)
NTSYSAPI NTSTATUS NTAPI RtlCharToInteger( PCSZ, ULONG, PULONG );
NTSYSAPI LONG NTAPI RtlCompareString( const STRING *, const STRING *, BOOLEAN );
NTSYSAPI VOID NTAPI RtlCopyString( PSTRING, const STRING * );
NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlDelete( PRTL_SPLAY_LINKS );
NTSYSAPI VOID NTAPI RtlDeleteNoSplay( PRTL_SPLAY_LINKS, PRTL_SPLAY_LINKS * );
NTSYSAPI BOOLEAN NTAPI RtlEqualString( const STRING *, const STRING *, BOOLEAN );
NTSYSAPI VOID NTAPI RtlGetCallersAddress( PVOID *, PVOID * );
NTSYSAPI NTSTATUS NTAPI RtlGetVersion( PRTL_OSVERSIONINFOW );
NTSYSAPI LARGE_INTEGER NTAPI RtlLargeIntegerDivide( LARGE_INTEGER, LARGE_INTEGER, PLARGE_INTEGER );
NTSYSAPI VOID NTAPI RtlMapGenericMask( PACCESS_MASK, PGENERIC_MAPPING );
NTSYSAPI BOOLEAN NTAPI RtlPrefixUnicodeString( PCUNICODE_STRING, PCUNICODE_STRING, BOOLEAN );
NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlRealPredeccesor( PRTL_SPLAY_LINKS );
NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlRealSuccessor( PRTL_SPLAY_LINKS );
NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlSplay( PRTL_SPLAY_LINKS );
NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlSubtreePredecessor( PRTL_SPLAY_LINKS );
NTSYSAPI PRTL_SPLAY_LINKS NTAPI RtlSubtreeSuccessor( PRTL_SPLAY_LINKS );
NTSYSAPI NTSTATUS NTAPI RtlUpcaseUnicodeString( PUNICODE_STRING, PCUNICODE_STRING, BOOLEAN );
NTSYSAPI CHAR NTAPI RtlUpperChar( CHAR );
NTSYSAPI VOID NTAPI RtlUpperString( PSTRING, const STRING * );
NTSYSAPI NTSTATUS NTAPI RtlVerifyVersionInfo( PRTL_OSVERSIONINFOEXW, ULONG, ULONGLONG );
NTSYSAPI NTSTATUS NTAPI RtlVolumeDeviceToDosName( PVOID, PUNICODE_STRING );
NTSYSAPI ULONG NTAPI RtlWalkFrameChain( PVOID *, ULONG, ULONG );
NTSYSAPI ULONGLONG NTAPI VerSetConditionMask( ULONGLONG, ULONG, UCHAR );
NTSYSAPI NTSTATUS NTAPI ZwCancelTimer( HANDLE, PBOOLEAN );
NTSYSAPI NTSTATUS NTAPI ZwCreateTimer( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, TIMER_TYPE );
NTSYSAPI NTSTATUS NTAPI ZwDeviceIoControlFile( HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID, PIO_STATUS_BLOCK, ULONG, PVOID, ULONG, PVOID, ULONG );
NTSYSAPI NTSTATUS NTAPI ZwDisplayString( PUNICODE_STRING );
NTSYSAPI NTSTATUS NTAPI ZwOpenTimer( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES );
NTSYSAPI NTSTATUS NTAPI ZwPowerInformation( POWER_INFORMATION_LEVEL, PVOID, ULONG, PVOID, ULONG );
NTSYSAPI NTSTATUS NTAPI ZwQueryVolumeInformationFile( HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG, FS_INFORMATION_CLASS );
NTSYSAPI NTSTATUS NTAPI ZwSetInformationThread( HANDLE, THREADINFOCLASS, PVOID, ULONG );
NTSYSAPI NTSTATUS NTAPI ZwSetTimer( HANDLE, PLARGE_INTEGER, PTIMER_APC_ROUTINE, PVOID, BOOLEAN, LONG, PBOOLEAN );
#ifndef RTL_USE_AVL_TABLES
NTSYSAPI BOOLEAN NTAPI RtlDeleteElementGenericTable( PRTL_GENERIC_TABLE, PVOID );
NTSYSAPI PVOID NTAPI RtlEnumerateGenericTable( PRTL_GENERIC_TABLE, BOOLEAN );
NTSYSAPI PVOID NTAPI RtlEnumerateGenericTableWithoutSplaying( PRTL_GENERIC_TABLE, PVOID * );
NTSYSAPI PVOID NTAPI RtlGetElementGenericTable( PRTL_GENERIC_TABLE, ULONG );
NTSYSAPI VOID NTAPI RtlInitializeGenericTable( PRTL_GENERIC_TABLE, PRTL_GENERIC_COMPARE_ROUTINE, PRTL_GENERIC_ALLOCATE_ROUTINE, PRTL_GENERIC_FREE_ROUTINE, PVOID );
NTSYSAPI PVOID NTAPI RtlInsertElementGenericTable( PRTL_GENERIC_TABLE, PVOID, CLONG, PBOOLEAN );
NTSYSAPI PVOID NTAPI RtlInsertElementGenericTableFull( PRTL_GENERIC_TABLE, PVOID, CLONG, PBOOLEAN, PVOID, TABLE_SEARCH_RESULT );
NTSYSAPI BOOLEAN NTAPI RtlIsGenericTableEmpty( PRTL_GENERIC_TABLE );
NTSYSAPI PVOID NTAPI RtlLookupElementGenericTable( PRTL_GENERIC_TABLE, PVOID );
NTSYSAPI PVOID NTAPI RtlLookupElementGenericTableFull( PRTL_GENERIC_TABLE, PVOID, PVOID *, TABLE_SEARCH_RESULT * );
NTSYSAPI ULONG NTAPI RtlNumberGenericTableElements( PRTL_GENERIC_TABLE );
#endif
#endif
#if (NTDDI_VERSION >= 0x05010000)
NTSYSAPI BOOLEAN NTAPI RtlDeleteElementGenericTableAvl( PRTL_AVL_TABLE, PVOID );
NTSYSAPI PVOID NTAPI RtlEnumerateGenericTableAvl( PRTL_AVL_TABLE, BOOLEAN );
NTSYSAPI PVOID NTAPI RtlEnumerateGenericTableLikeADictionary( PRTL_AVL_TABLE, PRTL_AVL_MATCH_FUNCTION, PVOID, ULONG, PVOID *, PULONG, PVOID );
NTSYSAPI PVOID NTAPI RtlEnumerateGenericTableWithoutSplayingAvl( PRTL_AVL_TABLE, PVOID * );
NTSYSAPI PVOID NTAPI RtlGetElementGenericTableAvl( PRTL_AVL_TABLE, ULONG );
NTSYSAPI VOID NTAPI RtlInitializeGenericTableAvl( PRTL_AVL_TABLE, PRTL_AVL_COMPARE_ROUTINE, PRTL_AVL_ALLOCATE_ROUTINE, PRTL_AVL_FREE_ROUTINE, PVOID );
NTSYSAPI PVOID NTAPI RtlInsertElementGenericTableAvl( PRTL_AVL_TABLE, PVOID, CLONG, PBOOLEAN );
NTSYSAPI PVOID NTAPI RtlInsertElementGenericTableFullAvl( PRTL_AVL_TABLE, PVOID, CLONG, PBOOLEAN, PVOID, TABLE_SEARCH_RESULT );
NTSYSAPI BOOLEAN NTAPI RtlIsGenericTableEmptyAvl( PRTL_AVL_TABLE );
NTSYSAPI PVOID NTAPI RtlLookupElementGenericTableAvl( PRTL_AVL_TABLE, PVOID );
NTSYSAPI PVOID NTAPI RtlLookupElementGenericTableFullAvl( PRTL_AVL_TABLE, PVOID, PVOID *, TABLE_SEARCH_RESULT * );
NTSYSAPI PVOID NTAPI RtlLookupFirstMatchingElementGenericTableAvl( PRTL_AVL_TABLE, PVOID, PVOID * );
NTSYSAPI ULONG NTAPI RtlNumberGenericTableElementsAvl( PRTL_AVL_TABLE );
#endif
#if (NTDDI_VERSION >= 0x06000000)
NTSYSAPI BOOLEAN NTAPI RtlGetProductInfo( ULONG, ULONG, ULONG, ULONG, PULONG );
#endif
#if (NTDDI_VERSION >= 0x06010000)
NTSYSAPI BOOLEAN NTAPI RtlContractHashTable( PRTL_DYNAMIC_HASH_TABLE );
NTSYSAPI BOOLEAN NTAPI RtlCreateHashTable( PRTL_DYNAMIC_HASH_TABLE, ULONG, ULONG );
NTSYSAPI VOID NTAPI RtlDeleteHashTable( PRTL_DYNAMIC_HASH_TABLE );
NTSYSAPI VOID NTAPI RtlEndEnumerationHashTable( PRTL_DYNAMIC_HASH_TABLE, PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR );
NTSYSAPI VOID NTAPI RtlEndWeakEnumerationHashTable( PRTL_DYNAMIC_HASH_TABLE, PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR );
NTSYSAPI PRTL_DYNAMIC_HASH_TABLE_ENTRY NTAPI RtlEnumerateEntryHashTable( PRTL_DYNAMIC_HASH_TABLE, PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR );
NTSYSAPI BOOLEAN NTAPI RtlExpandHashTable( PRTL_DYNAMIC_HASH_TABLE );
NTSYSAPI PRTL_DYNAMIC_HASH_TABLE_ENTRY NTAPI RtlGetNextEntryHashTable( PRTL_DYNAMIC_HASH_TABLE, PRTL_DYNAMIC_HASH_TABLE_CONTEXT );
NTSYSAPI BOOLEAN NTAPI RtlInitEnumerationHashTable( PRTL_DYNAMIC_HASH_TABLE, PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR );
NTSYSAPI BOOLEAN NTAPI RtlInitWeakEnumerationHashTable( PRTL_DYNAMIC_HASH_TABLE, PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR );
NTSYSAPI BOOLEAN NTAPI RtlInsertEntryHashTable( PRTL_DYNAMIC_HASH_TABLE, PRTL_DYNAMIC_HASH_TABLE_ENTRY, ULONG_PTR, PRTL_DYNAMIC_HASH_TABLE_CONTEXT );
NTSYSAPI PRTL_DYNAMIC_HASH_TABLE_ENTRY NTAPI RtlLookupEntryHashTable( PRTL_DYNAMIC_HASH_TABLE, ULONG_PTR, PRTL_DYNAMIC_HASH_TABLE_CONTEXT );
NTSYSAPI BOOLEAN NTAPI RtlRemoveEntryHashTable( PRTL_DYNAMIC_HASH_TABLE, PRTL_DYNAMIC_HASH_TABLE, PRTL_DYNAMIC_HASH_TABLE_CONTEXT );
NTSYSAPI PRTL_DYNAMIC_HASH_TABLE_ENTRY NTAPI RtlWeaklyEnumerateEntryHashTable( PRTL_DYNAMIC_HASH_TABLE, PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR );
NTSYSAPI NTSTATUS NTAPI ZwSetTimerEx( HANDLE, TIMER_SET_INFORMATION_CLASS, PVOID, ULONG );
#endif
/* System call functions in NTDLL.DLL and NTOSKRNL.EXE */
NTSYSCALLAPI NTSTATUS NTAPI NtOpenProcess( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PCLIENT_ID );
NTSYSCALLAPI NTSTATUS NTAPI NtQueryInformationProcess( HANDLE, PROCESSINFOCLASS, PVOID, ULONG, PULONG );
/* Functions in NTOSKRNL.EXE */
NTKERNELAPI VOID FASTCALL KeInvalidateRangeAllCaches( PVOID, ULONG );
#ifdef _X86_
NTKERNELAPI INTERLOCKED_RESULT FASTCALL Exfi386InterlockedDecrementLong( LONG volatile * );
NTKERNELAPI ULONG FASTCALL Exfi386InterlockedExchangeUlong( ULONG volatile *, ULONG );
NTKERNELAPI INTERLOCKED_RESULT FASTCALL Exfi386InterlockedIncrementLong( LONG volatile * );
#endif
#if (NTDDI_VERSION >= 0x05000000)
NTKERNELAPI NTSTATUS NTAPI ExExtendZone( PZONE_HEADER, PVOID, ULONG );
NTKERNELAPI NTSTATUS NTAPI ExInitializeZone( PZONE_HEADER, ULONG, PVOID, ULONG );
NTKERNELAPI NTSTATUS NTAPI ExInterlockedExtendZone( PZONE_HEADER, PVOID, ULONG, PKSPIN_LOCK );
NTKERNELAPI DECLSPEC_NORETURN VOID NTAPI ExRaiseAccessViolation( VOID );
NTKERNELAPI DECLSPEC_NORETURN VOID NTAPI ExRaiseDatatypeMisalignment( VOID );
NTKERNELAPI NTSTATUS NTAPI ExUuidCreate( UUID * );
NTKERNELAPI BOOLEAN NTAPI FsRtlIsTotalDeviceFailure( NTSTATUS );
NTKERNELAPI NTSTATUS NTAPI IoAllocateAdapterChannel( PADAPTER_OBJECT, PDEVICE_OBJECT, ULONG, PDRIVER_CONTROL, PVOID );
NTKERNELAPI VOID NTAPI IoAllocateController( PCONTROLLER_OBJECT, PDEVICE_OBJECT, PDRIVER_CONTROL, PVOID );
NTKERNELAPI NTSTATUS NTAPI IoAssignResources( PUNICODE_STRING, PUNICODE_STRING, PDRIVER_OBJECT, PDEVICE_OBJECT, PIO_RESOURCE_REQUIREMENTS_LIST, PCM_RESOURCE_LIST * );
NTKERNELAPI NTSTATUS NTAPI IoAttachDeviceByPointer( PDEVICE_OBJECT, PDEVICE_OBJECT );
NTKERNELAPI VOID NTAPI IoCancelFileOpen( PDEVICE_OBJECT, PFILE_OBJECT );
NTKERNELAPI PCONTROLLER_OBJECT NTAPI IoCreateController( ULONG );
NTKERNELAPI VOID NTAPI IoDeleteController( PCONTROLLER_OBJECT );
NTKERNELAPI VOID NTAPI IoFreeController( PCONTROLLER_OBJECT );
NTKERNELAPI PCONFIGURATION_INFORMATION NTAPI IoGetConfigurationInformation( VOID );
NTKERNELAPI PDEVICE_OBJECT NTAPI IoGetDeviceToVerify( PETHREAD );
NTKERNELAPI PGENERIC_MAPPING NTAPI IoGetFileObjectGenericMapping( VOID );
NTKERNELAPI PIRP NTAPI IoMakeAssociatedIrp( PIRP, CCHAR );
NTKERNELAPI NTSTATUS NTAPI IoQueryDeviceDescription( PINTERFACE_TYPE, PULONG, PCONFIGURATION_TYPE, PULONG, PCONFIGURATION_TYPE, PULONG, PIO_QUERY_DEVICE_ROUTINE, PVOID );
NTKERNELAPI VOID NTAPI IoRaiseHardError( PIRP, PVPB, PDEVICE_OBJECT );
NTKERNELAPI BOOLEAN NTAPI IoRaiseInformationalHardError( NTSTATUS, PUNICODE_STRING, PKTHREAD );
NTKERNELAPI VOID NTAPI IoRegisterBootDriverReinitialization( PDRIVER_OBJECT, PDRIVER_REINITIALIZE, PVOID );
NTKERNELAPI VOID NTAPI IoRegisterDriverReinitialization( PDRIVER_OBJECT, PDRIVER_REINITIALIZE, PVOID );
NTKERNELAPI NTSTATUS NTAPI IoReportDetectedDevice( PDRIVER_OBJECT, INTERFACE_TYPE, ULONG, ULONG, PCM_RESOURCE_LIST, PIO_RESOURCE_REQUIREMENTS_LIST, BOOLEAN, PDEVICE_OBJECT * );
NTKERNELAPI NTSTATUS NTAPI IoReportResourceForDetection( PDRIVER_OBJECT, PCM_RESOURCE_LIST, ULONG, PDEVICE_OBJECT, PCM_RESOURCE_LIST, ULONG, PBOOLEAN );
NTKERNELAPI NTSTATUS NTAPI IoReportResourceUsage( PUNICODE_STRING, PDRIVER_OBJECT, PCM_RESOURCE_LIST, ULONG, PDEVICE_OBJECT, PCM_RESOURCE_LIST, ULONG, BOOLEAN, PBOOLEAN );
NTKERNELAPI VOID NTAPI IoSetHardErrorOrVerifyDevice( PIRP, PDEVICE_OBJECT );
NTKERNELAPI BOOLEAN NTAPI IoSetThreadHardErrorMode( BOOLEAN );
NTKERNELAPI DECLSPEC_NORETURN VOID NTAPI KeBugCheck( ULONG );
NTKERNELAPI LONG NTAPI KePulseEvent( PRKEVENT, KPRIORITY, BOOLEAN );
NTKERNELAPI KAFFINITY NTAPI KeQueryActiveProcessors( VOID );
NTKERNELAPI LONG NTAPI KeSetBasePriorityThread( PKTHREAD, LONG );
NTKERNELAPI NTSTATUS NTAPI MmAddPhysicalMemory( PPHYSICAL_ADDRESS, PLARGE_INTEGER );
NTKERNELAPI PVOID NTAPI MmAllocateContiguousMemory( SIZE_T, PHYSICAL_ADDRESS );
NTKERNELAPI PVOID NTAPI MmAllocateContiguousMemorySpecifyCache( SIZE_T, PHYSICAL_ADDRESS, PHYSICAL_ADDRESS, PHYSICAL_ADDRESS, MEMORY_CACHING_TYPE );
NTKERNELAPI PVOID NTAPI MmAllocateContiguousMemorySpecifyCacheNode( SIZE_T, PHYSICAL_ADDRESS, PHYSICAL_ADDRESS, PHYSICAL_ADDRESS, MEMORY_CACHING_TYPE, NODE_REQUIREMENT );
NTKERNELAPI PVOID NTAPI MmAllocateNonCachedMemory( SIZE_T );
NTKERNELAPI VOID NTAPI MmFreeContiguousMemory( PVOID );
NTKERNELAPI VOID NTAPI MmFreeContiguousMemorySpecifyCache( PVOID, SIZE_T, MEMORY_CACHING_TYPE );
NTKERNELAPI VOID NTAPI MmFreeNonCachedMemory( PVOID, SIZE_T );
NTKERNELAPI PHYSICAL_ADDRESS NTAPI MmGetPhysicalAddress( PVOID );
NTKERNELAPI PPHYSICAL_MEMORY_RANGE NTAPI MmGetPhysicalMemoryRanges( VOID );
NTKERNELAPI PVOID NTAPI MmGetVirtualForPhysical( PHYSICAL_ADDRESS );
NTKERNELAPI BOOLEAN NTAPI MmIsAddressValid( PVOID );
NTKERNELAPI BOOLEAN NTAPI MmIsNonPagedSystemAddressValid( PVOID );
NTKERNELAPI BOOLEAN NTAPI MmIsThisAnNtSystem( VOID );
NTKERNELAPI VOID NTAPI MmLockPagableSectionByHandle( PVOID );
NTKERNELAPI NTSTATUS NTAPI MmMapUserAddressesToPage( PVOID, SIZE_T, PVOID );
NTKERNELAPI PVOID NTAPI MmMapVideoDisplay( PPHYSICAL_ADDRESS, SIZE_T, MEMORY_CACHING_TYPE );
NTKERNELAPI NTSTATUS NTAPI MmMapViewInSessionSpace( PVOID, PVOID *, PSIZE_T );
NTKERNELAPI NTSTATUS NTAPI MmMapViewInSystemSpace( PVOID, PVOID *, PSIZE_T );
NTKERNELAPI NTSTATUS NTAPI MmRemovePhysicalMemory( PPHYSICAL_ADDRESS, PLARGE_INTEGER );
NTKERNELAPI HANDLE NTAPI MmSecureVirtualMemory( PVOID, SIZE_T, ULONG );
NTKERNELAPI VOID NTAPI MmUnmapVideoDisplay( PVOID, SIZE_T );
NTKERNELAPI NTSTATUS NTAPI MmUnmapViewInSessionSpace( PVOID );
NTKERNELAPI NTSTATUS NTAPI MmUnmapViewInSystemSpace( PVOID );
NTKERNELAPI VOID NTAPI MmUnsecureVirtualMemory( HANDLE );
NTKERNELAPI HANDLE NTAPI PsGetCurrentProcessId( VOID );
NTKERNELAPI HANDLE NTAPI PsGetCurrentThreadId( VOID );
NTKERNELAPI BOOLEAN NTAPI PsGetVersion( PULONG, PULONG, PULONG, PUNICODE_STRING );
NTKERNELAPI NTSTATUS NTAPI PsSetCreateProcessNotifyRoutine( PCREATE_PROCESS_NOTIFY_ROUTINE, BOOLEAN );
NTKERNELAPI NTSTATUS NTAPI PsSetCreateThreadNotifyRoutine( PCREATE_THREAD_NOTIFY_ROUTINE );
NTKERNELAPI NTSTATUS NTAPI PsSetLoadImageNotifyRoutine( PLOAD_IMAGE_NOTIFY_ROUTINE );
NTKERNELAPI BOOLEAN NTAPI SeSinglePrivilegeCheck( LUID, KPROCESSOR_MODE );
#endif
#if (NTDDI_VERSION >= 0x05000300)
NTKERNELAPI BOOLEAN NTAPI IoIsFileOriginRemote( PFILE_OBJECT );
NTKERNELAPI NTSTATUS NTAPI IoSetFileOrigin( PFILE_OBJECT, BOOLEAN );
#endif
#if (NTDDI_VERSION >= 0x05010000)
NTKERNELAPI VOID FASTCALL HalExamineMBR( PDEVICE_OBJECT, ULONG, ULONG, PVOID * );
NTKERNELAPI NTSTATUS NTAPI IoAttachDeviceToDeviceStackSafe( PDEVICE_OBJECT, PDEVICE_OBJECT, PDEVICE_OBJECT * );
NTKERNELAPI NTSTATUS NTAPI IoCreateDisk( PDEVICE_OBJECT, struct _CREATE_DISK * );
NTKERNELAPI NTSTATUS NTAPI IoCreateFileSpecifyDeviceObjectHint( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PIO_STATUS_BLOCK, PLARGE_INTEGER, ULONG, ULONG, ULONG, ULONG, PVOID, ULONG, CREATE_FILE_TYPE, PVOID, ULONG, PVOID );
NTKERNELAPI NTSTATUS NTAPI IoReadDiskSignature( PDEVICE_OBJECT, ULONG, PDISK_SIGNATURE );
NTKERNELAPI NTSTATUS FASTCALL IoReadPartitionTable( PDEVICE_OBJECT, ULONG, BOOLEAN, struct _DRIVE_LAYOUT_INFORMATION ** );
NTKERNELAPI NTSTATUS NTAPI IoReadPartitionTableEx( PDEVICE_OBJECT, struct _DRIVE_LAYOUT_INFORMATION_EX ** );
NTKERNELAPI NTSTATUS FASTCALL IoSetPartitionInformation( PDEVICE_OBJECT, ULONG, ULONG, ULONG );
NTKERNELAPI NTSTATUS NTAPI IoSetPartitionInformationEx( PDEVICE_OBJECT, ULONG, struct _SET_PARTITION_INFORMATION_EX * );
NTKERNELAPI NTSTATUS NTAPI IoSetSystemPartition( PUNICODE_STRING );
NTKERNELAPI NTSTATUS NTAPI IoVerifyPartitionTable( PDEVICE_OBJECT, BOOLEAN );
NTKERNELAPI NTSTATUS NTAPI IoVolumeDeviceToDosName( PVOID, PUNICODE_STRING );
NTKERNELAPI NTSTATUS FASTCALL IoWritePartitionTable( PDEVICE_OBJECT, ULONG, ULONG, ULONG, struct _DRIVE_LAYOUT_INFORMATION * );
NTKERNELAPI NTSTATUS NTAPI IoWritePartitionTableEx( PDEVICE_OBJECT, struct _DRIVE_LAYOUT_INFORMATION_EX * );
NTKERNELAPI LONGLONG NTAPI PsGetProcessCreateTimeQuadPart( PEPROCESS );
NTKERNELAPI HANDLE NTAPI PsGetProcessId( PEPROCESS );
NTKERNELAPI HANDLE NTAPI PsGetThreadId( PETHREAD );
NTKERNELAPI NTSTATUS NTAPI PsRemoveCreateThreadNotifyRoutine( PCREATE_THREAD_NOTIFY_ROUTINE );
NTKERNELAPI NTSTATUS NTAPI PsRemoveLoadImageNotifyRoutine( PLOAD_IMAGE_NOTIFY_ROUTINE );
#endif
#if (NTDDI_VERSION >= 0x05020000)
NTKERNELAPI IO_PAGING_PRIORITY FASTCALL IoGetPagingIoPriority( PIRP );
NTKERNELAPI BOOLEAN NTAPI KeInvalidateAllCaches( VOID );
NTKERNELAPI NTSTATUS NTAPI MmCreateMirror( VOID );
NTKERNELAPI HANDLE NTAPI PsGetThreadProcessId( PETHREAD );
#endif
#if (NTDDI_VERSION >= 0x05020100)
NTKERNELAPI BOOLEAN NTAPI IoTranslateBusAddress( INTERFACE_TYPE, ULONG, PHYSICAL_ADDRESS, PULONG, PPHYSICAL_ADDRESS );
NTKERNELAPI NTSTATUS NTAPI KeExpandKernelStackAndCallout( PEXPAND_STACK_CALLOUT, PVOID, SIZE_T );
#endif
#if (NTDDI_VERSION >= 0x06000000)
NTKERNELAPI VOID NTAPI IoClearIrpExtraCreateParameter( PIRP );
NTKERNELAPI NTSTATUS NTAPI IoCreateFileEx( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PIO_STATUS_BLOCK, PLARGE_INTEGER, ULONG, ULONG, ULONG, ULONG, PVOID, ULONG, CREATE_FILE_TYPE, PVOID, ULONG, PIO_DRIVER_CREATE_CONTEXT );
NTKERNELAPI NTSTATUS NTAPI IoGetIrpExtraCreateParameter( PIRP, struct _ECP_LIST ** );
NTKERNELAPI PTXN_PARAMETER_BLOCK NTAPI IoGetTransactionParameterBlock( PFILE_OBJECT );
NTKERNELAPI BOOLEAN NTAPI IoIsFileObjectIgnoringSharing( PFILE_OBJECT );
NTKERNELAPI NTSTATUS NTAPI IoSetIrpExtraCreateParameter( PIRP, struct _ECP_LIST * );
NTKERNELAPI NTSTATUS NTAPI MmRotatePhysicalView( PVOID, PSIZE_T, PMDLX, MM_ROTATE_DIRECTION, PMM_ROTATE_COPY_CALLBACK_FUNCTION, PVOID );
NTKERNELAPI BOOLEAN NTAPI PsIsCurrentThreadPrefetching( VOID );
NTKERNELAPI BOOLEAN NTAPI PsSetCurrentThreadPrefetching( BOOLEAN );
#endif
#if (NTDDI_VERSION >= 0x06000100)
NTKERNELAPI NTSTATUS NTAPI PsSetCreateProcessNotifyRoutineEx( PCREATE_PROCESS_NOTIFY_ROUTINE_EX, BOOLEAN );
#endif
#if (NTDDI_VERSION >= 0x06010000)
NTKERNELAPI NTSTATUS NTAPI IoSetFileObjectIgnoreSharing( PFILE_OBJECT );
NTKERNELAPI NTSTATUS NTAPI KeQueryHardwareCounterConfiguration( PHARDWARE_COUNTER, ULONG, PULONG );
NTKERNELAPI NTSTATUS NTAPI KeSetHardwareCounterConfiguration( PHARDWARE_COUNTER, ULONG );
#endif
/* Functions in HAL.DLL */
NTHALAPI NTSTATUS NTAPI HalAllocateHardwareCounters( PGROUP_AFFINITY, ULONG, PPHYSICAL_COUNTER_RESOURCE_LIST, PHANDLE );
NTHALAPI NTSTATUS NTAPI HalFreeHardwareCounters( HANDLE );
#if (NTDDI_VERSION >= 0x05000000)
NTHALAPI VOID NTAPI HalAcquireDisplayOwnership( PHAL_RESET_DISPLAY_PARAMETERS );
NTHALAPI NTSTATUS NTAPI HalAllocateAdapterChannel( PADAPTER_OBJECT, PWAIT_CONTEXT_BLOCK, ULONG, PDRIVER_CONTROL );
NTHALAPI PVOID NTAPI HalAllocateCommonBuffer( PADAPTER_OBJECT, ULONG, PPHYSICAL_ADDRESS, BOOLEAN );
NTHALAPI PVOID NTAPI HalAllocateCrashDumpRegisters( PADAPTER_OBJECT, PULONG );
NTHALAPI NTSTATUS NTAPI HalAssignSlotResources( PUNICODE_STRING, PUNICODE_STRING, PDRIVER_OBJECT, PDEVICE_OBJECT, INTERFACE_TYPE, ULONG, ULONG, PCM_RESOURCE_LIST * );
NTHALAPI VOID NTAPI HalFreeCommonBuffer( PADAPTER_OBJECT, ULONG, PHYSICAL_ADDRESS, PVOID, BOOLEAN );
NTHALAPI PADAPTER_OBJECT NTAPI HalGetAdapter( PDEVICE_DESCRIPTION, PULONG );
NTHALAPI ULONG NTAPI HalGetBusData( BUS_DATA_TYPE, ULONG, ULONG, PVOID, ULONG );
NTHALAPI ULONG NTAPI HalGetBusDataByOffset( BUS_DATA_TYPE, ULONG, ULONG, PVOID, ULONG, ULONG );
NTHALAPI ULONG NTAPI HalGetInterruptVector( INTERFACE_TYPE, ULONG, ULONG, ULONG, PKIRQL, PKAFFINITY );
NTHALAPI BOOLEAN NTAPI HalMakeBeep( ULONG );
NTHALAPI ULONG NTAPI HalReadDmaCounter( PADAPTER_OBJECT );
NTHALAPI ULONG NTAPI HalSetBusData( BUS_DATA_TYPE, ULONG, ULONG, PVOID, ULONG );
NTHALAPI ULONG NTAPI HalSetBusDataByOffset( BUS_DATA_TYPE, ULONG, ULONG, PVOID, ULONG, ULONG );
NTHALAPI BOOLEAN NTAPI HalTranslateBusAddress( INTERFACE_TYPE, ULONG, PHYSICAL_ADDRESS, PULONG, PPHYSICAL_ADDRESS );
NTHALAPI BOOLEAN NTAPI IoFlushAdapterBuffers( PADAPTER_OBJECT, PMDL, PVOID, PVOID, ULONG, BOOLEAN );
NTHALAPI VOID NTAPI IoFreeAdapterChannel( PADAPTER_OBJECT );
NTHALAPI VOID NTAPI IoFreeMapRegisters( PADAPTER_OBJECT, PVOID, ULONG );
NTHALAPI PHYSICAL_ADDRESS NTAPI IoMapTransfer( PADAPTER_OBJECT, PMDL, PVOID, PVOID, PULONG, BOOLEAN );
#ifdef _X86_
NTHALAPI KIRQL NTAPI KeRaiseIrqlToSynchLevel( VOID );
#endif
#endif
/* Functions in HAL.DLL that are defined differently on different versions
* of Windows.
*/
#if (NTDDI_VERSION >= 0x06010000)
NTHALAPI VOID NTAPI HalBugCheckSystem( PWHEA_ERROR_SOURCE_DESCRIPTOR, PWHEA_ERROR_RECORD );
#else
NTHALAPI VOID NTAPI HalBugCheckSystem( PWHEA_ERROR_RECORD );
#endif
/* Functions in PSHED.DLL */
PVOID NTAPI PshedAllocateMemory( ULONG );
VOID NTAPI PshedFreeMemory( PVOID );
BOOLEAN NTAPI PshedIsSystemWheaEnabled( VOID );
NTSTATUS NTAPI PshedRegisterPlugin( PWHEA_PSHED_PLUGIN_REGISTRATION_PACKET );
BOOLEAN NTAPI PshedSynchronizeExecution( PWHEA_ERROR_SOURCE_DESCRIPTOR, PKSYNCHRONIZE_ROUTINE, PVOID );
/* Functions implemented with inline assembly code */
PKPCR KeGetCurrentKPCR( void );
/* Inline assembly implementation of functions defined above */
#ifdef _X86_
#pragma aux KeGetCurrentKPCR = \
"mov eax, fs:[0x18]" \
value [eax];
#endif
/* Functions implemented as macros */
#define RtlInitializeSplayLinks( x ) \
{ \
PRTL_SPLAY_LINKS v; \
v = (PRTL_SPLAY_LINKS)(x); \
v->Parent = v; \
v->LeftChild = NULL; \
v->RightChild = NULL; \
}
#define RtlParent( x ) ((PRTL_SPLAY_LINKS)(x)->Parent)
#define RtlLeftChild( x ) ((PRTL_SPLAY_LINKS)(x)->LeftChild)
#define RtlRightChild( x ) ((PRTL_SPLAY_LINKS)(x)->RightChild)
#define RtlIsRoot( x ) (RtlParent( x ) == (PRTL_SPLAY_LINKS)(x))
#define RtlIsLeftChild( x ) \
(RtlLeftChild( RtlParent( x ) ) == (PRTL_SPLAY_LINKS)(x))
#define RtlIsRightChild( x ) \
(RtlRightChild( RtlParent( x ) ) == (PRTL_SPLAY_LINKS)(x))
#define RtlInsertAsLeftChild( x, p ) \
{ \
PRTL_SPLAY_LINKS v1; \
PRTL_SPLAY_LINKS v2; \
v1 = (PRTL_SPLAY_LINKS)(x); \
v2 = (PRTL_SPLAY_LINKS)(p); \
v1->LeftChild = v2; \
v2->Parent = v1; \
}
#define RtlInsertAsRightChild( x, p ) \
{ \
PRTL_SPLAY_LINKS v1; \
PRTL_SPLAY_LINKS v2; \
v1 = (PRTL_SPLAY_LINKS)(x); \
v2 = (PRTL_SPLAY_LINKS)(p); \
v1->RightChild = v2; \
v2->Parent = v1; \
}
#define ExFreeToZone( x, p ) \
(((PSINGLE_LIST_ENTRY)(p))->Next = (x)->FreeList.Next, \
(x)->FreeList.Next = ((PSINGLE_LIST_ENTRY)(p)), \
((PSINGLE_LIST_ENTRY)(p))->Next)
#define ExIsFullZone( x ) \
((x)->FreeList.Next == NULL)
#define ExInterlockedAllocateFromZone( x, p ) \
(PVOID)ExInterlockedPopEntryList( &(x)->FreeList, p )
#define ExInterlockedFreeToZone( x, p1, p2 ) \
ExInterlockedPushEntryList( &(x)->FreeList, (PSINGLE_LIST_ENTRY)(p1), p2 )
#define ExIsObjectInFirstZoneSegment( x, p ) \
((BOOLEAN)(((PUCHAR)(p) >= (PUCHAR)(x)->SegmentList.Next) && \
((PUCHAR)(p) < (PUCHAR)(x)->SegmentList.Next + (x)->TotalSegmentSize))
#define IoAssignArcName( p1, p2 ) IoCreateSymbolicLink( p1, p2 )
#define IoDeassignArcName( x ) IoDeleteSymbolicLink( x )
#define WheaIsPreviousError( x ) \
((x)->Header.Flags & WHEA_ERROR_RECORD_FLAGS_PREVIOUSERROR)
#ifdef _X86_
#define KeGetCurrentProcessorNumber() ((ULONG)KeGetCurrentKPCR()->Number)
#define HalGetDmaAlignmentRequirement() 1L
#endif
/* Aliases */
#ifdef RTL_USE_AVL_TABLES
#define RtlInitializeGenericTable RtlInitializeGenericTableAvl
#define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
#define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
#define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
#define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
#define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
#define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
#define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
#define RtlGetElementGenericTable RtlGetElementGenericTableAvl
#define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
#define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
#endif
#define ExInitializeResource ExInitializeResourceLite
#define ExAcquireResourceShared ExAcquireResourceSharedLite
#define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
#define ExReleaseResourceForThread ExReleaseResourceForThreadLite
#define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
#define ExDeleteResource ExDeleteResourceLite
#define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
#define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
#define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
/* Other macros */
#define VER_SET_CONDITION( p1, p2, p3 ) \
((p1) = VerSetConditionMask( p1, p2, p3 ))
#define HALDISPATCH HalDispatchTable
#define HalDispatchTableVersion HALDISPATCH->Version
#define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
#define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
#define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
#define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
#define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
#define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
#define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
#define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
#define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
#define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
#define HalStartMirroring HALDISPATCH->HalStartMirroring
#define HalEndMirroring HALDISPATCH->HalEndMirroring
#define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
#define HalEndOfBoot HALDISPATCH->HalEndOfBoot
#define HalMirrorVerify HALDISPATCH->HalMirrorVerify
#define HalGetCachedAcpiTable HALDISPATCH->HalGetCachedAcpiTable
#define HalSetPciErrorHandlerCallback HALDISPATCH->HalSetPciErrorHandlerCallback
#ifdef _X86_
#define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
#define MM_SYSTEM_RANGE_START MmSystemRangeStart
#define MM_USER_PROBE_ADDRESS MmUserProbeAddress
#define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
#endif
__inline LUID RtlConvertLongToLuid( LONG x )
{
LARGE_INTEGER v1;
LUID v2;
v1.QuadPart = x;
v2.LowPart = v1.LowPart;
v2.HighPart = v1.HighPart;
return( v2 );
}
__inline LUID RtlConvertUlongToLuid( ULONG x )
{
LUID v;
v.LowPart = x;
v.HighPart = 0;
return( v );
}
__inline PVOID ExAllocateFromZone( PZONE_HEADER x )
{
PVOID v;
v = (PVOID)(x->FreeList.Next);
if( x->FreeList.Next ) {
x->FreeList.Next = x->FreeList.Next->Next;
}
return( v );
}
__inline VOID IoInitializeDriverCreateContext( PIO_DRIVER_CREATE_CONTEXT x )
{
RtlZeroMemory( x, sizeof( IO_DRIVER_CREATE_CONTEXT ) );
x->Size = sizeof( IO_DRIVER_CREATE_CONTEXT );
}
#if (NTDDI_VERSION >= 0x06010000)
__inline VOID RtlInitHashTableContext( PRTL_DYNAMIC_HASH_TABLE_CONTEXT x )
{
x->ChainHead = NULL;
x->PrevLinkage = NULL;
}
__inline VOID RtlInitHashTableContextFromEnumerator( PRTL_DYNAMIC_HASH_TABLE_CONTEXT x,
PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR p )
{
x->ChainHead = p->ChainHead;
x->PrevLinkage = p->HashEntry.Linkage.Blink;
}
__inline void RtlReleaseHashTableContext( PRTL_DYNAMIC_HASH_TABLE_CONTEXT x )
{
x = x;
}
__inline ULONG RtlTotalBucketsHashTable( PRTL_DYNAMIC_HASH_TABLE x )
{
return( x->TableSize );
}
__inline ULONG RtlNonEmptyBucketsHashTable( PRTL_DYNAMIC_HASH_TABLE x )
{
return( x->NonEmptyBuckets );
}
__inline ULONG RtlEmptyBucketsHashTable( PRTL_DYNAMIC_HASH_TABLE x )
{
return( x->TableSize - x->NonEmptyBuckets );
}
__inline ULONG RtlTotalEntriesHashTable( PRTL_DYNAMIC_HASH_TABLE x )
{
return( x->NumEntries );
}
__inline ULONG RtlActiveEnumeratorsHashTable( PRTL_DYNAMIC_HASH_TABLE x )
{
return( x->NumEnumerators );
}
#endif /* (NTDDI_VERSION >= 0x06010000) */
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* _NTDDK_ */