在 Windows 7 x64 上检测 DVD-RAM 介质是不是为空

Posted

技术标签:

【中文标题】在 Windows 7 x64 上检测 DVD-RAM 介质是不是为空【英文标题】:Detect emptiness of DVD-RAM media on Windows 7 x64在 Windows 7 x64 上检测 DVD-RAM 介质是否为空 【发布时间】:2011-10-02 19:42:54 【问题描述】:

我正在尝试使用 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 位上,它可以按预期工作。

有人知道这个结果的原因吗?有什么解决办法吗?

【问题讨论】:

有趣:我尝试了艰难的方式,并直接向设备发送了带有 SCSIOP_READ_DISC_INFORMATION 请求的 IOCTL_SCSI_PASS_THROUGH。我得到的信息与 IMAPI 的结果一致:媒体未标记为空白。 【参考方案1】:

您可以使用IDiscFormat2接口中的IDiscFormat2::get_MediaHeuristicallyBlank方法。

它将尝试使用试探法确定媒体是否为空白(主要用于 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 机器,以便在每个系统上获得相同的结果。

【讨论】:

以上是关于在 Windows 7 x64 上检测 DVD-RAM 介质是不是为空的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 x64 Windows 上是不是安装了 32 位 Java,仅查看文件系统和注册表?

Windows 7 x64 上带有 libNFC 的 RFIDIOt

无法在 Windows 7 x64 上使用 WIA 进行扫描

无法在 Windows 7 x64 上使用 VB 脚本中的 CreateObject

Perfmon 无法在 Windows 7 x64 上创建数据收集器集

在 Windows 7 x64 PC 上安装 node.js 的回滚