EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL Rückruffunktion (wdfio.h)

[Gilt für KMDF und UMDF]

Die EvtIoDeviceControl-Ereignisrückruffunktion eines Treibers verarbeitet eine angegebene Geräte-E/A-Steuerungsanforderung.

Syntax

EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtWdfIoQueueIoDeviceControl;

void EvtWdfIoQueueIoDeviceControl(
  [in] WDFQUEUE Queue,
  [in] WDFREQUEST Request,
  [in] size_t OutputBufferLength,
  [in] size_t InputBufferLength,
  [in] ULONG IoControlCode
)
{...}

Parameter

[in] Queue

Ein Handle für das Framework-Warteschlangenobjekt, das der E/A-Anforderung zugeordnet ist.

[in] Request

Ein Handle für ein Frameworkanforderungsobjekt.

[in] OutputBufferLength

Die Länge des Ausgabepuffers der Anforderung in Bytes, wenn ein Ausgabepuffer verfügbar ist.

[in] InputBufferLength

Die Länge des Eingabepuffers der Anforderung in Bytes, wenn ein Eingabepuffer verfügbar ist.

[in] IoControlCode

Der treiberdefinierte oder systemdefinierte E/A-Steuerungscode (IOCTL), der der Anforderung zugeordnet ist.

Rückgabewert

Keine

Bemerkungen

Ein Treiber registriert eine EvtIoDeviceControl-Rückruffunktion , wenn er WdfIoQueueCreate aufruft. Weitere Informationen zum Aufrufen von WdfIoQueueCreate finden Sie unter Erstellen von E/A-Warteschlangen.

Wenn ein Treiber eine EvtIoDeviceControl-Rückruffunktion für die E/A-Warteschlange eines Geräts registriert hat, empfängt die Rückruffunktion jede E/A-Steuerungsanforderung (IRP_MJ_DEVICE_CONTROL) aus der Warteschlange. Weitere Informationen finden Sie unter Anforderungshandler.

Die EvtIoDeviceControl-Rückruffunktion muss jede empfangene E/A-Anforderung in irgendeiner Weise verarbeiten. Weitere Informationen finden Sie unter Verarbeiten von E/A-Anforderungen.

Treiber erhalten E/A-Steuerungsanforderungen, wenn eine Benutzeranwendung DeviceIoControl aufruft (siehe Microsoft Windows SDK Dokumentation) oder wenn ein anderer Treiber eine Anforderung durch Aufrufen von WdfIoTargetSendIoctlSynchronously oder WdfIoTargetFormatRequestForIoctl erstellt.

Der Typ des auszuführenden Vorgangs hängt vom Wert des IoControlCode-Parameters ab. Sie müssen den Satz von IoControlCode-Werten bestimmen, den Anwendungen und andere Treiber an Ihren Treiber senden können. Weitere Informationen zu IOCTLs finden Sie unter Verwenden von E/A-Steuerungscodes.

Die meisten Geräte-E/A-Steuerungsvorgänge erfordern einen Eingabepuffer, einen Ausgabepuffer oder beides. Informationen dazu, wie der Treiber auf die Puffer einer Anforderung zugreifen kann, finden Sie unter Zugreifen auf Datenpuffer in Framework-Based Treibern.

Die Techniken, die Ihr Treiber für den Zugriff auf die Eingabe- und Ausgabepuffer der Anforderung (sofern vorhanden) verwenden kann, hängen vom TransferType-Feld der IOCTL ab. Der Wert des TransferType-Felds der IOCTL kann METHOD_BUFFERED, METHOD_DIRECT_IN, METHOD_DIRECT_OUT oder METHOD_NEITHER sein. Weitere Informationen zum Feld TransferType finden Sie unter Definieren von E/A-Steuerungscodes.

Die EvtIoDeviceControl-Rückruffunktion kann unter IRQL <= DISPATCH_LEVEL aufgerufen werden, es sei denn, der ExecutionLevel-Member der WDF_OBJECT_ATTRIBUTES Struktur des Geräts oder Treibers ist auf WdfExecutionLevelPassive festgelegt.

Wenn der IRQL PASSIVE_LEVEL ist, ruft das Framework die Rückruffunktion in einem kritischen Bereich auf.

Weitere Informationen zu IRQL-Ebenen für Anforderungshandler finden Sie unter Verwenden der automatischen Synchronisierung.

Die EvtIoDeviceControl-Rückruffunktion eines Treibers sollte die folgenden Warteschlangenobjektmethoden nicht aufrufen:

WdfIoQueueDrainSynchronously
WdfIoQueuePurgeSynchronly
WdfIoQueueStopSynchronously

Anforderungen

Anforderung Wert
Zielplattform Universell
KMDF-Mindestversion 1.0
UMDF-Mindestversion 2.0
Kopfzeile wdfio.h (einschließen von Wdf.h)
IRQL <= DISPATCH_LEVEL (siehe Abschnitt "Hinweise")

Weitere Informationen

EvtIoInternalDeviceControl

WDF_OBJECT_ATTRIBUTES

WdfIoQueueErstellen

WdfIoTargetFormatRequestForIoctl

WdfIoTargetSendIoctlSynchronously