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