阅读:1780回复:4
关于U盘应用程序开发的问题
U盘的固件程序已经很好运行了,包括盘符已经出现在浏览器中(我是在固定的block中写入引导和FAT信息以能让windows正确读取U盘信息)。
为了能格式化U盘,要开发一个User-mode应用程序,但我不知道如何能在程序中成功打开U盘以便读写。 我的思路是通过SetupDiGetClassDevs函数获取U盘设备的interface然后获得U盘设备路径用CreateFile打开U盘(曾通过此方法打开过一个USB BULK设备,但那套设备的驱动是一同事开发的,我不负责驱动方面的工作,那个GUID是他给出的)。 我想可以通过类似的方法打开我的U盘,但试过几次都不能获取这个Interface。 不知道我这个思路是否正确,如果不能实现,希望在这个问题上有处理经验的高手能给予帮助。 |
|
|
沙发#
发布于:2005-01-04 11:53
思路应该没有问题,如果得不到interface,那可能是你的GUID不对。你得不到接口的GetLastError结果是什么?
|
|
|
板凳#
发布于:2005-01-04 12:40
我的GetLastErr() = 3
我发现,GUID用a5dcbf10-6530-11d2-901f-00c04fb951ed(interface class for USB devices)的确可以检索到USB设备,但它所罗列的是所有的USB设备,因此我想通过PID和VID来进一步确认我想要的设备,但我发现,在DDK给出的例子中,(大侠看rwbulk.cpp中的OpenUsbDevice(...)函数)USB_DEVICE_DESCRIPTOR里正好有可以确认这个设备身份的识别信息,包括VID和PID,但仔细阅读这段程序不难发现,其中定义的两个变量: PUSB_DEVICE_DESCRIPTOR usbDeviceInst; PUSB_DEVICE_DESCRIPTOR *UsbDevices = &usbDeviceInst; 在程序中没有用到。 我不知道MS在给出这个例子的同时给出这两个变量的用处是什么?(还是我理解错误?) |
|
|
地板#
发布于:2005-01-04 13:33
你说的这个例子我没有看过,不过你用的GUID好像有问题,使用该GUID得到的是通用串行总线控制器里的设备,而不是在磁盘驱动器里的存储设备,这个你可以通过设备管理器看到。因为你在我的电脑里看到的U盘属于磁盘驱动器,所以你如果要读些U盘,应该处理磁盘驱动器设备中的USBSTOR类设备。
|
|
|
地下室#
发布于:2005-01-04 21:26
美接触过,怎么学?
|
|