Windows2000/private/windbg64/windbg/include/windbg.h
2020-09-30 17:12:32 +02:00

873 lines
26 KiB
C

/*++ BUILD Version: 0004 // Increment this if a change has global effects
Copyright (c) 1992 Microsoft Corporation
Module Name:
Windbg.h
Abstract:
Main header file for the Windbg debugger.
Author:
David J. Gilman (davegi) 21-Apr-1992
Environment:
Win32, User Mode
*/
#if ! defined( _WINDBG_ )
#define _WINDBG_
#include <windef.h>
#ifndef RC_INVOKED
#include "od.h"
#endif
#define NOGDICAPMASKS
#define NOMETAFILE
#define NOSOUND
#define NOCOMM
#define NOKANJI
#define NOMINMAX
#define EXPORT
#define __FAR
#define __FASTCALL
#define _HUGE_
typedef unsigned short _segment;
#define GetWindowHandle(hWnd, nIndex) (HWND) GetWindowLongPtr(hWnd, nIndex)
#define GetClassHandle(hWnd, nIndex) (HWND) GetClassLongPtr(hWnd, nIndex)
#define SetWindowHandle(hWnd, nIndex, h) SetWindowLongPtr(hWnd, nIndex, (LONG_PTR)h)
#define MoveToX(a, b, c, d) MoveToEx(a, b, c, d)
#define SetBrushOrgX(a, b, c, d) SetBrushOrgEx(a, b, c, d)
typedef short * LPSHORT;
#define Unused(a) (void) a;
//Compilation options
#define DEBUGGING // Shields all system with assertions
#undef BRK_IF_ERROR // Issue a BreakPoint after an ErrorBox
#undef BRK_IF_FATAL_ERROR // Issue a BreakPoint after a FatalErrorBox
/*
GLOBAL LIMITS CONSTANTS:
*/
#define MAX_MSG_TXT 4096 //Max text width in message boxes
#define MAX_CMDLINE_TXT 8192 //Max size for command line
#define MAX_VAR_MSG_TXT 8192 //Max size of a message built at run-time
#define MAX_DOCUMENTS 64 //Max number of documents
#define MAX_VIEWS 64 //Max number of views
#ifndef NTBUG
#define DISK_BLOCK_SIZE 2048
#else
#define DISK_BLOCK_SIZE 4096 //Cluster size for disks I/O on text files
#endif
#define MAX_PICK_LIST 16 //Max of 'old' strings kept in replace and find
#define MAXFILENAMELEN 260 //Max # of chars in a filename
#define MAXFILENAMEPREFIX 256 //Prefix part of a filename
#define MAX_CLIPBOARD_SIZE 65536*8 //Clipboard limit (512k)
#define DEFAULT_TAB 8 //Default tabulation size
#define MAX_TAB_WIDTH 99 //Maximum tab size
#define TMP_STRING_SIZE 8192 //All purpose strings
#define MAX_EXPRESS_SIZE 1024 //Max text size of an expression (watch etc)
#define UNDOREDO_DEF_SIZE 4096L //Size of undo/redo buffers
#define UNDOREDO_MAX_SIZE 65535L //Maximum size of undo/redo buffers
#define BHD 10 //Size of block header (see BLOCKDEF)
#define BLOCK_SIZE (8192 - BHD) //Size of block
#define LHD 4 //Size of line Header (see LINEREC)
#define MAX_LINE_SIZE 256 //Max inside length of editor line
#define MAX_USER_LINE (MAX_LINE_SIZE - LHD - 1) //Max length of user line
#define MAX_LINE_NUMBER 65535 //Maximum line #
#define MAX_CHARS_IN_FONT 256 //Do you really need a comment ??
#define MEMBUF_SIZE 4096 //for memory operations: fi, c, m, s
#define IDM_FIRSTCHILD 30000 //for mdi default menu handling
/*
GLOBAL TYPES AND DEFINES:
*/
//Undo/Redo : Type of action for record
#define NEXT_HAS_NO_STOP 2
#define HAS_NO_STOP 1
#define HAS_STOP 0
//Undo/Redo : Type of Action
#define INSERTSTREAM 0 // |
#define INSERTCHAR 1 // |
#define DELETESTREAM 2 // | bits 0,2
#define DELETECHAR 3 // |
#define REPLACECHAR 4 // |
#define STOPMARK 16 // bit 4
#define USERMARK 32 // bit 5
#define CANCELREC 64 // bit 6 CANCELREC should never be on bit 0
#define ACTIONMASK 7 //To retrieve action
#define REPLACEDBCS 0x08
//Undo/Redo : To store Deletsream's col2 and line2
typedef struct {
int line;
BYTE col;
} U_COORD;
//Undo/Redo : To store InsertStream's len and chars
typedef struct {
WORD len; //Actual len (full len)
char chars[];
} STREAM;
//Undo/redo : Variant record
typedef union {
U_COORD c;
char ch;
STREAM s;
} X;
//Undo/Redo : Structure of record definition
typedef struct {
WORD prevLen; //MUST BE FIRST FIELD !(Previous rec length (full len))
BYTE action; //Type of logical editing action
BYTE col;
int line;
X x; //Variant part
} STREAMREC;
typedef STREAMREC *LPSTREAMREC;
//Undo/Redo : Size of variant components
#define HDR_INSERTSTREAM_SIZE (sizeof(STREAMREC) - sizeof(X) + sizeof(STREAM))
#define HDR_DELETESTREAM_SIZE (sizeof(STREAMREC) - sizeof(X) + sizeof(U_COORD))
#define HDR_DELETECHAR_SIZE (sizeof(STREAMREC) - sizeof(X))
#define HDR_INSERTCHAR_SIZE (sizeof(STREAMREC) - sizeof(X) + sizeof(char))
//Undo/Redo : States of engine
// - REC_STOPPED no more recording/playing
// - REC_HADOVERFLOW when buffer went full during an operation
// - REC_UNDO normal mode where inverse of edit action goes in Undo buffer
// - REC_REDO during undo, inverse of Undo edit actions will be saved in
// Redo buffer
// - REC_CANNOTUNDO when undo buffer is empty
#define REC_STOPPED 0
#define REC_HADOVERFLOW 1
#define REC_UNDO 2
#define REC_REDO 3
#define REC_CANNOTUNDO -32767
//Undo/redo : Information in a document
typedef struct {
HANDLE h; //Handle to editor undos/redos
long bufferSize; //In bytes
long offset; //Current undo/redo rec in buffer
LPSTREAMREC pRec; //Pointer to current undo/redo recorded
} UNDOREDOREC;
typedef UNDOREDOREC *LPUNDOREDOREC;
/*
** Messages : User messages (See DEBUGGER.H for the other)
*/
#define WU_UPDATE (WM_USER + 0)
#define WU_CLEAR (WM_USER + 1)
#define WU_RELOADFILE (WM_USER + 2)
#define WU_SETWATCH (WM_USER + 3)
#define WU_EXPANDWATCH (WM_USER + 4)
#define WU_INFO (WM_USER + 5)
#define WU_INITDEBUGWIN (WM_USER + 7)
#define WU_SYNCALL (WM_USER + 8)
#define WU_DBG_LOADEM (WM_USER + 10)
#define WU_DBG_UNLOADEM (WM_USER + 11)
#define WU_AUTORUN (WM_USER + 12)
#define WU_DBG_LOADEE (WM_USER + 13)
#define WU_DBG_UNLOADEE (WM_USER + 14)
#define WU_CLR_FORECHANGE (WM_USER + 15) //next two for windows that need to
#define WU_CLR_BACKCHANGE (WM_USER + 16) //know about color changes
#define WU_OPTIONS (WM_USER + 17)
#define WU_RESAVEFILE (WM_USER + 18)
#define WU_INVALIDATE (WM_USER + 19)
#define WU_LOG_REMOTE_MSG (WM_USER + 20)
#define WU_LOG_REMOTE_CMD (WM_USER + 21)
// States for autorun engine
typedef enum _AUTORUN {
arNone = 0,
arCmdline,
arSource,
arQuit
} AUTORUN;
//Status Bar : Display Text type
#define STATUS_INFOTEXT 0
#define STATUS_MENUTEXT 1
//Status Bar : Pens and Brushes colors
#define GRAYDARK 0x00808080
//Workspace : Basic window information
typedef struct {
RECT coord;
long style;
} WININFO;
typedef WININFO *LPWININFO;
//Editor & Project: Type of file kept
#define EDITOR_FILE 0
#define PROJECT_FILE 1
//Editor : Horizontal scroll ratio (1/5 of the window)
#define SCROLL_RATIO 5
//Editor : Ascii ctrl chars
#define CTRL_A 1
#define CTRL_C 3
#define CTRL_D 4
#define CTRL_E 5
#define CTRL_F 6
#define CTRL_G 7
#define CTRL_H 8
#define CTRL_J 10
#define CTRL_M 13
#define CTRL_N 14
//#define CTRL_Q 17
#define CTRL_R 18
#define CTRL_S 19
#define CTRL_T 20
#define CTRL_U 21
#define CTRL_V 22
#define CTRL_W 23
#define CTRL_X 24
#define CTRL_Y 25
#define CTRL_Z 26
#define CTRL_RIGHTBRACKET 29
//Editor : Escape
#define ESCAPE 27
//Editor : Scan codes needed
#define RETURN_SCANCODE 28
#define BACKSPACE_SCANCODE 14
//Editor : Code for No View
#define NOVIEW 255
//Editor : Standard chars in text files
#define LF 10
#define CR 13
#define TAB 9
#define BS 8
//Editor : Status of a line
#define COMMENT_LINE 0x1 //This line is fully commented
#define MULTISTRING_LINE 0x2 //This line is a multiline string
#define TAGGED_LINE 0x4 //Tagged by the user
#define BRKPOINT_LINE 0x8 //Brk Point Commited
#define CURRENT_LINE 0x10 //Current line when debugging
#define UBP_LINE 0x20 //Uninstaiated BP
#define DASM_SOURCE_LINE 0x40 //Source line in disasm window
#define DASM_LABEL_LINE 0x80 //Label line in disasm window
//Editor : State when reading a file
#define END_OF_LINE 0
#define END_OF_FILE 1
#define END_ABORT 2
//Editor : Last line convention
#define LAST_LINE MAX_LINE_NUMBER + 1
//Color array for screen paint
typedef struct {
int nbChars;
COLORREF fore;
COLORREF back;
} COLORINFO;
//Editor : Line status action
typedef enum
{
LINESTATUS_ON,
LINESTATUS_OFF,
LINESTATUS_TOGGLE
}
LINESTATUSACTION;
//Editor : Line definition
typedef struct {
WORD Status; //Status of line |
BYTE PrevLength; //Length of previous line | !! Size in constant LHD
BYTE Length; //Length of next line |
char Text[1]; //Text of line
} LINEREC;
typedef LINEREC UNALIGNED* LPLINEREC;
#ifdef ALIGN
#pragma pack(4)
#endif
//Editor : Block definition
typedef struct tagBD {
struct tagBD *PrevBlock; //Previous block or NULL |
struct tagBD *NextBlock; //Next block or NULL | !! Size in constant BHD
int LastLineOffset; //Size used |
#ifdef ALIGN
int dummy;
#endif
char Data[BLOCK_SIZE];
} BLOCKDEF;
typedef BLOCKDEF * LPBLOCKDEF;
#ifdef ALIGN
#pragma pack()
#endif
#ifdef NEW_WINDOWING_CODE
typedef enum {
MINVAL_WINDOW = 0,
DOC_WINDOW,
WATCH_WINDOW,
LOCALS_WINDOW,
CPU_WINDOW,
DISASM_WINDOW,
CMD_WINDOW,
FLOAT_WINDOW,
MEMORY_WINDOW,
QUICKW_WINDOW,
CALLS_WINDOW,
MAXVAL_WINDOW
} WIN_TYPES, * PWIN_TYPES;
typedef struct _DEBUGGER_WINDOWS {
HWND hwndWatch;
HWND hwndLocals;
HWND hwndCpu;
HWND hwndDisasm;
HWND hwndCmd;
HWND hwndFloat;
HWND hwndMemory;
HWND hwndQuickW;
HWND hwndCalls;
} DEBUGGER_WINDOWS, *PDEBUGGER_WINDOWS;
#endif //NEW_WINDOWING_CODE
//Editor : View definition
typedef struct _VIEWREC {
int NextView; //Index of next view or (-1)
int Doc; //Index of document
HWND hwndFrame; //View Frame Window informations
HWND hwndClient; //Client handle
RECT rFrame;
long X; //Cursor position X
long Y; //Cursor position Y
BOOL BlockStatus; //Selection On/Off
long BlockXL; //Selection X left
long BlockXR; //Selection Y left
long BlockYL; //Selection X right
long BlockYR; //Selection Y right
BOOL hScrollBar; //Is there an horizontal scrollbar
BOOL vScrollBar; //Is there a vertical scrollbar
int scrollFactor; //0-100 Percent of scroll for view
HFONT font; //Current font
int charWidth[MAX_CHARS_IN_FONT];
int charHeight; //Current char height
int maxCharWidth;
int aveCharWidth;
int charSet;
long iYTop; /* Current Top line Y iff != -1 */
int Tmoverhang;
#define VIEW_PITCH_VARIABLE 0
#define VIEW_PITCH_DBCS_FIXED 1
#define VIEW_PITCH_ALL_FIXED 2
WORD wViewPitch;
WORD wCharSet; //This is for 'Memory Window'.
#define DBCS_CHAR "\x82\xa0"
int charWidthDBCS; //Assume all DBCS char have the same
BOOL bDBCSOverWrite; //If TRUE, DBCS char is treated as
// two SBCS chars when "OverWrite" mode
//This always TRUE now.
} VIEWREC;
typedef VIEWREC *LPVIEWREC;
//Document : Type of document (if you change those values, don't be
//surprise if windows coloring does not work anymore)
#define DOC_WIN 0
#define DUMMY_WIN 1
#define WATCH_WIN 2 // this MUST be here...Our magic # is 1 (-1) !!!!!
#define LOCALS_WIN 3
#define CPU_WIN 4
#define DISASM_WIN 5
#define COMMAND_WIN 6
#define FLOAT_WIN 7
#define MEMORY_WIN 8
#define QUICKW_WIN 9
#define CALLS_WIN 10
//Document & Environment : Language kind
#define NO_LANGUAGE 0
#define C_LANGUAGE 1
#define PASCAL_LANGUAGE 2
#define AUTO_LANGUAGE 3
//Document : Mode when opening files
#define MODE_OPENCREATE 0
#define MODE_CREATE 1
#define MODE_OPEN 2
#define MODE_DUPLICATE 3
#define MODE_RELOAD 4
#ifndef _TIME_T_DEFINED
typedef long time_t;
#define _TIME_T_DEFINED
#endif
//Document : Document definition
typedef struct {
WORD docType; // Type of document
char szFileName[_MAX_PATH]; // File name
FILETIME time; // Time opened, saved
BOOL bChangeFileAsk; // is there a dialog up ?
long NbLines; // Current number of lines
int FirstView; // Index of first view in Views
LPBLOCKDEF FirstBlock; // Address of first block
LPBLOCKDEF LastBlock; // Address of last block
LPBLOCKDEF CurrentBlock; // Address of current block
int CurrentLine; // Current line number
int CurrentLineOffset; // Current line offset in block
int lineTop; // Top line affected by a change
int lineBottom; // Buttom line affected by a change
WORD language; // C, Pascal or no language document
BOOL untitled;
BOOL ismodified;
BOOL readOnly; // Old "entire" doc readonly flag
BOOL RORegionSet; // Do we have a valid RO region?
int RoX2;
int RoY2; // Region max's-X1,Y1 always 0,0
BOOL forcedOvertype;
BOOL forcedReadOnly;
int playCount; // 0 in normal edit mode,
// counts undos otherwise
WORD recType;
UNDOREDOREC undo;
UNDOREDOREC redo;
} DOCREC;
typedef DOCREC *LPDOCREC;
//Find/Replace : Type of pick list
#define FIND_PICK 0
#define REPLACE_PICK 1
//Find/Replace : Structure Definition
typedef struct {
BOOL matchCase; //Match Upper/Lower case
BOOL regExpr; //Regular expression
BOOL wholeWord;
BOOL goUp; //Search direction
char findWhat[MAX_USER_LINE + 1]; //Input string
char replaceWith[MAX_USER_LINE + 1]; //Output string
int nbInPick[REPLACE_PICK + 1]; //Number of strings
//in picklist
HANDLE hPickList[REPLACE_PICK + 1][MAX_PICK_LIST]; //PickList for old
int nbReplaced; //Actual number of
//replacements
} _FINDREPLACE;
typedef struct {
int leftCol; //Start of string in line
int rightCol; //End of string in line
int line; //Current line
int stopLine; //Where find/replace should end
int stopCol; //Where find/replace should end
int nbReplaced; //Number of occurences replaced
BOOL oneLineDone;
BOOL allFileDone;
BOOL hadError;
BOOL goUpCopy;
BOOL allTagged;
BOOL replacing;
BOOL replaceAll;
BOOL exitModelessFind;
BOOL exitModelessReplace;
HWND hDlgFindNextWnd;
HWND hDlgConfirmWnd;
DLGPROC lpFindNextProc;
DLGPROC lpConfirmProc;
BOOL firstFindNextInvoc;
BOOL firstConfirmInvoc;
} _FINDREPLACEMEM;
//Error window : The error node list:
#define MAX_ERROR_TEXT 256
//Error window : Error node
typedef struct ERRORNODEtag
{
char Text[MAX_ERROR_TEXT];
int ErrorLine;// Line number of error in source file, -1 otherwise
WORD flags;
struct ERRORNODEtag *Next;
struct ERRORNODEtag *Prev;
} ERRORNODE;
typedef ERRORNODE *PERRORNODE;
//Debugger : Debugging Mode
#define SOFT_DEBUG 0
#define HARD_DEBUG 1
//Debugger : Breakpoint buffer sizes
#define BKPT_LOCATION_SIZE 128
#define BKPT_WNDPROC_SIZE 128
#define BKPT_EXPR_SIZE 128
//Degugger : Breakpoints types
typedef enum
{
BRK_AT_LOC,
BRK_AT_LOC_EXPR_TRUE,
BRK_AT_LOC_EXPR_CHGD,
BRK_EXPR_TRUE,
BRK_EXPR_CHGD,
BRK_AT_WNDPROC,
BRK_AT_WNDPROC_EXPR_TRUE,
BRK_AT_WNDPROC_EXPR_CHGD,
BRK_AT_WNDPROC_MSG_RECVD
} BREAKPOINTACTIONS;
//Debugger : Message classes
#define SPECIFICMESSAGE 0x0001
#define MOUSECLASS 0x0002
#define WINDOWCLASS 0x0004
#define INPUTCLASS 0x0008
#define SYSTEMCLASS 0x0010
#define INITCLASS 0x0020
#define CLIPBOARDCLASS 0x0040
#define DDECLASS 0x0080
#define NONCLIENTCLASS 0x0100
#define NOTSELECTED 0x0200
#define NOTSELECTEDMESSAGE 0xFFFF
//Debugger : Set Breakpoint structure definition
typedef struct {
BREAKPOINTACTIONS nAction;
char szLocation[BKPT_LOCATION_SIZE];
char szWndProc[BKPT_WNDPROC_SIZE];
char szExpression[BKPT_EXPR_SIZE];
WORD wLength;
WORD MessageClass;
WORD Message;
} BRKPTSTRUC;
//Debugger : Current line in debuggee
typedef struct {
int doc;
int CurTraceLine;
} TRACEINFO;
//Title bar
typedef enum {TBM_UNKNOWN = -1, TBM_WORK, TBM_RUN, TBM_BREAK} TITLEBARMODE;
typedef struct _TITLEBAR {
char ProgName[30];
char UserTitle[30];
char ModeWork[20];
char ModeRun[20];
char ModeBreak[20];
TITLEBARMODE Mode;
TITLEBARMODE TimerMode;
} TITLEBAR;
//Hardwired KD stuff
#define NT_ALT_KERNEL_NAME "ntoskrnl"
#define NT_ALT_KRNLMP_NAME "ntkrnlmp"
#define NT_KERNEL_NAME "ntoskrnl.exe"
#define NT_KRNLMP_NAME "ntkrnlmp.exe"
#define NT_USERDUMP_NAME "UserDump"
#define NT_KERNELDUMP_NAME "KernelDump"
/*
HOTKEY DEFINES:
*/
#define IDH_CTRLC 100
/*
RESOURCES DEFINES :
*/
//Edit control identifier
#define ID_EDIT 0xCAC
//Position of window menu
#define WINDOWMENU 4
//Position of file menu
#define FILEMENU 0
//Standard help id in dialogs
#define IDWINDBGHELP 100
//Toolbar control identifier
#define ID_TOOLBAR 100
//Window word values for child windows
#define GWW_EDIT 0
#define GWW_VIEW (GWW_EDIT + sizeof(PVOID))
//Size of extra data for MDI child windows
#define CBWNDEXTRA (2 + sizeof(PVOID))
/*
** Include the defines which are used have numbers for string
** resources.
*/
#include "..\include\res_str.h"
// Path of the last Src file opened from a file open dlg box
extern char g_szMRU_SRC_FILE_PATH[_MAX_PATH];
/*
CALL BACKS:
*/
BOOL InitApplication(HINSTANCE);
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK MDIChildWndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK MDIPaneWndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK DLGPaneWndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ChildWndProc(HWND, UINT, WPARAM, LPARAM);
//Call Back to Handle Edit Find Dialog BOX
INT_PTR CALLBACK DlgFind(HWND, UINT, WPARAM, LPARAM);
//Call Back to Handle Edit Replace Dialog BOX
INT_PTR CALLBACK DlgReplace(HWND, UINT, WPARAM, LPARAM);
//Call Back to Handle View Line Dialog BOX
INT_PTR CALLBACK DlgLine(HWND, UINT, WPARAM, LPARAM);
//Call Back to Handle View Function Dialog BOX
INT_PTR CALLBACK DlgFunction(HWND, UINT, WPARAM, LPARAM);
//Call Back to Handle View Function Dialog BOX
INT_PTR CALLBACK DlgTaskList(HWND, UINT, WPARAM, LPARAM);
//Call Back to Handle Debug QuickWatch Dialog BOX
INT_PTR CALLBACK DlgQuickW(HWND, UINT, WPARAM, LPARAM);
// Callback to handle memory window dialog box
INT_PTR CALLBACK DlgMemory(HWND, UINT, WPARAM, LPARAM);
// Callback to handle pane manager options box
INT_PTR CALLBACK DlgPaneOptions(HWND, UINT, WPARAM, LPARAM);
//Call Back to Handle Debug Set Break Point Message Dialog BOX
INT_PTR CALLBACK DlgMessage(HWND, UINT, WPARAM, LPARAM);
//Call Back to Handle Debug Set Breakpoint Dialog BOX
INT_PTR CALLBACK DlgSetBreak(HWND, UINT, WPARAM, LPARAM);
//Call Back to Debugger exceptions Options Dialog BOX
INT_PTR CALLBACK DlgDbugexcept(HWND, UINT, WPARAM, LPARAM);
// call back to handle user control buttons
LRESULT CALLBACK QCQPCtrlWndProc (HWND, UINT, WPARAM, LPARAM) ;
//Call Back to Handle File Open Merge Save and Open Project
UINT_PTR APIENTRY DlgFile(HWND, UINT, WPARAM, LPARAM);
UINT_PTR APIENTRY GetOpenFileNameHookProc(HWND, UINT, WPARAM, LPARAM);
//Call Back to Handle Project Edit Program List Dialog BOX
INT_PTR CALLBACK DlgEditProject(HWND, UINT, WPARAM, LPARAM);
//Call Back to Handle Edit Confirm Replace Dialog BOX
INT_PTR CALLBACK DlgConfirm(HWND, UINT, WPARAM, LPARAM);
//Call Back to Handle Edit Find Next Dialog BOX
INT_PTR CALLBACK DlgFindNext(HWND, UINT, WPARAM, LPARAM);
// Callback Function for Thread dialog
INT_PTR CALLBACK DlgThread(HWND, UINT, WPARAM, LPARAM);
// Callback Function for Process dialog
INT_PTR CALLBACK DlgProcess(HWND, UINT, WPARAM, LPARAM);
// Callback Function for BrowseDlg dialog
INT_PTR CALLBACK DlgAskBrowse(HWND, UINT, WPARAM, LPARAM);
// Callback Function for BrowseDlg dialog
INT_PTR CALLBACK DlgProcBadSymbols(HWND, UINT, WPARAM, LPARAM);
// Callback Function for BrowseDlg dialog
INT_PTR CALLBACK DlgProc_Adv_BadSymbols(HWND, UINT, WPARAM, LPARAM);
/*
** Describe the set of possible thread and process states.
*/
typedef enum {
tsInvalidState = -1,
tsPreRunning,
tsRunning,
tsStopped,
tsException1,
tsException2,
tsRipped,
tsExited
} TSTATEX;
typedef enum {
psInvalidState = -1,
psNoProgLoaded,
psPreRunning, // haven't hit ldr BP
psRunning,
psStopped,
psExited,
psDestroyed, // only used for ipid == 0
psError // damaged
} PSTATEX;
// See od.h for EXCEPTION_FILTER_DEFAULT type
typedef struct _excpt_node {
struct _excpt_node *next;
DWORD dwExceptionCode;
EXCEPTION_FILTER_DEFAULT efd;
LPSTR lpName;
LPSTR lpCmd;
LPSTR lpCmd2;
} EXCEPTION_LIST;
#define tfStepOver 2
/*
** Create structures which will describe the set of processes and
** threads in the system. These are the Thread Descriptor and
** Process Descriptor structures.
*/
typedef struct TD * LPTD;
typedef struct PD * LPPD;
typedef struct TD {
HTID htid; // HTID for this thread
LPPD lppd; // Pointer to Process descriptor for thread
LPTD lptdNext; // Pointer to sibling threads
UINT itid; // Index for this thread
UINT cStepsLeft; // Number of steps left to run
LPSTR lpszCmdBuffer; // Pointer to buffer containning command to execute
LPSTR lpszCmdPtr; // Pointer to next command to be executed.
UINT flags; // Flags on thread, used by step
TSTATEX tstate; // Thread state - enumeration
UINT fInFuncEval:1; // Currently doing function evaluation?
UINT fFrozen:1; // Frozen?
UINT fGoOnTerm:1; // never stop on termination
UINT fRegisters:1; // print registers on stop event?
UINT fDisasm:1; // print disasm on stop event?
DWORD64 TebBaseAddress; //
LPSTR lpszTname; //
} TD;
typedef struct PD {
HPID hpid; // This is the HPID for this process
MPT mptProcessorType;
LPPD lppdNext; // Pointer to next LPPD on list
LPTD lptdList; // Pointer to list of threads for process
HPDS hpds; // Handle to SH process description structure
UINT ctid; // Counter for tids
UINT ipid; // Index for this process
EXCEPTION_LIST *exceptionList;
LPSTR lpBaseExeName; // Name of exe that started process
PSTATEX pstate; // Process state - enumeration
HANDLE hbptSaved; // BP for deferred use
UINT fFrozen:1; // Frozen?
UINT fPrecious:1; // Don't delete this PD (only for ipid == 0?)
UINT fChild:1; // go or don't on ldr BP
UINT fHasRun:1; // has run after ldr BP
UINT fStopAtEntry:1; // Stop at app entry point?
UINT fInitialStep:1; // doing src step before entrypoint event
RTL_USER_PROCESS_PARAMETERS64 ProcessParameters;
} PD;
#define IDS_SOURCE_WINDOW 100
#define IDS_DUMMY_WINDOW 101
#define IDS_WATCH_WINDOW 102
#define IDS_LOCALS_WINDOW 103
#define IDS_CPU_WINDOW 104
#define IDS_DISASSEMBLER_WINDOW 105
#define IDS_COMMAND_WINDOW 106
#define IDS_FLOAT_WINDOW 107
#define IDS_MEMORY_WINDOW 108
#define IDS_BREAKPOINT_LINE 109
#define IDS_CURRENT_LINE 110
#define IDS_CURRENTBREAK_LINE 111
#define IDS_UNINSTANTIATEDBREAK 112
#define IDS_TAGGED_LINE 113
#define IDS_TEXT_SELECTION 114
#define IDS_KEYWORD 115
#define IDS_IDENTIFIER 116
#define IDS_COMMENT 117
#define IDS_NUMBER 118
#define IDS_REAL 119
#define IDS_STRING 120
#define IDS_ACTIVEEDIT 121
#define IDS_CHANGEHISTORY 122
#define IDS_CALLS_WINDOW 123
#define IDS_SELECT_ALL 124
#define IDS_CLEAR_ALL 125
// Name of the commonly used Dlls, these are normally not changed.
extern const char * const g_pszDLL_EXPR_EVAL;
extern const char * const g_pszDLL_EXEC_MODEL;
extern const char * const g_pszDLL_SYMBOL_HANDLER;
#endif // _WINDBG_