Comment modifier le champ “S’applique à” sous les options d’audit de dossier par programme (.NET)

J’essaie de définir le champ “S’applique à” sous les options d’audit de dossier par programme. Dans MSDN, l’exemple de code utilisé utilise la classe FileSystemAuditRule pour append une nouvelle règle d’audit à un dossier. Il n’y a rien d’évident dans cette classe pour définir à quoi la règle d’audit particulière doit être appliquée.

C’est le code que j’utilise pour définir certaines permissions:

const ssortingng myFolder = @"S:\Temp\SomeFolderToAudit"; var account = new SecurityIdentifier(WellKnownSidType.WorldSid, null).Translate(typeof(NTAccount)); FileSecurity fSecurity = File.GetAccessControl(myFolder, AccessControlSections.Audit); fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, AuditFlags.Success)); File.SetAccessControl(myFolder, fSecurity); 

Cela crée bien les règles d’audit à l’exception de l’option en surbrillance ci-dessous: S'applique à l'option non définie

J’ai besoin de ceci pour être ” Ce dossier, sous-dossiers et fichiers ” par exemple ou autre chose que ” Ce dossier seulement “. Je ne veux pas parcourir tous les répertoires et tous les fichiers et y définir les mêmes règles d’audit. Je ne veux pas essayer de gérer l’inheritance non plus, les règles seront protégées contre cela. J’ai simplement besoin d’un moyen de définir cette option de préférence en utilisant du code managé (les invocations sont les bienvenues si c’est le seul moyen).

Merci d’avance pour toute aide.

Après un peu de sortingpotage, j’ai réussi à savoir comment définir le champ “S’applique à”. Vous devez utiliser une combinaison d’InheritanceFlags et de PropagationFlags lors de la création de votre object de règle d’audit.

Voici l’exemple de code (basé sur l’exemple de la question) qui vous montre les combinaisons de drapeaux et leurs résultats dans le champ “S’applique à”:

 // This folder only (default) fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.None, PropagationFlags.None, AuditFlags.Success)); // This folder and subfolders fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ContainerInherit, PropagationFlags.None, AuditFlags.Success)); // This folder and files fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ObjectInherit, PropagationFlags.None, AuditFlags.Success)); // This folder, subfolders and files fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AuditFlags.Success)); // Subfolders only fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AuditFlags.Success)); // Files only fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AuditFlags.Success)); // Subfolders and files only fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AuditFlags.Success)); 

Cette information et beaucoup plus sur le contrôle d’access peuvent être trouvées sur cette page très utile de Michael Taylor .