|
Beschreibung:
RegLoadKey erstellt einen Unterschlüssel unter HKEY_USER oder HKEY_LOCAL_MACHINE aus der Angegebenen Datei. Unter NT-basierten Windowssystemen ist das Privileg SeRestorePrivilege erforderlich, das aktiviert werden muß.
Deklaration:
DEF @RegLoadKey(3)!ADVAPI32,RegLoadKeyA
Parameter:
1.Parameter: Ein mit RegConnectRegistry erzeugtes Handle eines Registryschlüssels als LongInt oder einer von folgenden vordefinierten Werten: => -HKEY_LOCAL_MACHINE = $80000002 -HKEY_USERS = $80000003 2.Parameter: Adresse eines Unterschlüssels oder Bereichsvariable mit einem Unterschlüssel, der erzeugt werden soll. 3.Parameter: Adresse eines Strings mit dem Dateinamen oder Bereichsvariable mit dem Dateinamen der Registrydatei, die geladen werden soll. Diese Datei hat das Format der mit der API RegSaveKey erzeugten Dateien.
Rückgabewert:
0 bei Erfolg, bei Misserfolg ein Wert <>0 (Fehlercode).
Beispiele:
Quelltext für Profan², Version 7.5:
Declare NewState#,Luid1#,Luid2#,Privileg1#,Privileg2#,System$,Token&,Fehler&,token#,Userliste&
Declare BUFFER#,OLDVALUE#,BUTTON&
Declare Luid4#,Luid3#,Privileg4#,Privileg3#,OUT#,größe#,Zahl1&,zahl2&
Declare Username$,ENDE&
Declare Handle&
Declare REG$
Declare Zähler&
Declare WINVER!
Declare Zähler%
declare Name#
declare Ergebnis#,Useranzahl&
Declare USERDAT$
Declare name3#,size3#,Usereingabe$,Oberschlüssel$,ProfileList$
declare Error&,Datei$,OpenError&
declare Handle#,Savefile$
declare Key#
declare Size#
declare Wert#,Wert2#
Declare Oberschlüssel&,Username2$,Möglichkeit%
Declare reg2$,ProfilePfad$,Find$
Declare ENVERGEBNIS$,Buffer#,ENVErgebnis#
Declare OS#,WinVer&,Winver$
Struct OSVERSIONINFO = dwOSVersionInfoSize&,dwMajorVersion&,dwMinorVersion&,dwBuildNumber&,dwPlatformId&,szCSDVersion$(128)
dim Ergebnis#,100
dim Name#,256
dim Handle#,4
dim Key#,256
dim Size#,1
dim Wert#,4
Dim Wert2#,256
Dim OS#,OSVERSIONINFO
API Declarationen
DEF @ExpandEnvironmentStrings(3)!"kernel32","ExpandEnvironmentStringsA"
DEF @GetLastError(0)!"kernel32","GetLastError" Liefert letzten API Fehler.
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 @RegSetValueEx(6) !"ADVAPI32","RegSetValueExA" Schreibt einen Wert in einen Registrykey.
def @RegEnumKey(4) !"ADVAPI32","RegEnumKeyA" Listet Registryschlüssel auf.
DEF @RegLoadKey(3)!"ADVAPI32","RegLoadKeyA" Lädt einen Hive in die Registry.
DEf @RegUnLoadKey(2)!"ADVAPI32","RegUnLoadKeyA" Entfernt einen mit RegLoadKey geladenen Hive aus der Registry.
DEF @RegCreateKey(3)!"ADVAPI32","RegCreateKeyA" Schlüssel erstellen
DEF @CloseHandle(1) !"kernel32","CloseHandle" Schließt ein Handle (Programm).
DEF &Ver_Platform_Win32_Windows 1
DEF &Ver_Platform_Win32_NT 2
Windows-Version ermitteln
OS#.dwOSVersionInfoSize& = 148
@External("Kernel32","GetVersionExA",OS#)
LET Winver& = 8
If OS#.dwPlatformId& = &Ver_Platform_Win32_Windows
If OS#.dwMajorVersion& = 4
Case OS#.dwMinorVersion& = 0 : Winver& = 1
Case OS#.dwMinorVersion& = 10 : Winver& = 2
Case OS#.dwMinorVersion& = 90 : Winver& = 3
Endif
ElseIf OS#.dwPlatformId& = &Ver_Platform_Win32_NT
Case OS#.dwMajorVersion& = 3 : Winver& = 4
Case OS#.dwMajorVersion& = 4 : Winver& = 5
Case OS#.dwMajorVersion& = 5 : Winver& = 6
Case OS#.dwMinorVersion& = 1 : Winver& = 7
Endif
Dispose OS#
case WinVer& = 1: Let Winver$="Windows95"
case WinVer& = 2: Let Winver$="Windows98"
case WinVer& = 3: Let Winver$="WindowsME"
case WinVer& = 4: Let Winver$="WindowsNT3.5"
case WinVer& = 5: Let Winver$="WindowsNT4"
case WinVer& = 6: Let Winver$="Windows2000"
case WinVer& = 7: Let Winver$="WindowsXP"
case WinVer& = 8: Let Winver$="Unbekannte Windowsversion"
PROC VariableErsetzenInString
Parameters ZuValidierenderText$
der interne Puffer muß das gesamte Environment abdecken können
sonst gibt es einen Fehler bezüglich der Bereichsgrenze
Dim Buffer#,4
Dim ENVErgebnis#,256
LONG Buffer#,0=256
LET ENVERGEBNIS$=""
ADDSTRING "ExpandEnvironmentStrings wird mit dem String "+ZuValidierenderText$+" gestartet!"
LET FEHLER&=@ExpandEnvironmentStrings(@addr(ZuValidierenderText$),ENVErgebnis#,BUFFER#)
Let ENVERGEBNIS$= @String$(ENVErgebnis#,0)
ADDSTRING "ExpandEnvironmentStrings Ergebnis: "+@str$(Fehler&)
ADDSTRING "ExpandEnvironmentStrings erzeugter String: "+ENVERGEBNIS$
DISPOSE Buffer#
Dispose ENVErgebnis#
RETURN ENVERGEBNIS$
endproc
Proc Benutzerlisten
string Key#,0="" Kein Unterschlüssel.
@RegOpenKeyEx($80000003,Key#,0,$F003F,Handle#) Schlüssel HKEY_USERS wird geöffnet
Let Handle&=@Long(Handle#,0)
LET ZÄHLER%=0
LET ERROR&=0
Ziel der Schleife: Schreibweise des Profils .DEFAULT ermitteln:
while @equ(Error&,0) Bis kein neuer Wert gefunden wird...
let Error&=@RegEnumKey(Handle&,Zähler%,Ergebnis#,100) Schreibe gelisteten Schlüssel in Bereich Ergebnis#.
let USEREINGABE$=@string$(Ergebnis#,0) Schreibe Schlüssel in String
case @and(ERROR&=0,@Instr("DEFAULT",@upper$(USEREINGABE$))>0) : @addstring(Userliste&,Usereingabe$) Schreibe Schlüssel .DEFAULT in Listboxliste
inc Zähler%
endwhile
@RegCloseKey(Handle&) HKEY_USERS wird geschlossen.
IF WINVER&<4 Wenn Betriebssystem Windows9x/ME...
Addstring "Windows9x/ME System gefunden"
Let ProfileList$="SoftwareMicrosoftWindowsCurrentVersionProfileList" Dort befindet sich eine Liste mit in Windows vorhandenen Usern unter Windows9x/ME
LET USERDAT$="USER.DAT" So heißt der Hive unter Windows9x/ME.
LET REG$="SoftwareMicrosoftWindowsCurrentVersion" Dort befinden sich RUN und POLICIES Eintrage unter Windows9x/ME.
string Key#,0=ProfileList$
LET Fehler&=@RegOpenKeyEx($80000002,Key#,0,$F003F,Handle#) Es wird versucht, die Profileliste (Root HKEY_LOCAL_MACHINE) unter Windows9x/ME zu öffnen.
LET ZÄHLER%=0
LET ERROR&=0
Die Unterschlüssel sind hier die Profilnamen, sie werden nun gelistet und in eine Listbox geschrieben...
while @equ(Error&,0)
let Error&=@RegEnumKey(@Long(Handle#,0),Zähler%,Ergebnis#,100)
casenot Error& : @addstring(Userliste&,@string$(Ergebnis#,0))
inc Zähler%
endwhile
LET USERANZAHL&=Zähler%-1
@RegCloseKey(@Long(Handle#,0))
else
Addstring "NT System gefunden"
Für die folgenden Registryvorgänge müssen sich unter NT-basierten Systemen erst die Rechte geholt werden.
Auch für einen Administrator sind diese Rechte nicht unter jedem System aktiviert.
Hier die APIS zum setzen der Privilegien:
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.
Dimensionierung der Bereichsvariablen
dim token#,4
DIM NewState#,16
DIM Luid1#,8
DIM Luid2#,8
DIM Privileg1#,256
DIM Privileg2#,256
DIM Luid3#,8
DIM Luid4#,8
DIM Privileg3#,256
DIM Privileg4#,256
DIM BUFFER#,4
DIM OLDVALUE#,256
DIM OUT#,256
Dim Größe#,4
String Privileg1#,0="SeBackupPrivilege"
String Privileg2#,0="SeRestorePrivilege" Privileg für Regloadkey
String Privileg3#,0="SeTakeOwnershipPrivilege" Vielleicht auch noch nötig?
String Privileg4#,0="SeSystemProfilePrivilege" Vielleicht auch noch nötig?
Long NewState#,0=1 Nur ein Privileg soll geändert werden
Long NewState#,12=$00000002 Das Privileg soll eingeschaltet werden
Let SYSTEM$="" Wenn Leerstring, dann lokaler Computer.
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 "Letzter Fehler: "+@str$(@GetLastError()) Welcher Fehler trat zuletzt auf?
let token&=@long(token#,0) Das Handle des Einstellprozesses wird ausgelesen.
Addstring "Fehlercode OpenProcessToken: "+@str$(Fehler&) Wenns geklappt hat, dann 1.
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.
LET FEHLer&=@LookupPrivilegeValue(@addr(SYSTEM$),Privileg2#,LUID2#) 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.
LET FEHLer&=@LookupPrivilegeValue(@addr(SYSTEM$),Privileg3#,LUID3#) 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.
LET FEHLer&=@LookupPrivilegeValue(@addr(SYSTEM$),Privileg4#,LUID4#) 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.
Der Luid für das erste Privileg wird übertragen
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))
@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.
Der Luid für das zweite Privileg wird übertragen
Byte NewState#,4=@Byte(Luid2#,0)
Byte NewState#,5=@Byte(Luid2#,1)
Byte NewState#,6=@Byte(Luid2#,2)
Byte NewState#,7=@Byte(Luid2#,3)
Byte NewState#,8=@Byte(Luid2#,4)
Byte NewState#,9=@Byte(Luid2#,5)
Byte NewState#,10=@Byte(Luid2#,6)
Byte NewState#,11=@Byte(Luid2#,7)
LET FEHLER&=@AdjustTokenPrivileges(Token&,0,NewState#,0,0,0) Das Privileg wird aktiviert. Alle nicht benötigten Werte können auch 0 sein!
Addstring "Fehlercode AdjustTokenPrivileges: "+@str$(Fehler&) Wenn geklappt hat 1.
Der Luid für das dritte Privileg wird übertragen
Byte NewState#,4=@Byte(Luid3#,0)
Byte NewState#,5=@Byte(Luid3#,1)
Byte NewState#,6=@Byte(Luid3#,2)
Byte NewState#,7=@Byte(Luid3#,3)
Byte NewState#,8=@Byte(Luid3#,4)
Byte NewState#,9=@Byte(Luid3#,5)
Byte NewState#,10=@Byte(Luid3#,6)
Byte NewState#,11=@Byte(Luid3#,7)
LET FEHLER&=@AdjustTokenPrivileges(Token&,0,NewState#,0,0,0) Das Privileg wird aktiviert. Alle nicht benötigten Werte können auch 0 sein!
Addstring "Fehlercode AdjustTokenPrivileges: "+@str$(Fehler&) Wenn geklappt hat 1.
Der Luid für das vierte Privileg wird übertragen
Byte NewState#,4=@Byte(Luid4#,0)
Byte NewState#,5=@Byte(Luid4#,1)
Byte NewState#,6=@Byte(Luid4#,2)
Byte NewState#,7=@Byte(Luid4#,3)
Byte NewState#,8=@Byte(Luid4#,4)
Byte NewState#,9=@Byte(Luid4#,5)
Byte NewState#,10=@Byte(Luid4#,6)
Byte NewState#,11=@Byte(Luid4#,7)
LET FEHLER&=@AdjustTokenPrivileges(Token&,0,NewState#,0,0,0) Das Privileg wird aktiviert. Alle nicht benötigten Werte können auch 0 sein!
Addstring "Fehlercode AdjustTokenPrivileges: "+@str$(Fehler&) Wenn geklappt hat 1.
Addstring "Letzter Fehler: "+@str$(@GetLastError()) Letzter Fehler wird ausgegeben
Alle nicht mehr benötigten Bereiche werden gelöscht.
Dispose Luid1#
Dispose Luid2#
Dispose Privileg1#
Dispose Privileg2#
Dispose Luid3#
Dispose Luid4#
Dispose Privileg3#
Dispose Privileg4#
Dispose NewState#
Dispose OldValue#
Dispose Buffer#
dispose OUT#
Dispose Größe#
OK, wenn die Privilegien überhaupt vorhanden waren, bestehen jetzt die Rechte für Hive-Operationen.
LET REG$="SoftwareMicrosoftWindowsCurrentVersion" Dort befinden sich RUN und POLICIES Eintrage unter Windows2000/NT/XP.
LET USERDAT$="NTUSER.DAT" So heißt der Hive unter Windows2000/NT/XP.
Let ProfileList$="SoftwareMicrosoftWindows NTCurrentVersionProfileList" Dort befindet sich eine Liste mit in Windows vorhandenen Usern unter Windows2000/NT/XP.
LET PROFILEPFAD$=@upper$(@readini$("HKEY_2",Profilelist$,"ProfilesDirectory")) Pfad der Profile wird aus der Registry geholt
Case PROFILEPFAD$="" : LET PROFILEPFAD$=@left$($WINPATH,2)+"Dokumente und Einstellungen" Wenn in Registry kein Pfad gefunden wurde, nehme "C:Dokumente und Einstellungen" als Profilepfad
VariableErsetzenInString PROFILEPFAD$
LET PROFILEPFAD$=@$(0)
ADDSTRING "Ausgelesener Profilepfad: "+PROFILEPFAD$
Die User werden gelistet
CHDIR PROFILEPFAD$
Let FIND$=@FINDFIRST$(PROFILEPFAD$+""+"*") Suche Dateien und Ordner im Profilpfad
IF @and(FIND$<>"",Left$(FIND$,1)<>"[") Wenn eine Datei gefunden wurde...
LET Find$="." ...lösche den Namen
elseif @and(FIND$<>"",Left$(FIND$,1)="[") Wenn aber ein Ordner gefunden wurde..
LET Find$=@TRANSLATE$(FIND$,"[","") ...lösche die eckigen Klammern im Ordnernamen
LET Find$=@TRANSLATE$(FIND$,"]","") ...lösche die eckigen Klammern im Ordnernamen
endif
While FIND$<>"" Solange ein Ordner gefunden wurde...
IF @and(FIND$<>".",FIND$<>"..") ...und es wirklich ein Ordner ist...
@ADDSTRING(Userliste&,FIND$) ...schreibe den Ordner in die Listboxliste.
endif
Let FIND$=FINDNEXT$() ...suche nächste Datei / nächsten Ordner
IF @and(FIND$<>"",Left$(FIND$,1)<>"[") ...Wenn eine Datei gefunden wurde...
LET Find$="." ...lösche den Namen
elseif @and(FIND$<>"",Left$(FIND$,1)="[") ...Wenn aber ein Ordner gefunden wurde..
LET Find$=@TRANSLATE$(FIND$,"[","") ...lösche die eckigen Klammern im Ordnernamen
LET Find$=@TRANSLATE$(FIND$,"]","") ...lösche die eckigen Klammern im Ordnernamen
endif
wend
endif
EndProc
Proc Eintraq_erstellen
Clearlist
IF WINVER&<4 Wenn Betriebssystem Windows9x/ME...
IF USERNAME$<>""
LET USERNAME2$=Username$+""
LET Oberschlüssel&=$80000003 Root Schlüssel HKEY_USERS
let OBERSCHLÜSSEL$="HKEY_3" Root Schlüssel HKEY_USERS
Let Datei$=""
If @trim$(@upper$(Username$))<>".DEFAULT" Wenn nicht das .DEFAULT Profil gewählt wurde..
Let Datei$=@readini$("HKEY_2",Profilelist$+""+Username$,"ProfileImagePath")+""+USERDAT$ ...lese den Hive für diesen User aus...
VariableErsetzenInString Datei$
LET DATEI$=@$(0)
IF @FindFirst$(Datei$)<>""
Let OpenError&=@RegLoadKey($80000003,@addr(Username$),@addr(Datei$)) Versuche, Hive in die Registry zu laden
else
Let OpenError&=-110
endif
endif
Addstring "Errorcode beim Laden des Hives: "+@str$(OPENERROR&) Wenn Fehler, ist Openerror&>0!
Print "REGEDIT wird gestartet!"
@winexec("REGEDIT.EXE",1)
Color 12,15
Print "Zum Weitermachen bitte in Hauptfenster klicken!"
Print "RegEdit vorher unbedingt schließen!!!!!"
Color 0,15
WAITINPUT
else
dispose Handle#
dispose Key#
dispose Wert#
dispose Name#
dispose Size#
Dispose wert2#
end
endif
else Wenn Betriebssystem Windows2000/XP...(WindowsNT geht eventuell nicht!!!)
IF USERNAME$<>"" Wenn ein Name ausgewählt wurde
LET USERNAME2$=Username$+""
LET Oberschlüssel&=$80000003 Root Schlüssel HKEY_USERS
let OBERSCHLÜSSEL$="HKEY_3" Root Schlüssel HKEY_USERS
Let Datei$=""
If @trim$(@upper$(Username$))<>".DEFAULT" Wenn nicht das .DEFAULT Profil gewählt wurde..
Let Datei$=ProfilePfad$+""+USERNAME2$+"NTUSER.DAT" Dort befindet sich die Datei NTUSER.DAT für den gewählten User
IF @FindFirst$(Datei$)<>""
Let OpenError&=@RegLoadKey($80000003,@addr(Username$),@addr(Datei$)) Versuche, Hive in die Registry zu laden!
else
Let OpenError&=-110
endif
endif
Addstring "Errorcode beim Laden des Hives: "+@str$(OPENERROR&) Wenn Fehler, ist Openerror&>0!
PRINT "REGEDIT wird gestartet!"
@winexec("REGEDIT.EXE",1) Nur Kontrolle, was in der Registry passiert!
Color 12,15
Print "Zum Weitermachen bitte in Hauptfenster klicken!"
Print "RegEdit vorher unbedingt schließen!!!!!"
Color 0,15
WAITINPUT
else
dispose Handle#
dispose Key#
dispose Wert#
dispose Name#
dispose Size#
Dispose wert2#
LET FEHLER&=@CloseHandle(Token&) Der Einstellprozess wird geschlossen.
Addstring "Fehlercode CloseHandle: "+@str$(Fehler&) Wenn erfolgreich, dann 1.
end
endif
endif
endproc
Windowstyle 31+512
Windowtitle "Testprogramm 1"
Window 0,0-640,390
Let Userliste&=@Createlistbox(%HWND,"",20,200,300,100)
LET BUTTON&=@CREATEBUTTON(%HWND,"User wählen",320,200,200,30)
Print "Das Programm soll die Registry eines beliebigen"
Print "Users öffnen und einen Eintrag unter RUNONCE erstellen."
Benutzerlisten
While %MENUITEM<>-2
Waitinput
IF @Getfocus(Button&)
LET USERNAME$=@GetString$(Userliste&,@GetCursel(Userliste&))
Eintraq_erstellen
Usecursor 2
Addstring "Gewählter User: "+Username$
LET REG2$=Username2$+REG$+"RunOnce"
Addstring "Errorcode Schlüssel erstellen und laden: "+@str$(@RegCreateKey($80000003,@addr(Reg2$),Handle#)) Wenn Schlüssel RunOnce nicht vorhanden ist, wird er erzeugt (ist ja nicht immer da).
long Size#,0=256
string Name#,0="Test"
string Wert2#,0="Explorer.EXE"
Addstring "Errorcode Schlüssel verändern: "+@str$(@RegSetValueEx(@Long(Handle#,0),Name#,0,1,Wert2#,256)) Der Eintrag, der den Explorer startet, wird erstellt.
Addstring "Errorcode Schlüssel schließen: "+@str$(@RegCloseKey(@Long(Handle#,0))) RunOnce wird geschlossen.
IF OPENERROR&=-110
Print "RunOnce Eintrag konnte nicht erzeugt werden!"
@messagebox("Kein Hive gefunden. RunOnce Eintrag konnte nicht erstellt werden!","Hinweis",64)
else
Print "RunOnce Eintrag wurde erzeugt!"
endif
LET ENDE&=1
IF @and(OPENERROR&=0,Datei$<>"") Nur wenn wirklich ein Hive geladen wurde (der Hive des Current Users ist ja immer geladen)..
Addstring "Errorcode Handle des Hive holen: "+@str$(@RegOpenKeyEx($80000003,@addr(Username$),0,$F003F,Handle#)) ...hole das Handle des Hive...
Let Handle&=@long(Handle#,0) ..Handle für Startpunkt des Hives wird ausgelesen....
Addstring "Errorcode Schlüssel schließen: "+@str$(@RegCloseKey(Handle&)) ...mach "die Kiste" zu..
LET Fehler&=@RegUnLoadKey($80000003,@addr(Username$))
While Fehler&<>0
Sleep 500
LET Fehler&=@RegUnLoadKey($80000003,@addr(Username$))
Wend
Addstring "Errorcode Hive entladen: "+@str$(Fehler&)
endif
Usecursor 0
@Editbox("API Rückmeldungen",1)
PRINT ""
endif
wend
Speicher freimachen!
dispose Handle#
dispose Key#
dispose Wert#
dispose Name#
dispose Size#
Dispose wert2#
END
[keywords:7873b3674f] Hive laden Registry editieren Editor User Userprofile HKEY_USERS USER.DAT NTUSER.DAT hinzufügen [/keywords:7873b3674f] |
|