ВУЗ:
Составители:
58
3.15 Вызов функций завершения
За вызов всех функций завершения, установленных данным драйверов в
элементах стека ввода-вывода отвечает IoCompleteRequest. Схема вызова этих
функций показана на рисунке 3.6.
Рисунок 3.6 – Схема вызова функций завершения
На схеме показано, что после вызова функции IoCompleteRequest она
проверяет текущий элемент стека ввода-вывода на предмет наличия в нем
функции завершения, установленной драйвером высшего уровня. Если функция
не обнаружена, указатель стека смещается на один уровень вверх, и проверка
выполняется снова. Процесс проверки выполняется до
тех пор, пока не будет
найден элемент стека с установленной функцией завершения, или функция
IoCompleteRequest не достигнет вершины стека. Затем функция
IoCompleteRequest выполняет все необходимые действия (в том числе и
освобождение памяти, занимаемой IRP).
Если функция IoCompleteRequest находит позицию стека с указателем на
функцию завершения, она вызывает эту функцию и анализирует
код возврата.
Если код возврата не совпадает с
STATUS_MORE_PROCESSING_REQUIRED, IoCompleteRequest перемещает
3.15 Вызов функций завершения За вызов всех функций завершения, установленных данным драйверов в элементах стека ввода-вывода отвечает IoCompleteRequest. Схема вызова этих функций показана на рисунке 3.6. Рисунок 3.6 – Схема вызова функций завершения На схеме показано, что после вызова функции IoCompleteRequest она проверяет текущий элемент стека ввода-вывода на предмет наличия в нем функции завершения, установленной драйвером высшего уровня. Если функция не обнаружена, указатель стека смещается на один уровень вверх, и проверка выполняется снова. Процесс проверки выполняется до тех пор, пока не будет найден элемент стека с установленной функцией завершения, или функция IoCompleteRequest не достигнет вершины стека. Затем функция IoCompleteRequest выполняет все необходимые действия (в том числе и освобождение памяти, занимаемой IRP). Если функция IoCompleteRequest находит позицию стека с указателем на функцию завершения, она вызывает эту функцию и анализирует код возврата. Если код возврата не совпадает с STATUS_MORE_PROCESSING_REQUIRED, IoCompleteRequest перемещает 58
Страницы
- « первая
- ‹ предыдущая
- …
- 56
- 57
- 58
- 59
- 60
- …
- следующая ›
- последняя »