Condividi tramite


Metodo IWDFIoRequest2::RetrieveOutputMemory (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. Non vengono aggiunte nuove funzionalità 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, vedi Introduzione a UMDF.]

Il metodo RetrieveOutputMemory recupera l'interfaccia IWDFMemory di un oggetto memoria framework che rappresenta il buffer di output di una richiesta di I/O.

Sintassi

HRESULT RetrieveOutputMemory(
  [out] IWDFMemory **Memory
);

Parametri

[out] Memory

Indirizzo di una posizione che riceve un puntatore al IWDFMemory'interfaccia di un oggetto memoria UMDF.

Valore restituito

retrieveOutputMemory restituisce S_OK se l'operazione ha esito positivo. In caso contrario, questo metodo può restituire il valore seguente:

Codice restituito Descrizione
HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER)
La richiesta di I/O non ha fornito un buffer di input.
E_OUTOFMEMORY
Memoria insufficiente per recuperare il buffer. Il driver deve completare la richiesta con un valore di stato di errore.
 

Questo metodo potrebbe restituire uno degli altri valori contenuti in Winerror.h.

Osservazioni

Il buffer di output di una richiesta riceve informazioni, ad esempio dati da un disco, che il driver fornisce all'originatore della richiesta. Il driver può chiamare RetrieveOutputMemory per ottenere il buffer di output per una richiesta di lettura o una richiesta di controllo I/O del dispositivo, ma non per una richiesta di scrittura (perché le richieste di scrittura non forniscono dati di output).

Il metodo RetrieveOutputMemory recupera il buffer di output per le richieste di I/O che usano il di I/O memorizzato nel buffer o metodo di I/ O diretto per l'accesso ai buffer di dati.

Se RetrieveOutputMemory restituisce S_OK, il driver riceve un puntatore all'interfaccia IWDFMemory di un oggetto memoria UMDF che rappresenta il buffer di output. Per accedere al buffer, il driver deve chiamare IWDFMemory::GetDataBuffer.

Il driver può accedere all'oggetto memoria del framework recuperato fino a quando non completa richiesta di I/O. Prima che il driver completi la richiesta di I/O, deve chiamare IWDFMemory::Release.

Anziché chiamare RetrieveOutputMemory, il driver può chiamare IWDFIoRequest2::RetrieveOutputBuffer, che recupera l'indirizzo e la lunghezza del buffer.

Per altre informazioni sull'accesso ai buffer di dati di una richiesta di I/O, vedere Accesso ai buffer di dati in driver UMDF-Based.

Esempi

Nell'esempio di codice seguente viene illustrato come una funzione di callback IQueueCallbackRead::OnRead può ottenere l'interfaccia IWDFMemory dell'oggetto memoria framework che rappresenta il buffer di output di una richiesta di lettura. L'esempio formatta e invia la richiesta di lettura a una destinazione di I/O USB.

VOID
STDMETHODCALLTYPE
  CMyQueue::OnRead(
     __in IWDFIoQueue *pWdfQueue,
     __in IWDFIoRequest *pWdfRequest,
     __in SIZE_T BytesToRead
     )
{
    HRESULT hr = S_OK;
    IWDFMemory * pOutputMemory = NULL;

    //
    // Declare an IWDFIoRequest2 interface pointer and obtain the
    // IWDFIoRequest2 interface from the IWDFIoRequest interface.
    //
    CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;

    r2->RetrieveOutputMemory(&pOutputMemory);
    if (FAILED(hr)) goto Exit;

    hr = m_Device->GetInputPipe()->FormatRequestForRead(pWdfRequest,
                                                        NULL,
                                                        pOutputMemory,
                                                        NULL,
                                                        NULL);
Exit:
    if (FAILED(hr))
    {
        pWdfRequest->Complete(hr);
    }
    else
    {
        ForwardFormattedRequest(pWdfRequest, m_Device->GetInputPipe());
    }
    SAFE_RELEASE(pOutputMemory);
    return;
}

Fabbisogno

Requisito Valore
Fine del supporto Non disponibile in UMDF 2.0 e versioni successive.
piattaforma di destinazione Desktop
versione minima di UMDF 1.9
intestazione wudfddi.h (include Wudfddi.h)
dll WUDFx.dll

Vedere anche

IWDFIoRequest2

IWDFIoRequest2::RetrieveInputBuffer

IWDFIoRequest2::RetrieveInputMemory

IWDFIoRequest2::RetrieveOutputBuffer

IWDFIoRequest::GetInputMemory

IWDFIoRequest::GetOutputMemory