mirror of https://github.com/lianthony/NT4.0
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.
427 lines
7.8 KiB
427 lines
7.8 KiB
/*++
|
|
|
|
Copyright (c) 1990 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
dbgnt.h
|
|
|
|
Abstract:
|
|
|
|
This module contains prototypes and data structures that
|
|
are needed by the NT specific portion of DmKd.
|
|
|
|
Author:
|
|
|
|
Wesley Witt (wesw) 2-Aug-1993
|
|
|
|
Environment:
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "crash.h"
|
|
|
|
#ifndef _KDH_
|
|
#define _KDH_
|
|
|
|
#ifndef OPTIONAL
|
|
#define OPTIONAL
|
|
#endif
|
|
|
|
#ifndef ARGUMENT_PRESENT
|
|
#define ARGUMENT_PRESENT(ArgumentPointer) ((CHAR *)(ArgumentPointer) != (CHAR *)(NULL) )
|
|
#endif
|
|
|
|
#ifndef STATUS_SUCCESS
|
|
#define STATUS_SUCCESS ((DWORD)0x00000000L)
|
|
#define STATUS_UNSUCCESSFUL ((DWORD)0xC0000001L)
|
|
#define STATUS_BUFFER_OVERFLOW ((DWORD)0x80000005L)
|
|
#define STATUS_INVALID_PARAMETER ((DWORD)0xC000000DL)
|
|
#define STATUS_WAIT_RETURN ((DWORD)0xF0000001L)
|
|
#endif
|
|
|
|
|
|
extern DBGKD_WAIT_STATE_CHANGE sc;
|
|
|
|
#define KD_PROCESSID 1
|
|
#define KD_THREADID (sc.Processor + 1)
|
|
|
|
|
|
|
|
extern DWORD DmKdState;
|
|
//
|
|
// DmKdState defines
|
|
//
|
|
#define S_UNINITIALIZED 0
|
|
#define S_REBOOTED 1
|
|
#define S_INITIALIZED 2
|
|
#define S_READY 3
|
|
|
|
//---------------------------------------------------------------------------
|
|
// prototypes for: SUPPORT.C
|
|
//---------------------------------------------------------------------------
|
|
|
|
VOID
|
|
ClearBps(
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
DmKdReadPhysicalMemory(
|
|
IN PHYSICAL_ADDRESS TargetBaseAddress,
|
|
OUT PVOID UserInterfaceBuffer,
|
|
IN ULONG TransferCount,
|
|
OUT PULONG ActualBytesRead OPTIONAL
|
|
);
|
|
|
|
DWORD
|
|
DmKdWritePhysicalMemory(
|
|
IN PHYSICAL_ADDRESS TargetBaseAddress,
|
|
OUT PVOID UserInterfaceBuffer,
|
|
IN ULONG TransferCount,
|
|
OUT PULONG ActualBytesWritten OPTIONAL
|
|
);
|
|
|
|
DWORD
|
|
DmKdReboot( VOID );
|
|
|
|
DWORD
|
|
DmKdCrash( DWORD BugCheckCode );
|
|
|
|
DWORD
|
|
DmKdGetContext(
|
|
IN USHORT Processor,
|
|
IN OUT PCONTEXT Context
|
|
);
|
|
|
|
DWORD
|
|
DmKdSetContext(
|
|
IN USHORT Processor,
|
|
IN CONST CONTEXT *Context
|
|
);
|
|
|
|
DWORD
|
|
DmKdWriteBreakPoint(
|
|
IN PVOID BreakPointAddress,
|
|
OUT PULONG BreakPointHandle
|
|
);
|
|
|
|
DWORD
|
|
DmKdRestoreBreakPoint(
|
|
IN ULONG BreakPointHandle
|
|
);
|
|
|
|
DWORD
|
|
DmKdReadIoSpace(
|
|
IN PVOID IoAddress,
|
|
OUT PVOID ReturnedData,
|
|
IN ULONG DataSize
|
|
);
|
|
|
|
DWORD
|
|
DmKdWriteIoSpace(
|
|
IN PVOID IoAddress,
|
|
IN ULONG DataValue,
|
|
IN ULONG DataSize
|
|
);
|
|
|
|
DWORD
|
|
DmKdReadIoSpaceEx(
|
|
IN PVOID IoAddress,
|
|
OUT PVOID ReturnedData,
|
|
IN ULONG DataSize,
|
|
IN ULONG InterfaceType,
|
|
IN ULONG BusNumber,
|
|
IN ULONG AddressSpace
|
|
);
|
|
|
|
DWORD
|
|
DmKdWriteIoSpaceEx(
|
|
IN PVOID IoAddress,
|
|
IN ULONG DataValue,
|
|
IN ULONG DataSize,
|
|
IN ULONG InterfaceType,
|
|
IN ULONG BusNumber,
|
|
IN ULONG AddressSpace
|
|
);
|
|
|
|
DWORD
|
|
DmKdReadVirtualMemory(
|
|
IN PVOID TargetBaseAddress,
|
|
OUT PVOID UserInterfaceBuffer,
|
|
IN ULONG TransferCount,
|
|
OUT PULONG ActualBytesRead OPTIONAL
|
|
);
|
|
|
|
DWORD
|
|
DmKdReadVirtualMemoryNow(
|
|
IN PVOID TargetBaseAddress,
|
|
OUT PVOID UserInterfaceBuffer,
|
|
IN ULONG TransferCount,
|
|
OUT PULONG ActualBytesRead OPTIONAL
|
|
);
|
|
|
|
DWORD
|
|
DmKdWriteVirtualMemory(
|
|
IN PVOID TargetBaseAddress,
|
|
OUT PVOID UserInterfaceBuffer,
|
|
IN ULONG TransferCount,
|
|
OUT PULONG ActualBytesWritten OPTIONAL
|
|
);
|
|
|
|
DWORD
|
|
DmKdReadControlSpace(
|
|
IN USHORT Processor,
|
|
IN PVOID TargetBaseAddress,
|
|
OUT PVOID UserInterfaceBuffer,
|
|
IN ULONG TransferCount,
|
|
OUT PULONG ActualBytesRead OPTIONAL
|
|
);
|
|
|
|
DWORD
|
|
DmKdWriteControlSpace(
|
|
IN USHORT Processor,
|
|
IN PVOID TargetBaseAddress,
|
|
OUT PVOID UserInterfaceBuffer,
|
|
IN ULONG TransferCount,
|
|
OUT PULONG ActualBytesWritten OPTIONAL
|
|
);
|
|
|
|
DWORD
|
|
DmKdContinue (
|
|
IN DWORD ContinueStatus
|
|
);
|
|
|
|
DWORD
|
|
DmKdContinue2 (
|
|
IN DWORD ContinueStatus,
|
|
IN PDBGKD_CONTROL_SET ControlSet
|
|
);
|
|
|
|
DWORD
|
|
DmKdSetSpecialCalls (
|
|
IN ULONG NumSpecialCalls,
|
|
IN PULONG Calls
|
|
);
|
|
|
|
DWORD
|
|
DmKdSetInternalBp (
|
|
ULONG addr,
|
|
ULONG flags
|
|
);
|
|
|
|
DWORD
|
|
DmKdGetInternalBp (
|
|
ULONG addr,
|
|
PULONG flags,
|
|
PULONG calls,
|
|
PULONG minInstr,
|
|
PULONG maxInstr,
|
|
PULONG totInstr,
|
|
PULONG maxCPS
|
|
);
|
|
|
|
DWORD
|
|
DmKdGetVersion (
|
|
PDBGKD_GET_VERSION GetVersion
|
|
);
|
|
|
|
DWORD
|
|
DmKdPageIn(
|
|
ULONG Address
|
|
);
|
|
|
|
DWORD
|
|
DmKdWriteBreakPointEx(
|
|
IN ULONG BreakPointCount,
|
|
IN OUT PDBGKD_WRITE_BREAKPOINT BreakPoints,
|
|
IN DWORD ContinueStatus
|
|
);
|
|
|
|
DWORD
|
|
DmKdRestoreBreakPointEx(
|
|
IN ULONG BreakPointCount,
|
|
IN PDBGKD_RESTORE_BREAKPOINT BreakPointHandles
|
|
);
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// prototypes for: COM.C
|
|
//---------------------------------------------------------------------------
|
|
|
|
BOOLEAN
|
|
DmKdInitComPort(
|
|
BOOLEAN KdModemControl
|
|
);
|
|
|
|
BOOLEAN
|
|
DmKdWriteComPort(
|
|
IN PUCHAR Buffer,
|
|
IN ULONG SizeOfBuffer,
|
|
IN PULONG BytesWritten
|
|
);
|
|
|
|
BOOLEAN
|
|
DmKdReadComPort(
|
|
IN PUCHAR Buffer,
|
|
IN ULONG SizeOfBuffer,
|
|
IN PULONG BytesRead
|
|
);
|
|
|
|
VOID
|
|
DmKdCheckComStatus (
|
|
);
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// prototypes for: PACKET.C
|
|
//---------------------------------------------------------------------------
|
|
|
|
VOID
|
|
DmKdWriteControlPacket(
|
|
IN USHORT PacketType,
|
|
IN ULONG PacketId OPTIONAL
|
|
);
|
|
|
|
ULONG
|
|
DmKdComputeChecksum (
|
|
IN PUCHAR Buffer,
|
|
IN ULONG Length
|
|
);
|
|
|
|
BOOL
|
|
DmKdSynchronizeTarget ( VOID );
|
|
|
|
VOID
|
|
DmKdSendBreakin( VOID );
|
|
|
|
BOOL
|
|
DmKdWritePacket(
|
|
IN PVOID PacketData,
|
|
IN USHORT PacketDataLength,
|
|
IN USHORT PacketType,
|
|
IN PVOID MorePacketData OPTIONAL,
|
|
IN USHORT MorePacketDataLength OPTIONAL
|
|
);
|
|
|
|
BOOL
|
|
DmKdReadPacketLeader(
|
|
IN ULONG PacketType,
|
|
OUT PULONG PacketLeader
|
|
);
|
|
|
|
BOOL
|
|
DmKdWaitForPacket(
|
|
IN USHORT PacketType,
|
|
OUT PVOID Packet
|
|
);
|
|
|
|
DWORD
|
|
DmKdWaitStateChange(
|
|
OUT PDBGKD_WAIT_STATE_CHANGE StateChange,
|
|
OUT PVOID Buffer,
|
|
IN ULONG BufferLength
|
|
);
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// prototypes for: CACHE.C
|
|
//---------------------------------------------------------------------------
|
|
|
|
ULONG
|
|
DmKdReadCachedVirtualMemory (
|
|
IN ULONG BaseAddress,
|
|
IN ULONG TransferCount,
|
|
IN PUCHAR UserBuffer,
|
|
IN PULONG BytesRead,
|
|
IN ULONG NonDiscardable
|
|
);
|
|
|
|
VOID
|
|
DmKdInitVirtualCacheEntry (
|
|
IN ULONG BaseAddress,
|
|
IN ULONG Length,
|
|
IN PUCHAR UserBuffer,
|
|
IN ULONG NonDiscardable
|
|
);
|
|
|
|
VOID
|
|
DmKdWriteCachedVirtualMemory (
|
|
IN ULONG BaseAddress,
|
|
IN ULONG TransferCount,
|
|
IN PUCHAR UserBuffer
|
|
);
|
|
|
|
VOID
|
|
DmKdPurgeCachedVirtualMemory (
|
|
BOOL fPurgeNonDiscardable
|
|
);
|
|
|
|
VOID
|
|
DmKdSetCacheDecodePTEs (
|
|
BOOL Flag
|
|
);
|
|
|
|
VOID
|
|
DmKdSetMaxCacheSize(
|
|
IN ULONG MaxCacheSize
|
|
);
|
|
|
|
BOOL
|
|
DmpInitialize (
|
|
IN LPSTR FileName,
|
|
OUT PCONTEXT *Context,
|
|
OUT PEXCEPTION_RECORD *Exception,
|
|
OUT PVOID *DmpHeader
|
|
);
|
|
|
|
VOID
|
|
DmpUnInitialize (
|
|
VOID
|
|
);
|
|
|
|
DWORD
|
|
DmpReadMemory (
|
|
IN PVOID BaseAddress,
|
|
IN PVOID Buffer,
|
|
IN ULONG Size
|
|
);
|
|
|
|
DWORD
|
|
DmpWriteMemory (
|
|
IN PVOID BaseAddress,
|
|
IN PVOID Buffer,
|
|
IN ULONG Size
|
|
);
|
|
|
|
typedef struct tagKDOPTIONS {
|
|
LPSTR keyword; // data keyword
|
|
USHORT id; // data identifier
|
|
USHORT typ; // data type
|
|
DWORD value; // data value, beware usage depends on typ field
|
|
} KDOPTIONS, *PKDOPTIONS;
|
|
|
|
#define KDT_DWORD 0
|
|
#define KDT_STRING 1
|
|
|
|
#define KDO_BAUDRATE 0 // these constants must be consecutive because
|
|
#define KDO_PORT 1 // they are used as indexes into the kdoptions
|
|
#define KDO_CACHE 2 // array of structures.
|
|
#define KDO_VERBOSE 3
|
|
#define KDO_INITIALBP 4
|
|
#define KDO_DEFER 5
|
|
#define KDO_USEMODEM 6
|
|
#define KDO_LOGFILEAPPEND 7
|
|
#define KDO_GOEXIT 8
|
|
#define KDO_SYMBOLPATH 9
|
|
#define KDO_LOGFILENAME 10
|
|
#define KDO_CRASHDUMP 11
|
|
|
|
#define MAXKDOPTIONS (sizeof(KdOptions) / sizeof(KDOPTIONS))
|
|
|
|
extern KDOPTIONS KdOptions[];
|
|
|
|
#endif
|