Функция WdfIoQueueAssignForwardProgressPolicy (wdfio.h)
[Применяется только к KMDF]
Метод WdfIoQueueAssignForwardProgressPolicy обеспечивает возможность платформы гарантировать переадресацию хода выполнения для указанной очереди ввода-вывода.
Синтаксис
NTSTATUS WdfIoQueueAssignForwardProgressPolicy(
[in] WDFQUEUE Queue,
[in] PWDF_IO_QUEUE_FORWARD_PROGRESS_POLICY ForwardProgressPolicy
);
Параметры
[in] Queue
Дескриптор объекта очереди платформы.
[in] ForwardProgressPolicy
Указатель на структуру WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY , выделенную драйвером.
Возвращаемое значение
WdfIoQueueAssignForwardProgressPolicy возвращает STATUS_SUCCESS, если операция выполнена успешно. В противном случае этот метод может вернуть одно из следующих значений:
Код возврата | Описание |
---|---|
|
Входной параметр недопустим. |
|
Неправильный размер структуры WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY. |
|
Объем доступной памяти слишком мал. |
Этот метод также может возвращать другие значения NTSTATUS. Кроме того, если функция обратного вызова EvtIoAllocateResourcesForReservedRequest вашего драйвера возвращает значение состояния ошибки, WdfIoQueueAssignForwardProgressPolicy возвращает это значение.
Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.
Комментарии
МетодWdfIoQueueAssignForwardProgressPolicy создает объекты запросов, которые платформа резервирует для ситуаций с нехваткой памяти, и регистрирует функции обратного вызова, вызываемые платформой для обработки ситуаций с нехваткой памяти.
В KMDF версии 1.9 очередь ввода-вывода, представляющая параметр Queue , должна быть очередью ввода-вывода устройства по умолчанию или очередью, для которой драйвер вызвал WdfDeviceConfigureRequestDispatching. Драйвер может вызывать WdfIoQueueAssignForwardProgressPolicy в любое время после вызова WdfDeviceConfigureRequestDispatching.
В KMDF версии 1.11 и более поздних очередью ввода-вывода, которую представляет параметр Queue , может быть любая очередь, получающая запрос непосредственно от платформы. Например, драйвер может указать очередь, в которую он будет динамически пересылать IRP.
Перед возвратом WdfIoQueueAssignForwardProgressPolicy платформа выполняет следующие действия:
- Создает и сохраняет количество объектов запроса, указанное драйвером для элемента TotalForwardProgressRequestsструктуры WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY .
- Если драйвер ранее назывался WdfDeviceInitSetRequestAttributes, каждое выделение включает в себя контекстное пространство, указанное WdfDeviceInitSetRequestAttributes .
- Вызывает функцию обратного вызова EvtIoAllocateResourcesForReservedRequest драйвера для каждого объекта запроса, создаваемого платформой.
Платформа удаляет свои зарезервированные объекты запросов только при удалении объекта очереди платформы, к которому они относятся. Если драйвер вызывает WdfDeviceInitSetRequestAttributes и задает функцию обратного вызова EvtCleanupCallback или EvtDegradCallback для объектов запроса, платформа вызывает эти функции обратного вызова для зарезервированных объектов запроса при удалении объектов.
Дополнительные сведения о методе WdfIoQueueAssignForwardProgressPolicy и о том, как использовать функцию гарантированного прогресса платформы, см. в статье Обеспечение прямого хода выполнения операций ввода-вывода.
Примеры
В этом примере кода настраивается ранее созданная очередь ввода-вывода для получения запросов на запись, а затем она обеспечивает гарантированное перенаправление хода выполнения для очереди.
#define MAX_RESERVED_REQUESTS 10
WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY queueForwardProgressPolicy;
WDFQUEUE writeQueue;
NTSTATUS status = STATUS_SUCCESS;
...
status = WdfDeviceConfigureRequestDispatching(
device,
writeQueue,
WdfRequestTypeWrite
);
if(!NT_SUCCESS(status)) {
return status;
}
WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_DEFAULT_INIT(
&queueForwardProgressPolicy,
MAX_RESERVED_REQUESTS
);
status = WdfIoQueueAssignForwardProgressPolicy(
writeQueue,
&queueForwardProgressPolicy
);
if(!NT_SUCCESS(status)) {
return status;
}
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Минимальная версия KMDF | 1,9 |
Верхняя часть | wdfio.h (включая Wdf.h) |
Библиотека | Wdf01000.sys (см. раздел Управление версиями библиотеки платформы). |
IRQL | PASSIVE_LEVEL |
Правила соответствия DDI | DriverCreate(kmdf) |
См. также раздел
EvtIoAllocateResourcesForReservedRequest