Обнаружение пустоты носителя DVD-RAM на Windows 7 x64
Я пытаюсь определить, является ли носитель DVD-RAM пустым или нет, с C++ в Windows. Самый простой выбор - использовать IMAPI (версия 2) - стандартный код опущен:
IMAPI_FORMAT2_DATA_MEDIA_STATE state;
HRESULT hr;
// ... Initialize an MsftDiscFormat2Data COM object and put recorder
hr = format->get_CurrentMediaStatus( &state );
// ... Verify returned status ...
return (state & IMAPI_FORMAT2_DATA_MEDIA_STATE_BLANK);
Этот код обычно работает отлично. Однако с DVD-RAM это дает неправильные результаты: единственный флаг, включенный в возвращенном состоянии, является IMAPI_FORMAT2_DATA_MEDIA_STATE_OVERWRITE_ONLY ( = 0x1). В Windows Vista 32 бит работает как положено.
Кто-нибудь знает причину этого результата? Есть ли обходной путь?
1 ответ
Вы можете использовать метод IDiscFormat2::get_MediaHeuristicallyBlank из интерфейса IDiscFormat2.
Он попытается определить, является ли носитель пустым, используя эвристику (главным образом для носителей DVD+RW и DVD-RAM).
VARIANT_BOOL vbBlank;
hr = format->get_MediaHeuristicallyBlank(&vbBlank);
if (VARIANT_TRUE == vbBlank)
Log("The media is blank.");
Для определения того, что накопитель сообщает, что текущий носитель является физически пустым, вы можете использовать метод IDiscFormat2::get_MediaPhysicallyBlank.
Что касается причин различного поведения между Windows7 x64 и Windows Vista x86, это может быть связано с тем, что версии IMAPIv2 могут отличаться в этих системах. Возможно, вы захотите обновить свой компьютер Vista с последним пакетом обновления Image Mastering API v2.0, чтобы получить одинаковые результаты в каждой системе.