【发布时间】:2015-05-20 13:47:57
【问题描述】:
我正在开发一个使用 Windows 7 作为操作系统和 Win32 C++ 来检测和管理 USB 驱动器的信息亭应用程序。我们刚刚发现了一个错误,如果 USB 以某种方式损坏,操作系统将弹出以下对话框,该对话框隐藏在 kiosk 应用程序后面,因此永远不会显示。
当用户复制到此驱动器时,应用程序崩溃。
我一直在寻找一种方法来检测何时收到 USB DBT_DEVICEARRIVAL 通知这个新添加的 USB 是否已损坏,但没有找到任何好的可能性。我想出的是调用 DeviceIoControl() 并将 IOCTL_DISK_GET_PARTITION_INFO 作为控制代码传递的可能性,因为返回的 PARTITION_INFORMATION 结构可以告诉我分区类型是否被识别。但这并不一定告诉我 USB 是否损坏。我认为这更有可能判断这是否是公认的 NTFS 格式,而不是由 Linux 或 Mac 系统编写的格式。
谁能告诉我如何检测新添加的 USB 驱动器中的损坏,以便我可以采取必要的后续步骤?
还有一件事。我试图故意在我的 USB 驱动器上创建损坏,以便我可以模拟我们的用户发现的问题,但 Win7 似乎足够聪明,可以阻止我这样做。有谁知道创建损坏的 USB 驱动器用于测试目的的方法?
【问题讨论】:
-
嗯,当你只有一个小问题时,不要试图解决一个大问题。将文件复制到磁盘驱动器永远不会使您的应用程序崩溃。它失败的更多原因与损坏的闪存驱动器无关。从测试复制到完整驱动器开始,这很容易。
-
除了按照 Hans Passant 的建议修复您的崩溃错误之外,您可能还希望禁用弹出窗口:sevenforums.com/tutorials/… 我没有尝试过,但是创建 USB 驱动器的简单方法导致 Windows 显示此对话框的方法是在将大文件复制到其中的过程中物理删除 FAT32 格式的驱动器。
-
抱歉延迟回来。拉扯别的东西。我了解我的应用程序崩溃存在问题。这需要修复,但我正在寻找一种方法来再次创建这种情况,以便我可以准确地看到坠机时发生的事情。 Codegaurd 在下面给出了一个答案,似乎给了我我需要的东西。感谢您的意见。
-
目前正在继续调查。将发布我发现的内容。
标签: c++ winapi usb corruption