Entwickler-Ecke

Internet / Netzwerk - Netzwerkpfad & elevated User


AScomp - Fr 19.09.14 22:26
Titel: Netzwerkpfad & elevated User
Hallo zusammen,

stehe vor folgendem bisher unüberwindbaren Problem:

Meine Anwendung wird automatisch beim Systemstart mit Administratorrechten gestartet. Zu vorgegebenen Uhrzeiten greift sie dann auf vom User festgelegte Netzwerkordner per UNC-Pfad zu. Die Netzwerkordner sind also nicht gemapped, der Zugriff erfolgt direkt per "\\LAN-PC\c\folder\".

Allerdings funktioniert der Zugriff erst, sobald der Benutzer einmal im Windows Explorer auf den LAN-PC zugegriffen hat. Dabei reicht es schon, wenn nur kurz \\LAN-PC\c\ angeklickt wurde.

Falls dieser Vorgang nicht durchgeführt wurde (oder nicht wenigstens eine andere Anwendung auf den LAN-PC zugegriffen hat), scheitern alle "FileExists"-Abfragen meiner Anwendung, \\LAN-PC\c\ wird dann überhaupt nicht gefunden.

Was also habe ich bisher versucht?

a) Net use per ShellExecute bzw. mit WNetAddConnection - kein Erfolg
b) Explorer.exe aufgerufen mit Parameter \\LAN-PC\c\ - kein Erfolg
c) EnableLinkedConnections in Registry auf 1 gestellt - kein Erfolg

Wird meine Anwendung NICHT mit Adminrechten gestartet, funktioniert alles einwandfrei. Es muss aber doch möglich sein, dass meine höher-privilegierte Anwendung auf das Netzwerk zugreift! Und zwar ohne vorherigen, manuellen Zugriff auf das Netzwerk.

Hat jemand eine Idee? Ich tappe offensichtlich völlig im Dunkeln.

Viele Grüße

Andy


freak4fun - Fr 19.09.14 23:02

Hast du "b) Explorer.exe aufgerufen mit Parameter \\LAN-PC\c\ - kein Erfolg" mit der Windowsauthentifikation ausgeführt? Die müsstest du ja haben. Wenn du den Explorer mit Adminrechten startes, hast du dann Zugriff auf das Netzlaufwerk?


AScomp - Fr 19.09.14 23:33

Das war mein letzter Versuch mit dem Explorer:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
var
  PH: THandle;
  PI: TProcessInformation;
  SI: TStartupInfo;
begin
  FillChar(PI, SizeOf(PI), 0);

  FillChar(SI, SizeOf(SI), 0);

  SI.cb := SizeOf(SI);
  SI.dwFlags := STARTF_USESHOWWINDOW;
  SI.wShowWindow := SW_SHOWNORMAL;

  if CreateProcess('c:\windows\explorer.exe', PChar(' ' + Directory), nilnil, False, 0nilnil, SI, PI) then
  begin
    WaitForInputIdle(PI.hProcess, INFINITE);
    CloseHandle(PI.hProcess);
    CloseHandle(PI.hThread);
  end;


Die Rechte müssten ja vererbt worden sein. Der Windows Explorer zeigte dann statt des Netzwerkpfades (in meinem Beispiel "\\LAN-PC\c\") den lokalen Dokumente-Ordner an.

Der Explorer manuell gestartet mit Adminrechten zeigt den Netzwerkrechner an, man kann problemlos auf alle Ressourcen zugreifen.