光学徽标测试 - BD-R

此测试将验证光学设备是否符合标准和 Windows 光驱要求。

测试详细信息

   
规范
  • Device.Storage.Optical.BluRayWriter.Profiles
平台
  • Windows 10,客户端版本 (x86)
  • Windows 10,客户端版本 (x64)
  • Windows Server 2016 (x64)
支持的版本
  • Windows 10
  • Windows 10 版本 1511
  • Windows 10 版本 1607
  • Windows 10 版本 1703
  • Windows 10 版本 1709
  • Windows 10 版本 1803
  • Windows 10 版本 1809
  • Windows 10 版本 1903
  • Windows 10 的下一次更新
预计运行时间(以分钟为单位) 360
类别 方案
超时(以分钟为单位) 21600
需要重启 false
需要特殊配置 false
类型 automatic

 

其他文档

此功能区域中的测试可能会有其他文档,包括先决条件、设置和故障排除信息,这些内容可在以下主题中找到:

运行测试

在运行测试之前,请按照如下测试要求中所述完成测试设置:光驱测试先决条件

测试将显示一个配置对话框,用于获取主驱动器和辅助驱动器托盘配置。 用户必须从“写入器驱动器”对话框中的驱动器列表中选择相同的辅助驱动器,并且应选择驱动器托盘功能(即驱动器是否支持自动弹出和自动装入托盘)。

注意

   测试计算机上运行的 I/O 密集型应用程序可能会干扰光学徽标测试性能测量方案。 请确保正在运行测试时测试计算机上没有运行任何其他应用程序。

 

故障排除

有关 HLK 测试失败的常规故障排除,请参阅排查 Windows HLK 测试失败问题

有关故障排除信息,请参阅排查 Device.Storage 测试问题

以下是有关此测试的已知问题:

  • 默认情况下,已禁用总线重置测试方案。

    默认情况下,在总线重置时,此测试不会验证设备行为是否正确。

    如果发生总线重置,则驱动器应正确重置自身,然后恢复联机,并且应正常工作。 某些有缺陷的驱动器无法正确重置自身,在总线重置后将无法正常工作。 这不是正确的实现。 启用此特定测试方案时,命令验证测试用例(设备测试用例和配置文件测试用例)会发送具有不正确 SRB 数据方向标志的命令。 这通常会使总线停止工作,并最终导致端口驱动程序在给定的超时期限后重置总线。

    大多数存储控制器无法正确支持此测试方案。 未正确实现的存储控制器在总线重置后将不会恢复。 如果发生这种情况,即使设备已正确实现,测试用例也可能由于存储控制器而失败。 此测试无法区分设备故障和存储控制器故障。 因此,默认情况下禁用此特定测试方案。 要启用此特定测试方案,应该使用“RunDataDirectionFlagScenario”命令行选项运行测试可执行文件。

更多信息

驱动器应支持以下命令:

  • GET CONFIGURATION(无介质)

  • GET EVENT STATUS NOTIFICATION

  • INQUIRY

  • MECHANISM STATUS

  • MODE SENSE

  • PREVENT ALLOW MEDIUM REMOVAL

  • REQUEST SENSE

  • START STOP UNIT

  • TEST UNIT READY

如果以下命令对于驱动器支持的功能和配置文件是必需的,则驱动器应支持这些命令。

  • GET CONFIGURATION(有介质)

  • GET PERFORMANCE

  • READ BUFFER CAPACITY

  • READ CAPACITY

  • READ DISC INFORMATION

  • READ FORMAT CAPACITIES

  • READ TOC PMA ATIP

  • SEND OPC INFORMATION

  • SET CD SPEED

  • READ10

如果与以下方案关联的命令对于驱动器支持的功能和配置文件是必需的,则驱动器应支持这些方案。

  • 事件状态通知

  • 写入

    • 顺序模式

    • 数据包模式

    • 受限制覆盖

    • 多区段支持

  • 音频媒体(写入音频曲目)

  • 空白

  • 唯一驱动器序列号

  • 实时流式处理

  • 音频媒体无缝 RAW 录制

测试用例分为以下三组:

  • 设备测试用例。 以下命令验证测试用例适用于设备:

    • GET CONFIGURATION(无介质)

    • GET EVENT STATUS NOTIFICATION

    • INQUIRY

    • MECHANISM STATUS

    • MODE SENSE

    • PREVENT ALLOW MEDIUM REMOVAL

    • REQUEST SENSE

    • START STOP UNIT

    • TEST UNIT READY

  • 配置文件测试用例。 将针对所有适用的配置文件测试以下命令验证测试用例:

    • GET CONFIGURATION

    • GET PERFORMANCE

    • READ CAPACITY

    • READ BUFFER CAPACITY

    • READ DISC INFORMATION

    • READ FORMAT CAPACITIES

    • READ TOC PMA ATIP

    • SEND OPC INFORMATION

    • SET CD SPEED

    • READ10

  • 使用方案测试用例。 以下方案使用 IMAPI 刻录引擎接口进行测试:

    • 事件状态通知

    • 空白

    • 写入/多区段

    • 音频媒体

    • 写入双层介质

    • 驱动器序列号

    • 只读驱动器

    • 实时流式处理

    • 音频媒体无缝 RAW 录制

此测试包括以下测试用例:

  • GET CONFIGURATION 命令(无介质)

  • GET EVENT STATUS NOTIFICATION 命令

  • INQUIRY 命令

  • MECHANISM STATUS 命令

  • MODE SENSE 命令

  • PREVENT ALLOW MEDIUM REMOVAL 命令

  • REQUEST SENSE 命令

  • START STOP UNIT 命令,弹出和装入性能

  • TEST UNIT READY 命令

  • GET CONFIGURATION 命令

  • GET PERFORMANCE

  • READ CAPACITY 命令

  • READ BUFFER CAPACITY 命令

  • READ DISC INFORMATION 命令

  • READ FORMAT CAPACITIES 命令

  • READ TOC/PMA/ATIP 命令

  • SEND OPC INFORMATION 命令

  • SET CD SPEED 命令

  • READ10 命令

  • EVENT NOTIFICATION

  • 写入测试

  • 音频媒体(写入音频曲目)

  • 空白

  • 写入双层介质

  • 只读驱动器

  • 驱动器序列号

  • 实时流式处理

  • 写入速度测量

  • 音频媒体无缝 RAW 录制

GET CONFIGURATION 命令(无介质)

说明:此测试旨在确保当托盘中没有介质时,驱动器正确响应 GET CONFIGURATION 命令。

适用的介质:设备支持的任何介质

测试用例步骤:

  1. 通过发送 START STOP UNIT 命令弹出托盘。

  2. 等待托盘打开。

  3. 使用 4 字节的响应数据长度发送 GET CONFIGURATION 命令,以获取功能标头数据长度。 如果命令失败,则输出感知键并使测试用例失败。 目的:允许软件探测对命令的支持。

  4. 检查驱动器是否在功能标头中报告“无当前配置文件”。 如果驱动器未将当前配置文件报告为“无当前配置文件”,则使测试用例失败。

  5. 将 RT 设置为 00b,并使用步骤 3 中设备返回的正确数据长度再次发送“获取配置”命令。 目的:允许软件检索驱动器支持的功能的完整列表。

  6. 检查驱动器是否在功能标头中报告“无当前配置文件”。 如果驱动器未将当前配置文件报告为“无当前配置文件”,则使测试用例失败。

  7. 获取当前配置文件位集的响应中的配置文件列表功能描述符;如果任意配置文件描述符的当前配置文件位设置为 1,则使测试用例失败。

  8. 将 RT 设置为 01b,将起始功能编号设置为 0010h(随机可读功能),并使用 20 字节的响应数据长度发送 GET CONFIGURATION 命令。 如果命令失败,或者未返回随机可读功能描述符,则视情况输出感知键并使测试用例失败。 目的:允许软件探测特定功能是否为最新(非最新)。

  9. [可选] 将数据方向标志设置为“to the device”,并使用 4 字节的响应数据长度发送 GET CONFIGURATION 命令,以获取功能标头数据长度。 如果命令失败,则输出感知键并使测试用例失败。 目的:确保设备能够处理具有不正确数据方向的命令。

  10. 插入托盘。

  11. 等待直到设备进入就绪状态

  12. 将 RT 设置为 01b,将起始功能编号设置为 0003h(可移动介质功能),并使用 16 字节的响应数据长度发送 GET CONFIGURATION 命令。 如果命令失败,则视情况输出感知键并使测试用例失败。 如果命令成功:

    • 如果驱动器支持自动弹出机制,则检查是否已设置“弹出”位。

    • 如果驱动器支持自动插入机制,则检查是否已设置“装入”位。

结果:驱动器应正确响应 GET CONFIGURATION 命令

GET EVENT STATUS NOTIFICATION 命令

说明:用于验证驱动器是否支持 GET EVENT STATUS NOTIFICATION 命令

适用的介质:设备支持的任何介质

测试用例步骤:

  1. 在 CDB 中使用以下值发送 GET EVENT STATUS NOTIFICATION 命令。

    • “通知类请求”= 0x7E(操作更改、电源管理、外部请求、媒体、多主机、设备忙)。

    • 已轮询 = 1

    • 分配长度 = 响应标头的大小(4 字节)

  2. 如果命令失败,则使测试用例失败

  3. 在响应中,检查哪些事件受支持

  4. [可选] 将数据方向标志设置为“to the device”,并在 CDB 中使用以下值发送 GET EVENT STATUS NOTIFICATION 命令。

    • “通知类请求”= 0x7E(操作更改、电源管理、外部请求、媒体、多主机、设备忙)。

    • 已轮询 = 1

    • 分配长度 = 响应标头的大小(4 字节)

  5. 如果命令失败,则使测试用例失败

  6. 在响应中,检查事件数据长度是否为 0x6,NEA 位是否为已清除,通知类是否不为零,以及支持的事件类是否与步骤 3 相同。 否则,使测试用例失败。

  7. 在 CDB 中使用以下值发送 GET EVENT STATUS NOTIFICATION 命令。

    • 通知类请求 = 0x7E(操作更改、电源管理、外部请求、媒体、多主机、设备忙)。

    • 已轮询 = 1

    • 分配长度 = 响应标头的大小(4 字节)

  8. 如果命令失败,则使测试用例失败。

结果:驱动器应正确响应 GET EVENT STATUS NOTIFICATION 命令。

INQUIRY 命令

说明:用于验证驱动器是否支持 INQUIRY 命令。

适用的介质:设备支持的任何介质

测试用例步骤:

  1. 将分配长度设置为 08h 并发送 INQUIRY 命令。 目的:允许软件探测所需的响应缓冲区大小。

  2. 如果命令成功,则检查响应标头中是否有额外长度。 额外长度必须为 32d 或更大 [MMC5r04 6.9.2]。

  3. 将分配长度设置为比步骤 2 中的额外长度多 5 字节,并再次发送 INQUIRY 命令。

  4. 如果命令成功,请确保响应数据字段与 MMC5r04 表 320 中指定的值匹配。

  5. 检查供应商标识、产品标识和产品修订版本级别是否不为 Null。

    • 目的:按软件进行基本标识。
  6. 检查以下值是否匹配:

    • 设备类型 = 5

    • 设备类型限定符 = 0

    • 可移动介质 = 1

    • 响应数据格式 = 2

    • 层次结构支持 = 0

    • 正常 ACA = 0

    • 保护 = 0

    • 第三方复制 = 0

    • 目标端口组支持 = 0

    • 访问控制协调器 = 0

    • 支持 SCC = 0

    • Addr16 = 0

    • 介质转换器 = 0

    • 多端口 = 0

    • VS1 = 0

    • 机箱服务 = 0

    • BQue = 0

    • VS2 = 0

    • 命令队列 = 0

    • 链接命令 = 0

    • 同步 = 0

    • Wide16 = 0

  7. 在 CDB 中使用以下值发送 INQUIRY 命令:

    • EVPD = 0

    • 分配长度 = 240

  8. 在 CDB 中使用以下值发送 INQUIRY 命令:

    • EVPD = 1

    • 分配长度 = 240

  9. 如果命令成功,则比较步骤 7 和步骤 8 中的响应,如果两者相同,则使测试用例失败。

  10. 使用随机分配长度发送 INQUIRY 命令,发送次数随机(介于 10 到 25 之间)。 如果命令失败,则使测试用例失败。

  11. [可选] 将数据方向标志设置为“to the device”,并在 CDB 中使用以下值发送 INQUIRY 命令

    • EVPD = 0

    • 分配长度 = 240

结果:驱动器应正确响应 INQUIRY 命令。

MECHANISM STATUS 命令

说明:用于验证驱动器是否支持 MECHANISM STATUS 命令

适用的介质:设备支持的任何介质

测试用例步骤:

  1. 将分配长度设置为 0 字节(未指定数据感知)并发送 MECHANISM STATUS 命令。 如果命令失败,则输出感知键并使测试用例失败。

    • 目的:允许软件探测对命令的支持
  2. 弹出托盘。

  3. 等待设备返回感知数据(感知键:0x2,ASC:0x3A,ASCQ:0x02)

  4. 将分配长度设置为 8 字节并发送 MECHANISM STATUS 命令。

  5. 检查“机盖未关”位是否为 1b。

    • 目的:允许软件检测机盖处于打开还是关闭状态(打开)。
  6. 插入托盘

  7. 等待设备就绪

  8. 将分配长度设置为 8 字节并发送 MECHANISM STATUS 命令。

  9. 检查“机盖未关”位是否为 0b。

    • 目的:允许软件检测机盖处于打开还是关闭状态(关闭)。
  10. 创建一个 8 字节缓冲区,并使用随机数据填充它。

  11. [可选] 将数据方向标志设置为“to the device”,将分配长度设置为 8 字节,并发送 MECHANISM STATUS 命令。 将步骤 11 中的缓冲区传递到设备。

结果:驱动器应正确响应 MECHANISM STATUS 命令

MODE SENSE 命令

说明:用于验证驱动器是否支持 MODE SENSE 命令。

适用的介质:设备支持的任何介质

测试用例步骤:

  1. 在 CDB 中使用以下值发送 MODE SENSE 命令,以获取所有受支持的模式页:

    • 页面控制 = 0

    • 禁用块描述符 = 1

    • 页代码 = 0x3F

    • 分配长度 = 0x8000

  2. 检查响应中的以下值:

    • 模式参数标头中的块描述符长度为零

    • 每个模式页数据的页长度都等于 MMC5 中记录的值。

  3. 验证报告的每个页的模式页数据

  4. 在 CDB 中使用以下值为报告的每个页发送 MODE SENSE 命令:

    • 页面控制 = 0

    • 禁用块描述符 = 1

    • 分配长度 = 步骤 2 中驱动器报告的页长度

  5. 检查响应中的以下值:

    • 模式参数标头中的块描述符长度为零。

    • 模式页标头中的页代码与请求的页代码匹配。

    • 模式页标头中的页长度等于 MMC5 中记录的值。

  6. 将分配长度设置为 0xFFF0 并发送 MODE SENSE 命令

  7. 检查响应中的以下值:

    • 模式参数标头中的块描述符长度为零

    • 模式页标头中的页代码与请求的页代码匹配

  8. 将分配长度设置为 0x0A 并发送 MODE SENSE 命令

  9. 逐字节检查响应(响应大小为 0x0A)是否与分配长度为 0xFFF0 的响应匹配。

  10. 使用随机分配长度(介于 0x0A 到 0xFFF0 之间)发送 MODE SENSE 命令,发送次数随机(介于 10 到 25 之间)。

  11. 逐字节检查响应(响应大小为介于 0x0A 到 0xFFF0 之间的随机值)是否与分配长度为 0xFFF0 的响应匹配。

  12. [可选] 将数据方向标志设置为“to the device”,并在 CDB 中使用以下值发送 MODE SENSE 命令,以获取所有受支持的模式页:

    • 页面控制 = 0

    • 禁用块描述符 = 1

    • 页代码 = 0x3F

    • 分配长度 = 0x8000

结果:驱动器应正确响应 GET CONFIGURATION 命令

PREVENT ALLOW MEDIUM REMOVAL 命令

说明:用于验证驱动器是否支持 PREVENT ALLOW MEDIUM REMOVAL 命令。

适用的介质:设备支持的任何介质

测试用例步骤:

  1. 将“禁止”位设置为 1,将“持久”位设置为 0,并发送 PREVENT ALLOW MEDIUM REMOVAL 命令。 这会锁定驱动器。 如果命令失败,则输出感知键并使测试用例失败。

  2. 将 LocEj 位设置为 1,将“即时”位设置为 0,将“起始”位设置为零,并发送 START STOP UNIT 命令。 这将尝试弹出光盘。如果驱动器未拒绝感知数据为 0x05、0x53 和 0x02 的命令,则表明驱动器发生故障。

  3. 发送 TEST UNIT READY 命令并确保它成功。

  4. 要求用户按弹出按钮以弹出介质。

  5. 发送 TEST UNIT READY 命令并确保它成功(机盖应该未打开)。

  6. 将“禁止”位设置为 0,将“持久”位设置为 0,并发送 PREVENT ALLOW MEDIUM REMOVAL 命令。 这会解锁驱动器。 如果命令失败,则输出感知键并使测试用例失败。

  7. 要求用户按弹出按钮以弹出介质

  8. 等待设备打开机盖 - 发送 TEST UNIT READY 命令,如果命令成功,则等待 1 秒,然后重试,直到失败并显示 (02/3A/02)。 30 秒后超时。

  9. 如果驱动器支持自动装入机制,则将托盘注入回驱动器中;否则要求用户将托盘插入回驱动器中。

  10. 等待设备准备就绪

  11. [可选] 将数据方向标志设置为“to the device”并发送 PREVENT ALLOW MEDIUM REMOVAL 命令,在随机大小缓冲区中传递随机数据。

结果:驱动器应正确响应 PREVENT ALLOW MEDIUM REMOVAL 命令。

REQUEST SENSE 命令

说明:用于验证驱动器是否支持 REQUEST SENSE 命令。

适用的介质:设备支持的任何介质

测试用例步骤:

  1. 将描述符位设置为零,将分配长度设置为 252,并发送 REQUEST SENSE 命令。 驱动器应使用固定格式感知数据进行响应。

  2. 如果命令失败,则输出感知键并使测试用例失败。

  3. 如果响应代码为 0x70 或 0x71,则表示测试通过;否则表示测试失败。

  4. [可选] 将数据方向标志设置为“to the device”,将描述符位设置为零,将分配长度设置为 252,并发送 REQUEST SENSE 命令。 驱动器应使用固定格式感知数据进行响应。

结果:驱动器应正确响应 REQUEST SENSE 命令。

START STOP UNIT 命令,弹出和装入性能

说明:用于验证驱动器是否支持 START STOP UNIT 命令。

适用的介质:设备支持的任何介质

测试用例步骤:

  1. 在 CDB 中使用以下值发送 START STOP UNIT 命令

    • 即时 = 0,装入/弹出 = 0,起始 = 0,电源状况 = 0

    • 即时 = 0,装入/弹出 = 0,起始 = 1,电源状况 = 0

    • 即时 = 1,装入/弹出 = 0,起始 = 0,电源状况 = 0

    • 即时 = 1,装入/弹出 = 0,起始 = 1,电源状况 = 0

  2. 对于每个组合,此命令都应成功。

  3. 如果驱动器支持弹出托盘,则在 CDB 中使用以下值发送 START STOP UNIT 命令,以弹出托盘

    • 即时 = 1,装入/弹出 = 1,起始 = 0,电源状况 = 0
  4. 等待设备打开机盖 - 发送 TEST UNIT READY 命令,如果命令成功,则等待 5 秒,然后重试,直到失败并显示 (02/3A/02)。 10 秒后超时。

  5. 如果驱动器支持装入托盘(自动插入),则在 CDB 中使用以下值发送 START STOP UNIT 命令,以插入托盘:

    • 即时 = 1,装入/弹出 = 1,起始 = 1,电源状况 = 0
  6. 如果驱动器不支持装入托盘,则要求用户将托盘插入回驱动器中。

  7. 等待设备准备就绪 - 发送 TEST UNIT READY 命令,如果命令失败并显示感知键,则等待 1 秒,然后重试,直到成功。 30 秒后超时。 高级徽标:超时:20 秒。

  8. 在 CDB 中使用以下值发送 START STOP UNIT 命令,以弹出托盘:

    • 即时 = 0,装入/弹出 = 1,起始 = 0,电源状况 = 0
  9. 等待设备打开机盖 - 发送 TEST UNIT READY 命令,如果命令成功,则等待 1 秒,然后重试,直到失败并显示 (02/3A/02)。 30 秒后超时。

  10. 要求用户取出介质

  11. 如果驱动器支持装入托盘(自动插入),则在 CDB 中使用以下值发送 START STOP UNIT 命令,以插入托盘:

    • 即时 = 0,装入/弹出 = 1,起始 = 1,电源状况 = 0
  12. 确保命令失败并显示“未就绪”/“介质不存在”/“托盘已关闭”(02/3A/01)

  13. 如果驱动器支持弹出托盘,则在 CDB 中使用以下值发送 START STOP UNIT 命令,以弹出托盘:

    • 即时 = 0,装入/弹出 = 1,起始 = 0,电源状况 = 0
  14. 要求用户将介质放入托盘中。

  15. 如果驱动器不支持装入托盘,则要求用户将托盘插入回驱动器中,并等待直到设备准备就绪。 如果驱动器支持装入托盘(自动插入),则在 CDB 中使用以下值发送 START STOP UNIT 命令以插入托盘,并等待直到设备准备就绪。

    • 即时 = 0,装入/弹出 = 1,起始 = 1,电源状况 = 0
  16. [可选] 将数据方向标志设置为“to the device”,并发送 START STOP UNIT 命令。 在 CDB 中使用以下值发送具有随机数据的随机大小缓冲区。

    • 即时 = 0,装入/弹出 = 0,起始 = 0,电源状况 = 0

结果:驱动器应正确响应 START STOP UNIT 命令。

TEST UNIT READY 命令

说明:用于验证驱动器是否支持 TEST UNIT READY 命令。

适用的介质:设备支持的任何介质

测试用例步骤:

  1. 发送 TEST UNIT READY 命令。

  2. 如果命令失败,则输出感知键并使测试用例失败

  3. [可选] 将数据方向标志设置为“to the device”,使用随机数据填充随机大小缓冲区,并发送 TEST UNIT READY 命令。

结果:驱动器应正确响应 TEST UNIT READY 命令。

GET CONFIGURATION 命令

说明:用于验证驱动器对报告的配置文件是否支持 GET CONFIGURATION 命令。

适用的介质:设备支持的任何介质

测试用例步骤:

  1. 使用 0 字节的响应数据长度(未指定数据感知)发送 GET CONFIGURATION 命令。 如果命令失败,则输出感知键并使测试用例失败。

    • 目的:允许软件探测对命令的支持。
  2. 使用 4 字节的响应数据长度发送 GET CONFIGURATION 命令,以获取功能标头数据长度。 如果命令失败,则输出感知键并使测试用例失败。

    • 目的:允许软件探测对命令的支持。
  3. 将 RT 设置为 00b,将起始功能编号设置为 0000h,并使用 8 字节的响应数据长度(以获取标头)发送 GET CONFIGURATION 命令。 如果命令失败或当前配置文件等于 00h,则视情况输出感知键并使测试用例失败。

    • 目的:

      • 允许软件探测所需的响应缓冲区大小。

      • 允许软件探测当前配置文件(配置文件为最新)。

  4. 如果命令成功,请在响应中检查以下事项

    • 标头中的数据长度为非零,且为四字节对齐

    • 当前配置文件编号与装入驱动器中的介质类型匹配

  5. 将 RT 设置为 00b,将起始功能编号设置为 0000h,并使用步骤 3 中读取的响应数据长度发送 GET CONFIGURATION 命令。 读取当前配置文件,然后在支持的配置文件列表中查找此配置文件代码。 确保当前配置文件与插入的介质的配置文件类型匹配。 如果命令失败,或者当前配置文件未在支持的配置文件列表中报告为最新,则视情况输出感知键并使测试用例失败。

    • 目的:确保驱动器报告的信息的一致性。
  6. 如果长度在 2 字节以内,则将 RT 设置为 00b,并使用步骤 3 中设备返回的正确数据长度再次发送 GET CONFIGURATION 命令。 如果长度超过 2 字节,则使用 2 字节的最大数据长度发送命令。

    • 目的:允许软件检索驱动器支持的功能的完整列表。
  7. 如果长度超过 2 字节,请读取返回的最后一个完整功能描述符的功能编号,将 RT 设置为 10b,将起始功能编号设置为该功能编号加 1,并再次发出 GET CONFIGURATION 命令。 重复操作,直到功能标头中返回的数据长度等于或小于分配的长度。 连接生成的功能描述符以在步骤 10 中进行验证。

  8. 要使所有命令在步骤 3 到 6 都成功,请检查响应标头中的数据长度是否为 4 的倍数(4 字节对齐)。 如果数据长度不是 4 字节对齐,则命令将失败。 目的:软件假定 4 字节对齐。

  9. 此外,如果命令成功,请检查报告的每个功能版本和额外长度字段是否等于或大于 MMC-5 文档中给定功能的相应值。 例如:核心功能的版本必须为 0010b 或更高,其额外长度必须为 8 或更大。 目的:确保驱动器报告的信息的一致性。 如果报告了可移动介质功能,则其版本号应为 1,如 GET CONFIGURATION 命令中所指定。

  10. 此外,如果命令成功,请检查是否报告了所报告的受支持配置文件的每个必需功能。

    • 目的:确保驱动器报告的元信息的一致性。
  11. 将 RT 设置为 01b,将起始功能编号设置为 0010h(随机可读功能),并使用 20 字节的响应数据长度发送 GET CONFIGURATION 命令。 如果命令失败,或者未返回随机可读功能描述符,则视情况输出感知键并使测试用例失败。 目的:允许软件探测特定功能是否为最新(最新)。

  12. [可选] 将数据方向标志设置为“to the device”,使用随机数据填充随机大小缓冲区,并发送 GET CONFIGURATION 命令。 在 CDB 中设置以下值:

    • 分配长度 = 缓冲区的大小,起始功能编号 = 0000h,RT = 00b

结果:驱动器应为适用的介质类型正确实现 GET CONFIGURATION 命令。

GET PERFORMANCE 命令

说明:用于验证驱动器对报告的配置文件是否支持 GET PERFORMANCE 命令。

适用的介质:以下任意介质:

  • CD-R

  • CD-ROM

  • CD-RW

  • DVD+R

  • DVD+R 双层

  • DVD+RW

  • DVD-RW 受限制覆盖

  • DVD-RAM

  • DVD-R

  • DVD-R 双层顺序

  • DVD-ROM

  • BD-R

  • BD-RE

  • BD-ROM

测试用例步骤:

  1. 发送 GET CONFIGURATION 命令以获取实时流式处理功能。 在响应中检查是否设置了“写入速度性能描述符”位。 如果未设置,则驱动器不支持写入速度描述符。 跳过用于验证写入速度描述符的步骤 6 到 11。

  2. 在 CDB 中使用以下值发送 GET PERFORMANCE 命令,以获取零个标称读取性能描述符

    • 类型 = 0

    • 起始 LBA = 1

    • 描述符最大个数 = 0

    • 数据类型 = 0x10

  3. 如果命令失败,则输出感知键并使测试用例失败

  4. 在 CDB 中使用以下值发送 GET PERFORMANCE 命令,以获取一个标称读取性能描述符

    • 类型 = 0

    • 起始 LBA = 1

    • 描述符最大个数 = 1

    • 数据类型 = 0x10

  5. 如果命令失败,则输出感知键并使测试用例失败

  6. 在 CDB 中使用以下值发送 GET PERFORMANCE 命令,以获取一个标称写入性能描述符。

    • 类型 = 0

    • 起始 LBA = 1

    • 描述符最大个数 = 1

    • 数据类型 = 0x14

  7. 如果命令失败,则输出感知键并使测试用例失败

  8. 在 CDB 中使用以下值发送 GET PERFORMANCE 命令,以获取写入速度描述符列表的数据长度

    • 类型 = 3

    • 起始 LBA = 1

    • 描述符最大个数 = 0

    • 数据类型 = 0x14

  9. 如果命令失败,则输出感知键并使测试用例失败。

  10. 在 CDB 中使用以下值发送 GET PERFORMANCE 命令,以获取写入速度描述符列表

    • 类型 = 3

    • 起始 LBA = 1

    • 描述符最大个数 = 10

    • 数据类型 = 0x14

  11. 如果命令失败,则输出感知键并使测试用例失败。

  12. [可选] 将数据方向标志设置为“to the device”,使用随机数据填充随机大小缓冲区,并发送 GET PERFORMANCE 命令。 在 CDB 中设置以下值,以获取零个标称读取性能描述符。

    • 类型 = 0

    • 起始 LBA = 1

    • 描述符最大个数 = 0

    • 数据类型 = 0x10

  13. 如果命令失败,则输出感知键并使测试用例失败。

结果:驱动器应为适用的介质类型正确实现 GET PERFORMANCE 命令。

READ CAPACITY 命令

说明:用于验证驱动器对报告的配置文件是否支持 READ CAPACITY 命令。

适用的介质:设备支持的任何介质。

测试用例步骤:

  1. 发送 READ CAPACITY 命令。

  2. 如果命令失败,则输出感知键并使测试用例失败。

  3. 如果块长度(以字节为单位)不是 2048,则使测试用例失败。

  4. [可选] 将数据方向标志设置为“to the device”,使用随机数据填充随机大小缓冲区,并发送 READ CAPACITY 命令。

  5. 如果命令失败,则输出感知键并使测试用例失败。

结果:驱动器应为适用的介质类型正确实现 READ CAPACITY 命令。

READ BUFFER CAPACITY 命令

说明:用于验证驱动器对报告的配置文件是否支持 READ BUFFER CAPACITY 命令。

适用的介质:设备支持的任何介质。

测试用例步骤:

  1. 发送 GET CONFIGURATION 命令以获取实时流式处理功能。 在响应中检查是否设置了“读取缓冲区容量块”(RBCB) 位。 如果未设置,则驱动器不支持 READ BUFFER CAPACITY 命令。 跳过此测试用例。

  2. 将块位设置为 0,将分配长度设置为缓冲区容量结构的大小,并发送 READ BUFFER CAPACITY 命令。

  3. 如果命令失败,则输出感知键并使测试用例失败。

  4. 将块位设置为 1,并重复步骤 2。

  5. 如果命令失败,则输出感知键并使命令失败。

  6. [可选] 将数据方向标志设置为“to the device”,使用随机数据填充随机大小缓冲区,将块位设置为零,并发送 READ BUFFER CAPACITY 命令。

  7. 如果命令失败,则输出感知键并使测试用例失败。

结果:驱动器应为适用的介质类型正确实现 READ BUFFER CAPACITY 命令。

READ DISC INFORMATION 命令

说明:用于验证驱动器对报告的配置文件是否支持 READ DISC INFORMATION 命令。

适用的介质:以下任意介质:

  • DVD+R

  • DVD+RW

  • DVD-R

  • CD-R

  • CD-RW

测试用例步骤:

  1. 将分配长度设置为 2 并发送 READ DISC INFORMATION 命令,以获取标准光盘信息大小。

  2. 如果命令失败,则输出感知键并使测试用例失败。

  3. 从响应获取光盘信息长度。 如果长度小于标准光盘信息块大小 (34),则使测试用例失败。

  4. 将分配长度设置为步骤 3 中的数据长度加 2,并发送 READ DISC INFORMATION 命令。

  5. 如果命令失败,则输出感知键并使测试用例失败。

  6. [可选] 将数据方向标志设置为“to the device”,使用随机数据填充随机大小缓冲区,将分配长度设置为缓冲区的大小,并发送 READ DISC INFORMATION 命令。

结果:驱动器应为适用的介质类型正确实现 READ DISC INFORMATION 命令。

READ FORMAT CAPACITIES 命令

说明:用于验证驱动器对报告的配置文件是否支持 READ FORMAT CAPACITIES 命令。

适用的介质:以下任意介质:

  • DVD+RW

  • DVD-RW 受限制覆盖

  • DVD-RAM

  • CD-RW

测试用例步骤:

  1. 将分配长度设置为 4(容量列表标头),并发送 READ FORMAT CAPACITIES 命令。

  2. 如果命令失败,则输出感知键并使测试用例失败。

  3. 从响应获取容量列表长度

  4. 将分配长度设置为容量列表长度加 4(容量列表标头的大小),并发送 READ FORMAT CAPACITIES 命令。

  5. 如果命令失败,则输出感知键并使测试用例失败。

  6. 在响应中检查容量列表长度是否为 8 的倍数。

  7. [可选] 将数据方向标志设置为“to the device”,使用随机数据填充随机大小缓冲区,将分配长度设置为缓冲区的大小,并发送 READ FORMAT CAPACITIES 命令。

结果:驱动器应为适用的介质类型正确实现 READ FORMAT CAPACITIES 命令。

READ TOC/PMA/ATIP 命令

说明:用于验证驱动器对报告的配置文件是否支持 READ TOC/PMA/ATIP 命令。

适用的介质:以下任意介质:

  • CD-ROM

  • DVD-ROM

  • BD-ROM

测试用例步骤:

  1. 在 CDB 中使用以下值发送 READ TOC/PMA/ATIP 命令。

    • 格式 = 0,MSF = 0,轨道区段编号 = 1,分配长度 = 4
  2. 如果命令失败,则输出感知键并使测试用例失败。

  3. [可选] 将数据方向标志设置为“to the device”,使用随机数据填充缓冲区,将分配长度设置为缓冲区的大小,并发送 READ TOC/PMA/ATIP 命令。 在 CDB 中设置以下值:

    • 格式 = 0,MSF = 0,轨道区段编号 = 1,分配长度 = 4

结果:驱动器应为适用的介质类型正确实现 READ TOC/PMA/ATIP 命令

SEND OPC INFORMATION 命令

说明:[尚未提供此内容。]

适用的介质:以下任意介质:

  • DVD-RW 受限制覆盖

  • DVD-R

  • CD-RW

  • CD-R

测试用例步骤:

  1. 将 DoOpc 设置为 1,并发送 SEND OPC INFORMATION 命令

  2. 如果命令失败,则输出感知键并使测试用例失败。

  3. [可选] 将 DoOpc 设置为 1,将数据方向标志设置为“to the device”,使用随机数据填充随机大小缓冲区,并发送 SEND OPC INFORMATION 命令。 分配长度设置为缓冲区的大小。

结果:驱动器应为适用的介质类型正确实现 SEND OPC INFORMATION 命令。

SET CD SPEED 命令

说明:用于验证驱动器对报告的配置文件是否支持 SET CD SPEED 命令。

适用的介质:设备支持的任何介质

测试用例步骤:

  1. 发送 GET CONFIGURATION 命令以获取实时流式处理功能。 在响应中检查是否已设置“设置 CD 速度”(SCS) 位。 如果未设置,则驱动器不支持 SET CD SPEED 命令。 跳过此测试用例。

  2. 在 CDB 中使用以下值发送 SET CD SPEED 命令。

    • 旋转控制 = 0,读取速度 = 0xFFFF,写入速度 = (((4* 75 * 2352) + 500) / 1000) 如果命令失败,则输出感知键并使测试用例失败
  3. [可选] 将数据方向标志设置为“to the device”,使用随机数据填充随机大小缓冲区,并发送 SET CD SPEED 命令。 在 CDB 中设置以下值。

    • 旋转控制 = 0,读取速度 = 0xFFFF,写入速度 = (((4* 75 * 2352) + 500) / 1000)

结果:驱动器应为适用的介质类型正确实现 SET CD SPEED 命令。

READ10 命令

说明:用于验证驱动器对报告的配置文件是否支持 READ10 命令。

适用的介质:以下任意介质:

  • CD-ROM

  • DVD-ROM

测试用例步骤:

  1. 将分配长度设置为 READ TOC 响应标头的大小(4 字节),并发送 READ TOC/PMA/ATIP 命令

  2. 将分配长度设置为 READ TOC 响应标头的大小(4 字节)加步骤 1 中的响应标头的数据长度,并发送 READ TOC/PMA/ATIP 命令。

  3. 检查所有格式化的 READ TOC 描述符,确定其任意控制是否设置为 0x04

  4. 如果未找到,则使测试用例失败

  5. 否则,从格式化的 TOC 轨道描述符获取轨道起始地址。

  6. 将 LBA 字段设置为零并发送 READ CAPACITY 命令,以获取块大小。

  7. 将传输长度设置为零,将起始 LBA 设置为步骤 5 中的 LBA,并发送 READ 命令。

  8. 计算要读取的块数

  9. 如果 READ CAPACITY 响应中的 LBA 小于步骤 5 中的 LBA,则将要读取的块数设置为 0

  10. 如果 READ CAPACITY 响应中的 LBA 大于步骤 5 中的 LBA,则将要读取的块数设置为 READ CAPACITY 响应中的 LBA 与步骤 5 中的 LBA 之间的差。 如果该值大于 50,则将要读取的块数设置为 50。

  11. 将 READ10 CDB 中的起始 LBA 设置为步骤 5 中的 LBA

  12. 将传输长度设置为 1,并发送 READ10 命令

  13. 睡眠 10 毫秒

  14. 递增 READ10 CDB 中的起始 LBA

  15. 重复步骤 12 到 14,直到读取所有块数。

  16. [可选] 将数据方向标志设置为“to the device”,使用随机数据填充随机大小缓冲区,并发送 READ10 命令。 在 CDB 中设置以下值。

    • 传输长度 = 1,起始 LBA = 步骤 8 中的 LBA 数到步骤 5 中的起始 LBA 之间的 LBA 范围内的随机 LBA 值

结果:驱动器应为适用的介质类型正确实现 READ10 命令。

事件通知

说明:用于验证是否正确向 Windows PNP 报告设备事件通知。

适用的介质:设备支持的任何介质

测试用例步骤:

  1. 如果驱动器的 STORAGE_ADAPTER_DESCRIPTOR 结构的 BusType 字段设置为 BusTypeSata,则发送 IOCTL_ATA_PASS_THROUGH 并请求标识数据包设备信息数据。 在响应中检查是否已设置第 78 个词的第 5 位(支持异步通知功能)和第 79 个词的第 5 位(已启用异步通知功能)。 否则,使测试失败

  2. 注册操作更改事件。

  3. 检查介质是否存在。

  4. 如果介质存在,则弹出介质。

  5. 等待生成 MEDIA REMOVAL 事件。 如果在 60 秒内未生成此事件,则使测试用例失败。

  6. 将介质插入驱动器中。

  7. 等待生成 MEDIA ARRIVAL 事件。 如果在 60 秒内未生成此事件,则使测试用例失败。

结果:驱动器应正确实现事件通知。

写入测试

说明:验证驱动器在 IMAPI 的上下文中的数据内容写入能力。 使用驱动器报告的各个写入速度对设备进行测试。 此测试还可验证设备的多区段功能是否适用于插入的介质

适用的介质:以下任意介质(具体取决于驱动器操作):

  • 顺序写入:

    • CD-R

    • CD-RW

    • DVD+R

    • DVD-R

    • DVD-RAM

    • BD-R

    • BD-RE

  • 受限制覆盖:

    • DVD-RW
  • 数据包模式:

    • DVD+RW
  • 多区段:

    • CD-R

    • CD-RW

    • DVD-R

    • DVD+R

    • BD-R

测试用例步骤:

  1. 要求用户插入空白介质。

  2. 调用 API IDiscFormat2Data::get_CurrentMediaStatus,检查介质是否为空白。

  3. 如果介质非空白,并且它是以下某种可重写介质类型,则通过使用 minimal blank 选项发送 blank 命令来擦除介质。

    • CD-RW

    • DVD-RW 顺序录制

    • DVD-RW 受限制覆盖

    • DVD+RW

    • DVD-RAM

    • BD-RE

  4. 如果介质不是可重写介质,则要求用户插入空白介质。 重试此步骤 3 次,否则使测试用例失败。

  5. 如果介质不是可重写介质,则要求用户插入空白介质。 重试此步骤 3 次,否则使测试用例失败。

  6. 通过调用 API IDiscFormat2Data::get_SupportedWriteSpeedDescriptors,获取写入速度描述符列表。

  7. 使报告的写入速度的顺序随机化

  8. 通过使用步骤 6 中的一个写入速度调用 API IDiscFormat2Data::SetWriteSpeed 来设置写入速度。

  9. 创建随机数据大小,其范围为介质上的 10% 可用空间以内。 使用随机数据填充缓冲区。

  10. 使用 API IDiscFormat2Data::get_FreeSectorsOnMedia 获取光盘上的可用块数。

  11. 使用 API IDiscFormat2Data::get_NextWritableAddress 获取下一个可写地址。

  12. 使用 IDiscFormat2Data::Write 写入步骤 8 中的数据缓冲区。

  13. 如果驱动器支持自动弹出插入机制,则弹出介质,然后再插入托盘中。

  14. 如果介质不是 DVD-RW、DVD+RW、DVD-RAM 或 BD-RE,则执行以下操作:

    • 使用 API IDiscFormat2Data::get_FreeSectorsOnMedia 获取光盘上的可用块数。

    • 检查可用扇区数是否比步骤 9 中的值小了步骤 8 中的写入数据的大小。

    • 使用 API IDiscFormat2Data::get_NextWritableAddress 获取下一个可写地址。

    • 检查下一个可写地址是否比步骤 10 中的下一个可写地址大了步骤 8 中的写入数据的大小。

    • 从光盘读取数据,并比较数据是否与步骤 11 中写入到介质的数据匹配。

  15. 获取最后一个轨道信息

  16. 如果介质不是 DVD-RW,则检查逻辑轨道大小是否大于或等于写入的数据的大小。

  17. 检查逻辑轨道编号是否正确。

  18. 获取写入参数模式页。

  19. 如果写入参数模式页报告为“固定数据包”,请检查驱动器报告的轨道信息是否不是“数据包/增量”。

  20. 读取光盘信息,并检查区段数是否匹配。

  21. 如果介质不是 DVD-RW、DVD+RW 和 DVD-RAM,则针对每个写入速度重复步骤 7 到 19。 如果驱动器只返回一个写入速度,则再次重复步骤 7 到 19,向光盘添加另一个区段以验证多区段功能。

结果:驱动器应能在 IMAPI 的上下文中刻录数据。

音频媒体(写入音频曲目)

说明:验证驱动器在 IMAPI 的上下文中的音频内容写入能力。

适用的介质:以下任意介质:

  • CD-R

  • CD-RW

测试用例步骤:

  1. 如果介质非空白,并且它是 CD-RW 介质类型,则通过使用 minimal blank 选项发送 blank 命令来擦除介质。

  2. 如果介质不是可重写介质,则要求用户插入空白介质。 重试此步骤 3 次,否则使测试用例失败。

  3. 通过调用 DiscFormat2TrackAtOnce::PrepareMedia 来锁定介质,以阻止他人存取。

  4. 通过调用 API IDiscFormat2TrackAtOnce::get_SupportedWriteSpeeds,获取写入速度描述符列表。

  5. 选择介于 3 到 10 之间的随机音频曲目数。

  6. 使报告的写入速度的顺序随机化。

  7. 通过调用步骤 1 中的 API IDiscFormat2TrackAtOnce::SetWriteSpeed 来设置写入速度。

  8. 使用 API IDiscFormat2Data::get_FreeSectorsOnMedia 获取光盘上的可用块数。

  9. 创建随机大小为 1 分钟音频数据到 10 分钟音频数据的音频数据。 数据的大小应为 2352 的倍数。

  10. 将音频数据流添加到 IDiscFormat2TrackAtOnce::AddAudioTrack。

  11. 获取最后一个轨道信息

  12. 检查逻辑轨道大小是否大于或等于写入的音频曲目的大小。

  13. 检查逻辑轨道编号是否正确

  14. 通过调用 IDiscFormat2TrackAtOnce::FreeSectorsOnMedia,获取介质上的可用扇区数。

  15. 检查步骤 14 中的可用扇区数是否比步骤 8 中的值小了写入到介质的音频曲目的大小。

  16. 针对步骤 5 中的音频曲目数重复步骤 5 到 15

  17. 获取写入参数模式页

  18. 如果写入参数模式页报告为“固定数据包”,请检查驱动器报告的磁道信息是否不是“数据包/增量”

  19. 针对每个写入速度重复步骤 1 到 18。

  20. 如果驱动器支持自动弹出插入机制,则弹出介质,然后再插入托盘中。

结果:驱动器应能在 IMAPI 的上下文中刻录音频媒体。

空白

说明:验证驱动器在 IMAPI 的上下文中的格式化/擦除能力。

适用的介质:以下任意介质:

  • CD-RW

  • DVD+RW

  • DVD-RW 受限制覆盖

  • BD-RE

测试用例步骤:

  1. 通过调用 API IDiscFormat2Data::CurrentPhysicalMediaType,检查介质是否为以下某种读写介质类型

    • CD-RW

    • DVD-RW

    • DVD+RW

  2. 如果介质不是其中一种读写介质类型,则跳过此测试用例。

  3. 通过调用 API IDiscFormat2Erase::MediaPhysicallyBlank,检查介质是否为空白介质。

  4. 如果介质非空白,请转到步骤 7。

  5. 创建大小为 25MB 的随机数据流。

  6. 使用 API IDiscFormat2Data::Write 将数据流写入到光盘。

  7. 通过调用 IDiscFormat2Data::get_CurrentMediaStatus API,检查驱动器是否将介质报告为非空白介质。

  8. 如果驱动器仍将介质报告为空白,则使测试用例失败

  9. 使用 DDiscFormat2EraseEvents::Update 实现擦除事件处理程序。

  10. 调用 API IDiscFormat2Erase::put_FullErase 并将 erase 选项设置为 false,以便它执行最低限度擦除。

  11. 使用 IDiscFormat2Erase::EraseMedia API 发送 blank 命令。

  12. 调用 API IDiscFormat2Data::get_CurrentMediaStatus,检查介质是否为空白。

  13. 读取光盘信息,并检查以下事项

    • 报告的区段数为 1。

    • 最后一个区段中的第一个轨道为 1。

    • 最后一个区段中的最后一个轨道为 1。

  14. 调用 API IDiscFormat2Erase::put_FullErase,并将 erase 选项设置为 full blank。 重复步骤 9 到步骤 14。

结果:驱动器应能在 IMAPI 的上下文中格式化介质。

写入双层介质

说明:验证驱动器在 IMAPI 的上下文中的双层介质写入能力。 使用驱动器报告的各个写入速度对设备进行测试。

适用的介质:以下任意介质:

  • DVD+R DL

  • DVD-R DL

测试用例步骤:

  1. 要求用户插入空白介质。

  2. 调用 API IDiscFormat2Data::get_CurrentMediaStatus,检查介质是否为空白

  3. 如果介质不是可重写介质,则要求用户插入空白介质。 重试此步骤 3 次,否则使测试用例失败。

  4. 通过调用 API IDiscFormat2Data::get_SupportedWriteSpeedDescriptors,获取写入速度描述符列表。

  5. 使报告的写入速度的顺序随机化

  6. 通过使用步骤 5 中的一个写入速度调用 API IDiscFormat2Data::SetWriteSpeed 来设置写入速度。

  7. 创建随机大小最多为介质上 50% 的可用空间的随机数据流。 使用随机数据填充缓冲区

  8. 使用 IDiscFormat2Data::Write 写入步骤 7 中的数据缓冲区。

  9. 如果驱动器支持自动弹出插入机制,则弹出介质,然后再插入托盘中。

  10. 从光盘读取数据,并比较数据是否与步骤 9 中写入到介质的数据匹配。

  11. 获取最后一个磁道信息。

  12. 检查逻辑磁道大小是否大于或等于写入的数据的大小。

  13. 检查逻辑轨道编号是否正确

  14. 获取写入参数模式页。

  15. 如果写入参数模式页报告为“固定数据包”,请检查驱动器报告的轨道信息是否不是“数据包/增量”。

  16. 读取光盘信息,并检查区段数是否匹配。

  17. 使用随机大小最多为介质上 100% 的可用空间的随机数据流重复步骤 8 到 16。

    警告

       这些最终步骤旨在测试驱动器能否正确在双层介质上写入数据。

     

结果:驱动器应能在 IMAPI 的上下文中将数据刻录到双层介质的两层。

只读驱动器

说明:测试只读驱动器在开放(可附加)光盘和封闭(已终结)光盘上的读取能力。

警告

   此测试用例需要辅助写入器驱动器,用于为相应的测试配置文件创建测试数据光盘。

 

适用的介质:以下任意介质:

  • CD-ROM

  • DVD-ROM

  • BD-ROM

测试用例步骤:

  1. 弹出写入器驱动器托盘。

  2. 如果测试配置文件是

    • CD-ROM,则要求用户将 CD-R/CD-RW 插入写入器驱动器中。

    • DVD-ROM,则要求用户将 DVD+R/DVD-R/DVD+RW/DVD-RAM 插入写入器驱动器中。

    • BD-ROM,则要求用户将 BD-R/BD-RE 插入写入器驱动器中。

  3. 插入写入器驱动器托盘。

  4. 通过调用 API IDiscFormat2Data::get_SupportedWriteSpeedDescriptors,获取写入速度描述符列表。

  5. 创建随机大小最多为介质上 10% 的可用空间的随机数据流。 使用随机数据填充缓冲区。

  6. 通过使用步骤 4 中的第一个写入速度描述符值调用 API IDiscFormat2Data::SetWriteSpeed 来设置写入速度。

  7. 使用 IDiscFormat2Data::Write,将步骤 5 中的数据缓冲区写入到写入器驱动器中的介质。

  8. 如果支持自动弹出机制,则弹出写入器驱动器托盘。 否则要求用户按下弹出按钮

  9. 如果支持自动弹出机制,则弹出测试驱动器托盘;否则要求用户按下弹出按钮。

  10. 要求用户从写入器驱动器中取出介质,然后将介质放入测试驱动器中。

  11. 如果支持自动插入(装入托盘)机制,则插入写入器驱动器托盘。 否则要求用户将托盘插入驱动器中。

  12. 如果支持自动插入(装入托盘)机制,则插入测试驱动器托盘。 否则要求用户将托盘插入驱动器中。

  13. 从测试驱动器光盘读取数据,并比较数据是否与步骤 7 中写入到介质的数据匹配。

  14. 将 IDiscFormat2Data::ForceMediaToBeClosed 设置为 true,并重复步骤 1 到 13,以验证测试驱动器在已终结光盘上的读取能力。

结果:驱动器应能读取封闭介质和开放介质。

驱动器序列号

说明:验证测试驱动器返回的驱动器序列号是否符合 MMC/Mt. Fuji 规范标准。

警告

   此测试用例需要两个相同的驱动器,用于验证这两个驱动器是否返回唯一序列号。 一个是主要测试设备,另一个是辅助测试驱动器。

 

适用的介质:设备支持的任何介质

测试用例步骤:

  1. 将分配长度设置为 05h,并向主要测试设备发送 INQUIRY 命令。

  2. 如果命令成功,则从响应标头获取额外长度值。

  3. 将分配长度设置为比步骤 2 中的额外长度多 5 字节,并再次向主要设备发送 INQUIRY 命令。

  4. 如果命令成功,则获取供应商标识、产品标识和产品修订版本级别。

  5. 针对辅助驱动器重复步骤 1 到 4,并获取供应商标识、产品标识和产品修订版本级别。

  6. 比较步骤 4 和步骤 5 中的供应商标识值、产品标识值和产品修订版本级别值。 如果它们不匹配,则使测试用例失败。

    警告

       这是为了确保两个测试驱动器相同

     

  7. 向主要测试驱动器发送 GET CONFIGURATION 命令,以获取分配长度等于逻辑单元序列号功能描述符的大小的逻辑单元序列号功能。

  8. 在响应中检查功能代码是否与逻辑单元序列号功能代码匹配。 获取额外长度。

  9. 向主要测试驱动器发送 GET CONFIGURATION 命令,以获取分配长度等于逻辑单元序列号功能描述符的大小加上步骤 8 中报告的所需额外长度的逻辑单元序列号功能。

  10. 在响应中检查以下事项:

    • 功能代码与逻辑单元序列号功能代码匹配。

    • 报告的序列号数据使用 ASCII 格式。

    • 数据已填充。

    • 填充后无数据。

  11. 针对辅助测试设备重复步骤 7 到 9,并获取驱动器序列号。

  12. 比较步骤 10 和步骤 11 中的驱动器序列号。 驱动器应返回唯一序列号。 如果两个序列号相等,则使测试用例失败。

结果:驱动器应返回唯一序列号,并且该序列号应符合 MMC/Mt. Fuji 标准。

实时流式处理

说明:验证驱动器在 cdrom.sys 驱动程序的上下文中的数据内容实时流式处理能力。 使用驱动器报告的各个读取速度和写入速度对设备进行测试。

适用的介质:设备支持的任何介质

测试用例步骤:

  1. 要求用户插入介质。

  2. 如果介质不可写或不可重写,则继续执行步骤 13 的读取测试。

  3. 调用 API IDiscFormat2Data::get_CurrentMediaStatus,检查介质是否为空白。

  4. 如果介质非空白,并且它是以下某种可重写介质类型,则通过使用 minimal blank 选项发送 blank 命令来擦除介质。

    • CD-RW

    • DVD-RW 顺序录制

    • DVD-RW 受限制覆盖

    • DVD+RW

    • DVD-RAM

    • BD-RE

  5. 如果介质不是可重写介质,则要求用户插入空白介质。 重试此步骤 3 次,否则使测试用例失败。

  6. 发送 GET CONFIGURATION 命令,并请求实时流式处理功能。 如果未成功,或者未设置“最新”位,则使测试失败。

  7. 如果未设置实时流式处理功能响应的“流写入”(SW) 位或“写入速度性能描述符”(WSPD) 位,则使测试失败。

  8. 发送 GET PERFORMANCE 命令,请求写入速度描述符,并生成支持的写入速度数组。 如果命令未成功,则使测试失败。

  9. 使写入速度数组随机化。

  10. 如果可用介质大小超过其全部容量的 10%,则使用为下一个写入速度提供的 IOCTL_CDROM_SET_SPEED 和 CDROM_SET_STREAMING 结构调用 DeviceIoControl。 写入最多为全部容量的 10% 的随机数据,并测量速度(有关测量过程说明,请参阅本文档中的相应部分)。

  11. 尽可能长时间重复步骤 10。 如果探测到所有写入速度,则使速度数组随机化,并将下一个写入速度设置为起始速度。

  12. 发送 CLOSE TRACK SESSION 命令,以终结介质

  13. 如果已设置实时流式处理功能响应的“写入速度性能描述符”(WSPD) 位,则发送 GET PERFORMANCE 命令并请求写入速度描述符,并生成支持的读取速度数组;否则,在响应中将“容差”位设置为 10b(标称)并为读取速度选择“开始性能”字段和“结束性能”字段的最低值,发送 GET PERFORMANCE 命令并请求性能数据。 如果这两个命令都未成功,则使测试失败。

  14. 使读取速度数组随机化。

  15. 将读取长度设置为介质上第一个轨道的大小。

  16. 对于每个读取速度,使用为下一个写入速度提供的 IOCTL_CDROM_SET_SPEED 和 CDROM_SET_STREAMING 结构调用 DeviceIoControl。 以大小为介质容量的 10%(或至少 5 MB,如果介质的数据量小于 50 MB)的区块读取介质上记录的全部数据,并测量每个区块的速度。 如果任何区块的实际速度低于任何区块请求的速度,则将测试标记为失败。

结果:驱动器应能以实时流式处理模式运行。

写入速度测量

此测试将查询设备,并获取测试介质支持的写入速度。 然后,此测试会尝试针对所有报告的写入速度验证写入方案。 此测试要求为每个写入方案计算的写入速度接近于为驱动器设置的写入速度。 此测试允许测量的写入速度存在 10% 的容差。 此测试按如下所示验证写入速度。

此测试将数据写入到介质,并监视写入的数据量。 此测试排除最初写入的 10% 数据和最后写入的 10% 数据的计时。 此测试仅测量中间 80% 数据的计时,并计算该数据的速度,并为该值增加 10% 的容差。 因此,如果为中间 80% 数据计算的速度为“x”,则最终计算出的速度为 1.1x。 此测试要求该值大于或等于在开始写入之前为驱动器设置的速度。

此测试排除最初写入的 10% 数据的计时,以允许驱动器进行写入准备。 将排除最后 10% 数据的计时,以允许驱动器对写入到介质的数据执行适当的清理。

音频媒体无缝 RAW 录制

说明:验证驱动器在 IMAPI 的上下文中的无缝 RAW 音频内容写入能力

适用的介质:以下任意介质:

  • CD-R

  • CD-RW

测试用例步骤:

  1. 检查插入了介质的驱动器是否支持无缝 RAW 录制。 如果不支持,则测试将失败。

  2. 检查测试驱动器支持的扇区类型。

  3. 对于测试驱动器支持的每种扇区类型,完成步骤 4 到 9

  4. 创建 RAW 映像。

  5. 设置正确的扇区类型,并为 RAW 映像创建结果流。

  6. 确定 RAW 映像是否为无缝。

  7. 随机选择一个写入速度,并将其设置为刻录速度。 将所请求的扇区类型设置为已为 RAW 映像设置的类型。 将 RAW 映像的流写入到介质,并观察进度。 计算刻录速度,并输出吞吐量。

  8. 通过检查每个逻辑轨道的信息,确定写入是否成功。 检查轨道是否为音频曲目,检查轨道大小是否正确,并检查最后一个逻辑轨道编号的大小加上其起始地址是否等于光盘的导出区的起始地址。如果任意条件返回 false,则测试将失败。 否则,测试将通过。

  9. 对介质执行 RAW 读取。 对于每个轨道,检查轨道是否为音频。 如果不是,则使测试失败,因为录制已经确保轨道是音频区域。 计算轨道的起始偏移量和结束偏移量。从起始偏移量处开始读取轨道,并在轨道的结束偏移量处结束读取。如果在读取过程中发生错误,则使测试失败;

结果:驱动器应能在 IMAPI 的上下文中刻录无缝 RAW 音频映像。

命令用法

命令 说明

OpticalLogoTest.exe /drive [StorageDriveLetter]:\ /log [log] [AdditionalParams] /profile [profile] /RunTestCaseTypes [RunTestCaseTypes]

运行测试。

注意

   有关此测试二进制文件的命令行帮助,请键入 /h。

 

命令语法

命令选项 说明

驱动器

测试光盘设备驱动器号。

示例:/drive e:\\

适配器 (adapter)

路径(用于适配器测试)。

示例:/adapter \"PCI\\VEN_8086&DEV_27DF&SUBSYS_01AD1028&REV_01\\3&172E68DD&0&F9\"

PrimaryTestDrive

测试光盘设备驱动器号。

示例:/PrimaryTestDrive e:\\

SecondaryTestDrive

辅助测试光盘设备驱动器号。

示例:/Secondary Test Drive f:\\

WriterDrive

需要用于测试只读驱动器的写入器的驱动器号。

示例:/WriterDrive f:\\

PrimaryDriveTray

主要光盘设备托盘功能。

示例:/PrimaryDriveTray SupportsEjectInject

SecondaryDriveTray

辅助光盘设备托盘功能。

示例:/SecondaryDriveTray SupportsEjectInject

WriterDriveTray

写入器驱动器托盘功能。

示例:/WriterDriveTray SupportsEjectInject

个人资料

运行测试用例指定的配置文件。 配置文件 ID 应为十进制并用逗号分隔,且 ID 之间不能包含空格。

示例:/profile 9,10,16

seed

用于生成随机测试数据的种子值。

示例:/seed 1000

RunTestCaseTypes

仅运行测试用例的类别。

示例:/RunTestCaseTypes device

RunTestCase

仅运行此测试用例。

示例:/RunTestCase Inquiry

自动化

在自动化模式下运行,使用机器人更改介质。

示例:/Automation

AutomationConfigFile

用于指定介质的二进制文件位置的配置文件。

示例:/AutomationConfigFile OpticalLogoTest.exe.config

Calibrate

校准用于更改介质的机器人。

示例:/Calibrate

徽标

要测试的认证要求的级别。

示例:/logo basic 或 /logo premium

ReuseMedia

重复使用非空白介质进行测试。 如果该介质支持多区段,则测试不要求介质为空白。 此选项仅用于测试。 不允许用于认证。

示例:/ReuseMedia

SkipFullBlank

跳过完全擦除方案,只测试最低限度擦除方案。

示例:/SkipFullBlank

SkipManualTestCases

跳过需要手动交互的测试用例。

示例:/SkipManualTestCases

RunDataDirectionFlagScenario

使用不正确的数据方向标志验证命令。

示例:/RunDataDirectionFlagScenario

调试器

提示附加调试程序,以留出时间在进一步执行程序之前附加调试程序。

示例:/Debugger

详细程度

日志记录详细程度。

示例:/Verbosity Verbose

log

日志文件名称

默认值:OpticalLogoTest.wtl

示例:/log mytestlog.wtl

EnableImapiv2Trace

启用 IMAPIv2 软件跟踪。

示例:/EnableImapiv2Trace

Imapiv2TraceGuidsFile

IMAPIv2 跟踪 GUID 文件,该文件包含需要记录其跟踪的组件 GUID 的完整列表

默认值:imapiv2-guids.txt

示例:/IMAPIv2TraceGuidsFile imapiv2-guids.txt

Imapiv2TraceLogFile

IMAPIv2 输出跟踪日志文件。

默认值:imapiv2-tracelog.etl

示例:/IMAPIv2TraceLogFile imapiv2-tracelog.etl

cmdPerfTraceAnalysis

运行命令性能分析。

示例:/cmdPerfTraceAnalysis Always

cmdPerfTraceGuidsFile

性能跟踪 GUID 文件,该文件包含用于跟踪性能数据的组件 GUID

默认值:perf-guids.txt

示例:/cmdPerfTraceGuidsFile perf-guids.txt

cmdPerfTraceLogFile

性能输出跟踪日志文件

默认值:perf-tracelog.etl

示例:/cmdPerfTraceLogFile perf-tracelog.etl

cmdPerfTraceTmfFile

性能跟踪格式说明文件。

示例:/cmdPerfTraceTmfFile perf-tracelog.tmf

 

文件列表

文件 位置

ataportlogotrace.tmf

<[testbinroot]>\nttest\driverstest\storage\optical\setup\tracing\

autoloader.dll

<[testbinroot]>\nttest\driverstest\storage\optical\autoloader\

DataPacket.dll

<[testbinroot]>\nttest\driverstest\storage\wdk\optical\test\

DeviceTestCases.dll

<[testbinroot]>\nttest\driverstest\storage\wdk\optical\test\

DiscManagerLib.dll

<[testbinroot]>\nttest\driverstest\storage\wdk\optical\test\

microsoft.storage.imapi.dll

<[testbinroot]>\nttest\driverstest\storage\interop\imapi\

ModularTestCase.dll

<[testbinroot]>\nttest\driverstest\storage\wdk\optical\test\

OpticalLogoTest.exe

<[testbinroot]>\nttest\driverstest\storage\wdk\optical\test\

OpticalTestHarness.dll

<[testbinroot]>\nttest\driverstest\storage\wdk\optical\test\

OpticalTestLib.dll

<[testbinroot]>\nttest\driverstest\storage\wdk\optical\test\

ProfileTestCases.dll

<[testbinroot]>\nttest\driverstest\storage\wdk\optical\test\

ScenarioTestCases.dll

<[testbinroot]>\nttest\driverstest\storage\wdk\optical\test\

ScsiLib.dll

<[testbinroot]>\nttest\driverstest\storage\wdk\optical\test\

storageinteroputil.dll

<[testbinroot]>\nttest\driverstest\storage\interop\utils\

tracefmt.exe

<[osbinroot]>\idw\

StorageDevices.dll

<[testbinroot]>\nttest\driverstest\storage\wdk\

TraceLib.dll

<[osbinroot]>\nttest\driverstest\storage\wdk\optical\test\

tracelog.exe

<[osbinroot]>\idw\

 

参数

参数名称 参数说明
StorageDriveLetter 测试设备驱动器号
profile
LLU_NetAccessOnly 用于访问测试文件共享的用户帐户。
LLU_LclAdminUsr 用于运行测试的用户帐户。
WDKDeviceID 要测试的设备的实例路径
log
RunTestCaseTypes
AdditionalParams