DMA_COMPLETION_ROUTINE Rückruffunktion (wdm.h)
Die DmaCompletionRoutine Rückrufroutine benachrichtigt den Treiber, der zuvor eine System-DMA-Übertragung angefordert hat, dass diese Übertragung abgeschlossen ist.
Syntax
DMA_COMPLETION_ROUTINE DmaCompletionRoutine;
void DmaCompletionRoutine(
[in] PDMA_ADAPTER DmaAdapter,
[in] PDEVICE_OBJECT DeviceObject,
[in] PVOID CompletionContext,
[in] DMA_COMPLETION_STATUS Status
)
{...}
Parameter
[in] DmaAdapter
Ein Zeiger auf eine DMA_ADAPTER Struktur. Diese Struktur ist das Adapterobjekt, das den DMA-Kanal des Treibers darstellt.
[in] DeviceObject
Ein Zeiger auf eine DEVICE_OBJECT Struktur. Diese Struktur ist das physische Geräteobjekt (PDO), das das Zielgerät für den angeforderten DMA-Vorgang darstellt.
[in] CompletionContext
Ein Zeiger auf einen treiberbestimmten Kontext für die DmaCompletionRoutine Routine. Dieser Kontext ist der CompletionContext Parameterwert, den der Treiber zuvor an den MapTransferEx Aufruf übergeben hat, der die System-DMA-Übertragung initiiert hat.
[in] Status
Der Abschlussstatus der DMA-Übertragung. Dieser Parameter ist ein DMA_COMPLETION_STATUS Enumerationswert, der angibt, ob die DMA-Übertragung erfolgreich abgeschlossen wurde.
Rückgabewert
Nichts
Bemerkungen
Als Option kann ein Treiber eine DmaCompletionRoutine Routine implementieren. Wenn der Treiber eine System-DMA-Übertragung anfordert, kann der Treiber einen Zeiger auf diese Routine mit der Anforderung bereitstellen. Nach Abschluss der DMA-Übertragung wird die DmaCompletionRoutine Routine automatisch aufgerufen, um den Treiber zu benachrichtigen.
Die DmaCompletionRoutine eines Treibers Routine wird nur aufgerufen, wenn die vom Treiber angeforderte DMA-Übertragung einen System-DMA-Controller verwendet, der nach Abschluss einer DMA-Übertragung einen Interrupt generieren kann. Ein Treiber, der ein Busmaster-DMA-Gerät verwendet oder einen System-DMA-Controller verwendet, der keine Unterbrechungen generiert, muss andere Mittel verwenden, um festzustellen, wann eine DMA-Übertragung abgeschlossen ist. Beispielsweise kann dieser Treiber einen Timer-Interrupt verwenden, um den Status der DMA-Übertragung regelmäßig abzufragen.
Ein Treiber kann einen Zeiger auf eine DmaCompletionRoutine- Routine als optionalen Parameter für die MapTransferEx--Routine bereitstellen.
Beispiele
Um eine DmaCompletionRoutine Rückrufroutine zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Rückrufroutine identifiziert. Windows stellt eine Reihe von Rückruffunktionstypen für Treiber bereit. Durch das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen können Codeanalyse für Treiber, statische Treiberüberprüfung (SDV) und andere Überprüfungstools Fehler finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.
Wenn Sie beispielsweise eine DmaCompletionRoutine Rückrufroutine definieren möchten, die MyDmaCompletionRoutine
benannt ist, verwenden Sie den DMA_COMPLETION_ROUTINE Typ, wie in diesem Codebeispiel gezeigt:
DMA_COMPLETION_ROUTINE MyDmaCompletionRoutine;
Implementieren Sie dann Ihre Rückrufroutine wie folgt:
_Use_decl_annotations_
VOID
MyDmaCompletionRoutine(
PDMA_ADAPTER DmaAdapter,
PDEVICE_OBJECT DeviceObject,
PVOID CompletionContext,
DMA_COMPLETION_STATUS Status
)
{
// Function body
}
Der DMA_COMPLETION_ROUTINE Funktionstyp wird in der Wdm.h-Headerdatei definiert. Um Fehler genauer zu identifizieren, wenn Sie die Codeanalysetools ausführen, müssen Sie der Funktionsdefinition die _Use_decl_annotations_
Anmerkung hinzufügen. Die _Use_decl_annotations_
Anmerkung stellt sicher, dass die Anmerkungen, die auf den Funktionstyp DMA_COMPLETION_ROUTINE in der Headerdatei angewendet werden, verwendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für WDM-Treiber. Informationen zu _Use_decl_annotations_ finden Sie unter Annotating Function Behavior.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Verfügbar ab Windows 8. |
Zielplattform- | Desktop |
Header- | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL- | Wird bei DISPATCH_LEVEL aufgerufen. |