Español
Foro

Registry-Valor löschen

 

Jac
de
Lad
Hallöle, Yo voluntad una Valor en el Registry löschen. En me funzt el folgende pero no. Gibts como nen Fehler???
KompilierenMarcaSeparación
def @RegOpenKeyEx(5) !"ADVAPI32","RegOpenKeyExA"
def @RegDeleteValue(2) !"ADVAPI32","RegDeleteValueA"
def @RegCloseKey(1) !"ADVAPI32","RegCloseKey"
declare Handle#
dim handle#,4
declare Key#
dim Key#,100
string Key#,0="SoftwareMicrosoftWindowsCurrentVersionRun"  Pfad des Zielschlüssels
declare name#
dim Name#,100
string Name#,0="Fraps"  Name des zu löschenden Wertes
print @RegOpenKeyEx($80000001,Key#,0,1,Handle#) $80000001=HK_Current_User
print @RegDeleteValue(@Long(Handle#,0),Name#)
print @RegCloseKey(@Long(Handle#,0))
dispose Handle#
dispose Key#
dispose Name#
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
10.12.2005  
 



Usted öffnest el Schlüssel con KEY_QUERRY_VALUE Zugriff (lesen), willst aber escribir. Es no!
 
10.12.2005  
 




Jac
de
Lad
Hm, ok, y cómo mache ego correcto???

Jac
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
10.12.2005  
 




Jac
de
Lad
Ahh! Yo habs ya gefunden.

Jac
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
10.12.2005  
 



Kurze Erklärung, entonces kommst du demnächst tal vez incluso zurecht Lo va en Parámetro 4 de RegOpenKeyEx:

Bajo NT/2000/XP son viele Objetos (Handles) con uno Zugriffskontrolle versehen. Man muß beim Öfffnen des Handles esta una Hexadezimale Zahl angegen (Flag), el angiebt, cómo hacerlo Handle abierto möchte (escribir, lesen, Vollzugriff...). Es hier el Parámetro 4 de RegOpenKeyEx. Das OS überprüft entonces zuerst, si el aufrufende User überhaupt el Recht dazu ha, el Handle en el angeforderten Art y Weise a abierto. Welche Rechte el jeweilige User geanau el Handle besitzt, es en el Security-Descriptor el el jeweiligen Objeto zugeordnet es. Sombrero él el angeforderten Rechte no, schlägt el Öffnen des Handles fehl.

Wird später una Función con el Handle (Speicherbereich) ausgeführt (hier RegDeleteValue), schlägt esta Función entonces fehl, si el Handle no en entsprechender Weise geöffnet wurde.

Arten de Zugriffsflags:
Microsoft teilt esta Flags, el bestimmen, como una Handle a abierto es, en drei Arten ein=>

1.) Spezifische Rechte
Jedes Objeto ha diferente Características y kann deshalb en unterschiedlicher Art y Weise geöffnet voluntad. Spezifische Rechte para Registryschlüssel son:
$1=KEY_QUERY_VALUE=Wert lesen
$2=KEY_SET_VALUE=Wert escribir
$4=KEY_CREATE_SUB_KEY=Unterschlüssel redactar
$8=KEY_ENUMERATE_SUB_KEYS=Unterschlüssel auflisten
$10=KEY_NOTIFY=Über Los cambios benachrichtigen
$20=KEY_CREATE_LINK=Symbolischen Link redactar

2.) Generic Rechte
Como lo Zig Arten de zugriffsbeschränkten Handles son, wäre kaum una Programmierer en el Lage, se el alles a merken y überhaupt Programas para desarrollar. Lo son deshalb todavía el Generic Flags, el para cada Handle igual y quasi una Umsetzung el spezifischen Rechte y Standardrechte son:
$10000000=GENERIC_ALL=Vollzugriff
$80000000=GENERIC_READ=Kompletter Lesezugriff
$40000000=GENERIC_WRITE=Kompletter Schreibzugriff
$20000000=GENERIC_EXECUTE=Ausführen

3.)Standardrechte
Natürlich hay auch Flags, el para todos Handles igual son:
$40000=WRITE_DAC=Im Security-Descriptor Zugriffsrechte ändern
$80000=WRITE_OWNER=Eigentümer uno Objektes ändern (el Eigentümer ha siempre erweiterte Zugriffsrechte).
$20000=READ_CONTROL=Auslesen el bestehenden Zugriffsrechte de una Security-Descriptor
$10000=_DELETE=Löschen
$100000=SYNCHRONIZE=Warten, a una Handle bereit es

Ist alles en el Principio bastante simplemente - y cómo du de deinem Problema wohl gelernt hast, es auch muy muy wichtig el a wissen, si uno en neueren Betriebssystemen Programas escribir voluntad (bajo 95/98/ME kannst Si es usted el getrost alles vergessen)...

Hier el geänderte Code:
KompilierenMarcaSeparación
Def @Regopenkeyex(5) !"ADVAPI32","RegOpenKeyExA"
Def @Regdeletevalue(2) !"ADVAPI32","RegDeleteValueA"
Def @Regclosekey(1) !"ADVAPI32","RegCloseKey"
Declare Handle#
Dim Handle#,4
Declare Key#
Dim Key#,100
String Key#,0="SoftwareMicrosoftWindowsCurrentVersionRun" Pfad des Zielschlüssels
Declare Name#
Dim Name#,100
String Name#,0="Fraps" Name des zu löschenden Wertes
Print @Regopenkeyex($80000001,Key#,0,$2,Handle#)$80000001=HK_Current_User
Print @Regdeletevalue(@Long(Handle#,0),Name#)
Print @Regclosekey(@Long(Handle#,0))
Dispose Handle#
Dispose Key#
Dispose Name#
10.12.2005  
 



Yo gerade gelesen, daß du XProfan besitzt. Ab Profano² 7 kannst du en APIs en lugar de el Bereiche auch Adressen de Variables angeben (sólo, si irgendwo una String zurückgeliefert se, solltest Si es usted el unterlassen):
KompilierenMarcaSeparación
Def @Regopenkeyex(5) !"ADVAPI32","RegOpenKeyExA"
Def @Regdeletevalue(2) !"ADVAPI32","RegDeleteValueA"
Def @Regclosekey(1) !"ADVAPI32","RegCloseKey"
Declare Handle&,Key$,Name$
LET Key$="SoftwareMicrosoftWindowsCurrentVersionRun" Pfad des Zielschlüssels
LET Name$="Fraps" Name des zu löschenden Wertes
Print @Regopenkeyex($80000001,@ADDR(Key$),0,$2,@ADDR(HANDLE&))$80000001=HK_Current_User
Print @Regdeletevalue(Handle&,@ADDR(Name$))
Print @Regclosekey(HANDLE&)
Wa
/a>
 
10.12.2005  
 



Ach sí, todavía qué a el Thema...
El Eigenart una Handle siempre con Vollzugriff (hier KEY_ALL_ACCESS=$1F003F) a abierto, debería uno möglichst ser dejar. Arbeitet una User no como Admin, nimmt una Windows solche faxen oft muy übel...
 
10.12.2005  
 




Jac
de
Lad
Aha.

Hm, como dijo, Yo hatte el problema ya incluso gefunden. Aber entonces igual a meiner nächsten Cuestión: Yo bin sicher no einzige con el Problema, Registry-Werte a lesen, el eventuell no disponible son, entonces gibts nen bösen Fehler. Den puede ser sí folgendermaßen umgehen:
KompilierenMarcaSeparación
proc ReadReg

    declare e%,e$
    e%=Set("Errorlevel",-1)
    e$=ReadIni$($(1),$(2),$(3))
    Set("Errorlvel",e%)
    Return e$

en
/a>

Das ging a ahora bastante prima. Nun Yo aber seit heute XProfan 9. Como va el en el Interpreter auch todavía problemlos, aber con el Runtime kommen en una vez zwei böse Fehler. Kann al con APis realisieren? Mit RegKeyOpenEx y así...

Jac
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
10.12.2005  
 




Jac
de
Lad
@AH:

So, hier ha se ya otra vez einiges geändert:

Relacionado con la Einkürzen es klar. Yo machs aber trotzdem siempre zuerst con Bereichen y kürze lo entonces una, wenns funktioniert. Trotzdem danke.
Jetzt Yo aber festgestellt, dass el problema a Conjunto(Errorlevel... liegt. Aber si du me sagen könntest, como el con APIs funktioniert, sería se el problema sí erübrigen.
Relacionado con la Vollzugriff y así voluntad Yo a Herzen nehmen!

Jac
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
10.12.2005  
 



So:
KompilierenMarcaSeparación
Beispiel zu api_RegQueryValueExA,ADVAPI32
Declare Handle#,Fehler&,Key#,Name#,Wert#,Size#,Type#
Def @Regopenkeyex(5) !"ADVAPI32","RegOpenKeyExA"
Def @Regqueryvalueex(6) !"ADVAPI32","RegQueryValueExA"
Def @Regclosekey(1) !"ADVAPI32","RegCloseKey"
Windowstyle 31
Windowtitle "Aus Registry Startmenüname auslesen"
Window 0,0-640,440
Dim Key#,260
Dim Handle#,4
Dim Name#,250
Dim Size#,4
Dim Wert#,260
Dim Type#,4
String Key#,0="SoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell Folders"
Let Fehler&=@Regopenkeyex($80000001,Key#,0,$F003f,Handle#)
Print "Fehlercode beim Öffenen des Schlüssels User Shell Folders: ";Fehler&

If Fehler&=0

    String Name#,0="Start Menu"
    Long Size#,0=260
    Let Fehler&=@Regqueryvalueex(@Long(Handle#,0),Name#,0,Type#,Wert#,Size#)
    Print "Fehlercode beim Auslesen des Schlüssels: ";Fehler&
    Print ""
    Print "Das Startmenü des aktuellen Users steht hier: "
    Print @String$(Wert#,0)
    Print "Typ des Schlüssels: ";@Long(Type#,0)
    Print "Länge des Wertes: ";@Long(Size#,0);" Bytes"
    Print ""
    Print "Fehlercode RegCloseKey: ";@Regclosekey(@Long(Handle#,0))

Endif

If Fehler&<>0

    String Key#,0="SoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders"
    Let Fehler&=@Regopenkeyex($80000001,Key#,0,$1,Handle#)
    Print "Fehlercode beim Öffenen des Schlüssels Shell Folders: ";Fehler&
    String Name#,0="Start Menu"
    Long Size#,0=260
    Let Fehler&=@Regqueryvalueex(@Long(Handle#,0),Name#,0,Type#,Wert#,Size#)
    Print "Fehlercode beim Auslesen des Schlüssels: ";Fehler&
    Print ""
    Print "Das Startmenü des aktuellen Users steht hier: "
    Print @String$(Wert#,0)
    Print "Typ des Schlüssels: ";@Long(Type#,0)
    Print "Länge des Wertes: ";@Long(Size#,0);" Bytes"
    Print ""
    Print "Fehlercode RegCloseKey: ";@Regclosekey(@Long(Handle#,0))

Endif

If Fehler&<>0

    Print "Fehler!!!!!! Startmenü konnte nicht ausgelesen werden!!!"

Endif

Dispose Type#
Dispose Wert#
Dispose Key#
Dispose Handle#
Dispose Name#
Dispose Size#

While 0=0

    Waitinput
ass=s4 href='./../../function-references/XProfan/wend/'>Wend

1.) Mit RegOpenKeyEx el Schlüssel con el Flag $1 para lesen abierto.
Hier en no Fall el Schlüssel con $F003F=Vollzugriff pero wirklich sólo $1=KEY_QUERY_VALUE abierto! Läuft dein Programa en un User Account y no con Adminrechten, es sonst el Auslesen de Schlüsseln bajo HKEY_LOCAL_MACHINE no posible!!!

2 Mit RegQueryValueEx Valor auslesen (egal welche Art - String, Struktur oder Doubleword...). Parámetro 4 Empfängt una Flag, el angibt welche Art de Valor ausgelesen wurde (String, Doubleword...).
 
11.12.2005  
 



Ach sí...

Einige Registryschlüssel kannst du incluso como Administrator no sin weiteres auslesen.
Dazu gehören bajo anderem por ejemplo el Schlüssel HKEY_LOCAL_MACHINESAMSAMDOMAINS y besonders de me geliebte Schlüssel HKEY_LOCAL_MACHINESecurityPolicyAccounts.
 
11.12.2005  
 




Jac
de
Lad
Ah, Yo wusste, dass I el zählen kann. Solche speziellen Schlüssel voluntad Yo sicher no brauchen. Trotzdem danke para deine Mühe,

schönen Sonntag todavía,
Jac
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
11.12.2005  
 



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

2.251 Views

Untitledvor 0 min.
Andre Rohland31.01.2018
J. Strahl22.02.2012
Heinz Bernhard28.10.2011
Julian Schmidt11.08.2011

Themeninformationen

Dieses Thema ha 2 subscriber:

unbekannt (6x)
Jac de Lad (6x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie