Обнаружение пустоты носителя 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, чтобы получить одинаковые результаты в каждой системе.

Другие вопросы по тегам