Không cần phải P/Invoke. System.IO.File.GetAccessControl sẽ trả về đối tượng FileSecurity, có phương thức GetOwner.
Edit: Đọc sách chủ sở hữu là khá đơn giản, mặc dù đó là một chút của một API cồng kềnh:
const string FILE = @"C:\test.txt";
var fs = File.GetAccessControl(FILE);
var sid = fs.GetOwner(typeof(SecurityIdentifier));
Console.WriteLine(sid); // SID
var ntAccount = sid.Translate(typeof(NTAccount));
Console.WriteLine(ntAccount); // DOMAIN\username
Thiết chủ sở hữu đòi hỏi một cuộc gọi đến SetAccessControl để lưu thay đổi. Ngoài ra, bạn vẫn bị ràng buộc bởi các quy tắc sở hữu Windows - bạn không thể chỉ định quyền sở hữu cho một tài khoản khác. Bạn có thể trao quyền sở hữu, và họ phải sở hữu.
var ntAccount = new NTAccount("DOMAIN", "username");
fs.SetOwner(ntAccount);
try {
File.SetAccessControl(FILE, fs);
} catch (InvalidOperationException ex) {
Console.WriteLine("You cannot assign ownership to that user." +
"Either you don't have TakeOwnership permissions, or it is not your user account."
);
throw;
}
Nguồn
2008-09-30 14:04:18
Xem thêm http://stackoverflow.com/questions/5241718/taking-ownership-of-files-with-broken-permissions và http://stackoverflow.com/questions/5368825/taking-ownership- of-a-file-or-folder –