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% 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.
Tags und Links c++ windows active-directory winapi