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


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

[Относится только к KMDF]

Метод WdfRequestProbeAndLockUserBufferForWrite проверяет возможность записи буфера пользовательского режима запроса ввода-вывода, а затем блокирует страницы физической памяти буфера, чтобы драйверы в стеке драйверов могли записывать данные в буфер.

Синтаксис

NTSTATUS WdfRequestProbeAndLockUserBufferForWrite(
  [in]  WDFREQUEST Request,
  [in]  PVOID      Buffer,
  [in]  size_t     Length,
  [out] WDFMEMORY  *MemoryObject
);

Параметры

[in] Request

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

[in] Buffer

Указатель на выходной буфер запроса. Дополнительные сведения см. в разделе "Примечания".

[in] Length

Длина выходного буфера запроса в байтах.

[out] MemoryObject

Указатель на расположение, которое получает дескриптор объекта памяти платформы, представляющего выходной буфер пользователя.

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

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

Код возврата Описание
STATUS_INVALID_PARAMETER
Недопустимый входной параметр.
STATUS_INVALID_USER_BUFFER
Параметр Length равен нулю.
STATUS_INVALID_DEVICE_REQUEST
Запрос уже выполнен или недопустим иным образом.
STATUS_ACCESS_VIOLATION
Текущий поток не является создателем запроса ввода-вывода.
STATUS_INSUFFICIENT_RESOURCES
Недостаточно памяти для завершения операции.
 

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

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

Комментарии

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

Только драйвер верхнего уровня может вызывать метод WdfRequestProbeAndLockUserBufferForWrite , так как для этого метода требуется контекст процесса, создавшего запрос ввода-вывода.

Буфер пользовательского режима, задаваемый параметром Buffer , может быть буфером, который извлекает WdfRequestRetrieveUnsafeUserOutputBuffer , или другим выходным буфером пользовательского режима. Например, код элемента управления вводом-выводом, использующий метод буферизованного доступа, может передавать структуру, содержащую внедренный указатель на буфер пользовательского режима. В этом случае драйвер может использоватьWdfRequestProbeAndLockUserBufferForWrite для получения объекта памяти для буфера.

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

Если WdfRequestProbeAndLockUserBufferForWrite возвращает STATUS_SUCCESS, драйвер получает дескриптор объекта памяти платформы, который представляет буфер пользовательского режима. Чтобы получить доступ к буферу, драйвер должен вызвать WdfMemoryGetBuffer.

Объект памяти платформы автоматически освобождается, когда драйвер вызывает WdfRequestComplete.

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

Примеры

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

Требования

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

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

WdfMemoryGetBuffer

WdfRequestProbeAndLockUserBufferForRead

WdfRequestRetrieveUnsafeUserOutputBuffer