Форум: "Прочее";
Текущий архив: 2008.12.28;
Скачать: [xml.tar.bz2];
ВнизО пользе закрытия Handle`ов :) Найти похожие ветки
← →
Riply © (2008-11-01 12:16) [0]Здравствуйте !
Предистория.
При загрузке, драйвер открывает файл при помощи следующего вызова:
ZwCreateFile(...,
FILE_WRITE_DATA or FILE_READ_DATA or FILE_WRITE_ATTRIBUTES or SYNCHRONIZE,
..., FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ,
FILE_OPEN_IF, FILE_NON_DIRECTORY_FILE or FILE_SYNCHRONOUS_IO_NONALERT, ...);
Потратила кучу времени на попытку понять почему этот вызов возвращает STATUS_SHARING_VIOLATION.
(подопытный файл мой и, кроме меня, на него никто не покусяется :))
Кагого же было мое удивление, когда выяснилось, что "он используется другим приложением".
(Все мои "приложения" в этот момент времени закрыты).
Поиск злоумышленника (путем пробежки по открытым Handle`ам) дал нам его ProcessID - 4 :)
Перепроверка кода показала, что в одном из вариантов выгрузки драйвера,
возможно незакрытие Handle`а.
Иными словами получается, что даже после завершения нашего творения,
занятые им ресурсы могут оставаться в системе.
(про память-то я это знала, но с объектами не ожидала).
Результат: лично я заплатила за незакрытый Handle тремя часами своего собственного времени :)
← →
Сергей М. © (2008-11-01 12:32) [1]
> Riply © (01.11.08 12:16)
> после завершения нашего творения,
> занятые им ресурсы могут оставаться в системе
Под "системой" в этой ситуации будет фигурирует вполне конкретный процесс system.exe - именно в его контексте ты заняла файловый ресурс и получила хэндл этого ресурса. Поскольку ты по забывчивости или незнанию не удосужилась явно закрыть хэндл и "отпустить" ресурс, он так и останется занятым вплоть до завершения процесса system.exe.
Вот и все чудеса)
А про контексты исполнения кода драйверов режима ядра можно почитать, скажем, на http://www.wasm.ru/article.php?article=drvw2k01 или непосредственно у Соломона с Руссиновичем
← →
Сергей М. © (2008-11-01 12:34) [2]Удалено модератором
Примечание: Дубль...
← →
Riply © (2008-11-01 12:57) [3]> [1] Сергей М. © (01.11.08 12:32)
> ...
> Вот и все чудеса)
Да чудеса-то я осознала :)
Я вела к тому, что дорого приходиться платить (IMHO)
за неряшливость при написании кода :)
← →
Сергей М. © (2008-11-01 13:01) [4]
> дорого приходиться платить
Поди и BSOD"ами по ходу дела насладилась по самое нехочу ,)
← →
Rouse_ © (2008-11-01 13:01) [5]
> за неряшливость при написании кода
За неряшливость всегда приходится платить :) Хуже было если бы ты разрешила бы шаринг на запись, т.е. FILE_SHARE_READ | FILE_SHARE_WRITE - тогда не получила бы STATUS_SHARING_VIOLATION и продолжила бы писать не подозревая о ошибке в коде :)
ЗЫ: кстати а почему у тебя код такой? Ты на Дельфи чтоли драйвер пишешь?
← →
Сергей М. © (2008-11-01 13:07) [6]
> Riply © (01.11.08 12:57) [3]
Не пристало барышне быть неряхой)
← →
Riply © (2008-11-01 13:09) [7]> [4] Сергей М. © (01.11.08 13:01)
> Поди и BSOD"ами по ходу дела насладилась по самое нехочу ,)
Ну а как же без них-то ? :)
> [5] Rouse_ © (01.11.08 13:01)
> За неряшливость всегда приходится платить :) Хуже было если бы ты разрешила бы шаринг на запись, т.е. > FILE_SHARE_READ | FILE_SHARE_WRITE - тогда не получила бы STATUS_SHARING_VIOLATION и
> продолжила бы писать не подозревая о ошибке в коде :)
> ЗЫ: кстати а почему у тебя код такой? Ты на Дельфи чтоли драйвер пишешь?
Он у меня одновременно идет в трех вариантах: Delphi, C и
еще его подобие (эмуляция) в user-mode в жалкой попытке уменьшить количество BSOD"ов :)
← →
Riply © (2008-11-01 13:14) [8]> [6] Сергей М. © (01.11.08 13:07)
> Не пристало барышне быть неряхой)
Угу. Но пооправдываюсь:
просто я забыла его внести в битовую маску инициализированных объектов.
(я по ней определяюсь что надо создавать и освобожлать)
← →
Rouse_ © (2008-11-01 13:45) [9]
> Он у меня одновременно идет в трех вариантах: Delphi, C и еще его подобие
Стесняюсь спросить - а нафига? :)
← →
Riply © (2008-11-01 13:53) [10]> [9] Rouse_ © (01.11.08 13:45)
> Стесняюсь спросить - а нафига? :)
Эмулятор на Delphi, потому что здесь я себя свободнее чуствую.
С не так быстро и легко осваивается, как хотелось бы :(
Много досадных "опечаток".
Далее, эмулятор легче портировать на Delphi-драйвер для проверки.
Ну уж потом, с грехом попалам, переводим все на С.
Вот так обстоят дела на текущий момент :)
← →
Rouse_ © (2008-11-01 15:18) [11]Пиши сразу на С, незачем делать одну и ту-же работу 3 раза, да еще маятся с Дельфи "драйвером" бррр...
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2008.12.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c