Freigeben über


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

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

Die treiberdefinierte oder vom System definierte IOCTL, die der Anforderung zugeordnet ist.

Rückgabewert

Nichts

Bemerkungen

Ein Treiber registriert eine EvtIoInternalDeviceControl- Rückruffunktion, wenn die WdfIoQueueCreate-Methode aufgerufen wird. Weitere Informationen zum Aufrufen WdfIoQueueCreatefinden 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-Steuerelementanforderung (IRP_MJ_INTERNAL_DEVICE_CONTROL) aus der Warteschlange. Weitere Informationen finden Sie unter Anforderungshandler.

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

Treiber empfangen interne E/A-Steuerelementanforderungen, wenn ein anderer Treiber eine Anforderung erstellt, indem entweder WdfIoTargetSendInternalIoctlSynchronously oder WdfIoTargetFormatRequestForInternalIoctlaufgerufen wird.

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.

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 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 EvtIoInternalDeviceControl- 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 wird auf WdfExecutionLevelPassivefestgelegt. (Wenn sich ihr Treiber oben im Treiberstapel befindet, wird die Rückruffunktion bei IRQL = PASSIVE_LEVEL aufgerufen.)

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 EvtIoInternalDeviceControl 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

EvtIoDeviceControl

WDF_OBJECT_ATTRIBUTES

WdfIoQueueCreate

WdfIoTargetFormatRequestForInternalIoctl

WdfIoTargetSendInternalIoctlSynchronously