Функция 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, если операция выполнена успешно. В противном случае этот метод может возвращать одно из следующих значений:
Код возврата | Описание |
---|---|
|
Недопустимый входной параметр. |
|
Драйвер предоставил 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(
¶ms,
WDF_REQUEST_REUSE_NO_FLAGS,
STATUS_SUCCESS
);
status = WdfRequestReuse(
Request,
¶ms
);
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) |