2013-10-02 3 views
0

У меня есть приложение для форм Windows, которое будет запускаться как в доменах, так и в средах без домена (локального рабочего стола). Я пытаюсь понять, как работает защита Windows в этих разных средах. Мне нужно программно идентифицировать, когда пользователь Windows, выполняющий мое приложение в качестве администратора, который я предполагаю, отличается для домена и локальной среды (и, возможно, когда UAC находится под контролем?).Безопасность Windows и определение привилегий в .Net

Я также немного смущен относительно того, заменит ли UAC доменный журнал, если он включен?

Ожидается, что большинство удаленных пользователей продукта будут установлены в качестве локальных администраторов и ограничены UAC.

Как вы можете проверить права на этих условиях? (приложение vb.net, но C# тоже отлично - спасибо)

Cheers, Tim.

ответ

1
Public Function isWindowsAdministrator() As Boolean 
    My.User.InitializeWithWindowsUser() 
    If My.User.IsAuthenticated Then 
     If My.User.IsInRole(Microsoft.VisualBasic.ApplicationServices.BuiltInRole.Administrator) Then 
      Return True 
     End If 
    End If 
    Return False 
End Function 

Возможно, существует альтернатива nonVB/'pure' NET, я просто не знаю эквивалентов. Существует также способ проверить, может ли пользователь подняться до администратора, но это PInvoke, беспорядочная вещь win32 и фактически не поднимает, просто тесты.

UAC все еще будет всплывать, приведенное выше просто сообщит вам заранее, если пользователь может авторизоваться.

+0

спасибо за ваши решения. Я пробовал это, но пропустил «initializeWithWindowsUser» и, следовательно, не получил ответа. Я пытался получить имя пользователя и домен в Principal.WindowsIdentity и перейти оттуда. Я бы отметил ответ, но я нашел другое решение и получил его на работу, и я тоже хотел бы поделиться. Еще раз спасибо –

0

Vb.Net:

Public Function IsUserAnAdmin() As Boolean End Function

C#:

[DllImport ("shell32.dll")] общественности статической ехЬегп BOOL IsUserAnAdmin() ;

Как вы можете видеть, возвращает логическое значение, вызывая IsUserAnAdmin (вы, очевидно, можете использовать псевдоним). для ясности я считаю, что это работает во всех сценариях, о которых я упомянул, но я еще не полностью завершил тестирование своего домена .... но

+0

, что метод короткий и сладкий ... и устарел в пользу 'CheckTokenMembership'. Существует также проблема раздвоенных жетонов (некоторые из них убираются). Есть способ проверить это, но для этого требуется 3 или 4 сеанса и вызовы 'advapi32.dll'. Он очень тщательный и надежный, но мне не нравятся вызовы interop. Для простоты я предпочитаю опубликованную версию NET, и экземпляры, где она может потерпеть неудачу, не являются моей ошибкой. BTW «accept» не означает, что вы обещаете использовать ответ, просто чтобы он работал http://stackoverflow.com/about – Plutonix

Смежные вопросы