![](/img/trans.png)
[英]How to get Linux file permissions in .NET 5 / .NET 6 without Mono.Posix with p/invoke?
[英]How to enable the SeCreateGlobalPrivilege in .NET without resorting to P/Invoke or reflection?
當服務器運行非提升時,我的net.pipe WCF綁定不起作用。 這個博客幫助我找到答案 - http://weblogs.thinktecture.com/cweyer/2007/12/dealing-with-os-privilege-issues-in-wcf-named-pipes-scenarios.html
因此,我將SeCreateGlobalPrivilege權限添加到相關的非管理員用戶,但現在我必須在.NET中以編程方式啟用該權限
現在,互聯網上有幾個例子如何在.NET中實現它,但它們都基本上用C / Invoke將普通C代碼重寫為C#。
我想知道如何使用專用的.NET系統類型,如ObjectSecurity,Privilege等,以便我的代碼不做任何P / Invoke - 讓系統代碼為我做。
可能嗎?
謝謝。
EDIT1
是什么讓我覺得有可能? 好吧,我使用Reflector搜索.NET中的AdjustTokenPrivileges P / Inovke API用法,發現有ObjectSecurity.Persist方法,最終調用此P / Invoke。 接下來,此ObjectSecurity具有一個受保護的構造函數,這意味着非MS代碼可以從中派生並調用此方法。
因此,使用類型安全的.NET代碼(即沒有反射)似乎是可行的。
如果您不想自己使用P / Invoke,您仍然可以使用內部System.Security.AccessControl.Privilege
類,使用Reflection機制,如下所示:
// => 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);
我不確定它真的更好,因為它或多或少是一個黑客,不支持等等,但好吧,這對懶人來說很容易:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.