Discussion:
Über das Netzwerk auf die Registry eines anderen Rechners zugreifen
(zu alt für eine Antwort)
Stefan Dohmen
2005-05-02 09:13:34 UTC
Permalink
Hallo!

Gibt es die Möglichkeit über das Netzwerk auf die Windows-Registry eines
anderen Rechners zuzugreifen?

Besten Dank
Stefan
Tim Westen
2005-05-02 09:49:55 UTC
Permalink
Post by Stefan Dohmen
Gibt es die Möglichkeit über das Netzwerk auf die Windows-Registry
eines anderen Rechners zuzugreifen?
Jepp!
Post by Stefan Dohmen
Besten Dank
Stefan
Kein Problem :)


Gruß, Tim.
Stefan Dohmen
2005-05-02 11:18:57 UTC
Permalink
Hallo!
Post by Stefan Dohmen
Gibt es die Möglichkeit über das Netzwerk auf die Windows-Registry
eines anderen Rechners zuzugreifen?
Jepp!
Ok, Ok, ich weiß ich hätte etwas genauer fragen sollen. Aber ich war etwas
in Eile...

Also, geht das mit Delphi 6 Boardmitteln, oder brauche ich eine spezielle
Komponte. Ein kleiner Tipp, in welche Richtung ich suchen müsste, reicht mir
schon :-)

Danke
Stefan
Daniel Voelkel
2005-05-02 12:29:34 UTC
Permalink
Post by Stefan Dohmen
Also, geht das mit Delphi 6 Boardmitteln, oder brauche ich eine spezielle
Komponte. Ein kleiner Tipp, in welche Richtung ich suchen müsste, reicht mir
schon :-)
Ja, das geht mit Bordmitteln. Mit der unit "Registry" kannst mit dem
enthaltenen TRegistry-Objekt und dessen Methode "RegistryConnect",
gefolgt vom Setzen des Rootkey, dem Öffnen des Astes mit Openkey und
Lesen von Werten mittels ReadInteger/WriteString/... in Bereichen der
gegnerischen Registry rumfummeln.

Viel Spass und pass auf wo Du hinzielst, ;)
Daniel
Dirk Stein
2005-05-02 13:12:44 UTC
Permalink
Post by Daniel Voelkel
Ja, das geht mit Bordmitteln. Mit der unit
"Registry" kannst mit dem enthaltenen
TRegistry-Objekt und dessen Methode
"RegistryConnect", gefolgt vom Setzen des
Rootkey, dem Öffnen des Astes mit Openkey und
Lesen von Werten mittels
ReadInteger/WriteString/... in Bereichen der
gegnerischen Registry rumfummeln.
Wie komme ich den mit deinem Vorschlag auf den
andern PC im Netzwerk? Und dann auf dessen
Registry?
--
mfg
Dirk Stein

Schon eingetragen? http://www.delphiuser.de.vu
- Lang ist der Weg durch Lehren, kurz und wirksam
durch Beispiele.
(Seneca, röm. Dichter u. Phil., 4 v. Chr. - 65
n.Chr.) -
Peter Mueller
2005-05-02 13:42:08 UTC
Permalink
Post by Dirk Stein
Post by Daniel Voelkel
Ja, das geht mit Bordmitteln. Mit der unit
"Registry" kannst mit dem enthaltenen
TRegistry-Objekt und dessen Methode
"RegistryConnect", gefolgt vom Setzen des
Rootkey, dem Öffnen des Astes mit Openkey und
Lesen von Werten mittels
ReadInteger/WriteString/... in Bereichen der
gegnerischen Registry rumfummeln.
Wie komme ich den mit deinem Vorschlag auf den
andern PC im Netzwerk? Und dann auf dessen
Registry?
Steht doch drin: RegistryConnect.

var reg:TRegistry;

reg.RegistryConnect('\\dirkstein.dyndns.org');

Gruß
Peter
Daniel Voelkel
2005-05-02 14:12:01 UTC
Permalink
Post by Dirk Stein
Wie komme ich den mit deinem Vorschlag auf den
andern PC im Netzwerk? Und dann auf dessen
Registry?
Also komplett ausprogrammiert würde das dann zum Bleistift so aussehen:

uses Registry;

...

var reg:TRegistry;
begin
reg:=TRegistry.Create;
reg.rootkey:=HKEY_LOCAL_MACHINE;
if reg.RegistryConnect('DatenSenke') then
if reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion',FALSE) then
if reg.ValueExists('ProductId') then
begin
MessageDlg(reg.ReadString('ProductId'), mtInformation, [mbOk], 0);
end;
reg.Free;
end;


Grüße, Daniel
Stefan Dohmen
2005-05-03 10:15:10 UTC
Permalink
Hallo!
Post by Peter Mueller
var reg:TRegistry;
begin
reg:=TRegistry.Create;
reg.rootkey:=HKEY_LOCAL_MACHINE;
if reg.RegistryConnect('DatenSenke') then
if reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion',FALSE) then
if reg.ValueExists('ProductId') then
begin
MessageDlg(reg.ReadString('ProductId'), mtInformation, [mbOk], 0);
end;
reg.Free;
end;
Erstmal vielen Dank für den Tipp! Wenn man das Registry-Objekt mit dem
eigenen Rechner verbindet (reg.RegistryConnect('\\MeinRechner') oder
reg.RegistryConnect('')) funktioniert das prima. Aber das ist ja nicht Sinn
der Sache :-)

Wenn ich einen anderen Windowsrechner im netzwerk eingebe wird die
Verbindung scheinbar hergestellt (reg.RegistryConnect('\\AndererRechner) ist
TRUE) aber alle Operationen wie reg.ReadString, reg.KeyExists,
reg.ValueExist, etc. werden ohne Erfolg ausgeführt.Es ist also eigentlich
kein Zugriff möglich.

An nem Tippfehler des Rechnernames kann es nicht liege, ändere ich die
Schreibweise, scheitert die Verbindung
(reg.RegistryConnect('\\AndererRechner) ist FALSE).

Muss ich sonst noch was beachten wenn ich auf einen 3. Rechner zugreifen
will?

Danke
Stefan
Joachim Duerr
2005-05-03 11:10:24 UTC
Permalink
Post by Stefan Dohmen
Muss ich sonst noch was beachten wenn ich auf einen 3. Rechner
zugreifen will?
Dein Benutzer braucht die Zugriffsrechte auf die Registry des anderen
Rechners. Ich habe hier mal ein paar Tests in unserer Domäne gemacht
und es funktioniert einwandfrei (solange die Benutzer in der Domäne
angelegt sind).
--
Joachim Dürr
Advantage Database Server Support Lead (EMEA)
Advantage[at]extendsys.de
Daniel Voelkel
2005-05-03 11:35:52 UTC
Permalink
Post by Stefan Dohmen
Wenn ich einen anderen Windowsrechner im netzwerk eingebe wird die
Verbindung scheinbar hergestellt (reg.RegistryConnect('\\AndererRechner) ist
TRUE) aber alle Operationen wie reg.ReadString, reg.KeyExists,
reg.ValueExist, etc. werden ohne Erfolg ausgeführt.Es ist also eigentlich
kein Zugriff möglich.
Holla,

hmm, das könnte zum einen an den Rechten liegen, welche die auf der
Remotemaschine hast. Bist Du in einer Domäne und kannst Adminrechte
erhalten und somit in dieser Richtung weiterforschen? Sollte es daran
liegen und soll das ganze auch ohne Adminrechte fungieren dann kann man
noch versuchen vor dem Registryzugriff ein LogonUser (dazu bei Bedarf
mehr. Ich muss vorerst meine Quellen rauskramen) zu veranstalten. Damit
hatte ich mich afair daran vorbeigemogelt.

Zum anderen erinnere ich mich an Probleme, welche beim Zugriff auf
bestimmte Bereiche der Registry auftraten. Ich weiß aber nicht mehr, in
welche Bereiche man nicht reingreifen konnte. Daher schrieb ich auch
dass Du mit diesen Funktionen zumindest "in Bereichen der gegnerischen
Registry" hantieren kannst. :) Wie lautet denn der Schlüssel auf den Du
zugreifen willst? Läuft mein Beispiel ebenfalls nicht?

Weiterhin könnte es mit der Zugriffsart zusammenhängen, die man bei
TRegistry.Create() angeben kann. Mit KEY_ALL_ACCESS fordert man
Vollzugriff, mit KEY_QUERY_VALUE hat man einen Lesezugriff. Ich glaube
aber nicht dass es daran liegt, weil Du sagtest dass selbst KeyExists
nicht funktionieren würde.

Grüße, Daniel

Loading...