AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Programm unter NT 4.0 als anderer User starten
Thema durchsuchen
Ansicht
Themen-Optionen

Programm unter NT 4.0 als anderer User starten

Ein Thema von weisswurst · begonnen am 1. Sep 2004 · letzter Beitrag vom 10. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
weisswurst

Registriert seit: 10. Aug 2004
11 Beiträge
 
#1

Programm unter NT 4.0 als anderer User starten

  Alt 1. Sep 2004, 14:25
Ich möchte ein Programm aus einem Delphi-Programm aus aufrufen. Das Programm soll aber unter einem anderen Useraccount laufen als das Delphiprogramm (User einer NT-Domain). Wie kann ich das machen? Gibt es die Möglichkeit es ähnlich wie unter XP als "run as..." zu starten?

Bin leider gezwungen das Problem unter Windows NT 4.0 zu lösen.

Danke vorab.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Programm unter NT 4.0 als anderer User starten

  Alt 1. Sep 2004, 15:16
Kuck dir mal MSDN-Library durchsuchenCreateProcessAsUser an. Das sollte es sein, was du suchst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
weisswurst

Registriert seit: 10. Aug 2004
11 Beiträge
 
#3

Re: Programm unter NT 4.0 als anderer User starten

  Alt 3. Sep 2004, 10:59
Habe es mit CreateProcessAsUser probiert, klappt aber nicht. Für den Aufruf braucht man den LoginHandle. Habe ich also erzeugt aber irgendwas scheint schon damit nicht zu klappen. Ich bekomme immer 1341560 zurück. Laut Hilfe ist alles außer 0 ein gültiger Handle, was komisch ist, weil ich die Zahl auch bekomme, wenn ich falsche Anmeldeinfos angebe.

Hier mein Code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   LogonHandle: THandle;
   StartupInfo : TStartupinfo;
   ProcessInfo : TProcessInformation;
begin

       LogonUser(pchar(Edit1.Text), pchar(Edit2.Text), pchar(Edit3.Text),0,LOGON32_LOGON_INTERACTIVE,LogonHandle);
       if LogonHandle = 0 then begin
          ShowMessage(IntToStr(GetLastError) + ' Fehler beim LogonHandle!');
       end else
          ShowMessage(IntToStr(LogonHandle) + ' ist der LogonHandle!');

       FillChar(Startupinfo, SizeOf(TStartupinfo),0);
       Startupinfo.cb:=Sizeof(TStartupInfo);


       CreateProcessAsUser(LogonHandle,
                           Nil,
                           pchar(Edit4.Text),
                           Nil,
                           Nil,
                           TRUE,
                           CREATE_DEFAULT_ERROR_MODE,
                           Nil,
                           Nil, // noch anpassen soll ja Env vom User verwendet werden
                           Startupinfo,
                           ProcessInfo );
end;
Hat jemand ein funktionierendes Beispiel für CreateProcessAsUser? Es gibt hier im Forum zwar viele Hiweise wie "Benutze halt CreateProcessAsUser" aber leider kein Beispiel.

Danke
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Programm unter NT 4.0 als anderer User starten

  Alt 3. Sep 2004, 11:46
Du musst schon überprüfen ob LogonUser True oder False zurückliefert und dir dann bei Bedarf per GetLastError den Fehlercode liefern lassen..! Aber ich geh mal davon aus, dass dir einfach die entsprechenden Privilegien fehlen (weiß jetzt nicht genau welche das sind). Normale Benutzer (auch als Admin) haben die nämlich normalerweise nicht...
Manuel Pöter
  Mit Zitat antworten Zitat
weisswurst

Registriert seit: 10. Aug 2004
11 Beiträge
 
#5

Re: Programm unter NT 4.0 als anderer User starten

  Alt 3. Sep 2004, 11:57
an den Privilegien liegt es nicht (weiß schon was du meinst, das SE_TCB_NAME Privileg). Das hat man nicht, auch nicht als Admin. Starte deshalb das Programm auch über einen System-Dienst, der hat diese Privilegien. Aber hilft halt nix...
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Programm unter NT 4.0 als anderer User starten

  Alt 3. Sep 2004, 13:03
Ja, und CreateProcessAsUser benötigt außerdem noch SeIncreaseQuotaPrivilege und SeAssignPrimaryTokenPrivilege. Aber als System-Service sollte das eigentlich funktionieren...

Hier mal ein Code den ich problemlos in einem Service verwendet hab:
Delphi-Quellcode:
var
  hToken: THandle;
  aSI: TStartupInfo;
  aPI: TProcessInformation;

  procedure ShowLastError;
  begin
    MessageBox(0, PChar(SysErrorMessage(GetLastError)), 'Error', MB_ICONERROR or MB_OK);
  end;

begin
  ZeroMemory(@aSI, SizeOf(aSI));
  aSI.cb := SizeOf(aSI);
  
  // create process as specific principal
  if cbCreateAsUser.Checked then
  begin
    if LogonUser(PChar(edUserName.Text), nil, PChar(edPassword.Text),
      LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken) then
    begin
      if CreateProcessAsUser(hToken, PChar(edProgramPath.Text), nil, nil, nil,
        False, NORMAL_PRIORITY_CLASS, nil, nil, aSI, aPI) then
      begin
        CloseHandle(aPI.hProcess);
        CloseHandle(aPI.hThread);
      end
      else
        ShowLastError;

      CloseHandle(hToken);
    end
    else
      ShowLastError;
  end
  // create process in system-logonsession
  else
  begin
    if CreateProcess(PChar(edProgramPath.Text), nil, nil, nil, False,
      NORMAL_PRIORITY_CLASS, nil, nil, aSI, aPI) then
    begin
      CloseHandle(aPI.hProcess);
      CloseHandle(aPI.hThread);
    end
    else
      ShowLastError;
  end;
end;
Manuel Pöter
  Mit Zitat antworten Zitat
weisswurst

Registriert seit: 10. Aug 2004
11 Beiträge
 
#7

Re: Programm unter NT 4.0 als anderer User starten

  Alt 3. Sep 2004, 13:35
Vielen Dank! Super! - Das funktioniert.

Aber: Leider nur mit lokalen Usern. Ich möchte es gerne mit einem Domainuser veranstalten.
Dazu habe ich die Zeile

   if LogonUser(PChar(edUserName.Text), nil, PChar(edPassword.Text), entsprechend nach

   if LogonUser(PChar(edUserName.Text), PChar('MyDomainame'), PChar(edPassword.Text), geändert.

Die Anmeldung scheint auch zu funktionieren, dann bekomme ich allerdings (z.B. bei cmd.exe als zu startendes Programm) die Fehlermeldung:

"Initialisierung der DLL "C:\winnt\system\kernel32.dll" gescheitert. Prozess wird nicht normal beendet."

Bei einem anderen Programm (z.B. calc.exe) eine andere DLL, also nicht immer die Kernel-DLL.

Woran könnte das liegen?
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Programm unter NT 4.0 als anderer User starten

  Alt 3. Sep 2004, 13:56
Hm.. ja, und damit tauchst du immer tiefer in die komplexen Gebilde der Windows-Security ein..

Das Problem hier sind wiedermal WindowStations und Desktops... Was soll das ganze denn für eine LogonSession werden? Benötigt sie interaktive Benutzereingaben?
Manuel Pöter
  Mit Zitat antworten Zitat
weisswurst

Registriert seit: 10. Aug 2004
11 Beiträge
 
#9

Re: Programm unter NT 4.0 als anderer User starten

  Alt 3. Sep 2004, 14:11
ja, das Programm ist ein "normales" Benutzerprogramm, also interaktiv. Es soll aber als Domainuser laufen (ohne Adminrechte), damit auch Domainfunktionalitäten wie Netzwerkdrucken genutzt werden können.
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Programm unter NT 4.0 als anderer User starten

  Alt 3. Sep 2004, 14:27
Hm.. damit wirds dann kompliziert.. so genau hab ich das auch noch nicht ausprobiert, aber du musst dann wohl die WindowStation und den Desktop zuweisen und möglicherweise auch deren DACLs anpassen..
Manuel Pöter
  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 12:46 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