Condividi tramite


PBUILD_SCATTER_GATHER_LIST funzione di callback (wdm.h)

La routine BuildScatterGatherList prepara il sistema per un'operazione DMA, usando un buffer fornito dal driver per compilare l'elenco a dispersione/raccolta.

Sintassi

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
)
{...}

Parametri

[in] DmaAdapter

Puntatore alla struttura DMA_ADAPTER restituita da IoGetDmaAdapter che rappresenta l'adattatore bus-master o il controller DMA.

[in] DeviceObject

Puntatore all'oggetto dispositivo che rappresenta il dispositivo di destinazione per l'operazione DMA.

[in] Mdl

Puntatore al file MDL che descrive il buffer specificato dal MdlAddress membro dell'IRP corrente.

[in] CurrentVa

Puntatore all'indirizzo virtuale corrente nel file MDL per il mapping del buffer per un'operazione di trasferimento DMA.

[in] Length

Specifica la lunghezza, in byte, del buffer di cui eseguire il mapping.

[in] ExecutionRoutine

Puntatore a una routine AdapterListControl fornita dal driver, chiamata in IRQL = DISPATCH_LEVEL quando è disponibile il controller DMA di sistema o l'adattatore bus-master.

[in] Context

Puntatore al contesto determinato dal driver passato a ExecutionRoutine quando viene chiamato.

[in] WriteToDevice

Indica la direzione del trasferimento DMA: TRUE per un trasferimento dal buffer al dispositivo e false in caso contrario.

[in] ScatterGatherBuffer

Puntatore al buffer fornito dal chiamante che la routine riempie con una struttura SCATTER_GATHER_LIST.

[in] ScatterGatherLength

Specifica le dimensioni, in byte, del buffer passato nel parametro ScatterGatherBuffer.

Valore restituito

BuildScatterGatherList restituisce uno dei valori seguenti:

Codice restituito Descrizione
STATUS_SUCCESS L'operazione viene completata correttamente.
STATUS_INSUFFICIENT_RESOURCES Il sistema non dispone di registri mappa sufficienti disponibili per il trasferimento.
STATUS_BUFFER_TOO_SMALL La lunghezza specificata è troppo grande per rientrare nel buffer.

Osservazioni

BuildScatterGatherList non è una routine di sistema che può essere chiamata direttamente per nome. Questa routine può essere chiamata solo dal puntatore dall'indirizzo restituito in una struttura DMA_OPERATIONS. I driver ottengono l'indirizzo di questa routine chiamando IoGetDmaAdapter con il membro Version del parametro DeviceDescription impostato su DEVICE_DESCRIPTION_VERSION2. Se IoGetDmaAdapter restituisce NULL, la routine non è disponibile nella piattaforma.

BuildScatterGatherList esegue la stessa operazione di GetScatterGatherList, ad eccezione del fatto che usa il buffer fornito nel parametro ScatterGatherBuffer per contenere l'elenco a dispersione/raccolta creato. Al contrario, GetScatterGatherList alloca dinamicamente un buffer per contenere l'elenco a dispersione/raccolta. Se la memoria insufficiente è disponibile per allocare il buffer, GetScatterGatherList può non riuscire con un errore di STATUS_INSUFFICIENT_RESOURCES. I driver che devono evitare questo scenario possono preallocare un buffer per contenere l'elenco a dispersione/raccolta e usare BuildScatterGatherList.

Un driver può usare la routine CalculateScatterGatherList per determinare le dimensioni del buffer da allocare per contenere l'elenco a dispersione/raccolta.

Il driver deve mantenere il puntatore all'elenco a dispersione/raccolta in ScatterGatherBuffer da usare quando il driver chiama PutScatterGatherList. Il driver deve chiamare PutScatterGatherList (che scarica l'elenco) prima di poter accedere ai dati nell'elenco.

Fabbisogno

Requisito Valore
client minimo supportato Disponibile in Windows XP e versioni successive di Windows.
piattaforma di destinazione Desktop
intestazione wdm.h (include Wdm.h)
IRQL DISPATCH_LEVEL
regole di conformità DDI irqlDispatch(wdm)

Vedere anche

BuildMdlFromScatterGatherList

CalculateScatterGatherList

DEVICE_DESCRIPTION

DEVICE_OBJECT

DMA_ADAPTER

DMA_OPERATIONS

GetScatterGatherList

IoGetDmaAdapter

PutScatterGatherList

SCATTER_GATHER_LIST