WEB开发网
开发学院软件开发VC 定制调试诊断工具和实用程序(7) 阅读

定制调试诊断工具和实用程序(7)

 2006-07-20 11:42:21 来源:WEB开发网   
核心提示: Figure 11WindowDump 中的异常编码WindowDump 的背后并没有什么玄机,唯一有趣的地方是 Windows 通常允许 GetWindowText 和 WM_GETTEXT 操作不同的进程,定制调试诊断工具和实用程序(7)(4),但对于列表视图和树型视图这样的公用控件除

Figure 11 WindowDump 中的异常编码

WindowDump 的背后并没有什么玄机。唯一有趣的地方是 Windows 通常允许 GetWindowText 和 WM_GETTEXT 操作不同的进程。但对于列表视图和树型视图这样的公用控件除外。Jeffrey Richter 在他的 Q&A Win32(MSJ September 1997)专栏中解释了如何 dump 另外一个进程中列表视图的内容,附带一个范例程序 LV2Clip。下面是一些 WindowDump 能盗取其内容的窗口类:Edit、ScrollBar、ListBox、ComboBox、ListView 和 TreeView。根据这些类的窗口内容,你还能得到 Figure 12 所列出的信息。

有关 WindowsDump 实现的最后一个重点是进程 ID。从窗口句柄入手,使用 GetWindowThreadProcessId 不难确定线程以及负责创建该线程的进程。如果你还想知道模块名,用 GetWindowModuleFileName 可能会碰壁。与在文档中给出的信息相反,这个 API 函数在 Windows NT、Windows 2000 或 Windows XP 下调用失败。你得钻研知识库的文章 Q228469 查明原因。

在这样情况下,你应该用 PSAPI 及其 GetModuleFileNameEx 函数。它以进程和 hModule 模块句柄为参数,返回对应的路径名。为了查出某一个进程的可执行文件路径名,hModule 应该为 0。不要使用 0x400000:某些进程被加载到不同的地址,如 winlogon 和 Task Manager 在 0x1000000,ntvdm 在 f000000 以及Microsoft Word 2000 在 0x30000000。

参考资料

  • The Win32 Debugging Application Programming Interface;
  • Bugslayer: Windows 2000 and LDR Messages, A COM Symbol Engine, Finding Bloated Functions, and More DEB Sample: Debug Event Browser;
  • Spawn Console Processes with Redirected Standard Handles;
  • GetWindowModuleFileName & GetModuleFileName Work Only with the Calling Process
  • 在后续文章中,我将介绍 CreateRemoteThread,命令行及其它。

    (待续)

    上一页  1 2 3 4 

    Tags:定制 调试 诊断

    编辑录入:爽爽 [复制链接] [打 印]
    赞助商链接