01. maj 2000 - 22:34Der er
2 kommentarer og 1 løsning
NT brugerdatabase
Hej
Er der nogen der har noget sourcekode, eller en idé om hvordan man henter brugeroplysninger ud af NT's brugerdatabase. Det jeg skal bruge er brugernavnet, og det tilsvarende fulde navn.
Der bliver investeret massivt i AI. Teknologien er mere tilgængelig end nogensinde, og ambitionerne er høje. Alligevel oplever mange virksomheder, at resultaterne udebliver.
Her er en af de rutiner jeg bruger i Delphi. Det er muligt det ikke siger dig noget fordi det ikke er VB, men du skal bruge samme API kald som jeg bruger:
procedure TNetServer.GetUsers (accountType : Integer; list : TStrings); var wServerName : WideString; rv : NetAPIStatus; buffer : pointer; i, entriesRead, totalEntries : Integer; p : PUSER_INFO_0; begin list.Clear; wServerName := ServerName; rv := NetUserEnum (PWideChar (wServerName), 0, accountType, buffer, MAX_PREFERRED_LENGTH, entriesRead, totalEntries, NIL_HANDLE); if rv = NERR_Success then try p := PUSER_INFO_0 (buffer); for i := 0 to entriesRead - 1 do begin list.Add (p^.usri0_name); Inc (p) end finally NetAPIBufferFree (buffer) end else abort; {raise ENTException.Create (rv)} end;
Private Declare Function NetAPIBufferFree Lib "netapi32.dll" Alias "NetApiBufferFree" _ (ByVal Ptr As Long) As Long
Private Declare Function StrLen Lib "kernel32" Alias "lstrlenW" (ByVal Ptr As Long) As Long
Private Declare Function CopyMem Lib "kernel32" Alias "RtlMoveMemory" ( _ hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long) As Long
Private Declare Function MyNetGroupEnumUsers0 Lib "netapi32.dll" Alias _ "NetGroupGetUsers" ( _ ByVal ServerName As String, _ ByVal GroupName As String, _ ByVal level As Long, _ Buffer As Long, _ ByVal PrefMaxLen As Long, _ EntriesRead As Long, _ TotalEntries As Long, _ ResumeHandle As Long) As Long
Private Declare Function MyNetUserEnum0 Lib "netapi32.dll" Alias "NetUserEnum" _ (ByVal ServerName As String, _ ByVal level As Long, _ ByVal lFilter As Long, _ Buffer As Long, _ ByVal PrefMaxLen As Long, _ EntriesRead As Long, _ TotalEntries As Long, _ ResumeHandle As Long) As Long
'============================================================= 'Initial Author : Jeff Hong YAN '============================================================= Function EnumerateUsersDomain(sMName As String, sGName As String, sReturn() As String) As Long Dim lResult As Long Dim lBufPtr As Long Dim lEntriesRead As Long Dim lTotalEntries As Long Dim lResumeHandle As Long Dim lBufLen As Long Dim sUName As String Dim i As Long Dim lUNPtr As Long
Dim bTestArray() As Byte Dim sTest As String Dim lTheWord As Long Dim sNameTemp As String
lBufLen = 255 'Buffer size lResumeHandle = 0 'Start med dette entry
Dim swMName As String * 255 'Unicode string Dim swGName As String * 255 'Unicode string
'Extract sub-strengen lResult = CopyMem(bUNameTempArray(0), lTheWord, 256&) sNameTemp = Left(bUNameTempArray, StrLen(lTheWord)) If i - 1 > UBound(sReturn) Then ReDim Preserve sReturn(i - 1) End If
sReturn(i - 1) = sNameTemp 'Indsæt det seneste navn i array Debug.Print "Name = " & sNameTemp ' Print data i debug-window Next i Loop Until lEntriesRead = lTotalEntries
lResult = NetAPIBufferFree(lBufPtr) ' Frigiv den allokerede hukommelse igen End Function
Private Sub Command1_Click() Dim sR() As String ' Streng array der indeholder alle bruger-accounts Dim strComputer As String Dim strGruppe As String
strComputer = "\\PC-CPHN-MIHE-NY" ' navn på den server der skal aflevere brugere strGruppe = "" ' navnet på den gruppe hvis brugere der skal listes (tom gruppe = alle brugere)
EnumerateUsersDomain strComputer, strGruppe, sR() End Sub
Du skal selvfølgelig ændre computernavnet til den server der "ejer" de brugere du vil have oplysninger på...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.