IWDFIoRequest2::StopAcknowledge-Methode (wudfddi.h)
[Warnung: UMDF 2 ist die neueste Version von UMDF und ersetzt UMDF 1. Alle neuen UMDF-Treiber sollten mit UMDF 2 geschrieben werden. UMDF 1 werden keine neuen Features hinzugefügt, und die Unterstützung für UMDF 1 in neueren Versionen von Windows 10 ist eingeschränkt. Universelle Windows-Treiber müssen UMDF 2 verwenden. Weitere Informationen finden Sie unter Erste Schritte mit UMDF.]
Die StopAcknowledge-Methode informiert das Framework darüber, dass der Treiber die Verarbeitung einer angegebenen E/A-Anforderung beendet hat.
Syntax
void StopAcknowledge(
[in] BOOL Requeue
);
Parameter
[in] Requeue
Ein boolescher Wert, der bei TRUE bewirkt, dass das Framework die Anforderung erneut in die Warteschlange eingibt, damit das Framework sie erneut an den Treiber übermittelt. False gibt an, dass das Framework die Anforderung nicht erneut in die Warteschlange stellt. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".
Rückgabewert
Keine
Bemerkungen
Wenn ein Treiber eine IQueueCallbackIoStop::OnIoStop-Rückruffunktion für eine E/A-Warteschlange registriert, ruft das Framework diese auf, wenn das zugrunde liegende Gerät der Warteschlange den Arbeitsstatus (D0) verlässt. Das Framework ruft diese Rückruffunktion für jede E/A-Anforderung auf, die der Treiber zum Zeitpunkt des Beendens der Warteschlange besitzt. Der Treiber muss die Verarbeitung jeder Anforderung abschließen, abbrechen oder verschieben, indem er eine der folgenden Aktionen ausführt:
- Wenn der Treiber besitzer der Anforderung ist, kann er IWDFIoRequest::Complete aufrufen, um die Anforderung abzuschließen oder abzubrechen.
- Wenn der Treiber die Anforderung an ein E/A-Ziel weitergeleitet hat, kann er IWDFIoRequest::CancelSentRequest aufrufen, um zu versuchen, die Anforderung abzubrechen.
- Wenn der Treiber die Verarbeitung der Anforderung verzögert, muss er StopAcknowledge aufrufen.
Wenn der Treiber nicht IWDFIoRequest::Complete oder StopAcknowledge für jede Anforderung aufruft, die eine IQueueCallbackIoStop::OnIoStop-Rückruffunktion empfängt, lässt das Framework dem Gerät nicht zu, den Arbeitszustand (D0) zu verlassen. Möglicherweise kann diese Untätigkeit verhindern, dass ein System in seinen Ruhezustand oder einen anderen niedrigen Systemleistungszustand wechselt.
Wenn die IQueueCallbackIoStop::OnIoStop-Rückruffunktion eines Treibers StopAcknowledge aufruft, kann der Requeue-Parameter auf TRUE oder FALSE festgelegt werden:
-
Wenn Sie Requeue auf TRUE festlegen, wird die Anforderung vom Framework wieder in die E/A-Warteschlange eingefügt.
Wenn das zugrunde liegende Gerät in seinen Arbeitszustand (D0) zurückkehrt, sendet das Framework die Anforderung erneut an den Treiber.
-
Das Festlegen von Requeue auf FALSE bewirkt, dass der Besitz der Anforderung beim Treiber verbleibt. Der Treiber muss alle E/A-Verarbeitungen beenden, die Hardwarezugriff erfordern.
Wenn das zugrunde liegende Gerät in seinen Arbeitszustand (D0) zurückkehrt, ruft das Framework die Rückruffunktion IQueueCallbackIoResume::OnIoResume des Treibers auf, damit der Treiber die Verarbeitung der Anforderung fortsetzen kann.
Vor dem Aufruf von StopAcknowledge muss die IQueueCallbackIoStop::OnIoStop-Rückruffunktion des Treibers die gesamte Verarbeitung der E/A-Anforderung beenden, die den Zugriff auf das zugrunde liegende Gerät erfordert, da das Gerät in einen Energiesparzustand versetzt wird.
Beispiele
Im folgenden Codebeispiel handelt es sich um eine IQueueCallbackIoStop::OnIoStop-Rückruffunktion , die überprüft, ob eine empfangene Anforderung abgebrochen werden kann, und, falls ja, IWDFIoRequest::UnmarkCancelable aufruft. Wenn IWDFIoRequest::UnmarkCancelable HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED) zurückgibt, wird im Beispiel nur zurückgegeben, weil die IRequestCallbackCancel::OnCancel-Rückruffunktion des Treibers die Anforderung verarbeitet. Andernfalls ruft das Beispiel StopAcknowledge auf und gibt FALSE an, damit das Framework schließlich die Rückruffunktion IQueueCallbackIoResume::OnIoResume des Treibers aufruft.
void
CMyReadWriteQueue::OnIoStop(
__in IWDFIoQueue* pWdfQueue,
__in IWDFIoRequest* pWdfRequest,
__in ULONG ActionFlags
)
{ HRESULT status;
if (ActionFlags & WdfRequestStopRequestCancelable) {
status = pWdfRequest->UnmarkCancelable();
if (status == HRESULT_FROM_WIN32(ERROR_OPERATION_ABORTED)) {
return;
}
}
//
// Declare an IWDFIoRequest2 interface pointer and obtain the
// IWDFIoRequest2 interface from the IWDFIoRequest interface.
//
CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;
r2->StopAcknowledge(FALSE);
}
Anforderungen
Anforderung | Wert |
---|---|
Ende des Supports | In UMDF 2.0 und höher nicht verfügbar. |
Zielplattform | Desktop |
UMDF-Mindestversion | 1.9 |
Kopfzeile | wudfddi.h (include Wudfddi.h) |
DLL | WUDFx.dll |
Weitere Informationen
IQueueCallbackIoResume::OnIoResume