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


Ошибки при выполнении операций очистки и закрытия

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

При вызове диспетчерских подпрограмм менеджер ввода-вывода содержит ссылку на объект файла для обычных вызовов ввода-вывода. В результате драйвер может получать запросы ввода-вывода для объекта файла после вызова подпрограммы DispatchCleanup , но до вызова подпрограммы DispatchClose . Например, вызывающий объект в пользовательском режиме может закрыть дескриптор файла, пока выполняется запрос диспетчера ввода-вывода из другого потока. Если драйвер удалил или освободил необходимые ресурсы, прежде чем диспетчер ввода-вывода вызывает свою подпрограмму DispatchClose , могут возникнуть недопустимые ссылки указателя и другие проблемы.