Правило RequestCompleted (kmdf)
Правило RequestCompleted указывает, что для нефильтрованного драйвера каждый запрос, представленный в очередь ввода-вывода драйвера по умолчанию, должен быть завершен, если запрос не откладывается или не пересылается, или если вызывается WdfRequestStopAcknowledge .
Запрос ввода-вывода, представленный в очередь драйвера по умолчанию с помощью одной из функций обратного вызова очереди, должен быть завершен до выхода из функций обратного вызова запроса ввода-вывода, за исключением следующих случаев:
Запрос был отложен (например, в DPC или рабочем элементе). В этом случае можно использовать правило DeferredRequestCompleted .
Запрос был переадресован в целевой объект ввода-вывода или в другую очередь.
Запрос был доставлен в платформу (путем вызова WdfDeviceEnqueueRequest)
WdfRequestStopAcknowledge был вызван
Правило проверяется при выходе драйвера из следующих функций обратного вызова:
EvtIoStop, EvtCleanupCallback или EvtDegradCallback для очереди
EvtCleanupCallback или EvtDegradCallback для объекта файла
EvtFileClose, EvtFileCleanup, EvtDeviceSelfManagedIoSuspend, EvtDeviceSelfManagedIoFlush, EvtDeviceSelfManagedIoCleanup, EvtDeviceShutdownNotification, EvtDeviceSurpriseRemoval, EvtCleanupCallback или EvtDepilCallback для устройства
Функции обратного вызова очереди ввода-вывода для представления запроса: EvtIoDefault, EvtIoRead, EvtIoWrite, EvtIoDeviceControl и EvtIoInternalDeviceControl.
Модель драйвера: KMDF
Как тестировать
Во время компиляции |
---|
Запустите средство проверки статических драйверов и укажите правило RequestCompleted . Чтобы выполнить анализ кода, выполните следующие действия.
Дополнительные сведения см. в статье Использование средства проверки статических драйверов для поиска дефектов в драйверах. |
Применяется к
WdfDeviceEnqueueRequestWdfDmaTransactionInitializeWdfDmaTransactionInitializeUsingRequestWdfIoTargetSendInternalioctlOthersSynchronouslyWdfIoTargetSendInternalioctlSynchronouslyWdfIoTargetSendIoctlSynchronouslyWdfIoTargetSendReadSynchronouslyWdfIoTargetSendWriteSynchronouslyWdfRequestCompleteWdfRequestCompleteWithInformationWdfRequestCompleteWithPriorityBoostWdfRequestForwardToIoQueueWdfRequestMarkCancelableWdfRequestMarkCancelableExWdfRequestSendWdfRequestStopAcknowledgeWdfWorkItemEnqueue