Compartilhar via


Método IWDFIoRequest2::RetrieveInputMemory (wudfddi.h)

[Aviso: UMDF 2 é a versão mais recente do UMDF e substitui UMDF 1. Todos os novos drivers UMDF devem ser gravados usando UMDF 2. Nenhum novo recurso está sendo adicionado ao UMDF 1 e há suporte limitado para UMDF 1 em versões mais recentes do Windows 10. Os drivers universais do Windows devem usar o UMDF 2. Para obter mais informações, consulte Introdução com UMDF.]

O método RetrieveInputMemory recupera a interface IWDFMemory de um objeto de memória de estrutura que representa o buffer de entrada de uma solicitação de E/S.

Sintaxe

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

Parâmetros

[out] Memory

O endereço de um local que recebe um ponteiro para a interface IWDFMemory de um objeto de memória UMDF.

Retornar valor

RetrieveInputMemory retornará S_OK se a operação for bem-sucedida. Caso contrário, esse método pode retornar o seguinte valor:

Código de retorno Descrição
HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)
A solicitação de E/S não forneceu um buffer de saída.
E_OUTOFMEMORY
Não há memória suficiente disponível para recuperar o buffer. O driver deve concluir a solicitação com um erro status valor.
 

Esse método pode retornar um dos outros valores que Winerror.h contém.

Comentários

O buffer de entrada de uma solicitação contém informações, como dados a serem gravados em um disco, que o originador da solicitação forneceu. Seu driver pode chamar RetrieveInputMemory para obter o buffer de entrada para uma solicitação de gravação ou uma solicitação de controle de E/S do dispositivo, mas não para uma solicitação de leitura (porque as solicitações de leitura não fornecem dados de entrada).

O método RetrieveInputMemory recupera o buffer de entrada para solicitações de E/S que usam o método de E/S em buffer ou E /S direto para acessar buffers de dados.

Se RetrieveInputMemory retornar S_OK, o driver receberá um ponteiro para a interface IWDFMemory de um objeto de memória UMDF que representa o buffer de entrada. Para acessar o buffer, o driver deve chamar IWDFMemory::GetDataBuffer.

O driver pode acessar o objeto de memória da estrutura recuperada até concluir a solicitação de E/S. Antes que o driver conclua a solicitação de E/S, ele deve chamar IWDFMemory::Release.

Em vez de chamar RetrieveInputMemory, o driver pode chamar IWDFIoRequest2::RetrieveInputBuffer, que recupera o endereço e o comprimento do buffer.

Para obter mais informações sobre como acessar os buffers de dados de uma solicitação de E/S, consulte Acessando buffers de dados em drivers de UMDF-Based.

Exemplos

O exemplo de código a seguir mostra como uma função de retorno de chamada IQueueCallbackWrite::OnWrite pode obter a interface IWDFMemory do objeto de memória da estrutura que representa o buffer de entrada de uma solicitação de gravação. Em seguida, o exemplo formata e envia a solicitação de gravação para um destino de E/S USB.

VOID
STDMETHODCALLTYPE
  CMyQueue::OnWrite(
    __in IWDFIoQueue *pWdfQueue,
    __in IWDFIoRequest *pWdfRequest,
    __in SIZE_T BytesToWrite
    )
{
    HRESULT hr = S_OK;
    IWDFMemory * pInputMemory = NULL;
    IWDFUsbTargetPipe * pOutputPipe = m_Device->GetOutputPipe();
    //
    // Declare an IWDFIoRequest2 interface pointer and obtain the
    // IWDFIoRequest2 interface from the IWDFIoRequest interface.
    //
    CComQIPtr<IWDFIoRequest2> r2 = pWdfRequest;

    hr = r2->RetrieveInputMemory(&pInputMemory);
    if (FAILED(hr)) goto Exit;

    hr = pOutputPipe->FormatRequestForWrite(
                                           pWdfRequest,
                                           NULL, //pFile
                                           pInputMemory,
                                           NULL, //Memory offset
                                           NULL  //DeviceOffset
                                           );
Exit:
    if (FAILED(hr))
    {
        pWdfRequest->Complete(hr);
    }
    else
    {
        ForwardFormattedRequest(pWdfRequest, pOutputPipe);
    }
    SAFE_RELEASE(pInputMemory);
 return;
}

Requisitos

Requisito Valor
Fim do suporte Indisponível no UMDF 2.0 e posterior.
Plataforma de Destino Área de Trabalho
Versão mínima do UMDF 1,9
Cabeçalho wudfddi.h (inclua Wudfddi.h)
DLL WUDFx.dll

Confira também

IWDFIoRequest2

IWDFIoRequest2::RetrieveInputBuffer

IWDFIoRequest2::RetrieveOutputBuffer

IWDFIoRequest2::RetrieveOutputMemory

IWDFIoRequest::GetInputMemory

IWDFIoRequest::GetOutputMemory