We have a composite USB camera device (WDM and DirectShow compatible), serviced by [url removed, login to view] and [url removed, login to view] under Windows 7/8, that includes a push button. The camera device push button is not an HID. No device INF or additional drivers are required.
In Device Manager, the camera appears in Imaging Devices (thru [url removed, login to view]) and USB Controllers as "Usb Composite Device" (thru [url removed, login to view]).
The camera software includes a now unsupported DLL (we asked the OEM) that appears to run a thread or threads that monitors the interrupt packets sent, and sends an event to the application. We can see the interrupt packet bytes using a USB filter driver utility, so we know that [url removed, login to view] is passing the interrupt packets. We also know this happens because we can run an alternative app that does not use the unsupported DLL at all, and still see the interrupt packets.
We've examined the OEM DLL exported and used function lists. There are calls to CreateFile, CreateThread, DeviceIoControl, CreateSemaphore, Initialize|Enter|DeleteCriticalSection, all of which suggest that a monitor thread is used.
We tried setting up threads with calls to CreateFile (using the relevent USB VID/PID and SetupDi* calls to create the device path), ReadFile and/or DeviceIOControl, but without success. Everything we tried returns Error#1 (wrong function) or similar. Since the now unsupported DLL does manage to do this in USER MODE, obviously there is a solution.
Create some sample code (perhaps 100 lines of code) that successfully monitors the USB packets so that when the button is pressed, an event is created that can be passed to the host app. Please note that a pass-through driver is NOT the solution.
The Selected Freelancer must be able to demonstrate knowledge in dealing with USB devices in the Windows 7 environment, and will most likely have experience with USB firmware.
Our aim is is remove the dependency on the unsupported DLL, to provide full device access for other software projects.