Как включить SeCreateGlobalPrivilege в.NET, не прибегая к P/Invoke или рефлексии?
Моя привязка WCF net.pipe не работает, когда сервер работает без повышенных прав. Этот блог помог мне найти ответ - http://weblogs.thinktecture.com/cweyer/2007/12/dealing-with-os-privilege-issues-in-wcf-named-pipes-scenarios.html
Итак, я добавил привилегию SeCreateGlobalPrivilege соответствующему пользователю без прав администратора, но теперь я должен включить эту привилегию программно в.NET
Теперь в Интернете есть несколько примеров, как это сделать в.NET, но все они по существу переписывают простой C-код в C# с помощью P/Invoke.
Я хотел бы знать, как это сделать, используя специальные типы систем.NET, такие как ObjectSecurity, Privilege и т. Д., Чтобы мой код не выполнял P/Invoke - пусть системный код сделает это за меня.
Является ли это возможным?
Благодарю.
EDIT1
Что заставляет меня думать, что это возможно? Ну, я искал использование API AdjustTokenPrivileges P / Inovke в.NET с помощью Reflector и обнаружил, что есть метод ObjectSecurity.Persist, который в конечном итоге вызывает этот P/Invoke. Далее, у этого ObjectSecurity есть один защищенный конструктор, что означает, что для кода, не являющегося MS, возможно извлечь его из него и вызвать этот метод.
Таким образом, это представляется возможным с использованием безопасного для типов кода.NET (т.е. без отражения).
1 ответ
Если вы не хотите использовать 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);
Я не уверен, что это действительно лучше, потому что это более или менее взлом, не поддерживается и т. Д., Но хорошо, это легко для ленивых парней:-)