| Предыдущий | Следующий |
| STATUS_NONEXISTENT_SECTOR | STATUS_NO_MEMORY |
STATUS_MORE_PROCESSING_REQUIRED
Завершение IRP намеренно приостановлено
В процедуре завершения WDM это состояние предписывает диспетчеру ввода-вывода остановить разворачивание завершения по оставшейся части стека драйверов. Вернувший его драйвер теперь отвечает за следующее действие: ожидание, проверку результатов, повторное использование или освобождение выделенного драйвером IRP либо последующий вызов IoCompleteRequest для исходного IRP.
Его нельзя трактовать как обычную ошибку и бездумно сохранять в Irp->IoStatus.Status. Это управляющее значение процедуры завершения. Возврат без ясного пути владения приводит к утечке или зависанию IRP; завершение или освобождение IRP с последующим продолжением обычного завершения создаёт двойное завершение.
Что проверить
- Запишите, какая процедура завершения остановила разворачивание и кто владеет IRP после её возврата.
- Сохраняйте и передавайте состояние ожидания в соответствии с
Irp->PendingReturned. - Не обращайтесь к IRP после того, как
IoCompleteRequestсделала его недоступным. - Убедитесь, что каждая ветвь остановки завершения в итоге ровно один раз освобождает IRP или возобновляет его завершение.
Ссылки
- Открытые спецификации Microsoft: значения NTSTATUS
- Microsoft WDK: различные способы обработки IRP
- Microsoft WDK: завершение IRP в диспетчерской процедуре
- Microsoft WDK: IoMarkIrpPending
Нужно найти другой код? Найти другой код состояния или ошибки.