Craig Clearman <chclear@nospam.please> wrote:
>Mike,
>
>>Not long ago someone here helped me figuring out on api NetUserEnum which
>>enumerates all LoginNames on the network server. Is there a way to find

out
>>users First Name and Last Name
>>enumerate through each user First and Last names using the same api or

some
>>other api.

>
>You can either change the structure that you are passing into
>NetUserEnum into a level 1 structure, or you can call NetUserGetInfo
>with your old user name. Here's an example of the latter:
>

Thanks for your help but there is still a problem.

I used your code and I used this code, it still does not return me a First
and Last Name of the users. Bu using your code api returns me Login Name
(fullname) of the user, same goes for api that I am using Login Name (fullname)
of the user. Why it does not return me the First and Last Name of the user
? I copy/pasted
code that I am using. Thanks for any suugestions.
=================================================================Option Explicit

'Private Type USER_INFO_0
' usri0_name As Long
'End Type
Private Type USER_INFO_11
usri11_name As Long
usri11_full_name 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)

Private Const FILTER_TEMP_DUPLICATE_ACCOUNT = &H1&
Private Const FILTER_NORMAL_ACCOUNT = &H2&
Private Const FILTER_INTERDOMAIN_TRUST_ACCOUNT = &H8&
Private Const FILTER_WORKSTATION_TRUST_ACCOUNT = &H10&
Private Const FILTER_SERVER_TRUST_ACCOUNT = &H20&
Private Const MAX_PREFERRED_LENGTH = -1&

Private Const NERR_SUCCESS = 0
Private Const ERROR_MORE_DATA = 234&
Private Const NERR_BASE = 2100
Private Const NERR_InvalidComputer = (NERR_BASE + 251)
Private Const ERROR_BAD_NETPATH = 53&
Private Const ERROR_INVALID_LEVEL = 124&

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_11
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

Dim szName As String
Dim szFullName As String

Dim iRecordsAffected As Integer

' assume MAX_PREFERRED_LENGTH
dwPrefMaxLen = MAX_PREFERRED_LENGTH
abytServerName = strServerName & vbNullChar
dwLevel = 0
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 * 4)), Len(pTmpBuf))
'// Print the name of the user account.
'szName = String$(apilstrlenW(pTmpBuf.usri11_name) * 2, vbNullChar)
szFullName = String$(apilstrlenW(pTmpBuf.usri11_full_name)
* 2, vbNullChar)

'Call sapiCopyMem(ByVal szName, ByVal pTmpBuf.usri11_name,
Len(szName))
Call sapiCopyMem(ByVal szFullName, ByVal pTmpBuf.usri11_full_name,
Len(szFullName))

'Debug.Print StrConv(szName, vbFromUnicode)
Debug.Print StrConv(szFullName, vbFromUnicode)

'szName = StrConv(szName, vbFromUnicode)
szFullName = StrConv(szFullName, vbFromUnicode)

dwTotalCount = dwTotalCount + 1
Next
End If

MsgBox dwTotalCount

If (nStatus = NERR_InvalidComputer) Then
'Invalid computer
fEnumDomainUsers = False
MsgBox "Invalid computer"
Exit Function
End If


If (nStatus = ERROR_BAD_NETPATH) Then
'Invalid computer
fEnumDomainUsers = False
MsgBox "BAD NETPATH"
Exit Function

End If
Call apiNetAPIBufferFree(pBuf)
pBuf = 0
Loop While (nStatus = ERROR_MORE_DATA)
If Not (pBuf = 0) Then Call apiNetAPIBufferFree(pBuf)

fEnumDomainUsers = True
ExitHere:
Exit Function
ErrHandler:
fEnumDomainUsers = False
Resume ExitHere
End Function

Private Sub Form_Load()
'EstablishConnection

'As a parameter you have to specify a Server name
'If this parameter is Null(Empty String) then Default will be
'your workstation's name.
'Example fEnumDomainUsers ("\\ServerName")
fEnumDomainUsers ("\\ServerName")

End Sub