我有一块专有硬件,我正在尝试对其进行逆向工程并为其编写跨平台开源驱动程序。这个设备上有一个红外摄像头,它似乎在使用 UVC 协议。在 linux 上,de 设备作为 /dev/video0 摄像头公开,虽然它没有出现在任何基于网络摄像头的应用程序中,但我可以使用 OpenCV 从中提取帧。
在 Windows 上,它有点模糊。相机不会出现在任何应用程序中,只有设备的仅限 Windows 的专有驱动程序才能与其交互。在设备管理器中,设备显示在“成像设备”下,它使用ksthunk.sys和usbvideo.sys驱动程序。
我已经尝试了所有我能想到的从相机上取下框架的方法,但每次尝试都失败了。首先,我尝试使用 OpenCV 连接到它,但我找不到正确的设备 ID。我什至尝试通过尝试在一个巨大的间隔内连接到每个可能的数字来强制设备 ID,但没有运气。
我还尝试使用 Windows SDK(GraphEdit 和 KsStudio)中的一些低级 uvc 调试工具,但它们都无法连接到相机。
我注意到的一件事是实际的网络摄像头有注册表项FilterData和MSCameraFlagsin HKLM\CurrentControlSet\Control\DeviceClasses\{e5323777-f976-4f5b-9b55-b94699c46e44}\##?#USB#VID_045E&PID_0766&MI_00#6&1d047af0&0&0000#{e5323777-f976-4f5b-9b55-b94699c46e44}\#global\Device Parameters,而这个设备没有。该值FilterData似乎包含有关分辨率和图像压缩的值,因此我的设备注册表中缺少此键可能与 Windows 未将其视为网络摄像头有关。
显然,该设备的开发人员做了一些事情来确保相机不会显示为常规网络摄像头,因为它不应该被这样使用。
我的最终目标是能够在我自己的软件中使用来自 OpenCV 的红外摄像头,但我不知道如何开始对设备进行适当的逆向工程。