mirror of
https://github.com/reactos/reactos.git
synced 2024-11-26 21:13:30 +08:00
709 lines
17 KiB
C
709 lines
17 KiB
C
/*
|
|
* PROJECT: ReactOS Kernel
|
|
* LICENSE: GPL - See COPYING in the top level directory
|
|
* FILE: ntoskrnl/kd64/kddata.c
|
|
* PURPOSE: Contains all global variables and settings for KD64
|
|
* PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
|
|
*/
|
|
|
|
/* INCLUDES ******************************************************************/
|
|
|
|
#include <ntoskrnl.h>
|
|
#define NDEBUG
|
|
#include <debug.h>
|
|
#include <mm/ARM3/miarm.h>
|
|
#undef MmSystemRangeStart
|
|
|
|
VOID NTAPI RtlpBreakWithStatusInstruction(VOID);
|
|
|
|
//
|
|
// Apply the KIPCR WDK workaround for x86 and AMD64
|
|
//
|
|
#if defined(_M_IX86) || defined(_M_AMD64)
|
|
#define KPCR KIPCR
|
|
#endif
|
|
|
|
#if defined(_M_IX86)
|
|
|
|
#define KPCR_SELF_PCR_OFFSET FIELD_OFFSET(KPCR, SelfPcr)
|
|
#define KPCR_CURRENT_PRCB_OFFSET FIELD_OFFSET(KPCR, Prcb)
|
|
#define KPCR_CONTAINED_PRCB_OFFSET FIELD_OFFSET(KPCR, PrcbData)
|
|
#define KPCR_INITIAL_STACK_OFFSET 0
|
|
#define KPCR_STACK_LIMIT_OFFSET 0
|
|
#define KPRCB_PCR_PAGE_OFFSET 0
|
|
#define CBSTACK_FRAME_POINTER Ebp
|
|
|
|
#elif defined(_M_AMD64)
|
|
|
|
#define KPCR_SELF_PCR_OFFSET FIELD_OFFSET(KPCR, Self)
|
|
#define KPCR_CURRENT_PRCB_OFFSET FIELD_OFFSET(KPCR, CurrentPrcb)
|
|
#define KPCR_CONTAINED_PRCB_OFFSET FIELD_OFFSET(KPCR, Prcb)
|
|
#define KPCR_INITIAL_STACK_OFFSET 0
|
|
#define KPCR_STACK_LIMIT_OFFSET 0
|
|
#define KPRCB_PCR_PAGE_OFFSET 0
|
|
#define CBSTACK_FRAME_POINTER Rbp
|
|
|
|
#elif defined(_M_ARM)
|
|
|
|
#define KPCR_SELF_PCR_OFFSET 0
|
|
#define KPCR_CURRENT_PRCB_OFFSET FIELD_OFFSET(KIPCR, Prcb)
|
|
#define KPCR_CONTAINED_PRCB_OFFSET 0
|
|
#define KPCR_INITIAL_STACK_OFFSET FIELD_OFFSET(KPCR, InitialStack)
|
|
#define KPCR_STACK_LIMIT_OFFSET FIELD_OFFSET(KPCR, StackLimit)
|
|
#define KPRCB_PCR_PAGE_OFFSET FIELD_OFFSET(KPRCB, PcrPage)
|
|
#define CBSTACK_FRAME_POINTER DummyFramePointer
|
|
|
|
#else
|
|
#error Unsupported Architecture
|
|
#endif
|
|
|
|
/* GLOBALS *******************************************************************/
|
|
|
|
//
|
|
// Debugger State
|
|
//
|
|
KD_CONTEXT KdpContext;
|
|
BOOLEAN KdpPortLocked;
|
|
KSPIN_LOCK KdpDebuggerLock;
|
|
BOOLEAN KdpControlCPressed;
|
|
BOOLEAN KdpContextSent;
|
|
|
|
//
|
|
// Debug Trap Handlers
|
|
//
|
|
PKDEBUG_ROUTINE KiDebugRoutine = KdpStub;
|
|
|
|
//
|
|
// Debugger Configuration Settings
|
|
//
|
|
BOOLEAN KdBreakAfterSymbolLoad;
|
|
BOOLEAN KdPitchDebugger;
|
|
BOOLEAN KdDebuggerNotPresent;
|
|
BOOLEAN KdDebuggerEnabled;
|
|
BOOLEAN KdAutoEnableOnEvent;
|
|
BOOLEAN KdBlockEnable;
|
|
BOOLEAN KdIgnoreUmExceptions;
|
|
BOOLEAN KdPreviouslyEnabled;
|
|
BOOLEAN KdpDebuggerStructuresInitialized;
|
|
BOOLEAN KdEnteredDebugger;
|
|
ULONG KdDisableCount;
|
|
LARGE_INTEGER KdPerformanceCounterRate;
|
|
|
|
//
|
|
// Breakpoint Data
|
|
//
|
|
BREAKPOINT_ENTRY KdpBreakpointTable[KD_BREAKPOINT_MAX];
|
|
KD_BREAKPOINT_TYPE KdpBreakpointInstruction = KD_BREAKPOINT_VALUE;
|
|
BOOLEAN KdpOweBreakpoint;
|
|
BOOLEAN BreakpointsSuspended;
|
|
ULONG KdpNumInternalBreakpoints;
|
|
|
|
//
|
|
// Symbol Data
|
|
//
|
|
ULONG_PTR KdpCurrentSymbolStart, KdpCurrentSymbolEnd;
|
|
|
|
//
|
|
// Tracepoint Data
|
|
//
|
|
ULONG TraceDataBuffer[40];
|
|
ULONG TraceDataBufferPosition = 1;
|
|
|
|
//
|
|
// Time Slip Support
|
|
//
|
|
KDPC KdpTimeSlipDpc;
|
|
KTIMER KdpTimeSlipTimer;
|
|
WORK_QUEUE_ITEM KdpTimeSlipWorkItem;
|
|
LONG KdpTimeSlipPending = 1;
|
|
PKEVENT KdpTimeSlipEvent;
|
|
KSPIN_LOCK KdpTimeSlipEventLock;
|
|
LARGE_INTEGER KdTimerStop, KdTimerStart, KdTimerDifference;
|
|
|
|
//
|
|
// Buffers
|
|
//
|
|
CHAR KdpMessageBuffer[KDP_MSG_BUFFER_SIZE];
|
|
CHAR KdpPathBuffer[KDP_MSG_BUFFER_SIZE];
|
|
|
|
//
|
|
// KdPrint Buffers
|
|
//
|
|
CHAR KdPrintDefaultCircularBuffer[KD_DEFAULT_LOG_BUFFER_SIZE];
|
|
PCHAR KdPrintWritePointer = KdPrintDefaultCircularBuffer;
|
|
ULONG KdPrintRolloverCount;
|
|
PCHAR KdPrintCircularBuffer = KdPrintDefaultCircularBuffer;
|
|
ULONG KdPrintBufferSize = sizeof(KdPrintDefaultCircularBuffer);
|
|
ULONG KdPrintBufferChanges = 0;
|
|
KSPIN_LOCK KdpPrintSpinLock;
|
|
|
|
//
|
|
// Debug Filter Masks
|
|
//
|
|
ULONG Kd_WIN2000_Mask = 1;
|
|
ULONG Kd_SYSTEM_Mask;
|
|
ULONG Kd_SMSS_Mask;
|
|
ULONG Kd_SETUP_Mask;
|
|
ULONG Kd_NTFS_Mask;
|
|
ULONG Kd_FSTUB_Mask;
|
|
ULONG Kd_CRASHDUMP_Mask;
|
|
ULONG Kd_CDAUDIO_Mask;
|
|
ULONG Kd_CDROM_Mask;
|
|
ULONG Kd_CLASSPNP_Mask;
|
|
ULONG Kd_DISK_Mask;
|
|
ULONG Kd_REDBOOK_Mask;
|
|
ULONG Kd_STORPROP_Mask;
|
|
ULONG Kd_SCSIPORT_Mask;
|
|
ULONG Kd_SCSIMINIPORT_Mask;
|
|
ULONG Kd_CONFIG_Mask;
|
|
ULONG Kd_I8042PRT_Mask;
|
|
ULONG Kd_SERMOUSE_Mask;
|
|
ULONG Kd_LSERMOUS_Mask;
|
|
ULONG Kd_KBDHID_Mask;
|
|
ULONG Kd_MOUHID_Mask;
|
|
ULONG Kd_KBDCLASS_Mask;
|
|
ULONG Kd_MOUCLASS_Mask;
|
|
ULONG Kd_TWOTRACK_Mask;
|
|
ULONG Kd_WMILIB_Mask;
|
|
ULONG Kd_ACPI_Mask;
|
|
ULONG Kd_AMLI_Mask;
|
|
ULONG Kd_HALIA64_Mask;
|
|
ULONG Kd_VIDEO_Mask;
|
|
ULONG Kd_SVCHOST_Mask;
|
|
ULONG Kd_VIDEOPRT_Mask;
|
|
ULONG Kd_TCPIP_Mask;
|
|
ULONG Kd_DMSYNTH_Mask;
|
|
ULONG Kd_NTOSPNP_Mask;
|
|
ULONG Kd_FASTFAT_Mask;
|
|
ULONG Kd_SAMSS_Mask;
|
|
ULONG Kd_PNPMGR_Mask;
|
|
ULONG Kd_NETAPI_Mask;
|
|
ULONG Kd_SCSERVER_Mask;
|
|
ULONG Kd_SCCLIENT_Mask;
|
|
ULONG Kd_SERIAL_Mask;
|
|
ULONG Kd_SERENUM_Mask;
|
|
ULONG Kd_UHCD_Mask;
|
|
ULONG Kd_RPCPROXY_Mask;
|
|
ULONG Kd_AUTOCHK_Mask;
|
|
ULONG Kd_DCOMSS_Mask;
|
|
ULONG Kd_UNIMODEM_Mask;
|
|
ULONG Kd_SIS_Mask;
|
|
ULONG Kd_FLTMGR_Mask;
|
|
ULONG Kd_WMICORE_Mask;
|
|
ULONG Kd_BURNENG_Mask;
|
|
ULONG Kd_IMAPI_Mask;
|
|
ULONG Kd_SXS_Mask;
|
|
ULONG Kd_FUSION_Mask;
|
|
ULONG Kd_IDLETASK_Mask;
|
|
ULONG Kd_SOFTPCI_Mask;
|
|
ULONG Kd_TAPE_Mask;
|
|
ULONG Kd_MCHGR_Mask;
|
|
ULONG Kd_IDEP_Mask;
|
|
ULONG Kd_PCIIDE_Mask;
|
|
ULONG Kd_FLOPPY_Mask;
|
|
ULONG Kd_FDC_Mask;
|
|
ULONG Kd_TERMSRV_Mask;
|
|
ULONG Kd_W32TIME_Mask;
|
|
ULONG Kd_PREFETCHER_Mask;
|
|
ULONG Kd_RSFILTER_Mask;
|
|
ULONG Kd_FCPORT_Mask;
|
|
ULONG Kd_PCI_Mask;
|
|
ULONG Kd_DMIO_Mask;
|
|
ULONG Kd_DMCONFIG_Mask;
|
|
ULONG Kd_DMADMIN_Mask;
|
|
ULONG Kd_WSOCKTRANSPORT_Mask;
|
|
ULONG Kd_VSS_Mask;
|
|
ULONG Kd_PNPMEM_Mask;
|
|
ULONG Kd_PROCESSOR_Mask;
|
|
ULONG Kd_DMSERVER_Mask;
|
|
ULONG Kd_SR_Mask;
|
|
ULONG Kd_INFINIBAND_Mask;
|
|
ULONG Kd_IHVDRIVER_Mask;
|
|
ULONG Kd_IHVVIDEO_Mask;
|
|
ULONG Kd_IHVAUDIO_Mask;
|
|
ULONG Kd_IHVNETWORK_Mask;
|
|
ULONG Kd_IHVSTREAMING_Mask;
|
|
ULONG Kd_IHVBUS_Mask;
|
|
ULONG Kd_HPS_Mask;
|
|
ULONG Kd_RTLTHREADPOOL_Mask;
|
|
ULONG Kd_LDR_Mask;
|
|
ULONG Kd_TCPIP6_Mask;
|
|
ULONG Kd_ISAPNP_Mask;
|
|
ULONG Kd_SHPC_Mask;
|
|
ULONG Kd_STORPORT_Mask;
|
|
ULONG Kd_STORMINIPORT_Mask;
|
|
ULONG Kd_PRINTSPOOLER_Mask;
|
|
ULONG Kd_VSSDYNDISK_Mask;
|
|
ULONG Kd_VERIFIER_Mask;
|
|
ULONG Kd_VDS_Mask;
|
|
ULONG Kd_VDSBAS_Mask;
|
|
ULONG Kd_VDSDYN_Mask; // Specified in Vista+
|
|
ULONG Kd_VDSDYNDR_Mask;
|
|
ULONG Kd_VDSLDR_Mask; // Specified in Vista+
|
|
ULONG Kd_VDSUTIL_Mask;
|
|
ULONG Kd_DFRGIFC_Mask;
|
|
ULONG Kd_DEFAULT_Mask;
|
|
ULONG Kd_MM_Mask;
|
|
ULONG Kd_DFSC_Mask;
|
|
ULONG Kd_WOW64_Mask;
|
|
//
|
|
// Components specified in Vista+, some of which we also use in ReactOS
|
|
//
|
|
ULONG Kd_ALPC_Mask;
|
|
ULONG Kd_WDI_Mask;
|
|
ULONG Kd_PERFLIB_Mask;
|
|
ULONG Kd_KTM_Mask;
|
|
ULONG Kd_IOSTRESS_Mask;
|
|
ULONG Kd_HEAP_Mask;
|
|
ULONG Kd_WHEA_Mask;
|
|
ULONG Kd_USERGDI_Mask;
|
|
ULONG Kd_MMCSS_Mask;
|
|
ULONG Kd_TPM_Mask;
|
|
ULONG Kd_THREADORDER_Mask;
|
|
ULONG Kd_ENVIRON_Mask;
|
|
ULONG Kd_EMS_Mask;
|
|
ULONG Kd_WDT_Mask;
|
|
ULONG Kd_FVEVOL_Mask;
|
|
ULONG Kd_NDIS_Mask;
|
|
ULONG Kd_NVCTRACE_Mask;
|
|
ULONG Kd_LUAFV_Mask;
|
|
ULONG Kd_APPCOMPAT_Mask;
|
|
ULONG Kd_USBSTOR_Mask;
|
|
ULONG Kd_SBP2PORT_Mask;
|
|
ULONG Kd_COVERAGE_Mask;
|
|
ULONG Kd_CACHEMGR_Mask;
|
|
ULONG Kd_MOUNTMGR_Mask;
|
|
ULONG Kd_CFR_Mask;
|
|
ULONG Kd_TXF_Mask;
|
|
ULONG Kd_KSECDD_Mask;
|
|
ULONG Kd_FLTREGRESS_Mask;
|
|
ULONG Kd_MPIO_Mask;
|
|
ULONG Kd_MSDSM_Mask;
|
|
ULONG Kd_UDFS_Mask;
|
|
ULONG Kd_PSHED_Mask;
|
|
ULONG Kd_STORVSP_Mask;
|
|
ULONG Kd_LSASS_Mask;
|
|
ULONG Kd_SSPICLI_Mask;
|
|
ULONG Kd_CNG_Mask;
|
|
ULONG Kd_EXFAT_Mask;
|
|
ULONG Kd_FILETRACE_Mask;
|
|
ULONG Kd_XSAVE_Mask;
|
|
ULONG Kd_SE_Mask;
|
|
ULONG Kd_DRIVEEXTENDER_Mask;
|
|
//
|
|
// Components specified in Windows 8
|
|
//
|
|
ULONG Kd_POWER_Mask;
|
|
ULONG Kd_CRASHDUMPXHCI_Mask;
|
|
ULONG Kd_GPIO_Mask;
|
|
ULONG Kd_REFS_Mask;
|
|
ULONG Kd_WER_Mask;
|
|
//
|
|
// Components specified in Windows 10
|
|
//
|
|
ULONG Kd_CAPIMG_Mask;
|
|
ULONG Kd_VPCI_Mask;
|
|
ULONG Kd_STORAGECLASSMEMORY_Mask;
|
|
ULONG Kd_FSLIB_Mask;
|
|
// End Mask
|
|
ULONG Kd_ENDOFTABLE_Mask;
|
|
|
|
//
|
|
// Debug Filter Component Table
|
|
//
|
|
PULONG KdComponentTable[MAX_KD_COMPONENT_TABLE_ENTRIES] =
|
|
{
|
|
&Kd_SYSTEM_Mask,
|
|
&Kd_SMSS_Mask,
|
|
&Kd_SETUP_Mask,
|
|
&Kd_NTFS_Mask,
|
|
&Kd_FSTUB_Mask,
|
|
&Kd_CRASHDUMP_Mask,
|
|
&Kd_CDAUDIO_Mask,
|
|
&Kd_CDROM_Mask,
|
|
&Kd_CLASSPNP_Mask,
|
|
&Kd_DISK_Mask,
|
|
&Kd_REDBOOK_Mask,
|
|
&Kd_STORPROP_Mask,
|
|
&Kd_SCSIPORT_Mask,
|
|
&Kd_SCSIMINIPORT_Mask,
|
|
&Kd_CONFIG_Mask,
|
|
&Kd_I8042PRT_Mask,
|
|
&Kd_SERMOUSE_Mask,
|
|
&Kd_LSERMOUS_Mask,
|
|
&Kd_KBDHID_Mask,
|
|
&Kd_MOUHID_Mask,
|
|
&Kd_KBDCLASS_Mask,
|
|
&Kd_MOUCLASS_Mask,
|
|
&Kd_TWOTRACK_Mask,
|
|
&Kd_WMILIB_Mask,
|
|
&Kd_ACPI_Mask,
|
|
&Kd_AMLI_Mask,
|
|
&Kd_HALIA64_Mask,
|
|
&Kd_VIDEO_Mask,
|
|
&Kd_SVCHOST_Mask,
|
|
&Kd_VIDEOPRT_Mask,
|
|
&Kd_TCPIP_Mask,
|
|
&Kd_DMSYNTH_Mask,
|
|
&Kd_NTOSPNP_Mask,
|
|
&Kd_FASTFAT_Mask,
|
|
&Kd_SAMSS_Mask,
|
|
&Kd_PNPMGR_Mask,
|
|
&Kd_NETAPI_Mask,
|
|
&Kd_SCSERVER_Mask,
|
|
&Kd_SCCLIENT_Mask,
|
|
&Kd_SERIAL_Mask,
|
|
&Kd_SERENUM_Mask,
|
|
&Kd_UHCD_Mask,
|
|
&Kd_RPCPROXY_Mask,
|
|
&Kd_AUTOCHK_Mask,
|
|
&Kd_DCOMSS_Mask,
|
|
&Kd_UNIMODEM_Mask,
|
|
&Kd_SIS_Mask,
|
|
&Kd_FLTMGR_Mask,
|
|
&Kd_WMICORE_Mask,
|
|
&Kd_BURNENG_Mask,
|
|
&Kd_IMAPI_Mask,
|
|
&Kd_SXS_Mask,
|
|
&Kd_FUSION_Mask,
|
|
&Kd_IDLETASK_Mask,
|
|
&Kd_SOFTPCI_Mask,
|
|
&Kd_TAPE_Mask,
|
|
&Kd_MCHGR_Mask,
|
|
&Kd_IDEP_Mask,
|
|
&Kd_PCIIDE_Mask,
|
|
&Kd_FLOPPY_Mask,
|
|
&Kd_FDC_Mask,
|
|
&Kd_TERMSRV_Mask,
|
|
&Kd_W32TIME_Mask,
|
|
&Kd_PREFETCHER_Mask,
|
|
&Kd_RSFILTER_Mask,
|
|
&Kd_FCPORT_Mask,
|
|
&Kd_PCI_Mask,
|
|
&Kd_DMIO_Mask,
|
|
&Kd_DMCONFIG_Mask,
|
|
&Kd_DMADMIN_Mask,
|
|
&Kd_WSOCKTRANSPORT_Mask,
|
|
&Kd_VSS_Mask,
|
|
&Kd_PNPMEM_Mask,
|
|
&Kd_PROCESSOR_Mask,
|
|
&Kd_DMSERVER_Mask,
|
|
&Kd_SR_Mask,
|
|
&Kd_INFINIBAND_Mask,
|
|
&Kd_IHVDRIVER_Mask,
|
|
&Kd_IHVVIDEO_Mask,
|
|
&Kd_IHVAUDIO_Mask,
|
|
&Kd_IHVNETWORK_Mask,
|
|
&Kd_IHVSTREAMING_Mask,
|
|
&Kd_IHVBUS_Mask,
|
|
&Kd_HPS_Mask,
|
|
&Kd_RTLTHREADPOOL_Mask,
|
|
&Kd_LDR_Mask,
|
|
&Kd_TCPIP6_Mask,
|
|
&Kd_ISAPNP_Mask,
|
|
&Kd_SHPC_Mask,
|
|
&Kd_STORPORT_Mask,
|
|
&Kd_STORMINIPORT_Mask,
|
|
&Kd_PRINTSPOOLER_Mask,
|
|
&Kd_VSSDYNDISK_Mask,
|
|
&Kd_VERIFIER_Mask,
|
|
&Kd_VDS_Mask,
|
|
&Kd_VDSBAS_Mask,
|
|
&Kd_VDSDYN_Mask, // Specified in Vista+
|
|
&Kd_VDSDYNDR_Mask,
|
|
&Kd_VDSLDR_Mask, // Specified in Vista+
|
|
&Kd_VDSUTIL_Mask,
|
|
&Kd_DFRGIFC_Mask,
|
|
&Kd_DEFAULT_Mask,
|
|
&Kd_MM_Mask,
|
|
&Kd_DFSC_Mask,
|
|
&Kd_WOW64_Mask,
|
|
//
|
|
// Components specified in Vista+, some of which we also use in ReactOS
|
|
//
|
|
&Kd_ALPC_Mask,
|
|
&Kd_WDI_Mask,
|
|
&Kd_PERFLIB_Mask,
|
|
&Kd_KTM_Mask,
|
|
&Kd_IOSTRESS_Mask,
|
|
&Kd_HEAP_Mask,
|
|
&Kd_WHEA_Mask,
|
|
&Kd_USERGDI_Mask,
|
|
&Kd_MMCSS_Mask,
|
|
&Kd_TPM_Mask,
|
|
&Kd_THREADORDER_Mask,
|
|
&Kd_ENVIRON_Mask,
|
|
&Kd_EMS_Mask,
|
|
&Kd_WDT_Mask,
|
|
&Kd_FVEVOL_Mask,
|
|
&Kd_NDIS_Mask,
|
|
&Kd_NVCTRACE_Mask,
|
|
&Kd_LUAFV_Mask,
|
|
&Kd_APPCOMPAT_Mask,
|
|
&Kd_USBSTOR_Mask,
|
|
&Kd_SBP2PORT_Mask,
|
|
&Kd_COVERAGE_Mask,
|
|
&Kd_CACHEMGR_Mask,
|
|
&Kd_MOUNTMGR_Mask,
|
|
&Kd_CFR_Mask,
|
|
&Kd_TXF_Mask,
|
|
&Kd_KSECDD_Mask,
|
|
&Kd_FLTREGRESS_Mask,
|
|
&Kd_MPIO_Mask,
|
|
&Kd_MSDSM_Mask,
|
|
&Kd_UDFS_Mask,
|
|
&Kd_PSHED_Mask,
|
|
&Kd_STORVSP_Mask,
|
|
&Kd_LSASS_Mask,
|
|
&Kd_SSPICLI_Mask,
|
|
&Kd_CNG_Mask,
|
|
&Kd_EXFAT_Mask,
|
|
&Kd_FILETRACE_Mask,
|
|
&Kd_XSAVE_Mask,
|
|
&Kd_SE_Mask,
|
|
&Kd_DRIVEEXTENDER_Mask,
|
|
//
|
|
// Components specified in Windows 8
|
|
//
|
|
&Kd_POWER_Mask,
|
|
&Kd_CRASHDUMPXHCI_Mask,
|
|
&Kd_GPIO_Mask,
|
|
&Kd_REFS_Mask,
|
|
&Kd_WER_Mask,
|
|
//
|
|
// Components specified in Windows 10
|
|
//
|
|
&Kd_CAPIMG_Mask,
|
|
&Kd_VPCI_Mask,
|
|
&Kd_STORAGECLASSMEMORY_Mask,
|
|
&Kd_FSLIB_Mask,
|
|
// End Mask
|
|
&Kd_ENDOFTABLE_Mask,
|
|
};
|
|
|
|
ULONG KdComponentTableSize = RTL_NUMBER_OF(KdComponentTable);
|
|
|
|
//
|
|
// Debugger Data
|
|
//
|
|
LIST_ENTRY KdpDebuggerDataListHead;
|
|
KSPIN_LOCK KdpDataSpinLock;
|
|
|
|
//
|
|
// Debugger Version and Data Block
|
|
//
|
|
DBGKD_GET_VERSION64 KdVersionBlock =
|
|
{
|
|
0,
|
|
0,
|
|
DBGKD_64BIT_PROTOCOL_VERSION2,
|
|
CURRENT_KD_SECONDARY_VERSION,
|
|
#if defined(_M_AMD64) || defined(_M_ARM64)
|
|
DBGKD_VERS_FLAG_DATA | DBGKD_VERS_FLAG_PTR64,
|
|
#else
|
|
DBGKD_VERS_FLAG_DATA,
|
|
#endif
|
|
IMAGE_FILE_MACHINE_NATIVE,
|
|
PACKET_TYPE_MAX,
|
|
0,
|
|
0,
|
|
DBGKD_SIMULATION_NONE,
|
|
{0},
|
|
0,
|
|
0,
|
|
0
|
|
};
|
|
|
|
#if (NTDDI_VERSION >= NTDDI_WS03)
|
|
C_ASSERT(sizeof(KDDEBUGGER_DATA64) >= 0x318);
|
|
#endif
|
|
|
|
#if !defined(_WIN64) && (defined(__GNUC__) || defined(__clang__))
|
|
/* Minimal hackery for GCC/Clang, see commit b9cd3f2d9 (r25845) and de81021ba */
|
|
#define PtrToUL64(x) ((ULPTR64)(ULONG_PTR)(x))
|
|
#else
|
|
#define PtrToUL64(x) ((ULPTR64)(x))
|
|
#endif
|
|
KDDEBUGGER_DATA64 KdDebuggerDataBlock =
|
|
{
|
|
{{0}},
|
|
0,
|
|
PtrToUL64(RtlpBreakWithStatusInstruction),
|
|
0,
|
|
FIELD_OFFSET(KTHREAD, CallbackStack),
|
|
#if defined(_M_ARM) || defined(_M_AMD64)
|
|
0,
|
|
0,
|
|
#else
|
|
FIELD_OFFSET(KCALLOUT_FRAME, CallbackStack),
|
|
FIELD_OFFSET(KCALLOUT_FRAME, CBSTACK_FRAME_POINTER),
|
|
#endif
|
|
FALSE,
|
|
PtrToUL64(KiCallUserMode),
|
|
0,
|
|
PtrToUL64(&PsLoadedModuleList),
|
|
PtrToUL64(&PsActiveProcessHead),
|
|
PtrToUL64(&PspCidTable),
|
|
PtrToUL64(&ExpSystemResourcesList),
|
|
PtrToUL64(ExpPagedPoolDescriptor),
|
|
PtrToUL64(&ExpNumberOfPagedPools),
|
|
PtrToUL64(&KeTimeIncrement),
|
|
PtrToUL64(&KeBugcheckCallbackListHead),
|
|
PtrToUL64(KiBugCheckData),
|
|
PtrToUL64(&IopErrorLogListHead),
|
|
PtrToUL64(&ObpRootDirectoryObject),
|
|
PtrToUL64(&ObpTypeObjectType),
|
|
PtrToUL64(&MmSystemCacheStart),
|
|
PtrToUL64(&MmSystemCacheEnd),
|
|
PtrToUL64(&MmSystemCacheWs),
|
|
PtrToUL64(&MmPfnDatabase),
|
|
PtrToUL64(MmSystemPtesStart),
|
|
PtrToUL64(MmSystemPtesEnd),
|
|
PtrToUL64(&MmSubsectionBase),
|
|
PtrToUL64(&MmNumberOfPagingFiles),
|
|
PtrToUL64(&MmLowestPhysicalPage),
|
|
PtrToUL64(&MmHighestPhysicalPage),
|
|
PtrToUL64(&MmNumberOfPhysicalPages),
|
|
PtrToUL64(&MmMaximumNonPagedPoolInBytes),
|
|
PtrToUL64(&MmNonPagedSystemStart),
|
|
PtrToUL64(&MmNonPagedPoolStart),
|
|
PtrToUL64(&MmNonPagedPoolEnd),
|
|
PtrToUL64(&MmPagedPoolStart),
|
|
PtrToUL64(&MmPagedPoolEnd),
|
|
PtrToUL64(&MmPagedPoolInfo),
|
|
PAGE_SIZE,
|
|
PtrToUL64(&MmSizeOfPagedPoolInBytes),
|
|
PtrToUL64(&MmTotalCommitLimit),
|
|
PtrToUL64(&MmTotalCommittedPages),
|
|
PtrToUL64(&MmSharedCommit),
|
|
PtrToUL64(&MmDriverCommit),
|
|
PtrToUL64(&MmProcessCommit),
|
|
PtrToUL64(&MmPagedPoolCommit),
|
|
PtrToUL64(0),
|
|
PtrToUL64(&MmZeroedPageListHead),
|
|
PtrToUL64(&MmFreePageListHead),
|
|
PtrToUL64(&MmStandbyPageListHead),
|
|
PtrToUL64(&MmModifiedPageListHead),
|
|
PtrToUL64(&MmModifiedNoWritePageListHead),
|
|
PtrToUL64(&MmAvailablePages),
|
|
PtrToUL64(&MmResidentAvailablePages),
|
|
PtrToUL64(&PoolTrackTable),
|
|
PtrToUL64(&NonPagedPoolDescriptor),
|
|
PtrToUL64(&MmHighestUserAddress),
|
|
PtrToUL64(&MmSystemRangeStart),
|
|
PtrToUL64(&MmUserProbeAddress),
|
|
PtrToUL64(KdPrintDefaultCircularBuffer),
|
|
PtrToUL64(KdPrintDefaultCircularBuffer + sizeof(KdPrintDefaultCircularBuffer)),
|
|
PtrToUL64(&KdPrintWritePointer),
|
|
PtrToUL64(&KdPrintRolloverCount),
|
|
PtrToUL64(&MmLoadedUserImageList),
|
|
PtrToUL64(&NtBuildLab),
|
|
PtrToUL64(0),
|
|
PtrToUL64(KiProcessorBlock),
|
|
PtrToUL64(&MmUnloadedDrivers),
|
|
PtrToUL64(&MmLastUnloadedDrivers),
|
|
PtrToUL64(&MmTriageActionTaken),
|
|
PtrToUL64(&MmSpecialPoolTag),
|
|
PtrToUL64(&KernelVerifier),
|
|
PtrToUL64(&MmVerifierData),
|
|
PtrToUL64(&MmAllocatedNonPagedPool),
|
|
PtrToUL64(&MmPeakCommitment),
|
|
PtrToUL64(&MmtotalCommitLimitMaximum),
|
|
PtrToUL64(&CmNtCSDVersion),
|
|
PtrToUL64(&MmPhysicalMemoryBlock),
|
|
PtrToUL64(&MmSessionBase),
|
|
PtrToUL64(&MmSessionSize),
|
|
PtrToUL64(0),
|
|
PtrToUL64(0),
|
|
FIELD_OFFSET(KTHREAD, NextProcessor),
|
|
FIELD_OFFSET(KTHREAD, Teb),
|
|
FIELD_OFFSET(KTHREAD, KernelStack),
|
|
FIELD_OFFSET(KTHREAD, InitialStack),
|
|
FIELD_OFFSET(KTHREAD, ApcState.Process),
|
|
FIELD_OFFSET(KTHREAD, State),
|
|
0,
|
|
0,
|
|
sizeof(EPROCESS),
|
|
FIELD_OFFSET(EPROCESS, Peb),
|
|
FIELD_OFFSET(EPROCESS, InheritedFromUniqueProcessId),
|
|
FIELD_OFFSET(EPROCESS, Pcb.DirectoryTableBase),
|
|
sizeof(KPRCB),
|
|
FIELD_OFFSET(KPRCB, DpcRoutineActive),
|
|
FIELD_OFFSET(KPRCB, CurrentThread),
|
|
FIELD_OFFSET(KPRCB, MHz),
|
|
FIELD_OFFSET(KPRCB, CpuType),
|
|
FIELD_OFFSET(KPRCB, VendorString),
|
|
FIELD_OFFSET(KPRCB, ProcessorState.ContextFrame),
|
|
FIELD_OFFSET(KPRCB, Number),
|
|
sizeof(ETHREAD),
|
|
PtrToUL64(&KdPrintCircularBuffer),
|
|
PtrToUL64(&KdPrintBufferSize),
|
|
PtrToUL64(&KeLoaderBlock),
|
|
sizeof(KPCR),
|
|
KPCR_SELF_PCR_OFFSET,
|
|
KPCR_CURRENT_PRCB_OFFSET,
|
|
KPCR_CONTAINED_PRCB_OFFSET,
|
|
0,
|
|
0,
|
|
#if defined(_M_ARM)
|
|
_WARN("KPCR_INITIAL_STACK_OFFSET, KPCR_STACK_LIMIT_OFFSET and KPRCB_PCR_PAGE_OFFSET not properly defined on ARM")
|
|
0,
|
|
0,
|
|
0,
|
|
#else
|
|
KPCR_INITIAL_STACK_OFFSET,
|
|
KPCR_STACK_LIMIT_OFFSET,
|
|
KPRCB_PCR_PAGE_OFFSET,
|
|
#endif
|
|
FIELD_OFFSET(KPRCB, ProcessorState.SpecialRegisters),
|
|
#if defined(_M_IX86)
|
|
//
|
|
// x86 GDT/LDT/TSS constants
|
|
//
|
|
KGDT_R0_CODE,
|
|
KGDT_R0_DATA,
|
|
KGDT_R0_PCR,
|
|
KGDT_R3_CODE,
|
|
KGDT_R3_DATA,
|
|
KGDT_R3_TEB,
|
|
KGDT_LDT,
|
|
KGDT_TSS,
|
|
0,
|
|
0,
|
|
#elif defined(_M_AMD64)
|
|
//
|
|
// AMD64 GDT/LDT/TSS constants
|
|
//
|
|
KGDT64_R0_CODE,
|
|
KGDT64_R3_DATA,
|
|
KGDT64_R3_DATA,
|
|
KGDT64_R3_CODE,
|
|
KGDT64_R3_DATA,
|
|
KGDT64_R3_DATA,
|
|
0,
|
|
KGDT64_SYS_TSS,
|
|
0,
|
|
0,
|
|
#else
|
|
//
|
|
// No GDT/LDT/TSS on other architectures
|
|
//
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
#endif
|
|
PtrToUL64(&IopNumTriageDumpDataBlocks),
|
|
PtrToUL64(IopTriageDumpDataBlocks),
|
|
|
|
#if (NTDDI_VERSION >= NTDDI_LONGHORN)
|
|
#error KdDebuggerDataBlock requires other fields for this NT version!
|
|
#endif
|
|
};
|