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


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

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

Метод WdfRequestReuse повторно инициализирует объект запроса платформы, чтобы его можно было использовать повторно.

Синтаксис

NTSTATUS WdfRequestReuse(
  [in] WDFREQUEST                Request,
  [in] PWDF_REQUEST_REUSE_PARAMS ReuseParams
);

Параметры

[in] Request

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

[in] ReuseParams

Указатель на структуру, выделенную вызывающим объектом WDF_REQUEST_REUSE_PARAMS .

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

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

Код возврата Описание
STATUS_INVALID_PARAMETER
Недопустимый входной параметр.
STATUS_WDF_REQUEST_INVALID_STATE
Драйвер предоставил IRP в структуре WDF_REQUEST_REUSE_PARAMS , но указанный объект запроса не был получен из WdfRequestCreateFromIrp.
 

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

Комментарии

Драйвер на основе платформы может повторно использовать объекты запросов платформы, созданные при предыдущих вызовах WdfRequestCreate или WdfRequestCreateFromIrp. Драйверы также могут повторно использовать объекты запросов, полученные от платформы, но не могут установить флаг WDF_REQUEST_REUSE_SET_NEW_IRP для этих объектов запроса.

Примечание

Драйверы должны соблюдать осторожность при повторном использовании объектов запросов, полученных от платформы. Повторное использованием такого запроса сбрасывает флаг отмены базового IRP и может помешать вызывающей драйверу отменить запрос.

Драйвер может повторно использовать объект запроса после завершения исходного запроса. После вызова драйвера WdfRequestReuse содержимое запроса необходимо повторно инициализировать. Драйвер может указать некоторые параметры запроса в структуре WDF_REQUEST_REUSE_PARAMS .

Если требуется, чтобы повторно используемый запрос был функцией обратного вызова CompletionRoutine , драйвер должен вызвать WdfRequestSetCompletionRoutine после вызова WdfRequestReuse.

Дополнительные сведения о WdfRequestReuse см. в разделе Повторное использование объектов запроса платформы.

Примеры

Следующий пример кода является частью функции обратного вызова CompletionRoutine , которая вызывает WdfRequestReuse , чтобы драйвер может повторно использовать запрос, выделенный драйвером.

VOID
MyRequestCompletionRoutine(
    IN WDFREQUEST  Request,
    IN WDFIOTARGET  Target,
    PWDF_REQUEST_COMPLETION_PARAMS  CompletionParams,
    IN WDFCONTEXT  Context
    )
{
    WDF_REQUEST_REUSE_PARAMS  params;
    NTSTATUS  status;
...
    WDF_REQUEST_REUSE_PARAMS_INIT(
                                  &params,
                                  WDF_REQUEST_REUSE_NO_FLAGS,
                                  STATUS_SUCCESS
                                  );

    status = WdfRequestReuse(
                             Request,
                             &params
                             );
    ASSERT(NT_SUCCESS(status));
...
}

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Минимальная версия UMDF 2,0
Верхняя часть wdfrequest.h (включая Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
Правила соответствия DDI DriverCreate(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), ReqSendFail(kmdf)

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

CompletionRoutine

WDF_REQUEST_REUSE_PARAMS

WDF_REQUEST_REUSE_PARAMS_INIT

WdfRequestCreate

WdfRequestCreateFromIrp

WdfRequestSetCompletionRoutine