NT Registry C++/MFC

Ich hatte diese Frage schon mal unter /Betriebssysteme/nt… gestellt’, leider hier Doppelposting.

An den folgenden Schluessel komme ich nicht ran.
Was ist an diesem verd… Statement bloss faul?

result = RegOpenKey (HKEY_LOCAL_MACHINE, (LPCSTR)& „SOFTWARE\Microsoft\IE Setup\Options\UninstallDir“,
(PHKEY)&hkResult);

Mit und ohne obscures casting= alles selbiges Ergebnis:
result=2 -wahrscheinlich weil HKEY_LOCAL_MACHINE = 0x8000002

Ja, ich habe SetRegistryKey (cccc) bei init gesetzt, obwohl es
hier nicht interessieren duerfte.

ich moechte ‚nur‘ schlicht und ergreifend
BELIEBIGE EINTRAEGE aus der Registry lesen.

offensichtlich eine der ‚beliebten‘ windows ‚herausforderungen‘

danke fuer hilfe - digi

Hi Dieter :smile:

Dein Funktionsaufruf ist falsch:

result = RegOpenKey (HKEY_LOCAL_MACHINE,
(LPCSTR)&„SOFTWARE\Microsoft\IE Setup\Options\UninstallDir“,
(PHKEY)&hkResult);

Das Problem ist das „&“-Symbol bei der Übergabe des Subkey. Eine String-Konstante wie „SOFTWARE…“ wird in einem geschützen Speicherbereich hinter dem eigentlichen Programm-Code abgelegt. Wenn diese String-Konstante dann im Source vorkommt, wird automatisch die Startadresse eingesetzt. Daher muss es lauten:

(LPCSTR)„SOFTWARE\Microsoft\IE Setup\Options\UninstallDir“

Ohne Casting hätte dir der Compiler vermutlich schon auf die Finger geklopft :smile:))

offensichtlich eine der ‚beliebten‘ windows
‚herausforderungen‘

Nee, das hat mit Windows eigentlich nichts zu tun. Ist mehr ein C/C+±Problem, diese Sonderbehandlung von Zeichenketten. Muss man halt durch :smile:))

cu Stefan.

Hi Dieter :smile:

Dein Funktionsaufruf ist falsch:

result = RegOpenKey (HKEY_LOCAL_MACHINE,
(LPCSTR)&„SOFTWARE\Microsoft\IE Setup\Options\UninstallDir“,
(PHKEY)&hkResult);

HALLO, bis balde denn, ich bin hier ganz in deiner naehe.
danke fuer antwort.
natuerlich hatte ich das & (mit und ohne) auch weggenommen,
zu anfang natuerlich auch nicht gesetzt.
aber heute (nach der nacht) werd ich mir das ding nochmal
vorknoeppen.
ich lange IMMER wieder und wieder in die sch—kiste mit
der w-programmierung. eigentlich bin ich es SO SATT nach
neun Jahren mehr als weniger frust… :frowning:

ich melde mich.
gruss - digi

Hallo, Stefan, …
… natuerlich habe/hatte ich die sachen schon probiert
mit allen denkbaren cast-operationen. nichts hat geholfen.
ich habe den eindruck, dass das ding evtl keine zugriffsberechtigung hat zum key.
das biest gibt den code 2 zurueck, was der defined EINGANGs-code
des HKEY_LOCAL_MACHINE ist (modifiziert um 0x800000…)

das ding ist doch SOOOO einfach, drei tage arbeit,
und wegen dieser k… alles fuer die katz?
das ist (immer wieder) das frustrierende:
dazu gibt’s dann immer! wieder! pruegel, obwohl man
sich die naechte und wochenenden um die ohren schlaegt.
frustrierend, aeusserst frustrierend.

m$: das netzwerk scheint (wieder?) komplett platt zu sein.
ansonsten kaeme ich da auf deren kb.
mal sehen jetzt, was mein devstudio sonst noch an infos hergibt.

danke - falls dir noch was einfaellt.
wenn ich das finde, geb ich toenchen.

gruss - digi

Dein Funktionsaufruf ist falsch:

result = RegOpenKey (HKEY_LOCAL_MACHINE,
(LPCSTR)&„SOFTWARE\Microsoft\IE Setup\Options\UninstallDir“,
(PHKEY)&hkResult);

Das Problem ist das „&“-Symbol bei der Übergabe des Subkey.
Eine String-Konstante wie „SOFTWARE…“ wird in einem
geschützen Speicherbereich hinter dem eigentlichen
Programm-Code abgelegt. Wenn diese String-Konstante dann im
Source vorkommt, wird automatisch die Startadresse eingesetzt.
Daher muss es lauten:

(LPCSTR)„SOFTWARE\Microsoft\IE Setup\Options\UninstallDir“

Ohne Casting hätte dir der Compiler vermutlich schon auf die
Finger geklopft :smile:))

offensichtlich eine der ‚beliebten‘ windows
‚herausforderungen‘

Nee, das hat mit Windows eigentlich nichts zu tun. Ist mehr
ein C/C+±Problem, diese Sonderbehandlung von Zeichenketten.
Muss man halt durch :smile:))

cu Stefan.

Loesung: q&d:

TCHAR key_buf [100];
HKEY hkResult;
int index =0;
LONG result;
LONG key_len=sizeof(key_buf);
result = RegOpenKey (HKEY_LOCAL_MACHINE,
„SOFTWARE\Microsoft\IE Setup\Options“, //ninstallDir",
(PHKEY)&hkResult);

result = RegQueryValueEx(hkResult,
„UninstallDir“,
0, 0,
(LPBYTE)&key_buf, (LPDWORD)&key_len);

result = RegCloseKey (hkResult);

Dein Funktionsaufruf ist falsch:

result = RegOpenKey (HKEY_LOCAL_MACHINE,
(LPCSTR)&„SOFTWARE\Microsoft\IE Setup\Options\UninstallDir“,
(PHKEY)&hkResult);

Das Problem ist das „&“-Symbol bei der Übergabe des Subkey.
Eine String-Konstante wie „SOFTWARE…“ wird in einem
geschützen Speicherbereich hinter dem eigentlichen
Programm-Code abgelegt. Wenn diese String-Konstante dann im
Source vorkommt, wird automatisch die Startadresse eingesetzt.
Daher muss es lauten:

(LPCSTR)„SOFTWARE\Microsoft\IE Setup\Options\UninstallDir“

Ohne Casting hätte dir der Compiler vermutlich schon auf die
Finger geklopft :smile:))

offensichtlich eine der ‚beliebten‘ windows
‚herausforderungen‘

Nee, das hat mit Windows eigentlich nichts zu tun. Ist mehr
ein C/C+±Problem, diese Sonderbehandlung von Zeichenketten.
Muss man halt durch :smile:))

cu Stefan.