/*++ Copyright (c) 1991 Microsoft Corporation Module Name: Abstract: Author: Notes: Revision History: --*/ #include #pragma hdrstop // // Macro for setting up pointers to WinDbg routines // // This line currently causes a build warning, which I don't understand // Disassemble = p->lpDisasmRoutine; #define SETUP_WINDBG_POINTERS( p ) { \ Print = p->lpOutputRoutine; \ GetExpression = p->lpGetExpressionRoutine; \ GetSymbol = p->lpGetSymbolRoutine; \ CheckCtrlC = p->lpCheckControlCRoutine; \ \ if ( p->nSize >= sizeof(WINDBG_EXTENSION_APIS) ) { \ fWinDbg = TRUE; \ ReadProcessMemWinDbg = p->lpReadProcessMemoryRoutine; \ WriteProcessMemWinDbg = p->lpWriteProcessMemoryRoutine; \ GetThreadContextWinDbg = p->lpGetThreadContextRoutine; \ SetThreadContextWinDbg = p->lpSetThreadContextRoutine; \ } else { \ fWinDbg = FALSE; \ } \ } VOID db( HANDLE CurrentProcess, HANDLE CurrentThread, DWORD CurrentPc, PWINDBG_EXTENSION_APIS ExtensionApis, LPSTR ArgumentString ) /*++ Routine Description: Arguments: CurrentProcess -- Supplies a handle to the current process CurrentThread -- Supplies a handle to the current thread CurrentPc -- Supplies the current program counter. (may be meaningless) ExtensionApis -- Supplies pointers to ntsd support routines ArgumentString -- Supplies the arguments passed to the command Return Value: None. --*/ { UNREFERENCED_PARAMETER(CurrentPc); hCurrentProcess = CurrentProcess; hCurrentThread = CurrentThread; lpArgumentString = ArgumentString; SETUP_WINDBG_POINTERS(ExtensionApis); DumpMemory(1); } VOID dw( HANDLE CurrentProcess, HANDLE CurrentThread, DWORD CurrentPc, PWINDBG_EXTENSION_APIS ExtensionApis, LPSTR ArgumentString ) /*++ Routine Description: Arguments: CurrentProcess -- Supplies a handle to the current process CurrentThread -- Supplies a handle to the current thread CurrentPc -- Supplies the current program counter. (may be meaningless) ExtensionApis -- Supplies pointers to ntsd support routines ArgumentString -- Supplies the arguments passed to the command Return Value: None. --*/ { UNREFERENCED_PARAMETER(CurrentPc); hCurrentProcess = CurrentProcess; hCurrentThread = CurrentThread; lpArgumentString = ArgumentString; SETUP_WINDBG_POINTERS(ExtensionApis); DumpMemory(2); } VOID dd( HANDLE CurrentProcess, HANDLE CurrentThread, DWORD CurrentPc, PWINDBG_EXTENSION_APIS ExtensionApis, LPSTR ArgumentString ) /*++ Routine Description: Arguments: CurrentProcess -- Supplies a handle to the current process CurrentThread -- Supplies a handle to the current thread CurrentPc -- Supplies the current program counter. (may be meaningless) ExtensionApis -- Supplies pointers to ntsd support routines ArgumentString -- Supplies the arguments passed to the command Return Value: None. --*/ { UNREFERENCED_PARAMETER(CurrentPc); hCurrentProcess = CurrentProcess; hCurrentThread = CurrentThread; lpArgumentString = ArgumentString; SETUP_WINDBG_POINTERS(ExtensionApis); DumpMemory(4); } VOID dg( HANDLE CurrentProcess, HANDLE CurrentThread, DWORD CurrentPc, PWINDBG_EXTENSION_APIS ExtensionApis, LPSTR ArgumentString ) /*++ Routine Description: Arguments: CurrentProcess -- Supplies a handle to the current process CurrentThread -- Supplies a handle to the current thread CurrentPc -- Supplies the current program counter. (may be meaningless) ExtensionApis -- Supplies pointers to ntsd support routines ArgumentString -- Supplies the arguments passed to the command Return Value: None. --*/ { UNREFERENCED_PARAMETER(CurrentPc); hCurrentProcess = CurrentProcess; hCurrentThread = CurrentThread; lpArgumentString = ArgumentString; SETUP_WINDBG_POINTERS(ExtensionApis); DumpDescriptor(); } VOID dgh( HANDLE CurrentProcess, HANDLE CurrentThread, DWORD CurrentPc, PWINDBG_EXTENSION_APIS ExtensionApis, LPSTR ArgumentString ) /*++ Routine Description: Arguments: CurrentProcess -- Supplies a handle to the current process CurrentThread -- Supplies a handle to the current thread CurrentPc -- Supplies the current program counter. (may be meaningless) ExtensionApis -- Supplies pointers to ntsd support routines ArgumentString -- Supplies the arguments passed to the command Return Value: None. --*/ { UNREFERENCED_PARAMETER(CurrentPc); hCurrentProcess = CurrentProcess; hCurrentThread = CurrentThread; lpArgumentString = ArgumentString; SETUP_WINDBG_POINTERS(ExtensionApis); DumpGHeap(); } VOID es( HANDLE CurrentProcess, HANDLE CurrentThread, DWORD CurrentPc, PWINDBG_EXTENSION_APIS ExtensionApis, LPSTR ArgumentString ) /*++ Routine Description: Arguments: CurrentProcess -- Supplies a handle to the current process CurrentThread -- Supplies a handle to the current thread CurrentPc -- Supplies the current program counter. (may be meaningless) ExtensionApis -- Supplies pointers to ntsd support routines ArgumentString -- Supplies the arguments passed to the command Return Value: None. --*/ { UNREFERENCED_PARAMETER(CurrentPc); hCurrentProcess = CurrentProcess; hCurrentThread = CurrentThread; lpArgumentString = ArgumentString; SETUP_WINDBG_POINTERS(ExtensionApis); if (!CheckGlobalHeap()) { return; } EvaluateSymbol(); } VOID help( HANDLE CurrentProcess, HANDLE CurrentThread, DWORD CurrentPc, PWINDBG_EXTENSION_APIS ExtensionApis, LPSTR ArgumentString ) { SETUP_WINDBG_POINTERS(ExtensionApis); PRINTF("[db|dw|dd] addr - Dump 16-bit memory\n"); PRINTF("dg - Dump info on a selector\n"); PRINTF("dgh - Dump global heap\n"); PRINTF("es - Get symbol's value\n"); PRINTF("k - Stack trace\n"); PRINTF("kb - Stack trace with symbols\n"); PRINTF("lm - List loaded modules\n"); PRINTF("ln - Determine near symbols\n"); PRINTF("r - Dump registers\n"); PRINTF("ti - Dump WOW Task Info\n"); PRINTF("u - Unassemble 16-bit code with symbols\n"); PRINTF("\n"); } VOID k( HANDLE CurrentProcess, HANDLE CurrentThread, DWORD CurrentPc, PWINDBG_EXTENSION_APIS ExtensionApis, LPSTR ArgumentString ) /*++ Routine Description: Arguments: CurrentProcess -- Supplies a handle to the current process CurrentThread -- Supplies a handle to the current thread CurrentPc -- Supplies the current program counter. (may be meaningless) ExtensionApis -- Supplies pointers to ntsd support routines ArgumentString -- Supplies the arguments passed to the command Return Value: None. --*/ { UNREFERENCED_PARAMETER(CurrentPc); hCurrentProcess = CurrentProcess; hCurrentThread = CurrentThread; lpArgumentString = ArgumentString; SETUP_WINDBG_POINTERS(ExtensionApis); if (!CheckGlobalHeap()) { return; } WalkStack(); } VOID kb( HANDLE CurrentProcess, HANDLE CurrentThread, DWORD CurrentPc, PWINDBG_EXTENSION_APIS ExtensionApis, LPSTR ArgumentString ) /*++ Routine Description: Arguments: CurrentProcess -- Supplies a handle to the current process CurrentThread -- Supplies a handle to the current thread CurrentPc -- Supplies the current program counter. (may be meaningless) ExtensionApis -- Supplies pointers to ntsd support routines ArgumentString -- Supplies the arguments passed to the command Return Value: None. --*/ { UNREFERENCED_PARAMETER(CurrentPc); hCurrentProcess = CurrentProcess; hCurrentThread = CurrentThread; lpArgumentString = ArgumentString; SETUP_WINDBG_POINTERS(ExtensionApis); if (!CheckGlobalHeap()) { return; } WalkStackVerbose(); } VOID lm( HANDLE CurrentProcess, HANDLE CurrentThread, DWORD CurrentPc, PWINDBG_EXTENSION_APIS ExtensionApis, LPSTR ArgumentString ) /*++ Routine Description: Arguments: CurrentProcess -- Supplies a handle to the current process CurrentThread -- Supplies a handle to the current thread CurrentPc -- Supplies the current program counter. (may be meaningless) ExtensionApis -- Supplies pointers to ntsd support routines ArgumentString -- Supplies the arguments passed to the command Return Value: None. --*/ { UNREFERENCED_PARAMETER(CurrentPc); hCurrentProcess = CurrentProcess; hCurrentThread = CurrentThread; lpArgumentString = ArgumentString; SETUP_WINDBG_POINTERS(ExtensionApis); if (!CheckGlobalHeap()) { return; } ListModules(); } VOID ln( HANDLE CurrentProcess, HANDLE CurrentThread, DWORD CurrentPc, PWINDBG_EXTENSION_APIS ExtensionApis, LPSTR ArgumentString ) /*++ Routine Description: Arguments: CurrentProcess -- Supplies a handle to the current process CurrentThread -- Supplies a handle to the current thread CurrentPc -- Supplies the current program counter. (may be meaningless) ExtensionApis -- Supplies pointers to ntsd support routines ArgumentString -- Supplies the arguments passed to the command Return Value: None. --*/ { UNREFERENCED_PARAMETER(CurrentPc); hCurrentProcess = CurrentProcess; hCurrentThread = CurrentThread; lpArgumentString = ArgumentString; SETUP_WINDBG_POINTERS(ExtensionApis); ListNear(); } VOID r( IN HANDLE CurrentProcess, IN HANDLE CurrentThread, IN DWORD CurrentPc, IN PWINDBG_EXTENSION_APIS ExtensionApis, IN LPSTR ArgumentString ) /*++ Routine Description: Arguments: CurrentProcess -- Supplies a handle to the current process CurrentThread -- Supplies a handle to the current thread CurrentPc -- Supplies the current program counter. (may be meaningless) ExtensionApis -- Supplies pointers to ntsd support routines ArgumentString -- Supplies the arguments passed to the command Return Value: None. --*/ { UNREFERENCED_PARAMETER(CurrentPc); hCurrentProcess = CurrentProcess; hCurrentThread = CurrentThread; lpArgumentString = ArgumentString; SETUP_WINDBG_POINTERS(ExtensionApis); DumpRegs(); } VOID ti( IN HANDLE CurrentProcess, IN HANDLE CurrentThread, IN DWORD CurrentPc, IN PWINDBG_EXTENSION_APIS ExtensionApis, IN LPSTR ArgumentString ) /*++ Routine Description: Arguments: CurrentProcess -- Supplies a handle to the current process CurrentThread -- Supplies a handle to the current thread CurrentPc -- Supplies the current program counter. (may be meaningless) ExtensionApis -- Supplies pointers to ntsd support routines ArgumentString -- Supplies the arguments passed to the command Return Value: None. --*/ { UNREFERENCED_PARAMETER(CurrentPc); hCurrentProcess = CurrentProcess; hCurrentThread = CurrentThread; lpArgumentString = ArgumentString; SETUP_WINDBG_POINTERS(ExtensionApis); TaskInfo(); } VOID u( IN HANDLE CurrentProcess, IN HANDLE CurrentThread, IN DWORD CurrentPc, IN PWINDBG_EXTENSION_APIS ExtensionApis, IN LPSTR ArgumentString ) /*++ Routine Description: Arguments: CurrentProcess -- Supplies a handle to the current process CurrentThread -- Supplies a handle to the current thread CurrentPc -- Supplies the current program counter. (may be meaningless) ExtensionApis -- Supplies pointers to ntsd support routines ArgumentString -- Supplies the arguments passed to the command Return Value: None. --*/ { UNREFERENCED_PARAMETER(CurrentPc); hCurrentProcess = CurrentProcess; hCurrentThread = CurrentThread; lpArgumentString = ArgumentString; SETUP_WINDBG_POINTERS(ExtensionApis); Unassemble(); }