Warum gibt WNetAddConnection2 nach erfolgreichem Aufruf von WNetCancelConnection2 immer noch 1219 zurück?

8

Ich habe einen Code geschrieben, um eine Verbindung mit einem Share auf einem Remote-Server herzustellen. Wenn WNetAddConnection2 ERROR_SESSION_CREDENTIAL_CONFLICT (1219) zurückgibt, lösche ich zuerst die Verbindung durch WNetCancelConnection2 (gebe NO_ERROR zurück). Und dann wieder verbinden. Aber WNetAddConnection2 gibt immer noch 1219 zurück. Warum das und wie man es repariert?

Hier ist mein Code

%Vor%

Zur Info: Nachdem ich "net use" in cmd eingegeben habe, habe ich das Gefühl, dass etwas mit einem Fehler passiert:

%Vor%     
hsluoyz 15.07.2012, 15:54
quelle

1 Antwort

3

Ich hatte gerade dieses Problem, und im Grunde schien es, dass es aufgrund eines anderen Prozesses noch Datei geöffnet hatte, obwohl ich "true" als letzten Parameter von WNetCancelConnection2() angegeben habe erzwinge die Verbindung. Sobald ich diesen anderen Prozess heruntergefahren habe, konnte ich erfolgreich zwischen Anmeldedaten wechseln, die eine Verbindung zur selben Freigabe herstellen und wieder herstellen. Dies ist unter Windows 2012 (64-Bit) und die Freigabe war lokal (referenziert durch den Maschinennamen).

ABER ... es ist immer noch ein Problem, wenn Sie sich mit verschiedenen Freigaben auf demselben Rechner verbinden wollen. Wenn ich versuche, mich mit \mymachine\share1 als user1 und dann mit \mymachine\share2 als user2 zu verbinden, bekomme ich den Fehler 1219 (auch wenn es sich um einen komplett anderen Prozess handelt). Ich muss explizit WNetCancelConnnection auf \mymachine\share1 aufrufen, bevor ich mich mit share2 verbinden kann. Das heißt, an der Stelle, an der Sie eine Verbindung zu einer Freigabe auf einer bestimmten Maschine herstellen, müssen Sie möglicherweise zuerst bestehende Verbindungen aufzählen und schließen / p>

Ziemlich frustrierend, und ich kann das Designprinzip hier nicht verstehen. Es scheint, dass die Flags zum Erstellen von temporären Verbindungen usw. auch dieses Verhalten nicht beeinflussen. Wirklich, was ich tun möchte, ist zu sagen "für diesen Thread, stellen Sie eine Verbindung zu dieser Freigabe auf diesem Computer her und als dieser Benutzer, so dass alle Versuche, auf Dateien auf der Freigabe zuzugreifen, mit den Anmeldeinformationen dieses Benutzers ausgeführt werden". Auf diese Weise können andere Prozesse / Threads keine Probleme mit dem aktuellen Problem verursachen.

    
Dylan Nicholson 05.08.2013, 03:17
quelle