【问题标题】:New AppDomain from MMC Snap-In does not get elevated privileges for UAC来自 MMC 管理单元的新 AppDomain 未获得 UAC 的提升权限
【发布时间】:2010-01-28 17:30:14
【问题描述】:

我创建了一个 MMC 管理单元,用于在新的 appdomain 中启动代码,并且部分代码会检查注册表项。如果我在 snap in 过程中检查密钥,它可以工作,但是新 appdomain 中的代码会引发安全异常。如果我从控制台或 Windows 应用程序将代码加载到新的 appdomain 中,它工作正常。

代码如下:

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 问题。

任何见解将不胜感激......

谢谢,

布拉德

【问题讨论】:

    标签: windows uac registry mmc


    【解决方案1】:

    如果您更改 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));
    }
    

    【讨论】:

    • 第一行:WindowsPrincipal user = (WindowsPrincipal)Thread.CurrentPrincipal;引发安全错误:请求“System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”类型的权限失败。
    猜你喜欢
    • 2014-05-04
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    相关资源
    最近更新 更多