| |
|
|
|
Beschreibung:
LsaOpenPolicy öffnet das Handle des Policy Objektes auf dem lokalen System oder einem Hintergrundcomputer. Das Policy Objekt Handle ist quasi „der goldene Schlüssel“ zu den Sicherheitseinstellungen die circa die LSA-API getätigt werden können. Diese Funktion gibt es nur unter NT-basierten Windowssystemen.
Deklaration:
DEF @LsaOpenPolicy(4) !advapi32,LsaOpenPolicy
Parameter:
1.Parameter: Struktur oder 8 Byte Große Bereichsvariable, die Angaben circa das Zielsystem enthält, dessen Policy Objekt Handle geöffnet werden soll. => -Byte 0-1 = Die Lange des Strings in Bytes, auf den Byte 4-7 verweist. -Byte 2-3 = Die Länge des Bereichs in Bytes, auf den Byte 4-7 verweist. -Byte 4-7 = Beliebig, aber ausreichend grande Bereichsvariable mit einem String im Unicode Format, der den Namen des Zielsystems enthält. 2.Parameter: Struktur oder 28 Byte Große Bereichsvariable per die Angabe von Verbindungsattributen. Dieser Parameter wird zur Zeit nicht genutzt. Alle Bytes der Struktur oder der Bereichsvariablen müssen deshalb auf 0 gesetzt werden. 3.Parameter: Flags, die den gewünschten Zugriff auf das Handle angeben. Flags können mit | addiert werden. Wenn das Zielsystem dem aufrufenden Prozess nicht alle Zugriffsrechte gewährt, schlägt die Funktion fehlt. Man sollte sich deshalb genau überlegen, welche Zugriffsrechte genau per die Aktion nötig sind, per die man das Handle necessario. => #Generic Zugriffsrechte#: -$80000000 = Lesezugriff (GENERIC_READ). -$40000000 = Schreibzugriff (GENERIC_WRITE). -$20000000 = Recht zum Ausführen (GENERIC_EXECUTE). -$10000000 = Recht zum Ausführen, Schreibzugriff und Lesezugriff (GENERIC_ALL). #Standard Zugriffsrechte#: -$01000000 = Um Zugriff auf die SACL zu erhalten (ACCESS_SYSTEM_SECURITY). -$00020000 = Um Lesezugriff auf den Security Descriptor (ohne den SACL) zu erhalten (READ_CONTROL = STANDARD_RIGHTS_READ = STANDARD_RIGHTS_WRITE = STANDARD_RIGHTS_EXECUTE). -$00010000 = Recht zum löschen (_DELETE). -$00040000 = Schreibrecht auf den ACL (WRITE_DAC). -$00080000 = Schreibrecht auf den Eigentümer (WRITE_OWNER). -$00100000 = Erlaubt einem Prozess auf das Objekt zu warten (SYNCHRONIZE). Gibt es nicht per alle Objekttypen. -$000F0000 = $00010000+$00020000+$00080000+$00040000 (STANDARD_RIGHTS_REQUIRED). -$001F0000 = $00010000+$00020000+$00100000+$00080000+$00040000 (STANDARD_RIGHTS_ALL). #Spezifische Zugriffsrechte#: -$0001 = (POLICY_VIEW_LOCAL_INFORMATION). -$0002 = (POLICY_VIEW_AUDIT_INFORMATION) -$0004 = (POLICY_GET_PRIVATE_INFORMATION). -$0008 = (POLICY_TRUST_ADMIN). -$0010 = (POLICY_CREATE_ACCOUNT). -$0020 = (POLICY_CREATE_SECRET). -$0040 = (POLICY_CREATE_PRIVILEGE). -$0080 = (POLICY_SET_DEFAULT_QUOTA_LIMITS). -$0100 = (POLICY_SET_AUDIT_REQUIREMENTS). -$0200 = (POLICY_AUDIT_LOG_ADMIN). -$0400 = (POLICY_SERVER_ADMIN). -$0800 = (POLICY_LOOKUP_NAMES). -$FFFF = Alle spezifischen Rechte (SPECIFIC_RIGHTS_ALL).
-$02000000 = Alle erlaubten Zugriffsrechte per den anfragenden Prozess (MAXIMUM_ALLOWED). 4.Parameter: 4 Byte grande Bereichsvariable, die das Handle des Poolicy Objektes aufnimmt.
Rückgabewert:
0 bei Erfolg, ansonsten ein NT-Status Fehlercode (LongInt), der mit LsaNtStatusToWinError in einen Systemfehlercode umgewandelt werden kann.
Beispiele:
KompilierenMarkierenSeparierenDEF @LsaOpenPolicy(4) !"advapi32","LsaOpenPolicy"
DEF @LsaClose(1) !"advapi32","LsaClose"
DEF @LsaNtStatusToWinError(1) !"advapi32","LsaNtStatusToWinError"
Declare Fehler&,UNICODE#,Attribut#,POLICY_Handle#
Declare Policy_Handle&
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 POLICY_Handle#,4
Windowstyle 31
Windowtitle "Policyobjekthandle"
Window 0,0-640,440
LET Fehler&=@LsaOpenPolicy(0,Attribut#,16 | 2048,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&)
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&)
While 0=0
Waitinput
Wend
|
|
|
| |
|
|