Click here to Skip to main content
15,879,095 members
Articles / Programming Languages / C#

NT Security Classes for .NET

Rate me:
Please Sign up or sign in to vote.
4.78/5 (33 votes)
19 Feb 2004CPOL2 min read 376.8K   3.9K   75  
A collection of .NET classes written in Managed C++ that faciliate the manipulation of NT security rights
using System;
using mmsseclib;

namespace TestSec
{
	/// <summary>
	/// Summary description for Class1.
	/// </summary>
	class TestSec
	{
		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main(string[] args)
		{
			// Test WindowsUser
			WindowsUser user = WindowsUser.CurrentUser;
			Console.WriteLine("{0} ({1})", user.FullName, user.SidString);
			WindowsUser duser = new WindowsUser(System.Security.Principal.WindowsIdentity.GetCurrent().Token);
			Console.WriteLine(duser.FullName);
			if (user == duser)
				Console.WriteLine("Same");
			else
				Console.WriteLine("Different");
			user = WindowsUser.WellKnownIdentities.World;
			Console.WriteLine(user.FullName);
			WindowsUser kuser = new WindowsUser("user2", @"\\MYPDC");
			Console.WriteLine(kuser.FullName);
			user = new WindowsUser("DOMAIN\\user3");
			Console.WriteLine(user.FullName);
			user = new WindowsUser("S-1-5-21-21782756-1035017279-1439700725-1111");
			Console.WriteLine(user.FullName);

			// Test SecuredObject
			SecuredObject sec = new SecuredObject("C:\\", SecuredObjectType.FileObject);
			DumpObject(sec);

			sec.Permissions.SetAccess(kuser, AccessRights.FileRead, AceInheritanceFlags.ContainerInherit|AceInheritanceFlags.ObjectInherit);
			sec.Permissions.GrantAccess(kuser, AccessRights.FileExecute, AceInheritanceFlags.ContainerInherit|AceInheritanceFlags.ObjectInherit);
			sec.Permissions.DenyAccess(kuser, AccessRights.FileWriteUnsync, AceInheritanceFlags.ContainerInherit|AceInheritanceFlags.ObjectInherit);
			WindowsUser owner = sec.Owner;
			sec.Owner = duser;
			sec.Auditing.SetAuditFailure(duser, AccessRights.FileReadUnsync, AceInheritanceFlags.ContainerInherit|AceInheritanceFlags.ObjectInherit);
			DumpObject(sec);

			sec.Permissions.RevokeAccess(kuser);
			sec.Owner = owner;
			DumpObject(sec) ;

			sec.Permissions.Clear();
			sec.Permissions.InheritFromParent = true;
			DumpObject(sec);

			Console.WriteLine(sec.ToString());
		}

		static void DumpObject(SecuredObject sec)
		{
			Console.WriteLine("Security description:");
			Console.WriteLine("=====================");
			Console.WriteLine("Owner: {0}\nGroup: {1}", sec.Owner.FullName, sec.Group.FullName);
			Console.WriteLine("Permissions:");
			foreach (AccessEntry ace in sec.Permissions)
				Console.WriteLine(String.Format("  {0} : {1} : {2}", ace.Trustee.FullName, ace.Inheritance, ace.Rights));
			Console.WriteLine("Auditing:");
			foreach (AccessEntry ace in sec.Auditing)
				Console.WriteLine(String.Format("  {0} : {1} : {2}", ace.Trustee.FullName, ace.Inheritance, ace.Rights));
		}
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Chief Technology Officer
United States United States
I have been a Windows software developer since 1991. Most of what I create fills the need for some aspect of bigger projects that I consult on.

Comments and Discussions