мы используем этот код VB.NET внутри класса, так как много лет для тестирования, если данный пользователь является администратором (укорочен для ясности, проверка ошибок удалена):LogonUser в ОС Windows 8
Private Declare Auto Function LogonUser Lib "advapi32.dll" (ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal dwLogonType As UInteger, ByVal dwLogonProvider As UInteger, ByRef phToken As IntPtr) As Boolean
Private token As IntPtr
Private identity As WindowsIdentity
Private principal As WindowsPrincipal
LogonUser(username, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, token)
identity = New WindowsIdentity(token)
principal = New WindowsPrincipal(identity)
Return principal.IsInRole(ApplicationServices.BuiltInRole.Administrator)
Этот код возвращает True для учетных данных администратора. Этот код работает в Windows XP, Vista и Windows 7. Мы знаем о том, что этот код несовместим с включенным UAC. Поэтому, чтобы этот код работал в Windows Vista и 7, мы отключили UAC. Однако в Windows 8 даже при выключении UAC учетные данные администратора по-прежнему распознаются как ограниченный токен (часть BuiltInRole.User). Таким образом, мы не можем выдавать себя за администратора «identity.Impersonate».
Любые идеи, почему этот код был поврежден в Windows 8?
Спасибо Alex
Он был поврежден в Windows Vista. Требование, чтобы UAC был отключен, чтобы заставить ваше приложение работать, считается «сломанным». –
Ну, это не то, о чем я просил. Я хочу знать, почему этот код больше не работает в Windows 8 с выключенным UAC, потому что он отлично работает в Windows 7 (с выключенным UAC). – Alex
Как именно вы отключите UAC в Windows 8? Если UAC полностью отключен, приложения метро не будут работать должным образом. Если я правильно помню, использование пользовательского интерфейса панели управления не полностью отключает UAC. Приложения все еще работают без полного токена администратора. Почему вы не можете просто добавить манифест в свое приложение, которое указывает, что вам требуется повышение, как и все остальные? –