光学徽标测试-设备

命令 说明

OpticalLogoTest.exe/drive [StorageDriveLetter]: \/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 应为十进制,中间用逗号分隔。

示例:/profile 9、10、16

seed

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

例如:/seed 1000

RunTestCaseTypes

仅运行测试用例的类别。

示例:/RunTestCaseTypes 设备

RunTestCase

仅运行此测试用例。

示例:/RunTestCase 查询

自动化

使用机器人更改媒体在自动化模式下运行。

示例:/Automation

AutomationConfigFile

用于指定媒体的 bin 位置的配置文件。

示例:/AutomationConfigFile OpticalLogoTest.exe.config

校准

校准用于更改媒体的机器人。

示例:/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

示例:/IMAPIv2TraceLogFile imapiv2-tracelog

cmdPerfTraceAnalysis

运行命令性能分析。

示例:/cmdPerfTraceAnalysis

cmdPerfTraceGuidsFile

性能跟踪 Guid 文件,其中包含跟踪性能数据的组件的 Guid

默认值: perf-guids.txt

示例:/cmdPerfTraceGuidsFile perf-guids.txt

cmdPerfTraceLogFile

性能输出跟踪日志文件

默认值: perf-tracelog

示例:/cmdPerfTraceLogFile perf-tracelog

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

 

 

 

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

测试详细信息

   
规范
  • 装置.存储。CommandPerformance
  • 装置.存储。DriveDefinition
  • 装置.存储。光学. 功能
  • 装置.存储。光学. 配置文件
  • 装置.存储。则
  • 装置.存储。MmcVersion
  • 装置.存储。AsynchronousNotification
平台
  • 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
预计运行时间 (分钟) 60
类别 方案
超时 (分钟) 3600
需要重启 false
需要特殊配置 false
类型 automatic

 

其他文档

此功能区域中的测试可能包含附加文档,包括先决条件、安装和故障排除信息,可在以下主题中找到 () :

运行测试

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

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

注意

   在测试计算机上运行的 i/o 密集型应用程序可能会影响光学徽标测试性能测量方案。 请确保在测试运行时没有其他应用程序在测试计算机上运行。

 

故障排除

有关 hlk 测试失败的一般故障排除,请参阅Windows hlk 测试失败疑难解答

有关疑难解答信息,请参阅设备故障排除存储测试

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

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

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

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

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

详细信息

驱动器应支持以下命令:

  • 获取不带媒体) 的配置 (

  • 获取事件状态通知

  • 查询

  • 机制状态

  • 模式感知

  • 阻止允许删除

  • 请求意义

  • 开始停止单元

  • 测试单元准备就绪

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

  • 获取具有媒体) 的配置 (

  • 获取性能

  • 读取缓冲区容量

  • 读取容量

  • 读取光盘信息

  • 读取格式化容量

  • 读取 Toc Pma Atip

  • 发送 Opc 信息

  • 设置 CD 速度

  • Read10

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

  • 事件状态通知

  • 写入

    • 顺序模式

    • 数据包模式

    • 受限覆盖

    • 多会话支持

  • 音频媒体 (写入音频轨道)

  • 空白

  • 唯一驱动器序列号

  • 实时流式处理

  • 音频媒体无缝原始记录

测试用例分为以下三组:

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

    • 获取不带媒体) 的配置 (

    • 获取事件状态通知

    • 查询

    • 机制状态

    • 模式感知

    • 阻止允许删除

    • 请求意义

    • 开始停止单元

    • 测试单元准备就绪

  • 分析测试用例。 以下命令将在所有适用的配置文件上测试验证测试用例:

    • 获取配置

    • 获取性能

    • 读取容量

    • 读取缓冲区容量

    • 读取光盘信息

    • 读取格式化容量

    • 读取 TOC PMA ATIP

    • 发送 OPC 信息

    • 设置 CD 速度

    • READ10

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

    • 事件状态通知

    • 空白

    • 写入/多会话

    • 音频媒体

    • 写入双层媒体

    • 驱动器序列号

    • 只读驱动器

    • 实时流式处理

    • 音频媒体无缝原始记录

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

  • 获取不带媒体) 的配置命令 (

  • 获取事件状态通知命令

  • 查询命令

  • "机制状态"命令

  • MODE SENSE 命令

  • "阻止允许介质删除"命令

  • REQUEST SENSE 命令

  • 启动停止单元命令,弹出 & 负载性能

  • 测试单元就绪命令

  • GET CONFIGURATION 命令

  • 获取性能

  • READ CAPACITY 命令

  • READ BUFFER CAPACITY 命令

  • 读取磁盘信息命令

  • READ FORMAT 容量命令

  • READ TOC/PMA/ATIP 命令

  • 发送 OPC 信息命令

  • SET CD SPEED 命令

  • READ10 命令

  • EVENT NOTIFICATION

  • 写入测试

  • 音频媒体 (写入音频轨迹)

  • 空白

  • 写入双层媒体

  • 只读驱动器

  • 驱动器序列号

  • 实时流式处理

  • 写入速度度量

  • 音频媒体无间隔原始录制

GET CONFIGURATION 命令 (没有介质)

描述: 此测试是确保驱动器在托盘中没有任何媒体时正确响应 GET CONFIGURATION 命令。

适用的媒体: 设备支持的任何媒体

测试用例步骤:

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

  2. 等待托盘打开。

  3. 发送响应数据长度为 4 字节的 GET CONFIGURATION 命令,获取功能标头数据长度。 如果命令失败,请打印检测键,使测试用例失败。 目的:允许软件探测命令支持。

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

  5. 使用 RT=00b 和步骤 3 中设备返回的正确数据长度再次发送 GET CONFIGURATION 命令。 目的:允许软件检索驱动器支持的全部功能列表。

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

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

  8. 发送响应数据长度为 20 字节、RT=01b、起始功能编号=0010h 的 GET CONFIGURATION 命令 (随机可读功能) 。 如果命令失败或未返回随机可读功能描述符,请根据情况打印检测键,使测试用例失败。 目的:允许软件探测特定功能货币 (当前) 。

  9. [可选]发送 GET CONFIGURATION 命令,其中数据方向标志设置为"到设备",响应数据长度为 4 字节,以获取功能标头数据长度。 如果命令失败,请打印检测键,使测试用例失败。 目的:确保设备处理具有不正确数据方向的命令。

  10. 注入托盘。

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

  12. 发送响应数据长度为 16 字节、RT=01b、起始功能编号=0003h 的 GET CONFIGURATION 命令 (可移动中等功能) 。 如果命令失败,请根据情况打印检测键,使测试用例失败。 如果命令成功:

    • 检查驱动器是否支持自动弹出机制,是否设置了"弹出"位。

    • 检查驱动器是否支持自动注入机制,是否设置了"Load"位。

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

GET EVENT STATUS NOTIFICATION 命令

描述: 验证驱动器是否支持 GET EVENT STATUS NOTIFICATION 命令

适用的媒体: 设备支持的任何媒体

测试用例步骤:

  1. 在 CDB 中发送具有以下值的"获取事件状态通知"命令。

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

    • Polled = 1

    • 分配长度等于响应标头的大小, (4 个)

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

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

  4. [可选]发送获取事件状态通知命令,数据方向标志设置为"到设备",CDB 中具有以下值。

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

    • Polled = 1

    • 分配长度等于响应标头的大小, (4 个)

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

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

  7. 在 CDB 中发送具有以下值的"获取事件状态通知"命令。

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

    • Polled = 1

    • 分配长度等于响应标头的大小, (4 个)

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

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

"查询"命令

描述: 验证驱动器是否支持"查询"命令。

适用的媒体: 设备支持的任何媒体

测试用例步骤:

  1. 发送分配长度等于 08h 的"查询"命令。 目的:允许软件探测所需的响应缓冲区大小。

  2. 如果命令成功,请检查响应中标头中的附加长度。 附加长度必须为 32d 或更大 [MMC5r04 6.9.2]。

  3. 在分配长度设置为比步骤 2 中的附加长度多 5 个字节时,再次发送"查询"命令。

  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 中发送具有以下值的"查询"命令:

    • EVPD = 0

    • 分配长度 = 240

  8. 在 CDB 中发送具有以下值的"查询"命令:

    • EVPD = 1

    • 分配长度 = 240

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

  10. 发送一个随机次数的、随机分配长度介于 10 到 25 之间的一个查询命令。 如果命令失败,则测试用例失败。

  11. [可选]将数据方向标志设置为"到设备"且 CDB 中具有以下值的"查询"命令发送

    • EVPD = 0

    • 分配长度 = 240

结果: 驱动器应正确响应"查询"命令。

"机制状态"命令

描述: 验证驱动器是否支持"机制状态"命令

适用的媒体: 设备支持的任何媒体

测试用例步骤:

  1. 发送分配长度为 0 字节的 MECHANISM STATUS 命令 (未指定的数据) 。 如果命令失败,请打印检测键,使测试用例失败。

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

  3. 等待设备返回 Sense Key 的 (数据:0x2、ASC:0x3A、ASCQ:0x02)

  4. 发送分配长度为 8 字节的 MECHANISM STATUS 命令。

  5. 检查 Door Open 位是否为 1b。

    • 目的:允许软件检测门是打开还是 (打开) 。
  6. 注入托盘

  7. 等待设备准备就绪

  8. 发送分配长度为 8 字节的 MECHANISM STATUS 命令。

  9. 检查 Door Open 位是否为 0b。

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

  11. [可选]发送"机制状态"命令,其中数据方向标志设置为"到设备",分配长度为 8 字节。 将步骤 11 中的缓冲区传递给设备。

结果: 驱动器应正确响应"机制状态"命令

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

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

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

    • 模式页眉中的页面代码与请求的页面代码匹配

  8. 发送分配长度为 0x0A

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

  10. 将 Mode Sense 命令发送随机次数,介于 10 到 25 之间,在 0x0A 和 0xFFF0。

  11. 检查响应是否匹配字节字节(最大响应大小为 (0x0A 和 0xFFF0) 之间的随机值,并且分配长度的响应等于 0xFFF0。

  12. [可选]发送 MODE SENSE 命令,并将数据方向标志设置为"到设备",在 CDB 中具有以下值,获取所有受支持的模式页:

    • 页面控件 = 0

    • 禁用块描述符 = 1

    • 页面代码 = 0x3F

    • 分配长度 = 0x8000

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

PREVENT ALLOW MEDIUM REMOVAL 命令

描述: 验证驱动器是否支持 PREVENT ALLOW MEDIUM REMOVAL 命令。

适用的媒体: 设备支持的任何媒体

测试用例步骤:

  1. 发送 PREVENT ALLOW MEDIUM REMOVAL 命令,并将 prevent 位设置为 1,将永久位设置为 0。 这会锁定驱动器。 如果命令失败,则打印检测键并失败测试用例。

  2. 发送 start stop unit 命令,将 LocEj 位设置为 1,将即时位设置为 0,将 Start 位设置为零。 这会尝试弹出该磁盘。如果驱动器未拒绝包含检测数据的命令,0x05 0x53 0x02则失败。

  3. 发送"测试单元就绪"命令并确保它成功。

  4. 要求用户按弹出按钮弹出媒体。

  5. 发送"测试单元就绪"命令,并确保它仍然 (打开测试) 。

  6. 发送"防止允许中等删除"命令,将"阻止位"设置为"0",将"永久性位"设置为"0"。 这会解锁驱动器。 如果命令失败,则打印检测键并失败测试用例。

  7. 要求用户按弹出按钮弹出媒体

  8. 等待设备打开门 - 发送"测试单元就绪"命令,如果命令成功,请等待 1 秒,然后重试,直到 (02/3A/02) 。 30 秒后超时。

  9. 如果驱动器支持自动加载机制,请将托盘注入回驱动器,否则请用户将托盘插入驱动器。

  10. 等待设备准备就绪

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

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

REQUEST SENSE 命令

描述: 验证驱动器是否支持 REQUEST SENSE 命令。

适用的媒体: 设备支持的任何媒体

测试用例步骤:

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

  2. 如果命令失败,则打印检测键并失败测试用例。

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

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

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

START STOP UNIT 命令, 出 & 站加载性能

描述: 验证驱动器是否支持 START STOP UNIT 命令。

适用的媒体: 设备支持的任何媒体

测试用例步骤:

  1. 在 CDB 中发送具有以下值的 START STOP UNIT 命令

    • Immediate = 0,LoadEject = 0,Start = 0,PowerConditions = 0

    • Immediate = 0,LoadEject = 0,Start = 1,PowerConditions = 0

    • Immediate = 1,LoadEject = 0,Start = 0,PowerConditions = 0

    • Immediate = 1,LoadEject = 0,Start = 1,PowerConditions = 0

  2. 对于此组合,该命令应成功。

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

    • Immediate = 1,LoadEject = 1,Start = 0,PowerConditions = 0
  4. 等待设备打开门 - 发送 TEST UNIT READY 命令,如果命令成功,请等待 5 秒,然后重试,直到失败并出现 (02/3A/02) 。 10 秒后超时。

  5. 如果驱动器支持加载托盘 (自动注入) ,则发送带 CDB 中以下值的 START STOP UNIT 命令,以注入托盘:

    • Immediate = 1,LoadEject = 1,Start = 1,PowerConditions = 0
  6. 如果驱动器不支持加载托盘,请要求用户将托盘插入驱动器中。

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

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

    • Immediate = 0,LoadEject = 1,Start = 0,PowerConditions = 0
  9. 等待设备打开门 - 发送 TEST UNIT READY 命令,如果命令成功,请等待 1 秒,然后重试,直到失败并出现 (02/3A/02) 。 30 秒后超时。

  10. 要求用户删除媒体

  11. 如果驱动器支持加载托盘 (自动注入) ,则发送带 CDB 中以下值的 START STOP UNIT 命令,以注入托盘:

    • Immediate = 0,LoadEject = 1,Start = 1,PowerConditions = 0
  12. 确保在 02/3A/01 (未就绪/中不存在/托盘关闭时命令)

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

    • Immediate = 0,LoadEject = 1,Start = 0,PowerConditions = 0
  14. 要求用户将媒体放在托盘中。

  15. 如果驱动器不支持加载托盘,请要求用户将托盘插入驱动器,并等待设备准备就绪。 如果驱动器支持加载托盘 (自动注入) ,则发送 CDB 中具有以下值的 START STOP UNIT 命令,以注入托盘并等待设备准备就绪。

    • Immediate = 0,LoadEject = 1,Start = 1,PowerConditions = 0
  16. [可选]发送 START STOP UNIT 命令,并将数据方向标志设置为"到设备"。 在 CDB 中发送包含随机数据和以下值的随机大小缓冲区。

    • Immediate = 0,LoadEject = 0,Start = 0,PowerConditions = 0

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

TEST UNIT READY 命令

描述: 验证驱动器是否支持 TEST UNIT READY 命令。

适用的媒体: 设备支持的任何媒体

测试用例步骤:

  1. 发送 TEST UNIT READY 命令。

  2. 如果命令失败,则打印检测键并失败测试用例

  3. [可选]发送 TEST UNIT READY 命令,数据方向标志设置为"到设备",随机大小缓冲区填充随机数据。

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

GET CONFIGURATION 命令

描述: 验证驱动器是否支持报告配置文件的 GET CONFIGURATION 命令。

适用的媒体: 设备支持的任何媒体

测试用例步骤:

  1. 发送响应数据长度为 0 字节的 GET CONFIGURATION 命令 (未指定) 。 如果命令失败,请打印检测键,使测试用例失败。

    • 目的:允许软件探测命令支持。
  2. 发送响应数据长度为 4 字节的 GET CONFIGURATION 命令,获取功能标头数据长度。 如果命令失败,请打印检测键,使测试用例失败。

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

    • 目的:

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

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

  4. 如果命令成功,请检查响应中的以下内容

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

    • 当前配置文件号与驱动器中加载的媒体类型匹配

  5. 发送 GET CONFIGURATION 命令,其响应数据长度在步骤 3 中读取,RT=00b,起始功能编号=0000h。 读取当前配置文件,然后在支持的配置文件列表中查找此配置文件代码。 确保当前配置文件与插入的媒体的配置文件类型匹配。 如果命令失败,或者当前配置文件未在支持的配置文件列表中报告为当前配置文件,请根据情况打印检测键,使测试用例失败。

    • 目的:确保驱动器报告的信息的一致性。
  6. 如果长度适合 2 个字节,请再次发送 GET CONFIGURATION 命令,其 RT=00b 且具有设备在步骤 3 中返回的正确数据长度。 如果长度超过 2 个字节,则发送最大数据长度为 2 个字节的命令。

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

  8. 对于在步骤 3-6 中成功执行的所有命令,请检查响应标头中数据长度是否与 4 个字节 (4 个字节) 。 如果未对齐 4 个字节,则失败。 目的:软件假定 4 字节对齐。

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

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

    • 目的:确保驱动器报告的元信息的一致性。
  11. 发送响应数据长度为 20 字节、RT=01b、起始功能编号=0010h 的 GET CONFIGURATION 命令 (随机可读功能) 。 如果命令失败或未返回随机可读功能描述符,请根据情况打印检测键,使测试用例失败。 目的:允许软件探测当前 (特定) 。

  12. [可选]发送 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 双层 Seq

  • 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. [可选]发送 GET PERFORMANCE 命令,数据方向标志设置为"到设备",随机大小缓冲区填充随机数据。 在 CDB 中设置以下值,以获得零个名义读取性能描述符。

    • 类型 = 0

    • 起始 LBA = 1

    • 最大描述符 = 0

    • 数据类型 = 0x10

  13. 如果命令失败,则打印检测键并失败测试用例。

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

READ CAPACITY 命令

描述: 验证驱动器是否支持报告配置文件的 READ CAPACITY 命令。

适用的媒体: 设备支持的任何媒体

测试用例步骤:

  1. 发送 READ CAPACITY 命令。

  2. 如果命令失败,则打印检测键并失败测试用例。

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

  4. [可选]发送 READ CAPACITY 命令,数据方向标志设置为"到设备",随机大小缓冲区填充随机数据。

  5. 如果命令失败,则打印检测键并失败测试用例。

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

READ BUFFER CAPACITY 命令

描述: 验证驱动器是否支持报告配置文件的 READ BUFFER CAPACITY 命令。

适用的媒体: 设备支持的任何媒体。

测试用例步骤:

  1. 将 GET CONFIGURATION 命令发送到获取实时流式处理功能。 如果设置了读取缓冲区容量块,请检查 (RBCB) 位。 如果未设置,则驱动器不支持读取缓冲区容量命令。 跳过测试用例。

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

  3. 如果命令失败,则打印检测键并失败测试用例。

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

  5. 如果命令失败,则打印检测键,使命令失败。

  6. [可选]发送 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以获取标准光盘信息大小。

  2. 如果命令失败,则打印检测密钥并使测试用例失败。

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

  4. 发送 "读取光盘信息" 命令,其分配长度等于第3步和第2步中的数据长度。

  5. 如果命令失败,则打印检测密钥并使测试用例失败。

  6. 可有可无将数据方向标志设置为 "到设备" 的 "读取光盘信息" 命令和随机大小缓冲区(填充随机数据,将 "分配长度" 设置为缓冲区大小)发送。

Result: 驱动器应该正确实现适用介质类型的 "读取光盘信息" 命令。

读取格式化容量命令

说明: 验证驱动器是否支持所报告的配置文件的 "读取格式容量" 命令。

适用的媒体: 以下任何媒体:

  • DVD+RW

  • DVD-RW 限制覆盖

  • DVD-RAM

  • CD-RW

测试用例步骤:

  1. 发送 "读取格式容量" 命令,该命令的分配长度等于 4 (容量列表标头) 。

  2. 如果命令失败,则打印检测密钥并使测试用例失败。

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

  4. 发送 "读取格式容量" 命令,该命令的分配长度等于容量列表长度 + 4 (容量列表标头) 的大小。

  5. 如果命令失败,则打印检测密钥并使测试用例失败。

  6. 如果容量列表长度为8的倍数,则检查响应。

  7. 可有可无发送 "读取格式容量" 命令,并将 "数据方向" 标志设置为 "到设备",并将随机大小缓冲区填充为随机数据,将 "分配长度" 设置为缓冲区的大小。

Result: 驱动器应该正确实现适用介质类型的 "读取格式容量" 命令。

READ TOC/PMA/ATIP 命令

说明: 验证驱动器是否支持所报告的配置文件的 "读取 TOC/PMA/ATIP" 命令。

适用的媒体: 以下任何媒体:

  • CD-ROM

  • DVD-ROM

  • BD

测试用例步骤:

  1. 发送具有以下值的 "读取 TOC/PMA/ATIP" 命令: CDB。

    • 格式 = 0,MSF = 0,跟踪会话编号 = 1,分配长度 = 4
  2. 如果命令失败,则打印检测密钥并使测试用例失败。

  3. 可有可无将 "数据方向" 标志设置为 "" 到设备 "的" 读取 TOC/PMA/ATIP "命令和" 随机数据 "和" 分配长度 "设置为缓冲区大小的缓冲区一起发送。 将 CDB 设置为以下值:

    • 格式 = 0,MSF = 0,跟踪会话编号 = 1,分配长度 = 4

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

发送 OPC 信息命令

说明: [此内容尚不可用。]

适用的媒体: 以下任何媒体:

  • DVD-RW 限制覆盖

  • DVD-R

  • CD-RW

  • CD-R

测试用例步骤:

  1. 发送发送 OPC 信息命令,并将 DoOpc 设置为1

  2. 如果命令失败,则打印检测密钥并使测试用例失败。

  3. 可有可无发送 "发送 OPC 信息" 命令,并将 DoOpc 设置为1,将 "数据方向" 标志设置为 "到设备",并通过随机数据填充随机大小的缓冲区。 分配长度设置为缓冲区的大小。

Result: 驱动器应该正确实现适用介质类型的 SEND OPC 信息命令。

设置 CD 速度命令

说明: 验证驱动器是否支持所报告的配置文件的 "设置 CD 速度" 命令。

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

测试用例步骤:

  1. 将获取配置命令发送到获取实时流式处理功能。 如果设置了 "设置 CD 速度 (SCS) 位,请检查响应。 如果未设置此设置,则驱动器不支持 "设置 CD 速度" 命令。 跳过该测试用例。

  2. 发送 SET CD 速度命令,其中包含 CDB 中的以下值。

    • RotationalControl = 0,ReadSpeed = 0xFFFF,WriteSpeed = ( ( (4 * 75 * 2352) + 500) /1000) 如果该命令失败,则将无法打印感知密钥并使测试用例失败
  3. 可有可无将数据方向标志设置为 "发送到设备" 的 "发送 SET CD 速度" 命令和用随机数据填充的随机大小的缓冲区。 在 CDB 中设置以下值。

    • RotationalControl = 0,ReadSpeed = 0xFFFF,WriteSpeed = ( ( (4 * 75 * 2352) + 500) /1000)

Result: 驱动器应该正确实现适用介质类型的 SET CD 速度命令。

READ10 命令

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

适用的媒体: 以下任何媒体:

  • CD-ROM

  • DVD-ROM

测试用例步骤:

  1. 发送读取 TOC/PMA/ATIP 命令,其分配长度等于读取目录响应标头的大小, ( 4 个字节)

  2. Send READ TOC/PMA/ATIP 命令,该命令的分配长度等于读取目录响应标头的大小, ( 4 个字节) + 步骤1的响应标头中的数据长度。

  3. 如果其任何控件的任何控件设置为0x04,则检查所有格式化的读取目录说明符。

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

  5. 否则,从带格式的 Toc track 描述符中获取曲目起始地址。

  6. 将 "LBA" 字段设置为 "读取容量" 命令,以获取块大小。

  7. 发送 "读取" 命令,将 "传输长度" 设置为0,开始 LBA 设置为步骤5中的 LBA。

  8. 计算要读取的块数

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

  10. 如果读取容量响应中的 LBA 比步骤5中的 LBA 大,则将从读取容量响应和步骤5中的 lba 开始读取的块数设置为等于 LBA 之间的差值。 如果该值大于50,请将读取的块数设置为50。

  11. 在步骤5中,将读取10个 CDB 的起始 LBA 设置为 LBA

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

  13. 睡眠10毫秒

  14. 递增读取 10 CDB 中的起始 LBA

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

  16. 可有可无发送 "数据方向" 标志设置为 "到设备" 的 READ10 命令以及用随机数据填充的随机大小的缓冲区。 在 CDB 中设置以下值。

    • TransferLength = 1,开始 LBA = 从步骤8中的 LBAs 数量的 LBA 范围内的随机 LBA 值,该范围从步骤8开始 LBA,步骤5

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

事件通知

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

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

测试用例步骤:

  1. 如果驱动器 STORAGE_ADAPTER_DESCRIPTOR 结构的 "BusType" 字段设置为 BusTypeSata,则发送 IOCTL_ATA_PASS_THROUGH 并请求标识数据包设备信息数据。 在响应中,请检查是否 79) 支持 word 78 (异步通知功能的第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. 如果媒体不为空,并且它是以下可重写媒体类型之一,则通过发送具有最小空白选项的空白命令来擦除媒体。

    • 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 介质类型,则通过发送包含最小空白选项的空白命令来擦除媒体。

  2. 如果媒体不是可重写的媒体,则要求用户插入空白介质。 请重试 3 次,否则测试用例失败。

  3. 通过调用 DiscFormat2TrackAtOnce::P repareMedia 锁定媒体进行独占访问。

  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. 实现 Erase 事件处理程序 DDiscFormat2EraseEvents::Update。

  10. 调用 API IDiscFormat2Erase::p ut_FullErase,将 erase 选项设置为 false,以便它将执行最小空白。

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

  12. 调用 API IDiscFormat2Data::get_CurrentMediaStatus检查媒体是否为空。

  13. 读取磁盘信息并检查

    • 报告的会话数为 1。

    • 最后一个会话中的第一个轨迹为 1。

    • 最后一个会话中的最后一个轨迹为 1。

  14. 调用 API IDiscFormat2Erase::p ut_FullErase,将 erase 选项设置为完全空白。 重复步骤 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. 重复步骤 8 到 16,随机大小的随机数据流可达到媒体上可用空间的 100%。

    警告

       最后的步骤是测试驱动器能否正确写入双重层上的数据。

     

结果: 驱动器应能够将数据从 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。 五分之一的规格标准。

警告

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

 

适用的媒体: 设备支持的任何媒体

测试用例步骤:

  1. 将"查询"命令发送到分配长度为 05h 的主测试设备。

  2. 如果命令成功,请从响应标头获取其他长度值。

  3. 将"查询"命令再次发送到主设备,其分配长度设置为比步骤 2 中的附加长度多 5 个字节。

  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。 中国标准。

实时流式处理

描述: 验证驱动器在驱动程序的上下文中数据内容cdrom.sys功能。 设备使用驱动器报告的各种读取和写入速度进行测试。

适用的媒体: 设备支持的任何媒体

测试用例步骤:

  1. 要求用户插入媒体。

  2. 如果媒体不可写或不可重写,请继续执行步骤 13 的读取测试。

  3. 调用 API IDiscFormat2Data::get_CurrentMediaStatus检查媒体是否为空。

  4. 如果媒体不为空,并且它是以下可重写媒体类型之一,则通过发送包含最小空白选项的空白命令来擦除媒体。

    • 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%,请调用 DeviceIoControl,IOCTL_CDROM_SET_SPEED和CDROM_SET_STREAMING下一次写入速度提供的结构。 写入高达 10% 完整容量的随机数据并测量 (请参阅本文档中的相应部分,以测量数据) 。

  11. 请尽可能长地重复步骤 10。 如果探测所有写入速度,则随机排列速度数组,将下一次写入速度设置为开头。

  12. 发送 CLOSE TRACK SESSION 命令以完成媒体

  13. 如果设置了写入速度性能描述符 (WSPD) 位实时流式处理功能响应,则发送 GET PERFORMANCE 命令(请求写入速度描述符)并生成支持的读取速度数组,否则发送 GET PERFORMANCE 命令,请求的"性能数据"位数设置为 10b () ,对于读取速度,请选择响应中"开始性能"和"结束性能"字段的最低值。 如果任一命令未成功,测试将失败。

  14. 随机排列读取速度数组。

  15. 将读取长度设置为媒体上第一个轨迹的大小。

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

结果: 驱动器应能够在实时流模式下运行。

写入速度度量

测试查询设备,并获取测试介质支持的写入速度。 然后,它将尝试验证所有报告写入速度的写入方案。 测试预期每个写入方案的计算写入速度接近设置为驱动器的写入速度。 测试允许测量的写入速度的 10% 容错。 测试将验证写入速度,如下所示。

测试将数据写入媒体并监视写入的数据量。 它不包括 10% 写入的初始数据(最后 10% 写入的数据)的时间。 它只测量中间 80% 数据的计时,并计算该数据的速度,并将 10% 的容错添加到该值。 因此,如果"x"是计算中间 80% 数据的速度,则最终计算速度为 1.1 倍。 测试预期此值大于或等于开始写入前为驱动器设置的速度。

测试不包括初始 10% 的数据写入计时,以允许驱动器准备写入。 排除最后 10% 的数据计时,以允许驱动器对写入媒体的数据进行适当的清理。

音频媒体无间隔原始录制内容

描述: 验证 IMAPI 上下文中无间隔原始音频内容的驱动器写入功能

适用的媒体: 以下任何介质:

  • CD-R

  • CD-RW

测试用例步骤:

  1. 检查已插入介质的驱动器是否支持无间隙原始记录。 如果不支持,测试将失败。

  2. 检查硬盘驱动器支持的扇区类型。

  3. 对于硬盘驱动器支持的每个扇区类型,请完成步骤 4 到 9

  4. 创建原始映像。

  5. 设置正确的扇区类型,并创建原始图像的结果流。

  6. 确定原始图像是否无间隙。

  7. 随机选择写入速度,并设置为"加速"。 将请求的扇区类型设置为已针对原始映像设置的扇区类型。 将原始图像的流写入媒体并观察进度。 计算处理速度并打印吞吐量。

  8. 通过检查每个逻辑跟踪信息来确定写入是否成功。 检查轨迹是否为音频轨迹、轨迹大小是否正确,以及最后一个逻辑轨迹号的大小加上其起始地址是否等于从磁盘中退出的潜在客户的起始地址。如果任何条件返回 false,测试将失败。 否则,它将通过。

  9. 对媒体执行原始读取。 对于每个轨迹,请检查轨迹是否为音频。 如果不是,则测试失败,因为录制内容已确保轨迹是音频轨迹。 计算轨迹的起始偏移量和结束偏移量。从开始偏移量开始,到轨迹的结束偏移量结束,对轨迹执行读取。如果在读取过程中发生错误,则测试失败;

结果: 驱动器应该能够在 IMAPI 上下文中消耗无间隙的原始音频图像。

命令用法