| |
|
|
| Ich denke mal im Endeffekt sollten nur User und globale Gruppen zur Bearbeitung freigegeben und angezeigt werden... KompilierenMarkierenSeparieren************** Members_Lokaler_Gruppen_auslesen.INC **************
******* Start der Prozedur zum Auslesen der Mitglieder lokaler Gruppen *******
Proc Lese_Mitglieder_lokaler_Gruppe
Parameters Gruppenname$
Declare Fehler&,Buffer_Adresse&,Einträge&,Gesammteinträge&,Zähler&,GU_NAME$,GU_ART$
Declare Geterror_buffer$
Clearlist
DIM ACCOUNT_NAME#,256
DIM Gu_buffer_a#,261
DIM Gu_buffer#,16
LET Fehler&=@EXTERNAL("KERNEL32.DLL","MultiByteToWideChar",0,0,@ADDR(Gruppenname$),-1,ACCOUNT_NAME#,255)
LET FEHLER&=@External("Netapi32.DLL","NetLocalGroupGetMembers",0,ACCOUNT_NAME#,1,@ADDR(Buffer_Adresse&),-1,@ADDR(Einträge&),@ADDR(Gesammteinträge&),0)
If fehler&<>0
Dim Geterror_buffer#,32000
@External("KERNEL32","FormatMessageA",$1000,0,fehler&,0,Geterror_buffer#,32000,0)
Let Geterror_buffer$=@String$(Geterror_buffer#,0)
Dispose Geterror_buffer#
@Messagebox(Geterror_buffer$,"Ein Fehler ist aufgetreten!",16)
else
While Zähler&<Einträge&
CLEAR Gu_buffer#,Gu_buffer_a#
@External("KERNEL32.DLL","RtlMoveMemory",Gu_buffer#,Buffer_Adresse&+(12*Zähler&),12)
@External("KERNEL32.DLL","WideCharToMultiByte",0,0,@Long(Gu_buffer#,8),-1,Gu_buffer_a#,261,0,0)
LET GU_NAME$=@String$(Gu_buffer_a#,0)
IF @Long(Gu_buffer#,4)=1
LET GU_ART$="User"
Elseif @Long(Gu_buffer#,4)=2
LET GU_ART$="Globale Gruppe"
Elseif @Long(Gu_buffer#,4)=3
LET GU_ART$="Well-Known Gruppe"
Elseif @Long(Gu_buffer#,4)=4
LET GU_ART$="Gelöschter Account"
Elseif @Long(Gu_buffer#,4)=5
LET GU_ART$="Unspezifiziert"
endif
ADDSTRING GU_NAME$+","+GU_Art$
LET Zähler&=Zähler&+1
wend
endif
LET FEHLER&=@External("Netapi32.DLL","NetApiBufferFree",Buffer_Adresse&)
DISPOSE ACCOUNT_NAME#
DISPOSE Gu_buffer#
DISPOSE Gu_buffer_a#
Endproc
******* Ende der Prozedur zum Auslesen der Mitglieder lokaler Gruppen ****< lass=s2>* **
|
|
|
| |
|
|