Metodo IWDFIoRequest::Send (wudfddi.h)

[Avviso: UMDF 2 è la versione più recente di UMDF e sostituisce UMDF 1. Tutti i nuovi driver UMDF devono essere scritti usando UMDF 2. Nessuna nuova funzionalità viene aggiunta a UMDF 1 ed è disponibile un supporto limitato per UMDF 1 nelle versioni più recenti di Windows 10. I driver di Windows universali devono usare UMDF 2. Per altre informazioni, vedere Introduzione con UMDF.]

Il metodo Send invia una richiesta alla destinazione di I/O specificata.

Sintassi

HRESULT Send(
  [in] IWDFIoTarget *pIoTarget,
  [in] ULONG        Flags,
  [in] LONGLONG     Timeout
);

Parametri

[in] pIoTarget

Puntatore all'interfaccia IWDFIoTarget per l'oggetto di destinazione I/O, che in genere rappresenta un driver inferiore nello stack.

[in] Flags

Or bit per bit valido di flag tipizzato di WDF_REQUEST_SEND_OPTIONS_FLAGS.

[in] Timeout

Quantità di tempo, nelle unità temporali di sistema (intervalli a 100 nanosecondi), che possono trascorrere prima che il framework annulla automaticamente la richiesta di I/O.

  • Se il valore è negativo, l'ora di scadenza è relativa all'ora di sistema corrente.
  • Se il valore è positivo, l'ora di scadenza viene specificata come ora assoluta (che è relativa al 1° gennaio 1601).
  • Se il valore è zero, il framework non timeout la richiesta.
I tempi di scadenza relativi non sono interessati dalle modifiche apportate al tempo di sistema che potrebbero verificarsi entro il periodo di timeout specificato. I tempi di scadenza assoluti riflettono le modifiche del tempo di sistema.

Valore restituito

Invia restituisce S_OK se l'operazione ha esito positivo. In caso contrario, questo metodo restituisce uno dei codici di errore definiti in Winerror.h.

Si noti che il valore restituito rappresenta lo stato del tentativo del metodo Send di inviare la richiesta di I/O alla destinazione di I/O. Il valore restituito non rappresenta lo stato di completamento della richiesta di I/O. Il driver deve usare l'interfaccia IWDFRequestCompletionParams per ottenere lo stato di completamento della richiesta di I/O.

Commenti

Se Invia restituisce un codice di errore, il driver deve in genere completare la richiesta con il codice di errore restituito , come illustrato nel codice nella sezione Esempio seguente.

Se il driver imposta il flag di WDF_REQUEST_SEND_OPTION_SYNCHRONOUS nel parametro Flags e se Invia invia correttamente la richiesta di I/O alla destinazione I/O, Invia restituisce dopo il completamento della richiesta di I/O. In questo caso , Send restituisce S_OK e il driver può chiamare immediatamente IWDFIoRequest::GetCompletionParams per ottenere l'interfaccia IWDFRequestCompletionParams . L'esempio di codice in IWDFIoRequest::GetCompletionParams mostra una chiamata a Send with the WDF_REQUEST_SEND_OPTION_SYNCHRONOUS flag set.

Se il driver non imposta il flag di WDF_REQUEST_SEND_OPTION_SYNCHRONOUS e se Invia invia correttamente la richiesta di I/O alla destinazione I/O, Invia restituisce S_OK mentre la destinazione di I/O sta ancora elaborando la richiesta di I/O in modo asincrono. In questo caso, il driver fornisce una funzione di callback IRequestCallbackRequestCompletion::OnCompletion chiama il framework dopo il completamento della richiesta di I/O. In genere, la funzione di callback OnCompletion chiama IWDFIoRequest::GetCompletionParams. L'esempio di codice nella sezione Esempio seguente mostra una chiamata a Invia senza il flag di WDF_REQUEST_SEND_OPTION_SYNCHRONOUS.

Un driver non può chiamare Send per inviare una richiesta di I/O a una pipe USB, se il driver ha configurato un lettore continuo per la pipe.

Esempio

Nell'esempio di codice seguente viene inoltrata una richiesta alla destinazione I/O di un dispositivo.

    IWDFIoRequest* FxRequest;

    //
    // Set the completion callback.
    // When the lower request is completed, the driver is 
    // notified through the completion callback. 
    //

    IRequestCallbackRequestCompletion *completionCallback = 
        QueryIRequestCallbackRequestCompletion();
 
    FxRequest->SetCompletionCallback(
                                     completionCallback,
                                     NULL  //pContext
                                     );

    completionCallback->Release();
 
    //
    // Format the I/O request.  
 
    FxRequest->FormatUsingCurrentType( );

    //
    // Send down the request.
    //
    HRESULT hrSend = S_OK;
 
    hrSend = FxRequest->Send(
                             m_FxIoTarget,
                             0, // Asynchronous
                             0  // No time-out
                             );
 
    if (S_OK != hrSend) {
        //
        // If the send failed, the driver must complete the 
        // request with the failure.
        FxRequest->CompleteWithInformation(hrSend, 0);
    }

Requisiti

Requisito Valore
Fine del supporto Non disponibile in UMDF 2.0 e versioni successive.
Piattaforma di destinazione Desktop
Versione UMDF minima 1.5
Intestazione wudfddi.h (include Wudfddi.h)
DLL WUDFx.dll

Vedi anche

IRequestCallbackRequestCompletion::OnCompletion

IWDFIoRequest

IWDFIoRequest::GetCompletionParams

IWDFIoTarget

WDF_REQUEST_SEND_OPTIONS_FLAGS (UMDF)