Вызов диалога безопасности Windows (в C # или VB.NET) - PullRequest
8 голосов
/ 16 февраля 2010

Я хотел бы знать, как программно вызывать диалоговое окно безопасности Windows (нажмите ctrl + alt + del на рабочей станции Windows ПРИМЕЧАНИЕ: мне не нужен диспетчер задач! ) программно.

На рабочей станции XP, не беспокойтесь о Win7 или Vista

В идеале с быстрым примером в C # (или VB.NET, если необходимо)

Я искал многие библиотеки DLL, такие как msgina.dll, и нигде не могу их найти!

В качестве альтернативы было бы просто вызвать экран смены пароля!

Ответы [ 5 ]

2 голосов
/ 20 февраля 2010

Функции безопасности могут мешать программному управлению функциями безопасности, такими как диалог безопасности, через Ctrl Alt Del . Я сталкивался с такими же проблемами.

О вашем запросе на вызов диалоговое окно смены пароля .

IADsUser

" предназначен для представления и управления учетной записью конечного пользователя в сети [и локально]. "

Если вам не хватает решений, вы можете создать свою собственную быструю форму Windows с полями пароля и связаться с Windows Интерфейс IADsUser , используя поставщика WinNT для привязки к учетная запись локального (вместо сетевого) пользователя на компьютере с XP.

GetObject("WinNT://MYCOMPUTER/jeffsmith,user") //WinNT provider

... и использовать метод ChangePassword (..) (ссылки на образец кода).

usr.ChangePassword szOldPass, szNewPass

Если вы пытаетесь вызвать функции Windows напрямую, чтобы заставить пользователя доверять процессу, то, по общему признанию, настраиваемая форма для смены пароля может выглядеть немного глупой.

RunDLL32

Другой способ, которым вы можете воспользоваться, - это программный вызов RunDLL32.exe из командной строки и выбор нужной Win DLL для вызова диалогового окна смены пароля. Один форум сказал, что в XP работает следующее, если SP2 не установлен. Я не могу проверить это, потому что я на Vista.

rundll32.exe shell32.dll,Control_RunDLL password.cpl

Вы можете Google для многих из них , однако кажется, что это не дотягивает до смены пароля или вызова диалогового окна безопасности Windows.

Информация Microsoft о Run32Dll

2 голосов
/ 16 февраля 2010

Вы можете попробовать вызвать функцию WlxLoggedOnSAS из GINA или WlxSasNotify из WinLogon. Но, боюсь, это не сработает. Но, возможно, это приведет вас к рабочему методу. И это определенно не будет работать в Vista / W7.

С другой стороны, возможно, что Windows Security Dialog может вызываться только с помощью безопасной последовательности внимания (ctrl + alt + del) по причинам securytt.

0 голосов
/ 08 октября 2013

Это обходной путь, который я нашел на другом форуме. У меня это работает.

Private Function IsRunAsAdministrator() As Boolean

    Dim wi = WindowsIdentity.GetCurrent()
    Dim wp = New WindowsPrincipal(wi)

    Return wp.IsInRole(WindowsBuiltInRole.Administrator)

End Function

'Я использую его при загрузке формы, вы можете иметь его при необходимости

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    If Not IsRunAsAdministrator() Then
        Dim processInfo = New ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase)
        processInfo.UseShellExecute = True
        processInfo.Verb = "runas"
        Try

            Process.Start(processInfo)

        Catch ew1 As Exception
            MessageBox.Show("Sorry, this application must be run as Administrator.")
        End Try
        'Application.Current.Shutdown()
        Application.ExitThread()
    Else
   'your statement here
  End If
End Sub
0 голосов
/ 16 февраля 2010

Я хотел бы представить что-то вроде этого, получить дескриптор рабочего стола, используя ' GetDesktopWindow ', убедиться, что фокус установлен на дескриптор, и отправить нажатие клавиши 'Ctrl + Alt + Del' ' SendInput ' или используйте ' SendMessage ' для отправки нажатий клавиш на этот дескриптор, возвращаемый GetDesktopWindow. Не гарантируется работа, так как это топ-голова-мой.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

0 голосов
/ 16 февраля 2010

Возможно, вы захотите взглянуть на хук SendInput в User32: http://msdn.microsoft.com/en-us/library/ms646310(VS.85).aspx а также http://pinvoke.net/default.aspx/user32/SendInput.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...