次の方法で共有


ストレージ クラス ドライバーのデバイス拡張の設定

ストレージ クラス ドライバーによって作成された各デバイス オブジェクトのデバイス拡張機能では、そのドライバーは、デバイスの I/O 要求を管理するために使用する、ドライバーが決定したあらゆるデータのストレージを提供します。たとえば、AddDevice に渡される PDO へのポインター、IoAttachDeviceToDeviceStack によって返されるデバイス オブジェクトへのポインター、独自のデバイス オブジェクトへのバック ポインターなどです。

ほとんどのストレージ クラス ドライバーでは、次の情報のストレージ も提供されます。

  • デバイスの種類固有のタイムアウト値

    クラス ドライバーは、送信する SRB のタイムアウト値をポート ドライバーに渡すことができます。ポート ドライバーは、各クラス ドライバーの代わりに SRB_FUNCTION_EXECUTE_SCSI 要求 (SCSI_REQUEST_BLOCK を参照) の時間を測定します。 ポート ドライバーが基になるドライバーに要求を送信してから要求が完了するまでの時間が指定されたタイムアウト値を超えた場合、ポート ドライバーは、SrbStatus メンバーが SRB_STATUS_TIMEOUT に設定された SRB を返します。

  • クラス ドライバーのエラー処理ルーチンへのポインター

    ストレージ クラス ドライバーでのエラー処理の詳細については、「ストレージ クラス ドライバーの IoCompletion ルーチン」を参照してください。

  • ドライバーが保持する、デバイス上のバス プロトコル エラーのカウント

  • センス データ用にドライバーが割り当てたバッファーへのポインター

    クラス ドライバーは、キャッシュ アラインされた非ページ プールから返されるセンス データのメモリを割り当てる必要があります。 ドライバー バッファーのメモリの割り当ての詳細については、「システム領域メモリの割り当て」を参照してください。

  • クラス ドライバーが SRB に設定する SrbFlags のドライバー決定既定値

  • ドライバーが割り当てる SRB のルックアサイド リストを設定する場合のルックアサイド リスト ヘッダーへのポインター

    詳細については、「ルックアサイド リストの使用」を参照してください。

  • ページング操作およびエラー回復操作 (ストレージ クラス ドライバーの ReleaseQueue ルーチンによって実行されるものなど) のために、メモリ不足の状態でも成功させなければならない要求に対して割り当てられ、保持されている IRP と SRB へのポインター。

  • ポート ドライバーが HBA から収集した STORAGE_ADAPTER_DESCRIPTORSTORAGE_DEVICE_DESCRIPTOR データへのポインター

    クラス ドライバーがこのデータを取得して使用する方法については、「ストレージ クラス ドライバーの GetDescriptor ルーチン」を参照してください。

  • デバイス上の状態間の遷移を管理するための、以前の PnP 状態と現在の PnP 状態を示すフラグ

  • 冗長な電源要求を処理する余分な作業を回避するために、現在のデバイスの電源状態を示すフラグ

  • ドライバーが受信したページング通知要求 (IRP_MN_DEVICE_USAGE_NOTIFICATION を使用した IRP_MJ_PNP) に基づいて、デバイス上にシステム ページング ファイルがある場合には、その数

ストレージ クラス ドライバーは、IoAttachDeviceToDeviceStack によって返され、ドライバーの AddDevice ルーチンによってデバイス拡張機能に格納されたデバイス オブジェクト ポインターを使用しない限り、ストレージ ポート ドライバー経由でデバイスに要求を送信することはできません。