I have a piece of proprietary hardware that I'm trying to reverse engineer and write a cross-platform open-source driver for. This device has an IR camera on it, and it seems to be using the UVC protocol. On linux, de device is exposed as a /dev/video0 camera, and although it doesn't show up in any webcam-based application, I can use OpenCV to pull frames from it.
On Windows, it is a bit more obfuscated. The camera doesn't show up in any application, and only the devices' Windows-only proprietary driver can interface with it. In Device Manager the device shows up under 'Imaging devices' and it uses the ksthunk.sys
and usbvideo.sys
drivers.
I've tried everything I could think of to pull frames off of the camera, but every attempt failed. First of all, I've tried connecting to it with OpenCV, but i couldn't find the right device id. I've even tried brute-forcing the device id by trying to connect to every possible number within a huge interval, but no luck.
I've also tried using some low-level uvc debugging tools from the Windows SDK (GraphEdit and KsStudio) but none of them could connect to the camera.
One thing I did notice is that actual webcams have registry keys FilterData
and MSCameraFlags
in 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
, while this device doesn't. The value FilterData
seems to contain values regarding resolution and image compression, so the lack of this key in my device's registry might have something to do with windows not seeing it as a webcam.
Obviously the device's developers did something to make sure the camera doesn't show up as a regular webcam, because it is not meant to be used as such.
My ultimate goal is to be able to use the IR camera from OpenCV in my own software, but I have no idea how to get started with proper reverse engineering of the device.