Deskriptorzuordnung
Während Windows Sockets-Dienstanbieter ermutigt werden, Sockets als installierbare Dateisystemobjekte (IFS) zu implementieren, berücksichtigt die Winsock-Architektur auch Dienstanbieter, deren Sockethandles keine IFS-Objekte sind. Anbieter mit IFS-Handles geben dies über das XP1_IFS_HANDLES Attributbit in der WSAPROTOCOL_INFO-Struktur an. (Hinweis: Das XP1_IFS_HANDLES Attributbit war in Version 2.0.8 der API-Spezifikation nicht enthalten, wurde jedoch seit dem Errata-Mechanismus hinzugefügt.) Winsock SPI-Clients können Anbieter nutzen, deren Socketdeskriptoren IFS-Handles sind, indem sie diese Deskriptoren mit standardmäßigen Windows-E/A-Einrichtungen verwenden, z. B. ReadFile- und WriteFile-.
Wenn ein IFS-Anbieter einen neuen Socketdeskriptor erstellt, ist es obligatorisch, dass der Anbieteraufruf WPUModifyIFSHandle vor der Bereitstellung des neuen Handles an einen Windows Sockets SPI-Client. Diese Funktion verwendet einen Anbieterbezeichner und ein vorgeschlagenes IFS-Handle vom Anbieter als Eingabe und gibt ein (möglicherweise) geändertes Handle zurück. Der IFS-Anbieter darf nur den geänderten Handle für seinen Client bereitstellen, und alle Anforderungen des Clients verweisen nur auf dieses geänderte Handle. Der geänderte Handle ist garantiert nicht von dem vorgeschlagenen Handle zu unterscheiden, soweit es sich um das Betriebssystem handelt. Daher entscheidet sich der Dienstanbieter in den meisten Fällen einfach dafür, nur den geänderten Handle in allen internen Verarbeitungen zu verwenden. Zweck dieser Änderungsfunktion besteht darin, den Ws2_32.dll zu ermöglichen, den Prozess der Identifizierung des Dienstanbieters, der einem bestimmten Socket zugeordnet ist, erheblich zu optimieren.
Anbieter, die IFS-Handles nicht zurückgeben, müssen über den WPUCreateSocketHandle- aufruf ein gültiges Handle aus dem Ws2_32.dll abrufen. Der NonIFS-Anbieter darf nur ein Windows Sockets-2.DLL-bereitgestelltes Handle für seinen Client anbieten, und alle Anforderungen des Clients verweisen nur auf diese Handles. Als Komfort für Dienstanbieterimplementierer ist einer der Eingabeparameter eines Anbieters in WPUCreateSocketHandle ein DWORD-Kontextwert. Der Ws2_32.dll ordnet diesen Kontextwert dem zugeordneten Sockethandle zu und ermöglicht es einem Dienstanbieter, den Kontextwert jederzeit über den WPUQuerySocketHandleContext Aufruf abzurufen. Eine typische Verwendung für diesen Kontextwert wäre das Speichern eines Zeigers auf eine vom Dienstanbieter verwaltete Datenstruktur, die zum Speichern von Socketstatusinformationen verwendet wird.