You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
3.3 KiB
129 lines
3.3 KiB
//----------------------------------------------------------------------------
|
|
//
|
|
// Debug engine Ioctls for extending EXDI.
|
|
// Covers:
|
|
// Read/write MSRs.
|
|
// Multiprocessor description and control.
|
|
// Determination of what breakpoint was hit for hrBp.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#ifndef __DBGENG_EXDI_IO_H__
|
|
#define __DBGENG_EXDI_IO_H__
|
|
|
|
//
|
|
// Specific Ioctl operations.
|
|
// All Ioctl structures must have the Ioctl code as the first member.
|
|
//
|
|
|
|
typedef enum
|
|
{
|
|
// Marker for the beginning of the enum. Start at
|
|
// a value other than zero to prevent obvious collisions
|
|
// with other Ioctl codes.
|
|
DBGENG_EXDI_IOC_BEFORE_FIRST = 0x8664,
|
|
|
|
DBGENG_EXDI_IOC_IDENTIFY,
|
|
DBGENG_EXDI_IOC_READ_MSR,
|
|
DBGENG_EXDI_IOC_WRITE_MSR,
|
|
DBGENG_EXDI_IOC_IDENTIFY_PROCESSORS,
|
|
DBGENG_EXDI_IOC_GET_CURRENT_PROCESSOR,
|
|
DBGENG_EXDI_IOC_SET_CURRENT_PROCESSOR,
|
|
DBGENG_EXDI_IOC_GET_BREAKPOINT_HIT,
|
|
|
|
// Marker for the end of the enum.
|
|
DBGENG_EXDI_IOC_AFTER_LAST
|
|
} DBGENG_EXDI_IOCTL_CODE;
|
|
|
|
//
|
|
// Basic Ioctl containing only a code for the Ioctl input.
|
|
//
|
|
|
|
typedef struct _DBGENG_EXDI_IOCTL_BASE_IN
|
|
{
|
|
DBGENG_EXDI_IOCTL_CODE Code;
|
|
} DBGENG_EXDI_IOCTL_BASE_IN;
|
|
|
|
//
|
|
// IDENTIFY - Verify and describe Ioctl support.
|
|
//
|
|
|
|
#define DBGENG_EXDI_IOCTL_IDENTIFY_SIGNATURE '468E'
|
|
|
|
typedef struct _DBGENG_EXDI_IOCTL_IDENTIFY_OUT
|
|
{
|
|
ULONG Signature;
|
|
DBGENG_EXDI_IOCTL_CODE BeforeFirst;
|
|
DBGENG_EXDI_IOCTL_CODE AfterLast;
|
|
} DBGENG_EXDI_IOCTL_IDENTIFY_OUT;
|
|
|
|
//
|
|
// {READ|WRITE}_MSR - Access processor MSRs.
|
|
//
|
|
|
|
// Input structure is used for both read and write.
|
|
typedef struct _DBGENG_EXDI_IOCTL_MSR_IN
|
|
{
|
|
DBGENG_EXDI_IOCTL_CODE Code;
|
|
ULONG Index;
|
|
// Value is only used for write.
|
|
ULONG64 Value;
|
|
} DBGENG_EXDI_IOCTL_MSR_IN;
|
|
|
|
typedef struct _DBGENG_EXDI_IOCTL_READ_MSR_OUT
|
|
{
|
|
ULONG64 Value;
|
|
} DBGENG_EXDI_IOCTL_READ_MSR_OUT;
|
|
|
|
//
|
|
// Multiprocessor support. Basic EXDI doesn't support
|
|
// multiprocessor machines so add Ioctls to query and
|
|
// control a "current" processor that the EXDI methods
|
|
// apply to.
|
|
//
|
|
|
|
//
|
|
// IDENTIFY_PROCESSORS - Used to query the processor configuration.
|
|
// Currently only the count is used. Other fields are zeroed.
|
|
//
|
|
|
|
typedef struct _DBGENG_EXDI_IOCTL_IDENTIFY_PROCESSORS_OUT
|
|
{
|
|
ULONG Flags;
|
|
ULONG NumberProcessors;
|
|
ULONG64 Reserved[7];
|
|
} DBGENG_EXDI_IOCTL_IDENTIFY_PROCESSORS_OUT;
|
|
|
|
//
|
|
// {GET|SET}_CURRENT_PROCESSOR - Current processor control.
|
|
//
|
|
|
|
typedef struct _DBGENG_EXDI_IOCTL_GET_CURRENT_PROCESSOR_OUT
|
|
{
|
|
ULONG Processor;
|
|
} DBGENG_EXDI_IOCTL_GET_CURRENT_PROCESSOR_OUT;
|
|
|
|
typedef struct _DBGENG_EXDI_IOCTL_SET_CURRENT_PROCESSOR_IN
|
|
{
|
|
DBGENG_EXDI_IOCTL_CODE Code;
|
|
ULONG Processor;
|
|
} DBGENG_EXDI_IOCTL_SET_CURRENT_PROCESSOR_IN;
|
|
|
|
//
|
|
// GET_BREAKPOINT_HIT - Determine which breakpoint was hit
|
|
// after a breakpoint halt reason.
|
|
//
|
|
|
|
#define DBGENG_EXDI_IOCTL_BREAKPOINT_NONE 0
|
|
#define DBGENG_EXDI_IOCTL_BREAKPOINT_CODE 1
|
|
#define DBGENG_EXDI_IOCTL_BREAKPOINT_DATA 2
|
|
|
|
typedef struct _DBGENG_EXDI_IOCTL_GET_BREAKPOINT_HIT_OUT
|
|
{
|
|
ADDRESS_TYPE Address;
|
|
ULONG AccessWidth;
|
|
DATA_ACCESS_TYPE AccessType;
|
|
ULONG Type;
|
|
} DBGENG_EXDI_IOCTL_GET_BREAKPOINT_HIT_OUT, *PDBGENG_EXDI_IOCTL_GET_BREAKPOINT_HIT_OUT;
|
|
|
|
#endif // #ifndef __DBGENG_EXDI_IO_H__
|