Método IWDFIoRequest2::RetrieveOutputMemory (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 RetrieveOutputMemory recupera a interface IWDFMemory de um objeto de memória de estrutura que representa o buffer de saída de uma solicitação de E/S.
Sintaxe
HRESULT RetrieveOutputMemory(
[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
RetrieveOutputMemory 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 |
---|---|
|
A solicitação de E/S não forneceu um buffer de entrada. |
|
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 saída de uma solicitação recebe informações, como dados de um disco, que o driver fornece ao originador da solicitação. Seu driver pode chamar RetrieveOutputMemory para obter o buffer de saída para uma solicitação de leitura ou uma solicitação de controle de E/S do dispositivo, mas não para uma solicitação de gravação (porque as solicitações de gravação não fornecem dados de saída).
O método RetrieveOutputMemory recupera o buffer de saída 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 RetrieveOutputMemory retornar S_OK, o driver receberá um ponteiro para a interface IWDFMemory de um objeto de memória UMDF que representa o buffer de saída. 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 RetrieveOutputMemory, o driver pode chamar IWDFIoRequest2::RetrieveOutputBuffer, 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 IQueueCallbackRead::OnRead pode obter a interface IWDFMemory do objeto de memória da estrutura que representa o buffer de saída de uma solicitação de leitura. Em seguida, o exemplo formata e envia a solicitação de leitura para um destino de E/S 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;
}
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::RetrieveInputBuffer
IWDFIoRequest2::RetrieveInputMemory