来自MMC Snap-In的新AppDomain不会获得UAC的提升权限

时间:2010-01-28 17:30:15

标签: windows uac registry mmc

我创建了一个MMC snap,它在新的appdomain中启动代码,部分代码检查注册表项。如果我在快照进程中检查密钥它是否有效,但新appdomain中的代码会引发安全性异常。如果我从控制台或Windows应用程序加载新的应用程序域中的代码,它可以正常工作。

以下是代码:

public class SimpleMMCSnapIn : SnapIn  
{  
    public SimpleMMCSnapIn()
    {
        RegistryKey archerKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft", true); //this call works

        Evidence baseEv = AppDomain.CurrentDomain.Evidence;
        Evidence newEv = new Evidence(baseEv);

        AppDomainSetup setup = new AppDomainSetup { ApplicationBase = "<pathtobin>" };

        AppDomain domain = AppDomain.CreateDomain("MigratorDomain", newEv, setup);
        domain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

        IWork migrator = (IWork)domain.CreateInstanceAndUnwrap("CheckRegistry", "CheckRegistry.CheckRegistry");

        migrator.Work();
    }
}

[Serializable]  
public class CheckRegistry : MarshalByRefObject, IWork  
{  
    public void Work()  
    {  
        RegistryKey archerKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft", true); //this call throws a security exception
    }  
}

请注意,如果我从控制台或Windows应用程序加载新应用程序域中的代码,它可以正常工作。 我认为这更像是一个MMC管理问题,而不是UAC问题。

非常感谢任何见解......

谢谢,

布拉德

1 个答案:

答案 0 :(得分:0)

如果您更改Work()方法,您会看到什么?

WindowsPrincipal user = (WindowsPrincipal)Thread.CurrentPrincipal;
if ( user.IsInRole(WindowsBuiltInRole.Administrator) )
{
    MessageBox.Show(string.Format("{0} is an Administrator", user.Identity.Name));
}
else
{
    MessageBox.Show(string.Format("{0} is NOT an Administrator", user.Identity.Name));
}