Home
Browse all 647 examples
Download all 647 examples
Download sample chapters
Reviews
Errata
Acknowledgments
Links on .NET
Paradoxal Press

Buy directly from Paradoxal Press at $33.99 (Save 43%)



Category: Programming
Level: Beginner to seasoned
900 pages
ISBN-10 097661322-0
ISBN-13 978-097661322-0
$59.99 USA
$79.99 CANADA


Listing 6-14 extracted from chapter Security


Listing 6-13<     > Listing 6-15


This listing can be compiled with the command line:
csc.exe /target:exe Example_6_14.cs
Errors: 0 Warnings: 0


Example_6_14.cs
using System;
using System.Security.AccessControl;
using System.Security.Principal;
class Program {
   static void Main() {
      // Create a new security descriptor.
      CommonSecurityDescriptor csd = new CommonSecurityDescriptor(
                                         falsefalsestring.Empty); 
      DiscretionaryAcl dacl = csd.DiscretionaryAcl;
      // Add an ACE to its ACL.
      dacl.AddAccess(
         AccessControlType.Allow, // Allow OR Deny.
         WindowsIdentity.GetCurrent().Owner, // Current user. 
         0x00180000, // Mask: TakeOwnerShip AND Synchronize 
         //                         equivalent to
         //(int) MutexRights.TakeOwnership | (int) MutexRights.Synchronize
         InheritanceFlags.None,  // Disable ACE inheritance.
         PropagationFlags.None); 

      string sSDDL = csd.GetSddlForm( AccessControlSections.Owner );
      Console.WriteLine( "Security Descriptor : " + sSDDL );

      MutexSecurity mutexSec = new MutexSecurity();
      mutexSec.SetSecurityDescriptorSddlForm( sSDDL );
      AuthorizationRuleCollection aces = mutexSec.GetAccessRules(
                                      truetruetypeof(NTAccount));
      foreach AuthorizationRule ace in aces ) {
         if (ace is MutexAccessRule) {
            MutexAccessRule mutexAce = (MutexAccessRule)ace;
            Console.WriteLine( "-->SID : " + 
                               mutexAce.IdentityReference.Value );
            Console.WriteLine( "   Kind of access right : " +
                               mutexAce.AccessControlType.ToString());
            if (0xffffffff == (uint) mutexAce.MutexRights)
               Console.WriteLine( "   Full rights!" );
            else
               Console.WriteLine( "   Rights : " + 
                                  mutexAce.MutexRights.ToString());
         }
      }
   }
}	
Copyright Patrick Smacchia 2006 2007