tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
阅读:2587回复:13

自己做一个设备弹出程序遇到麻烦!

楼主#
更多 发布于:2004-06-21 23:37
最近同事情我帮他做一个弹出u盘的程序,要求是:给出盘符,找到相应u盘,然后将其弹出。

做了不少实验,最终没能成功。问题主要是无法通过盘符,找到相应的usb设备。盘符是一个存储卷的符号连接,调用QueryDosDevice()可以通过盘符找到存储卷的物理设备对象名,比如\Device\HarddiskVolume8。然后线就断了,连不下去了。最后能弹出的应该是一个usb接口的设备。我通过SetupDiGetClassDevs,SetupDiEnumDeviceInfo获得了u盘的设备信息元素的上下文结构,然后调用CM_Request_Device_Eject弹出设备实例。但是如何将盘符和设备实例关联起来,实在是难倒我了。请各位同仁帮忙,谢谢!

省元坊
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-25 20:49
有点夸张吧?我只需要通过盘符找到相应的usb设备实例。
当我们插入u盘后,系统托盘中会出现一个小箭头图标,用鼠标点击它,会弹出所有可以弹出的设备的描述,u盘设备还会带上系统分配给它的盘符,比如“USB Mass Storage(H:)”。也许我可以换一种问法,当我们点击这个小箭头之后,发生了什么动作,是怎样实现这些动作的?
省元坊
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-08 20:40
目前还没解决,请教了一些高人,有两种观点,一中认为可以注册表,二是
省元坊
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-08 20:50
目前还没解决,请教了一些高人,有两种观点,一种认为可以从注册表中寻找相关信息,第二种观点认为可以通过询问usb总线驱动或usbstor驱动来获取相关信息。

请各位楼上楼下楼前楼后的兄弟多给与关注,多提供帮助!
省元坊
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-31 01:58
问题解决了
省元坊
tigerL
驱动小牛
驱动小牛
  • 注册日期2003-12-24
  • 最后登录2008-10-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望23点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-08-06 23:09
兄弟 怎么解决的 能否说给我们听听? 不胜感激!



先给点提示,应用BusRelations和RemovalRelations两种类型的IRP_MN_QUERY_DEVICE_RELATIONS对相关设备对象进行查询,可以得到返回结果。可参看ddk\\src\\\general\\toaster\\toastmon\\toastmon.c中的ToastMon_GetTargetDevicePdo()函数。

具体的实现代码在实验室,等取回来再给大家贴出来!少等!
省元坊
游客

返回顶部