Compartilhar via


Método IWDFDriver::CreatePreallocatedWdfMemory (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 CreatePreallocatedWdfMemory cria um objeto de memória de estrutura para o buffer especificado.

Sintaxe

HRESULT CreatePreallocatedWdfMemory(
  [in]           BYTE       *pBuff,
  [in]           SIZE_T     BufferSize,
  [in, optional] IUnknown   *pCallbackInterface,
  [in, optional] IWDFObject *pParentObject,
  [out]          IWDFMemory **ppWdfMemory
);

Parâmetros

[in] pBuff

Um ponteiro para um buffer de dados fornecido pelo driver para o objeto de memória.

[in] BufferSize

O tamanho, em bytes, dos dados para os quais pBuff aponta.

[in, optional] pCallbackInterface

Um ponteiro para a interface IUnknown que a estrutura usa para determinar as funções de retorno de chamada de evento relacionadas ao objeto que o driver assina no objeto de memória recém-criado. Esse parâmetro é opcional. O driver poderá passar NULL se o driver não exigir notificação. A interface IUnknown é usada para limpeza e descarte de objetos. Se o driver passar um ponteiro válido, a estrutura chamará QueryInterface na interface IUnknown para a interface IObjectCleanup . Se a estrutura obtiver a interface IObjectCleanup do driver, a estrutura poderá chamar posteriormente o método IObjectCleanup::OnCleanup do driver para notificar o driver de que o objeto de memória está limpo.

[in, optional] pParentObject

Um ponteiro para a interface IWDFObject para o objeto pai do objeto de memória criado. Se NULL, o objeto driver se tornará o pai padrão.

[out] ppWdfMemory

Um ponteiro para um buffer que recebe um ponteiro para a interface IWDFMemory para o objeto de memória WDF recém-criado.

Retornar valor

CreatePreallocatedWdfMemory retornará S_OK se a operação for bem-sucedida. Caso contrário, esse método retornará um dos códigos de erro definidos em Winerror.h.

Comentários

O método CreatePreallocatedWdfMemory cria um objeto de memória de estrutura para um buffer que o driver alocou ou obteve anteriormente.

Um driver UMDF poderá chamar CreatePreallocatedWdfMemory se precisar criar um objeto de memória que represente um buffer de memória pré-existente. Por exemplo, o driver pode receber uma estrutura definida pelo driver dentro de um buffer para uma solicitação de E/S que contém um código de controle de E/S interno. O driver pode chamar CreatePreallocatedWdfMemory para criar um objeto de memória para que o driver possa passar a estrutura para um destino de E/S.

Depois que um driver UMDF chama CreatePreallocatedWdfMemory, o driver pode chamar IWDFMemory::SetBuffer para atribuir um buffer diferente ao objeto de memória criado por CreatePreallocatedWdfMemory .

Quando o objeto de memória da estrutura que CreatePreallocatedWdfMemory criou é excluído, a estrutura não desaloca o buffer pré-existente. Da mesma forma, uma chamada para IWDFMemory::SetBuffer não desaloca o buffer atribuído anteriormente.

Exemplos

O exemplo de código a seguir mostra como criar um objeto de memória para um buffer.

    //
    // Allocate a request.
    hr = wdfDevice->CreateRequest(NULL, NULL, &request);

    // Allocate a buffer and wrap it in a memory object. 
    // Make the memory object a child of the request. 
    // When the request object is deleted, the memory object 
    // is also deleted. 

    if (SUCCEEDED(hr))
    {
       buffer = new BYTE[m_HidDescriptor->wReportLength];

       if (buffer == NULL)
       {
          hr = E_OUTOFMEMORY;
       }
    }

    if (SUCCEEDED(hr))
    {
       CComPtr<IWDFDriver> driver;
       wdfDevice->GetDriver(&driver);

       hr = driver->CreatePreallocatedWdfMemory(
                       buffer,
                       m_HidDescriptor->wReportLength,
                       NULL,
                       request,
                       &memory
                       );
    }

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.5
Cabeçalho wudfddi.h (inclua Wudfddi.h)
DLL WUDFx.dll

Confira também

IObjectCleanup

IObjectCleanup::OnCleanup

IWDFDriver

IWDFMemory

IWDFMemory::SetBuffer

IWDFObject