Функция 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) |