Condividi tramite


Metodo IWDFIoRequest2::RetrieveInputBuffer (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 RequestRetrieveInputBuffer recupera il buffer di input di una richiesta di I/O.

Sintassi

HRESULT RetrieveInputBuffer(
  [in]            SIZE_T MinimumRequiredCb,
  [out]           PVOID  *Buffer,
  [out, optional] SIZE_T *BufferCb
);

Parametri

[in] MinimumRequiredCb

Dimensioni minime del buffer, in byte, che il driver deve elaborare la richiesta di I/O. Questo valore può essere zero se non esiste alcuna dimensione minima del buffer.

[out] Buffer

Puntatore a una posizione che riceve l'indirizzo del buffer.

[out, optional] BufferCb

Puntatore a una posizione che riceve le dimensioni del buffer, in byte. Questo parametro è facoltativo e può essere NULL.

Valore restituito

RequestRetrieveInputBuffer 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 o le dimensioni del buffer di input sono inferiori alle dimensioni minime specificate da MinimumRequiredCb .
E_OUTOFMEMORY
Memoria insufficiente disponibile 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 che Winerror.h contiene.

Commenti

Il buffer di input di una richiesta contiene informazioni, ad esempio i dati da scrivere in un disco, che l'origine della richiesta specificata. Il driver può chiamare RequestRetrieveInputBuffer per ottenere il buffer di input per una richiesta di scrittura o una richiesta di controllo I/O del dispositivo, ma non per una richiesta di lettura (perché le richieste di lettura non forniscono dati di input).

Il metodo RequestRetrieveInputBuffer recupera il buffer di input per le richieste di I/O che usano il metodo I/O con buffer o I/Odiretto per l'accesso ai buffer dei dati.

Se RequestRetrieveInputBuffer restituisce S_OK, il driver riceve l'indirizzo e, facoltativamente, le dimensioni del buffer di input.

Il driver può accedere al buffer recuperato finché non completa la richiesta di I/O.

Anziché chiamare RequestRetrieveInputBuffer, il driver può chiamare IWDFIoRequest2::RetrieveInputMemory, che crea un oggetto di memoria del framework che rappresenta il buffer.

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

Esempio

Nell'esempio di codice seguente viene illustrato un segmento della funzione di callback IQueueCallbackDeviceIoControl::OnDeviceIoControl . Dal buffer di input di una richiesta di I/O, il segmento di codice ottiene la velocità baud che deve essere impostata per il dispositivo.

VOID
STDMETHODCALLTYPE
  CMyQueue::OnDeviceIoControl(
    __in IWDFIoQueue*  FxQueue,
    __in IWDFIoRequest*  FxRequest,
    __in ULONG  ControlCode,
    __in SIZE_T  InputBufferCb,
    __in SIZE_T  OutputBufferCb
    )
{
    PBYTE buffer;
    SIZE_T bufferSize;
    HRESULT hr;
    //
    // Declare an IWDFIoRequest2 interface pointer and obtain the
    // IWDFIoRequest2 interface from the IWDFIoRequest interface.
    //
    CComQIPtr<IWDFIoRequest2> r2 = FxRequest;

    switch (ControlCode)
    {
        case IOCTL_SERIAL_SET_BAUD_RATE: 
        {
            //
            // Obtain the baud rate from the write request's input buffer.
            //
            hr = r2->RetrieveInputBuffer(sizeof(SERIAL_BAUD_RATE),
                                         (PVOID*) &buffer, 
                                         &bufferSize);
...
        }
    }
}

Requisiti

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

Vedi anche

IWDFIoRequest2

IWDFIoRequest2::RetrieveInputMemory

IWDFIoRequest2::RetrieveOutputBuffer

IWDFIoRequest2::RetrieveOutputMemory

IWDFIoRequest::GetInputMemory

IWDFIoRequest::GetOutputMemory