簡體   English   中英

如何在不使用P / Invoke或反射的情況下在.NET中啟用SeCreateGlobalPrivilege?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM