Initialisierung

Die _ Ws2-32.dll lädt die Schnittstellen-DLL des Dienstanbieters mithilfe der standardmäßigen Lademechanismen von Microsoft Windows dynamische Bibliothek in das System und initialisiert sie durch Aufrufen von WSPStartup. Dies wird in der Regel durch eine Anwendung ausgelöst, die entweder socket oder WSASocket aufruft, um einen neuen Socket zu erstellen, der einem Dienstanbieter zugeordnet werden soll, dessen Schnittstellen-DLL derzeit nicht in den Arbeitsspeicher geladen ist. Der Pfad zur Schnittstellen-DLL jedes Dienstanbieters wird vom _ Ws2-32.dll zum Zeitpunkt der Installation des Dienstanbieters gespeichert. Weitere Informationen finden Sie unter Installations- und Konfigurationsfunktionen.

Im Laufe der Zeit können verschiedene Versionen für die Winsock-DLLs, -Anwendungen und -Dienstanbieter vorhanden sein. Neue Versionen können neue Features und neue Parameter für Datenstrukturen und Bitparameter usw. definieren. Versionsnummern geben daher an, wie verschiedene Datenstrukturen interpretiert werden.

Um ein optimales Mischen und Abgleichen verschiedener Versionen von Anwendungen, Versionen der _ Ws2-32.dll selbst und Versionen von Dienstanbietern durch verschiedene Anbieter zu ermöglichen, bietet die SPI einen Mechanismus für die Versionsaushandlung für die Verwendung zwischen dem Ws2-32.dll_ und den Dienstanbietern. Diese Versionsaushandlung wird von WSPStartupverarbeitet. Im Grunde übergibt der _ Ws2-32.dll die höchsten Versionsnummern, mit denen er kompatibel ist, an den Dienstanbieter. Der Dienstanbieter vergleicht dies mit seinem eigenen unterstützten Bereich von Versionsnummern. Wenn sich diese Bereiche überschneiden, gibt der Dienstanbieter einen Wert innerhalb des überlappenden Teils des Bereichs als Ergebnis der Aushandlung zurück. In der Regel sollte dies der höchstmögliche Wert sein. Wenn sich die Bereiche nicht überschneiden, sind die beiden Parteien inkompatibel, und die Funktion gibt einen Fehler zurück.

WSPStartup muss mindestens einmal von jedem Clientprozess aufgerufen werden, und kann von Ws232.dll oder anderen Entitäten mehrmals aufgerufen _ werden. Für jeden erfolgreichen WSPStartup-Aufruf muss ein übereinstimmender WSPCleanup aufgerufen werden. Der Dienstanbieter sollte einen Verweiszähler pro Prozess beibehalten. Bei jedem WSPStartup-Aufruf kann der Aufrufer eine beliebige Versionsnummer angeben, die von der SP-DLL unterstützt wird.

Ein Dienstanbieter muss den Zeiger auf die Upcall-Dispatchtabelle des Clients speichern, die als WSPStartup-Parameter pro Prozess empfangen wird. Wenn ein angegebener Prozess WSPStartup mehrmals aufruft, darf der Dienstanbieter nur den zuletzt angegebenen Verteilungstabellenzeiger verwenden.

Im Rahmen des Initialisierungsprozesses des Dienstanbieters ruft der _ Ws2-32.dll die Verteilungstabelle des Dienstanbieters über den lpProcTable-Parameter ab, um Einstiegspunkte für die restlichen SPI-Funktionen abzurufen, die in diesem Dokument angegeben sind.

Die Verwendung einer Dispatchtabelle (im Gegensatz zu den üblichen DLL-Mechanismen für den Zugriff auf Einstiegspunkte) dient zwei Zwecken:

  • Dies ist für die _ Ws2-32.dll praktischer, da ein einzelner Aufruf erfolgen kann, um den gesamten Satz von Einstiegspunkten zu ermitteln.
  • Sie ermöglicht es mehrstufigen Dienstanbietern, die in Protokollketten gebildet werden, effizienter zu arbeiten.

Initialisieren von Protokollketten

Zum Zeitpunkt der Installation der WSAPROTOCOL _ INFO-Struktur für eine Protokollkette wird auch der Pfad zum ersten mehrstufigen Anbieter in der Kette angegeben. Wenn eine Protokollkette initialisiert wird, verwendet der _ Ws2-32.dll diesen Pfad, um die Anbieter-DLL zu laden, und ruft dann WSPStartupauf. Da WSPStartup einen Zeiger auf die WSAPROTOCOL _ INFO-Struktur der Kette als einen ihrer Parameter enthält, können mehrstufige Anbieter bestimmen, in welcher Art von Kette sie initialisiert werden, und die Identität der nächsten unteren Ebene in der Kette. Ein mehrstufiger Anbieter lädt dann wiederum den nächsten Protokollanbieter in der Kette und initialisiert ihn mit einem Aufruf von WSPStartup usw. Wenn die nächstuntere Ebene ein weiterer mehrstufiger Anbieter ist, muss im WSPStartup-Aufruf auf die WSAPROTOCOL _ INFO-Struktur der Kette verwiesen werden. Wenn die nächste untere Ebene ein Basisprotokoll ist (das das Ende der Kette bezeichnet), wird die WSAPROTOCOL _ INFO-Struktur der Kette nicht mehr nach unten weitergegeben. Stattdessen muss die aktuelle Ebene auf eine WSAPROTOCOL _ INFO-Struktur verweisen, die dem Protokoll entspricht, das der Basisanbieter verwenden soll. Daher hat der Basisanbieter keine Vorstellung davon, an einer Protokollkette beteiligt zu sein.

Die verteilungstabelle, die von einem angegebenen mehrstufigen Anbieter bereitgestellt wird, dupliziert in vielen Fällen die Einstiegspunkte eines zugrunde liegenden Anbieters. Der mehrstufige Anbieter würde nur seine eigenen Einstiegspunkte für Funktionen einfügen, an denen er direkt beteiligt sein musste. Beachten Sie jedoch, dass es zwingend erforderlich ist, dass ein mehrstufiger Anbieter den Inhalt der Upcall-Tabelle, die er beim Aufrufen von WSPStartup auf der nächstunteren Ebene in einer Protokollkette empfangen hat, nicht ändert. Diese Aufrufe müssen direkt an die Windows Sockets 2-DLL erfolgen.