Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Anwendung als anderer Benutzer starten (https://www.delphipraxis.net/176005-anwendung-als-anderer-benutzer-starten.html)

azwa66 6. Aug 2013 10:35

Anwendung als anderer Benutzer starten
 
Hallo Leute,

ich habe folgenden Situation: Mein Delphi-Programm soll unter Windows 7 mit eingeschränkten Rechten aufgerufen werden. Lokales oder Domänen Adminkonto (Benutzer/Kennwort) sind bekannt. Ich möchte nun aus dem Programm eine andere Anwendung als Admin aufrufen ohne das der übliche Logindialog erscheint. Habe schon viel gelesen und gegoogelt, hat leider nicht geholfen.

Würde mich sehr freuen wenn ihr mir da weiter helfen könntet.

Danke

Sir Rufo 6. Aug 2013 10:39

AW: Anwendung als anderer Benutzer starten
 
Zitat:

Zitat von azwa66 (Beitrag 1223665)
Hallo Leute,

ich habe folgenden Situation: Mein Delphi-Programm soll unter Windows 7 mit eingeschränkten Rechten aufgerufen werden. Lokales oder Domänen Adminkonto (Benutzer/Kennwort) sind bekannt. Ich möchte nun aus dem Programm eine andere Anwendung als Admin aufrufen ohne das der übliche Logindialog erscheint. Habe schon viel gelesen und gegoogelt, hat leider nicht geholfen.

Würde mich sehr freuen wenn ihr mir da weiter helfen könntet.

Danke

Hebelt man damit nicht die UAC aus?

Der schöne Günther 6. Aug 2013 10:39

AW: Anwendung als anderer Benutzer starten
 
Sehe ich auch so:

Ich glaube wenn das gehen würde, wäre das schlimm. Deine Anwendung läuft mit eingeschränkten Rechten. Nun kann sie doch nicht ungefragt etwas in Gang bringen, das Administratorrechte braucht. Das muss der Benutzer auch explizit bestätigen.

Würde ich jetzt mal behaupten. Beweise oder einschlägige Erfahrung kann ich nicht anbieten 8-)

azwa66 6. Aug 2013 10:48

AW: Anwendung als anderer Benutzer starten
 
ich dachte genau dafür gebe es solche Funktionen wie LogonUser, ImpersonateLoggedOnUser oder CreateProcessAsUser!?!

Dalai 6. Aug 2013 10:50

AW: Anwendung als anderer Benutzer starten
 
Zitat:

Zitat von Sir Rufo (Beitrag 1223666)
Hebelt man damit nicht die UAC aus?

Nicht nur die hebelte man damit aus, sondern das gesamte Konzept der Nutzer- und Rechtetrennung, völlig unabängig davon, ob die UAC aktiviert ist.

Im Grunde gibt es zwei (mir bekannte) Möglichkeiten: Entweder fragst du selber nach Credentials und nutzt dann diese Daten in CreateProcessAsUser oder du nutzt ShellExecuteEx mit dem Verb 'runas' (ruft UAC sofern aktiv) bzw. 'runasuser' (ruft 'Ausführen als anderer Benutzer') und überlässt es damit Windows, nach den Credentials zu fragen.

MfG Dalai

azwa66 6. Aug 2013 10:57

AW: Anwendung als anderer Benutzer starten
 
Zitat:

Zitat von Dalai (Beitrag 1223669)
Zitat:

Zitat von Sir Rufo (Beitrag 1223666)
Hebelt man damit nicht die UAC aus?

Nicht nur die hebelte man damit aus, sondern das gesamte Konzept der Nutzer- und Rechtetrennung, völlig unabängig davon, ob die UAC aktiviert ist.

Im Grunde gibt es zwei (mir bekannte) Möglichkeiten: Entweder fragst du selber nach Credentials und nutzt dann diese Daten in CreateProcessAsUser oder du nutzt ShellExecuteEx mit dem Verb 'runas' (ruft UAC sofern aktiv) bzw. 'runasuser' (ruft 'Ausführen als anderer Benutzer') und überlässt es damit Windows, nach den Credentials zu fragen.

MfG Dalai

Ich habe ja die Credentials aber ich bekomme das mit CreateProcessAsUser nicht hin! Wie geht das??????
Das mit runas find ich nicht so dolle, da der "normale" Benutzer ja nicht das Passwort des Admins kennt.

Sir Rufo 6. Aug 2013 11:06

AW: Anwendung als anderer Benutzer starten
 
Aber genau darum geht es doch bei der UAC, für Admin-Rechte muss man sich nochmals als Benutzer mit Adminrechten legitimieren

azwa66 6. Aug 2013 13:40

AW: Anwendung als anderer Benutzer starten
 
Zitat:

Zitat von Sir Rufo (Beitrag 1223672)
Aber genau darum geht es doch bei der UAC, für Admin-Rechte muss man sich nochmals als Benutzer mit Adminrechten legitimieren

So soll es ja auch sein. Nur wäre es m.M. nach schön wenn das Legitimieren über eine Funktion durchführbar wäre.
Über die Funktionen loginUser und ImpersonateLoggedOnUser kann man sich ja auch als anderen Benutzer legitimieren. Leider läuft das anschließende ShellExecuteEx wieder in der "Umgebung" des einfachen (ursprünglichen) Benutzers. :(

samso 6. Aug 2013 14:07

AW: Anwendung als anderer Benutzer starten
 
Ja, das geht. Da das Passwort für den Administrator dem Programm bekannt ist, kann sich das Programm ganz normal anmelden. Am einfachsten geht das mit CreateProcessWithLogonW. Es gibt auch ein entsprechendes Kommandozeilentool "runas".

Sir Rufo 6. Aug 2013 14:18

AW: Anwendung als anderer Benutzer starten
 
Zitat:

Zitat von samso (Beitrag 1223709)
Ja, das geht. Da das Passwort für den Administrator dem Programm bekannt ist, kann sich das Programm ganz normal anmelden. Am einfachsten geht das mit CreateProcessWithLogonW. Es gibt auch ein entsprechendes Kommandozeilentool "runas".

Und trotzdem wird bei eingeschaltetem UAC die UAC-Abfrage kommen.

Wenn nicht, dann würde mich das beunruhigen und das gesamte UAC-Geraffel ad absurdum führen

samso 6. Aug 2013 14:30

AW: Anwendung als anderer Benutzer starten
 
Da ich diese Funktion bereits getestet habe, kann ich garantieren, dass keine UAC-Abfrage kommt. Das macht auch keinen Sinn, weil das Passwort des Administrators bereits in der Funktion übergeben wird.
Der UAC-Mechanismus ist weiterhin sinnvoll, weil das Ganze ja nur dann funktioniert, wenn dem Programm das Passwort bekannt ist. Wer ein schwaches Admin-Passwort benutzt, der hat natürlich in jedem Fall ein Problem. Sämtliche Remote-Wartungsfunktionen rufen ebenfalls keine UAC-Dialog auf. Ein möglicher Angreifer kann also bei einem schwachen Admin-Passwort über diverse Wege auf das System zugreifen.

Dalai 6. Aug 2013 14:36

AW: Anwendung als anderer Benutzer starten
 
Zitat:

Zitat von Sir Rufo (Beitrag 1223712)
Zitat:

Zitat von samso (Beitrag 1223709)
Ja, das geht. Da das Passwort für den Administrator dem Programm bekannt ist, kann sich das Programm ganz normal anmelden. Am einfachsten geht das mit CreateProcessWithLogonW. Es gibt auch ein entsprechendes Kommandozeilentool "runas".

Und trotzdem wird bei eingeschaltetem UAC die UAC-Abfrage kommen.

Das nehme ich auch an. Aber fragt dieser Dialog nochmals nach dem Passwort, wenn das dem Programm bereits bekannt ist? Ich weiß es nicht, weil ich das nie ausprobiert habe, weil ich CreateProcessXY bislang nicht verwendet habe.

MfG Dalai

azwa66 6. Aug 2013 15:11

AW: Anwendung als anderer Benutzer starten
 
Zitat:

Zitat von samso (Beitrag 1223709)
Ja, das geht. Da das Passwort für den Administrator dem Programm bekannt ist, kann sich das Programm ganz normal anmelden. Am einfachsten geht das mit CreateProcessWithLogonW. Es gibt auch ein entsprechendes Kommandozeilentool "runas".

Irgendwie bekomme ich das nicht hin! "Normale" Programm starten über CreateProcessWithLogonW aber eine setup.exe wird nicht ausgeführt!

Hier mal ein Codeschnipsel:

function CreateProcessWithLogonW(
lpUsername,
lpDomain,
lpPassword:PWideChar;
dwLogonFlags:dword;
lpApplicationName: PWideChar;
lpCommandLine: PWideChar;
dwCreationFlags: DWORD;
lpEnvironment: Pointer;
lpCurrentDirectory: PWideChar;
const lpStartupInfo: tSTARTUPINFO;
var lpProcessInformation: TProcessInformation): BOOL; stdcall; external 'advapi32.dll';

function StartProgramm(Benutzer:string;Passwort:string;Doma in:string;EXE:string):boolean;
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
result:=false;
FillChar (StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
if CreateProcessWithLogonW(StringToOleStr(Benutzer),S tringToOleStr(Domain), StringToOleStr(Passwort), 0, StringToOleStr(Exe), nil, 0, nil, nil, StartupInfo, ProcessInfo) then
result:=true;
end;

Aufruf Startprogramm('admin', 'admin', '', 'c:\temp\test.exe') --> funktioniert :-D
Aufruf Startprogramm('admin', 'admin', '', 'c:\temp\setup.exe') --> funktioniert nicht!!! :(

Mache ich da was falsch?

Hat jemand ein Beispiel für CreateProcessAsUser???

Danke

Dalai 6. Aug 2013 16:08

AW: Anwendung als anderer Benutzer starten
 
Ich würde mal GetLastError benutzen - ggf. in Verbindung mit SysErrorMessage, um rauszufinden, warum etwas nicht funktioniert, gerade bei API-Funktionen. Zum anderen empfehle ich, DELPHI-Tags (das Helmsymbol im Editor beim Antworten) für Code hier im Forum zu verwenden, um Code lesbarer zu machen und von Interpretationen/Umwandlung in Smilies o.ä. durch das Forum auszunehmen.

MfG Dalai

jfheins 6. Aug 2013 22:05

AW: Anwendung als anderer Benutzer starten
 
Ist das sie gleiche exe? Hat die ein Manifest? Geht es, wenn du die setup.exe umbenennst?

Es gibt nämlich eine Sonderbehandlung für Dateien wie "setup.exe", "install.exe" usw. :wink:

azwa66 7. Aug 2013 07:30

AW: Anwendung als anderer Benutzer starten
 
Zitat:

Zitat von jfheins (Beitrag 1223766)
Ist das sie gleiche exe? Hat die ein Manifest? Geht es, wenn du die setup.exe umbenennst?

Es gibt nämlich eine Sonderbehandlung für Dateien wie "setup.exe", "install.exe" usw. :wink:

Nein ist sie nicht! Ohne Manifest. Habe auch schon die setup.exe umbenannt, leider wird diese dann auch nicht gestartet.

Dalai 7. Aug 2013 10:41

AW: Anwendung als anderer Benutzer starten
 
In Ergänzung zu jfheins: Ich hatte das Problem ebenfalls.

Zitat:

Zitat von azwa66 (Beitrag 1223784)
Habe auch schon die setup.exe umbenannt, leider wird diese dann auch nicht gestartet.

Und was sagt GetLastError nun?

MfG Dalai

Bernhard Geyer 7. Aug 2013 11:48

AW: Anwendung als anderer Benutzer starten
 
Zitat:

Zitat von azwa66 (Beitrag 1223784)
Nein ist sie nicht! Ohne Manifest. Habe auch schon die setup.exe umbenannt, leider wird diese dann auch nicht gestartet.

Steht in den Eigenschafter der Exe sowas wird "update", "install". Dann ist es dort das gleiche.

azwa66 7. Aug 2013 13:20

AW: Anwendung als anderer Benutzer starten
 
Zitat:

Zitat von Dalai (Beitrag 1223839)
In Ergänzung zu jfheins: Ich hatte das Problem ebenfalls.

Zitat:

Zitat von azwa66 (Beitrag 1223784)
Habe auch schon die setup.exe umbenannt, leider wird diese dann auch nicht gestartet.

Und was sagt GetLastError nun?

MfG Dalai

740 --> ERROR_ELEVATION_REQUIRED! :(

hab mal gegoogelt:

Being an administrator means nothing in an UAC-aware operating system! You
do not run with the highest privileges even if you are an Admin here.

The CreateProcess Windows API will always fail if a non-elevated application
under Vista/2008/Win7 attempts to launch another application whose manifest
requires elevation. GetLastError will return 740 (ERROR_ELEVATION_REQUIRED)
in this case.

Dalai 7. Aug 2013 13:28

AW: Anwendung als anderer Benutzer starten
 
OK, nun musst du nur noch rausfinden, warum die EXE diese Elevation ersucht bzw. braucht. Die Versionsinformationen (vor allem die Beschreibung) sind eine Möglichkeit, der Name der EXE eine weitere, das Manifest (oder deren Fehlen) eine andere - all das wurden ja bereits genannt. Da du aber oben "setup.exe" schriebst: sowas verlangt eben nach Adminrechten, übrigens schon seit Win2k. Wie hast du die setup.exe denn benannt durch das Umbenennen?

MfG Dalai

azwa66 7. Aug 2013 13:43

AW: Anwendung als anderer Benutzer starten
 
Zitat:

Zitat von Dalai (Beitrag 1223861)
OK, nun musst du nur noch rausfinden, warum die EXE diese Elevation ersucht bzw. braucht. Die Versionsinformationen (vor allem die Beschreibung) sind eine Möglichkeit, der Name der EXE eine weitere, das Manifest (oder deren Fehlen) eine andere - all das wurden ja bereits genannt. Da du aber oben "setup.exe" schriebst: sowas verlangt eben nach Adminrechten, übrigens schon seit Win2k. Wie hast du die setup.exe denn benannt durch das Umbenennen?

MfG Dalai

test.exe

Ich sehe ja ein das bestimmte Programme Adminrechte brauchen, macht ja auch Sinn. Aber ich habe ja den Adminaccount mit Passwort und den übergebe ich ja schon an die betreffende Funktion, also sollte es doch funktionieren.
Selbst wenn ich das Programm welches die andere Anwendung (Setup.exe) aufruft als Administrator starte passiert nix (-->740).

samso 7. Aug 2013 14:10

AW: Anwendung als anderer Benutzer starten
 
Bei Vista/Windows 7 ist das Administrator-Konto bei einer Standardinstallation deaktiviert. Dieses Konto muss aktiviert werden und genau dieses Administrator-Konto verwendet werden. Ein selbst angelegter Benutzer der zur Gruppe der Administratoren gehört ist nicht das Gleiche.

http://www.winfaq.de/faq_html/Content/tip2500

Meines Wissens ist der Domainen-Administrator ebenfalls eine "echter" Administrator.

Dalai 7. Aug 2013 14:25

AW: Anwendung als anderer Benutzer starten
 
Zitat:

Zitat von samso (Beitrag 1223870)
Bei Vista/Windows 7 ist das Administrator-Konto bei einer Standardinstallation deaktiviert. Dieses Konto muss aktiviert werden und genau dieses Administrator-Konto verwendet werden. Ein selbst angelegter Benutzer der zur Gruppe der Administratoren gehört ist nicht das Gleiche.

Das stimmt. Der standardmäßig deaktivierte Adminstrator bekommt (selbst wenn man ihn aktivert und nutzt) keine UAC-Dialoge, auch wenn die UAC aktiviert ist; die anderen Nutzer der Gruppe Administratoren bekommen entsprechende Dialoge. Das war's aber auch schon mit den Unterschieden. Aber ist das relevant für diesen Fall? Irgendwas muss an der zu startenden EXE sein, was nach mehr Rechten verlangt.

MfG Dalai

azwa66 7. Aug 2013 14:35

AW: Anwendung als anderer Benutzer starten
 
Zitat:

Zitat von samso (Beitrag 1223870)
Bei Vista/Windows 7 ist das Administrator-Konto bei einer Standardinstallation deaktiviert. Dieses Konto muss aktiviert werden und genau dieses Administrator-Konto verwendet werden. Ein selbst angelegter Benutzer der zur Gruppe der Administratoren gehört ist nicht das Gleiche.

http://www.winfaq.de/faq_html/Content/tip2500

Meines Wissens ist der Domainen-Administrator ebenfalls eine "echter" Administrator.

Danke, das war's!!!!

Habe das Administratorkonto aktiviert, dann die Logindaten des Administrators in das Programm eingetrage und siehe da.... es fluppt

Nochmals vielen Dank, wäre nie darauf gekommen das Admin <> Administrator :-D

Tolles Forum!


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:15 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