AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Service Application - CreateProcess...
Thema durchsuchen
Ansicht
Themen-Optionen

Service Application - CreateProcess...

Ein Thema von pate444 · begonnen am 26. Okt 2011 · letzter Beitrag vom 16. Nov 2011
Antwort Antwort
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#1

AW: Service Application - CreateProcess...

  Alt 26. Okt 2011, 12:00
Du kannst mit Deinem Dienst u.a. über Named Pipes oder per TCP-IP kommunizieren ......
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Service Application - CreateProcess...

  Alt 26. Okt 2011, 12:37
Du kannst mit Deinem Dienst u.a. über Named Pipes oder per TCP-IP kommunizieren ......
Hm, davon hat er nichts geschrieben. Er will doch nur aus dem Dienst heraus eine Anwendung für den angemeldeten interaktiven Benutzer starten.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Service Application - CreateProcess...

  Alt 26. Okt 2011, 12:40
@Luckie

Dann habe ich ihn wohl missverstanden, ich dachte er wolle eine Art Middle Tier basteln
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
pate444

Registriert seit: 24. Jul 2011
16 Beiträge
 
#4

AW: Service Application - CreateProcess...

  Alt 9. Nov 2011, 07:54
Hallo zusammen,

ich habe mich die Tage mit dem Lösungsansatz befasst und dieser Quellcode ist dabei herausgekommen.
Jedoch habe ich ein kleines Problem mit einigen Zeilen (rot makiert). Meine Recherchen im Netz haben bisher noch keine positiven Ergebnisse gezeigt.

Code:
interface

uses
  Windows;

function CreateProcessAsUserA(Index: String; Counter: Integer
          ): Cardinal;

function ProcessIdToSessionId (ProcessId : DWORD; var SessionId : DWORD) : BOOL;
         stdcall; external kernel32 name 'ProcessIdToSessionId';


implementation

function CreateProcessAsUserA(Index: String; Counter: Integer
          ): Cardinal;
var
   sui : TStartUpInfo;
   Pi : TProcessInformation;
   hNewToken: THandle;
   hProcessToken: THandle;
   dwSessionId: dword;
   Prozess: Boolean;
   processID: dword;
   reLength: dword;
var
   WTSGetActiveConsoleSessionId: function: DWord; stdcall;
begin
    processID:= GetCurrentProcessID;
    if ProcessIdToSessionId(processID,dwSessionID) then

    if dwSessionID <> $FFFFFFFF then
    begin
      hProcessToken := 0;

    OpenProcessToken(GetCurrentProcess(),
    TOKEN_ADJUST_PRIVILEGES or
    TOKEN_QUERY,
    hProcessToken);

    DuplicateTokenEx(hProcessToken,
    MAXIMUM_ALLOWED,
    Nil,
    SecurityImpersonation,
    TokenPrimary,
    hNewToken);

    GetTokeninformation(hNewToken,
    TokenSessionID,
    @dwSessionID,
    sizeof(@dwSessionid),
    reLength);

    SetTokenInformation(hNewToken,
    TokenSessionId,
    @dwSessionId,
    sizeof(dwSessionID));

    //CreateProcessAsUser
    Prozess:= CreateProcessAsUser(hNewToken,
              nil,
              PwideChar(index),
              nil,
              nil,
              false,
              Create_New_Console or NORMAL_PRIORITY_CLASS,
              nil,
              nil,
              sui,
              pi);

    //Allocate process to CPU
    SetProcessAffinityMask(pi.hProcess, Counter+1);

    Result:= pi.dwProcessId;

    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
end;

end;



end.
Die Funktion bricht bei SetTokenInformation ab. Daher vermute ich, dass es was mit der dwSessionID zusammenhängt.

Edit: Die Funktion läuft jetzt durch, jedoch ohne einen Prozess zu starten. dwSessionID wird immer der Wert 0 zugewiesen...
Kleine Verbesserung vorgenommen, jetzt bekommt dwSessionID seinen Wert, nur leider immer noch kein gestarter Prozess... :/

Geändert von pate444 ( 9. Nov 2011 um 10:37 Uhr)
  Mit Zitat antworten Zitat
pate444

Registriert seit: 24. Jul 2011
16 Beiträge
 
#5

AW: Service Application - CreateProcess...

  Alt 16. Nov 2011, 08:16
Problem gelöst. Alles funktioniert jetzt. Ich bedanke mich für die Hilfe Lucky.
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:51 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