EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL Rückruffunktion (wdfio.h)

[Gilt für KMDF und UMDF]

Die EvtIoInternalDeviceControl-Ereignisrückruffunktion eines Treibers verarbeitet eine E/A-Anforderung, die einen internen Geräte-E/A-Steuerungscode (IOCTL) enthält.

Syntax

EVT_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL EvtWdfIoQueueIoInternalDeviceControl;

void EvtWdfIoQueueIoInternalDeviceControl(
  [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 Frameworkwarteschlangenobjekt, 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

Die vom Treiber definierte oder systemdefinierte IOCTL, die der Anforderung zugeordnet ist.

Rückgabewert

Keine

Bemerkungen

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

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

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

Treiber erhalten interne E/A-Steuerungsanforderungen, wenn ein anderer Treiber eine Anforderung erstellt, indem er entweder WdfIoTargetSendInternalIoctlSynchronously oder WdfIoTargetFormatRequestForInternalIoctl aufruft.

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

Die meisten internen 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.

Welche Techniken Ihr Treiber für den Zugriff auf die Eingabe- und Ausgabepuffer der Anforderung (sofern vorhanden) verwenden kann, hängt vom Feld TransferType der IOCTL ab. Der Wert des Felds TransferType 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-Steuerelementcodes.

Die Rückruffunktion EvtIoInternalDeviceControl kann unter IRQL <= DISPATCH_LEVEL aufgerufen werden, es sei denn, das ExecutionLevel-Element der WDF_OBJECT_ATTRIBUTES Struktur des Geräts oder Treibers ist auf WdfExecutionLevelPassive festgelegt. (Wenn sich Ihr Treiber ganz oben im Treiberstapel befindet, wird die Rückruffunktion unter IRQL = PASSIVE_LEVEL aufgerufen.)

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 EvtIoInternalDeviceControl-Rückruffunktion eines Treibers sollte die folgenden Warteschlangenobjektmethoden nicht aufrufen:

WdfIoQueueDrainSynchronly
WdfIoQueuePurgeSynchronly
WdfIoQueueStopSynchronous

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

EvtIoDeviceControl

WDF_OBJECT_ATTRIBUTES

WdfIoQueueCreate

WdfIoTargetFormatRequestForInternalIoctl

WdfIoTargetSendInternalIoctlSynchronly