Определите, у кого есть файл, открытый с помощью С#

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

В случае, если это имеет значение, у меня есть рабочие станции Windows, которые получают доступ к файлам на файловом сервере Linux через Samba. Мне нужна эта информация в программе, работающей на рабочих станциях.

Ответы

Ответ 1

У основных библиотек .NET нет никаких средств для этого.

И если я правильно вас понимаю, вы хотите знать с рабочей станции Windows A, у которой есть файлы, открытые в общем доступе к файлу Linux, и некоторые из этих пользователей с открытым файлом могут быть источником из других окон, если это так, тогда вы необходимо будет иметь службу на стороне Linux, которую вы можете запросить, чтобы вернуть ее на рабочую станцию ​​Windows.

На локальном компьютере это может быть достигнуто, но по крайней мере вам нужно будет взаимодействовать с OS API, например NtQueryInformationFile и NtQueryObject (оба официально не документированы) среди других. Инструменты, такие как монитор процесса, динамически устанавливают драйвер устройства для достижения уровня проверки, который они выполняют, и который будет только сообщать вам, какие локальные дескрипторы файлов открыты, каким пользователем.