PBUILD_MDL_FROM_SCATTER_GATHER_LIST Rückruffunktion (wdm.h)
Die BuildMdlFromScatterGatherList-Routine erstellt eine MDL aus einer vom System zugeordneten Scatter/Gather-Liste.
Diese Routine ist für die Systemverwendung reserviert.
Syntax
PBUILD_MDL_FROM_SCATTER_GATHER_LIST PbuildMdlFromScatterGatherList;
NTSTATUS PbuildMdlFromScatterGatherList(
[in] PDMA_ADAPTER DmaAdapter,
[in] PSCATTER_GATHER_LIST ScatterGather,
[in] PMDL OriginalMdl,
[out] PMDL *TargetMdl
)
{...}
Parameter
[in] DmaAdapter
Zeiger auf die DMA_ADAPTER-Struktur, die von IoGetDmaAdapter zurückgegeben wird und den Bus-master-Adapter oder DMA-Controller darstellt.
[in] ScatterGather
Zeiger auf die SCATTER_GATHER_LIST Struktur, die an die AdapterListControl-Routine des Treibers übergeben wird.
[in] OriginalMdl
Zeiger auf die ursprüngliche MDL, die der Treiber zum Erstellen der Scatter/Gather-Liste verwendet hat.
[out] TargetMdl
Zeiger auf eine Variable, die von der Routine verwendet wird, um die MDL zurückzugeben, die erstellt wurde, um den puffer zu enthalten, der von der Scatter/Gather-Liste beschrieben wird. Der zurückgegebene Wert kann mit OriginalMdl identisch sein.
Rückgabewert
BuildMdlFromScatterGatherList gibt einen der folgenden status Codes zurück:
Rückgabecode | Beschreibung |
---|---|
STATUS_SUCCESS | Der Vorgang wurde erfolgreich ausgeführt. |
STATUS_INVALID_PARAMETER | Der Parameter OriginalMdl ist NULL. |
STATUS_INSUFFICIENT_RESOURCES | Es ist nicht genügend Arbeitsspeicher verfügbar, um eine neue MDL zuzuweisen. |
STATUS_NONE_MAPPED | Das System hat bereits eine neue MDL für die Speicherspeicherorte in der Scatter/Gather-Liste erstellt. (Dies geschieht nur, wenn die Routine zweimal in derselben Punkt-/Gather-Liste aufgerufen wird.) |
Hinweise
BuildMdlFromScatterGatherList ist keine Systemroutine, die direkt nach Namen aufgerufen werden kann. Diese Routine kann nur durch den Zeiger von der Adresse aufgerufen werden, die in einer DMA_OPERATIONS-Struktur zurückgegeben wird. Treiber erhalten die Adresse dieser Routine, indem sie IoGetDmaAdapter aufrufen, wobei der Version-Member des DeviceDescription-Parameters auf DEVICE_DESCRIPTION_VERSION2 festgelegt ist. Wenn IoGetDmaAdapterNULL zurückgibt, ist die Routine auf Ihrer Plattform nicht verfügbar.
Wenn ein Treiber eine Punkt-/Sammlungsliste erstellt, um auf ein Gerät zu schreiben, kann das System eine Kopie der zu schreibenden Daten erstellen und diese Kopie verwenden, um den DMA-Vorgang auszuführen. Verwenden Sie diese Routine, um auf die Speicherspeicherorte in der Punkt-/Sammlungsliste zuzugreifen, unabhängig davon, ob es sich bei diesen Speicherorten um eine Kopie handelt.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Verfügbar in Windows XP und höheren Versionen von Windows. |
Zielplattform | Desktop |
Kopfzeile | wdm.h (wdm.h einschließen) |
IRQL | <= DISPATCH_LEVEL |
DDI-Complianceregeln | IrqlDispatch(wdm) |