Поделиться через


функция обратного вызова EVT_WDF_IO_ALLOCATE_RESOURCES_FOR_RESERVED_REQUEST (wdfio.h)

[Применяется только к KMDF]

Функция обратного вызова EvtIoAllocateResourcesForReservedRequest драйвера выделяет ресурсы для конкретных запросов, которые драйвер может использовать для обработки запроса ввода-вывода в будущем. Платформа предварительно выделяет указанный объект запроса для дальнейшего использования в ситуациях с нехваткой памяти.

Синтаксис

EVT_WDF_IO_ALLOCATE_RESOURCES_FOR_RESERVED_REQUEST EvtWdfIoAllocateResourcesForReservedRequest;

NTSTATUS EvtWdfIoAllocateResourcesForReservedRequest(
  [in] WDFQUEUE Queue,
  [in] WDFREQUEST Request
)
{...}

Параметры

[in] Queue

Дескриптор объекта очереди ввода-вывода.

[in] Request

Дескриптор объекта запроса, созданного платформой для использования в будущих ситуациях нехватки памяти.

Возвращаемое значение

Функция обратного вызова EvtIoAllocateResourcesForReservedRequest должна возвращать STATUS_SUCCESS или другое значение состояния, для которого NT_SUCCESS(status) равно TRUE , если функция не обнаруживает ошибок. В противном случае эта функция должна возвращать значение состояния, для которого NT_SUCCESS(status) равно FALSE.

Комментарии

Драйвер может зарегистрировать функцию обратного вызова EvtIoAllocateResourcesForReservedRequest при вызове WdfIoQueueAssignForwardProgressPolicy.

Если драйвер регистрирует функцию обратного вызова EvtIoAllocateResourcesForReservedRequest , платформа вызывает функцию сразу после создания объекта запроса, резервируемого для ситуаций с нехваткой памяти.

Функция обратного вызова может выделять ресурсы, которые потребуются драйверу для обработки запроса позже, если платформа использует зарезервированный запрос из-за нехватки памяти.

Чтобы выделить память для ресурсов, зависящих от запроса, функция обратного вызова EvtIoAllocateResourcesForReservedRequest может вызвать WdfObjectAllocateContext, указав дескриптор объекта запроса, заданный параметром Request .

Кроме того, драйвер может вызывать WdfDeviceInitSetRequestAttributes перед вызовом WdfDeviceCreate. В результате платформа будет выделять контекстное пространство для каждого зарезервированного объекта запроса при создании объекта .

Если драйвер выделяет пространство контекста объекта для зарезервированных объектов запроса, драйвер должен повторно инициализировать контекстное пространство после завершения запроса ввода-вывода, использующего зарезервированный объект запроса. Платформа не повторно инициализирует контекстное пространство зарезервированных объектов запроса после использования.

Если драйвер вызывает WdfDeviceInitSetRequestAttributes и задает функцию обратного вызова EvtCleanupCallback или EvtDegradCallback для объектов запроса, платформа вызывает эти функции обратного вызова для зарезервированных объектов запроса только при удалении связанных очередей ввода-вывода.

Обработчики запросов драйвера могут вызывать WdfRequestIsReserved, чтобы определить, используются ли зарезервированные объекты запроса.

Дополнительные сведения об использовании контекстного пространства объектов см. в разделе Пространство контекста объектов платформы.

Если функция обратного вызова успешно выделяет ресурсы, она должна вернуть STATUS_SUCCESS.

Если возникает ошибка выделения ресурсов, например при нехватке памяти, функция обратного вызова должна возвращать значение состояния ошибки. В этом случае платформа прекращает выделение зарезервированных объектов запроса и использует возвращаемое значение функции обратного вызова в качестве возвращаемого значения для WdfIoQueueAssignForwardProgressPolicy.

Дополнительные сведения о функции обратного вызова EvtIoAllocateResourcesForReservedRequest см. в разделе Обеспечение прямого хода выполнения операций ввода-вывода.

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,9
Верхняя часть wdfio.h (включая Wdf.h)
IRQL <=DISPATCH_LEVEL

См. также раздел

EvtIoAllocateRequestResources

WdfIoQueueAssignForwardProgressPolicy

WdfRequestIsReserved