Функция 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, если операция выполнена успешно. В противном случае этот метод может возвращать одно из следующих значений:
Код возврата | Описание |
---|---|
|
Недопустимый входной параметр. |
|
Параметр Length равен нулю. |
|
Запрос уже выполнен или недопустим иным образом. |
|
Текущий поток не является создателем запроса ввода-вывода. |
|
Недостаточно памяти для завершения операции. |
Этот метод также может возвращать другие значения 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) |