Fonte/ Codesnippets | | | | | Hallo Michael...
Die kannst du auch noch mit einbauen: Globale_Defs.INC KompilierenMarkierenSeparierenDeclare GU_BUFFER_P#,GU_BUFFER_A#,GU_BUFFER#,Entry_COUNT#
Declare GETERROR_Buffer#
Declare UNICODE#,Attribut#,PrivilegSET#,PRIVILEG#
Declare SID#,DOMAIN#,ALLPRIVS#,ComparePriv#
Struct LSA_UNICODE_STRING=Length%,MaximumLength%,Buffer&
Struct LSA_OBJECT_ATTRIBUTES=Length&,RootDirectory&,Length%,MaximumLength%,Buffer&,Attributes&,SecurityDescriptor#(4),SecurityQualityOfService#(4) Prozedur mit DEMO KompilierenMarkierenSeparieren************** Start der Prozedur zum Listen der Privilegien von Usern und Gruppen ********************
PROC Rechte_Listen
Clearlist
Parameters ACCOUNT$
Declare Fehler&,Policy_Handle&,Gesammtlänge&
Declare SID_TYPE_INDICATOR&,COUNT&,DOMAINNAME_SIZE&
Declare SYSTEM$,DOMAIN$,SID_Size&,GETERROR_Buffer$
Declare PrivPointer&,Zähler%,Länge%,Zeiger&
DIM UNICODE#,LSA_UNICODE_STRING
DIM Attribut#,LSA_OBJECT_ATTRIBUTES
DIM ALLPRIVS#,2000
DIM DOMAIN#,256
DIM SID#,1
DIM PRIVILEG#,100
DIM PrivilegSET#,100
DIM ComparePriv#,100
Clear Attribut#,UNICODE#
CLEAR SID#,DOMAIN#,SID_TYPE_INDICATOR&,Attribut#,ALLPRIVS#,OUNT&,DOMAINNAME_SIZE&
LET SID_Size&=1
LET DOMAINNAME_SIZE&=255
LET SYSTEM$=""
LET Fehler&=@External("advapi32.dll","LookupAccountNameA",@ADDR(System$),@addr(ACCOUNT$),SID#,@ADDR(SID_Size&),DOMAIN#,@ADDR(DOMAINNAME_SIZE&),@ADDR(SID_TYPE_INDICATOR&))
Dispose SID#
DIM SID#,SID_Size&
CLEAR SID#,DOMAIN#,SID_TYPE_INDICATOR&,SYSTEM$
LET DOMAINNAME_SIZE&=255
LET Fehler&=@External("advapi32.dll","LookupAccountNameA",@ADDR(System$),@addr(ACCOUNT$),SID#,@ADDR(SID_Size&),DOMAIN#,@ADDR(DOMAINNAME_SIZE&),@ADDR(SID_TYPE_INDICATOR&))
IF Fehler&<>1
LET FEHLER&=@External("KERNEL32.DLL","GetLastError")
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)
endif
If Fehler&=1
LET Fehler&=@External("advapi32.DLL","LsaOpenPolicy",0,Attribut#,$10 | $0800,@ADDR(POLICY_Handle&))
Let Fehler&=@External("advapi32.DLL","LsaNtStatusToWinError",Fehler&)
IF Fehler&<>0
LET FEHLER&=@External("KERNEL32.DLL","GetLastError")
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)
endif
IF Fehler&=0
Clear PrivPointer&,ALLPRIVS#
LET Fehler&=@External("advapi32.dll","LsaEnumerateAccountRights",Policy_Handle&,SID#,@ADDR(PrivPointer&),@ADDR(Count&))
Let Fehler&=@External("advapi32.DLL","LsaNtStatusToWinError",Fehler&)
IF @and(Fehler&<>0,Fehler&<>2)
LET FEHLER&=@External("KERNEL32.DLL","GetLastError")
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)
endif
LET Gesammtlänge&=@External("kernel32.dll","LocalSize",PrivPointer&)
Case FEHLER&=0 : @External("kernel32.dll","RtlMoveMemory",ALLPRIVS#,PrivPointer&,Gesammtlänge&)
WHILENOT Zähler%=COUNT&
Clear PrivilegSet#
Clear ComparePriv#
Let Länge%=@Word(ALLPRIVS#,8*Zähler%)
LET Zeiger&=@Long(ALLPRIVS#,8*Zähler%+4)
@External("kernel32.dll","RtlMoveMemory",ComparePriv#,Zeiger&,Länge%)
Let Fehler&=@External("kernel32.dll","WideCharToMultiByte",0,0,ComparePriv#,@INT(LÄnge%/2),PrivilegSet#,100,0,0)
Addstring @String$(PrivilegSet#,0)
inc Zähler%
Wend
LET FEHLER&=@External("advapi32.dll","LsaFreeMemory",PrivPointer&)
LET Fehler&=@External("advapi32.DLL","LsaClose",Policy_Handle&)
Let Fehler&=@External("advapi32.DLL","LsaNtStatusToWinError",Fehler&)
IF Fehler&<>0
LET FEHLER&=@External("KERNEL32.DLL","GetLastError")
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)
endif
@EDITBOX("Gefundene Privilegien...",1)
Endif
endif
Dispose ALLPRIVS#
Dispose DOMAIN#
Dispose SID#
Dispose PRIVILEG#
Dispose PrivilegSET#
Dispose ComparePriv#
endproc
************** Ende der Prozedur zum Listen der Privilegien von Usern und Gruppen ********************
Windowstyle 31
Windowtitle "Privilegien und Accountrechte listen"
Window 0,0-640,440
$I GLOBALE_DEFS.INC
Rechte_Listen @input$("Gruppen- oder Usernamen eingeben (kein Alias):","Account","Administratoren")
While 0=0
Waitinput
Wend
Privilegien enden auf -Privilege und Accountrechte auf -Right. |
| | | | |
| | | KompilierenMarkierenSeparieren************** Privilegien_listen.INC **************
************** Start der Prozedur zum Listen der Privilegien von Usern und Gruppen ********************
Proc Rechte_listen
Clearlist
Parameters Account$
Declare Fehler&,Policy_handle&,Gesammtlänge&
Declare Sid_type_indicator&,Count&,Domainname_size&
Declare System$,Domain$,Sid_size&,Geterror_buffer$
Declare Privpointer&,Zähler%,Länge%,Zeiger&
Dim Unicode#,Lsa_unicode_string
Dim Attribut#,Lsa_object_attributes
Dim Allprivs#,2000
Dim Domain#,256
Dim Sid#,1
Dim Privileg#,100
Dim Privilegset#,100
Dim Comparepriv#,100
Clear Attribut#,Unicode#
Clear Sid#,Domain#,Sid_type_indicator&,Attribut#,Allprivs#,Count&,Domainname_size&
Let Sid_size&=1
Let Domainname_size&=255
Let System$=""
Let Fehler&=@External("advapi32.dll","LookupAccountNameA",@Addr(System$),@Addr(Account$),Sid#,@Addr(Sid_size&),Domain#,@Addr(Domainname_size&),@Addr(Sid_type_indicator&))
Dispose Sid#
Dim Sid#,Sid_size&
Clear Sid#,Domain#,Sid_type_indicator&,System$
Let Domainname_size&=255
Let Fehler&=@External("advapi32.dll","LookupAccountNameA",@Addr(System$),@Addr(Account$),Sid#,@Addr(Sid_size&),Domain#,@Addr(Domainname_size&),@Addr(Sid_type_indicator&))
If Fehler&<>1
Let Fehler&=@External("KERNEL32.DLL","GetLastError")
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)
Endif
If Fehler&=1
Let Fehler&=@External("advapi32.DLL","LsaOpenPolicy",0,Attribut#,$10 | $0800,@Addr(Policy_handle&))
Let Fehler&=@External("advapi32.DLL","LsaNtStatusToWinError",Fehler&)
If Fehler&<>0
Let Fehler&=@External("KERNEL32.DLL","GetLastError")
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)
Endif
If Fehler&=0
Clear Privpointer&,Allprivs#
Let Fehler&=@External("advapi32.dll","LsaEnumerateAccountRights",Policy_handle&,Sid#,@Addr(Privpointer&),@Addr(Count&))
Let Fehler&=@External("advapi32.DLL","LsaNtStatusToWinError",Fehler&)
If @And(Fehler&<>0,Fehler&<>2)
Let Fehler&=@External("KERNEL32.DLL","GetLastError")
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)
Endif
Let Gesammtlänge&=@External("kernel32.dll","LocalSize",Privpointer&)
Case Fehler&=0 : @External("kernel32.dll","RtlMoveMemory",Allprivs#,Privpointer&,Gesammtlänge&)
Whilenot Zähler%=Count&
Clear Privilegset#
Clear Comparepriv#
Let Länge%=@Word(Allprivs#,8*Zähler%)
Let Zeiger&=@Long(Allprivs#,8*Zähler%+4)
@External("kernel32.dll","RtlMoveMemory",Comparepriv#,Zeiger&,Länge%)
Let Fehler&=@External("kernel32.dll","WideCharToMultiByte",0,0,Comparepriv#,@Int(LÄnge%/2),Privilegset#,100,0,0)
Addstring @String$(Privilegset#,0)
Inc Zähler%
Wend
Let Fehler&=@External("advapi32.dll","LsaFreeMemory",Privpointer&)
Let Fehler&=@External("advapi32.DLL","LsaClose",Policy_handle&)
Let Fehler&=@External("advapi32.DLL","LsaNtStatusToWinError",Fehler&)
If Fehler&<>0
Let Fehler&=@External("KERNEL32.DLL","GetLastError")
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)
Endif
Endif
Endif
Dispose Allprivs#
Dispose Domain#
Dispose Sid#
Dispose Privileg#
Dispose Privilegset#
Dispose Comparepriv#
Dispose Unicode#
Dispose Attribut#
Endproc
************** Ende der Prozedur zum Listen der Privilegien von Usern und Gruppen ***************< *****
|
| | | | |
|
Zum QuelltextThemeninformationenDieses Thema hat 1 subscriber: |