阅读:1865回复:7
有一个问题困扰我很久了,我问了很长时间也没人能解决
我要在程序中识别不同的USB设备,然后把该设备的连接成功的信息和该usb设备的盘符(E:,F:之类的)当作参数传递,该usb设备的驱动已经写好了,插在pc上可以正常使用,并且会自动生成盘符,不过该盘符不是固定的,随着不同的情况(如安装了虚拟光碟或其他usb设备)盘符会自动变化,那么我如何才能正确的获得我需要的信息(该设备的连接成功的信息和该usb设备的盘符)呢?
写usb驱动的人告诉我,这个usb的hardwareID是不变的,于是我利用windowsAPI函数SetupDiGetClassDevs,SetupDiEnumDeviceInfo,SetupDiEnumDeviceInfo获取该设备的hardwareID,于是能够正确的判断该usb设备,可是就是无法获得盘符信息,我试了各种方法,包括GetVolumeInformation,QueryDosDevice,GetDriverType,查注册表等等,就是无法同时获得设备的连接成功的信息(即该设备的hardwareID)和该usb设备的盘符,另外我还试了CreateFile和DeviceIoConctrl,还是不行,我查遍了整个MSDN也找不到答案,而我又是刚刚学写驱动程序,到底应该怎么做?万分感谢 |
|
沙发#
发布于:2002-05-04 09:51
help?
|
|
板凳#
发布于:2002-05-04 11:18
首先声明:我不是高手。
我看了以下,控制面板中--系统--磁盘驱动器,如能映射成盘符,则能找到相应设备,打开它,将“起始盘符”,“结束盘符”设为一样就可以了。 能否将源程序E_mail给我,我仔细看一下,然后共同学习、研究 free_best@sina.com |
|
|
地板#
发布于:2002-05-04 13:54
我希望由程序去取,而不是改变用户机器的设置,另2000下没有这项设置了
|
|
地下室#
发布于:2002-05-05 23:55
你的app会一直运行吗?
|
|
|
5楼#
发布于:2002-05-06 09:17
我的app不会一直运行,用户可以随便打开或关闭,不会在我的app运行的过程中我需要知道这些信息
|
|
6楼#
发布于:2002-12-11 11:13
我记得在哪本authorware6.0书上看到过你的这种情况,查找最后的盘符,只不过它是用authorware实现的,你去看看,可能对你的思路有帮助了
|
|
|
7楼#
发布于:2003-06-19 12:04
----------引用-----------------------
Q: larryhh: 如果在pc上的usb口接一个hub扩展到8个端口,都插上u盘,则会有8个可移动磁盘的逻辑盘符出现,那我如何分辨哪一个盘符对应的是哪个端口呢,请大虾们指点救命 A: rayyang2000: 应该参考DDK中storage的内容,scsi的资料也要用到。 主要是发送scsi pass through和aspi。 2k下用CreateFile可以直接打开每个drive,用inquiry看看是不是你要的u盘。如果是,对应的CreateFile的第一个参数就是drive letter。详细的code可以看ddk中的spti代码。 9x下面就蛮复杂的,要用aspi代替spti做上面的事情。其中,SC_GET_DISK_INFO的SRB_Int13DriveInfo就是drive letter。但按照ddk的解释,似乎只有在某些bit flag符合的情况下,这个参数才有效。9x ddk里面有sample codes。 ----------引用------------------------ rayyang2000的方法是可以找出特定的U盘(我已实现),但是我现在的情况是要把插在PC上的所有的U盘的盘符和它的VID匹配起来.请问有什么方法?谢谢! 请讨论:MSN:xinjian_chen@hotmail.com |
|
|