Функция WdfRequestCompleteWithPriorityBoost (wdfrequest.h)
[Относится только к KMDF]
Метод WdfRequestCompleteWithPriorityBoost завершает указанный запрос ввода-вывода и предоставляет состояние завершения. Он также указывает значение, которое система может использовать для повышения приоритета во время выполнения потока, запрашивающего операцию ввода-вывода.
Синтаксис
void WdfRequestCompleteWithPriorityBoost(
[in] WDFREQUEST Request,
[in] NTSTATUS Status,
[in] CCHAR PriorityBoost
);
Параметры
[in] Request
Дескриптор объекта запроса платформы, представляющий завершаемый запрос ввода-вывода.
[in] Status
Значение NTSTATUS, представляющее состояние завершения запроса. Допустимые значения состояния включают, помимо прочего, следующие:
STATUS_SUCCESS
Драйвер успешно выполнил запрос.
STATUS_CANCELLED
Драйвер отменил запрос.
STATUS_UNSUCCESSFUL
Драйвер обнаружил ошибку при обработке запроса.
[in] PriorityBoost
Системное значение константы, на которое увеличивается приоритет времени выполнения исходного потока, запрашивающего операцию. Значения констант зависят от типа устройства и определяются в Wdm.h. Формат имен констант — XXX_INCREMENT. Дополнительные сведения о значениях повышения приоритета см. в разделе Указание повышения приоритета при выполнении запросов ввода-вывода.
Возвращаемое значение
None
Remarks
Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Драйвер должен вызвать WdfRequestCompleteWithPriorityBoost , если вы хотите переопределить повышение приоритета по умолчанию, которое предоставляет платформа. Например, драйвер может задать повышение приоритета на IO_NO_INCREMENT, если ему удалось быстро выполнить запрос, возможно, из-за того, что он обнаружил ошибку.
После вызова WdfRequestCompleteWithPriorityBoost дескриптор запроса становится недействительным, если драйвер не вызвал WdfObjectReference для добавления одного или нескольких дополнительных счетчиков ссылок в объект запроса. Обратите внимание, что после возврата WdfRequestCompleteWithPriorityBoost драйвер не должен пытаться получить доступ к связанной структуре WDM IRP, даже если он вызвал WdfObjectReference.
Дополнительные сведения о вызове WdfRequestCompleteWithPriorityBoost см. в разделе Завершение запросов ввода-вывода.
Примеры
В следующем примере кода показано, как в примере в WdfRequestComplete можно использовать WdfRequestCompleteWithPriorityBoost вместо WdfRequestComplete.
switch (params.Type) {
case WdfRequestTypeRead:
length = params.Parameters.Read.Length;
direction = WdfDmaDirectionReadFromDevice;
break;
case WdfRequestTypeWrite:
length = params.Parameters.Write.Length;
direction = WdfDmaDirectionWriteToDevice;
break;
default:
WdfRequestCompleteWithPriorityBoost(
Request,
STATUS_INVALID_PARAMETER,
IO_NO_INCREMENT
);
return;
}