我正在玩TEC-Micsystem设备(DX5100),它提供了一个带有API的C++dll来打开连接:
HANDLE OpenSerialPort(char *PortName, DWORD SupporedBaud);
为了调试pruprose,我想跟踪发送/接收到端口的每一个数据(一种在同一进程中工作的"嗅探器")。由于我可以访问Windows API句柄(HANDLE
返回值),是否有方法使用Win API设置任何"侦听器",以了解何时向USB端口发送数据/从USB端口接收数据?
正如@一些程序员所说,不能保证这是一个有效的Windows句柄,但即使是这样,你的选择也是有限的:
- 您需要一个内核模式驱动程序来监视句柄的i/o
- 您需要使用Detours或mhook等库将读/写功能修补到句柄
后一种方法(与用户级别的任何API挂钩技术一样)是不可靠的,因为如果目标进程使用任何欺骗手段来访问句柄,则不会通知您。
它可以在同一进程内通过自修补(更改IAT表)来完成,也可以在具有注入的远程进程中通过APP_Init DLL或其他一些注入技术(如LoadLibrary/CreateRemoteThread)来完成修补。在任何情况下,您都必须在登录后将请求转发到实际的ReadFile/WriteFile/DeviceIOControl功能。
要更改IAT表,您可能需要参考我的LoadEXE asDLL文章,该文章在一个不相关的任务中使用了相同的技术。这篇文章,这篇文章和这篇文章也有更多的信息。