Функция WdfRequestRetrieveUnsafeUserOutputBuffer (wdfrequest.h)

[Применяется только к KMDF]

Метод WdfRequestRetrieveUnsafeUserOutputBuffer извлекает выходной буфер запроса ввода-вывода, если метод запроса для доступа к буферам данных не является ни буферизованным, ни прямым вводом-выводом.

Синтаксис

NTSTATUS WdfRequestRetrieveUnsafeUserOutputBuffer(
  [in]            WDFREQUEST Request,
  [in]            size_t     MinimumRequiredLength,
  [out]           PVOID      *OutputBuffer,
  [out, optional] size_t     *Length
);

Параметры

[in] Request

Дескриптор объекта запроса платформы.

[in] MinimumRequiredLength

Минимальный размер буфера (в байтах), необходимый драйверу для обработки запроса ввода-вывода.

[out] OutputBuffer

Указатель на расположение, которое получает адрес буфера.

[out, optional] Length

Указатель на расположение, которое получает размер буфера в байтах. Этот параметр является необязательным и может иметь значение NULL.

Возвращаемое значение

WdfRequestRetrieveUnsafeUserOutputBuffer возвращает STATUS_SUCCESS, если операция выполнена успешно. В противном случае этот метод может вернуть одно из следующих значений:

Код возврата Описание
STATUS_INVALID_PARAMETER
Входной параметр недопустим.
STATUS_INVALID_DEVICE_REQUEST
Это значение возвращается, если происходит одно из следующих действий:
STATUS_BUFFER_TOO_SMALL
Параметр MinimumRequiredLength указывает размер буфера, превышающий фактический размер буфера.
 

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

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

Комментарии

Метод WdfRequestRetrieveUnsafeUserOutputBuffer должен вызываться из функции обратного вызова EvtIoInCallerContext . После вызова WdfRequestRetrieveUnsafeUserOutputBuffer драйвер должен вызвать WdfRequestProbeAndLockUserBufferForWrite.

Драйвер может вызывать WdfRequestRetrieveUnsafeUserOutputBuffer , если код элемента управления вводом-выводом запроса IRP_MJ_READ или IRP_MJ_DEVICE_CONTROL.

Драйвер может получить доступ к полученному буферу, пока не завершит запрос ввода-вывода , который представляет параметр Request .

Дополнительные сведения о WdfRequestRetrieveUnsafeUserOutputBuffer см. в статье Доступ к буферам данных в драйверах Framework-Based.

Примеры

Пример кода, в котором используется WdfRequestRetrieveUnsafeUserOutputBuffer, см. в разделе WdfRequestProbeAndLockUserBufferForRead.

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Верхняя часть wdfrequest.h (включая Wdf.h)
Библиотека Wdf01000.sys (см. раздел Управление версиями библиотеки платформы).
IRQL PASSIVE_LEVEL
Правила соответствия DDI BufAfterReqCompletedIntIoctl(kmdf), BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctl(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedRead(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWrite(kmdf), DriverCreate(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), OutputBufferAPI(kmdf)

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

EvtIoInCallerContext

WdfRequestProbeAndLockUserBufferForWrite

WdfRequestRetrieveUnsafeUserInputBuffer