| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Как узнать какой процесс заблокировал файл? |
| Автор: Free-lancer 19.11.2004, 13:20 |
| Привет, всем! Собственно тема отражает суть вопроса. У нас есть файл (handle или путь) и нужно узнать использует ли этот файл кто-нибудь, а если использует - то какие процессы. Увы я не нашел ничего подходящего в MSDN как со тороны файловых функций, так и со стороны процессов. |
| Автор: p0s0l 19.11.2004, 19:48 |
| Это вопрос не из простых, имхо... Если узнаешь - обязательно тут напиши... На SysInternals есть такие проги как HandleEx, ProcessExplorer... Судя по тому, что им нужны привилегии отладки и загрузки драйвера, похоже без вспомогательного мини-драйвера не обойтись... |
| Автор: Guest 21.11.2004, 22:15 |
| Я видел проги, которые "легко" отображают какие файлы используються каждым из запущенных процессов и я подумал, что может можно и с этой стороны подойти. Но, увы, я не смог найти какие-либо стандартные средства, которые бы позволяли определить какие именно ресурсы заняты процессом. Я весь Винда это както же делает. Как-то же она определяет, что данный файл занят и отказывает в доступе чужому процессу, а "своему" - разрешает. Т.е. должен быть какой-то API... вот только какой ???? |
| Автор: Kurt 21.11.2004, 23:44 |
| Да, вот и я подумал, возможно, существует какой-нибудь API.. |
| Автор: shedon 22.11.2004, 08:14 | ||
Не существует, а если и существует то это баг. Ед. что существует это функции на уровне ядра, а чтобы получить к ним доступ надо писать драйвер. |
| Автор: dim 11.12.2004, 15:13 |
| На самом деле такое API существует, правда только для NT-подобных систем (NT,2000,XP,2003,etc). Называется Native API и в числе прочих там насколько я помню есть функции которые позволяют получить список хендлов открытых процессом. |
| Автор: shedon 11.12.2004, 18:06 | ||
Native API - это так называемые базовые апи, которые в конечном счёте вызываются при вызове Win32API, но дело в том, что базовые апи нельзя вызывать из режима пользователя, они доступны только процессам режима ядра. |
| Автор: dim 13.12.2004, 19:16 | ||
Неверно, потому что можно - сам делал это из user mode. Kernel mode требуют функции RtlXXX, NtXXX, но они не входят в Native API. |
| Автор: Fixin 14.7.2006, 15:07 |
| Тему особо не читал, но может, вот http://wasm.ru/article.php?article=lockfileswork. |