在Windows 7 x64上检测DVD-RAM介质的空白

时间:2011-07-11 13:43:45

标签: c++ windows-7-x64 dvd imapi

我正在尝试使用Windows上的C ++来检测DVD-RAM介质是否为空。最简单的选择是使用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 个答案:

答案 0 :(得分:2)

您可以使用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版本在这些系统上可能有所不同。您可能希望使用最新的Image Mastering API v2.0更新包更新Vista计算机,以在每个系统上获得相同的结果。