I'm developing a USB mass storage device with an additional
functionality.

There is no problem in locating the device's symbolic link, using
SetupDiXXX functions. But if I try to DeviceIoControl()
IOCTL_STORAGE_GET_DEVICE_NUMBER, IOCTL_SCSI_GET_INQUIRY_DATA, and
other disk and storage control codes as well, after opening the device
through CreateFile() with the following symbolic link name, it fails
with the error code 50, which means ERROR_NOT_SUPPORTED.

\??\USB#Vid_0c76&Pid_0005#0304281630200#{a5dcbf10-6530-11d2-901f-00c04fb951ed}

To be more precise, my USB storage device supports Bulk-Only Transport
protocol and announces itself as a SCSI transparent subclass device.

If there is anybody who had ever stuck in this type of problem, please
give me some clues for solving it.


****

I have one more question. I'm in the position to develop hardware and
software. So for now, I'm trying to compose a small program
controlling a mass storage device of another manufacturer. If I'm to
develop the firmware without relying on the USB controller customized
to the specific application, do I have to write a firmware parsing all
the SCSI command set? Or is there any documentation that specifies
which part of the standard SCSI command set USB mass storage device
spec supports? I'm afraid if I have to deal with a whole bunch of SCSI
command set. Need some advice.

Thanks