|
|
#define INITIAL_LIST_SIZE 32
#define LIST_CHUNK_SIZE 10
#define WM_SENDTEXT WM_USER
#define WM_ENDTHREAD (WM_USER+1)
#define DBO_OUTPUTDEBUGSTRING 0x0001
#define DBO_EXCEPTIONS 0x0002
#define DBO_PROCESSCREATE 0x0004
#define DBO_PROCESSEXIT 0x0008
#define DBO_THREADCREATE 0x0010
#define DBO_THREADEXIT 0x0020
#define DBO_DLLLOAD 0x0040
#define DBO_DLLUNLOAD 0x0080
#define DBO_RIP 0x0100
#define DBO_ALL 0xFFFF
struct AttachInfo { DWORD dwProcess; HWND hwndFrame; };
struct ExecInfo { LPSTR lpszCommandLine; HWND hwndFrame; };
struct SystemWindowInfo { HWND hwndFrame; };
struct StringInfo { DWORD dwProcess; DWORD dwThread; DWORD dwParentProcess; LPCSTR lpszText; int cLines; };
class GrowableList { public: GrowableList(int cbSizeIn); virtual ~GrowableList();
int Count(); BOOL FindItem(void *pvFind, int *piFound = NULL); void GetItem(int iItem, void *pvItem); void InsertItem(void *pvItem); void RemoveItem(void *pvItem); void RemoveItem(int iItem);
protected: virtual BOOL IsEqual(void *pv1, void *pv2) = 0;
int cbSize; int cItemsCur; int cItemsMax; void *pvData; };
void __cdecl AttachThread(void *pv); void __cdecl ExecThread(void *pv); void __cdecl SystemThread(void *pv);
#ifdef _DBDBG32_
#define EXCEPTION_VDM_EVENT 0x40000005L
#define BUF_SIZE 1024
#define MODULE_SIZE 32
struct ProcessInfo { DWORD dwProcess; HANDLE hProcess; char rgchModule[MODULE_SIZE]; };
class ProcessList : public GrowableList { public: ProcessList(); ~ProcessList();
protected: virtual BOOL IsEqual(void *pv1, void *pv2); };
struct ThreadInfo { DWORD dwProcess; DWORD dwThread; };
class ThreadList : public GrowableList { public: ThreadList(); ~ThreadList();
protected: virtual BOOL IsEqual(void *pv1, void *pv2); };
struct DllInfo { DWORD dwProcess; LPVOID lpBaseOfDll; char rgchModule[MODULE_SIZE]; };
class DllList : public GrowableList { public: DllList(); ~DllList();
protected: virtual BOOL IsEqual(void *pv1, void *pv2); };
void __cdecl DebugThread(HWND hwndFrame, DWORD dwProcess); void SendText(HWND hwndFrame, DEBUG_EVENT *pDebugEvent, DWORD dwParentProcess, LPCSTR lpszText, WORD wEvent);
void ProcessExceptionEvent(EXCEPTION_DEBUG_INFO *pException, LPSTR lpszBuf);
void GetModuleName(HANDLE hFile, HANDLE hProcess, DWORD_PTR BaseOfImage, LPSTR lpszBuf);
#endif // _DBDBG32_
#ifdef _DBWIN32_
#define MAX_LINES 500
#define MAX_HISTORY 5
#define INACTIVE_MINIMIZE 0
#define INACTIVE_NONE 1
#define INACTIVE_CLOSE 2
struct DbWin32Options { RECT rcWindow; int nShowCmd; BOOL fOnTop; BOOL fChildMax; int nInactive; BOOL fNewOnProcess; BOOL fNewOnThread; WORD wFilter; CString rgstCommandLine[MAX_HISTORY]; };
class DbWin32Child;
struct WindowInfo { DWORD dwProcess; DWORD dwThread; DbWin32Child *pwndChild; };
class WindowList : public GrowableList { public: WindowList(); ~WindowList();
protected: virtual BOOL IsEqual(void *pv1, void *pv2); };
class DbWin32App : public CWinApp { public: DbWin32App(); ~DbWin32App();
void ReadOptions(); void WriteOptions(WINDOWPLACEMENT *pwpl);
protected: virtual BOOL InitInstance();
DbWin32Options dbo; };
class DbWin32Edit : public CEdit { public: DbWin32Edit(); ~DbWin32Edit();
BOOL Create(CWnd *pwndParent); };
class DbWin32Child : public CMDIChildWnd { public: DbWin32Child(WORD wFilterIn); ~DbWin32Child();
void AddText(WORD wEvent, LPCSTR lpszText, int cLines, BOOL fSetTitle);
protected: DbWin32Edit wndEdit; CFont fontCur; WORD wFilter;
private: // Windows messages
afx_msg int OnCreate(LPCREATESTRUCT lpcs); afx_msg void OnDestroy(); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnMDIActivate(BOOL bActivate, CWnd *pwndActivate, CWnd *pwndDeactivate); afx_msg BOOL OnNcActivate(BOOL bActivate); // Command handlers
afx_msg void OnFileSaveBuffer(); afx_msg void OnEditCopy(); afx_msg void OnEditClearBuffer(); afx_msg void OnEditSelectAll(); // Idle update handlers
// Notification messages
afx_msg void OnMaxText(); DECLARE_MESSAGE_MAP() };
class DbWin32Frame : public CMDIFrameWnd { public: DbWin32Frame(DbWin32Options *pdbo); ~DbWin32Frame();
void ExecProcess(LPCSTR lpszCommandLine);
void ChildMaximized(BOOL fMax);
void FileSystem();
protected: virtual BOOL PreCreateWindow(CREATESTRUCT &cs);
WindowList wl; DbWin32Child *pwndSystem; DbWin32Options *pdbo; BOOL fInCreate; BOOL fNT351;
private: // Windows messages
afx_msg void OnDestroy(); afx_msg LRESULT OnSendText(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnEndThread(WPARAM wParam, LPARAM lParam); // Command handlers
afx_msg void OnFileRun(); afx_msg void OnFileAttach(); afx_msg void OnFileSystem(); afx_msg void OnFileExit(); afx_msg void OnOptions(); afx_msg void OnAbout(); // Idle update handlers
afx_msg void OnUpdateFileSystem(CCmdUI *pCmdUI); DECLARE_MESSAGE_MAP() };
class DbWin32RunDlg : public CDialog { public: DbWin32RunDlg(CString *pstIn); ~DbWin32RunDlg();
CString &GetCommandLine();
protected: virtual BOOL OnInitDialog();
CString *pst; CString stCommandLine;
private: // Windows messages
afx_msg void OnEditChange(); afx_msg void OnSelChange(); afx_msg void OnBrowse(); // Command handlers
// Idle update handlers
DECLARE_MESSAGE_MAP() };
class DbWin32AttachDlg : public CDialog { public: DbWin32AttachDlg(WindowList *pwlIn); ~DbWin32AttachDlg();
DWORD GetSelectedProcess();
protected: virtual BOOL OnInitDialog(); virtual void OnOK();
WindowList *pwl; DWORD dwProcess;
private: // Windows messages
afx_msg void OnDoubleClick(); // Command handlers
// Idle update handlers
DECLARE_MESSAGE_MAP() };
class DbWin32OptionsDlg : public CDialog { public: DbWin32OptionsDlg(DbWin32Options *pdboIn); ~DbWin32OptionsDlg();
protected: virtual BOOL OnInitDialog(); virtual void OnOK();
DbWin32Options *pdbo;
private: afx_msg void OnClicked(); DECLARE_MESSAGE_MAP() };
inline CString &DbWin32RunDlg::GetCommandLine() { return(stCommandLine); }
inline DWORD DbWin32AttachDlg::GetSelectedProcess() { return(dwProcess); }
#endif // _DBWIN32_
|