Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Как узнать какой процесс заблокировал файл?


Автор: Free-lancer 19.11.2004, 13:20
Привет, всем!

Собственно тема отражает суть вопроса. У нас есть файл (handle или путь) и нужно узнать использует ли этот файл кто-нибудь, а если использует - то какие процессы.

Увы я не нашел ничего подходящего в MSDN как со тороны файловых функций, так и со стороны процессов.

Автор: p0s0l 19.11.2004, 19:48
Это вопрос не из простых, имхо... Если узнаешь - обязательно тут напиши...
На SysInternals есть такие проги как HandleEx, ProcessExplorer...
Судя по тому, что им нужны привилегии отладки и загрузки драйвера, похоже без вспомогательного мини-драйвера не обойтись... smile

Автор: Guest 21.11.2004, 22:15
Я видел проги, которые "легко" отображают какие файлы используються каждым из запущенных процессов и я подумал, что может можно и с этой стороны подойти. Но, увы, я не смог найти какие-либо стандартные средства, которые бы позволяли определить какие именно ресурсы заняты процессом.

Я весь Винда это както же делает. Как-то же она определяет, что данный файл занят и отказывает в доступе чужому процессу, а "своему" - разрешает. Т.е. должен быть какой-то API... вот только какой ????

Автор: Kurt 21.11.2004, 23:44
Да, вот и я подумал, возможно, существует какой-нибудь API..

Автор: shedon 22.11.2004, 08:14
Цитата(Kurt @ 21.11.2004, 20:44)
Да, вот и я подумал, возможно, существует какой-нибудь API..

Не существует, а если и существует то это баг. Ед. что существует это функции на уровне ядра, а чтобы получить к ним доступ надо писать драйвер.

Автор: dim 11.12.2004, 15:13
На самом деле такое API существует, правда только для NT-подобных систем (NT,2000,XP,2003,etc). Называется Native API и в числе прочих там насколько я помню есть функции которые позволяют получить список хендлов открытых процессом.

Автор: shedon 11.12.2004, 18:06
Цитата(dim @ 11.12.2004, 12:13)
На самом деле такое API существует, правда только для NT-подобных систем (NT,2000,XP,2003,etc). Называется Native API и в числе прочих там насколько я помню есть функции которые позволяют получить список хендлов открытых процессом.

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. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)