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


Функция 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_BUFFER_SIZE
Смещение байтов, указанное параметром destinationOffset , был слишком большим.
STATUS_BUFFER_TOO_SMALL
Размер целевого буфера, указанного параметром destinationOffset, начиная с смещения назначения, был больше параметра NumBytesToCopyFrom.
 

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

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

Замечания

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

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

Если исходный или целевой буфер был выделен из пула памяти, метод WdfMemoryCopyFromBuff er должен вызываться в 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 (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)

См. также

WdfMemoryCopyToBuffer

WdfRequestRetrieveOutputMemory