WdfIoQueueReadyNotify-Funktion (wdfio.h)

[Gilt für KMDF und UMDF]

Die WdfIoQueueReadyNotify-Methode registriert (oder deregistert) eine Ereignisrückruffunktion, die das Framework jedes Mal aufruft, wenn eine angegebene I/O-Warteschlange, die zuvor leer war, eine oder mehrere E/A-Anforderungen empfängt.

Syntax

NTSTATUS WdfIoQueueReadyNotify(
  [in]           WDFQUEUE               Queue,
  [in, optional] PFN_WDF_IO_QUEUE_STATE QueueReady,
  [in, optional] WDFCONTEXT             Context
);

Parameter

[in] Queue

Ein Handle zu einem Framework-Warteschlangenobjekt.

[in, optional] QueueReady

Ein Zeiger auf eine vom Treiber bereitgestellte EvtIoQueueState-Rückruffunktion , wenn sich der Treiber für die bereite Benachrichtigung registriert, oder NULL , wenn der Treiber die Registrierung deaktiviert.

[in, optional] Context

Ein nicht typisiertes Zeiger auf vom Treiber bereitgestellte Kontextinformationen, die das Framework an die Rückruffunktion EvtIoQueueState übergibt, wenn sich der Treiber für die bereite Benachrichtigung registriert, oder NULL , wenn der Treiber die Registrierung deaktiviert.

Rückgabewert

WdfIoQueueReadyNotify gibt STATUS_SUCCESS zurück, wenn der Vorgang erfolgreich ist. Andernfalls gibt diese Methode möglicherweise einen der folgenden Werte zurück:

Rückgabecode Beschreibung
STATUS_INVALID_PARAMETER
Der Treiber hat einen ungültigen Handle bereitgestellt.
STATUS_INVALID_DEVICE_REQUEST
Dieser Wert wird zurückgegeben, wenn eine der folgenden Aktionen auftritt:

Diese Methode kann auch andere NTSTATUS-Werte zurückgeben.

Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.

Bemerkungen

Nachdem ein Treiber WdfIoQueueReadyNotify aufgerufen hat, um eine EvtIoQueueState-Rückruffunktion zu registrieren, ruft das Framework die Rückruffunktion jedes Mal auf, wenn sich der Status der angegebenen Warteschlange von leer in nicht leer ändert. Insbesondere ruft das Framework EvtIoQueueState auf, wenn eine Anforderung in einer leeren Warteschlange eingeht, auch wenn der Treiber noch zuvor bereitgestellte Anforderungen aus der Warteschlange besitzt, die er noch nicht abgeschlossen hat. Sie können die IRQL ändern, bei der der Rückruf ausgeführt wird, indem Sie "ExecutionLevel " in WDF_OBJECT_ATTRIBUTES zum Erstellungszeitpunkt der Warteschlange angeben. Weitere Informationen finden Sie im Abschnitt "Hinweise " von EVT_WDF_IO_QUEUE_STATE.

Das Framework ruft nicht EvtIoQueueState auf, während die angegebene Warteschlange beendet wird. Wenn die Warteschlange gestartet wird, ruft das Framework EvtIoQueueState auf, wenn die Warteschlange nicht leer ist.

Ihr Treiber kann WdfIoQueueReadyNotify nur für I/O-Warteschlangen aufrufen, die die manuelle Versandmethode verwenden.

Die Rückruffunktion EvtIoQueueState ruft in der Regel WdfIoQueueRetrieveNextRequest oder WdfIoQueueRetrieveRequestByFileObject in einer Schleife auf, um alle Anforderungen abzurufen, die seit der letzten Ausführung der Rückruffunktion eingetroffen sind.

Um das Framework daran zu hindern, die Rückruffunktion EvtIoQueueState aufzurufen, muss der Treiber WdfIoQueueReadyNotify erneut aufrufen, wobei der Parameter QueueReady auf NULL festgelegt ist. Der Treiber muss jedoch zuerst WdfIoQueueStop oder WdfIoQueueStopSynchronously aufrufen, um die E/A-Warteschlange zu beenden. Der Treiber kann anschließend WdfIoQueueStart aufrufen, um die Warteschlange neu zu starten.

Wenn ein Treiber WdfIoQueueReadyNotify aufruft, um eine EvtIoQueueState-Rückruffunktion zu registrieren, ist es möglich, dass das Framework die Rückruffunktion aufruft, bevor WdfIoQueueReadyNotify zurückgegeben wird.

Weitere Informationen zur WdfIoQueueReadyNotify-Methode finden Sie unter Dispatching Methods for I/O Requests.

Beispiele

Im folgenden Codebeispiel wird die EvtIoQueueReady-Funktion eines Treibers registriert, sodass diese Funktion aufgerufen wird, wenn die angegebene I/O-Warteschlange eine E/A-Anforderung empfängt.

Status = WdfIoQueueReadyNotify(
                               ReadQueue,
                               EvtIoQueueReady,
                               myQueueContext
                               );

Anforderungen

   
Zielplattform Universell
KMDF-Mindestversion 1.0
UMDF-Mindestversion 2.0
Kopfzeile wdfio.h (include Wdf.h)
Bibliothek Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <= DISPATCH_LEVEL
DDI-Complianceregeln DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Siehe auch

EvtIoQueueState

WDF_IO_QUEUE_CONFIG

WdfIoQueueRetrieveNextRequest

WdfIoQueueRetrieveRequestByFileObject