/* * 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 #include #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 /* 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 /* 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_ */