windows-nt/Source/XPSP1/NT/base/boot/bd/bd.h

429 lines
6.7 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++ BUILD Version: 0001 // Increment this if a change has global effects
Copyright (c) 1996 Microsoft Corporation
Module Name:
bd.h
Abstract:
This module contains the data structures and function prototypes for the
boot debugger.
Author:
David N. Cutler (davec) 27-Nov-1996
Revision History:
--*/
#ifndef _BD_
#define _BD_
#include "bldr.h"
#define NOEXTAPI
#include "wdbgexts.h"
#include "ntdbg.h"
#include "ki.h"
#include "string.h"
#include "stdlib.h"
#include "stdio.h"
#include "cpu.h"
#include "ntverp.h"
//
// Define message buffer size in bytes.
//
// N.B. This must be 0 mod 8.
//
#define BD_MESSAGE_BUFFER_SIZE 4096
//
// Define the maximum number of retries for packet sends.
//
#define MAXIMUM_RETRIES 20
//
// Define packet waiting status codes.
//
#define BD_PACKET_RECEIVED 0
#define BD_PACKET_TIMEOUT 1
#define BD_PACKET_RESEND 2
//
// Define break point table entry structure.
//
#define BD_BREAKPOINT_IN_USE 0x1
#define BD_BREAKPOINT_NEEDS_WRITE 0x2
#define BD_BREAKPOINT_SUSPENDED 0x4
#define BD_BREAKPOINT_NEEDS_REPLACE 0x8
typedef struct _BREAKPOINT_ENTRY {
ULONG Flags;
ULONG64 Address;
BD_BREAKPOINT_TYPE Content;
} BREAKPOINT_ENTRY, *PBREAKPOINT_ENTRY;
extern ULONG BdFileId;
//
// Define function prototypes.
//
LOGICAL
BdPollBreakIn (
VOID
);
VOID
BdReboot (
VOID
);
//
// Breakpoint functions (break.c).
//
ULONG
BdAddBreakpoint (
IN ULONG64 Address
);
LOGICAL
BdDeleteBreakpoint (
IN ULONG Handle
);
LOGICAL
BdDeleteBreakpointRange (
IN ULONG64 Lower,
IN ULONG64 Upper
);
VOID
BdRestoreBreakpoint(
IN PDBGKD_MANIPULATE_STATE64 m,
IN PSTRING AdditionalData,
IN PCONTEXT Context
);
VOID
BdWriteBreakpoint(
IN PDBGKD_MANIPULATE_STATE64 m,
IN PSTRING AdditionalData,
IN PCONTEXT Context
);
VOID
BdSuspendBreakpoint (
ULONG Handle
);
VOID
BdSuspendAllBreakpoints (
VOID
);
VOID
BdRestoreAllBreakpoints (
VOID
);
//
// Memory check functions (check.c)
//
PVOID
BdReadCheck (
IN PVOID Address
);
PVOID
BdWriteCheck (
IN PVOID Address
);
PVOID
BdTranslatePhysicalAddress (
IN PHYSICAL_ADDRESS Address
);
//
// Debugger initialization routine (port.c)
//
LOGICAL
BdPortInitialize(
IN ULONG BaudRate,
IN ULONG PortNumber,
OUT PULONG BdFileId
);
//
// Communication functions (comio.c)
//
ULONG
BdComputeChecksum (
IN PUCHAR Buffer,
IN ULONG Length
);
USHORT
BdReceivePacketLeader (
IN ULONG PacketType,
OUT PULONG PacketLeader
);
VOID
BdSendControlPacket (
IN USHORT PacketType,
IN ULONG PacketId OPTIONAL
);
ULONG
BdReceivePacket (
IN ULONG ExpectedPacketType,
OUT PSTRING MessageHeader,
OUT PSTRING MessageData,
OUT PULONG DataLength
);
VOID
BdSendPacket (
IN ULONG PacketType,
IN PSTRING MessageHeader,
IN PSTRING MessageData OPTIONAL
);
ULONG
BdReceiveString (
OUT PCHAR Destination,
IN ULONG Length
);
VOID
BdSendString (
IN PCHAR Source,
IN ULONG Length
);
VOID
BdSendControlPacket (
IN USHORT PacketType,
IN ULONG PacketId OPTIONAL
);
//
// State change message functions (message.c)
//
LOGICAL
BdReportExceptionStateChange (
IN PEXCEPTION_RECORD ExceptionRecord,
IN OUT PCONTEXT ContextRecord
);
LOGICAL
BdReportLoadSymbolsStateChange (
IN PSTRING PathName,
IN PKD_SYMBOLS_INFO SymbolInfo,
IN LOGICAL UnloadSymbols,
IN OUT PCONTEXT ContextRecord
);
//
// Platform independent debugger APIs (xxapi.c)
//
VOID
BdGetVersion(
IN PDBGKD_MANIPULATE_STATE64 m
);
VOID
BdRestoreBreakPointEx(
IN PDBGKD_MANIPULATE_STATE64 m,
IN PSTRING AdditionalData,
IN PCONTEXT Context
);
NTSTATUS
BdWriteBreakPointEx(
IN PDBGKD_MANIPULATE_STATE64 m,
IN PSTRING AdditionalData,
IN PCONTEXT Context
);
VOID
BdReadPhysicalMemory(
IN PDBGKD_MANIPULATE_STATE64 m,
IN PSTRING AdditionalData,
IN PCONTEXT Context
);
VOID
BdWritePhysicalMemory(
IN PDBGKD_MANIPULATE_STATE64 m,
IN PSTRING AdditionalData,
IN PCONTEXT Context
);
VOID
BdReadVirtualMemory(
IN PDBGKD_MANIPULATE_STATE64 m,
IN PSTRING AdditionalData,
IN PCONTEXT Context
);
VOID
BdWriteVirtualMemory(
IN PDBGKD_MANIPULATE_STATE64 m,
IN PSTRING AdditionalData,
IN PCONTEXT Context
);
VOID
BdGetContext(
IN PDBGKD_MANIPULATE_STATE64 m,
IN PSTRING AdditionalData,
IN PCONTEXT Context
);
VOID
BdSetContext(
IN PDBGKD_MANIPULATE_STATE64 m,
IN PSTRING AdditionalData,
IN PCONTEXT Context
);
//
// Move memory functions (move.c)
//
ULONG
BdMoveMemory (
IN PCHAR Destination,
IN PCHAR Source,
IN ULONG Length
);
VOID
BdCopyMemory (
IN PCHAR Destination,
IN PCHAR Source,
IN ULONG Length
);
//
// CPU specific interfaces (cpuapi.c)
//
VOID
BdSetContextState (
IN OUT PDBGKD_ANY_WAIT_STATE_CHANGE WaitStateChange,
IN PCONTEXT ContextRecord
);
VOID
BdGetStateChange (
IN PDBGKD_MANIPULATE_STATE64 ManipulateState,
IN PCONTEXT ContextRecord
);
VOID
BdSetStateChange (
IN OUT PDBGKD_ANY_WAIT_STATE_CHANGE WaitStateChange,
IN PEXCEPTION_RECORD ExceptionRecord,
IN PCONTEXT ContextRecord
);
VOID
BdReadControlSpace (
IN PDBGKD_MANIPULATE_STATE64 m,
IN PSTRING AdditionalData,
IN PCONTEXT Context
);
VOID
BdWriteControlSpace (
IN PDBGKD_MANIPULATE_STATE64 m,
IN PSTRING AdditionalData,
IN PCONTEXT Context
);
VOID
BdReadIoSpace (
IN PDBGKD_MANIPULATE_STATE64 m,
IN PSTRING AdditionalData,
IN PCONTEXT Context
);
VOID
BdWriteIoSpace (
IN PDBGKD_MANIPULATE_STATE64 m,
IN PSTRING AdditionalData,
IN PCONTEXT Context
);
VOID
BdReadMachineSpecificRegister (
IN PDBGKD_MANIPULATE_STATE64 m,
IN PSTRING AdditionalData,
IN PCONTEXT Context
);
VOID
BdWriteMachineSpecificRegister (
IN PDBGKD_MANIPULATE_STATE64 m,
IN PSTRING AdditionalData,
IN PCONTEXT Context
);
//
// Print and prompt functions (dbgio.c)
//
VOID
BdPrintf (
IN PCHAR Format,
...
);
LOGICAL
BdPrintString (
IN PSTRING Output
);
LOGICAL
BdPromptString (
IN PSTRING Output,
IN OUT PSTRING Input
);
//
// Define external data.
//
extern BD_BREAKPOINT_TYPE BdBreakpointInstruction;
extern BREAKPOINT_ENTRY BdBreakpointTable[];
extern LOGICAL BdControlCPending;
extern LOGICAL BdControlCPressed;
extern LOGICAL BdDebuggerNotPresent;
extern PBD_DEBUG_ROUTINE BdDebugRoutine;
extern ULONGLONG BdMessageBuffer[];
extern ULONG BdNextPacketIdToSend;
extern ULONG BdNumberRetries;
extern ULONG BdPacketIdExpected;
extern KPRCB BdPrcb;
extern ULONG BdRetryCount;
extern ULONG NtBuildNumber;
#endif