Freigeben über


PBUILD_SCATTER_GATHER_LIST Rückruffunktion (wdm.h)

Die BuildScatterGatherList Routine bereitet das System auf einen DMA-Vorgang mit einem vom Treiber bereitgestellten Puffer zum Erstellen der Punkt/Gather-Liste vor.

Syntax

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

Parameter

[in] DmaAdapter

Zeiger auf die DMA_ADAPTER Struktur, die von IoGetDmaAdapter zurückgegeben wird, die den Busmasteradapter oder DMA-Controller darstellt.

[in] DeviceObject

Zeiger auf das Geräteobjekt, das das Zielgerät für den DMA-Vorgang darstellt.

[in] Mdl

Zeigen Sie auf die MDL, die den durch den MdlAddress Member des aktuellen IRP angegebenen Puffers beschreibt.

[in] CurrentVa

Zeiger auf die aktuelle virtuelle Adresse in der MDL, damit der Puffer für einen DMA-Übertragungsvorgang zugeordnet wird.

[in] Length

Gibt die Länge des zuzuordnenden Puffers in Bytes an.

[in] ExecutionRoutine

Zeiger auf eine vom Treiber bereitgestellte AdapterListControl Routine, die bei IRQL = DISPATCH_LEVEL aufgerufen wird, wenn der DMA-Controller oder der Busmasteradapter des Systems verfügbar ist.

[in] Context

Zeiger auf den vom Treiber bestimmten Kontext, der beim Aufruf an ExecutionRou tine übergeben wird.

[in] WriteToDevice

Gibt die Richtung der DMA-Übertragung an: TRUE für eine Übertragung vom Puffer auf das Gerät und ANDERENfalls FALSE.

[in] ScatterGatherBuffer

Zeigen Sie auf den vom Aufrufer bereitgestellten Puffer, den die Routine mit einer SCATTER_GATHER_LIST Struktur ausfüllt.

[in] ScatterGatherLength

Gibt die Größe des Puffers in Bytes an, der im ScatterGatherBuffer Parameter übergeben wird.

Rückgabewert

BuildScatterGatherList gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
STATUS_SUCCESS Der Vorgang wurde erfolgreich abgeschlossen.
STATUS_INSUFFICIENT_RESOURCES Das System verfügt über unzureichende Kartenregister für die Übertragung.
STATUS_BUFFER_TOO_SMALL Die angegebene Length ist zu groß, um in den Puffer zu passen.

Bemerkungen

BuildScatterGatherList ist keine Systemroutine, die direkt anhand des Namens aufgerufen werden kann. Diese Routine kann nur durch Zeiger von der in einer DMA_OPERATIONS Struktur zurückgegebenen Adresse aufgerufen werden. Treiber rufen die Adresse dieser Routine ab, indem sie IoGetDmaAdapter- mit dem Version Member des DeviceDescription- Parameters auf DEVICE_DESCRIPTION_VERSION2 festgelegt wird. Wenn IoGetDmaAdapterNULL-zurückgibt, ist die Routine auf Ihrer Plattform nicht verfügbar.

BuildScatterGatherList führt den gleichen Vorgang wie GetScatterGatherListaus, mit der Ausnahme, dass der im ScatterGatherBuffer Parameter bereitgestellte Puffer verwendet wird, um die von ihr erstellten Punkt/Gather-Liste zu speichern. Im Gegensatz dazu weist GetScatterGatherList dynamisch einen Puffer zu, der die Punkt/Gather-Liste enthält. Wenn nicht genügend Arbeitsspeicher verfügbar ist, um den Puffer zuzuweisen, kann GetScatterGatherList- mit einem STATUS_INSUFFICIENT_RESOURCES Fehler fehlschlagen. Treiber, die dieses Szenario vermeiden müssen, können einen Puffer vorab anwenden, um die Punkt/Gather-Liste zu speichern, und stattdessen BuildScatterGatherList- verwenden.

Ein Treiber kann die CalculateScatterGatherList Routine verwenden, um die Größe des Puffers zu bestimmen, der der Punkt/Gather-Liste zugeordnet werden soll.

Der Treiber sollte den Zeiger auf die Punkt/Gather-Liste in ScatterGatherBuffer- beibehalten, wenn der Treiber PutScatterGatherListaufruft. Der Treiber muss PutScatterGatherList- aufrufen (wodurch die Liste gelebt wird), bevor er auf die Daten in der Liste zugreifen kann.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Verfügbar in Windows XP und höheren Versionen von Windows.
Zielplattform- Desktop
Header- wdm.h (include Wdm.h)
IRQL- DISPATCH_LEVEL
DDI-Complianceregeln IrqlDispatch(wdm)

Siehe auch

BuildMdlFromScatterGatherList

CalculateScatterGatherList-

DEVICE_DESCRIPTION

DEVICE_OBJECT

DMA_ADAPTER

DMA_OPERATIONS

GetScatterGatherList-

IoGetDmaAdapter-

PutScatterGatherList

SCATTER_GATHER_LIST