AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

runas

Ein Thema von gpvg · begonnen am 10. Dez 2007 · letzter Beitrag vom 16. Dez 2007
Antwort Antwort
gpvg

Registriert seit: 22. Mär 2007
Ort: Erfurt
18 Beiträge
 
Turbo Delphi für Win32
 
#1

runas

  Alt 10. Dez 2007, 11:39
Hallihallo,

wie man einen Prozeß unter einem anderen Account startet, wurde hier ja schon oft genug durchgekaut.

Mich interessiert jetzt, ob es eine Funktion gibt (möglichst WIN32-API), mit welcher der aufgerufene Prozeß ermitteln kann, wer ihn aufgerufen hat.

Also in etwa so:

UserA ruft ProzeßB mittels CreateProcessWithLogonW(...) auf.

ProzeßB läßt Funktion WhoHasCalledMe:String laufen, welche 'UserA' ausspuckt.

Hat jemand eine Idee?

Vielen Dank für die Hilfe
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: runas

  Alt 10. Dez 2007, 11:54
Mit:
Delphi-Quellcode:
function TProcess.InitOwnerName: WideString;
var
  hProcess : THandle;
  ppsidOwner : PSID;
  SecDescriptor : PSECURITY_DESCRIPTOR;
  err : DWord;
  s : string;
  SIDType : DWORD;
  Owner : WideString;

const
  SE_UNKNOWN_OBJECT_TYPE: DWord = 0;
  SE_FILE_OBJECT : DWord = 1;
  SE_SERVICE : DWord = 2;
  SE_PRINTER : DWord = 3;
  SE_REGISTRY_KEY : DWord = 4;
  SE_LMSHARE : DWord = 5;
  SE_KERNEL_OBJECT : DWord = 6;
  SE_WINDOW_OBJECT : DWord = 7;

begin
  Owner := '';
  hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or GENERIC_READ, False, FProcID);
  if (hProcess <> 0) then
  begin
    err := GetSecurityInfo(hProcess, SE_KERNEL_OBJECT, OWNER_SECURITY_INFORMATION, @ppsidOwner, nil, nil, nil,
      @SecDescriptor);
    if (err = 0) then
    begin
      s := SidToString(ppsidOwner);
      FOwnerStrSID := s;
      FPOwnerSID := ppsidOwner;
      StrSIDToName(s, Owner, SIDType);
      LocalFree(Cardinal(SecDescriptor));
    end;
    CloseHandle(hProcess);
  end;
  Result := Owner;
end;
Bekommt man den Besitzer eines Prozesses.

Um an den übergeordneten Prozess zu kommen wirst du ihn wohl aus einer Prozessliste raussuchen müssen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
gpvg

Registriert seit: 22. Mär 2007
Ort: Erfurt
18 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: runas

  Alt 10. Dez 2007, 12:07
Hmmmmmh ...

ProzeßA von UserA ruft ProzeßB von UserB mittels CreateProcessWithLogonW(...) auf.

Die Frage ist, ob ProzeßA jetzt tatsächlich noch Elternprozeß von ProzeßB ist, also ob ein Prozeß eines Benutzers für den Prozeß eines anderen Users der Elternprozeß sein kann. Ich weiß ja nicht, was CreateProcessWithLogonW im Hintergrund so alles anstellt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: runas

  Alt 10. Dez 2007, 12:35
Guck doch mal nach: MSDN-Library durchsuchenCreateProcessWithLogonW

Und so gibt es die ParentID: http://www.delphipraxis.net/internal...process32first
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
gpvg

Registriert seit: 22. Mär 2007
Ort: Erfurt
18 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: runas

  Alt 16. Dez 2007, 19:05
Ich habe es befürchtet. Ein Miniprogramm der Form:

program testparentid;

...

begin
writeln(GetCurrentProcessId,' ',GetExecutablefromPID(GetCurrentProcessId));
GetParentID(GetCurrentProcessId, ParentID);
writeln(ParentId,' ',GetExecutablefromPID(ParentId));
readln;
end.


aufgerufen von der Kommandozeile:

runas /user:testuser testparentid


bringt folgendes Ergebnis:

1272 U:\projects\Test\parentID\testparentid.exe
1168

Eigentlich hatte ich hinter der 1168 c:\windows\system32\cmd.exe erwartet. Da steht aber nichts. Einmal im Taskmanager nachgesehen. Da steht für die PID 1168 svchost.exe, ausgeführt vom System.

Böse Falle!

Hat jemand eine Idee, wie ich an die PID von cmd.exe komme? Also die PID, die den "Ausführen als ..."-Dienst aufruft?
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#6

Re: runas

  Alt 16. Dez 2007, 19:13
Wenn der Dienst dein Programm aufruft isses eigentlich schon vorbei.
runas sendet auch nur per Pipe oder so, dem Dienst die Info, was er aufzurufen hat.
Zwischen cmd.exe <--> Dienst besteht ja keine Parent-Beziehung.

Daher wirst du da keine Chance haben meiner Meinung nach.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  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 22:30 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