AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Registry wird nur teilweise ausgelesen
Thema durchsuchen
Ansicht
Themen-Optionen

Registry wird nur teilweise ausgelesen

Ein Thema von Angel4585 · begonnen am 27. Aug 2009 · letzter Beitrag vom 1. Sep 2009
Antwort Antwort
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

Registry wird nur teilweise ausgelesen

  Alt 27. Aug 2009, 11:04
Hallo,

folgender Fall unter Windows XP(auf anderen noch nicht getestet):

Dienst startet Programm.exe vor Login des Benutzers, aber mit dessen Benutzdaten.

Programm.exe soll die vorhandenen Netzlaufwerke wiederherstellen um eine Datei dort abzulegen.

Um die Netzlaufwerke wiederherzustellen lese ich die aus HKEY_CURRENT_USER\Network aus.
Ist der Benutzer eingeloggt funzt dies auch ohne Probleme. Aber wenn der Benutzer nicht eingeloggt ist, kann Network nicht gefunden/gelesen werden. Wenn ich mir die Liste der Keys von HKEY_CURRENT_USER dann ausgebe, werden

Network
SessionInformation
Volatile Environment

nicht ausgegeben.

An was kann das liegen? An der Art wie ich das Programm aus dem Dienst starte?(Dienst läuft als Localsystem)
Das Programm wird per CreateProcessAsUser gestartet und wie gesagt, wenn der Benutzer sich einloggt funktioniert es auf einmal wunderprächtig.
Oder lese ich die Laufwerke an der falschen Stelle aus?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Registry wird nur teilweise ausgelesen

  Alt 27. Aug 2009, 11:08
In welchem Kontext läuft Programm.exe?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Registry wird nur teilweise ausgelesen

  Alt 27. Aug 2009, 11:16
wie meinst Kontext?

Es läuft als der Benutzer der sich sonst auch angemeldet und unter dem das Netzlaufwerk existiert.

Die LogonUser sieht so aus:

LogonUser(PAnsiChar(LUser),PAnsiChar(LDomain),PAnsiChar(LPassword),LOGON32_LOGON_NETWORK,LOGON32_PROVIDER_DEFAULT,ltoken) anstatt LOGON32_LOGON_NETWORK hatte ich auch schon LOGON32_LOGON_INTERACTIVE hat aber beides keinen Effekt.



Edit: Wenn ich mich nach einloggen wo es funktioniert und alles gelesen werden kann wieder auslogge, geht es wieder nicht.

Edit2: Was spricht dagegen die Netzlaufwerke per Eintrag in die Registry einfach selbst zu erzeugen und nicht mit den WNetAddConnection2 Methoden?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Registry wird nur teilweise ausgelesen

  Alt 31. Aug 2009, 12:49
So nach genauerer Analyse scheint es so abzulaufen, dass in dem Network-schlüssel nur die aktuell vorhandenen Netzlaufwerke abgelegt sind, die werden nach Logout auch wieder gelöscht.

Bleibt für mich natürlich die Frage: Wie kann ich die Netzlaufwerke aus nem Programm verwenden, welches als Benutzer aus nem Dienst heraus gestartet wird, bevor sich ein Benutzer selbst anmeldet?

Edith fragt wer hier die Seite so breit macht das horizontale Scrollbalken kommen? Der LogonUser-Code? dann pls en leerzeichen reineditieren, ich darf da nixmehr machen
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Registry wird nur teilweise ausgelesen

  Alt 1. Sep 2009, 10:08
So mal die Hilfe bissl durchforstet(unter D2005, so verzweifelt bin ich schon )

Ich starte den prozess der die Registry auslesen soll mit CreateProcessAsUser. Damit das Profil geladen wird wird vorher noch LoadUserProfile aufgerufen. In der Hilfe steht dazu:

Zitat:
Upon successful return, the hProfile member of PROFILEINFO is a registry key handle opened to the root of the user's hive. It has been opened with full access (KEY_ALL_ACCESS). If a service that is impersonating a user needs to read or write to the user's registry file, use this handle instead of HKEY_CURRENT_USER. Do not close the hProfile handle. Instead, pass it to the UnloadUserProfile function. This function closes the handle. You should ensure that all handles to keys in the user's registry hive are closed. If you do not close all open registry handles, the user's profile fails to unload. For more information, see Registry Key Security and Access Rights and Registry Hives.
Die Registry lese ich bisher mit der TRegistry Klasse aus. Wenn ich den Text aus der Hilfe lese würde ich vermuten, dass ich wenn ich mit dem Handle arbeite anstatt dem Schlüssel, mehr sehen kann.
Aber wie benutze ich denn das Handle anstatt dem HKEY_CURRENT_USER?

Ich könnte dann nämlich vermutlich die Netzlaufwerke im Dienst wiederherstellen anstatt im Programm, oder?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz