![]() |
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Zitat:
Zitat:
Zitat:
Ich dachte ja, dass man mit der von mir genannten Funktion ![]() @himitsu + MGC: Ich gehe eher von dem lokalen Einsatz auf einem Standalone-Rechner aus, bei dem der Anwender aus Gründen der Sicherheit beim Web-Surfen eher auf einen eingeschränkten Benutzer zurückgreift. |
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Hallo,
leider habe ich bisher keine Lösung für mein Problem finden können. Den Zugriff auf die Registry kann man ja wirklich noch umgehen, indem man "unprofessioneller Weise" den eingeschränkten Nutzernamen abspeichert und dann als Admin ausliest. Somit erhält man den richtigen SID für den HKEY_USERS Registryzweig. Problematischer ist es da schon, wenn man auf Standardpfade zugreifen will:
Delphi-Quellcode:
Hier erhält man wirklich nur die Pfade des Adminkontos statt des eingeschränkten Kontos! Oder kann man dies irgendwie korrigieren?
try
SetLength(lPath, MAX_PATH); if SHGetSpecialFolderPath(0, @lPath[1], CSIDL_APPDATA, False) then begin SetLength(lPath, pos(#0, lPath) - 1); Result := lpath; end; except // ... end; |
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Erstmal noch frohes neues Jahr!
Wenn ich diesen Thread noch richtig im Kopf habe, startest Du Dein Programm von einem eingeschränkten Nutzerkonto aus und startest dann für bestimmte Vorgänge das Admin-Konto. Wie wäre es demnach, wenn Du die Pfade ausliest bevor Du in den Adminmodus wechselst? |
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Hallo,
Dir auch ein frohes neues Jahr. Zitat:
Ich habe zwar für mein Problem eine andere Lösung gefunden, so dass ich nicht mehr in den Admin-Modus muss, aber interessieren würde es mich schon, wie man das hinbekommt, ohne vorher Daten über den Windows-Benutzernamen und Standardpfade in einer Datei abzulegen. |
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Zitat:
![]() Zusammen mit ![]() |
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Delphi-Quellcode:
{-----------------------------------------------------------------------------
Project : - Description : Enhancement of TRegistry for impersonating the registry Author : Michael Puff [http//michael-puff.de] Date : 2012-01-05 -----------------------------------------------------------------------------} unit RegistryEx; interface uses Windows, SysUtils, Registry; type TRegistryEx = class(TRegistry) private FUser: string; FPassword: String; function Impersonate: Boolean; public destructor Destroy; override; procedure ImpersonateUser(UserName: string; Password: string); end; implementation { TRegistryEx } destructor TRegistryEx.Destroy; begin if not RevertToSelf then Halt; // if revert fails kill process for safty reason inherited; end; procedure TRegistryEx.ImpersonateUser(UserName: string; Password: string); begin FUser := UserName; FPassword := Password; if not Impersonate then RaiseLastOSError; end; function TRegistryEx.Impersonate: Boolean; var LogonType : Integer; LogonProvider : Integer; TokenHandle : THandle; begin LogonType := LOGON32_LOGON_INTERACTIVE; LogonProvider := LOGON32_PROVIDER_DEFAULT or LOGON32_PROVIDER_WINNT50; Result := LogonUser(PChar(FUser), nil, PChar(FPassword), LogonType, LogonProvider, TokenHandle); if Result then begin Result := ImpersonateLoggedOnUser(TokenHandle); CloseHandle(TokenHandle); end; end; end.
Delphi-Quellcode:
Probier das mal. Habe es eben nur mal blind getippt, kann es leider hier nicht testen.
uses
RegistryEx; procedure TForm1.btn1Click(Sender: TObject); var reg: TRegistryEx; begin reg := TRegistryEx.Create; try reg.ImpersonateUser('user', 'pw'); finally reg.Free; end; end; |
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Hallo Luckie,
auch Dir ein erfolgreiches 2012! Ich danke Dir für den Hinweis und die superschnelle Umsetzung eines Beispiel-Codes. Ich habe es jetzt auch noch nicht getestet. Nur wie ich die Sache sehe, benötige ich doch wieder den Benutzernamen des eingeschränkten Nutzers. Den weiß das Programm doch aber nicht, wenn es sofort als Admin gestartet wird. Besser wäre es doch, wenn ich den Benutzernamen des tatsächlich geöffneten Windows-Benutzers erhalte, obwohl ich die Software als Admin starte. Sonst habe ich nur wieder den Admin-Nutzernamen. Oder verstehe ich das jetzt falsch? |
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Natürlich brauchst du Name und Passwort des Benutzers auf dessen Registry Hive zu zugreifen willst. Sonst könnte ja jeder als Administrator agieren. Und was ist für dich der "tatsächlich geöffneten Windows-Benutzer"? An einem Windows System können viele Benutzer angemeldet sein und arbeiten. Woher soll das Programm wissen, welcher Benutzer gemeint ist? Wenn ein Benutzer ein Programm unter anderen Konto startet, dann ist das für das gestartete Programm so, als ob der Nutzer mit dem andren Konto es gestartet hätte.
|
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Code:
Das wollte ich doch nur wissen :) Ich dachte, es gäbe eine Möglichkeit, dies auszulesen. So in der Art: das Adminkonto wurde von einem eingeschränkten Benutzerkonto, wie hieß das?
Wenn ein Benutzer ein Programm unter anderen Konto startet, dann ist das für das gestartete Programm so, als ob der Nutzer mit dem andren Konto es gestartet hätte.
Dem ist also nicht so! Somit steht also fest, dass Programme, die unter einem eingeschränkten Windows-Nutzer ohne Adminrechte als "Administrator ausgeführt" werden, nie richtig funkionieren werden, wenn sie eigentlich auf die Nutzer-Registry zugreifen müssen, oder Nutzzer-Standardpfade %UserProfiles%, %Documents% bzw. den Desktop CSIDL_DESKTOPDIRECTORY auslesen müssen. Denn dann erhält man immer die Daten des Adminkontos. Ist das korrekt? |
AW: Zugriff auf Registry eines eingeschränkten Benutzerkontos mit Adminrechten
Starte doch einfach mal cmd.exe als Administrator und schau, was SET so ausgibt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz