cant get it to work
code after your suggestion, now I am using structure USER_INFO_20
Craig Clearman <chclear@nospam.please> wrote:
>Mike,
>
>>Private Type USER_INFO_11
>> usri11_name As Long
>> usri11_full_name As Long
>>End Type
>
>That's not the structure of USER_INFO_11.
>
>> dwLevel = 0
>
>And, you're passing level zero, not level 11.
>
>Ciao, Craig
===========================================================
Option Explicit
'Private Type USER_INFO_0
' usri0_name As Long
'End Type
Private Type USER_INFO_20
usri20_name As Long
usri20_full_name As Long
usri20_comment As Long
usri20_flags As Long
usri20_user_id 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_20
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 = 20
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.usri20_name) * 2, vbNullChar)
szFullName = String$(apilstrlenW(pTmpBuf.usri20_full_name)
* 2, vbNullChar)
Call sapiCopyMem(ByVal szName, ByVal pTmpBuf.usri20_name, Len(szName))
Call sapiCopyMem(ByVal szFullName, ByVal pTmpBuf.usri20_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()
'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 ("\\Server")
fEnumDomainUsers ("\\Server")
End Sub

