是否有可能像Windows在UAC提示窗口中要求输入用户名和密码一样,制作一个安全的登录提示框(powershell或C#),并且除非您在字段中输入凭据,否则不能将其最小化。
以下是一个简单的ps1脚本,要求提供凭据,但不能以安全的方式完成,因为您知道会强制用户提供凭据并锁定所有其他窗口(如UAC登录提示)。
我知道可以通过$form.TopMost = $True
完成此操作,但是我不希望使用此属性。
[int]$cnt = 1
while ( $cnt -lt '1000000000' ) {
$user = [Environment]::UserName
$domain = [Environment]::UserDomainName
$credentials = $Host.UI.PromptForCredential('windows update','',$user,[Environment]::UserDomainName)
$pass = $credentials.getnetworkcredential().password
Add-Type -assemblyname system.DirectoryServices.AccountManagement
$localMachine = New-Object System.DirectoryServices.AccountManagement.PrincipalContext([System.DirectoryServices.AccountManagement.ContextType]::Machine)
$credtest = $localMachine.ValidateCredentials($user,$pass)
if ( $credtest -eq $false ) {
Add-Type -assemblyname System.Windows.Forms
$choice = [System.Windows.Forms.MessageBox]::Show("Authentication failed! Please enter correct password", "Reconnection Attempt Failed!", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Warning)
}
else {
break
}
$cnt++
}
答案 0 :(得分:0)
UAC提示不只是“锁定所有其他窗口”,它实际上显示在其他桌面上,在该桌面上没有其他用户代码可以运行。这样可以防止恶意脚本/应用程序向提示发送Windows消息,例如可能违反用户的意愿接受提示。
可以将UAC强制设置为use the user's normal desktop,但这比默认设置安全性低,通常仅在由于切换而导致图形出现问题时使用。
因此,尽管您可以在自定义登录提示中“锁定”其他窗口,但不会像UAC一样丢失“安全登录提示框”,因为它缺少了桌面的关键要素切换。