Einzelnen Beitrag anzeigen

CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#1

Windows-Bug mit bestimmter Netzlaufwerkskonstellation (*Herausforderung gesucht?*)

  Alt 17. Aug 2015, 23:52
Kurzfassung:
Man kann Netzlaufwerke, die beim Einloggen in Windows nicht verfügbar waren, anschließend per Code nicht mehr trennen bzw. entfernen. Manuell per Rechtsklick im Explorer geht dies jedoch.
Gesucht werden eine Erklärung und ein Workaround für diesen Bug.

Anleitung zum Reproduzieren (Windows XP / 7 / 8.1 / 10):
  1. Netzlaufwerk persistent (!) verbinden.
    („Verbindung bei Anmeldung wiederherstellen“)
    Dieses darf sich nicht auf eine lokale Freigabe beziehen, sondern auf einen anderen Rechner oder VM im Netzwerk.

  2. Die Verbindung zum Rechner mit der Freigabe trennen,
    (Entweder Netzwerkkabel am Zielsystem oder am lokalen System ziehen oder in VM Netzwerk trennen).
  3. Ausloggen und wieder einloggen (alternativ Rechner neustarten)
    Eine Windows-Sprechblase wird sagen, dass nicht alle Netzlaufwerke wiederhergestellt werden konnten:


    Wenn diese Meldung kam, könnt Ihr Euch sicher sein, das Problem gleich reproduzieren zu können. Kam diese nicht, wurde die Verbindung entweder doch nicht getrennt oder das Laufwerk wurde nicht persistent verbunden. Dann die Schritte bitte nochmal lesen!

An dieser Stelle möchte ich das Laufwerk gerne über mein Programm trennen.

3 Möglichkeiten zum Trennen:
  1. Kommandozeile: net use Z: /delete
  2. Windows API: WNetCancelConnection2(PChar('Z:'), CONNECT_UPDATE_PROFILE, true);
  3. Manuell im Explorer per Rechtsklick auf das Laufwerk und „Trennen”
Möglichkeiten 1 & 2 trennen zwar das Netzlaufwerk, jedoch verbleibt das Laufwerkssymbol im Explorer. Es verschwindet erst, wenn man sich aus- und wieder einloggt, oder explorer.exe abschießt und erneut startet.

Allerdings funktioniert die manuelle Variante absolut problemlos, wenn man diese durchführt, ohne vorher per Code oder Kommandozeile anzusetzen. Die Verbindung wird getrennt und das Icon verschwindet.


Worin besteht der Unterschied? Was geschieht bei der manuellen Trennung per Kontextmenü, was die anderen Methoden nicht tun?
Die Tatsache, dass das Icon verschwunden ist, wenn man explorer.exe abschießt und erneut startet, deutet für mich sehr stark darauf hin, dass irgendein Cache oder eine interne Laufwerks-Liste nicht korrekt aktualisiert wird. Ich hätte das ja schon längst als Windows-Bug bei Seite gelegt, allerdings besteht das Problem beim manuellen Trennen ja nicht! Also muss es irgendeine Möglichkeit geben...

Ein Zusammenhang mit UAC scheidet für mich aus, da das Problem auch mit XP besteht, wo der Anwender keine unterschiedlichen Tokens besitzt.

Angemerkt sei auch, dass das Trennen von Netzlaufwerken per Code oder Kommandozeile unter normalen Umständen (also wenn nicht persistent, oder wenn mit Verbindung eingeloggt) problemlos funktioniert.

Ich habe nun aktuell versucht, das Kontextmenü per Code aufzurufen und die Prozedur darüber zu starten. Allerdings hat das denselben Effekt wie die Kommandozeile und die API-Funktion. Wie kann das sein? Wie kann sich der manuelle Aufruf dermaßen unterscheiden? Nach etwa einer Woche an Experimenten bin ich nun doch ziemlich verzweifelt.
Miniaturansicht angehängter Grafiken
ballon.jpg   trennen.png   verbinden.png  
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.

Geändert von CodeX (18. Aug 2015 um 00:13 Uhr)
  Mit Zitat antworten Zitat