Поделиться через


Метод IWDFDriver::CreatePreallocatedWdfMemory (wudfddi.h)

[Предупреждение: UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. Новые функции не добавляются в UMDF 1, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы Windows должны использовать UMDF 2. Дополнительные сведения см. в разделе начало работы с помощью UMDF.]

Метод CreatePreallocatedWdfMemory создает объект памяти платформы для указанного буфера.

Синтаксис

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

Параметры

[in] pBuff

Указатель на предоставленный драйвером буфер данных для объекта памяти.

[in] BufferSize

Размер данных в байтах, на которые указывает pBuff .

[in, optional] pCallbackInterface

Указатель на интерфейс IUnknown , который платформа использует для определения функций обратного вызова событий, связанных с объектами, на которые драйвер подписывается во вновь созданном объекте памяти. Этот параметр является необязательным. Драйвер может передать значение NULL , если драйвер не требует уведомления. Интерфейс IUnknown используется для очистки и удаления объектов. Если драйвер передает допустимый указатель, платформа вызывает QueryInterface в интерфейсе IUnknown для интерфейса IObjectCleanup . Если платформа получает интерфейс IObjectCleanup драйвера, платформа может впоследствии вызвать метод IObjectCleanup::OnCleanup драйвера, чтобы уведомить драйвер о том, что объект памяти очищен.

[in, optional] pParentObject

Указатель на интерфейс IWDFObject для родительского объекта созданного объекта памяти. Если значение РАВНО NULL, объект драйвера становится родительским по умолчанию.

[out] ppWdfMemory

Указатель на буфер, который получает указатель на интерфейс IWDFMemory для вновь созданного объекта памяти WDF.

Возвращаемое значение

CreatePreallocatedWdfMemory возвращает S_OK, если операция выполнена успешно. В противном случае этот метод возвращает один из кодов ошибок, определенных в Winerror.h.

Комментарии

Метод CreatePreallocatedWdfMemory создает объект памяти платформы для буфера, который ранее был выделен или получен драйвером.

Драйвер UMDF может вызвать CreatePreallocatedWdfMemory , если ему необходимо создать объект памяти, представляющий существующий буфер памяти. Например, драйвер может получить определяемую драйвером структуру в буфере для запроса ввода-вывода, содержащего внутренний код элемента управления вводом-выводом. Драйвер может вызвать CreatePreallocatedWdfMemory , чтобы создать объект памяти, чтобы драйвер смог передать структуру целевому объекту ввода-вывода.

После вызова драйвера UMDF CreatePreallocatedWdfMemory драйвер может вызвать IWDFMemory::SetBuffer , чтобы назначить другой буфер объекту памяти, созданному CreatePreallocatedWdfMemory .

При удалении объекта памяти платформы, созданного CreatePreallocatedWdfMemory , платформа не освобождает существующий буфер. Аналогичным образом вызов IWDFMemory::SetBuffer не освобождает ранее назначенный буфер.

Примеры

В следующем примере кода показано, как создать объект памяти для буфера.

    //
    // 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
                       );
    }

Требования

Требование Значение
Дата окончания поддержки Недоступно в UMDF 2.0 и более поздних версиях.
Целевая платформа Персональный компьютер
Минимальная версия UMDF 1.5
Верхняя часть wudfddi.h (включая Wudfddi.h)
DLL WUDFx.dll

См. также раздел

IObjectCleanup

IObjectCleanup::OnCleanup

IWDFDriver

IWDFMemory

IWDFMemory::SetBuffer

IWDFObject