Freigeben über


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
)
{...}

Die Parameter

[in] Queue

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

[in] Request

Ein Handle zu einem Framework-Anforderungsobjekt.

[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 vom System definierte I/O-Steuerungscode (IOCTL), der der Anforderung zugeordnet ist.

Rückgabewert

Nichts

Bemerkungen

Ein Treiber registriert eine EvtIoDeviceControl- Rückruffunktion, wenn sie WdfIoQueueCreateaufruft. Weitere Informationen zum Aufrufen WdfIoQueueCreatefinden 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-Steuerelementanforderung (IRP_MJ_DEVICE_CONTROL) aus der Warteschlange. Weitere Informationen finden Sie unter Anforderungshandler.

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

Treiber empfangen E/A-Steuerungsanforderungen, wenn eine Benutzeranwendung DeviceIoControl aufruft (in der Microsoft Windows SDK-Dokumentation beschrieben), oder wenn ein anderer Treiber eine Anforderung durch Aufrufen WdfIoTargetSendIoctlSynchronously oder WdfIoTargetFormatRequestForIoctlerstellt.

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 Using I/O Control Codes.

Für die meisten Geräte-E/A-Steuerungsvorgänge ist ein Eingabepuffer, ein Ausgabepuffer oder beides erforderlich. Informationen dazu, wie der Treiber auf die Puffer einer Anforderung zugreifen kann, finden Sie unter Zugreifen auf Datenpuffer in Framework-Based Drivers.

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 des IOCTL ab. Der Wert des TransferType Felds des 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 EvtIoDeviceControl- Rückruffunktion kann bei IRQL <= DISPATCH_LEVEL aufgerufen werden, es sei denn, das ExecutionLevel Mitglied der WDF_OBJECT_ATTRIBUTES Struktur des Geräts oder Treibers ist auf WdfExecutionLevelPassivefestgelegt.

Wenn die IRQL PASSIVE_LEVEL ist, ruft das Framework die Rückruffunktion innerhalb eines kritischen Bereichsauf.

Weitere Informationen zu IRQL-Ebenen für Anforderungshandler finden Sie unter Using Automatic Synchronization.

Die EvtIoDeviceControl Rückruffunktion eines Treibers sollte nicht die folgenden Methoden des Warteschlangenobjekts aufrufen:

WdfIoQueueDrainSynchronously
WdfIoQueuePurgeSynchronously
WdfIoQueueStopSynchronously

Anforderungen

Anforderung Wert
Zielplattform universell
Minimale KMDF-Version 1.0
Mindest-UMDF-Version 2.0
Kopfzeile wdfio.h (einschließen Wdf.h)
IRQL <= DISPATCH_LEVEL (siehe Abschnitt "Hinweise")

Siehe auch

EvtIoInternalDeviceControl

WDF_OBJECT_ATTRIBUTES

WdfIoQueueCreate

WdfIoTargetFormatRequestForIoctl

WdfIoTargetSendIoctlSynchronously