Funzione WdfIoTargetStop (wdfiotarget.h)

[Si applica a KMDF e UMDF]

Il metodo WdfIoTargetStop interrompe l'invio di richieste in coda a una destinazione di I/O locale o remota.

Sintassi

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

Parametri

[in] IoTarget

Handle per un oggetto di destinazione I/O locale o remoto ottenuto da una chiamata precedente a WdfDeviceGetIoTarget o WdfIoTargetCreate o da un metodo fornito da una destinazione di I/O specializzata.

[in] Action

Valore tipizzato WDF_IO_TARGET_SENT_IO_ACTION che specifica come il framework deve gestire le richieste di I/O inviate dal driver alla destinazione di I/O, se la destinazione non ha completato le richieste.

Valore restituito

nessuno

Osservazioni

Se il driver fornisce un handle di oggetto non valido, si verifica un controllo di bug.

Se il driver può rilevare errori ripristinabili del dispositivo, è possibile che il driver chiami WdfIoTargetStop per interrompere temporaneamente l'invio delle richieste, quindi chiamare in seguito WdfIoTargetStart per riprendere l'invio delle richieste.

Durante l'arresto, una destinazione di I/O continua ad accettare nuove richieste, ma non recapita le richieste in coda al driver appropriato.

Per altre informazioni sui possibili stati per le destinazioni di I/O, vedere Controlling a General I/O Target's State.For more information about possible states for I/O targets, see Controlling a General I/O Target's State.

Se un driver chiama WdfUsbTargetPipeConfigContinuousReader per configurare un lettore continuo per una pipe USB, la funzione di callback EvtDeviceD0Exit del driver deve chiamare WdfIoTargetStop per arrestare il lettore.

Se un driver ha chiamato WdfIoTargetStop, può comunque inviare una richiesta alla destinazione impostando il flag WDF_REQUEST_OPTION_IGNORE_TARGET_STATE nella struttura WDF_REQUEST_SEND_OPTIONS della richiesta. Se un driver imposta questo flag, il driver può inviare una richiesta, ad esempio una richiesta per reimpostare una pipe USB (vedere WdfUsbTargetPipeResetSynchronously), a un dispositivo dopo che il driver ha chiamato WdfIoTargetStop.

Quando un driver chiama WdfIoTargetStop, il framework non tenta di annullare o attendere le richieste di I/O inviate in precedenza alla destinazione usando il flag WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE o il flag WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET nella struttura WDF_REQUEST_SEND_OPTIONS della richiesta.

Il driver deve chiamare WdfIoTargetStart e WdfIoTargetStop in modo sincrono. Dopo che il driver chiama una di queste funzioni, non deve chiamare una delle due funzioni prima che venga restituita la prima chiamata.

Il driver può chiamare WdfIoTargetStop più volte da un singolo thread senza chiamare WdfIoTargetStart. Ad esempio, il driver potrebbe eseguire le operazioni seguenti:

  1. Chiamare WdfIoTargetStop e specificare il valore Action di WdfIoTargetLeaveSentIoPending.
  2. Determinare se la destinazione deve riprendere l'elaborazione delle richieste di I/O.
  3. Se la destinazione deve riprendere, chiamare WdfIoTargetStart. In caso contrario, chiamare di nuovo WdfIoTargetStop con un valore Action di WdfIoTargetCancelSentIo.
NotaWdfIoTargetStop non è thread-safe. Non è sicuro chiamare WdfIoTargetStop contemporaneamente da thread diversi.
 
Per altre informazioni sulle destinazioni di I/O, vedere Uso delle destinazioni di I/O.

Se il driver ha chiamato WdfUsbTargetPipeConfigContinuousReader per la pipe, WdfIoTargetStop deve essere chiamato in IRQL = PASSIVE_LEVEL.

Se il driver non ha chiamato WdfUsbTargetPipeConfigContinuousReader e se il parametro Action di WdfIoTargetStop è WdfIoTargetLeaveSentIoPending, WdfIoTargetStop può essere chiamato in IRQL <= DISPATCH_LEVEL. In caso contrario, WdfIoTargetStop viene chiamato in IRQL = PASSIVE_LEVEL.

Esempio

L'esempio di codice seguente mostra come una funzione di callback EvtDeviceD0Exit può chiamare WdfIoTargetStop, se il driver usa un lettore continuo per una pipe USB.

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;
}

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Versione KMDF minima 1.0
Versione UMDF minima 2,0
Intestazione wdfiotarget.h (include Wdf.h)
Libreria Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL Vedere la sezione Osservazioni.
Regole di conformità DDI DriverCreate(kmdf), FailD0EntryIoTargetState(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Vedi anche

EvtDeviceD0Exit

WDF_REQUEST_SEND_OPTIONS

WdfDeviceGetIoTarget

WdfIoTargetCreate

WdfIoTargetStart

WdfUsbTargetPipeConfigContinuousReader

WdfUsbTargetPipeResetSynchronously