我有一个定制开发的USB读卡器。我正在使用以下代码与设备进行交互和iterrate:
http://www.codeproject.com/KB/system/usbeject.aspx
上面的代码使用以下行提供'eject'方法:
Native.CM_Request_Device_Eject_NoUi(device.InstanceHandle, IntPtr.Zero, null, 0, 0);
然而,这种'弹出'方法卸载整个驱动器,而不是简单地弹出媒体卡。
为什么这是一个问题是因为我想'弹出'媒体卡,然后放入另一个。然而,当整个阅读器被弹出时,我必须拔出/重新插入设备才能显示备份。
在Windows资源管理器中,当我右键单击“弹出”时,它按照我想象的方式运行,它可以安全地移除存储卡但不能读取读卡器。
如何在c#中实现这种不同类型的弹出?
答案 0 :(得分:1)
我是同一个任务。 :)
您需要使用弹出可移动媒体。 请参阅此处的c ++示例:How To Ejecting Removable Media
答案 1 :(得分:1)
我在搜索“CM_Request_Device_Eject_NoUi”时意外地来到这里,看到它类似于我最近通过将类似的解决方案组合在一起所做的解决方案。原谅迟到的答案。
这对我有用(这也解决了我在其他SO问题上看到的一些问题,这些问题来自Microsoft示例,而不是“在使用操作系统安全删除硬件时系统执行的所有操作”) :
AutoEjectVolume
的调用替换为实际上AutoEjectVolume
方法的正文代码How to Prepare a USB Drive for Safe Removal。请注意,此后期工作在很大程度上依赖于其他两篇CodeProject文章 - 包括您在问题中引用的文章 - 移植到C#。在2中,我说“实际上”是因为 - 实际上 - 在两个解决方案中使用相同的RemoveDrive
,并且在CodeProject hVolume
方法中执行所有检查更有意义em>之前在Microsoft解决方案中调用RemoveDrive
,LockVolume
或DismountVolume
,然后调用PrepareRemovalOfVolume
,如下所示CodeProject解决方案。
简短的伪代码摘要:
CM_Request_Device_Eject_NoUi
(CodeProject)CreateFile
,
如果上述任何步骤失败(CodeProject)DismountVolume
,LockVolume
和DismountVolume
使用从PrepareRemovalOfVolume
(Microsoft)hVolume
CreateFile
hVolume
实例句柄(CodeProject)