Обнаружение пустоты носителя DVD-RAM на Windows 7 x64 - PullRequest
1 голос
/ 11 июля 2011

Я пытаюсь определить, является ли носитель 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 Ответ

2 голосов
/ 13 ноября 2013

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

...