Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1226862680
Лешка
2008-11-16 22:11
2008.12.28
Картинка из интернета


15-1225539231
Кое кто
2008-11-01 14:33
2008.12.28
Где можно посмотреть модели очень


15-1225269411
Програмист
2008-10-29 11:36
2008.12.28
EhLibEdit, EhLibCombobox, свойство Flat


2-1227115460
june29
2008-11-19 20:24
2008.12.28
Проблеммы с компилятором


2-1226565058
дед Маздай
2008-11-13 11:30
2008.12.28
Посылка строки из TThread в основной поток





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский