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


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

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

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

Синтаксис

NTSTATUS WdfMemoryCopyToBuffer(
  [in]  WDFMEMORY SourceMemory,
  [in]  size_t    SourceOffset,
  [out] PVOID     Buffer,
  [in]  size_t    NumBytesToCopyTo
);

Параметры

[in] SourceMemory

Дескриптор для объекта памяти платформы, представляющего исходный буфер.

[in] SourceOffset

Смещение (в байтах) от начала исходного буфера. Операция копирования начинается с указанного смещения в исходном буфере.

[out] Buffer

Указатель на буфер назначения.

[in] NumBytesToCopyTo

Число байтов для копирования из исходного буфера в буфер назначения. Это значение не должно быть больше размера исходного буфера.

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

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

Код возврата Описание
STATUS_INVALID_PARAMETER
Обнаружен недопустимый параметр.
STATUS_BUFFER_TOO_SMALL
Смещение байтов, указанное параметром SourceOffset , было слишком большим, или параметр NumBytesToCopyTo был больше размера исходного буфера.
 

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

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

Комментарии

Платформа не позволяет драйверу копировать больше байтов, чем исходный буфер, который задается параметром SourceMemory .

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

Если исходный или целевой буфер был выделен из страничного пула памяти, необходимо вызвать метод WdfMemoryCopyToBuffer по адресу IRQL <= APC_LEVEL. В противном случае метод можно вызвать в любом irQL.

Примеры

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

PVOID  pOutputBuffer = NULL;
NTSTATUS  status = STATUS_SUCCESS;

pOutputBuffer = ExAllocatePoolWithTag(
                                      NonPagedPool,
                                      MY_BUFFER_LENGTH,
                                      MY_POOL_TAG
                                      );
if (pOutputBuffer != NULL){
    status = WdfMemoryCopyToBuffer(
                                   outputMemoryHandle,
                                   0,
                                   pOutputBuffer,
                                   MY_BUFFER_LENGTH
                                   );
}
else{
    status = STATUS_INSUFFICIENT_RESOURCES;
}

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия 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)

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

WdfMemoryCopyFromBuffer