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