|
Beschreibung:
RegSaveKey speichert einen Schlüssel und alle Unterschlüssel in binärer Form in eine Datei. Unter NT-basierten Systemen ist zur Speicherung das Privileg ‚SeBackupPrivilege’ nötig, das vorher aktiviert werden muß.
Deklaration:
DEF @RegSaveKey(3)!ADVAPI32,RegSaveKeyA
Parameter:
1.Parameter: Handle eines geöffneten Keys (dessen Unterschlüssel man listen möchte) als LongInt oder folgende Werte => -HKEY_CLASSES_ROOT = $80000000 -HKEY_CURRENT_USER = $80000001 -HKEY_LOCAL_MACHINE = $80000002 -HKEY_USERS = $80000003 2.Parameter: Adresse eines Strings oder Bereichsvariable mit String, der den Dateinamen angibt, in die die Schlüsselfolge gespeichert werden soll. 3.Parameter: Bereichsvariable oder Struktur, die die Zugriffsrechte für die Datei festlegt. Dieser Parameter kann auch 0 sein.
Rückgabewert:
0 bei Erfolg, bei Misserfolg ein Wert <>0 (Fehlercode).
Beispiele:
KompilierenMarkierenSeparierenDEF @RegSaveKey(3)!"ADVAPI32","RegSaveKeyA" Speichert eine Schlüsselfolge in einen Hive.
DEF @RegOpenKeyEx(5) !"ADVAPI32","RegOpenKeyExA" Liefert Handle eines Registryschlüssels und öffnet ihn.
DEF @RegCloseKey(1) !"ADVAPI32","RegCloseKey" Schließt eine geöffneten Registryschlüssel.
DEF @LookupPrivilegeName(4)!"advapi32","LookupPrivilegeNameA" Ermittelt aus dem Luid eines Privilegs dessen Namen.
DEF @LookupPrivilegeValue(3) !"advapi32","LookupPrivilegeValueA" Ermittelt aus dem Namen eines Privilegs dessen Luid.
DEF @OpenProcessToken(3) !"advapi32","OpenProcessToken" Öffnet Einstellprozess.
DEF @AdjustTokenPrivileges(6) !"advapi32","AdjustTokenPrivileges" Stellt Privilegien ein.
DEF @GetCurrentProcess(0) !"kernel32","GetCurrentProcess" Ermittel das Handle des aktiven Prozesses.
Declare Fehler&,Schlüssel$,Handle#,Handle&,Button&,SaveFile$,IO%
Declare NewState#,Luid1#,Luid2#,Privileg1#,Token&,token#,ZAHL2&,ZAHL1&
Declare BUFFER#,OLDVALUE#,out#,Größe#,System$
Der Folgende Codeanteil ist nur unter NT-basierten nötig
DIM token#,4
DIM NewState#,16
DIM Luid1#,8
DIM Privileg1#,256
DIM BUFFER#,4
DIM OUT#,256
Dim Größe#,4
DIM OLDVALUE#,256
Clear Out#,OLDVALUE#,Größe#,BUFFER#,Privileg1#,Luid1#,token#,System$
Long NewState#,0=1 Nur ein Privileg soll geändert werden
Long NewState#,12=$00000002 Das Privileg soll eingeschaltet werden
LET FEHLer&=@OpenProcessToken(@GetCurrentProcess(),$0020 | $0008,Token#) Es wird ein Process mit dem Handle Token gestartet, der Privilegien für mein Programm einstellen soll.
Addstring "Fehlercode OpenProcessToken: "+@str$(Fehler&) Wenns geklappt hat, dann 1.
let token&=@long(token#,0) Das Handle des Einstellprozesses wird ausgelesen.
String Privileg1#,0="SeBackupPrivilege" Privileg für RegSaveKey
LET FEHLer&=@LookupPrivilegeValue(@addr(System$),Privileg1#,LUID1#) Wenn ich es richtig vestanden habe, wird hier aus dem Privilegnamen eine Art lokales Handle für dieses Privileg ermittelt.
Addstring "Fehlercode LookupPrivilegeValue: "+@STR$(Fehler&) Wenns geklappt hat, dann 1.
Byte NewState#,4=@Byte(Luid1#,0)
Byte NewState#,5=@Byte(Luid1#,1)
Byte NewState#,6=@Byte(Luid1#,2)
Byte NewState#,7=@Byte(Luid1#,3)
Byte NewState#,8=@Byte(Luid1#,4)
Byte NewState#,9=@Byte(Luid1#,5)
Byte NewState#,10=@Byte(Luid1#,6)
Byte NewState#,11=@Byte(Luid1#,7)
clear buffer#
LET ZAHL1&=256
LET ZAHL2&=0
LET FEHLER&=@AdjustTokenPrivileges(Token&,ZAHL2&,NewState#,ZAHL1&,Oldvalue#,Buffer#) Das Privileg wird aktiviert.
Addstring "Fehlercode AdjustTokenPrivileges: "+@str$(Fehler&) Wenns geklappt hat, dann 1.
Addstring "SIZE: "+@str$(@long(Buffer#,0))
Long Größe#,0=256
@LookupPrivilegeName(@addr(System$),LUID1#,OUT#,Größe#) Aus dem ersten Luid wird wieder der Privilegname ermittelt.
Addstring "PRIVILEG: "+@string$(Out#,0) Nur Rückmeldung, ob es geklappt hat.
Dispose Luid1#
Dispose Privileg1#
Dispose token#
Dispose Newstate#
Dispose OUT#
Dispose Größe#
Ab hier wird abgespeichert
Let Schlüssel$=""
Let SaveFile$="C:REGHIVE"
DIM Handle#,4
Let Fehler&=@RegOpenKeyEx($80000001,@addr(Schlüssel$),0,$F003F,Handle#) ...hole das Handle des Hive...
ADDSTRING "Errorcode Handle des Hive holen: "+@Str$(Fehler&)
Let Handle&=@long(Handle#,0) ..Handle für Startpunkt des Hives wird ausgelesen....
Let Fehler&=@RegSaveKey(Handle&,@addr(SaveFile$),0) ...speichere den Hive unter C:REGHIVE...
ADDSTRING "Errorcode Hive abspeichern: "+@Str$(Fehler&)
Let Fehler&=@RegCloseKey(Handle&) ...mach "die Kiste" zu..
ADDSTRING "Errorcode Schlüssel schließen: "+@Str$(Fehler&)
Dispose Handle#
Windowtitle "Abspeichern des Registryschlüssels Current_User in binärer Form"
WindowStyle 31
Window 0,0-640,440
Let Button&=@CreateButton(%HWND,"Gespeicherten Hive löschen?",20,300,250,30)
@EditBox("API-Rückmeldungen",1)
CHDIR "C:"
IF FindFirst$("REGHIVE")=""
EnableWindow Button&,0
endif
While 0=0
Waitinput
IF @Getfocus(Button&)
LET IO%=%IORESULT
Assign #1,"C:REGHIVE"
SetFAttr #1,$20
Erase #1
CHDIR "C:"
IF FindFirst$("REGHIVE")=""
@Messagebox("Hive wurde gelöscht!","Hinweis",64)
EnableWindow Button&,0
endif
endif
wend
[keywords:ed0c458271] Hive sichern abspeichern Registry [/keywords:ed0c458271] |
|