/*++ 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