Функция 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 завершается с ошибкой, драйвер завершает запрос с состоянием ошибки, которое возвращает WdfRequestRetrieveInputWdmMdl .
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(kmdf), MdlAfterReqCompletedIntIoctlA(kmdf), MdlAfterReqCompletedIoctl(kmdf), MdlAfterReqCompletedIoctlA(kmdf), MdlAfterReqCompletedRead(kmdf), MdlAfterReqCompletedWrite(kmdf) , MdlAfterReqCompletedWriteA(kmdf) |