ich habe mich mal an eine Windows API Funktion eingelassen.
Ich brauche alle User am lokalen Rechner. Die passende DLL ist "netapi32.dll".
Die passende Funktion heisst "NetUserGetLocalGroups".
Die PRG gibt mir bei Auruf der Funktion den Fehler zurück "Ungültiger Speicherzugriff (Lesefehler an der Adresse 0)
Ich weiss auch in etwa woran es liegt, komme aber einfach nicht weiter.
Es müsste mit der Var. BufPtr zusammenhängen die auf die Funktion PLOCALGROUP_USERS_INFO_0 verweist.
Hier der Code (Ist allerdings noch nicht ganz vollständig)
Code: Alles auswählen
Declare.s NetUserGetLocalGroups()
UsrAllAdmin.s = ""
MessageRequester("", "Alle Admin User: " + NetUserGetLocalGroups(), 0)
Procedure.s NetUserGetLocalGroups() ;Anfang Procedure NetUserGetLocalGroups()
DLL = OpenLibrary(#PB_Any, "netapi32.dll") ;Die DLL "netapi32.dll" fuer Funktionsaufrufe bereitstellen
Protected NUGLG.q
Protected NetApiStatus.i ;Variablen deklarieren
Protected PLGUIA=PLOCALGROUP_USERS_INFO_0
Protected ServerName.u = 0, UserName.u = 0
Protected BufPtr.i = 0
Protected dwLevel.d = 0
Protected dwFlags.d = LG_INCLUDE_INDIRECT
Protected dwPrefMaxLen.d = MAX_PREFERRED_LENGTH
Protected dwEntriesRead.d = 0
Protected dwEntriesTotal.d
If DLL
NUGLG = GetFunction(DLL, "NetUserGetLocalGroups")
NetApiStatus = NetUserGetLocalGroups_(ServerName, UserName, dwLevel, dwFlags, BufPtr, PrefMaxLen, @dwEntriesRead, @dwEntriesTotal)
Else
MessageRequester("", "Achtung: Funktion nicht bekannt ", 0)
EndIf
CloseLibrary(DLL)
EndProcedure
;NetUserGetLocalGroups netapi32.dll WinApi
;
;
; IN -> LPWSTR servername, Pointer to a Unicode string If this parameter is NULL, the local computer is used
; IN -> LPWSTR username, Pointer to a Unicode string
; IN -> DWORD level, Level of information required. Only 0 is valid
; IN -> DWORD flags, Bitmask of flags. Currently, only LG_INCLUDE_INDIRECT is defined
; OUT <- LPBYTE *bufptr, On return a pointer, "LOCALGROUP_USERS_INFO_0"
; IN -> DWORD prefmaxlen, Preferred maximum length, in 8-bit bytes of returned data The preferred maximum length, in bytes, of the returned data
; OUT <- LPDWORD entriesread, Pointer to a DWORD that contains the actual enumerated element count
; OUT <- LPDWORD totalentries, Pointer to a DWORD that contains the total number of entries that could have been enumerated
;
;Return Values
;
;If the function is successful, it returns NERR_SUCCESS.
;If the function fails, the Return value is one of the following error codes
;
;
;
;LOCALGROUP_USERS_INFO_0
;
;Ein Zeiger auf den Puffer, der die Daten empfängt. Das Format dieser Daten hängt vom Wert des Parameters Ebene.
;Dieser Puffer wird vom System reserviert und muss mithilfe der NetApiBufferFree-Funktion freigegeben werden.
;Beachten Sie, dass Sie den Puffer freigeben müssen, auch wenn die Funktion mit ERROR_MORE_DATA schlägt fehl
Das meiste was Kommentiert ist, ist überwiegend direkt von MSDN.
Ich weis einfach nicht wie ich die Var BufPtr richtig zu dem Funktionsaufruf hinzufüge, bzw so verbinde mit PLOCALGROUP_USERS_INFO_0
Diese Procedure soll auch so bestehen bleiben, ich bin damit angefangen um mich in die WinApi Funktionen einzuarbeiten oder auch üben.
Für Hilfe wäre ich Dankbar
__________________________________________________
Code-Tags hinzugefügt
30.12.2013
RSBasic