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


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

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

Если драйвер создал объект запроса, вызвав WdfRequestCreate или WdfRequestCreateFromIrp, он может повторно использовать запрос, вызвав WdfRequestReuse. Драйвер также может повторно использовать объекты запросов, полученные от платформы в очередях ввода-вывода, но не может изменить IRP, содержащийся в объекте полученного запроса.

Если избегать ситуаций, вызывающих неудачные возвращаемые значения, описанные в разделе WdfRequestReuse, драйвер может вызвать WdfRequestReuse из функции обратного вызова CompletionRoutine . (Функция обратного вызова CompletionRoutine имеет возвращаемое значение VOID и поэтому не может сообщать об ошибках.)

Если драйвер предоставляет функцию обратного вызова CompletionRoutine для объекта запроса, который он повторно использует, драйвер должен вызвать WdfRequestSetCompletionRoutine после вызова WdfRequestReuse.