[已解决]遇到个验证windows密码的问题,请教各位朋友
本帖最后由 anythinging 于 2024-6-12 17:20 编辑一直用下面这段代码检验windows系统中的用户密码是否正确,忽然发现个问题,这段代码在域控制器上运行,无法成功较验密码总是提示密码错误,在非域控制器上运行正常。
已确认用户名、密码、域名肯定正确,
怀疑是需要调这2个参数,因为不明白含义,没能成功,请各位朋友帮忙看看。
'dword', 2, _ ; LOGON32_LOGON_INTERACTIVE
'dword', 0, _ ; LOGON32_PROVIDER_DEFAULT
Local $sUsername = 'aaa'
Local $sPassword = 'abc123'
Local $phToken = DllStructCreate("int")
Local $aRet = DllCall('advapi32.dll', 'bool', 'LogonUser', _
'str', $sUsername, _
'str', 'domain', _
'str', $sPassword, _
'dword', 2, _ ; LOGON32_LOGON_INTERACTIVE
'dword', 0, _ ; LOGON32_PROVIDER_DEFAULT
'ptr', DllStructGetPtr($phToken))
If Not @error And $aRet <> 0 Then
MsgBox(0, '', '密码正确!')
Else
MsgBox(0, '', '密码错误!')
EndIf
目前的进展:
反复测试发现,验证的域用户如果如果是管理员组的话,可以成功验证密码是否正确。
但如果是非管理员组如domain users组的话,不能验证成功。 加 #RequireAdmin 有效吗 afan 发表于 2024-6-12 16:54
加 #RequireAdmin 有效吗
无效,不过我好象弄出来了,应该是怀疑的那2个选项的问题,目前好象一个一个试出来了 解决方法:
必需=3 'dword', 3, _ ; LOGON32_LOGON_INTERACTIVE
=0-3都可以'dword', 0, _ ; LOGON32_PROVIDER_DEFAULT
这个是参考文档,https://learn.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-logonusera
3应该对映的是LOGON32_LOGON_NETWORK,如果不用3,而是用"LOGON32_LOGON_NETWORK"不知如何代入到代码中?
这么快就解决了吗?高手啊! 感谢回复,也给后来的人留个标记。
楼主好人呀 anythinging 发表于 2024-6-12 18:11
感谢回复,也给后来的人留个标记。
是的,后来有需要的可以查,方便,少折腾
页:
[1]