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:
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") |