C # получить владельца файла в Windows

Я хочу получить владельца файла, используя приведенный ниже код

File.GetAccessControl(filename).GetOwner(typeof(SecurityIdentifier)).Translate(typeof(NTAccount))

Однако он дает мне BUILTIN \ Administrators как владельца, но я вижу в проводнике файлов, что владельцем является Domain \ MyUserName.

Почему это происходит и как это исправить?

Изменить: Эта ссылка объясняет, что произошло. Это связано с файлами, созданными пользователями в группе администраторов, и с тем, как Windows обрабатывает владельца этих файлов.


person Helic    schedule 31.07.2015    source источник
comment
stackoverflow.com/questions/3370146/   -  person Chandrashekar Jupalli    schedule 31.07.2015
comment
Это все еще неверно, если вы делаете NTAccount ntAccount = File.GetAccessControl(filename).GetOwner(typeof(SecurityIdentifier)).Translate(typeof(NTAccount)) as NTAccount;   -  person 3dd    schedule 31.07.2015
comment
@ 3dd по-прежнему дает мне администраторов, но ссылка, опубликованная Чандрашекаром Джупалли, объясняет, почему. Это связано с моей привилегией администратора и тем, как Windows обрабатывает файл, созданный администраторами.   -  person Helic    schedule 31.07.2015
comment
@Helic - Я пробовал ваш код прямо сейчас, и он всегда возвращает правильный NTAccount для всех файлов, которые я пробовал (локально и на сетевых дисках). Хоть я и в админке ...   -  person Herdo    schedule 31.07.2015
comment
@Herdo, это странно, позволь мне попробовать с гостевой учетной записью   -  person Helic    schedule 31.07.2015
comment
@ Helic Конечно. Возможно, существует другая обработка для группы локальных администраторов и группы администраторов ADS. Также могут быть различия в настройках ОС и ADS, которые вызывают у вас эту проблему. Очевидно, что в сети моей компании, на моем ПК с Windows 8.0, он работает правильно.   -  person Herdo    schedule 31.07.2015


Ответы (1)


Я смог получить фактического владельца файла с помощью этого ... не уверен, что это то, что вам нужно или нет. System.IO.FileInfo Fi = new System.IO.FileInfo(@"path2file");

MessageBox.Show(Fi.GetAccessControl().GetOwner(typeof(System.Security.Principal.SecurityIdentifier)).Translate(typeof(System.Security.Principal.NTAccount)).ToString());

person Dustin    schedule 05.08.2015