Функция 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, если операция выполнена успешно. В противном случае этот метод может вернуть одно из следующих значений:
Код возврата | Описание |
---|---|
|
Обнаружен недопустимый параметр. |
Этот метод также может возвращать другие значения 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) |