AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Win XP: CreateProcessAsUser: Errorcode 1314

Win XP: CreateProcessAsUser: Errorcode 1314

Ein Thema von Udontknow · begonnen am 16. Jul 2007 · letzter Beitrag vom 16. Jul 2007
Antwort Antwort
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#1

Win XP: CreateProcessAsUser: Errorcode 1314

  Alt 16. Jul 2007, 14:54
Hallo allesamt,

ich habe folgende Funktion, die eine Applikation unter einem bestimmten Benutzerkontext ausführen soll:

Delphi-Quellcode:
function RunProcess(ExePath:String;Param:String;Username,Domain,Password:String):Cardinal;
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
var TokenHandle:Cardinal;
begin
  Result:=0;

  //Existiert dieses File?
  if not FileExists(ExePath) then
    raise Exception.CreateFmt('File "%s" existiert nicht!',[ExePath]);

  //User anmelden und Token erhalten
  if not LogOnUser(PChar(Username),PChar(Domain),PChar(Password),LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,TokenHandle) then
    raise Exception.CreateFmt('LogonUser fehlgeschlagen! Errorcode: %d',[GetLastError]);

  //StartupInfo-Struktur initialisieren
  FillChar(StartupInfo, SizeOf(StartupInfo), #0);

  //Werte zuweisen
  StartupInfo.cb := SizeOf(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
  StartupInfo.wShowWindow := SW_SHOW;

  //Prozess starten
  if not CreateProcessAsUser(
    TokenHandle,
    @ExePath[1],
    NIL,
    NIL,
    NIL,
    True,
    NORMAL_PRIORITY_CLASS,
    NIL,
    NIL,
    StartupInfo,
    ProcessInfo)
  then
    raise Exception.CreateFmt('CreateProcessAsUser für "%s" fehlgeschlagen! Errorcode: %d',[ExePath,GetLastError]);

  //Auf Beendigung warten
  WaitForSingleObject(ProcessInfo.hProcess, INFINITE);

  //Exitcode des Prozesses ermitteln
  GetExitCodeProcess(ProcessInfo.hProcess, Result);

  //Handles freigeben
  if ProcessInfo.hProcess <> 0 then
    CloseHandle(ProcessInfo.hProcess);
  if ProcessInfo.hThread <> 0 then
    CloseHandle(ProcessInfo.hThread);
end;
Beim Aufruf einer Beispiel-Applikation erhalte ich jedoch grundsätzlich bei CreateProcessAsUser den Errorcode 1314 (ERROR_PRIVILEGE_NOT_HELD) geliefert. Dabei ist der verwendete Benutzer genau der gleiche, unter dem ich normal arbeite. Wenn ich das Programm so ausführen kann, sollte es doch auch bei CreateProcessAsUser klappen. Was also fehlt, was ist falsch?

Für Ideen wäre ich echt dankbar.

Bis dann,

Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

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

Re: Win XP: CreateProcessAsUser: Errorcode 1314

  Alt 16. Jul 2007, 15:00
Zitat von Widows SDK:
Windows 2000: The process calling LogonUser requires the SE_TCB_NAME privilege. If the calling process does not have this privilege, LogonUser fails and GetLastError returns ERROR_PRIVILEGE_NOT_HELD.
Dieses Privileg habe in der Regel nur Systemprozesse.

Und
Zitat:
The account specified by lpszUsername, must have the necessary account rights. For example, to log on a user with the LOGON32_LOGON_INTERACTIVE flag, the user (or a group to which the user belongs) must have the SE_INTERACTIVE_LOGON_NAME account right. For a list of the account rights that affect the various logon operations, see Account Rights Constants.
Nimm stattdessen CreateProcessWithLogonW:
http://www.michael-puff.de/Developer...thLogonW.shtml
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#3

Re: Win XP: CreateProcessAsUser: Errorcode 1314

  Alt 16. Jul 2007, 15:04
Aber bei mir bricht ja eben nicht LogonUser mit dieser Meldung ab, sondern CreateProcessAsUser.

CreateProcessWithLogonW finde ich gar nicht in der Windows-Unit. Ist das nicht eine .NET-Routine?

Edit: Okay, schnappe mir mal deinen Code. Danke erstmal!

Cu,
Udontknow
  Mit Zitat antworten Zitat
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#4

Re: Win XP: CreateProcessAsUser: Errorcode 1314

  Alt 16. Jul 2007, 16:33
So, habe deine Routine getestet.

Grundsätzlich funktioniert CreateProcessWithLogonW, ABER:

Ich habe bei diesem Aufruf nicht die Möglichkeit, die Konsolenapplikation (um solche geht es hier) in derselben Konsole wie die des aufrufenden Programms laufen zu lassen, es wird immer eine neue Applikationskonsole erzeugt, egal, was ich bei CreationFlags mitgebe.
Zitat:
dwCreationFlags
[in] The flags that control how the process is created. The CREATE_DEFAULT_ERROR_MODE, CREATE_NEW_CONSOLE, and CREATE_NEW_PROCESS_GROUP flags are enabled by default— even if you do not set the flag, the system functions as if it were set. You can specify additional flags as noted.
Ich benötige unbedingt dieselbe Konsole (der Text der Konsole wird an ein Scheduling-System geschleust, ohne die entsprechenden Textausgaben sind die Leute, die das System betreuen, völlig aufgeschmissen, wenn etwas passiert).

Ich denke, daß CreateProcessAsUser da schon richtig ist, aber ich muss eben nun herausfinden, welches Privileg denn genau nun fehlt. Irgendjemand noch eine Idee?

Bis dann,

Andreas
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf