AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Lokal Adminrechte erlangen

Ein Thema von Hobbycoder · begonnen am 30. Apr 2020 · letzter Beitrag vom 1. Mai 2020
Antwort Antwort
Seite 1 von 3  1 23      
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#1

Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 07:38
Mein Programm wird in der Regel aus einem Netzlaufwerk gestartet. Für einige Client's, die über VPN angebunden sind, soll eine Funktion mit rein, das Programm lokal zu installieren, da die VPN teilweise keine große Bandbreite hat.

Ich versuche über folgende Methoden mein Programm kurz und knapp lokal auf den Rechner zu bringen.

Delphi-Quellcode:
function Impersonate(const User, PW: string): Boolean;
var
  LogonType : Integer;
  LogonProvider : Integer;
  TokenHandle : THandle;
  strAdminUser : string;
  strAdminDomain : string;
  strAdminPassword : string;
  i: Integer;
begin
  LogonType := LOGON32_LOGON_INTERACTIVE;
  LogonProvider := LOGON32_PROVIDER_DEFAULT;
  strAdminUser := User;
  if Pos('\', strAdminUser)=0 then
  begin
    strAdminDomain:='.';
  end else begin
    strAdminDomain := Copy(strAdminUser, 1, pos('\', strAdminUser)-1);
    strAdminUser := Copy(strAdminUser, Pos('\', strAdminUser)+1, Length(strAdminUser));
  end;
  strAdminPassword := PW;
  if strAdminDomain<>'then
  begin
    Result := LogonUser(PChar(strAdminUser), PChar(strAdminDomain),
      PChar(strAdminPassword), LogonType, LogonProvider, TokenHandle);
  end else begin
    Result := LogonUser(PChar(strAdminUser), nil,
      PChar(strAdminPassword), LogonType, LogonProvider, TokenHandle);
  end;
  if Result then
  begin
    Result := ImpersonateLoggedOnUser(TokenHandle);
  end;
end;

function LocalInstallation(UserName, Password: string): string;
var
  Directory: string;
begin
  Result:='';
  if Impersonate(UserName, Password) then
  begin
    Directory:=getWinSpecialFolder(CSIDL_PROGRAM_FILESX86)+'MeinProgramm\';
    if ForceDirectories(Directory) then
    begin
      if CopyFile(PChar(Application.Exename), PChar(Directory+ExtractFileName(Application.ExeName)), True) then
      begin
        CreateShortcut(Directory+ExtractFileName(Application.ExeName), _DESKTOP, '',Directory,'','', 'MeinProgramm.lnk');
        CreateShortcut(Directory+ExtractFileName(Application.ExeName), _STARTMENU, 'QualityCheck',Directory,'','', 'MeinProgramm.lnk');
        Result:=Directory+ExtractFileName(Application.ExeName);
      end else
        RaiseLastOSError;
    end else
      RaiseLastOSError;
  end;
end;
Mit den richten Anmeldedaten komme ich auch bis zum ForceDirectories in der Methode "LocalInstallation". Da kommt immer "Zugriff verweigert" (Nehme zum Testen lokales Administratorkonto). Wenn ich mich als Administrator im Windows anmelde kann ich im Windows-Explorer den Ordner ohne weitere Probleme anlegen. (Windows 10)

Nutze ich ImpersonateLoggedOnUser falsch? Oder gibt es für sowas eine besser Möglichkeit?
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 08:29
Das Impersonate gibt dem Prozess nicht plötzlich Adminrechte. Entweder ein Prozess wird mit Adminrechten gestartet, oder ohne. Das lässt sich nicht nachträglich ändern.

PS: Ich würde vielleicht auch hinterfragen ob das Programm wirklich für alle Benutzer unter C:\Programme installiert werden muss. Seit Windows 7 gibt es FOLDERID_UserProgramFiles , also C:\Users\Jupp\AppData\Local\Programs. Da braucht auch kein Mensch Adminrechte für, weil das ist ja nur für Jupp.

Selbst Anwendungen wie z.B. Visual Studio Code installieren sich standardmäßig dorthin.

Geändert von Der schöne Günther (30. Apr 2020 um 08:55 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 08:43
Speichere dein Programm doch unter CSIDL_APPDATA ab und gut ist.
Musste keine Handstände mit den Rechten machen, nur weil du versuchst unter CSIDL_PROGRAM_FILESX86 etwas abzulegen.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 08:54
Das ist aber "roaming" AppData (nicht lokal) und würde über jeden PC mit dem Benutzerkonto synchronisiert werden. Ich hätte das eher verstanden dass AppData\Local das richtige ist, denn manche PCs stehen außerhalb und greifen über eine langsame VPN-Verbindung zu, manche stehen im schnellen Firmennetz und brauchen das nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 09:16
Und nicht das hier ein Denkfehler geschieht "User mit Adminrechten" <> Administratoruser (unter Windows 10 zumindest).
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#6

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 09:55
Das Impersonate gibt dem Prozess nicht plötzlich Adminrechte. Entweder ein Prozess wird mit Adminrechten gestartet, oder ohne. Das lässt sich nicht nachträglich ändern.

PS: Ich würde vielleicht auch hinterfragen ob das Programm wirklich für alle Benutzer unter C:\Programme installiert werden muss. Seit Windows 7 gibt es FOLDERID_UserProgramFiles , also C:\Users\Jupp\AppData\Local\Programs. Da braucht auch kein Mensch Adminrechte für, weil das ist ja nur für Jupp.

Selbst Anwendungen wie z.B. Visual Studio Code installieren sich standardmäßig dorthin.
Hm..ja. Macht Sinn. Ich werden den ..\AppData\Local\Programs nehmen.

Aber trotzdem würde mich interessieren wofür die Funktion Impersonate dann verwendet wird?
Ich hatte das hier: https://www.delphipraxis.net/113712-...anfordern.html entnommen.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#7

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 10:04
Tippe mal darauf, dass ein danach gestarteter Prozess dann mit den entsprechenden Rechten läuft.

Wenn Dein Programm eine zweite Instanz seiner selbst startet, sollte es gehen. Mit 'nem Aufrufparameter versehen, sollte sich das für den Anwender unsichtbar realisieren lassen.

Oder per CreateProcessAsUser eine zweite Instanz starten, die die Installation übernimmt.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 10:24
Das ist aber "roaming" AppData (nicht lokal) und würde über jeden PC mit dem Benutzerkonto synchronisiert werden. Ich hätte das eher verstanden dass AppData\Local das richtige ist, denn manche PCs stehen außerhalb und greifen über eine langsame VPN-Verbindung zu, manche stehen im schnellen Firmennetz und brauchen das nicht.
Ja stimmt, dann den Pfad, den du in deinen Edit im Beitrag davor genannt hast!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#9

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 10:44
Das Impersonate gibt dem Prozess nicht plötzlich Adminrechte. Entweder ein Prozess wird mit Adminrechten gestartet, oder ohne. Das lässt sich nicht nachträglich ändern.
Das stimmt so nicht ganz. Es lassen sich sogar einzelne Threads mit unterschiedlichen Rechten ausführen,
aber es ist einfacher die Rechte direkt beim Start eines Prozesses/Threads festzulegen, bzw. kurz nach dem Start umzuschalten.

Im Puff und hier Forum (Luckie) sollten es einige Beispiele und Tutorials zu finden sein.



Und Ja, Admin ist nicht gleich Admin.
Darum rauchen auch viele alte Codes (aus Zeiten von NT/XP) gern ab, weil sie nicht HabIchAdminrechte HabIchDiesesOderJenesRecht sondern BinIchAdministrator prüfen.
Und nicht das hier ein Denkfehler geschieht "User mit Adminrechten" <> Administratoruser (unter Windows 10 zumindest).
Das ist schon seit WinNT so.

Ich hatte mal ausversehn meinem Administator sämtliche Rechte geklaut ... der durfte dann weniger als ein Gast, obwohl der Administrator hieß und in der Gruppe Administratoren war.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Lokal Adminrechte erlangen

  Alt 30. Apr 2020, 10:50
Gut, seit wann dem so ist hätte ich nicht gewusst aber erst bei Win10 ist mir das mal auf die Füße gefallen

Und einige denken da halt nicht dran und setzen das Gedanklich gleich.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 01:09 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