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/)
-   -   Delphi NetApi-Funktionen als beliebiger User Ausführen (https://www.delphipraxis.net/50233-netapi-funktionen-als-beliebiger-user-ausfuehren.html)

Icydragon 22. Jul 2005 11:25


NetApi-Funktionen als beliebiger User Ausführen
 
Hallo Leute,

habe folgendes Problem:

Ich möchte via NetApi-Funktionen Informationen über Netzwerkgruppen, Gruppenmitglieder usw. Herausfinden. Bei einigen Funktionen muss man schon Domänen-Admin oder Sicherungs-Op sein, wenn man sie erfolgreich ausführen will. Ich bekomme also, sollte ich nur lokaler Admin oder Trusted User in der Domäne sein, das Flag ERROR_ACCESS_DENIED zurück.
Wie kann ich diese Funktion in einem solchen Fall unter einem anderen Benutzer ausführen?

will es also ungefähr so verwenden:

Delphi-Quellcode:
{...funktion wurde aufgerufen}
if dwResult=ERROR_ACCESS_DENIED then
  begin
    //hier soll jetzt ein eingabeformular mit Benutzername und Passwort erscheinen
    //Die Eingabe soll nur mit dem nächsten Aufruf verwendet werden, danach wieder
    //freigegeben
  end;
{...Funktion wird erneut aufgerufen}

LogonUser klappt nicht, weil das nur lokal funktioniert.

Danke schon mal im Vorraus für alle Antworten

Olli 4. Aug 2005 18:26

Re: NetApi-Funktionen als beliebiger User Ausführen
 
Zitat:

Zitat von Icydragon
Bei einigen Funktionen muss man schon Domänen-Admin oder Sicherungs-Op sein, wenn man sie erfolgreich ausführen will.

Das ist korrekt und entspricht dem Sicherheitsmodell von Windows.

Zitat:

Zitat von Icydragon
Wie kann ich diese Funktion in einem solchen Fall unter einem anderen Benutzer ausführen?

Das Problem dabei ist, daß, wie du schon selber feststellst MSDN-Library durchsuchenLogonUser() das Privileg SE_TCB_NAME haben muß. TCB steht für Trusted Computing Base und schließt im Prinzip nur das System selber ein. Ein Admin kann dieses Privileg aber ebenfalls ergattern. Das Token welches du aus dem Aufruf von LogonUser() bekommst, kannst du dann verwenden um einen Thread deines Prozesses als dieser Nutzer (also mit dessen Rechten) laufen zu lassen. Dementsprechend kann innerhalb eines Prozesses auch mehrere Threads mit jeweils verschiedenen Nutzerkontexten Aufgaben machen lassen, die sonst nicht möglich wären.

Das was du machen willst, schreit förmlich nach Delegation an einen Dienst. Dieser Dienst würde dann für dich alles übernehmen was mit Logons zu tun hat. Eine Alternative könnte ab W2K die Funktion MSDN-Library durchsuchenCreateProcessWithLogonW() bieten, die ohne besagtes Privileg auskommt. Allerdings müßtest du auch in diesem Fall zwischen den beiden Prozessen kommunizieren.


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