C# 从读卡器C中弹出存储卡#
我有一个定制开发的USB读卡器。我使用以下代码在设备上进行交互和迭代: 上面的代码提供了使用以下行的“弹出”方法:C# 从读卡器C中弹出存储卡#,c#,usb,C#,Usb,我有一个定制开发的USB读卡器。我使用以下代码在设备上进行交互和迭代: 上面的代码提供了使用以下行的“弹出”方法: Native.CM_Request_Device_Eject_NoUi(device.InstanceHandle, IntPtr.Zero, null, 0, 0); 但是,此“弹出”方法将卸载整个驱动器,而不是简单地弹出媒体卡 这是一个问题,因为我想“弹出”媒体卡,然后放入另一个。但是,当整个读卡器弹出时,我必须拔下/重新插入设备才能显示出来 在windows资源管理器中,
Native.CM_Request_Device_Eject_NoUi(device.InstanceHandle, IntPtr.Zero, null, 0, 0);
但是,此“弹出”方法将卸载整个驱动器,而不是简单地弹出媒体卡
这是一个问题,因为我想“弹出”媒体卡,然后放入另一个。但是,当整个读卡器弹出时,我必须拔下/重新插入设备才能显示出来
在windows资源管理器中,当我右键单击“弹出”时,它会按照我的想象操作,安全地移除存储卡,但不会移除读卡器
如何在c#中实现这种不同类型的弹出?我可以完成相同的任务。:)
您需要使用弹出可移动媒体。
请参阅C++示例:我在搜索“CMiReestEngestDeice ExjExtUni”时意外地来到这里,并发现它与我最近通过将相似的解决方案拼凑起来的解决方案类似。原谅迟来的回答 以下是对我有效的方法(这也解决了我在其他SO问题上看到的一些问题,这些问题涉及Microsoft示例中的
AutoEjectVolume
,而不是在使用操作系统安全删除硬件时系统所做的一切):
AutoEjectVolume
的调用替换为实际上是RemoveDrive
方法主体的代码。请注意,后面的这项工作在很大程度上依赖于另外两篇CodeProject文章——包括您在问题中引用的那篇——移植到C#hVolume
,在Microsoft解决方案中调用LockVolume
、DismountVolume
或PrepareRemovalOfVolume
之前,在CodeProjectRemoveDrive
方法中执行所有检查更有意义,然后调用CM\u Request\u Device\u Eject\u NoUi
,如CodeProject解决方案所示
简短的伪代码摘要:
- 使用
(CodeProject)打开卷CreateFile
- 获取驱动器的设备实例句柄和驱动器的父设备 实例句柄(CodeProject)
- 在调用之前退出-特别是-
, 如果上述任何步骤失败(CodeProject)卸载卷
- 调用
,LockVolume
,和DismountVolume
使用从PrepareRemovalOfVolume
(Microsoft)返回的CreateFile
hVolume
- 此后,您可以随时关闭
hVolume
- 在驱动器的父设备上调用
CM\u请求\u设备\u弹出\u NoUi
实例句柄(CodeProject)