'Changes the Password for the user "User" on the
'computer "Server" from "OldPassword" to "NewPassword"
Function ChangeUserPassword(ByVal Server As String, _
ByVal User As String, ByVal OldPassword As String, _
ByVal NewPassword As String) As String
Dim r As Long, msg As String
'Create Unicode-Arrays
Dim bComputer() As Byte: bComputer = GetByteArray(Server)
Dim bUser() As Byte: bUser = GetByteArray(User)
Dim bOldPassword() As Byte: bOldPassword = GetByteArray(OldPassword)
Dim bNewPassword() As Byte: bNewPassword = GetByteArray(NewPassword)
'call API-Function
r = NetUserChangePassword(bComputer(0), bUser(0), _
bOldPassword(0), bNewPassword(0))
'check return value and represent as string
Select Case r
Case ERROR_ACCESS_DENIED: msg = "Error: Access denied."
Case ERROR_INVALID_PASSWORD: msg = "Error: Invalid password."
Case NERR_InvalidComputer: msg = "Fehler: Invalid Computer-/Domainname."
Case NERR_NotPrimary: msg = "Error: This operation can only performed on the primary domain controler."
Case NERR_UserNotFound: msg = "Error: User not found."
Case NERR_PasswordTooShort: msg = "Error: Password does not match Password-Restrictions. (Password to short, to long or has already been used by this user.)"
Case ERROR_CANT_ACCESS_DOMAIN_INFO
msg = "Error: Error accessing info for domain controler. Maybe the computer is not available or access was denied."
Case 0: msg = "Operation performed successfully."
Case Else: msg = "Error: Unexpected Error " & r & " occured."
End Select
ChangeUserPassword = msg
End Function
'Converts a Unicode-String to a Unicode-Byte-Array.
'Is used because VB always passes Strings as ANSI instead of Unicode.
Private Function GetByteArray(ByVal str As String) As Byte()
Dim Buf() As Byte
Buf = str
ReDim Preserve Buf(Len(str) * 2 + 1)
GetByteArray = Buf
End Function