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


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

Код возврата Описание
STATUS_INVALID_PARAMETER
Обнаружен недопустимый параметр.
STATUS_INVALID_BUFFER_SIZE
Смещение в байтах, указанное параметром DestinationOffset , было слишком большим.
STATUS_BUFFER_TOO_SMALL
Размер буфера назначения, указанного параметром 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)

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

WdfMemoryCopyToBuffer

WdfRequestRetrieveOutputMemory