当服务器运行非提升时,我的net.pipe WCF绑定不起作用。这个博客帮助我找到答案 - http://weblogs.thinktecture.com/cweyer/2007/12/dealing-with-os-privilege-issues-in-wcf-named-pipes-scenarios.html
所以,我将SeCreateGlobalPrivilege权限添加到相关的非管理员用户,但现在我必须在.NET中以编程方式启用该权限
现在,在互联网上有几个例子如何在.NET中实现它,但它们都基本上用P / Invoke将普通的C代码重写为C#。
我希望知道如何使用专用的.NET系统类型,比如ObjectSecurity,Privilege等,这样我的代码就不会做任何P / Invoke - 让系统代码为我做。
有可能吗?
感谢。
EDIT1
是什么让我觉得有可能?好吧,我使用Reflector搜索.NET中的AdjustTokenPrivileges P / Inovke API用法,发现有ObjectSecurity.Persist方法,最终调用此P / Invoke。接下来,此ObjectSecurity有一个受保护的构造函数,这意味着非MS代码可以从中派生并调用此方法。
因此,使用类型安全的.NET代码(即没有反射)似乎是可行的。
答案 0 :(得分:5)
如果您不想自己使用P / Invoke,您仍然可以使用内部System.Security.AccessControl.Privilege
类,使用反射机制,如下所示:
// => privilege = new Privilege("SeCreateGlobalPrivilege");
Type privilegeType = Type.GetType("System.Security.AccessControl.Privilege");
object privilege = Activator.CreateInstance(privilegeType, "SeCreateGlobalPrivilege");
// => privilege.Enable();
privilegeType.GetMethod("Enable").Invoke(privilege, null);
// => privilege.Revert();
privilegeType.GetMethod("Revert").Invoke(privilege, null);
我不确定它真的更好,因为它或多或少是一个黑客,不支持等等,但好吧,这对懒人来说很容易: - )