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


Функция WdfMemoryAssignBuffer (wdfmemory.h)

[Относится к KMDF и UMDF]

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

Синтаксис

NTSTATUS WdfMemoryAssignBuffer(
  [in] WDFMEMORY Memory,
  [in] PVOID     Buffer,
  [in] size_t    BufferSize
);

Параметры

[in] Memory

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

[in] Buffer

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

[in] BufferSize

Ненулевой размер (в байтах) буфера, на который указывает буфер .

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

WdfMemoryAssignBuffer возвращает STATUS_SUCCESS, если операция выполнена успешно. В противном случае этот метод может вернуть одно из следующих значений:

Код возврата Описание
STATUS_INVALID_PARAMETER
Обнаружен недопустимый параметр.
 

Этот метод также может возвращать другие значения NTSTATUS.

Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.

Комментарии

Метод может назначать буфер объекту памяти, созданному WdfMemoryCreatePreallocated , но не объекту памяти, созданному WdfMemoryCreate .

Буфер, на который указывает параметр Buffer , можно выделить из страничного или нестраничного пула памяти. Если драйвер выделяет буфер из страничного пула или буфер из страничного пула, так как он поступил из приложения пользовательского режима, драйвер должен получить доступ к буферу только в DISPATCH_LEVEL IRQL < . (Обратите внимание, что функции обратного вызова EvtCleanupCallback и EvtDe составнойCallback,если они указаны, можно вызвать по адресу IRQL <= DISPATCH_LEVEL.)

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

Примеры

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

PVOID  pNewBuffer = NULL;

pNewBuffer = ExAllocatePoolWithTag(
                                   NonPagedPool,
                                   NEW_BUFFER_SIZE,
                                   MY_DRIVER_TAG
                                   );
if (pNewBuffer == NULL){
    goto Error;
}

status = WdfMemoryAssignBuffer(
                               memHandle,
                               pNewBuffer,
                               NEW_BUFFER_SIZE
                               );

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Верхняя часть wdfmemory.h (включая Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL Любой уровень
Правила соответствия DDI BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWriteA(kmdf), DriverCreate(kmdf), MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWriteA(kmdf)

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

ExAllocatePoolWithTag

WdfMemoryCreatePreallocated