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


Функция 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_BUFFER_TOO_SMALL
Смещение байтов, указанное параметром SourceOff set SourceOffset, было слишком большим, или параметр numBytesToCopyTo был больше размера исходного буфера.
 

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

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

Замечания

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

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

Если исходный или целевой буфер был выделен из пула памяти, метод WdfMemoryCopyToBuff er должен вызываться в 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 (include Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL Любой уровень (см. раздел "Примечания")
правил соответствия DDI BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWriteA(kmdf), DriverCreate(kmCreate(kmcreate) kmdf), MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWriteA(kmdf)

См. также

WdfMemoryCopyFromBuffer