347 lines
6 KiB
C
347 lines
6 KiB
C
|
#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_
|