Forum | | | |  Jac de Lad | Hallöle, je veux une Wert dans qui Registry effacer. chez mir funzt cela folgende mais pas. Gibts là nen faute??? KompilierenMarqueSéparationdef @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 ▲ |
| |
| |  | tu ouvres den Schlüssel avec KEY_QUERRY_VALUE Zugriff (lesen), veux mais écrivons. cela allez pas! |
| | | | |
| |  Jac de Lad | Hm, ok, et comment fais ego richtig???
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! je habs déjà trouvé.
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, ensuite tu viens bientôt peut-être selbst zurecht und dir um paramètre 4 de RegOpenKeyEx:
sous NT/2000/XP sommes viele Objekte (Handles) avec einer Zugriffskontrolle versehen. il faut beim Öfffnen des Handles dabei une Hexadezimale numéro angegen (Flag), qui angiebt, comment on cela Handle ouvrir voudrais (écrivons, lesen, Vollzugriff...). c'est ici qui paramètre 4 de RegOpenKeyEx. cela OS überprüft ensuite d'abord, si qui aufrufende User überhaupt cela droite en supplément hat, cela Handle dans qui angeforderten Art et Weise trop ouvrir. quelle Rechte qui jeweilige User geanau sur cela Handle besitzt, steht im Security-Descriptor qui dem jeweiligen objet zugeordnet ist. Hat il qui angeforderten Rechte pas, schlägt cela Öffnen des Handles fehl.
Wird später une Funktion avec dem Handle (Speicherbereich) fonctionnement (ici RegDeleteValue), schlägt cet Funktion ensuite fehl, si cela Handle pas dans entsprechender Weise ouvert wurde.
Arten de Zugriffsflags: Microsoft teilt cet Flags, qui bestimmen, comment un Handle trop ouvrir ist, dans trois Arten ein=>
1.) Spezifische Rechte chaque objet hat différent Eigenschaften et peux c'est pourquoi dans unterschiedlicher Art et Weise ouvert volonté. Spezifische Rechte pour Registryschlüssel sommes: $1=KEY_QUERY_VALUE=Wert lesen $2=KEY_SET_VALUE=Wert écrivons $4=KEY_CREATE_SUB_KEY=Unterschlüssel erstellen $8=KEY_ENUMERATE_SUB_KEYS=Unterschlüssel auflisten $10=KEY_NOTIFY=Über Changements benachrichtigen $20=KEY_CREATE_LINK=Symbolischen Link erstellen
2.) Generic Rechte là es Zig Arten de zugriffsbeschränkten Handles gibt, wäre à peine un Programmierer dans qui situation, sich cela alles trop merken et überhaupt Programme trop entwickeln. il y a c'est pourquoi encore qui Generic Flags, qui pour chaque Handle juste et quasi une Umsetzung qui spezifischen Rechte et Standardrechte sommes: $10000000=GENERIC_ALL=Vollzugriff $80000000=GENERIC_READ=Kompletter Lesezugriff $40000000=GENERIC_WRITE=Kompletter Schreibzugriff $20000000=GENERIC_EXECUTE=Ausführen
3.)Standardrechte Bien sûr gibt es aussi Flags, qui pour alle Handles juste sommes: $40000=WRITE_DAC=Im Security-Descriptor Zugriffsrechte changement $80000=WRITE_OWNER=Eigentümer eines Objektes changement (qui propriétaire hat toujours Avancé Zugriffsrechte). $20000=READ_CONTROL=Auslesen qui bestehenden Zugriffsrechte aus einem Security-Descriptor $10000=_DELETE=Löschen $100000=SYNCHRONIZE=Warten, jusqu'à un Handle bereit ist
Ist alles im Prinzip entier simple - et comment du aus deinem Problem wohl gelernt la hâte, ist es aussi très très important cela trop savons, si on sur neueren Betriebssystemen Programme écrivons veux (sous 95/98/ME peux du cela getrost alles oublier qc)...
ici qui geänderte Code: KompilierenMarqueSéparationDef @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 ▲ |
| |
| |  | je hab justement gelesen, qui du XProfan besitzt. Ab Profan² 7 peux du chez APIs statt qui Bereiche aussi Adressen de Variablen angeben (seulement, si irgendwo un String zurückgeliefert wird, devrait du cela unterlassen): KompilierenMarqueSéparationDef @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>
|
| | | | |
| |  | ah oui, encore quoi trop dem Thema... qui Eigenart un Handle toujours avec Vollzugriff (ici KEY_ALL_ACCESS=$1F003F) trop ouvrir, sollte on possible son laisser. Arbeitet un User pas comme Admin, nimmt einem Windows solche faxen souvent très übel...  |
| | | | |
| |  Jac de Lad | | | | 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, ici hat sich encore einiges geändert:
Relatif à la Einkürzen ist bien sûr. je machs mais quand même toujours d'abord avec Bereichen et kürze es ensuite un, wenns funktioniert. quand même merci. maintenant habe je mais festgestellt, dass cela Problem à Set(Errorlevel... liegt. mais si du mir dire könntest, comment cela avec APIs funktioniert, serait sich cela Problem oui erübrigen. Relatif à la Vollzugriff et so werde je mir trop Herzen prendre! 
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: KompilierenMarqueSéparationBeispiel 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.) avec RegOpenKeyEx den Schlüssel avec dem Flag $1 zum lesen ouvrir. ici sur keinen le cas den Schlüssel avec $F003F=Vollzugriff mais wirklich seulement avec $1=KEY_QUERY_VALUE ouvrir! Läuft dein Programme dans einem User Account et pas avec Adminrechten, ist sonst cela Lecture de Schlüsseln sous HKEY_LOCAL_MACHINE pas possible!!!
2 avec RegQueryValueEx Wert auslesen (égal quelle Art - String, Struktur ou bien Doubleword...). paramètre 4 Empfängt une Flag, qui angibt quelle Art de Wert ausgelesen wurde (String, Doubleword...). |
| | | | |
| |  | ah oui...
quelques Registryschlüssel peux du selbst comme Administrator pas sans weiteres auslesen. en supplément gehören sous anderem beispielsweise qui Schlüssel HKEY_LOCAL_MACHINESAMSAMDOMAINS et qui besonders de mir geliebte Schlüssel HKEY_LOCAL_MACHINESecurityPolicyAccounts. |
| | | | |
| |  Jac de Lad | Ah, je wusste, dass je sur qui zählen peux. Solche speziellen Schlüssel werde je sûrement pas brauchen. quand même merci pour deine Mühe,
schönen dimanche encore, 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 ▲ |
| |
|
répondreOptions du sujet | 2.285 Views |
Themeninformationencet Thema hat 2 participant: |