Определите, какой процесс (б) блокирует файл программно (в Windows ›= XP)

Как программно определить из процесса P, какой другой процесс P 'имеет блокировку файла, которая не позволяет P воссоздать этот файл?

Я знаю, что для этого есть инструменты, но как они этого достигают?

(Контекст: пакетная программа, работающая в течение ночи, дает сбой из-за заблокированного файла. Запуск инструмента администратора на следующий день может быть слишком поздно для получения полезной информации. Так что было бы неплохо, если бы пакетная программа сама смогла определить виновника.)

РЕДАКТИРОВАТЬ: добавлена ​​сложность: файл находится в DFS, и P 'может не работать на том же компьютере, что и P (но, возможно, работает). Но решение, которое работает локально, было бы хорошим началом.


person user192472    schedule 07.01.2010    source источник
comment
Проблема, конечно, в том, что если файл удален, фактическая блокировка будет удерживаться там серверным процессом (вероятно, CSRSS.EXE)   -  person MSalters    schedule 07.01.2010
comment
любое решение с полным исходным кодом?   -  person Kiquenet    schedule 11.08.2012