|
Descripción:
LsaEnumerateAccountRights Listet el a una Account hinzugefügten Privilegien. Lo voluntad no Privilegien gelistet, el por una Gruppenzugehörigkeit bestehen. Diese Función hay sólo bajo NT-basierten Windowssystemen.
Deklaration:
DEF @LsaEnumerateAccountRights(4) !advapi32,LsaEnumerateAccountRights
Parámetro:
1.Parámetro: Con el LSAOpenPolicy erhaltene Handle des Policy Objektes como Longint. Das Handle muß con POLICY_LOOKUP_NAMES geöffnet voluntad. 2.Parámetro: Bereichsvariable con el SID des Accounts, dessen Privilegien gelistet voluntad debería. 3.Parámetro: 4 Byte Bereichsvariable, el el Adresse des Speicherbereichs aufnimmt, en el el Privilegien como LSA_UNICODE_STRING-Array en folgender Form gespeichert voluntad: => ·Byte 0-1 = El Lange des Cuerdas des ersten Privilegs en Bytes. ·Byte 2-3 = El Longitud des Bereichs en Bytes, en el Byte 4-7 verweist. ·Byte 4-7 = Adresse uno Cuerdas en el Unicode Formato con el Namen des ersten gefundenen Privilegs. ·Byte 8-9 = El Lange des Cuerdas des zweiten Privilegs en Bytes. ·Byte 10-11 = El Longitud des Bereichs en Bytes, en el Byte 12-15 verweist. ·Byte 12-15 = Adresse uno Cuerdas en el Unicode Formato con el Namen des zweiten gefundenen Privilegs. ·usw... Wenn el Speicherbereich no mehr benötigt se, muß él con el Función LsaFreeMemory otra vez freigegeben voluntad. 4.Parámetro: 4 Byte Bereichsvariable, el el número el en Parámetro 3 enthaltenen Privilegien empfängt.
Rückgabewert:
0 en Erfolg, ansonsten una NT-Status Fehlercode (LongInt), el con LsaNtStatusToWinError en una Systemfehlercode umgewandelt voluntad kann.
Beispiele:
KompilierenMarcaSeparaciónDEF @LsaOpenPolicy(4) !"advapi32","LsaOpenPolicy"
DEF @LsaClose(1) !"advapi32","LsaClose"
DEF @LsaNtStatusToWinError(1) !"advapi32","LsaNtStatusToWinError"
DEF @LsaEnumerateAccountRights(4) !"advapi32","LsaEnumerateAccountRights"
DEF @MultiByteToWideChar(6) !"kernel32","MultiByteToWideChar"
DEF @LookupAccountName(7) !"advapi32","LookupAccountNameA"
DEF @GetACP(0) !"kernel32","GetACP"
DEF @CopyMemory(3) !"kernel32","RtlMoveMemory"
DEF @WideCharToMultiByte(8) !"kernel32","WideCharToMultiByte"
DEF @LsaFreeMemory(1) !"advapi32","LsaFreeMemory"
Declare Fehler&,UNICODE#,Attribut#,POLICY_Handle#
Declare Policy_Handle&,PrivilegSET#,PRIVILEG#
Declare SID#,DOMAIN#,SID_TYPE_INDICATOR#,DOMAIN#,Attribut#,ALLPRIVS#,COUNT#,SID#,DOMAINNAME_SIZE_ADDR#
Declare SYSTEM$,DOMAIN$,SID_Size#,Account$
Declare PrivPointer#,ComparePriv#,Zähler%,Länge%,Zeiger&
Struct LSA_UNICODE_STRING=Length%,MaximumLength%,Buffer&
DIM UNICODE#,LSA_UNICODE_STRING
Clear UNICODE#
Struct LSA_OBJECT_ATTRIBUTES=Length&,RootDirectory&,Length%,MaximumLength%,Buffer&,Attributes&,SecurityDescriptor#(4),SecurityQualityOfService#(4)
DIM Attribut#,LSA_OBJECT_ATTRIBUTES
Clear Attribut#
Dim PrivPointer#,4
DIM ALLPRIVS#,2000
DIM COUNT#,4
DIM DOMAIN#,256
DIM SID#,800
DIM SID_Size#,4
DIM DOMAINNAME_SIZE_ADDR#,4
DIM SID_TYPE_INDICATOR#,256
DIM POLICY_Handle#,4
DIM PRIVILEG#,100
DIM PrivilegSET#,100
DIM ComparePriv#,100
Windowstyle 31
Windowtitle "Einem Account das Privileg zum Ändern der Systemzeit hinzufügen."
Window 0,0-640,440
CLEAR SID#,DOMAIN#,SID_TYPE_INDICATOR#,DOMAIN#,Attribut#,ALLPRIVS#,COUNT#,SID#,DOMAINNAME_SIZE_ADDR#
Long SID_Size#,0=800
LONG DOMAINNAME_SIZE_ADDR#,0=255
LET SYSTEM$=""
LET ACCOUNT$=@input$("Accountnamen eingeben (kein Alias):","Account","Gast")
LET Fehler&=@LookupAccountName(@ADDR(System$),@addr(ACCOUNT$),SID#,SID_Size#,DOMAIN#,DOMAINNAME_SIZE_ADDR#,SID_TYPE_INDICATOR#)
Print "Rückmeldung von LookupAccountName="+@STR$(Fehler&)
If Fehler&=1
LET Fehler&=@LsaOpenPolicy(0,Attribut#,$10 | $0800,POLICY_Handle#)
Print "Rückmeldung von LsaOpenPolicy="+@STR$(Fehler&)
Let Fehler&=@LsaNtStatusToWinError(Fehler&)
PRINT "LsaOpenPolicy Rückmeldung umgewandelt in Windows Fehlercode="+@STR$(Fehler&)
LET Policy_Handle&=@LONG(POLICY_Handle#,0)
Print "Geliefertes Handle="+@STR$(Policy_Handle&)
IF Fehler&=0
Clear PrivPointer#
Clear ALLPRIVS#
LET Fehler&=@LsaEnumerateAccountRights(Policy_Handle&,SID#,PrivPointer#,Count#)
Print "Rückmeldung von LsaEnumerateAccountRights="+@STR$(Fehler&)
Let Fehler&=@LsaNtStatusToWinError(Fehler&)
PRINT "LsaEnumerateAccountRights Rückmeldung umgewandelt in Windows Fehlercode="+@STR$(Fehler&)
PRINT "Anzahl der Privilegien: "+@str$(@long(COUNT#,0))
Case FEHLER&=0 : @CopyMemory(ALLPRIVS#,@LONG(PrivPointer#,0),1998)
WHILENOT Zähler%=@long(COUNT#,0)
Clear PrivilegSet#
Clear ComparePriv#
Let Länge%=@Word(ALLPRIVS#,8*Zähler%)
LET Zeiger&=@Long(ALLPRIVS#,8*Zähler%+4)
@CopyMemory(ComparePriv#,Zeiger&,Länge%)
Let Fehler&=@WideCharToMultiByte(@GetACP(),0,ComparePriv#,@INT(LÄnge%/2),PrivilegSet#,100,0,0)
Print "Rückmeldung von WideCharToMultiByte="+@STR$(Fehler&)
Addstring @String$(PrivilegSet#,0)
inc Zähler%
Wend
LET FEHLER&=@LsaFreeMemory(@LONG(PrivPointer#,0))
LET Fehler&=@LsaClose(Policy_Handle&,0)
Print "Rückmeldung von LsaClose="+@STR$(Fehler&)
Let Fehler&=@LsaNtStatusToWinError(Fehler&)
PRINT "LsaClose Rückmeldung umgewandelt in Windows Fehlercode="+@STR$(Fehler&)
@LISTBOX$("Gefundene Privilegien...",1)
Endif
endif
Dispose PrivPointer#
Dispose POLICY_Handle#
Dispose ALLPRIVS#
Dispose COUNT#
Dispose DOMAIN#
Dispose SID#
Dispose SID_Size#
Dispose DOMAINNAME_SIZE_ADDR#
Dispose SID_TYPE_INDICATOR#
Dispose POLICY_Handle#
Dispose PRIVILEG#
Dispose PrivilegSET#
Dispose ComparePriv#
While 0=0
Waitinput
Wend
|
|