AW: Windowsanmeldepasswort vergleichen
31.05.2007 13:56:22
Matthias
Hallo Andreas,
Die Antworten oben sind richtig, allerdings kannst du eine Zeichenfolge prüfen, ob sie dem Windows-Kennwort entspricht:
In ein Modul:
Option Explicit
Private Declare Function CloseHandle Lib "kernel32" ( _
ByVal hObject As Long) As Long
Private Declare Function GetVersion Lib "kernel32" () As Long
Private Declare Function LogonUserA Lib "Advapi32" ( _
ByVal lpszUserName As String, ByVal lpszDomain As String, _
ByVal lpszPassword As String, ByVal dwLogonType As Long, _
ByVal dwLogonProvider As Long, phToken As Long _
) As Long
Private Declare Function WNetVerifyPasswordA Lib "mpr.dll" ( _
ByVal lpszPassword As String, ByRef pfMatch As Long _
) As Long
Private Declare Function GetComputerNameA Lib "kernel32" _
(ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function GetUserNameA Lib "advapi32.dll" _
(ByVal lpBuffer As String, nSize As Long) As Long
Public Function WhereAmI() As String
Dim s As String * 255
GetComputerNameA s, Len(s)
WhereAmI = Left$(s, InStr(s, vbNullChar) - 1)
End Function
Public Function WhoAmI() As String
Dim s As String * 255
GetUserNameA s, Len(s)
WhoAmI = Left$(s, InStr(s, vbNullChar) - 1)
End Function
Public Function CheckPassword( _
ByVal Password As String, _
Optional ByVal UserName As String, _
Optional ByVal Domain As String _
) As Boolean
'Deklarationen:
Const LOGON32_PROVIDER_DEFAULT = 0&
Const LOGON32_LOGON_NETWORK = 3&
Dim hToken As Long
Dim fMatch As Long
If IsNT Then 'Win NT/2000:
'Angemeldeter User ist Default:
If UserName = "" Then UserName = WhoAmI
'API aufrufen:
CheckPassword = LogonUserA(UserName, Domain, Password, _
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, hToken)
CloseHandle hToken
Else 'Win 9x:
'Domäne liegt in Win9x nicht vor:
If CBool(Len(Domain)) Then Exit Function
'Ggf. Kennung checken:
If CBool(Len(UserName)) _
Then If UserName WhoAmI Then Exit Function
'API aufrufen:
If WNetVerifyPasswordA(Password, fMatch) = 0 _
Then CheckPassword = CBool(fMatch)
End If
End Function
Public Function IsNT() As Boolean
'Höchstwertigste Bit darf nicht gesetzt sein:
IsNT = (GetVersion And &H80000000) = 0
End Function
Zum Testen:
'Prüfe, ob der angemeldete User das Kennwort "123" hat:
MsgBox CheckPassword("123")
'Prüfe, ob der User "Administrator" das Kennwort "admin" hat:
MsgBox CheckPassword("admin","Administrator")
Quelle: http://vb-tec.de/chkpwd.htm
Unter Administratorrechten funktioniert bei mir alles, ob das ganze auch unter Standard-Benutzerrechten klappt musst du mal selbst testen.
Gruß Matthias