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


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

[Применимо к KMDF и UMDF]

Метод WdfRequestGetStatus возвращает состояние запроса ввода-вывода.

Синтаксис

NTSTATUS WdfRequestGetStatus(
  [in] WDFREQUEST Request
);

Параметры

[in] Request

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

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

WdfRequestGetStatus возвращает значение NTSTATUS. Дополнительные сведения о том, какое значение можно вернуть, см. в следующем разделе "Примечания".

Ошибка возникает, если драйвер предоставляет недопустимый дескриптор объекта.

Замечания

Метод WdfRequestGetStatus возвращает одно из следующих элементов:

  • Если вызов драйвера WdfRequestSend выполнен, WdfRequestGetStatus возвращает значение состояния, заданное драйвером, который вызывает WdfRequestComplete для выполнения указанного запроса. Драйвер обычно вызывает WdfRequestGetStatus из функции обратного вызова CompletionRoutine.
  • Если вызов драйвера WdfRequestSend завершается ошибкой, WdfRequestGetStatus возвращает значение состояния, которое платформа установила для описания сбоя. Драйвер может вызывать WdfRequestGetStatus сразу после вызова WdfRequestSend.
Если драйвер задает флаг WDF_REQUEST_SEND_OPTION_SYNCHRONOUS для запроса при вызове WdfRequestSend, драйвер может вызывать WdfRequestGetStatus сразу после вызова WdfRequestSend, независимо от того, успешно ли выполняется вызов WdfRequestSend.

Дополнительные сведения о завершении запроса см. в разделе Завершение запросов ввода-вывода.

Примеры

В следующем примере кода используется пример драйвера KbFiltr. В этом примере запрос ввода-вывода отправляется в целевой объект ввода-вывода. Если WdfRequestSend завершается ошибкой, в примере используется значение WdfRequestGetStatus в качестве входных данных для WdfRequestComplete.

VOID
KbFilter_ForwardRequest(
    IN WDFREQUEST Request,
    IN WDFIOTARGET Target
    )
{
    WDF_REQUEST_SEND_OPTIONS options;
    BOOLEAN ret;
    NTSTATUS status;

    WDF_REQUEST_SEND_OPTIONS_INIT(
                                  &options,
                                  WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET
                                  );

    ret = WdfRequestSend(
                         Request,
                         Target,
                         &options
                         );

    if (ret == FALSE) {
        status = WdfRequestGetStatus (Request);
        DebugPrint(("WdfRequestSend failed: 0x%x\n", status));
        WdfRequestComplete(
                           Request,
                           status
                           );
    }
    return;
}

Требования

Требование Ценность
целевая платформа Всеобщий
минимальная версия KMDF 1.0
минимальная версия UMDF 2.0
заголовка wdfrequest.h (включая Wdf.h)
библиотеки Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
правил соответствия DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), RequestGetStatusValid(kmdf)

См. также

CompletionRoutine

WdfRequestComplete

WdfRequestSend