Функция WdfMemoryCopyFromBuffer (wdfmemory.h)
[Применимо к KMDF и UMDF]
Метод WdfMemoryCopyFromBuffer копирует содержимое указанного исходного буфера в буфер указанного объекта памяти.
Синтаксис
NTSTATUS WdfMemoryCopyFromBuffer(
[in] WDFMEMORY DestinationMemory,
[in] size_t DestinationOffset,
[in] PVOID Buffer,
[in] size_t NumBytesToCopyFrom
);
Параметры
[in] DestinationMemory
Дескриптор объекта памяти платформы, который представляет буфер назначения.
[in] DestinationOffset
Смещение в байтах от начала буфера назначения. Операция копирования начинается с указанного смещения в буфере назначения.
[in] Buffer
Указатель на исходный буфер.
[in] NumBytesToCopyFrom
Число байтов для копирования из исходного буфера в буфер назначения. Это значение не должно быть больше размера исходного буфера.
Возвращаемое значение
WdfMemoryCopyFromBuffer возвращает STATUS_SUCCESS, если операция выполнена успешно. В противном случае этот метод может возвращать одно из следующих значений:
Код возврата | Описание |
---|---|
|
Обнаружен недопустимый параметр. |
|
Смещение в байтах, указанное параметром DestinationOffset , было слишком большим. |
|
Размер буфера назначения, указанного параметром DestinationOffset , начиная с смещения назначения, был больше, чем параметр NumBytesToCopyFrom . |
Этот метод также может возвращать другие значения NTSTATUS.
Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Комментарии
Платформа проверяет, достаточно ли большой буфер назначения для получения объема данных, указанного параметром NumBytesToCopyFrom .
Дополнительные сведения об объектах памяти платформы см. в разделе Использование буферов памяти.
Если исходный или целевой буфер был выделен из страничного пула памяти, метод WdfMemoryCopyFromBuffer должен вызываться в irQL <= APC_LEVEL. В противном случае метод можно вызвать в любом IRQL.
Примеры
Следующий пример кода получает дескриптор объекта памяти платформы, который представляет выходной буфер запроса ввода-вывода, а затем копирует содержимое другого буфера в выходной буфер запроса ввода-вывода.
WDFMEMORY memoryBuffer;
NTSTATUS status;
status = WdfRequestRetrieveOutputMemory(
Request,
&memoryBuffer
);
if (!NT_SUCCESS(status)) {
goto Error;
}
status = WdfMemoryCopyFromBuffer(
memoryBuffer,
0,
deviceContext->Buffer,
Length
);
if (!NT_SUCCESS(status)) {
goto Error;
}
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Минимальная версия 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) |