我可以使用 win32 HANDLE 以编程方式将 sent/received 记录到 USB/COM

Can I programmatically log what's sent/received to a USB/COM using a win32 HANDLE

我正在玩 TEC-Microsystem 设备 (DX5100),它提供了一个带有 API 的 C++ dll 来打开连接:

HANDLE OpenSerialPort(char *PortName, DWORD SupporedBaud);

为了调试 pruprose,我想跟踪每个 sent/received 到端口的数据(一种在同一进程中工作的 "sniffer")。由于我可以访问 Windows API 句柄(HANDLE 返回值),有没有办法使用 Win API 设置任何 "listener" 以了解数据何时正在从 USB 端口发送 to/received?

正如@Some programmer dude 所说,不能保证这是一个有效的 Windows 句柄,但即使是这样,您的选择也是有限的:

  1. 你需要一个内核模式驱动程序来监视 i/o 句柄
  2. 您需要使用 Detours or mhook 等库将 reading/writing 函数修补到句柄。

后一种方法(与任何 API 用户级别的挂钩技术一样)是不可靠的,因为如果目标进程使用任何类型的诡计来访问句柄,您将不会收到通知。

它可以在同一进程中通过自我修补(更改 IAT table)或在远程进程中通过注入完成,通过 APP_Init DLL 或其他一些注入技术像 LoadLibrary/CreateRemoteThread 那样会进行修补。在任何情况下,您都必须在记录后将请求转发给实际的 ReadFile/WriteFile/DeviceIOControl 函数。

要更改 IAT table,您可能需要参考我的 Load EXE as DLL article which uses the same techique in an unrelated mission. This article, this article and this article 也有更多信息。