Функция WdfRequestRetrieveOutputWdmMdl (wdfrequest.h)
[Применяется только к KMDF]
Метод WdfRequestRetrieveOutputWdmMdl извлекает список дескрипторов памяти (MDL), который представляет выходной буфер запроса ввода-вывода.
Синтаксис
NTSTATUS WdfRequestRetrieveOutputWdmMdl(
[in] WDFREQUEST Request,
[out] PMDL *Mdl
);
Параметры
[in] Request
Дескриптор объекта запроса платформы.
[out] Mdl
Указатель на расположение, которое получает указатель на MDL.
Возвращаемое значение
WdfRequestRetrieveOutputWdmMdl возвращает STATUS_SUCCESS, если операция выполнена успешно. В противном случае этот метод может вернуть одно из следующих значений:
Код возврата | Описание |
---|---|
|
Входной параметр недопустим. |
|
Недопустимый тип запроса или запрос не использует ни буферизованного, ни прямого ввода-вывода. Дополнительные сведения о поддерживаемых методах доступа к буферам данных см. в следующем разделе о примечаниях. |
|
Запрос уже выполнен. |
|
Длина входного буфера равна нулю. |
|
Недостаточно памяти. |
Этот метод также может возвращать другие значения NTSTATUS.
Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Комментарии
Выходной буфер запроса получает информацию, например данные с диска, которую драйвер предоставляет инициатору запроса. Драйвер может вызывать WdfRequestRetrieveOutputWdmMdl для запроса на чтение или запроса управления вводом-выводом устройства, но не для запроса на запись (так как запросы на запись не предоставляют выходные данные).
Метод WdfRequestRetrieveOutputWdmMdl извлекает MDL выходного буфера для запросов ввода-вывода, использующих метод буферизованного ввода-вывода или прямой метод ввода-вывода для доступа к буферам данных. Если код элемента управления вводом-выводом запроса IRP_MJ_INTERNAL_DEVICE_CONTROL или запрос поступил из другого драйвера в режиме ядра, WdfRequestRetrieveOutputWdmMdl также поддерживает запросы ввода-вывода, которые не используют ни буферизованного, ни прямого ввода-вывода.
Если WdfRequestRetrieveOutputWdmMdl возвращает STATUS_SUCCESS, драйвер получает указатель на MDL, описывающий выходной буфер.
Драйвер не должен получать доступ к MDL запроса после выполнения запроса ввода-вывода.
Дополнительные сведения о WdfRequestRetrieveOutputWdmMdl см. в разделе Доступ к буферам данных в драйверах Framework-Based.
Примеры
Следующий пример кода является частью функции обратного вызова EvtIoRead , которая получает MDL для входного буфера запроса ввода-вывода. Если вызов WdfRequestRetrieveOutputWdmMdl завершается сбоем, драйвер завершает запрос с состоянием ошибки, которое возвращает WdfRequestRetrieveOutputWdmMdl .
VOID
MyDrvEvtIoRead(
IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN size_t Length
)
{
NTSTATUS status;
PMDL mdl = NULL;
...
status = WdfRequestRetrieveOutputWdmMdl(
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), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), MdlAfterReqCompletedIntIoctl(kmdf), MdlAfterReqCompletedIntIoctlA(kmdf), MdlAfterReqCompletedIoctl(kmdf), MdlAfterReqCompletedIoctlA(kmdf), MdlAfterReqCompletedRead(kmdf), MdlAfterReqCompletedReadA(kmdf), MdlAfterReqCompletedWrite(kmdf), OutputBufferAPI(kmdf) |