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


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

[Применяется только к KMDF]

Метод WdfRequestRetrieveInputWdmMdl извлекает список дескрипторов памяти (MDL), который представляет входной буфер запроса ввода-вывода.

Синтаксис

NTSTATUS WdfRequestRetrieveInputWdmMdl(
  [in]  WDFREQUEST Request,
  [out] PMDL       *Mdl
);

Параметры

[in] Request

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

[out] Mdl

Указатель на расположение, которое получает указатель на MDL.

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

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

Код возврата Описание
STATUS_INVALID_PARAMETER
Входной параметр недопустим.
STATUS_INVALID_DEVICE_REQUEST
Недопустимый тип запроса или запрос не использует ни буферизованного, ни прямого ввода-вывода. Дополнительные сведения о поддерживаемых методах доступа к буферам данных см. в следующем разделе о примечаниях.
STATUS_INTERNAL_ERROR
Запрос уже выполнен.
STATUS_BUFFER_TOO_SMALL
Длина входного буфера равна нулю.
STATUS_INSUFFICIENT_RESOURCES
Недостаточно памяти.
 

Этот метод также может возвращать другие значения 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)

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

WdfRequestRetrieveOutputWdmMdl