Ottenere / impostare il proprietario del file in C #

Ho l’obbligo di leggere e visualizzare il proprietario di un file (a scopo di controllo) e potenzialmente di modificarlo (questo è un requisito secondario). Ci sono dei buoni wrapper in C #?

Dopo un rapido google, ho trovato solo la soluzione WMI e un suggerimento per PInvoke GetSecurityInfo

Non c’è bisogno di P / Invoke. System.IO.File.GetAccessControl restituirà un object FileSecurity , che ha un metodo GetOwner .

Modifica: leggere il proprietario è piuttosto semplice, anche se è un po ‘ingombrante dell’API:

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 

L’impostazione del proprietario richiede una chiamata a SetAccessControl per salvare le modifiche. Inoltre, sei ancora vincolato dalle regole di proprietà di Windows: non puoi assegnare la proprietà a un altro account. Puoi dare la proprietà di acquisto e devono assumerne la proprietà.

 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; }