Freigeben über


DRIVER_LIST_CONTROL Rückruffunktion (wdm.h)

Die AdapterListControl Routine startet einen DMA-Punkt/Gather-Vorgang (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 vom 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 wird nicht verwendet.

[in] ScatterGather

Vom Aufrufer bereitgestellter Zeiger auf eine SCATTER_GATHER_LIST Struktur, die Punkt/Sammelbereiche beschreibt.

[in] Context

Vom Aufrufer bereitgestellter Zeiger auf treiberdefinierte Kontextinformationen, die in einem vorherigen Aufruf von AllocateAdapterChannelangegeben wurden.

Rückgabewert

Nichts

Bemerkungen

Um eine AdapterListControl Routine für ein bestimmtes Geräteobjekt zu registrieren, muss ein Treiber IoGetDmaAdapter- aufrufen, um ein Adapterobjekt abzurufen. Rufen Sie dann GetScatterGatherList- auf, um die Verwendung des Adapters anzufordern und die Adresse des AdapterListControl Routine anzugeben. Wenn der Adapter kostenlos ist, ruft das System die AdapterListControl Routine auf.

Beispiele

Um eine AdapterListControl- Rückrufroutine zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der rückrufroutine identifiziert, die Sie definieren. 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.

Um beispielsweise eine AdapterListControl- Rückrufroutine zu definieren, die MyAdapterListControlheißt, verwenden Sie den DRIVER_LIST_CONTROL Typ, 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 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 DRIVER_LIST_CONTROL 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.

Ausführliche Informationen zum Implementieren einer AdapterListControl--Routine finden Sie unter Using Scatter/Gather DMA.

Anforderungen

Anforderung Wert
Zielplattform- Desktop
Header- wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
IRQL- Wird bei DISPATCH_LEVEL aufgerufen.