Thanks for the reply. That's very good information. I think I am describing my function (and interface) as vendor-specific. Here's the interface descriptor:
===>Interface Descriptor<===
bLength: 0x09
bDescriptorType: 0x04
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x04
bInterfaceClass: 0xFF -> Vendor Specific Device
bInterfaceSubClass: 0xFF
*!*CAUTION: This appears to be an invalid bInterfaceSubClass
bInterfaceProtocol: 0xFF
iInterface: 0x00
*!*CAUTION: 0xFF is a prerelease Class IDAnd the device descriptor:
===>Device Descriptor<===
bLength: 0x12
bDescriptorType: 0x01
bcdUSB: 0x0200
bDeviceClass: 0xFF -> This is a Vendor Specific Device
bDeviceSubClass: 0xFF
bDeviceProtocol: 0xFF
bMaxPacketSize0: 0x08 = (
Bytes
idVendor: 0x0925 = Vendor ID not listed with USB.org as of 03-19-2008
idProduct: 0x1456
bcdDevice: 0x0001
iManufacturer: 0x01
English (United States) "ProCure TDC"
iProduct: 0x02
English (United States) "Procure Engine Control"
iSerialNumber: 0x00
bNumConfigurations: 0x01as dumped from USBView or whatever program WDK ships. As you can see, the interface and the device are now defined to be vendor-specific (before I read your post, only the interface descriptor had been set to vendor specific class by default by the libraries, and device class in the descriptor had been set to 0).
Let me know if I'm missing something, but I still cannot successfully target anything besides Interface in the bmRequestType (of the setup packet), and targeting Interface still masks the lower byte of bIndex (specifying the index I now understand).
Thanks again for your help!