光学ロゴ テスト - CD-ROM
このテストでは、光学式デバイスが標準に準拠し、Windows の光学式ドライブ要件を満たしていることを検証します。
テストの詳細
仕様 |
|
プラットフォーム |
|
サポートされているリリース |
|
予想される実行時間 (分) | 30 |
カテゴリ | シナリオ |
タイムアウト (分) | 1800 |
再起動が必要です | false |
特別な構成が必要です | false |
Type | automatic |
その他のドキュメント
この機能領域のテストには、前提条件、セットアップ、トラブルシューティング情報など、次のトピックに記載されている追加のドキュメントが含まれている場合があります。
テストの実行
テストを実行する前に、テスト要件: 光学ディスク ドライブのテストの前提条件に従って、テストのセットアップを完了してください。
このテストは、プライマリおよびセカンダリ ドライブ トレイ構成を取得するための構成ダイアログ ボックスを表示します。 ユーザーは、[Writer Drive (ライター ドライブ)] ダイアログ ボックスのドライブの一覧から同一のセカンダリ ドライブを選択する必要があります。また、トレイのオート イジェクトとオート ローディングがサポートされているかどうかにかかわらず、ドライブ トレイの機能を選択する必要があります。
Note
テスト コンピューターで実行されている 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
次のシナリオに関連付けられているコマンドが、サポートする機能とプロファイルに対して必須である場合、ドライブは次のシナリオをサポートする必要があります。
イベント状態の通知
Write
シーケンシャル モード
パケット モード
制限付き上書き
マルチ セッションのサポート
Audio Media (オーディオ トラックの書き込み)
空白
一意のドライブ シリアル番号
リアルタイム ストリーミング
オーディオ メディアのギャップレス生録音
テスト ケースは、次の 3 つのグループに分けられます:
デバイスのテスト ケース。 デバイスに適用可能な次のコマンドの検証テスト ケース:
GET CONFIGURATION (WITH NO MEDIA) (構成の取得) (メディアなし)
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 焼き付けエンジン インターフェイスを使用してテストされます。
イベント状態の通知
BLANK
書き込み/マルチセッション
オーディオ メディア
デュアルレイヤー メディアの書き込み
ドライブのシリアル番号
読み取り専用ドライブ
リアルタイム ストリーミング
オーディオ メディアのギャップレス生記録
このテストには次のテスト ケースが含まれます。
GET CONFIGURATION コマンド (メディアなし)
GET EVENT STATUS NOTIFICATION コマンド
INQUIRY コマンド
MECHANISM STATUS コマンド
MODE SENSE コマンド
PREVENT ALLOW MEDIUM REMOVAL コマンド
REQUEST SENSE コマンド
START STOP UNIT コマンド、EJECT & LOAD PERFORMANCE
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
書き込みテスト
オーディオ メディア (オーディオ トラックの書き込み)
BLANK
デュアルレイヤー メディアの書き込み
読み取り専用ドライブ
ドライブのシリアル番号
リアルタイム ストリーミング
書き込み速度の測定
オーディオ メディアのギャップレス生記録
GET CONFIGURATION コマンド (メディアなし)
説明: このテストは、トレイにメディアがないときに、ドライブが GET CONFIGURATION コマンドに正しく応答することを確認します。
適用可能なメディア: デバイスでサポートしているメディア
テスト ケースの手順:
START STOP UNIT コマンドを送信して、トレイを取り出します。
トレイが開いた状態になるまで待ちます。
応答データ長を 4 バイトに指定して GET CONFIGURATION コマンドを送信し、機能ヘッダー データ長を取得します。 コマンドが失敗した場合は、センス キーを出力し、テスト ケースは失敗とします。 目的: コマンドのサポートをソフトウェアでプローブできるようにします。
ドライブが機能ヘッダーに現在のプロファイルを報告していないかどうかを確認します。 ドライブが現在のプロファイルを「現在のプロファイルなし」として再現しない場合、テスト ケースは失敗となります。
RT=00b と、手順 3 でデバイスから返された正しいデータ長を使用して、GET CONFIGURATION コマンドをもう一度送信します。 目的: ドライブでサポートしている機能の一覧全体をソフトウェアが取得できるようにします。
ドライブが機能ヘッダーに現在のプロファイルを報告していないかどうかを確認します。 ドライブが現在のプロファイルを「現在のプロファイルなし」として再現しない場合、テスト ケースは失敗となります。
現在のプロファイル ビットが設定されている応答で プロファイル リスト機能記述子を取得し、いずれかのプロファイル記述子で現在のプロファイル ビットが 1 に設定されている場合、テスト ケースは失敗となります。
GET CONFIGURATION コマンドを、応答データの長さは 20 バイト、RT=01b、Starting Feature Number=0010h (ランダムに読み取り可能な機能) に指定して送信します。 コマンドが失敗した場合、または Random Readable 機能記述子が返されなかった場合は、必要に応じてセンス キーを出力し、テスト ケースは失敗とします。 目的: 特定の機能の currency (current ではありません) をソフトウェアでプローブできるようにします。
[省略可能] データ方向フラグを「to the device」に設定し、応答データ長を 4 バイトに設定して GET CONFIGURATION コマンドを送信し、機能ヘッダー データ長を取得します。 コマンドが失敗した場合は、センス キーを出力し、テスト ケースは失敗とします。 目的: データの方向が正しくないコマンドをデバイスが処理することを確認します。
トレイを挿入します。
デバイスが準備完了状態になるまで待ちます
GET CONFIGURATION コマンドを、応答データの長さは 16 バイト、RT=01b、Starting Feature Number=0003h (リムーバブル メディア機能) に指定して送信します。 コマンドが失敗した場合、必要に応じてセンス キーを出力し、テスト ケースは失敗とします。 コマンドが成功した場合は、次を行います:
ドライブがオート イジェクト機構をサポートしている場合は、「Eject」ビットが設定されているかどうかを確認します。
ドライブが自動挿入メカニズムをサポートしている場合は、「Load」ビットが設定されているかどうかを確認します。
結果: ドライブが GET CONFIGURATION コマンドに正しく応答するはずです
GET EVENT STATUS NOTIFICATION コマンド
説明: ドライブで GET EVENT STATUS NOTIFICATION コマンドがサポートされているかどうかを検証します
適用可能なメディア: デバイスでサポートしているメディア
テスト ケースの手順:
CDB で次の値を指定して Get Event Status Notification コマンドを送信します。
Notification Class Request = 0x7E (操作の変更、電源管理、外部要求、メディア、マルチホスト、デバイス ビジー)
Polled = 1
Allocation Length = 応答ヘッダーのサイズ (4 バイト)
コマンドが失敗した場合は、テストケースを失敗とします
応答で、サポートされているイベントを確認します
[省略可能] データ方向フラグを「デバイスへ」に設定し、CDB に次の値を設定して Get Event Status Notification コマンドを送信します。
Notification Class Request = 0x7E (操作の変更、電源管理、外部要求、メディア、マルチホスト、デバイス ビジー)
Polled = 1
Allocation Length = 応答ヘッダーのサイズ (4 バイト)
コマンドが失敗した場合は、テストケースを失敗とします
応答で、イベント データの長さが 0x6 であること、NEA ビットがオフになっていること、通知クラスが 0 以外であること、サポートされているイベント クラスが手順 3 と同じであることを確認します。 それ以外の場合、テスト ケースは失敗とします。
CDB で次の値を指定して Get Event Status Notification コマンドを送信します。
Notification Class Request = 0x7E (操作の変更、電源管理、外部要求、メディア、マルチホスト、デバイス ビジー)
Polled = 1
Allocation Length = 応答ヘッダーのサイズ (4 バイト)
コマンドに失敗すると、テスト ケースを失敗させます。
結果: ドライブは、GET EVENT STATUS NOTIFICATION コマンドに適切に応答する必要があります。
INQUIRY コマンド
説明: ドライブで INQUIRY コマンドがサポートされているかどうかを検証します。
適用可能なメディア: デバイスでサポートしているメディア
テスト ケースの手順:
Allocation Length を 08h として INQUIRY コマンドを送信します。 目的: 必要な応答バッファー サイズをソフトウェアがプローブできるようにします。
コマンドが成功した場合は、応答でヘッダー内の追加の長さを確認します。 追加の長さは、32d 以上である必要があります [MMC5r04 6.9.2]。
Allocation Length を手順 2 の Additional Length よりも 5 バイト長く設定して、INQUIRY コマンドをもう一度送信します。
コマンドが成功した場合は、応答データ フィールドが MMC5r04 table 320 で指定されている値と一致していることを確認します。
ベンダー識別、製品識別、製品リビジョン レベルが null でないことを確認します。
- 目的: ソフトウェアによる基本的な識別。
次の値が一致するかどうかを確認します:
Device Type = 5
Device Type Qualifier = 0
Removable Media = 1
Response Data Format = 2
Hierarchy Support = 0
Normal ACA = 0
Protect = 0
Third Party Copy = 0
Target Port Group Support = 0
Access Controls Coordinator = 0
SCC Supported = 0
Addr16 = 0
Medium Changer = 0
Multi Port = 0
VS1 = 0
Enclosure Services = 0
BQue = 0
VS2 = 0
Command Queue = 0
Linked Commands = 0
Synchronous = 0
Wide16 = 0
CDB で、次の値を指定して、INQUIRY コマンドを送信します:
EVPD = 0
Allocation Length = 240
CDB で、次の値を指定して、INQUIRY コマンドを送信します:
EVPD = 1
Allocation Length = 240
コマンドが成功した場合は、手順 7 と手順 8 の応答を比較します。両方が等しい場合、テスト ケースは失敗とします。
ランダムな Allocation Length を使用して、10 から 25 の間でランダムな回数、INQUIRY コマンドを送信します。 コマンドが失敗した場合、テスト ケースは失敗とします。
[省略可能] データ方向フラグを「デバイスへ」に設定し、CDB で次の値を設定して INQUIRY コマンドを送信します
EVPD = 0
Allocation Length = 240
結果: ドライブは、INQUIRY コマンドに適切に応答する必要があります。
MECHANISM STATUS コマンド
説明: ドライブで MECHANISM STATUS コマンドがサポートされているかどうかを検証します
適用可能なメディア: デバイスでサポートしているメディア
テスト ケースの手順:
Allocation Length を 0 バイト (データ検出を指定しない) として MECHANISM STATUS コマンドを送信します。 コマンドが失敗した場合は、センス キーを出力し、テスト ケースは失敗とします。
- 目的: コマンドのサポートをソフトウェアでプローブできるようにします
トレイを取り出します。
デバイスがセンス データを返すまで待ちます (センス キー: 0x2、ASC: 0x3A、ASCQ: 0x02)
Allocation Length を 8 バイトとして MECHANISM STATUS コマンドを送信します。
Door Open ビットが 1b であることを確認します。
- 目的: トレイが開いているか閉じている (開いている) 状態をソフトウェアで検出できるようにします。
トレイを挿入します。
デバイスの準備が整うまで待ちます
Allocation Length を 8 バイトとして MECHANISM STATUS コマンドを送信します。
Door Open ビットが 0b であることを確認します。
- 目的: トレイが開いているか閉じている (閉じている) 状態をソフトウェアで検出できるようにします。
8 バイトのバッファーを作成し、ランダムなデータを入力します。
[省略可能] データ方向フラグを "to the device" に設定し、Allocation Length を 8 バイトに設定して、MECHANISM STATUS コマンドを送信します。 手順 11 のバッファーをデバイスに渡します。
結果: ドライブは、MECHANISM STATUS コマンドに適切に応答する必要があります
MODE SENSE コマンド
説明: ドライブで Mode Sense コマンドがサポートされているかどうかを検証します。
適用可能なメディア: デバイスでサポートしているメディア
テスト ケースの手順:
CDB で次の値を指定して MODE SENSE コマンドを送信し、サポートされているすべてのモード ページを取得します:
Page Control = 0
Disable Block Descriptors = 1
Page Code = 0x3F
Allocation Length = 0x8000
応答で次の値を確認します:
モード パラメーター ヘッダーの Block 記述子の長さが 0 である
各モード ページ データの PAGE LENGTH が、MMC5 に記載されている値と一致している。
報告された各ページのモード ページ データを検証します
報告されたページごとに、CDB で次の値を指定して Mode Sense コマンドを送信します:
Page Control = 0
Disable Block Descriptors = 1
Allocation Length = 手順 2 でドライブから報告された PAGE LENGTH
応答で次の値を確認します:
モード パラメーター ヘッダーの Block 記述子の長さが 0 である。
モード ページ ヘッダーの Page Code が、要求された Page Code と一致している。
モード ページ ヘッダーの PAGE LENGTH が、MMC5 に記載されている値と一致している。
Allocation Length を 0xFFF0 として Mode Sense コマンドを送信します。
応答で次の値を確認します:
モード パラメーター ヘッダーの Block 記述子の長さが 0 である
モード ページ ヘッダーの Page Code が、要求された Page Code と一致
Allocation Length を 0x0A として Mode Sense コマンドを送信します。
応答が、Allocation Length が 0xFFF0 に等しい場合の応答と、バイト単位で応答サイズ (0x0A) まで一致するかを確認します。
0x0A から 0xFFF0 の間のランダムな Allocation Length を使用して、10 から 25 の間でランダムな回数、Mode Sense コマンドを送信します。
応答が、Allocation Length が 0xFFF0 に等しい場合の応答と、バイト単位で応答サイズ (0x0A から 0xFFF0 の間のランダムな値) まで一致するかを確認します。
[省略可能] データ方向フラグを「デバイスへ」に設定し、CDB で次の値を設定して MODE SENSE コマンドを送信し、サポートされているすべてのモード ページを取得します:
Page Control = 0
Disable Block Descriptors = 1
Page Code = 0x3F
Allocation Length = 0x8000
結果: ドライブが GET CONFIGURATION コマンドに正しく応答するはずです
PREVENT ALLOW MEDIUM REMOVAL コマンド
説明: ドライブで PREVENT ALLOW MEDIUM REMOVAL コマンドがサポートされているかどうかを検証します。
適用可能なメディア: デバイスでサポートしているメディア
テスト ケースの手順:
Prevent ビットを 1 に、Persistent ビットを 0 に設定して、PREVENT ALLOW MEDIUM REMOVAL コマンドを送信します。 これにより、ドライブがロックされます。 コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします。
LocEj ビットを 1 に、Immediate ビットを 0 に、Start ビットを 0 に設定して、Start Stop Unit コマンドを送信します。 これによりディスクの取り出しが試行されます。ドライブがセンス データ 0x05 0x53、0x02 でコマンドを拒否しない場合は失敗です。
Test Unit Ready コマンドを送信し、このコマンドが成功することを確認します。
ユーザーに対し、取り出しボタンを押してメディアを取り出すよう指示します。
Test Unit Ready コマンドを送信し、このコマンドが引き続き成功することを確認します (トレイは開きません)。
Prevent ビットを 0 に、Persistent ビットを 0 に設定して、Prevent Allow Medium Removal コマンドを送信します。 これにより、ドライブのロックが解除されます。 コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします。
ユーザーに対し、取り出しボタンを押してメディアを取り出すよう指示します
デバイスのトレイが開くまで待ちます。Test Unit Ready コマンドを送信し、コマンドが成功したら 1 秒間待って、(02/3A/02) で失敗するまで再試行します。 30 秒後にタイムアウトします。
ドライブでオート ローディング メカニズムがサポートされている場合は、トレイをドライブに挿入し直します。それ以外の場合は、トレイをドライブに挿入するようユーザーに指示します。
デバイスの準備が完了するまで待ちます
[省略可能] データ方向フラグを「デバイスへ」に設定して PREVENT ALLOW MEDIUM REMOVAL コマンドを送信し、ランダム データをランダム サイズ バッファーに渡します。
結果: ドライブは PREVENT ALLOW MEDIUM REMOVAL コマンドに適切に応答する必要があります。
REQUEST SENSE コマンド
説明: ドライブで REQUEST SENSE コマンドがサポートされているかどうかを検証します。
適用可能なメディア: デバイスでサポートしているメディア
テスト ケースの手順:
descriptor ビットを 0 に設定し、割り当て長を 252 に設定して、REQUEST SENSE コマンドを送信します。 ドライブは、固定フォーマット センス データで応答します。
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします。
応答コードが 0x70 または 0x71 の場合、テストは成功です。それ以外の場合、テストは失敗します。
[省略可能] データ方向フラグを "to the device" に設定し、descriptor ビットを 0 に、Allocation Length を 252 に設定して、REQUEST SENSE コマンドを送信します。 ドライブは、固定フォーマット センス データで応答します。
結果: ドライブは、REQUEST SENSE コマンドに適切に応答する必要があります。
START STOP UNIT コマンド、EJECT & LOAD PERFORMANCE
説明: ドライブで START STOP UNIT コマンドがサポートされているかどうかを検証します。
適用可能なメディア: デバイスでサポートしているメディア
テスト ケースの手順:
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
コマンドは、それぞれの組み合わせに対して成功します。
ドライブでトレイの取り出しがサポートされている場合、CDB で次の値を指定して START STOP UNIT コマンドを送信し、トレイを取り出します
- Immediate = 1、LoadEject = 1、Start = 0、PowerConditions = 0
デバイスのトレイが開くまで待ちます。TEST UNIT READY コマンドを送信し、コマンドが成功したら 5 秒間待って、(02/3A/02) で失敗するまで再試行します。 10 秒後にタイムアウトします。
ドライブでトレイのローディング (自動挿入) がサポートされている場合、CDB で次の値を指定して START STOP UNIT コマンドを送信し、トレイを挿入します:
- Immediate = 1、LoadEject = 1、Start = 1、PowerConditions = 0
ドライブでトレイのローディングがサポートされていない場合は、トレイをドライブに挿入するようユーザーに指示します。
デバイスの準備が完了するまで待ちます。 TEST UNIT READY コマンドを送信し、コマンドが失敗してセンス キーが出力されたら、1 秒間待って成功するまで再試行します。 30 秒後にタイムアウトします。 プレミアム ロゴ: タイムアウト: 20 秒。
CDB で次の値を指定して START STOP UNIT コマンドを送信し、トレイを取り出します:
- Immediate = 0、LoadEject = 1、Start = 0、PowerConditions = 0
デバイスのトレイが開くまで待ちます。TEST UNIT READY コマンドを送信し、コマンドが成功したら 1 秒間待って、(02/3A/02) で失敗するまで再試行します。 30 秒後にタイムアウトします。
メディアを取り出すようユーザーに指示します
ドライブでトレイのローディング (自動挿入) がサポートされている場合、CDB で次の値を指定して START STOP UNIT コマンドを送信し、トレイを挿入します:
- Immediate = 0、LoadEject = 1、Start = 1、PowerConditions = 0
準備ができていない、メディアが存在しない、トレイが閉じている (02/3A/01) でコマンドが失敗することを確認します
ドライブでトレイの取り出しがサポートされている場合、CDB で次の値を指定して START STOP UNIT コマンドを送信し、トレイをイジェクトします:
- Immediate = 0、LoadEject = 1、Start = 0、PowerConditions = 0
メディアをトレイに入れるようユーザーに指示します。
ドライブでトレイのローディングがサポートされていない場合は、トレイをドライブに挿入するようユーザーに指示し、デバイスの準備が完了するまで待ちます。 ドライブでトレイのローディング (自動挿入) がサポートされている場合は、トレイを挿入するために CDB で次の値を指定して START STOP UNIT コマンドを送信し、デバイスの準備が完了するまで待ちます。
- Immediate = 0、LoadEject = 1、Start = 1、PowerConditions = 0
[省略可能] データ方向フラグを「デバイスへ」に設定して START STOP UNIT コマンドを送信します。 CDB で次の値を指定して、ランダム データを格納したランダム サイズ バッファーを送信します。
- Immediate = 0、LoadEject = 0、Start = 0、PowerConditions = 0
結果: ドライブは、START STOP UNIT コマンドに適切に応答する必要があります。
TEST UNIT READY コマンド
説明: ドライブで TEST UNIT READY コマンドがサポートされているかどうかを検証します。
適用可能なメディア: デバイスでサポートしているメディア
テスト ケースの手順:
TEST UNIT READY コマンドを送信します。
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします
[省略可能] データ方向フラグを「デバイスへ」に設定し、ランダム データをランダム サイズ バッファーに格納して、TEST UNIT READY コマンドを送信します。
結果: ドライブは、TEST UNIT READY コマンドに適切に応答する必要があります。
GET CONFIGURATION コマンド
説明: ドライブで、報告されたプロファイルに対する GET CONFIGURATION コマンドがサポートされているかどうかを検証します。
適用可能なメディア: デバイスでサポートしているメディア
テスト ケースの手順:
応答データの長さを 0 バイト (データ センスを指定しない) として GET CONFIGURATION コマンドを送信します。 コマンドが失敗した場合は、センス キーを出力し、テスト ケースは失敗とします。
- 目的: コマンドのサポートをソフトウェアでプローブできるようにします。
応答データ長を 4 バイトに指定して GET CONFIGURATION コマンドを送信し、機能ヘッダー データ長を取得します。 コマンドが失敗した場合は、センス キーを出力し、テスト ケースは失敗とします。
- 目的: コマンドのサポートをソフトウェアでプローブできるようにします。
応答データ長として 8 バイト (ヘッダーを取得するため)、RT=00b、Starting Feature Number=0000h を指定して、GET CONFIGURATION コマンドを送信します。 コマンドが失敗した場合、または Current Profile が 00h と等しい場合は、必要に応じてセンス キーを出力し、テスト ケースを失敗させます。
目的:
必要な応答バッファー サイズをソフトウェアがプローブできるようにします。
ソフトウェアが現在のプロファイルをプローブできるようにします (プロファイルは最新です)。
コマンドが成功した場合は、応答で次の内容を確認します
ヘッダーのデータ長が 0 以外であり、4 バイトでアラインされている
現在のプロファイル番号が、ドライブに読み込まれているメディアの種類と一致している
ステップ 3 の応答データ長、RT=00b、Starting Feature Number=0000h を指定して、GET CONFIGURATION コマンドを送信します。 Current Profile を読み取り、サポートされているプロファイルの一覧でこのプロファイルのコードを探します。 現在のプロファイルが、挿入されたメディアのプロファイルの種類と一致していることを確認します。 コマンドが失敗した場合、またはサポートされているプロファイルの一覧で現在のプロファイルが現在報告されていない場合は、必要に応じてセンス キーを出力し、テストケースを失敗させます。
- 目的: ドライブから報告される情報の整合性を確保します。
RT = 00b で、長さが 2 バイトに収まる場合は、ステップ 3 でデバイスから返された正しいデータ長を指定して、GET CONFIGURATION コマンドを再度送信します。 長さが 2 バイトを超える場合は、最大データ長が 2 バイトのコマンドを送信します。
- 目的: ドライブでサポートしている機能の一覧全体をソフトウェアが取得できるようにします。
長さが 2 バイトを超えた場合は、返された最後の完全な機能記述子の機能番号を読み取り、RT = 10b で追加の GET CONFIGURATION コマンドを実行し、この機能番号に 1 を加えた機能番号を開始します。 機能ヘッダーで返されるデータ長が、割り当てられた長さに等しいかそれより小さい場合に、操作を繰り返します。 手順 10 で検証するために、結果として得られる機能記述子を連結します。
手順 3~6 で次に続くすべてのコマンドについて、応答のヘッダーのデータ長が 4 (4 バイトでアラインされている) の倍数であるかどうかを確認します。 4 バイトにアラインされていない場合は失敗とします。 目的: 4 バイト アラインメントはソフトウェアによって想定されます。
コマンドが成功した場合は、報告される機能の Version フィールドと Additional Length フィールドが、MMC-5 ドキュメントのその機能の該当する値以上であることを確認します。 例: Core Feature のバージョンは 0010b 以上である必要があり、その追加の長さは 8 以上である必要があります。 目的: ドライブから報告される情報の整合性を確保します。 リムーバブル メディア機能が報告された場合、そのバージョン番号は、GET CONFIGURATION で指定されている 1 である必要があります。
さらに、コマンドが成功した場合は、報告されたサポートされるプロファイルの各必須機能が報告されていることを確認します。
- 目的: ドライブから報告されるメタ情報の整合性を確保します。
GET CONFIGURATION コマンドを、応答データの長さは 20 バイト、RT=01b、Starting Feature Number=0010h (ランダムに読み取り可能な機能) に指定して送信します。 コマンドが失敗した場合、または Random Readable 機能記述子が返されなかった場合は、必要に応じてセンス キーを出力し、テスト ケースは失敗とします。 目的: 特定の機能の currency (current) をソフトウェアでプローブできるようにします。
[省略可能] データ方向フラグを「デバイスへ」に設定し、ランダム データをランダム サイズ バッファーに格納して、GET CONFIGURATION コマンドを送信します。 CDB で次の値が設定されます:
- Allocation Length = バッファーのサイズ、Starting Feature Number=0000h、RT=00b
結果: ドライブは、該当するメディア タイプに対して GET CONFIGURATION コマンドを適切に実装する必要があります。
GET PERFORMANCE コマンド
説明: ドライブで、報告されたプロファイルに対する GET PERFORMANCE コマンドがサポートされているかどうかを検証します。
適用対象メディア: 次のいずれかのメディア:
CD-R
CD-ROM (CD-ROM)
CD-RW
DVD+R
DVD+R Dual Layer
DVD+RW
DVD-RW 制限付き上書き
DVD-RAM
DVD-R
DVD+R Dual Layer シーケンシャル
DVD-ROM
BD-R
BD-RE
BD-ROM
テスト ケースの手順:
GET CONFIGURATION コマンドを送信して、REAL TIME STREAMING 機能を取得します。 応答で Write Speed Performance Descriptor ビットが設定されているかどうかを確認します。 これが設定されていない場合、ドライブは書き込み速度記述子をサポートします。 書き込み速度記述子を検証する手順 6 から 11 を省略します。
0 個の標準読み取りパフォーマンス記述子を取得するため、CDB で次の値を指定して GET PERFORMANCE コマンドを送信します
Type = 0
Starting LBA = 1
Max Descriptors = 0
Data Type = 0x10
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします
1 つの標準読み取りパフォーマンス記述子を取得するため、CDB で次の値を指定して GET PERFORMANCE コマンドを送信します
Type = 0
Starting LBA = 1
Max Descriptors = 1
Data Type = 0x10
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします
1 ノミナル リード パフォーマンス記述子を取得するため、CDB で次の値を指定して GET PERFORMANCE コマンドを送信します。
Type = 0
Starting LBA = 1
Max Descriptors = 1
Data Type = 0x14
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします
書き込み速度記述子の一覧のデータ長を取得するため、CDB で次の値を指定して GET PERFORMANCE コマンドを送信します
Type = 3
Starting LBA = 1
Max Descriptors = 0
Data Type = 0x14
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします。
CDB で次の値を指定して GET PERFORMANCE コマンドを送信し、書き込み速度記述子の一覧を取得します。
Type = 3
Starting LBA = 1
Max Descriptors = 10
Data Type = 0x14
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします。
[省略可能] データ方向フラグを「デバイスへ」に設定し、ランダム データをランダム サイズ バッファーに格納して、GET PERFORMANCE コマンドを送信します。 CDB で次の値を設定して、0 個の標準読み取りパフォーマンス記述子を取得します。
Type = 0
Starting LBA = 1
Max Descriptors = 0
Data Type = 0x10
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします。
結果: ドライブは、該当するメディア タイプに対して GET PERFORMANCE コマンドを適切に実装する必要があります。
READ CAPACITY コマンド
説明: ドライブで、報告されたプロファイルに対する READ CAPACITY コマンドがサポートされているかどうかを検証します。
適用可能なメディア: デバイスでサポートしているメディア
テスト ケースの手順:
READ CAPACITY コマンドを送信します。
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします。
ブロック長 (バイト単位) が 2048 ではない場合は、テスト ケースは失敗とします。
[省略可能] データ方向フラグを「デバイスへ」に設定し、ランダム データをランダム サイズ バッファーに格納して、READ CAPACITY コマンドを送信します。
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします。
結果: ドライブは、該当するメディア タイプに対して READ CAPACITY コマンドを適切に実装する必要があります。
READ BUFFER CAPACITY コマンド
説明: ドライブで、報告されたプロファイルに対する READ BUFFER CAPACITY コマンドがサポートされているかどうかを検証します。
適用対象メディア: デバイスでサポートされているメディア。
テスト ケースの手順:
GET CONFIGURATION コマンドを送信して、REAL TIME STREAMING 機能を取得します。 応答で Read Buffer Capacity Block (RBCB) ビットが設定されているかどうかを確認します。 設定されていない場合、ドライブでは Read Buffer Capacity コマンドはサポートされていません。 テスト ケースをスキップします。
block ビットを 0 に、Allocation Length を Buffer Capacity Structure のサイズと等しく設定して、READ BUFFER CAPACITY コマンドを送信します。
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします。
Block ビットを 1 に設定して、手順 2 を繰り返します。
コマンドが失敗した場合は、センス キーを出力し、テスト ケースを失敗とします。
[省略可能] データ方向フラグを「デバイスへ」に設定し、ランダム データをランダム サイズ バッファーに格納し、block ビットをゼロに設定して、READ BUFFER CAPACITY コマンドを送信します。
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします。
結果: ドライブは、該当するメディア タイプに対して READ BUFFER CAPACITY コマンドを適切に実装する必要があります。
READ DISC INFORMATION コマンド
説明: ドライブで、報告されたプロファイルに対する READ DISC INFORMATION コマンドがサポートされているかどうかを検証します。
適用対象メディア: 次のいずれかのメディア:
DVD+R
DVD+RW
DVD-R
CD-R
CD-RW
テスト ケースの手順:
標準ディスク情報サイズを取得するには、Allocation Length を 2 として READ DISC INFORMATION コマンドを送信します。
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします。
応答からディスク情報長を取得します。 この長さが Standard Disc Information Block Size (34) 未満の場合は、テスト ケースを失敗とします。
Allocation Length を手順 3 のデータ長に 2 を加算した値に設定して、READ DISC INFORMATION コマンドを送信します。
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします。
[省略可能] データ方向フラグを "to the device" に設定し、ランダム データをランダム サイズ バッファーに格納し、Allocation Length をバッファーのサイズに設定して、READ DISC INFORMATION コマンドを送信します。
結果: ドライブは、該当するメディア タイプに対して READ DISC INFORMATION コマンドを適切に実装する必要があります。
READ FORMAT CAPACITIES コマンド
説明: ドライブで、報告されたプロファイルに対する READ FORMAT CAPACITIES コマンドがサポートされているかどうかを検証します。
適用対象メディア: 次のいずれかのメディア:
DVD+RW
DVD-RW 制限付き上書き
DVD-RAM
CD-RW
テスト ケースの手順:
Allocation Length を 4 (Capacity List Header) に設定して、READ FORMAT CAPACITIES コマンドを送信します。
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします。
応答から Capacity List Length を取得します
Allocation Length を Capacity List Length + 4 (Capacity List Header のサイズ) に設定して、READ FORMAT CAPACITIES コマンドを送信します。
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします。
応答で、Capacity List Length が 8 の倍数であるかどうかを確認します。
[省略可能] データ方向フラグを "to the device" に設定し、ランダム データをランダム サイズ バッファーに格納し、Allocation Length をバッファーのサイズに設定して、READ FORMAT CAPACITIES コマンドを送信します。
結果: ドライブは、該当するメディア タイプに対して READ FORMAT CAPACITIES コマンドを適切に実装する必要があります。
READ TOC/PMA/ATIP コマンド
説明: ドライブで、報告されたプロファイルに対する READ TOC/PMA/ATIP コマンドがサポートされているかどうかを検証します。
適用対象メディア: 次のいずれかのメディア:
CD-ROM (CD-ROM)
DVD-ROM
BD-ROM
テスト ケースの手順:
CDB で次の値を指定して、READ TOC/PMA/ATIP コマンドを送信します。
- Format = 0、MSF = 0、Track Session Number = 1、Allocation Length = 4
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします。
[省略可能] データ方向フラグを"to the device" に設定し、ランダム データをバッファーに格納し、Allocation Length をバッファーのサイズに設定して、READ TOC/PMA/ATIP コマンドを送信します。 次の値を使用して CDB を設定します。
- Format = 0、MSF = 0、Track Session Number = 1、Allocation Length = 4
結果: ドライブは、該当するメディア タイプに対して READ TOC/PMA/ATIP コマンドを適切に実装する必要があります。
SEND OPC INFORMATION コマンド
説明: [このコンテンツはまだ使用できません。]
適用対象メディア: 次のいずれかのメディア:
DVD-RW 制限付き上書き
DVD-R
CD-RW
CD-R
テスト ケースの手順:
DoOpc を 1 に設定して SEND OPC INFORMATION コマンドを送信します
コマンドが失敗した場合、センス キーを出力し、テスト ケースは失敗とします。
[省略可能] DoOpc を 1 に設定し、データ方向フラグを「デバイスへ」に設定し、ランダム データをランダム サイズ バッファーに格納して、SEND OPC INFORMATION コマンドを送信します。 Allocation Length は、バッファーのサイズに設定されます。
結果: ドライブは、該当するメディア タイプに対して SEND OPC INFORMATION コマンドを適切に実装する必要があります。
SET CD SPEED コマンド
説明: ドライブで、報告されたプロファイルに対する SET CD SPEED コマンドがサポートされているかどうかを検証します。
適用可能なメディア: デバイスでサポートしているメディア
テスト ケースの手順:
GET CONFIGURATION コマンドを送信して、REAL TIME STREAMING 機能を取得します。 応答で Set CD Speed (SCS) ビットが設定されているかどうかを確認します。 設定されていない場合、ドライブでは SET CD SPEED コマンドがサポートされていません。 テスト ケースをスキップします。
CDB で次の値を指定して、SET CD SPEED コマンドを送信します。
- RotationalControl = 0、ReadSpeed = 0xFFFF、WriteSpeed = (((4* 75 * 2352) + 500) / 1000) コマンドが失敗した場合は、センス キーを出力し、テスト ケースを失敗とします。
[省略可能] データ方向フラグを "to the device" に設定し、ランダム サイズ バッファーにランダム データを格納して、SET CD SPEED コマンドを送信します。 CDB で次の値を設定します。
- RotationalControl = 0、ReadSpeed = 0xFFFF、WriteSpeed = (((4* 75 * 2352) + 500) / 1000)
結果: ドライブは、該当するメディア タイプに対して SET CD SPEED コマンドを適切に実装する必要があります。
READ10 コマンド
説明: ドライブで、報告されたプロファイルに対する READ10 コマンドがサポートされているかどうかを検証します。
適用対象メディア: 次のいずれかのメディア:
CD-ROM (CD-ROM)
DVD-ROM
テスト ケースの手順:
Allocation Length を READ TOC 応答ヘッダーのサイズ (4 バイト) と等しく設定して READ TOC/PMA/ATIP コマンドを送信します
Allocation Length が READ TOC 応答ヘッダーのサイズ (4 バイト) + 手順 1 の応答ヘッダーの Data Length と等しくなるように設定して、READ TOC/PMA/ATIP コマンドを送信します。
すべての書式設定された Read TOC 記述子について、そのコントロールのいずれかが 0x04 に設定されているか確認します。
見つからない場合は、テスト ケースを失敗とします。
それ以外の場合は、フォーマットされた Toc Track 記述子からトラック開始アドレスを取得します。
LBA フィールドを 0 に設定して Read Capacity コマンドを送信し、ブロック サイズを取得します。
Transfer Length を 0 に設定し、Starting LBA を手順 5 の LBA に設定して、Read コマンドを送信します。
読み取るブロックの数を計算します。
Read Capacity 応答の LBA が、手順 5 の LBA より小さい場合は、読み取るブロック数が 0 に設定されます。
Read Capacity 応答の LBA が、手順 5 の LBA より大きい場合は、読み取るブロック数を Read Capacity 応答の LBA と手順 5 の LBA の差に設定します。 この値が 50 よりも大きい場合は、読み取るブロック数を 50 に設定します。
Read 10 の CDB で Starting LBA を手順 5 の LBA に設定します。
Transfer Length を 1 に設定して READ10 コマンドを送信します。
10 ミリ秒間スリープします。
Read 10 の CDB で Starting LBA を増加します
すべてのブロック数を読み取るまで、手順 12 から 14 を繰り返します。
[省略可能] データ方向フラグを "デバイスへ" に設定し、ランダム サイズ バッファーをランダム データでいっぱいにして READ10 コマンドを送信します。 CDB で次の値を設定します。
- TransferLength = 1、Starting LBA = 手順 8 の LBA 数と手順 5 の Starting LBA の範囲内のランダムな LBA 値
結果: ドライブは、適用可能なメディアの種類に関して READ10 コマンドを正しく実装する必要があります。
イベント通知
説明: デバイスのイベント通知が Windows PNP に正しく報告されるかどうかを検証します。
適用可能なメディア: デバイスでサポートしているメディア
テスト ケースの手順:
ドライブの STORAGE_ADAPTER_DESCRIPTOR 構造体の BusType フィールドが BusTypeSata に設定されている場合は、Identify Packet Device Information データに対する要求を指定して IOCTL_ATA_PASS_THROUGH を送信します。 応答で、ワード 78 のビット 5 (非同期通知対応) とワード 79 のビット 5 (非同期通知機能が有効である) の両方が設定されていることを確認します。 それ以外の場合、テストは失敗とします
Operational Change イベントに登録します。
メディアが存在するかどうかを確認します。
メディアが存在する場合は、メディアを取り出します。
MEDIA REMOVAL イベントを待ちます。 イベントが 60 秒のタイムアウト期間内に生成されない場合は、テスト ケースは失敗とします。
メディアをドライブに挿入します。
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
テスト ケースの手順:
ブランク メディアを挿入するようユーザーに指示します。
API IDiscFormat2Data::get_CurrentMediaStatus を呼び出し、メディアがブランクであるかどうかを確認します。
メディアがブランクではなく、次の再書き込み可能なメディア タイプのいずれかである場合は、minimal blank (最小限ブランク) オプションを指定した BLANK コマンドを送信して、メディアを消去します。
CD-RW
DVD-RW シーケンシャル記録
DVD-RW 制限付き上書き
DVD+RW
DVD-RAM
BD-RE
メディアが再書き込み可能メディアでない場合は、ブランク メディアを挿入するようにユーザーに指示します。 これを 3 回再試行します。それ以外の場合は、テスト ケースを失敗とします。
メディアが再書き込み可能メディアでない場合は、ブランク メディアを挿入するようにユーザーに指示します。 これを 3 回再試行します。それ以外の場合は、テスト ケースを失敗とします。
API IDiscFormat2Data::get_SupportedWriteSpeedDescriptors を呼び出して、書き込み速度記述子の一覧を取得します。
報告された書き込み速度の順序をランダム化します。
手順 6 の書き込み速度の 1 つを指定して API IDiscFormat2Data::SetWriteSpeed を呼び出して、書き込み速度を設定します。
メディア上の使用可能な領域の 10% の範囲を使用してランダム データ サイズを作成します。 バッファーをランダム データでいっぱいにします。
API IDiscFormat2Data::get_FreeSectorsOnMedia を使用して、ディスク上の空きブロックの数を取得します。
API IDiscFormat2Data::get_NextWritableAddress を使用して、次の書き込み可能アドレスを取得します。
IDiscFormat2Data::Write を使用して、手順 8 のデータ バッファーを書き込みます。
ドライブが自動取り出し/挿入メカニズムをサポートしている場合は、メディアを取り出してトレイに挿入します。
メディアが DVD-RW、DVD+RW、DVD-RAM、BD-RE でない場合は、次のようにします。
API IDiscFormat2Data::get_FreeSectorsOnMedia を使用して、ディスク上の空きブロックの数を取得します。
空きセクターの数が手順 9 の値より手順 8 の書き込みデータのサイズだけ小さいかを確認します。
API IDiscFormat2Data::get_NextWritableAddress を使用して、次の書き込み可能アドレスを取得します。
次の書き込み可能アドレスが、手順 10 の次の書き込み可能アドレスよりも、手順 8 の書き込みデータのサイズ分だけ大きいことを確認します。
ディスクからデータを読み取り、手順 11 でメディアに書き込んだデータと一致するか比較します。
最後のトラック情報を取得します。
メディアが DVD-RW でない場合は、論理トラックのサイズが、書き込んだデータのサイズ以上であるか確認します。
論理トラック番号が正しいかどうかを確認します。
[パラメーターの書き込みモード] ページを取得します。
パラメーターの書き込みモード ページで固定パケットと報告されている場合は、ドライブによって報告されたトラック情報が Packet/Incremental でないことを確認します。
ディスク情報を読み取り、セッションの数が一致するかどうかを確認します。
メディアが DVD-RW、DVD+RW、DVD-RAM でない場合は、各書き込み速度について、手順 7 から 19 までを繰り返します。 ドライブが 1 つの書き込み速度しか返さなかった場合は、手順 7 から 19 までをもう 1 回繰り返して、ディスクにマルチセッション機能を検証するためのもう 1 つのセッションを追加します。
結果: ドライブは、IMAPI のコンテキストでデータを書き込める必要があります。
AUDIO MEDIA (WRITE AUDIO TRACKS) (オーディオ メディア (オーディオ トラックの書き込み))
説明: IMAPI のコンテキストでのオーディオ コンテンツに関するドライブの書き込み機能を検証します。
適用対象メディア: 次のいずれかのメディア:
CD-R
CD-RW
テスト ケースの手順:
メディアがブランクではなく、CD-RW メディア タイプである場合は、minimal blank (最小限ブランク) オプションを指定した BLANK コマンドを送信して、メディアを消去します。
メディアが再書き込み可能メディアでない場合は、ブランク メディアを挿入するようにユーザーに指示します。 これを 3 回再試行します。それ以外の場合は、テスト ケースを失敗とします。
DiscFormat2TrackAtOnce::PrepareMedia を呼び出して、メディアを排他アクセスのためにロックします。
API IDiscFormat2TrackAtOnce::get_SupportedWriteSpeeds を呼び出して、書き込み速度記述子の一覧を取得します。
3 から 10 までのランダムな数のオーディオ トラックを選択します。
報告された書き込み速度の順序をランダム化します。
手順 1 の API IDiscFormat2TrackAtOnce::SetWriteSpeed を呼び出して、書き込み速度を設定します。
API IDiscFormat2Data::get_FreeSectorsOnMedia を使用して、ディスク上の空きブロックの数を取得します。
1 分のオーディオ データから 10 分のオーディオ データまでのランダムなサイズのオーディオ データを作成します。 データのサイズは 2352 の倍数である必要があります。
IDiscFormat2TrackAtOnce::AddAudioTrack にオーディオ データ ストリームを追加します。
最後のトラック情報を取得します。
論理トラック サイズが、書き込んだオーディオ トラックのサイズ以上であるかどうかを確認します。
論理トラック番号が正しいかどうかを確認します。
IDiscFormat2TrackAtOnce::FreeSectorsOnMedia を呼び出して、メディア上の空きセクターの数を取得します。
手順 14 の空きセクターの数が、手順 8 の値より、メディアに書き込まれたオーディオ トラックのサイズだけ小さいかどうかを確認します。
手順 5 のオーディオ トラックの数だけ、手順 5 から 15 までを繰り返します。
[パラメーターの書き込みモード] ページを取得します。
パラメーターの書き込みモード ページで固定パケットと報告されている場合は、ドライブによって報告されたトラック情報が Packet/Incremental でないことを確認します
各書き込み速度について、手順 1 から 18 までを繰り返します。
ドライブが自動取り出し/挿入メカニズムをサポートしている場合は、メディアを取り出してトレイに挿入します。
結果: ドライブは、IMAPI のコンテキストでオーディオ メディアを書き込める必要があります。
Blank (ブランク)
説明: IMAPI のコンテキストでドライブのフォーマットとブランク機能を検証します。
適用対象メディア: 次のいずれかのメディア:
CD-RW
DVD+RW
DVD-RW 制限付き上書き
BD-RE
テスト ケースの手順:
API IDiscFormat2Data::CurrentPhysicalMediaType を呼び出して、メディアが次のいずれかの読み取り/書き込みのメディアの種類であるかどうかを確認します。
CD-RW
DVD-RW
DVD+RW
メディアが読み取り書き込みメディア タイプのいずれでもない場合は、テスト ケースをスキップします。
API IDiscFormat2Erase::MediaPhysicallyBlank を呼び出して、メディアがブランクであるかどうかを確認します。
メディアがブランクではない場合は、手順 7 に進みます。
25 MB のランダム データ ストリームを作成します。
API IDiscFormat2Data::Write を使用して、データ ストリームをディスクに書き込みます。
IDiscFormat2Data::get_CurrentMediaStatus API を呼び出して、ドライブがメディアをブランクでないメディアとして報告しているかどうかを確認します。
ドライブがまだメディアをブランクであると報告する場合は、テスト ケースを失敗とします。
イベントの消去ハンドラー DDiscFormat2EraseEvents::Update を実装します。
minimal blank (最小限ブランク) が実行されるように、API IDiscFormat2Erase::put_FullErasee を呼び出し、erase オプションを false に設定します。
IDiscFormat2Erase::EraseMedia API を使用して、消去コマンドを送信します。
API IDiscFormat2Data::get_CurrentMediaStatus を呼び出し、メディアがブランクであるかどうかを確認します。
ディスク情報を読み取り、次のことを確認します。
報告されるセッションの数が 1 である。
最後のセッションの最初のトラックが 1 である。
最後のセッションの最後のトラックが 1 である。
API IDiscFormat2Erase::put_FullErase を呼び出し、消去オプションを完全な消去に設定します。 手順 9 から 14 までを繰り返します。
結果: ドライブは、IMAPI のコンテキストでメディアをフォーマットできる必要があります。
デュアルレイヤー メディアの書き込み
説明: IMAPI のコンテキストでのデュアルレイヤー メディアに関するドライブの書き込み機能を検証します。 デバイスは、ドライブによって報告されるさまざまな書き込み速度でテストされます。
適用対象メディア: 次のいずれかのメディア:
DVD+R DL
DVD-R DL
テスト ケースの手順:
ブランク メディアを挿入するようユーザーに指示します。
API IDiscFormat2Data::get_CurrentMediaStatus を呼び出し、メディアがブランクであるかどうかを確認します
メディアが再書き込み可能メディアでない場合は、ブランク メディアを挿入するようにユーザーに指示します。 これを 3 回再試行します。それ以外の場合は、テスト ケースを失敗とします。
API IDiscFormat2Data::get_SupportedWriteSpeedDescriptors を呼び出して、書き込み速度記述子の一覧を取得します。
報告された書き込み速度の順序をランダム化します。
手順 5 の書き込み速度のいずれかで API IDiscFormat2Data::SetWriteSpeed を呼び出して、書き込み速度を設定します。
メディア上の使用可能な領域の最大 50% のランダムなサイズのランダム データ ストリームを作成します。 バッファーをランダム データでいっぱいにします。
IDiscFormat2Data::Write を使用して、手順 7 のデータ バッファーを書き込みます。
ドライブが自動取り出し/挿入メカニズムをサポートしている場合は、メディアを取り出してトレイに挿入します。
ディスクからデータを読み取り、手順 9 でメディアに書き込んだデータと一致しているか比較します。
最後のトラック情報を取得します。
論理トラックのサイズが、書き込んだデータのサイズ以上であるかどうかを確認します。
論理トラック番号が正しいかどうかを確認します。
[パラメーターの書き込みモード] ページを取得します。
パラメーターの書き込みモード ページで固定パケットと報告されている場合は、ドライブによって報告されたトラック情報が Packet/Incremental でないことを確認します。
ディスク情報を読み取り、セッションの数が一致するかどうかを確認します。
メディア上の使用可能な領域の最大 100% のランダムなサイズのランダム データ ストリームを使用して、手順 8 から 16 までを繰り返します。
警告
これらの最後の手順は、ドライブがデータをデュアルレイヤーに正しく書き込めるかどうかをテストするためのものです。
結果: ドライブは IMAPI のコンテキストでデュアル レイヤー メディアの両方のレイヤーに書き込める必要があります。
読み取り専用ドライブ
説明: 開かれた (追加可能) ディスクと閉じられた (最終処理された) ディスクに対する読み取り専用ドライブの読み取り機能をテストします。
警告
このテスト ケースでは、対応するテスト プロファイルのテスト データ ディスクを作成するためにセカンダリ ライター ドライブが必要です。
適用対象メディア: 次のいずれかのメディア:
CD-ROM (CD-ROM)
DVD-ROM
BD-ROM
テスト ケースの手順:
ライター ドライブ トレイを取り出します。
テスト プロファイルに応じて、次のようにします。
CD-ROM の場合は、ユーザーに CD-R/CD-RW をライター ドライブに挿入するよう求めます。
DVD-ROM の場合は、ユーザーに DVD+R/DVD-R/DVD+RW/DVD-RAM をライター ドライブに挿入するよう求めます。
BD-ROM の場合は、ユーザーに BD-R/ BD-RE をライター ドライブに挿入するよう求めます。
ライター ドライブ トレイを挿入します。
API IDiscFormat2Data::get_SupportedWriteSpeedDescriptors を呼び出して、書き込み速度記述子の一覧を取得します。
メディア上の使用可能な領域の最大 10% のランダムなサイズのランダム データ ストリームを作成します。 バッファーをランダム データでいっぱいにします。
手順 4 の最初の書き込み速度記述子の値で API IDiscFormat2Data::SetWriteSpeed を呼び出して、書き込み速度を設定します。
IDiscFormat2Data::Write を使用して、手順 5 のデータ バッファーをライター ドライブ内のメディアに書き込みます。
自動取り出しメカニズムがサポートされている場合は、ライター ドライブ トレイを取り出します。 それ以外の場合は、ユーザーに取り出しボタンを押すよう求めます。
自動取り出しメカニズムがサポートされている場合は、テスト ドライブ トレイを取り出します。それ以外の場合は、ユーザーに取り出しボタンを押すよう求めます。
ライター ドライブからメディアを取り出し、テスト ドライブに入れるようユーザーに指示します。
自動挿入 (トレイのローディング) 機構がサポートされている場合は、ライター ドライブのトレイをローディングします。 それ以外の場合は、ユーザーにトレイをドライブに挿入するよう求めます。
自動挿入 (トレイのローディング) 機構がサポートされている場合は、テスト ドライブのトレイをローディングします。 それ以外の場合は、ユーザーにトレイをドライブに挿入するよう求めます。
テスト ドライブのディスクからデータを読み取り、手順 7 でメディアに書き込んだデータと一致するか比較します。
IDiscFormat2Data:: ForceMediaToBeClosed を true に設定し、手順 1 から 13 を繰り返して、ファイナライズ済みディスクについてテスト ドライブを検証します。
結果: ドライブはクローズとオープン メディアの両方を読み取れる必要があります。
ドライブ シリアル番号
説明: テスト ドライブによって返されたドライブ シリアル番号が MMC/Mt. Fuji 仕様標準に準拠していることを検証します。
警告
このテスト ケースには 2 台の同一のドライブが必要です。両方のドライブが一意のシリアル番号を返すかどうかを検証するためです。 1 台がプライマリ テスト デバイスであり、もう 1 台がセカンダリ テスト ドライブです。
適用可能なメディア: デバイスでサポートしているメディア
テスト ケースの手順:
割り当て長を 05h に指定して、プライマリ テスト デバイスに INQUIRY コマンドを送信します。
コマンドが成功した場合は、応答ヘッダーから追加の長さの値を取得します。
Allocation Length を手順 2 の Additional Length よりも 5 バイト長く設定して、プライマリ デバイスに INQUIRY コマンドをもう一度送信します。
コマンドが成功した場合は、ベンダー識別、製品識別、製品リビジョン レベルを取得します。
セカンダリ ドライブに対して手順 1 から 4 までを繰り返し、ベンダー ID、製品 ID、製品リビジョン レベルを取得します。
手順 4 と手順 5 のベンダー ID、製品 ID、製品リビジョン レベルの値を比較します。 これらが一致しない場合、テスト ケースは失敗とします。
警告
これは、両方のテスト ドライブが同一であることを確認するためのものです。
GET CONFIGURATION コマンドをプライマリ テスト ドライブに送信して、LOGICAL UNIT SERIAL NUMBER 機能を取得します。このとき、割り当て長は LOGICAL UNIT SERIAL NUMBER 機能記述子のサイズと等しく設定します。
応答で、機能コードが LOGICAL UNIT SERIAL NUMBER 機能コードに一致しているかどうかを確認します。 追加の長さを取得します。
GET CONFIGURATION コマンドをプライマリ テスト ドライブに送信して、LOGICAL UNIT SERIAL NUMBER 機能を取得します。このとき、割り当て長は LOGICAL UNIT SERIAL NUMBER 機能記述子のサイズに、手順 8 で報告された必要な追加の長さを加算した値に設定します。
応答で次のことを確認します。
機能コードが LOGICAL UNIT SERIAL NUMBER 機能コードに一致している。
報告されたシリアル番号のデータが ASCII になっている。
データが埋め込まれている。
埋め込みの後にはデータがない。
セカンダリ テスト デバイスに対して手順 7 から 9 までを繰り返し、ドライブ シリアル番号を取得します。
手順 10 と手順 11 のドライブ シリアル番号を比較します。 これらのドライブは、一意のシリアル番号を返すことが期待されます。 両方のシリアル番号が等しい場合、テスト ケースは失敗とします。
結果: ドライブは、一意のシリアル番号を返す必要があり、その番号は MMC/Mt. Fuji 標準に準拠している必要があります。
リアルタイム ストリーミング
説明: cdrom.sys ドライバーのコンテキストでのデータ コンテンツに関するドライブのリアルタイム ストリーミング機能を検証します。 デバイスは、ドライブによって報告されるさまざまな読み取り/書き込み速度でテストされます。
適用可能なメディア: デバイスでサポートしているメディア
テスト ケースの手順:
ユーザーにメディアを挿入するよう求めます。
メディアが書き込み可能でも再書き込み可能でもない場合は、手順 13 の読み取りテストに進みます。
API IDiscFormat2Data::get_CurrentMediaStatus を呼び出し、メディアがブランクであるかどうかを確認します。
メディアがブランクではなく、次に示す再書き込み可能なメディア タイプのいずれかである場合は、minimal blank (最小限ブランク) オプションを指定した BLANK コマンドを送信して、メディアを消去します。
CD-RW
DVD-RW シーケンシャル記録
DVD-RW 制限付き上書き
DVD+RW
DVD-RAM
BD-RE
メディアが再書き込み可能メディアでない場合は、ブランク メディアを挿入するようにユーザーに指示します。 これを 3 回再試行します。それ以外の場合は、テスト ケースを失敗とします。
REAL TIME STREAMING 機能に対する要求を指定して GET CONFIGURATION コマンドを送信します。 成功しなかった場合、または Current ビットが設定されていない場合は、テストを失敗とします。
REAL TIME STREAMING 機能応答の Stream Writing (SW) ビットまたは Write Speed Performance Descriptor (WSPD) ビットが設定されていない場合は、テストは失敗とします。
Write Speed Descriptors に対する要求を指定して GET PERFORMANCE コマンドを送信し、サポートされている書き込み速度の配列を構築します。 コマンドが成功しない場合は、テストを失敗とします。
書き込み速度の配列をシャッフルします。
空きメディア サイズが全容量の 10% を超える場合は、次の書き込み速度のために IOCTL_CDROM_SET_SPEED および CDROM_SET_STREAMING 構造体を使用して DeviceIoControl を呼び出します。 容量全体の最大 10% のランダム データを書き込み、速度を測定します (測定手順の説明については、このドキュメントの対応するセクションを参照)。
手順 10 を可能な限り繰り返します。 すべての書き込み速度がプローブされたら、速度配列をシャッフルし、次の書き込み速度を先頭に設定します。
CLOSE TRACK SESSION コマンドを送信して、メディアをファイナライズします。
REAL TIME STREAMING 機能応答の Write Speed Performance Descriptor (WSPD) ビットが設定されている場合は、Write Speed Descriptors に対する要求を指定して GET PERFORMANCE コマンドを送信し、サポートされている読み取り速度の配列を構築します。それ以外の場合は、Tolerance ビットを 10b (公称) に設定し、Performance データに対する要求を指定して GET PERFORMANCE コマンドを送信します。読み取り速度については、応答の Start Performance および End Performance フィールドの最小値を選択します。 いずれのコマンドも成功しない場合は、このテストを不合格にします。
読み取り速度の配列をシャッフルします。
読み取りの長さをメディア上の最初のトラックのサイズに設定します。
各読み取り速度について、次の読み取り速度のために IOCTL_CDROM_SET_SPEED および CDROM_SET_STREAMING 構造体を指定して DeviceIoControl を呼び出します。 メディア上に記録されているデータ全体をメディア容量の 10% のチャンク (または、メディアのデータが 50 MB 未満である場合は最低 5 MB) で読み取り、各チャンクの速度を測定します。 いずれかのチャンクの実際の速度が、すべてのチャンクに要求される速度を下回っている場合は、このテストを不合格としてマークします。
結果: ドライブは、リアルタイム ストリーミング モードで動作できる必要があります。
書き込み速度の測定
このテストでは、デバイスにクエリを実行し、テスト メディアでサポートされている書き込み速度を取得します。 次に、報告されたすべての書き込み速度での書き込みシナリオの検証を試行します。 このテストでは、書き込みシナリオごとに計算された書き込み速度が、ドライブに設定された書き込み速度に近いことを期待します。 このテストでは、測定された書き込み速度に対して 10% の許容範囲が許可されます。 このテストでは、書き込み速度を次のように検証します。
このテストでは、データをメディアに書き込み、書き込まれているデータの量を監視します。 最初の 10% の書き込みデータと最後の 10% の書き込みデータのタイミングは除外されます。 中間の 80% のデータのタイミングのみを測定し、それらのデータの速度を計算し、その値に 10% の許容範囲を追加します。 そのため、"x" が中間の 80% のデータの計算された速度である場合、計算された最後の速度は 1.1x です。 このテストでは、この値が、書き込み開始前にドライブに設定された速度以上であることを期待します。
このテストで、最初の 10% のデータの書き込みタイミングは、ドライブが書き込みを準備できるようにするために除外されます。 最後の 10% のデータのタイミングは、ドライブがメディアに書き込まれたデータの適切なクリーンアップを実行できるようにするために除外されます。
オーディオ メディアのギャップレス生録音
説明: IMAPI のコンテキストでのギャップレス生オーディオ コンテンツに関するドライブの書き込み機能を検証します。
適用対象メディア: 次のいずれかのメディア:
CD-R
CD-RW
テスト ケースの手順:
メディアが挿入されたドライブが、ギャップレス生録音をサポートしているかどうかを確認します。 サポートされていない場合、このテストは不合格になります。
テスト ドライブによってサポートされているセクターの種類を確認します。
テスト ドライブによってサポートされているセクターの種類ごとに、手順 4 から 9 までを完了します。
生のイメージを作成します。
正しいセクターの種類を設定し、生のイメージの結果ストリームを作成します。
生のイメージがギャップレスであるかどうかを判定します。
書き込み速度をランダムに選択し、それをディスク書き込み速度に設定します。 要求されたセクターの種類を、生のイメージに対して設定されている種類に設定します。 生のイメージのストリームをメディアに書き込み、進行状況を監視します。 ディスク書き込みの速度を計算し、スループットを出力します。
各論理トラック情報を確認して、書き込みが成功したかどうかを判定します。 トラックがオーディオ トラックであるかどうか、トラック サイズが正しいかどうか、最後の論理トラック番号のサイズにその開始アドレスを加えた値がディスクのリード アウトの開始アドレスに等しいかどうかを確認します。いずれかの条件が false を返す場合、このテストは不合格になります。 それ以外の場合は、合格になります。
メディアの生の読み取りを実行します。 トラックごとに、そのトラックがオーディオであるかどうかを確認します。 そうでない場合は、テストを不合格にします。これは、記録によって既にトラックがオーディオ トラックであることが確認されていたためです。 トラックの開始オフセットと終了オフセットを計算します。トラックの開始オフセットから終了オフセットまでトラックの読み取りを実行します。読み取りプロセス中にエラーが発生した場合は、このテストを不合格にします。
結果: ドライブは、IMAPI のコンテキストでギャップレス生オーディオ イメージを書き込める必要があります。
コマンドの使用方法
コマンド | 説明 |
---|---|
OpticalLogoTest.exe /drive [StorageDriveLetter]:\ /log [log] [AdditionalParams] /profile [profile] /RunTestCaseTypes [RunTestCaseTypes] |
テストを実行します。 |
Note
このテスト バイナリのコマンド ライン ヘルプを表示するには、「/h」と入力します。
コマンド構文
コマンド オプション | 説明 |
---|---|
ドライブ |
テストする光学式デバイスのドライブ文字。 例: /drive e:\\ |
アダプター |
パス (アダプター テストに使用)。 例: /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 は、スペースなしの 10 進数とコンマ区切りにする必要があります。 例: /profile 9,10,16 |
seed |
ランダムなテスト データを生成するためのシード値です。 例: /seed 1000 |
RunTestCaseTypes |
テスト ケースのカテゴリのみを実行します。 例: /RunTestCaseTypes device |
RunTestCase |
このテスト ケースのみを実行します。 例: /RunTestCase Inquiry |
Automation |
ロボットを使用してオートメーション モードで実行し、メディアを変更します。 例: /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 |
トレースをログに記録する必要があるコンポーネント GUID の一覧全体を含む IMAPIv2 トレース 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 |