REG_BINARY in Registry eintragen
-
Hallo,
ich schreibe noch immer das Setup-Programm...
Dazu muss ich ggf. Programme mit Textpad verknüpfen.
Das geht alles ganz gut, solange ich REG_SZ eintrage.Nun mein Problem:
ich muss einen Wert vom Typ REG_BINARY eintragen, die
Funktion dafür hab ich, leider bekomme ich den Wert nicht so
rein wie ich ihn haben will.
Z.B. In der Registry wird folgendes angezeigt0000 00 00 00 00 59 80 00 00 ....Y...
0008 CC 09 00 00 Í...Ich muss das auslesen, die 59 (hier Hex) um eins erhöhen
und wieder eintragen.KitDlg::createStringValue(HKEY wo, CString wohin, CString keyName, CString keyValue, DWORD TypeOf){ .... if(lRet == ERROR_SUCCESS){ if(RegSetValueEx( tempKey, // subkey handle keyName, // value name 0, // must be zero TypeOf, // value type (LPBYTE) &szBuf, // pointer to value data strlen(szBuf) + 1 ) == ERROR_SUCCESS) ....
Mein Aufruf: createStringValue(HKEY_...,"Software\\Helios...","Command","xxx.exe",RG_SZ);
(ok, Name der Funktion schlecht gewählt)
Wie würde ich es aufrufen wenn ich Hexdaten eintragen will:
createStringValue(HKEY_...,"Software\\Helios...","Properities",XXXXXXX,RG_BINARY);
wie muss XXXXXX aussehen wenn ich in der Registry diesen:
0000 00 00 00 00 59 80 00 00 ....Y...
0008 CC 09 00 00 Í...
eintrag haben will?Ujujuj, ich hoffe ihr versteht was ich meine
Gruß
-
Also, nach 2 Tagen und 2 Nächten
Ein Beispiel für einen 12 Byte Eintrag, wobei
zu achten ist: die Zahlen werden in der Registry umgedreht...lRet = RegOpenKeyEx(HKEY, "MeinProg", 0, KEY_READ | KEY_WRITE, &tempKey); struct newBinValue{ ULONGLONG uValue; ULONGLONG lValue; } ; newBinValue toolProp; toolProp.uValue = 0x805900000000; toolProp.lValue = 0x0000000009cc; if(lRet == ERROR_SUCCESS){ if(RegSetValueEx( tempKey, // subkey handle "Wert", // value name 0, // must be zero REG_BINARY, // value type (LPBYTE) &toolProp, // pointer to value data 12 ) == ERROR_SUCCESS) return true; else return false; } else return false;
Würde HKEY_..\\MeinProg\\Wert vom Typ: REG_BINARY, Wert: 00 00 00 00 80 59 00 00 CC 09 00 00 erzeugen
P.S. ich hab weit und breit nix dazu im Internet gefunden, auch hier in der FAQ
fehlt was dazu. Könnte erweitert werden...Gruß Mladen
[ Dieser Beitrag wurde am 06.02.2003 um 23:52 Uhr von tesla editiert. ]
[ Dieser Beitrag wurde am 06.02.2003 um 23:54 Uhr von tesla editiert. ]
[ Dieser Beitrag wurde am 06.02.2003 um 23:59 Uhr von tesla editiert. ]
-
wobei
zu achten ist: die Zahlen werden in der Registry umgedreht...Falsch, die Zahlen werden im ganz normalen, Intel-üblichen Format abgespeichert, und dies ist prozessorabhängig, nicht von der Registry!
P.S. ich hab weit und breit nix dazu im Internet gefunden, auch hier in der FAQ
fehlt was dazu. Könnte erweitert werden...Wie addiert man 2 Integerzahlen?
... und als nächstes kommt dann die Frage: Wie addiert man 2 double-Zahlen, hab dazu nichts in der FAQ gefunden!Nunja, sollte man aus einem Beispiel des Speicherns von Zeichenketten nicht einfach auf Zeichenketten vom Typ NichtString schlussfolgern können?
-
wobei
zu achten ist: die Zahlen werden in der Registry umgedreht...Falsch, die Zahlen werden im ganz normalen, Intel-üblichen Format abgespeichert, und dies ist prozessorabhängig, nicht von der Registry!
Nicht nur von Prozessor, sondern auch vom Compiler und der Compileroptimierungseinstellung, ausserdem vom verwendetem Betriebssystem.
Ich hab einen Hinweis gemacht, ohne groß darüber zu erklären.Wie addiert man 2 Integerzahlen?
... und als nächstes kommt dann die Frage: Wie addiert man 2 double-Zahlen, hab dazu nichts in der FAQ gefunden!Nunja, sollte man aus einem Beispiel des Speicherns von Zeichenketten nicht einfach auf Zeichenketten vom Typ NichtString schlussfolgern können?
Vielen Dank für deine Antwort auf meinen ersten Eintrag, dann hätten wir uns dies alles ersparren können. Und für jemanden der vor dem gleichen Problem steht, wird schätz ich mal mein Beitrag mehr weiterhelfen können als deine Kommentare.
Vieleicht habe ich den Sinn eines Forums falsch verstanden, oder ich hab das falsche Forum gewählt.
Gruß Mladen
-
NEIN, es ist nicht vom Compiler und den Optimierungen abhängig, jeder Compiler optimiert etwas anders, warum sollten deshalb die Registry-Einträge anders aussehen?
-
Die Funktion RegSetValueEx(...) fängt an der Adresse an zu lesen wo der Pointer hinzeigt, unabhängig davon wie die Daten darin liegen oder wie sie gelesen werden.
Wie du schon sagtest, der Intelformat z.B.
Der Compiler kann aber den Speicher anders besetzen. Füllt er alle Blöcke nacheinander aus, unabhängig von der Variable, oder nimmt er für eine Variable die 4 Blöcke. Das kann auch durch die Optimierungseinstellungen des Compilers (gott sei Dank) eingestellt werden.
Ich hab diese Erfahrung auf ein und demselben Rechner unter 2 Betriebssystem erlebt, wobei es hier nicht auf die BS zurückzuführen ist, sondern auf die verwendeten Compiler. Die Ausgaben waren unterschiedlich !!!
Da wir über die Registry reden, wirds wahrscheinlichMS X sein.
Jedoch antwortete ich auf die grundlegende Überlegung von dir, dem Intenformat.Gruß
-
Wie schon gesagt, es ist nicht vom Compiler abhängig, höchstens von Deinen manuell getroffenen Einstellungen!
Das Aligning muss natürlich das gleiche sein, aber davon bin ich ausgegangen!
-
Dann habe ich wohl Digitale-Geister gesehen.
Mein Prof. der eine Erklärung dafür hatte wohl auch, aber nun bin ich geheilt, danke
-
/me darf sich dann wohl einen neuen Nick zulegen:
Dr. RenéG