C# 从读卡器C中弹出存储卡#

C# 从读卡器C中弹出存储卡#,c#,usb,C#,Usb,我有一个定制开发的USB读卡器。我使用以下代码在设备上进行交互和迭代: 上面的代码提供了使用以下行的“弹出”方法: Native.CM_Request_Device_Eject_NoUi(device.InstanceHandle, IntPtr.Zero, null, 0, 0); 但是,此“弹出”方法将卸载整个驱动器,而不是简单地弹出媒体卡 这是一个问题,因为我想“弹出”媒体卡,然后放入另一个。但是,当整个读卡器弹出时,我必须拔下/重新插入设备才能显示出来 在windows资源管理器中,

我有一个定制开发的USB读卡器。我使用以下代码在设备上进行交互和迭代:

上面的代码提供了使用以下行的“弹出”方法:

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#
  • 在2中,我之所以说“有效”,是因为实际上,在两种解决方案中使用相同的
    hVolume
    ,在Microsoft解决方案中调用
    LockVolume
    DismountVolume
    PrepareRemovalOfVolume
    之前,在CodeProject
    RemoveDrive
    方法中执行所有检查更有意义,然后调用
    CM\u Request\u Device\u Eject\u NoUi
    ,如CodeProject解决方案所示

    简短的伪代码摘要:

    • 使用
      CreateFile
      (CodeProject)打开卷
    • 获取驱动器的设备实例句柄和驱动器的父设备 实例句柄(CodeProject)
    • 在调用之前退出-特别是-
      卸载卷
      , 如果上述任何步骤失败(CodeProject)
    • 调用
      LockVolume
      DismountVolume
      ,和
      PrepareRemovalOfVolume
      使用从
      CreateFile
      (Microsoft)返回的
      hVolume
    • 此后,您可以随时关闭
      hVolume
    • 在驱动器的父设备上调用
      CM\u请求\u设备\u弹出\u NoUi

      实例句柄(CodeProject)

    它不应该是“Aweso”?…或者它应该是“it is”而不是属于它,或者是“Aweso”?它是Aweso:),但它的名字是渴望主页。必须点击它才能看到完整的配置文件:)@“没有我,它只是一个简单的东西”,我将代码移植到C#并可以共享。链接现在已断开