Hi, does anyone have an example of useing NetUserEnum with USER_INFO_3 structure
? I have one, but it does not work.
Thanks
===========================================================
Here is my Example:
Private Type USER_INFO_3
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_last_logon As Long
usri3_last_logoff 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 Long
End Type
Private Declare Function apiNetUserEnum _
Lib "netapi32.DLL" Alias "NetUserEnum" _
(ByVal servername As Long, _
ByVal level As Long, _
ByVal filter As Long, _
bufptr As Long, _
ByVal prefmaxlen As Long, _
entriesread As Long, _
totalentries As Long, _
resume_handle As Long) _
As Long
Private Declare Function apiNetAPIBufferFree _
Lib "netapi32.DLL" Alias "NetApiBufferFree" _
(ByVal buffer As Long) _
As Long
Private Declare Function apilstrlenW _
Lib "kernel32" Alias "lstrlenW" _
(ByVal lpString As Long) _
As Long
Private Declare Sub sapiCopyMem _
Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, _
Source As Any, _
ByVal Length As Long)
Function fEnumDomainUsers( _
ByVal strServerName As String) _
As Boolean
' if strServerName=vbNullString,
' assume local machine
' This code only enums global accounts
'
On Error GoTo ErrHandler
Dim abytServerName() As Byte
Dim pBuf As Long
'Dim pTmpBuf As USER_INFO_0
'Dim pTmpBuf As USER_INFO_20
Dim pTmpBuf As USER_INFO_3
Dim dwLevel As Long
Dim dwPrefMaxLen As Long
Dim dwEntriesRead As Long
Dim dwTotalEntries As Long
Dim dwResumeHandle As Long
Dim i As Long
Dim dwTotalCount As Long
Dim nStatus As Long
'''''''''''''''''''''''''''''''''
'Variables will hold user's info'
'''''''''''''''''''''''''''''''''
Dim szName As String
Dim szFullName As String
Dim szComment As String
Dim szPassword As String
Dim szPassword_age As String
Dim szPriv As String
Dim szHome_dir As String
Dim szFlags As String
Dim szScript_path As String
Dim szAuth_flags As String
Dim szUsr_comment As String
Dim szParms As String
Dim szWorkstations As String
Dim szLast_logon As String
Dim szLast_logoff As String
Dim szAcct_expires As String
Dim szMax_storage As String
Dim szUnits_per_week As String
Dim szLogon_hours As String
Dim szBad_pw_count As String
Dim szNum_logons As String
Dim szLogon_server As String
Dim szCountry_code As String
Dim szCode_page As String
Dim szUser_id As String
Dim szPrimary_group_id As String
Dim szProfile As String
Dim szHome_dir_drive As String
Dim szPassword_expired As String
Dim iRecordsAffected As Integer
' assume MAX_PREFERRED_LENGTH
dwPrefMaxLen = MAX_PREFERRED_LENGTH
abytServerName = strServerName & vbNullChar
dwLevel = 3
Do
'only global users
nStatus = apiNetUserEnum(VarPtr(abytServerName(0)), _
dwLevel, _
FILTER_NORMAL_ACCOUNT, _
pBuf, _
dwPrefMaxLen, _
dwEntriesRead, _
dwTotalEntries, _
dwResumeHandle)
'// If the call succeeds,
If ((nStatus = NERR_SUCCESS) Or (nStatus = ERROR_MORE_DATA)) Then
'// Loop through the entries.
For i = 0 To dwEntriesRead - 1
Call sapiCopyMem(pTmpBuf, ByVal (pBuf + (i * 300)), Len(pTmpBuf))
'Call sapiCopyMem(pTmpBuf, ByVal (pBuf + (i * Len(pTmpBuf))),
Len(pTmpBuf))
'// Print the name of the user account.
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
szName = String$(apilstrlenW(pTmpBuf.usri3_name) * 2, vbNullChar)
szFullName = String$(apilstrlenW(pTmpBuf.usri3_full_name) *
2, vbNullChar)
szComment = String$(apilstrlenW(pTmpBuf.usri3_comment) * 2,
vbNullChar)