Categories: MSDN / DotNet / Java / Scripts / Linux / PHP Ask - La ask - La Answer

Get Last and First Name of the user

Any suggetions ro sample codes on how to get enumerate through all the users
on the server and get their First and Last Names.
Here is the sample code that retrives only user id's.
I can use this structure and declare in VB I assume that the fullname is
First and Last name of the user, but it returns me a Login Id of the user.

Private Type USER_INFO_11
usri11_name As Long
usri11_full_name As Long
End Type
+++++++++++++++++++++++++++++++++

Thanks.

Option Explicit

Private Type USER_INFO_0
usri0_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 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 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.usri0_name) * 2, vbNullChar)
Call sapiCopyMem(ByVal szName, ByVal pTmpBuf.usri0_name, Len(szName))
Debug.Print StrConv(szName, vbFromUnicode)

szName = StrConv(szName, 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
[4548 byte] By [Mike] at [2007-11-10 0:20:05]