Я пытаюсь доработать оптический диск Live File System (или Live UDF) на С#. Из того, что я понял из статей MSDN и TechNet, а также различных сообщений на форумах, Image Mastering API (или IMAPI) не поддерживает этот тип файловой системы, и в моих усилиях по кодированию мне не удалось завершить работу над диском LiveUDF с использованием IMAPI. В результате я использую функцию DeviceIoControl с управляющим кодом FSCTL_MAKE_MEDIA_COMPATIBLE.
Во-первых, я вызывал DeviceIoControl синхронно, но функция возвращала 1117, и через несколько минут диск становился финализированным. Этот результат неприемлем, поскольку мне нужно, чтобы процесс возвращался только в случае окончательной неудачи или фактического успеха.
Затем я перешел к асинхронному вызову DeviceIoControl, открыв дескриптор устройства с помощью CreateFile с флагом FILE_FLAG_OVERLAPPED (0x40000000) dwFlagsAndAttributes и передав объект NativeOverlapped вызову DeviceIoControl. Перед этим, очевидно, я настроил IOCompletionCallback для обработки любых событий Overlapped.
При асинхронном вызове DeviceIoControl, как описано, он по-прежнему возвращает 1117 почти сразу (как и при синхронном вызове), метод IOCompletionCallback никогда не вызывается, и диск становится финализированным через несколько минут.
У меня вопрос: Как мне финализировать оптический диск Live File System (или Live UDF) в C# на платформе Windows 7, используя C# и DeviceIoControl (синхронно или асинхронно, с возможностью «ожидания» его процесс, который нужно завершить, чтобы зафиксировать окончательный результат успеха или неудачи)?
Большое спасибо заранее.