Проверьте, заблокирован ли файл дескриптором файла процесса

Учитывая, что у меня есть список всех файловых дескрипторов всех процессов, как я могу узнать, какие из этих дескрипторов фактически блокируют файл?

Из того, что я понимаю, я мог бы просто попытаться открыть файлы и попытаться получить все разрешения, и если что-то пойдет не так, я знаю, что оно заблокировано. Но это звучит крайне неэффективно. Я имею в виду, что у меня уже есть дескрипторы. Нет ли способа проверить, какие разрешения у дескрипторов?

Желательно, чтобы я увидел решение, которое работает на Windows XP и выше.

Я уже искал через GetFileInformationByHandleEx функция, но я не мог найти что-нибудь о правах доступа. : /

Редактировать:
Мне не нужна информация в режиме реального времени о блокировке файла. Файлы, над которыми я планирую работать, будут либо заблокированы до тех пор, пока определенные приложения не будут закрыты, либо не будут заблокированы вообще.

3

Решение

Этот вопрос является дубликатом Win32 файлы заблокированы для чтения: как узнать, кто их блокирует.

Кроме того, комментарий Ханса Пассанта правильный: запрос заблокированного состояния любого файла Win32 дает устаревшую информацию. Пренебрежение этим предупреждением приведет к появлению труднодоступных ошибок.

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

1

Другие решения

Ты можешь использовать NtQueryObject API для получения информации о дескрипторе, включая следующее:

ULONG Attributes;
ACCESS_MASK GrantedAccess;

Или вы можете получить доступ к той же информации, используя NtQueryInformationFile с помощью FileModeInformation а также FileAccessInformation значения для FileInformationClass параметр.

0

По вопросам рекламы [email protected]