Funktionserweiterungsmechanismus in der SPI

Da die Winsock-DLL selbst nicht mehr von jedem einzelnen Stapelanbieter bereitgestellt wird, ist es für einen Stapelanbieter nicht möglich, erweiterte Funktionen durch Hinzufügen von Einstiegspunkten zur Winsock-DLL anzubieten. Um diese Einschränkung zu umgehen, nutzt Winsock die neue WSAIoctl-Funktion für Dienstanbieter, die anbieterspezifische Funktionserweiterungen anbieten möchten. Dieser Mechanismus setzt voraus, dass eine Anwendung eine bestimmte Erweiterung kennt und sowohl die semantische als auch die syntaxbeteiligte Syntax versteht. Solche Informationen werden in der Regel vom Anbieter des Dienstanbieters bereitgestellt.

Um eine Erweiterungsfunktion aufzurufen, muss die Anwendung zunächst einen Zeiger auf die gewünschte Funktion anfordern. Dies erfolgt über die WSAIoctl-Funktion mithilfe des _ _ _ Befehlscodes SIO GET EXTENSION FUNCTION _ POINTER. Der Eingabepuffer für die WSAIoctl-Funktion enthält einen Bezeichner für die gewünschte Erweiterungsfunktion, und der Ausgabepuffer enthält den Funktionszeiger selbst. Die Anwendung kann dann die Erweiterungsfunktion direkt aufrufen, ohne die Ws2-32.dll zu _ durchlaufen.

Bei den Bezeichnern, die Erweiterungsfunktionen zugewiesen sind, handelt es sich um GUIDs (Globally Unique Identifiers), die von Dienstanbieteranbietern zugeordnet werden. Anbieter, die Erweiterungsfunktionen erstellen, werden aufgefordert, vollständige Details zur Funktion zu veröffentlichen, einschließlich der Syntax des Funktionsprototyps. Dadurch können gängige und/oder beliebte Erweiterungsfunktionen von mehreren Dienstanbietern angeboten werden. Eine Anwendung kann den Funktionszeiger abrufen und die Funktion verwenden, ohne etwas über den jeweiligen Dienstanbieter wissen zu müssen, der die Funktion implementiert.