手动加入iis_user用户并分配所有权限得到的结果和编程做的结果不一样
以下操作因为涉及到注册表的重要键,因此我最后将获取到的键写入到新建的键,否则会很危险,一旦更改失败就会导致无法进入系统。
我的代码:
/*
static class ComACLRights{
public const int COM_RIGHTS_EXECUTE= 1;
public const int COM_RIGHTS_EXECUTE_LOCAL = 2;
public const int COM_RIGHTS_EXECUTE_REMOTE = 4;
public const int COM_RIGHTS_ACTIVATE_LOCAL = 8;
public const int COM_RIGHTS_ACTIVATE_REMOTE = 16;
}
*/
DiscretionaryAcl acl;
var localSystem = new SecurityIdentifier("S-1-5-32-568"); //这个就是iis_user的安全id编码,所有机器应该都一样的,至少win7上都一样,和机器无关。
var value = Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Ole", "DefaultLaunchPermission", null); // b2
CommonSecurityDescriptor cd = new CommonSecurityDescriptor(false, false, value as byte[], 0);
string debugstr = "All:" + cd.GetSddlForm(AccessControlSections.All) + " Access:" + cd.GetSddlForm(AccessControlSections.Access); //debugstr[2]
acl.AddAccess(AccessControlType.Allow, localSystem, 31, InheritanceFlags.None, PropagationFlags.None); //31是所有权限的叠加值,可以看看上面注释掉的那几行
cd.DiscretionaryAcl = acl;
debugstr = "All:" + cd.GetSddlForm(AccessControlSections.All) + " Access:" + cd.GetSddlForm(AccessControlSections.Access); //debugstr[1]
cd.GetBinaryForm(binaryform, 0);
Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Ole", "test", binaryform, RegistryValueKind.Binary);//b1(save data in a different key, so as to proectect the OS)
首先,我确保未添加iis_user并分配任何权限,然后运行代码得到debugstr[2],并记下操作后的注册表的值b1。
然后,我在手动在windows自带程序添加iis_user并分配权限,然后打开注册表记下当前值b2,接着运行代码并下断点在获得debugstr[1]后。
经过以上操作,我发现 debugstr[1]和debugstr[2]是相同的,但是b1和b2的值是不同的,请问大家知道这个该怎么解决么?
ps:1 我已经通过对比操作前后的注册表确定该操作影响的只有那个defaultlaunchpermission键 2 我通过 Win+R->输入dcomcnfg后运行->展开 component service节点直到看到我的电脑->右键我的电脑选择属性->转到页签com 安全->看运行和激活***那个区域 ->点击编辑默认**.. 然后查看或更改当前涉及到的用户及其权限.