レポート検証

Storport 検証機能は、Storport ミニポート ドライバーとポート ドライバーの間の相互作用を監視します。 ミニポート ドライバーがルーチンを誤用する場合、ポート ドライバーからの要求に誤って応答する場合、または要求への応答に過剰な時間がかかる場合は、バグ チェックが発行されます。

Note

Storport 検証機能は、Windows Vista 以降のバージョンの Windows でのみ使用できます。

Storport 検証によって検出される違反

Storport 検証機能では、Storport ルーチンのいくつかの誤用を検出できます。 これらのチェックの一部を個別に無効にすることもできます。

Storport 検証機能は、Storport ミニポート ドライバーが次のいずれかの違反を犯した場合に、バグ チェック 0xF1 またはバグ チェック 0xC4 を発行します。

  • ミニポート ドライバーが、StorPortInitialize ルーチンに正しくない引数 (NULL ポインター) を渡す。

  • ミニポート ドライバーが StorPortStallExecution を呼び出し、0.1 秒より長い遅延を指定して、プロセッサが長時間ストールする。

  • StorPortFreeDeviceBase は、ミニポート ドライバーの HwStorFindAdapter ルーチンからのみ呼び出すことができる。

  • StorPortGetUncachedExtension は、ミニポート ドライバーの HwStorFindAdapter ルーチンからのみ呼び出すことができる。また、バス マスター アダプターに対してのみ呼び出すことができる。 ミニポートは、StorPortGetUncachedExtension を呼び出す前に、HW_INITIALIZATION_DATA (Storport) 構造体の SrbExtensionSize を設定する必要がある。

  • StorPortGetDeviceBase ルーチンは、システムのプラグ アンド プレイ (PnP) マネージャーによってドライバーに割り当てられたアドレスのみをサポートしている。

  • ミニポート ドライバーが、StorPortReadxxx または StorPortWritexxx ルーチン (たとえば、StorPortReadRegisterUcharStorPortWritePortBufferUlong) のいずれかに無効な仮想アドレスを渡す。 これは通常、指定されたアドレスが共通バッファー領域にマッピングされていないことを意味します。 指定されたレジスタまたはポートは、StorPortGetDeviceBase ルーチンが返すマップされたメモリ領域の範囲内にある必要があります。 このチェックは、x86 ベースのシステムでのみサポートされます。

Storport 検証で使用されるバグ チェック パラメーターの一覧については、「バグ チェック 0xF1」 (SCSI_VERIFIER_DETECTED_VIOLATION) を参照してください。 バグ チェック 0xF1 の他に、Storport 検証ではバグ チェック 0xC4 (DRIVER_VERIFIER_DETECTED_VIOLATION) も使用されます。

Note

バグ チェック 0xF1 は、SCSI 検証と Storport 検証の両方に使用されます。

Storport 検証オプションのアクティブ化

Storport 検証オプションをアクティブ化する手順は、他のドライバーの検証ツールのオプションをアクティブ化する手順とは異なります。

  1. ドライバー検証ツール マネージャーまたは Verifier.exe コマンド ラインを使用して、ミニポート ドライバーの検証を開始します。 Storport 検証はオプションとしては使用できないため、少なくとも 1 つの他のドライバーの検証ツール オプションを選択する必要があります。 詳細については、「ドライバーの検証ツールのオプションの選択」および「検証するドライバーの選択」を参照してください。

  2. regedit.exe を使用してレジストリを開きます。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorPort キーに、Verifier という名前のサブキーを追加します。 StorPort キーが存在しない場合は、作成する必要があります。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\STORPort\Verifier キー内に、VerifyLevel という名前の REG_DWORD エントリを追加します。 このエントリに割り当てられた値によって、どの Storport 検証テストがアクティブになるかが決まります。 値 0x1 は、最大の検証を提供します。

  3. コンピューターを再起動します。

VerifyLevel 値が存在しないか、0xFFFFFFFF と等しい場合、Storport 検証は無効になります。

再起動しないアクティブ化

一般に、どの Windows オペレーティング システムでも、コンピューターを再起動 (リブート) しないと、Storport 検証をアクティブ化または非アクティブ化することはできません。 StorPort.sys ドライバーは、読み込み時にのみ VerifyLevel レジストリ エントリを読み取ります。これは通常、起動時です。 ただし、レジストリ エントリを追加するときに StorPort.sys ドライバーが読み込まれていない場合、またはアンロードされてから再読み込みされた場合は、Windows Vista 以降のバージョンの Windows で、コンピューターを再起動せずに Storport 検証を有効にすることができます。