AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi CreateProcessAsUser: Wie Verbindung mit Netzwerk herstellen?
Thema durchsuchen
Ansicht
Themen-Optionen

CreateProcessAsUser: Wie Verbindung mit Netzwerk herstellen?

Ein Thema von Angel4585 · begonnen am 18. Aug 2008 · letzter Beitrag vom 28. Aug 2008
Antwort Antwort
Angel4585

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

CreateProcessAsUser: Wie Verbindung mit Netzwerk herstellen?

  Alt 18. Aug 2008, 08:31
Hallo,

ich möchte aus einem Dienst heraus ein Programm starten, welches auf eine Netzwerkressource zugreifen soll.
Das Ganze im Hintergrund und wenn nötig vor der Benutzeranmeldung.

Dafür Nutze ich jetzt die Methode CreateProcessAsUser.

Also nacheinander:

Delphi-Quellcode:
var
  ltoken : Cardinal;
  LEnv : Pointer;
  pi : TProfileInfo;
  si : STARTUPINFO;
  pri : _PROCESS_INFORMATION;
  sil : TSecurityImpersonationLevel;
begin
LogonUser(
  'Benutzer',
  '',
  'Passwort',
  LOGON32_LOGON_NETWORK,
  LOGON32_PROVIDER_DEFAULT,
  ltoken
);


  FillChar(sil,SizeOf(TSecurityImpersonationLevel),#0);
  sil := SecurityIdentification;

DuplicateTokenEx(
  ltoken,
  TOKEN_ALL_ACCESS,
  nil,
  sil,
  TokenPrimary,
  ltoken
);


  fillchar(pi,sizeof(TProfileInfo),#0);
  pi.dwSize:=sizeof(TProfileInfo);
  pi.lpUserName:='Benutzer';

LoadUserProfile(
  ltoken,
  pi
);

CreateEnvironmentBlock(
  lenv,
  ltoken,
  false
);

  FillChar(pri,sizeof(_PROCESS_INFORMATION),#0);
  FillChar(si,sizeof(STARTUPINFO),#0);

  si.cb:=sizeof(si);
  si.lpReserved:=nil;
  si.lpDesktop:=PChar('');
  si.lpTitle:=nil;
  si.dwFlags:=STARTF_FORCEOFFFEEDBACK;
  si.wShowWindow :=SW_SHOWNORMAL;
  si.cbReserved2:=0;
  si.lpReserved2:=nil;


CreateProcessAsUser(
  ltoken,
  nil,
  'D:\ProgrammPfad\Programm.exe',
  nil,
  nil,
  false,
  CREATE_UNICODE_ENVIRONMENT,
  lenv,
  nil,
  si,
  pri
);
Kann mir wer sagen wo ich welchen Parameter ändern/hinzufügen muss um nun auch auf UNC-Pfade/Netzlaufwerke zugreifen zu können?

Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: CreateProcessAsUser: Wie Verbindung mit Netzwerk herstel

  Alt 18. Aug 2008, 11:12
Es gibt keine Option, die das beeinflusst. UNC Pfade sind tokenrelativ. D.h. wenn ein Benutzer, angemeldet per LogonUser ein UNC Pfad erstellt, dann kann auch nur dieses Token darauf zugreifen. Daher haben die Leute in Vista alle das Problem, dass sie nach dem UAC Prompt, ihre UNC Pfade nicht mehr sehen bzw. darauf zugreifen können. Dieses Verhalten kann man irgendwo in der Registry abstellen.

SYSTEM Dienste haben keinen Zugriff auf das Netzwerk. Lösungen wären:
1. Benutzer personifizieren (ImpersonateLoggedOnUser)
2. Den Dienst als einen Benutzer sofort starten lassen
3. Den Dienst als NETWORK_SERVICE laufen lassen.

Einen neuen Prozess zu starten ist eigentlich nicht notwendig wäre aber Alt. 4.

PS.
Dein Quelltext hat soviele Fehler und problematische Stellen, dass ich nur die JWSCL dringend empfehlen kann!
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  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: CreateProcessAsUser: Wie Verbindung mit Netzwerk herstel

  Alt 18. Aug 2008, 12:32
Der Dienst selbst braucht auch keinen Zugriff auf das Netzwerk, das Programm das vom Dienst aufgerufen wird braucht diesen.

Zitat von Dezipaitor:
PS.
Dein Quelltext hat soviele Fehler und problematische Stellen, dass ich nur die JWSCL dringend empfehlen kann!
nun da ich mich weiterentwickeln möchte würde mich eine Korrektur mit einer Erklärung was ich warum falsch mache mehr interessieren als eine fertige Lösung
Schliesslich muss ich meinem Ausbilder erklären warum das so funktioniert und nicht anders.
Einfach sagen"Die Komponente da kann das halt" reicht mir/meinem Ausbilder da nicht.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: CreateProcessAsUser: Wie Verbindung mit Netzwerk herstel

  Alt 18. Aug 2008, 15:02
Aufgrund meiner derzeit spärlichen Zeit kann ich nicht alle Probleme behandeln. Folgendes solltest du überdenken:

1. Die Fehlerüberprüfung gründlich überdenken
2. Die LogonUser API genau studieren : http://msdn.microsoft.com/en-us/library/aa378184.aspx
So steht da:
Zitat:
The LOGON32_LOGON_NETWORK logon type is fastest, but it has the following limitations:
...
* If you convert the token to a primary token and use it in CreateProcessAsUser to start a process, the new process cannot access other network resources, such as remote servers or printers, through the redirector. An exception is that if the network resource is not access controlled, then the new process will be able to access it.
3. LogonUser benötigt immer das Passwort des Benutzers. D.h. du musst es speichern. Das muss gründlich überlegt werden, wo und wie.

4. Die erste Zeile ist nicht notwendig:
Delphi-Quellcode:
  FillChar(sil,SizeOf(TSecurityImpersonationLevel),#0);
  sil := SecurityIdentification;
Warum darfst du kein Framework verwenden? Was ist dein Ziel? Willst du eine Anwendung bauen, oder willst du über die Security API etwas schreiben?

Teste mal denselben Ansatz mit interaktiven Logon und den UNC-Pfaden. Vllt funktioniert das schon. Und gib bescheid!
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  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: CreateProcessAsUser: Wie Verbindung mit Netzwerk herstel

  Alt 28. Aug 2008, 11:01
OK, mit dem interaktiven Login klappt es, ich kann auf UNC-Pfade zugreifen.
Allerdings sind keine gemappten Laufwerke verfügbar
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: CreateProcessAsUser: Wie Verbindung mit Netzwerk herstel

  Alt 28. Aug 2008, 11:33
Schlecht zu sagen, das müsste ich mal selbst ausprobieren.
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 12:43 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