Функция WdfRequestAllocateTimer (wdfrequest.h)
[Относится к KMDF и UMDF]
Метод WdfRequestAllocateTimer выделяет таймер для указанного запроса ввода-вывода.
Синтаксис
NTSTATUS WdfRequestAllocateTimer(
[in] WDFREQUEST Request
);
Параметры
[in] Request
Дескриптор объекта запроса платформы.
Возвращаемое значение
WdfRequestAllocateTimer возвращает STATUS_SUCCESS, если операция выполнена успешно. В противном случае этот метод может вернуть одно из следующих значений:
Код возврата | Описание |
---|---|
|
Входной параметр недопустим. |
|
Не удалось выделить таймер. |
Этот метод также может возвращать другие значения NTSTATUS.
Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Комментарии
Если драйвер задает значение времени ожидания при вызове WdfRequestSend, он должен вызвать WdfRequestAllocateTimer перед вызовомWdfRequestSend. Это гарантирует, что вызов WdfRequestSend не завершится ошибкой, если недостаточно системных ресурсов для выделения таймера.
Если для указанного запроса уже выделен таймер, WdfRequestAllocateTimer возвращает STATUS_SUCCESS.
Примеры
В следующем примере кода инициализируется структура WDF_REQUEST_SEND_OPTIONS , выделяется объект таймера для запроса ввода-вывода, а затем вызывается WdfRequestSend.
NTSTATUS status;
WDF_REQUEST_SEND_OPTIONS options;
BOOLEAN requestSend;
WDF_REQUEST_SEND_OPTIONS_INIT(
&options,
WDF_REQUEST_SEND_OPTION_TIMEOUT
);
WDF_REQUEST_SEND_OPTIONS_SET_TIMEOUT(
&options,
WDF_ABS_TIMEOUT_IN_SEC(TIME_OUT_VALUE)
);
status = WdfRequestAllocateTimer(
request
);
if (!NT_SUCCESS(status)){
return status;
...
requestSend = WdfRequestSend(
request,
ioTarget,
&options
);
}
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Минимальная версия 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) |