AGB  ·  Datenschutz  ·  Impressum  







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

Explorer und CreateProcessWithLogon

Ein Thema von Chewie · begonnen am 5. Apr 2006 · letzter Beitrag vom 7. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#1

Explorer und CreateProcessWithLogon

  Alt 5. Apr 2006, 18:26
So, nachdem mir Luckie schon in diesem Thread gesagt hat, dass er auch schon vergeblich probiert hat, mit CreateProcessWithLogon einen Ordner im Explorer zu öffnen, frage ich hier nochmal danach.

Hintergrund ist folgender: Ich schreibe ein Programm, in dem es u.a. die Möglichkeit geben soll, Arbeitsplatz und Systemsteuerung oder auch die Laufwerke im Explorer mit den rechten eines anderen Benutzers (vor allem des Administrators) zu öffnen.
Der Arbeistplatz kann ganz einfach angezeigt werden:
Code:
C:\WINDOWS\explorer ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
Das funktioniert sowohl bei Start->Ausführen (was wohl mit ShellExecute arbeitet) als auch bei Process.Start im .NET-Framework 1.1. Es genügt bei beiden sogar, die CLSID anzugeben bzw. das Verzeichnis, ohne Angabe des Explorers.

Nun könnte man denken, dass ein Process.Start an einer Stelle, in der man das aktuelle Programm in den Administrator-Kontext (mittels ImpersonateUser) ungeschaltet hat, Prozesse auch in diesem Kontext gestartet werden würde.
Leider funktioniert Windows nicht so, wie ich feststellen musste.

Also bleibt die Möglichkeit, auf CreateProcessWithLogon auszuweichen. Doch dort erscheint kein Explorer-Fenster, wenn er gestartet wird!

Nun steh ich vor dem Dilemma, dass ich kaum noch eine Idee mehr hab, wie ich das was ich will realisieren kann.
Ich könnte noch anstelle von CreateProcessWithLogon CreateProcessWithToken oder CreateProcessAsUser probieren, aber ich bezweifle, dass die sich anders verhalten.

Hat einer eine Idee, was ich noch tun kann oder weiß jemand, warum sich der Explorer nicht via CreateProcessWithLogon öffnen lässt?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Explorer und CreateProcessWithLogon

  Alt 5. Apr 2006, 23:50
Moin moin,

erstmal funktioniert der Link zu dem anderen Thread nicht...
Zu deinem Problem: Ich habe diesen Code erfolgreich getestet.
Wenn ich dein Problem richtig verstanden habe, sollte das die Lösung sein.
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Explorer und CreateProcessWithLogon

  Alt 6. Apr 2006, 07:22
Zitat von Chewie:
Hintergrund ist folgender: Ich schreibe ein Programm, in dem es u.a. die Möglichkeit geben soll, Arbeitsplatz und Systemsteuerung oder auch die Laufwerke im Explorer mit den rechten eines anderen Benutzers (vor allem des Administrators) zu öffnen.
Ich dachte immer sowas unterstützt die DP nicht
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Explorer und CreateProcessWithLogon

  Alt 6. Apr 2006, 07:30
Warum sollten wir das nicht unterstützen? Er hat ja nicht gefragt, wie man dabei das Passwort umgeht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Explorer und CreateProcessWithLogon

  Alt 6. Apr 2006, 07:54
schdimmd au widda ich penn glaub besser weiter...
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Explorer und CreateProcessWithLogon

  Alt 6. Apr 2006, 08:40
Hallo Peter,

danke für den Link, aber das ist die gleiche Variante, die Luckie in seinem RunAsUser benutzt und die ich auch getestet habe. Bei den meisten Programmen funktioniert sie auch, aber beim Explorer passiert halt nix sichtbares.

Ach ja, den Link oben hab ich korrigiert, war mein Fehler. Und ich will natürlich keine Passwörter umgehen, das Passwort zum benutzerwechsel ist natürlich bekannt

Also, das Problem besteht weiterhin.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Explorer und CreateProcessWithLogon

  Alt 6. Apr 2006, 09:52
Zitat von Chewie:
... aber beim Explorer passiert halt nix sichtbares.
Alos entweder war ich gestern Abend schon am schlafen, oder ich weiss auch nicht...
Ich habe es getestet,
Delphi-Quellcode:
RunAsUser('Administrator', '***', 'C:\Windows\Explorer.exe ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}')
//RunAsUser('Administrator', '***', 'C:\Windows\Explorer.exe /e, "C:\Programme") <-- habe nicht die genaue syntax im Kopf, glaube so war es aber
hat mir den Arbeitsplatz, bzw. einen bestimmten Ordner aufgemacht. Laut Taskman wurde dieser Process auch von Administrator
gestartet.
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Explorer und CreateProcessWithLogon

  Alt 6. Apr 2006, 13:31
Hm, ich hab den Code mangels Delphi-Compiler nicht ausprobiert, aber vom Lesen her sah er gleich aus. Naja, dann wirds doch mal wieder Zeit, Delphi zu installieren und es auszuprobieren
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Explorer und CreateProcessWithLogon

  Alt 6. Apr 2006, 15:23
Hm, sehr seltsam, ich hab den Code aus x000xs erstem Beitrag probiert, komme aber gar nicht zu der jeweiligen Stelle, weil schon CreateEnvironmentBlock mit Fehler 203 fehlschlägt.
Wenn ich als Token an diese Funktion 0 übergebe, funktioniert das Starten beispielsweise des Taskmanagers, aber halt nicht des Explorers

Hier ist das Listing. Die auskommentierte Zeile oben ist aus dem Original, der Ersatz, der bei mir funktioniert, steht direkt darunter.

Delphi-Quellcode:
program RunAsUserTest;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows, Dialogs;



function CreateProcessWithLogon(lpUsername: PWideChar;
                                lpDomain: PWideChar;
                                lpPassword: PWideChar;
                                dwLogonFlags: DWORD;
                                lpApplicationName: PWideChar;
                                lpCommandLine: PWideChar;
                                dwCreationFlags: DWORD;
                                lpEnvironment: Pointer;
                                lpCurrentDirectory: PWideChar;
                                var lpStartupInfo: TStartupInfo;
                                var lpProcessInfo: TProcessInformation): BOOL; stdcall;
                                external 'advapi32name 'CreateProcessWithLogonW';

function CreateEnvironmentBlock(var lpEnvironment: Pointer;
                                hToken: THandle;
                                bInherit: BOOL): BOOL; stdcall; external 'userenv';

function DestroyEnvironmentBlock(pEnvironment: Pointer): BOOL; stdcall; external 'userenv';

const
  LOGON_WITH_PROFILE = $00000001;


function RunAs(User, Password, Command: String): Integer;
var dwSize: DWORD;
     hToken: THandle;
     lpvEnv: Pointer;
     pi: TProcessInformation;
     si: TStartupInfo;
     szPath: Array [0..MAX_PATH] of WideChar;
begin

  ZeroMemory(@szPath, SizeOf(szPath));
  ZeroMemory(@pi, SizeOf(pi));
  ZeroMemory(@si, SizeOf(si));
  si.cb:=SizeOf(TStartupInfo);

  if LogonUser(PChar(User), '.', PChar(Password), LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken) then
  begin
     //if CreateEnvironmentBlock(lpvEnv, hToken, True) then
     if CreateEnvironmentBlock(lpvEnv, 0, True) then
     begin
        dwSize:=SizeOf(szPath) div SizeOf(WCHAR);
        if (GetCurrentDirectoryW(dwSize, @szPath) > 0) then
        begin
           if (CreateProcessWithLogon(PWideChar(WideString(User)), nil, PWideChar(WideString(Password)),
               LOGON_WITH_PROFILE, nil, PWideChar(WideString(Command)), CREATE_UNICODE_ENVIRONMENT,
               lpvEnv, szPath, si, pi)) then
           begin
              result:=ERROR_SUCCESS;
              CloseHandle(pi.hProcess);
              CloseHandle(pi.hThread);
           end
           else
              result:=GetLastError;
        end
        else
           result:=GetLastError;
        DestroyEnvironmentBlock(lpvEnv);
     end
     else
        result:=GetLastError;
     CloseHandle(hToken);
  end
  else
     result:=GetLastError;

end;

var
  res: Integer;
  user, pass: string;
begin
  Write('Benutzername angeben: ');
  ReadLn(user);
  Write('Passwort angeben: ');
  ReadLn(pass);
  WriteLn('Prozess wird gestartet...');
  res := RunAs(user, pass, 'c:\windows\explorer.exe ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}');
  //res := RunAs(user, pass, 'c:\windows\system32\taskmgr.exe');
  if (res <> ERROR_SUCCESS) then
  begin
    WriteLn('Fehler ', res, ': ', SysErrorMessage(res));
  end
  else
  begin
    WriteLn('Prozess gestartet.');
  end;
  Readln;
end.
Kann das jemand vielleicht mal bei sich ausprobieren? Interessant ist zum einen, ob bei euch die Sache mit dem CreateEnvironmentBlock funktioniert und zum anderen, ob der Explorer gestartet wird.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Explorer und CreateProcessWithLogon

  Alt 6. Apr 2006, 18:35
Also ich habe dein Code kopiert und es funktioniert (Siehe Screenshot)
EDIT: Habe grade gesehen, Delphi 5, habe nur mit Delphi 6 Prof auf WinXP SP2 getestet.
Miniaturansicht angehängter Grafiken
dp_557.jpg  
Peter
-= Gruss Peter =-
-= alias x000x =-
  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 02:16 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