Как включить 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);

Я не уверен, что это действительно лучше, потому что это более или менее взлом, не поддерживается и т. Д., Но хорошо, это легко для ленивых парней:-)

Другие вопросы по тегам