-
still a problem.
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
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
Forum Rules
|
Top DevX Stories
Easy Web Services with SQL Server 2005 HTTP Endpoints
JavaOne 2005: Java Platform Roadmap Focuses on Ease of Development, Sun Focuses on the "Free" in F.O.S.S.
Wed Yourself to UML with the Power of Associations
Microsoft to Add AJAX Capabilities to ASP.NET
IBM's Cloudscape Versus MySQL
|
Bookmarks