Reset NT password with ‘User Must Change Password’

Reset NT password with ‘User Must Change Password’

We are trying to reset the NT password using structure USER_INFO_1003. Everything worked fine. Then we also needed to set ‘User Must Change Password at Next Logon’ option. There is no structure just to change that. What I can find is that the only structure I can use is USER_INFO_3.This means that I have to user NetUserGetInfo() API to get all the user info using USER_INFO_3and then use NetUserSetInfo() API to reset everything back except ‘usri3_password_expired’value. This seems like a lot of work just to change one data value. On top of everything, I haven’t been able to get this to work using both APIs. I get an error code 87: invalid parameter value. I am using VB6 for this.

It may be a lot of work, but it is the way you will have to do it. The following will reset the “Test guest account” to force a password change on the next logon. Note that this will work on a LOCAL machine. If you want to do it remotely, you must pass the Server name to the function.

IN FORM:Private Sub Command1_Click()   Dim p_strUserName          As String      p_strUserName = "Test guest account"      If Module1.MustChangePassword(p_strUserName) = True Then      MsgBox "Successfully set 'Must Change Password' for user '" & _         p_strUserName & "'."   Else      MsgBox "Failed setting 'Must Change Password' for user '" & _         p_strUserName & "'."   End If   End SubIN BAS or CLS file:Option ExplicitPublic Declare Sub CopyMem Lib "kernel32" Alias _   "RtlMoveMemory" (pTo As Any, pFrom As Any, _   ByVal lCount As Long)Private Declare Function NetApiBufferFree _   Lib "netapi32.dll" _   (ByVal lngPtrBuffer As Long) As LongPrivate Declare Function NetUserSetInfo _   Lib "netapi32" _   (psServer As Byte, _    psUser As Byte, _    ByVal lLevel As Long, _    ByVal pPtrBuffer As Long, _    ParmErr As Long) As LongPrivate Declare Function NetUserGetInfo _   Lib "netapi32" _   (ServerName As Byte, _    UserName As Byte, _    ByVal Level As Long, _    lpBuffer As Long) As LongPrivate Const NERR_Success As Long = 0&Private Const UserInfo3 As Long = 3&Private Type USER_INFO_3_API   usri3_name              As Long   usri3_password          As Long   usri3_password_age      As Long   usri3_priv              As Long   usri3_home_dir          As Long   usri3_comment           As Long   usri3_flags             As Long   usri3_script_path       As Long   usri3_auth_flags        As Long   usri3_full_name         As Long   usri3_usr_comment       As Long   usri3_parms             As Long   usri3_workstations      As Long   usri3_lastlogon         As Long   usri3_lastlogoff        As Long   usri3_acct_expires      As Long   usri3_max_storage       As Long   usri3_units_per_week    As Long   usri3_logon_hours       As Long   usri3_bad_pw_count      As Long   usri3_num_logons        As Long   usri3_logon_server      As Long   usri3_country_code      As Long   usri3_code_page         As Long   usri3_user_id           As Long   usri3_primary_group_id  As Long   usri3_profile           As Long   usri3_home_dir_drive    As Long   usri3_password_expired  As LongEnd TypePublic Function MustChangePassword(ByVal xi_strUserName As String) As Boolean   Dim p_typUserInfo3API   As USER_INFO_3_API   Dim p_bytSvrName()      As Byte   Dim p_bytUserName()     As Byte   Dim p_strServerName     As String   Dim p_lngBuffer         As Long   Dim p_lngParmErr        As Long   Dim p_lngRtn            As Long      ' ------------------------------------------   ' Convert the server name to byte array   ' ------------------------------------------   p_strServerName = vbNullChar   p_bytSvrName = p_strServerName      ' ------------------------------------------   ' Convert the user name to a byte array   ' ------------------------------------------   If Len(Trim$(xi_strUserName)) = 0 Then      Exit Function 'Handle the error   Else      p_bytUserName = xi_strUserName & vbNullChar   End If      ' ------------------------------------------   ' Get the current info   ' ------------------------------------------   p_lngRtn = NetUserGetInfo(p_bytSvrName(0), _                             p_bytUserName(0), _                             UserInfo3, _                             p_lngBuffer)   If p_lngRtn = NERR_Success Then      CopyMem p_typUserInfo3API, _              ByVal p_lngBuffer, _              Len(p_typUserInfo3API)   Else      MsgBox "Error Number: " & p_lngRtn   End If      ' ------------------------------------------   ' Set the current info   ' ------------------------------------------   p_typUserInfo3API.usri3_password_expired = 1   p_lngBuffer = VarPtr(p_typUserInfo3API)      p_lngRtn = NetUserSetInfo(p_bytSvrName(0), _                             p_bytUserName(0), _                             UserInfo3, _                             p_lngBuffer, _                             p_lngParmErr)   If p_lngRtn = NERR_Success Then      CopyMem p_typUserInfo3API, _              ByVal p_lngBuffer, _              Len(p_typUserInfo3API)      MustChangePassword = True   Else      MsgBox "Error Number: " & p_lngRtn   End If         ' ------------------------------------------   ' Clear the buffer   ' ------------------------------------------   If p_lngBuffer Then      NetApiBufferFree p_lngBuffer   End If      End Function
Share the Post:
Heading photo, Metadata.

What is Metadata?

What is metadata? Well, It’s an odd concept to wrap your head around. Metadata is essentially the secondary layer of data that tracks details about the “regular” data. The regular

XDR solutions

The Benefits of Using XDR Solutions

Cybercriminals constantly adapt their strategies, developing newer, more powerful, and intelligent ways to attack your network. Since security professionals must innovate as well, more conventional endpoint detection solutions have evolved

AI is revolutionizing fraud detection

How AI is Revolutionizing Fraud Detection

Artificial intelligence – commonly known as AI – means a form of technology with multiple uses. As a result, it has become extremely valuable to a number of businesses across

AI innovation

Companies Leading AI Innovation in 2023

Artificial intelligence (AI) has been transforming industries and revolutionizing business operations. AI’s potential to enhance efficiency and productivity has become crucial to many businesses. As we move into 2023, several

data fivetran pricing

Fivetran Pricing Explained

One of the biggest trends of the 21st century is the massive surge in analytics. Analytics is the process of utilizing data to drive future decision-making. With so much of

kubernetes logging

Kubernetes Logging: What You Need to Know

Kubernetes from Google is one of the most popular open-source and free container management solutions made to make managing and deploying applications easier. It has a solid architecture that makes