Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
[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:
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") |