devxlogo

NetUserGetInfo – API Call

NetUserGetInfo – API Call

Question:
I am using “NetUserGetInfo” API call to get the NT user profile. I use:

typedef struct _USER_INFO_3

How can I parse the “usri3_flags” member in detail?

Answer:
Use this:

Option ExplicitPrivate Const UserInfo1 As Long = 1&Private Type USER_INFO_1   usri1_name              As Long   usri1_password          As Long   usri1_password_age      As Long   usri1_priv              As Long   usri1_home_dir          As Long   usri1_comment           As Long   usri1_flags             As Long   usri1_script_path       As LongEnd Type    Public 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 NetUserGetInfo Lib "netapi32" _   (ByVal psServer As Long, ByVal psUser As Long, ByVal lLevel As Long, _   lngPtrBuffer As Long) As LongPrivate Const NERR_Success             As Long = 0&Private Const UF_ACCOUNTDISABLE        As Long = &H2Private Const UF_SCRIPT                As Long = &H1&Private Const UF_HOMEDIR_REQUIRED      As Long = &H8&Private Const UF_LOCKOUT               As Long = &H10&Private Const UF_PASSWD_NOTREQD        As Long = &H20&Private Const UF_PASSWD_CANT_CHANGE    As Long = &H40&Private Const UF_NORMAL_ACCOUNT        As Long = &H200&Private Const UF_SERVER_TRUST_ACCOUNT  As Long = &H2000&Private Const UF_DONT_EXPIRE_PASSWD    As Long = &H10000Private Const UF_MNS_LOGON_ACCOUNT     As Long = &H20000Private Const UF_TEMP_DUPLICATE_ACCOUNT      As Long = &H100&Private Const UF_INTERDOMAIN_TRUST_ACCOUNT   As Long = &H800&Private Const UF_WORKSTATION_TRUST_ACCOUNT   As Long = &H1000&Public Sub Main()   MsgBox GetUserFlags("", "Administrator")End SubPublic Function GetUserFlags(ByVal strServerName As String, _                             ByVal strUserName As String) As String   Dim typUserInfo1        As USER_INFO_1   Dim lngBuf              As Long   Dim lngSvrName          As Long   Dim lngUserName         As Long   Dim lngParmErr          As Long   Dim lngRtn              As Long   Dim lngFlags            As Long   Dim blnIsNowDisabled    As Boolean   Dim strTmp              As String      ' Convert the server name to a pointer   If Len(Trim$(strServerName)) = 0 Then      lngSvrName = 0&   Else      lngSvrName = StrPtr(strServerName)   End If      ' Convert the user name to a pointer   If Len(Trim$(lngUserName)) = 0 Then      Exit Function 'Handle the error   Else      lngUserName = StrPtr(strUserName)   End If      ' Get the user's current flags   lngRtn = NetUserGetInfo(lngSvrName, _                           lngUserName, _                           UserInfo1, _                           lngBuf)   If lngRtn = NERR_Success Then      CopyMem typUserInfo1, _              ByVal lngBuf, _              Len(typUserInfo1)      If lngBuf Then         NetApiBufferFree lngBuf      End If   Else      MsgBox "Error Number: " & lngRtn   End If   lngFlags = typUserInfo1.usri1_flags         If (lngFlags And UF_SCRIPT) Then      strTmp = "Script is executed"   Else      strTmp = "Script is NOT executed"   End If      If (lngFlags And UF_ACCOUNTDISABLE) Then      strTmp = strTmp & vbCrLf & "Account is disabled"   Else      strTmp = strTmp & vbCrLf & "Account is NOT disabled"   End If      If (lngFlags And UF_HOMEDIR_REQUIRED) Then      strTmp = strTmp & vbCrLf & "Home directory is required"   Else      strTmp = strTmp & vbCrLf & "Home directory is NOT required"   End If      If (lngFlags And UF_PASSWD_NOTREQD) Then      strTmp = strTmp & vbCrLf & "Password is NOT required"   Else      strTmp = strTmp & vbCrLf & "Password is required"   End If      If (lngFlags And UF_PASSWD_CANT_CHANGE) Then      strTmp = strTmp & vbCrLf & "User cannot change password"   Else      strTmp = strTmp & vbCrLf & "User can change password"   End If   If (lngFlags And UF_LOCKOUT) Then      strTmp = strTmp & vbCrLf & "Account is locked out"   Else      strTmp = strTmp & vbCrLf & "Account is NOT locked out"   End If      If (lngFlags And UF_DONT_EXPIRE_PASSWD) Then      If Len(strTmp) > 0 Then         strTmp = strTmp & vbCrLf & "Password never expires"      Else         strTmp = strTmp & vbCrLf & "Password does expire"      End If   End If         GetUserFlags = strTmp   End Function

See also  5 Ways to Improve Customer Experience
devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist