我正在尝试用 C# 完成 Live File System(或“Live UDF”)光盘。根据我阅读 MSDN 和 TechNet 文章以及各种论坛帖子的了解,Image Mastering API(或 IMAPI)不支持这种类型的文件系统,并且在我的编码工作中,我未能成功使用 IMAPI 完成 LiveUDF 光盘。因此,我使用了 FSCTL_MAKE_MEDIA_COMPATIBLE 控制代码的 DeviceIoControl 函数。
首先,我正在同步调用 DeviceIoControl,但该函数将返回 1117,并且磁盘最终会在几分钟后完成。这种结果是不可接受的,因为我需要该过程仅在最终失败或实际成功时返回。
接下来,我通过使用带有 FILE_FLAG_OVERLAPPED (0x40000000) dwFlagsAndAttributes 标志的 CreateFile 打开设备句柄并将 NativeOverlapped 对象传递给 DeviceIoControl 调用,继续异步调用 DeviceIoControl。在此之前,很明显,我设置了一个 IOCompletionCallback 来处理任何重叠事件。
如上所述异步调用 DeviceIoControl 时,它仍然几乎立即返回 1117(就像同步调用时一样),永远不会调用 IOCompletionCallback 方法,并且磁盘会在几分钟后完成。
我的问题是:如何在 Windows 7 平台上使用 C# 和 DeviceIoControl(同步或异步,能够“等待”其进程完成)完成 C# 中的 Live File System(或“Live UDF”)光盘捕捉最终的成功或失败结果)?
非常感谢提前。