DRIVER_LIST_CONTROL Rückruffunktion (wdm.h)
Die AdapterListControl-Routine startet einen DMA-Punkt-/Erfassungsvorgang (Direct Memory Access).
Syntax
DRIVER_LIST_CONTROL DriverListControl;
void DriverListControl(
[in] _DEVICE_OBJECT *DeviceObject,
[in] _IRP *Irp,
[in] PSCATTER_GATHER_LIST ScatterGather,
[in] PVOID Context
)
{...}
Parameter
[in] DeviceObject
Vom Aufrufer bereitgestellter Zeiger auf eine DEVICE_OBJECT-Struktur . Dies ist das Geräteobjekt für das Zielgerät, das zuvor von der AddDevice-Routine des Treibers erstellt wurde.
[in] Irp
Vom Aufrufer bereitgestellter Zeiger auf eine IRP-Struktur , die den E/A-Vorgang beschreibt, wenn der Treiber über eine StartIo-Routine verfügt. Andernfalls nicht verwendet.
[in] ScatterGather
Vom Aufrufer bereitgestellter Zeiger auf eine SCATTER_GATHER_LIST Struktur, die Punkt-/Sammlungsregionen beschreibt.
[in] Context
Vom Aufrufer bereitgestellter Zeiger auf vom Treiber definierte Kontextinformationen, der in einem vorherigen Aufruf von AllocateAdapterChannel angegeben wurde.
Rückgabewert
Keine
Bemerkungen
Um eine AdapterListControl-Routine für ein bestimmtes Geräteobjekt zu registrieren, muss ein Treiber IoGetDmaAdapter aufrufen, um ein Adapterobjekt zu erhalten, und dann GetScatterGatherList aufrufen, um die Verwendung des Adapters anzufordern und die Adresse der AdapterListControl-Routine anzugeben. Wenn der Adapter frei ist, ruft das System die AdapterListControl-Routine auf.
Beispiele
Um eine AdapterListControl-Rückrufroutine zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der Rückrufroutine identifiziert, die Sie definieren. Windows bietet eine Reihe von Rückruffunktionstypen für Treiber. Das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen hilft der Codeanalyse für Treiber, der statischen Treiberüberprüfung (Static Driver Verifier , SDV) und anderen Überprüfungstools, Fehler zu finden, und es ist eine Voraussetzung für das Schreiben von Treibern für das Windows-Betriebssystem.
Um beispielsweise eine AdapterListControl-Rückrufroutine mit dem Namen MyAdapterListControl
zu definieren, verwenden Sie den typ DRIVER_LIST_CONTROL, wie in diesem Codebeispiel gezeigt:
DRIVER_LIST_CONTROL MyAdapterListControl;
Implementieren Sie dann Ihre Rückrufroutine wie folgt:
_Use_decl_annotations_
VOID
MyAdapterListControl(
struct _DEVICE_OBJECT *DeviceObject,
struct _IRP *Irp,
PSCATTER_GATHER_LIST ScatterGather,
PVOID Context
)
{
// Function body
}
Der DRIVER_LIST_CONTROL Funktionstyp ist in der Wdm.h-Headerdatei definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, fügen Sie die _Use_decl_annotations_
Anmerkung ihrer Funktionsdefinition hinzu. Die _Use_decl_annotations_
Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den DRIVER_LIST_CONTROL Funktionstyp in der Headerdatei angewendet 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 Verhalten von Funktionen mit Anmerkungen.
Ausführliche Informationen zum Implementieren einer AdapterListControl-Routine finden Sie unter Verwenden von Scatter/Gather DMA.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Desktop |
Header | wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Wird bei DISPATCH_LEVEL aufgerufen. |