Allocation de descripteur
Bien que les fournisseurs de services Windows Sockets soient encouragés à implémenter des sockets en tant qu’objets de système de fichiers installables (IFS), l’architecture Winsock prend également en charge les fournisseurs de services dont les handles de socket ne sont pas des objets IFS. Les fournisseurs avec des handles IFS l’indiquent via le bit d’attribut XP1_IFS_HANDLES dans la structure WSAPROTOCOL_INFO . (Remarque : le bit d’attribut XP1_IFS_HANDLES n’a pas été inclus dans la version 2.0.8 de la spécification de l’API, mais a depuis été ajouté via le mécanisme errata.) Les clients Winsock SPI peuvent tirer parti des fournisseurs dont les descripteurs de socket sont des handles IFS en utilisant ces descripteurs avec des fonctionnalités d’E/S Windows standard, telles que ReadFile et WriteFile.
Chaque fois qu’un fournisseur IFS crée un descripteur de socket, il est obligatoire que le fournisseur appelle WPUModifyIFSHandle avant de fournir le nouveau handle à un client SPI Windows Sockets. Cette fonction prend un identificateur de fournisseur et un handle IFS proposé du fournisseur comme entrée et retourne un handle (éventuellement) modifié. Le fournisseur IFS doit fournir uniquement le handle modifié à son client, et toutes les demandes du client référencent uniquement ce handle modifié. Le handle modifié est garanti qu’il ne peut pas être distingue du handle proposé en ce qui concerne le système d’exploitation. Ainsi, dans la plupart des cas, le fournisseur de services choisit simplement d’utiliser uniquement le handle modifié dans l’ensemble de son traitement interne. L’objectif de cette fonction de modification est de permettre au Ws2_32.dll de simplifier considérablement le processus d’identification du fournisseur de services associé à un socket donné.
Les fournisseurs qui ne retournent pas de handles IFS doivent obtenir un handle valide à partir du Ws2_32.dll via l’appel WPUCreateSocketHandle . Le fournisseur nonIFS ne doit proposer qu’un handle fourni par windows Sockets 2.DLL à son client, et toutes les demandes du client référencent uniquement ces handles. Pour les implémenteurs de fournisseurs de services, l’un des paramètres d’entrée fournis par un fournisseur dans WPUCreateSocketHandle est une valeur de contexte DWORD. Le Ws2_32.dll associe cette valeur de contexte au handle de socket alloué et permet à un fournisseur de services de récupérer la valeur de contexte à tout moment via l’appel WPUQuerySocketHandleContext . Une utilisation classique pour cette valeur de contexte serait de stocker un pointeur vers une structure de données gérée par un fournisseur de services utilisée pour stocker les informations d’état du socket.