функция обратного вызова 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 |