L’outil que je développe doit accorder des droits d’access “Contrôle total” à un fichier créé par celui-ci. Il doit être lu, modifié et supprimé de tous les comptes Windows et même des comptes futurs possibles. Cela pourrait-il être réalisé?
Je sais que je peux essayer ceci pour un SPECIFIC_USER:
FileSystemAccessRule rule = new FileSystemAccessRule(SPECIFIC_USER, FileSystemRights.FullControl, AccessControlType.Allow); FileSecurity fSecurity = File.GetAccessControl(filePath); fSecurity.SetAccessRule(rule); File.SetAccessControl(filePath, fSecurity);
Mais comment puis-je l’accorder à tous les utilisateurs? Et même des comptes futurs possibles? Si la dernière partie n’est pas possible, comment s’y prendre avec la première exigence?
Merci.
MODIFIER:
C’est le code qui a fonctionné pour moi. Tiré du lien du répondeur.
private bool GrantAccess(ssortingng fullPath) { DirectoryInfo dInfo = new DirectoryInfo(fullPath); DirectorySecurity dSecurity = dInfo.GetAccessControl(); dSecurity.AddAccessRule(new FileSystemAccessRule("everyone", FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow)); dInfo.SetAccessControl(dSecurity); return true; }
Notez le PropagationFlags.NoPropagateInherit
qui est requirejs (mentionné vers le dernier dans le lien). Il accorde même des privilèges à des comptes futurs.
Note aux personnes utilisant ceci.
Lorsque vous utilisez des chaînes littérales pour FileSystemAccessRule
, cela devrait être WellKnownSidType.WorldSid
au lieu de "everyone"
WellKnownSidType.WorldSid
"everyone"
.
La raison en est qu’il y a plusieurs langages Windows et que tout le monde ne s’applique qu’à ceux EN, donc pour l’espagnol, cela pourrait être “Todos” (ou autre chose).
using System.Security.AccessControl; using System.Security.Principal; using System.IO; private void GrantAccess(ssortingng fullPath) { DirectoryInfo dInfo = new DirectoryInfo(fullPath); DirectorySecurity dSecurity = dInfo.GetAccessControl(); dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow)); dInfo.SetAccessControl(dSecurity); }
Vous devrez donner le contrôle total au groupe “Tout le monde” sur la machine. J’ai trouvé cet article sur MSDN qui en parle.
J’espère que cela fonctionne pour toi.