WdfDmaTransactionAllocateResources-Funktion (wdfdmatransaction.h)
[Gilt nur für KMDF]
Die WdfDmaTransactionAllocateResources-Methode reserviert einen DMA-Enabler im Einzelpaket oder Systemmodus für die exklusive (und wiederholte) Verwendung mit dem angegebenen Transaktionsobjekt. Der Treiber kann die Transaktion mehrmals initialisieren und initiieren, während er reservierte Ressourcen hält.
Syntax
NTSTATUS WdfDmaTransactionAllocateResources(
[in] WDFDMATRANSACTION DmaTransaction,
[in] WDF_DMA_DIRECTION DmaDirection,
[in] ULONG RequiredMapRegisters,
[in] PFN_WDF_RESERVE_DMA EvtReserveDmaFunction,
[in] PVOID EvtReserveDmaContext
);
Parameter
[in] DmaTransaction
Ein Handle für das DMA-Transaktionsobjekt, für das DMA-Ressourcen reserviert werden sollen.
[in] DmaDirection
Ein WDF_DMA_DIRECTION typisierter Wert, der die DMA-Übertragungsrichtung angibt, für die die Ressourcen reserviert werden. Wenn der Treiber kein Duplexprofil angegeben hat, ignoriert das Framework diesen Wert.
[in] RequiredMapRegisters
Die Anzahl der Kartenregister, die der Fahrer reservieren möchte. Bei null leitet das Framework die erforderliche Anzahl von Kartenregistern aus der initialisierten Transaktion ab.
[in] EvtReserveDmaFunction
Ein Zeiger auf die EvtReserveDma-Ereignisrückruffunktion des Treibers.
[in] EvtReserveDmaContext
Ein Zeiger auf einen Puffer, der den Kontext enthält, der für die EvtReserveDma-Ereignisrückruffunktion des Treibers bereitgestellt werden soll.
Rückgabewert
WdfDmaTransactionAllocateResources gibt STATUS_SUCCESS zurück, wenn der Vorgang erfolgreich ist. Andernfalls gibt diese Methode einen der folgenden Werte zurück.
Rückgabecode | Beschreibung |
---|---|
|
Der DmaDirection-Parameter enthält einen ungültigen Wert. |
|
Die Anzahl der Kartenregisteranforderungen überschreitet die anzahl, die dem Enabler zugewiesen wurde, oder der Treiber, der zuvor WdfDmaTransactionSetImmediateExecution genannt wurde, und die für die Anforderung benötigten Ressourcen sind nicht verfügbar. |
|
DMA Version 3 oder höher ist nicht aktiviert, oder der Treiber, der diese Methode für eine Scatter-Gather-DMA-Aktivierung bezeichnet. |
Hinweise
WdfDmaTransactionAllocateResources sendet eine Anforderung für Kartenregister an die System-DMA-Engine. Wenn die Anforderung erfüllt wurde, ruft das Framework die EvtReserveDma-Ereignisrückruffunktion des Treibers auf. Weitere Informationen zum Reservieren von Ressourcen finden Sie unter Reservieren von DMA-Ressourcen.
Frameworkbasierte Treiber rufen in der Regel WdfDmaTransactionAllocateResources aus einem E/A-Anforderungshandler auf. Ein Treiber kann WdfDmaTransactionAllocateResources auch über seine Rückruffunktion EvtDriverDeviceAdd aufrufen, nachdem er ein DMA-Enabler-Objekt erstellt hat.
Wenn WdfDmaTransactionAllocateResources mit einem DMA-Enabler "scatter/gather" aufgerufen wird, verursacht WdfDmaTransactionAllocateResources eine Überprüfung des Prüfers.
Der Treiber muss die von DmaTransaction angegebene Transaktion erstellen, bevor WdfDmaTransactionAllocateResources aufgerufen wird. Nach dem Aufruf von WdfDmaTransactionAllocateResources initialisiert und initiiert der Treiber die Transaktion. Der Treiber kann dasselbe Transaktionsobjekt mehrmals neu initialisieren und neu initialisieren, um die Verzögerung zu vermeiden, die andernfalls zwischen Transaktionen auftreten würde, wenn Kartenregister wieder zur HAL freigegeben und dann neu zugeordnet wurden.
Ein Treiber kann WdfDmaTransactionAllocateResources in den folgenden Situationen aufrufen:
- Der Treiber empfängt eine Reihe von DMA-Kanälen in seiner Rückruffunktion EvtDevicePrepareHardware . In EvtDevicePrepareHardware initialisiert der Treiber eine DMA-Transaktion und ruft WdfDmaTransactionAllocateResources auf, um den Enabler für die exklusive Verwendung mit dieser Transaktion zu reservieren. Alternativ kann der Treiber WdfDmaTransactionAllocateResources über einen Anforderungshandler aufrufen und dann die Transaktion mehrmals initiieren.
- Der Treiber muss eine Reihe von Transaktionen auf dem Enabler ausführen. Der Treiber reserviert den Enabler, initialisiert und initiiert mehrere Transaktionen mit demselben Transaktionsobjekt und gibt dann den Enabler frei.
Beim Aufrufen von WdfDmaTransactionAllocateResources sollte der Treiber nicht mehr Kartenregister anfordern, als er beim Erstellen des Enablers angefordert hat.
Um WdfDmaTransactionAllocateResources nicht blockierend aufzurufen, sollte der Treiber zuerst WdfDmaTransactionSetImmediateExecution aufrufen.
WdfDmaTransactionAllocateResources erfordert DMA-Version 3. Um DMA Version 3 auszuwählen, legen Sie den WdmDmaVersionOverride-Member von WDF_DMA_ENABLER_CONFIG auf 3 fest.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
KMDF-Mindestversion | 1.11 |
Kopfzeile | wdfdmatransaction.h (einschließen von Wdf.h) |
Bibliothek | Wdf01000.sys (siehe Versionierung der Frameworkbibliothek.) |
IRQL | <=DISPATCH_LEVEL |
DDI-Complianceregeln | DriverCreate(kmdf) |