共用方式為


PBUILD_SCATTER_GATHER_LIST回呼函式 (wdm.h)

BuildScatterGatherList 例程會使用驅動程式提供的緩衝區來建置散佈/收集清單,為 DMA 作業準備系統。

語法

PBUILD_SCATTER_GATHER_LIST PbuildScatterGatherList;

NTSTATUS PbuildScatterGatherList(
  [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] PVOID ScatterGatherBuffer,
  [in] ULONG ScatterGatherLength
)
{...}

參數

[in] DmaAdapter

IoGetDmaAdapter 所傳回之DMA_ADAPTER結構的指標,代表總線主要適配卡或 DMA 控制器。

[in] DeviceObject

代表 DMA 作業目標裝置之裝置物件的指標。

[in] Mdl

描述目前 IRP 之 MdlAddress 成員所指定之緩衝區的 MDL 指標。

[in] CurrentVa

MDL 中目前虛擬位址的指標,緩衝區要對應至 DMA 傳輸作業。

[in] Length

指定要對應之緩衝區的長度,以位元組為單位。

[in] ExecutionRoutine

驅動程式提供的 AdapterListControl 例程指標,當系統 DMA 控制器或總線主機適配卡可用時,會在 IRQL = DISPATCH_LEVEL呼叫。

[in] Context

呼叫時傳遞至 ExecutionRoutine 之驅動程式判斷內容的指標。

[in] WriteToDevice

表示 DMA 傳輸的方向: TRUE 表示從緩衝區到裝置的傳輸,否則為 FALSE

[in] ScatterGatherBuffer

呼叫端提供的緩衝區指標,例程會填入 SCATTER_GATHER_LIST 結構。

[in] ScatterGatherLength

指定 在 ScatterGatherBuffer 參數中傳遞之緩衝區的大小,以位元組為單位。

傳回值

BuildScatterGatherList 會傳回下列其中一個值:

傳回碼 Description
STATUS_SUCCESS 作業已順利完成。
STATUS_INSUFFICIENT_RESOURCES 系統沒有足夠的地圖緩存器可供傳輸使用。
STATUS_BUFFER_TOO_SMALL 指定的 Length 太大,無法容納於緩衝區內。

備註

BuildScatterGatherList 不是可直接依名稱呼叫的系統例程。 這個例程只能由 DMA_OPERATIONS結構中 傳回之位址的指標呼叫。 驅動程式會呼叫IoGetDmaAdapter,並將DeviceDescription參數的Version成員設定為 DEVICE_DESCRIPTION_VERSION2,以取得此例程的位址。 如果 IoGetDmaAdapter 傳回 NULL,則您的平台上無法使用例程。

BuildScatterGatherList 會執行與 GetScatterGatherList 相同的作業,不同之處在於它會使用 ScatterGatherBuffer 參數中提供的緩衝區來保存所建立的散佈/收集清單。 相反地, GetScatterGatherList 會動態配置緩衝區來保存散佈/收集清單。 如果記憶體不足而無法配置緩衝區, GetScatterGatherList 可能會失敗,並出現STATUS_INSUFFICIENT_RESOURCES錯誤。 必須避免此案例的驅動程式可以預先配置緩衝區來保存散佈/收集清單,並改用 BuildScatterGatherList

驅動程式可以使用 CalculateScatterGatherList 例程來判斷要配置以保存散佈/收集清單的緩衝區大小。

驅動程式應該在 ScatterGatherBuffer 中保留散佈/收集清單的指標,以在驅動程式呼叫 PutScatterGatherList 時使用。 驅動程式必須呼叫 PutScatterGatherList (排清清單) ,才能存取清單中的數據。

規格需求

需求
最低支援的用戶端 可在 Windows XP 和更新版本的 Windows 中使用。
目標平台 桌面
標頭 wdm.h (包含 Wdm.h)
IRQL DISPATCH_LEVEL
DDI 合規性規則 IrqlDispatch (wdm)

另請參閱

BuildMdlFromScatterGatherList

CalculateScatterGatherList

DEVICE_DESCRIPTION

DEVICE_OBJECT

DMA_ADAPTER

DMA_OPERATIONS

GetScatterGatherList

IoGetDmaAdapter

PutScatterGatherList

SCATTER_GATHER_LIST