Freigeben über


WdfIoTargetStop-Funktion (wdfiotarget.h)

[Gilt für KMDF und UMDF]

Die WdfIoTargetStop--Methode beendet das Senden von Warteschlangenanforderungen an ein lokales oder Remote-E/A-Ziel.

Syntax

VOID WdfIoTargetStop(
  [in] WDFIOTARGET                  IoTarget,
  [in] WDF_IO_TARGET_SENT_IO_ACTION Action
);

Die Parameter

[in] IoTarget

Ein Handle für ein lokales oder Remote-E/A-Zielobjekt, das von einem vorherigen Aufruf an WdfDeviceGetIoTarget oder WdfIoTargetCreateabgerufen wurde, oder von einer Methode, die ein spezialisiertes E/A-Ziel bereitstellt.

[in] Action

Ein WDF_IO_TARGET_SENT_IO_ACTION-typed-Wert, der angibt, wie das Framework E/A-Anforderungen verarbeiten soll, die der Treiber an das E/A-Ziel gesendet hat, wenn das Ziel die Anforderungen nicht abgeschlossen hat.

Rückgabewert

Nichts

Bemerkungen

Wenn der Treiber ein ungültiges Objekthandle bereitstellt, tritt eine Fehlerüberprüfung auf.

Wenn Ihr Treiber wiederherstellbare Gerätefehler erkennen kann, möchten Sie möglicherweise, dass Ihr Treiber WdfIoTargetStop- aufruft, um das Senden von Anforderungen vorübergehend zu beenden, und rufen Sie später WdfIoTargetStart auf, um das Senden von Anforderungen fortzusetzen.

Während sie beendet wurde, akzeptiert ein E/A-Ziel weiterhin neue Anforderungen, liefert aber nicht die in die Warteschlange eingereihten Anforderungen an den entsprechenden Treiber.

Weitere Informationen zu möglichen Zuständen für E/A-Ziele finden Sie unter Controlling a General I/O Target's State.

Wenn ein Treiber WdfUsbTargetPipeConfigContinuousReader aufruft, um einen kontinuierlichen Reader für ein USB-Pipe zu konfigurieren, muss die EvtDeviceD0Exit- Rückruffunktion WdfIoTargetStop- aufrufen, um den Reader zu beenden.

Wenn ein Treiber WdfIoTargetStop-aufgerufen hat, kann er dennoch eine Anforderung an das Ziel senden, indem das WDF_REQUEST_OPTION_IGNORE_TARGET_STATE Flag in der WDF_REQUEST_SEND_OPTIONS Struktur der Anforderung festgelegt wird. Wenn ein Treiber dieses Flag festlegt, kann der Treiber eine Anforderung senden, z. B. eine Anforderung zum Zurücksetzen einer USB-Pipe (siehe WdfUsbTargetPipeResetSynchronously), an ein Gerät, nachdem der Treiber WdfIoTargetStopaufgerufen hat.

Wenn ein Treiber WdfIoTargetStop-aufruft, versucht das Framework nicht, E/A-Anforderungen abzubrechen oder zu warten, die zuvor mithilfe des WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE Flags oder des WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET Flags in der WDF_REQUEST_SEND_OPTIONS Struktur der Anforderung an das Ziel gesendet wurden.

Ihr Treiber muss WdfIoTargetStart- und WdfIoTargetStop- synchron aufrufen. Nachdem der Treiber eine dieser Funktionen aufgerufen hat, darf er keine der beiden Funktionen aufrufen, bevor der erste Aufruf zurückgegeben wird.

Ihr Treiber kann WdfIoTargetStop- mehrmals aus einem einzelnen Thread aufrufen, ohne WdfIoTargetStart-aufzurufen. Ihr Treiber kann z. B. folgende Aktionen ausführen:

  1. Rufen Sie WdfIoTargetStop- auf, und geben Sie einen Action Wert von WdfIoTargetLeaveSentIoPendingan.
  2. Bestimmen Sie, ob das Ziel die Verarbeitung von E/A-Anforderungen fortsetzen soll.
  3. Wenn das Ziel fortgesetzt werden soll, rufen Sie WdfIoTargetStartauf. Rufen Sie andernfalls WdfIoTargetStop erneut mit einem Action- Wert von WdfIoTargetCancelSentIoauf.
HinweisWdfIoTargetStop- nicht threadsicher ist. Es ist nicht sicher, WdfIoTargetStop- gleichzeitig aus verschiedenen Threads aufzurufen.
 
Weitere Informationen zu E/A-Zielen finden Sie unter Using I/O Targets.

Wenn der Treiber WdfUsbTargetPipeConfigContinuousReader- für die Pipe aufgerufen hat, muss WdfIoTargetStop- bei IRQL = PASSIVE_LEVEL aufgerufen werden.

Wenn der Treiber nicht WdfUsbTargetPipeConfigContinuousReader aufgerufen hat und der Action Parameter von WdfIoTargetStopWdfIoTargetLeaveSentIoPendingist, kann WdfIoTargetStop- bei IRQL <= DISPATCH_LEVEL aufgerufen werden. Andernfalls wird WdfIoTargetStop- bei IRQL = PASSIVE_LEVEL aufgerufen.

Beispiele

Das folgende Codebeispiel zeigt, wie eine EvtDeviceD0Exit- Rückruffunktion WdfIoTargetStop-aufrufen kann, wenn der Treiber einen fortlaufenden Reader für eine USB-Pipe verwendet.

NTSTATUS
MyEvtDeviceD0Exit(
    IN  WDFDEVICE Device,
    IN  WDF_POWER_DEVICE_STATE TargetState
)
{
    PDEVICE_CONTEXT  pDeviceContext;
    pDeviceContext = GetMyDeviceContext(Device);

    WdfIoTargetStop(
                    WdfUsbTargetPipeGetIoTarget(pDeviceContext->InterruptPipe),
                    WdfIoTargetCancelSentIo
                    );

    return STATUS_SUCCESS;
}

Anforderungen

Anforderung Wert
Zielplattform universell
Minimale KMDF-Version 1.0
Mindest-UMDF-Version 2.0
Kopfzeile wdfiotarget.h (include Wdf.h)
Bibliothek Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL Siehe Abschnitt "Hinweise".
DDI-Complianceregeln DriverCreate(kmdf), FailD0EntryIoTargetState(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Siehe auch

EvtDeviceD0Exit

WDF_REQUEST_SEND_OPTIONS

WdfDeviceGetIoTarget-

WdfIoTargetCreate

WdfIoTargetStart-

WdfUsbTargetPipeConfigContinuousReader

WdfUsbTargetPipeResetSynchronously