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