Метод 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 |