AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus

Ein Thema von greenmile · begonnen am 28. Feb 2011 · letzter Beitrag vom 2. Mär 2011
Antwort Antwort
Seite 1 von 2  1 2      
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#1

Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus

  Alt 28. Feb 2011, 16:12
Hallo,

ich benötige von meinem Dienst aus Zugriff auf die jeweils aktuelle CURRENT_USER Registry bzw auf den Pfad "Eigene Dateien". Das Problem liegt auf der Hand: Ein Dienst sieht eigentlich nur sich selbst, also linkt CURRENT_USER nur auf die Registry des Dienstes. Jetzt war meine Idee, dass ich ja die SID vom aktuell angemeldeten User auslesen und diese für HKEY_USERS\S-1238 usw verwenden kann. Leider finde ich hierüber keinen Source, hat jemand eine Idee? Den Usernamen des jeweils aktuellen Benutzers kann ich korrekt auslesen (dank http://www.delphipraxis.net/615483-post1.html), aber wie lese ich die SID aus? Und funkioniert es korrekt mit HKEY_USERS\{SID}?

Paul
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#2

AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus

  Alt 28. Feb 2011, 16:46
[...] aber wie lese ich die SID aus? Und funkioniert es korrekt mit HKEY_USERS\{SID}?
Mit MSDN-Library durchsuchenLookupAccountSid . Ob die vom Service aus sichtbar sind, weiß ich nicht ad-hoc, aber sollten eigentlich. Funktioniert aber nur wenn der entsprechende Hive geladen ist (MSDN-Library durchsuchenRegLoadKey).

Übrigens: was ist denn deiner Meinung nach der jeweils aktuelle Benutzer?
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus

  Alt 28. Feb 2011, 16:57
Habe gerade gesehen, dass mir die Nachricht WTS_SESSION_LOGON ja als lParam die SessionID übergibt. Die Frage ist jetzt bloss, wie ich damit weitermache. Ich benötige eine View auf die Registry vom aktuellen Benutzer, also für den, der gerade die Tastatur verwendet. Hintergrund ist, dass der Dienst Daten aus der Registry ausliest, die jeweils für den aktuellen Benutzer gelten. Loggt sich ein Benutzer ein, muss der Dienst aus HKCU Daten auslesen und diese auswerten. Ist übrigens kein Virus o.ä.

Hast Du eine Idee?

Geändert von greenmile (28. Feb 2011 um 17:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#4

AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus

  Alt 28. Feb 2011, 17:14
Habe gerade gesehen, dass mir die Nachricht WTS_SESSION_LOGON ja als lParam die SessionID übergibt.
Ich bin verwirrt. Wie kommst du darauf, daß dir das weiterhilft?

Ich benötige eine View auf die Registry vom aktuellen Benutzer, also für den, der gerade die Tastatur verwendet.
Kannst du nicht wirklich herausbekommen. Wenn man es je nach System eingrenzt, gibt es weitere Anhaltspunkte, aber ein sicheres System ist mir noch nicht untergekommen.

Wer das behauptet blendet nämlich aus, daß es sich bei der NT-Plattform um Mehrbenutzersysteme handelt.

Hintergrund ist, dass der Dienst Daten aus der Registry ausliest, die jeweils für den aktuellen Benutzer gelten. Loggt sich ein Benutzer ein, muss der Dienst aus HKCU Daten auslesen und diese auswerten.
Ein Programm welches im Kontext des entsprechenden Benutzers läuft könnte deinem Dienst bescheidgeben und die entsprechenden Daten sogar gleich mitliefern. Wäre allemale sauberer als das was sich bisher hier abzeichnet.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#5

AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus

  Alt 28. Feb 2011, 19:01
Funktionsaufrufe:

WTSGetActiveConsoleSession dann WTSQueryUserToken

SHGetFolderPath mit Token
und
KORREKTUR
RegOpenUserClassesRoot
bzw.
ImpersonateLoggedOnUser mit token, dann
RegOpenCurrentUser
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)

Geändert von Dezipaitor (28. Feb 2011 um 22:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#6

AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus

  Alt 28. Feb 2011, 20:04
RegOpenCurrentUser bzw.
RegOpenUserClassesRoot
Funktionieren die ohne Impersonation?

Auf WTSGetActiveConsoleSession bin ich nicht gekommen. Aber stimmt, wäre ja die Konsole wenn es derjenige vor der Tastatur sein soll.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#7

AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus

  Alt 28. Feb 2011, 22:59
So genau habe ich garnicht geschaut

Das erste RegXXX geht direkt mit einem Token, das zweite mit ImpersonateLoggedOnUser.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus

  Alt 1. Mär 2011, 11:47
Super, ich bin fast am Ziel

1. WTSQueryUserToken(SessionID, hUserToken);
2. ImpersonateLoggedOnUser(hUserToken);

Funktioniert beides, also keine Fehlermeldung. Aber: Jetzt hänge ich am 3ten Punkt.


implementation

function RegOpenCurrentUser(samDesired: REGSAM; phkResult: PHKEY): LongInt; external 'Advapi32.dll' name 'RegOpenCurrentUser';

...
var phkRoot: HKEY;
...
RegOpenCurrentUser(KEY_READ, @phkRoot);


Die Funktion gibt mir immer den Fehlercode 998 zurück (ERROR_NOACCESS?). Das verstehe ich nicht, eigentlich müsste ich doch Zugriff haben?
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#9

AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus

  Alt 1. Mär 2011, 13:05
Die Funktion gibt mir immer den Fehlercode 998 zurück (ERROR_NOACCESS?). Das verstehe ich nicht, eigentlich müsste ich doch Zugriff haben?
Mangels Testumgebung kann ich das hier nicht nachvollziehen, aber ERROR_NOACCESS klingt ähnlich wie ERROR_ACCESS_DENIED (5), es klingt aber auch an, daß der ACL vielleicht keinen passenden ACE enthält. Haste versucht den ACL des Schlüssels vor Zugriff mal anzupassen? Wäre ja auch mal interessant ob du wirklich im korrekten Kontext läufst. Versuch doch mal a.) die ACEs des obersten Schlüssels auszulesen und b.) eine Ereignis ins Log zu schreiben (da ist dann zu sehen welcher Benutzerkontext es war).
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.107 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Zugriff auf "Eigene Dateien" / "Registry" vom Dienst aus

  Alt 1. Mär 2011, 13:45
War ein Fehler meinerseits, die Funktion war nicht aus der DLL geladen; jetzt funktioniert es, VIELEN DANK!

Für die Nachwelt:

1. WTS_SESSION_LOGON,WTS_CONSOLE_CONNECT und WTS_REMOTE_CONNECT im Dienst abfangen, lParam enthält die SessionID
2. WTSQueryUserToken(SessionID, hUserToken); // SessionID in hUserToken
3. ImpersonateLoggedOnUser(hUserToken); // Als User anmelden
4. phkRoot: HKEY;
RegOpenCurrentUser(KEY_READ, @phkRoot); // Registry mappen

Anschließend kann der Dienst so auf die CURRENT_USER zugreifen:

With TRegistry.Create do begin
RootKey := phkRoot; // Von RegOpenCurrentUser anstelle von HKEY_CURRENT_USER
...
End;

Um die Pfade auszulesen (Eigene Dateien), anstelle von Punkt 4 einfach "CreateEnvironmentBlock" aufrufen.

5. RevertToSelf; // Nicht vergessen: Ursprünglicher User, das Gegenteil von ImpersonateLoggedOnUser

Geändert von greenmile ( 1. Mär 2011 um 13:53 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:18 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