次の方法で共有


PGET_SCATTER_GATHER_LISTコールバック関数 (wdm.h)

GetScatterGatherList ルーチンは、システム DMA コントローラーまたはバス マスター アダプターを介して、ターゲット デバイス オブジェクトに代わって DMA 散布/収集操作のためにシステムを準備します。

構文

PGET_SCATTER_GATHER_LIST PgetScatterGatherList;

NTSTATUS PgetScatterGatherList(
  [in] PDMA_ADAPTER DmaAdapter,
  [in] PDEVICE_OBJECT DeviceObject,
  [in] PMDL Mdl,
  [in] PVOID CurrentVa,
  [in] ULONG Length,
  [in] PDRIVER_LIST_CONTROL ExecutionRoutine,
  [in] PVOID Context,
  [in] BOOLEAN WriteToDevice
)
{...}

パラメーター

[in] DmaAdapter

バス マスター アダプターまたは DMA コントローラー 表す IoGetDmaAdapter によって返される DMA_ADAPTER 構造体へのポインター。

[in] DeviceObject

DMA 操作のターゲット デバイスを表すデバイス オブジェクトへのポインター。

[in] Mdl

現在の IRP の MdlAddress にあるバッファー 記述する MDL へのポインター。

[in] CurrentVa

DMA 転送操作にマップされるバッファーの MDL 内の現在の仮想アドレスへのポインター。

[in] Length

マップする長さをバイト単位で指定します。

[in] ExecutionRoutine

ドライバー提供の AdapterListControl ルーチンへのポインター。システム DMA コントローラーまたはバス マスター アダプターが使用可能な場合にDISPATCH_LEVELで呼び出されます。

[in] Context

ドライバーが呼び出されたときに、ドライバーの AdapterListControl ルーチンに渡されるドライバーによって決定されたコンテキストへのポインター。

[in] WriteToDevice

DMA 転送の方向を示します。バッファーからデバイスへの転送に TRUE し、それ以外の場合は FALSE します。

戻り値

このルーチンは、次の NTSTATUS 値のいずれかを返すことができます。

リターン コード 形容
STATUS_SUCCESS
操作は成功しました。
STATUS_INSUFFICIENT_RESOURCES
ルーチンが十分なメモリを割り当てられなかったか、転送に必要なマップ レジスタの数が、IoGetDmaAdapterによって返される値より大きい。
STATUS_BUFFER_TOO_SMALL
要求された転送に対してバッファーが小さすぎます。

備考

GetScatterGatherList ルーチンは、散布図/収集リストを保持するバッファーを動的に割り当てます。 バッファーの割り当てが失敗した場合の NTSTATUS 値については、戻り値を参照してください。

GetScatterGatherList は、名前で直接呼び出すことができるシステム ルーチンではありません。 このルーチンは、DMA_OPERATIONS 構造体で返されたアドレスからのポインターによってのみ呼び出されます。 ドライバーは、IoGetDmaAdapterを呼び出すことによって、このルーチンのアドレスを取得します。

適切な DMA チャネルと必要なマップ レジスタが使用可能になるとすぐに、GetScatterGatherList は散布図/収集リストを作成し、マップ レジスタを初期化してから、ドライバーが指定した AdapterListControl ルーチンを呼び出して I/O 操作を実行します。

GetScatterGatherList は、AllocateAdapterChannel のアクションと、分散/収集 DMA を実行するドライバーの MapTransfer ルーチンを します。 GetScatterGatherList は、転送に必要なマップ レジスタの数を決定し、マップ レジスタを割り当て、DMA のバッファーをマップして、散布図/収集リストに入力します。 次に、指定された AdapterListControl ルーチンを呼び出し、ScatterGather で散布図/収集リストへのポインター渡します。 ドライバーは、PutScatterGatherList 呼び出すときに使用するために、このポインターを保持する必要があります。 GetScatterGatherList には、AllocateAdapterChannel に適用されるキュー制限備えていないことに注意してください。

AdapterListControl ルーチンでは、ドライバーは I/O を実行する必要があります。 ドライバーが提供するルーチンから戻ると、GetScatterGatherList はマップ レジスタを保持しますが、DMA アダプター構造を解放します。 ドライバーは、バッファー データにアクセスする前に、(バッファーをフラッシュする) putScatterGatherList を呼び出す必要があります。

このルーチンは、すべてのチェーンされた MDL で必要なマップ レジスタの合計数が、使用可能なマップ レジスタの数を超えていない場合に、チェーンされた MDL を処理できます。

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 以降のバージョンの Windows で使用できます。 Windows 98 または Windows Me ではサポートされていません。
ターゲット プラットフォーム デスクトップ
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
IRQL DISPATCH_LEVEL
DDI コンプライアンス規則 する IrqlDispatch(storport)、IrqlDispatch(storport)、IrqlDispatch(wdm)

関連項目

AllocateAdapterChannel

DEVICE_OBJECT

DMA_ADAPTER

DMA_OPERATIONS

IoGetDmaAdapter

PutScatterGatherList する

SCATTER_GATHER_LIST