在操作系统中,资源(如文件和注册表,以及命名管道的句柄)都使用访问控制列表(ACL)来保护。如下图这个映射的结构。资源有一个关联的安全描述符。安全描述符包含了资源拥有者的信息,并引用了两个访问控制列表:自由访问控制列表(DACL)和系统访问控制列表(SACL)。DACL用来确定谁有访问权:SACL用来确定安全事件日志的审核规则。ACL包含一个访问控制项(ACE)列表。ACE包含类型,安全标示和权限。在DACL中,ACE的类型可以是允许访问或拒绝访问。可以用文件设置和获得的权限是创建,读取,写入,删除,修改,改变许可和获得拥有权。
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main(string[] args)
{
string filename = null;
if (args.Length == 0)
return;
filename = args[0];
using (FileStream stream=File.Open(filename,FileMode.Open))
{
FileSecurity securityDescripto = stream.GetAccessControl();
AuthorizationRuleCollection rules=securityDescripto.GetAccessRules(true,true,typeof(NTAccount));
foreach (AuthorizationRule rule in rules)
{
var fileRule = rule as FileSystemAccessRule;
Console.WriteLine("Access type:{0}",fileRule.AccessControlType);
Console.WriteLine("Rights:{0}", fileRule.FileSystemRights);
Console.WriteLine("Identity:{0}", fileRule.IdentityReference.Value);
Console.WriteLine("");
}
}
Console.ReadKey();
}
运行应用程序,并传递一个文件名,就可以看到文件的访问控制列表。这里输出管理员和系统的全部控制权限,通过身份验证的用户的修改权限,以及属于Users组所有用户的读取和执行权限。
在使用CMD打开exe文件是需要使用的命令指令有:CD(打开文件夹) START(开始某个程序,及闯入参数)
运行结果: