Freigeben über


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 MyAdapterListControlzu 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.