Функция WdfRequestRetrieveInputWdmMdl (wdfrequest.h)
[Применимо только к KMDF]
Метод WdfRequestRetrieveInputWdmMdl получает список дескрипторов памяти (MDL), представляющий входной буфер запроса ввода-вывода.
Синтаксис
NTSTATUS WdfRequestRetrieveInputWdmMdl(
[in] WDFREQUEST Request,
[out] PMDL *Mdl
);
Параметры
[in] Request
Дескриптор объекта запроса платформы.
[out] Mdl
Указатель на расположение, которое получает указатель на MDL.
Возвращаемое значение
WdfRequestRetrieveInputWdmMdl возвращает STATUS_SUCCESS, если операция завершится успешно. В противном случае этот метод может вернуть одно из следующих значений:
Возвращаемый код | Описание |
---|---|
|
Недопустимый входной параметр. |
|
Тип запроса недопустим или запрос использует не буферизированный или прямой ввод-вывод. Дополнительные сведения о поддерживаемых методах доступа к буферам данных см. в следующем разделе "Примечания". |
|
Запрос уже завершен. |
|
Длина входного буфера равна нулю. |
|
Недостаточно памяти. |
Этот метод также может возвращать другие значения NTSTATUS.
Ошибка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Замечания
Входной буфер запроса содержит сведения, такие как данные для записи на диск, предоставленные источником запроса. Драйвер может вызывать WdfRequestRetrieveInputWdmMdl для запроса на запись или запроса элемента управления ввода-вывода устройства, но не для запроса на чтение (так как запросы на чтение не предоставляют входные данные).
Метод WdfRequestRetrieveInputWdmMdl извлекает MDL входного буфера для запросов ввода -вывода, использующих метод буферизованного ввода-вывода или метод прямого ввода-вывода для доступа к буферам данных. Если код элемента управления ввода-вывода запроса IRP_MJ_INTERNAL_DEVICE_CONTROLили если запрос поступил из другого драйвера режима ядра, WdfRequestRetrieveInputWdmMdl также поддерживает запросы ввода-вывода, использующие , не буферизованного или прямого ввода-вывода.
Если WdfRequestRetrieveInputWdmMdl возвращает STATUS_SUCCESS, драйвер получает указатель на MDL, описывающий входной буфер.
Драйвер не должен получить доступ к MDL запроса после завершения запроса ввода-вывода.
Дополнительные сведения о WdfRequestRetrieveInputWdmMdlсм. в разделе Доступ к буферам данных в драйверах Framework-Based.
Примеры
Следующий пример кода является частью функции обратного вызова EvtIoWrite, которая получает MDL для входного буфера запроса ввода-вывода. Если вызов WdfRequestRetrieveInputWdmMdl завершается ошибкой, драйвер завершает запрос с состоянием ошибки, WdfRequestRetrieveInputmMdl.
VOID
MyDrvEvtIoWrite(
IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN size_t Length
)
{
NTSTATUS status;
PMDL mdl = NULL;
...
status = WdfRequestRetrieveInputWdmMdl(
Request,
&mdl
);
if (!NT_SUCCESS(status))
{
WdfRequestCompleteWithInformation(
Request,
status,
0
);
}
...
}
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
минимальная версия KMDF | 1.0 |
заголовка | wdfrequest.h (включая Wdf.h) |
библиотеки | Wdf01000.sys (см. управление версиями библиотеки Платформы).) |
IRQL | <=DISPATCH_LEVEL |
правил соответствия DDI | DriverCreate(kmdf), InputBufferAPI(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), MdlAfterReqCompletedIntIoctl(km, MdlAfterReqCompletedIntIoctlA(kmdf), MdlAfterReqCompletedIoctl(kmdf), MdlAfterReqcompletedIoctlA(kmdf), MdlAfterReqCompletedRead(kmdf), MdlAfterReqCompletedWrite(kmdf), MdlAfterReqCompletedWriteA(kmdf) |