anythinging 发表于 2024-6-12 15:41:29

[已解决]遇到个验证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

anythinging 发表于 2024-6-12 16:49:09

目前的进展:
反复测试发现,验证的域用户如果如果是管理员组的话,可以成功验证密码是否正确。
但如果是非管理员组如domain users组的话,不能验证成功。

afan 发表于 2024-6-12 16:54:27

加 #RequireAdmin 有效吗

anythinging 发表于 2024-6-12 17:03:48

afan 发表于 2024-6-12 16:54
加 #RequireAdmin 有效吗
无效,不过我好象弄出来了,应该是怀疑的那2个选项的问题,目前好象一个一个试出来了

anythinging 发表于 2024-6-12 17:19:08

解决方法:
必需=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"不知如何代入到代码中?

redapple2008 发表于 2024-6-12 17:29:00

这么快就解决了吗?高手啊!

anythinging 发表于 2024-6-12 18:11:35

感谢回复,也给后来的人留个标记。

顽固不化 发表于 2024-6-12 19:54:15

楼主好人呀

redapple2008 发表于 2024-6-13 12:10:26

anythinging 发表于 2024-6-12 18:11
感谢回复,也给后来的人留个标记。

是的,后来有需要的可以查,方便,少折腾
页: [1]
查看完整版本: [已解决]遇到个验证windows密码的问题,请教各位朋友