FIX: In einem Programm tritt eine Verzögerung von 20 Sekunden auf, wenn eine bestehende interne oder externe Verbindung geschlossen wird, wenn Forefront Threat Management Gateway Client verwendet wird.

Gilt für
Forefront Threat Management Gateway 2010 Enterprise Forefront Threat Management Gateway 2010 Standard

Symptome

Nehmen Sie folgendes Szenario an:

  • Sie haben Microsoft Forefront Threat Management Gateway Client auf einem Clientcomputer installiert, auf dem ein Windows-Betriebssystem ausgeführt wird.
  • Sie haben ein Programm, das auf einem Computer installiert ist, der Windows Sockets (Winsock) verwendet, um eine Verbindung mit einem externen oder internen Anwendungsserver herzustellen.

Wenn in diesem Szenario eine hergestellte Verbindung zwischen dem Client und dem Server geschlossen wird, erfährt das Programm eine Verzögerung von 20 Sekunden.

Hinweis Während dieser Verzögerung von 20 Sekunden scheint das Programm überhaupt nicht zu reagieren.

Ursache

Dieses Problem kann auftreten, wenn das auf dem Clientcomputer ausgeführte Programm die Winsock-Bereinigung durchführt, indem es die WSACleanup()-Funktion aus der DllMain()-Funktion in einer der DLLs aufruft, die vom Programm verwendet wird. Dies führt zu einem Deadlock auf dem Windows NT-Ladeprogramm, wodurch die Funktion WSACleanup() nicht abgeschlossen werden kann. Ein Aufruf der Funktion WSACleanup() aus der Funktion DllMain() verstößt gegen die DllMain-Spezifikationen. Es folgt ein Auszug aus dem Thema "DllMain-Einstiegspunkt" in der MSDN-Bibliothek (MSDN):

"Das Aufrufen von Funktionen, die andere DLLs als Kernel32.dll erfordern, kann zu schwer zu diagnostizierenden Problemen führen. Beispielsweise kann das Aufrufen der Funktionen "Benutzer", "Shell" und "COM" zu Zugriffsverletzungsfehlern führen, da einige Funktionen andere Systemkomponenten laden. Umgekehrt kann das Aufrufen solcher Funktionen während der Beendigung zu Zugriffsverletzungsfehlern führen, da die entsprechende Komponente möglicherweise bereits entladen oder nicht initialisiert wurde." Um diese Deadlock-Situation in begrenztem Umfang zu entschärfen, wird ein hartcodiertes Timeout von 20 Sekunden verwendet, um diesen Deadlock zu erkennen. Wenn dieses Zeitlimit überschritten wird, überspringt der Forefront Threat Management Gateway-Client die Winsock-Bereinigung.

Lösung

Installieren Sie den im folgenden Microsoft Knowledge Base-Artikel beschriebenen Hotfixrollup, um die Wartezeit zu ändern, die der Forefront Threat Management Gateway Client wartet, bevor die Winsock-Bereinigung übersprungen wird:

2616324 Für Forefront Threat Management Gateway Client ist ein Hotfixrollup verfügbarNachdem Sie diesen Hotfixrollup angewendet haben, können Sie den Timeoutwert anpassen, indem Sie den Wert der folgenden DWORD-Registrierungseinstellung ändern:

WSP_CLEANUP_DEADLOCK_DETECTION_LIMIT_IN_MILLISECONDSFür 32-Bit-Programme auf 32-Bit-Plattformen oder für 64-Bit-Programme auf 64-Bit-Plattformen sieht die DWORD-Registrierungseinstellung wie folgt aus:

HKEY_LOCAL_MACHINE\Software\Microsoft\RAT\Stingray\Debug\FwcWspFür 32-Bit-Programme auf 64-Bit-Plattformen sieht die DWORD-Registrierungseinstellung wie folgt aus:

HKEY_LOCAL_MACHINE \Software\Wow6432Node\Microsoft\RAT\Stingray\Debug\FwcWsp
Hinweis: Die Registrierungsschlüssel, die den Timeoutwert enthalten, sind möglicherweise nicht vorhanden. In diesem Fall müssen Sie sie erstellen.

Status

Microsoft hat bestätigt, dass dies ein Problem in dem Programm ist, das Winsock verwendet.

Referenzmaterial

Weitere Informationen zu den DllMain-Spezifikationen finden Sie auf der folgenden MSDN-Website:

DllMain-Einstiegspunkt Weitere Informationen zu Firewallclientcomputern finden Sie auf der folgenden Microsoft TechNet-Website:

Informationen zu Clientcomputern der Firewall Für weitere Informationen zur Terminologie für Softwareupdates klicken Sie auf die folgende Artikelnummer, um zum entsprechenden Artikel der Microsoft Knowledge Base zu gelangen:

824684 Erläuterung von Standardbegriffen bei Microsoft-Softwareupdates

Weitere Informationen

Unter bestimmten Umständen kann zusätzlich zu dem beschriebenen WSP_CLEANUP_DEADLOCK_DETECTION_LIMIT_IN_MILLISECONDS Wert eine zusätzliche Zeitüberschreitung erreicht werden. Diese zusätzliche Zeitüberschreitung kann auch durch das Erstellen eines DWORD-Registrierungswerts mit dem Namen WSP_CLEANUP_TIMEOUT unter dem folgenden Speicherort beeinflusst werden:

Für 32-Bit-Programme auf 32-Bit-Plattformen oder für 64-Bit-Programme auf 64-Bit-Plattformen:

HKEY_LOCAL_MACHINE\Software\Microsoft\RAT\Stingray\Debug\FwcWspFür 32-Bit-Programme auf 64-Bit-Plattformen:

HKEY_LOCAL_MACHINE \Software\Wow6432Node\Microsoft\RAT\Stingray\Debug\FwcWsp
Hinweis: Der Timeoutwert muss in Millisekunden angegeben werden. Wird der Wert nicht erstellt, verwendet das Programm einen Standardwert von 2.500 Millisekunden. Es wird empfohlen, keinen zu niedrigen Wert für WSP_CLEANUP_TIMEOUT festzulegen. Denn dieses Timeout gibt an, wie lange das Programm wartet, bis der sogenannte Überwachungsthread korrekt beendet wird. Daher sollten Sie diesen Wert nicht auf weniger als 500 Millisekunden festlegen.