Partager via


Allocation de descripteur

Bien que les fournisseurs de services Windows Sockets soient encouragés à implémenter des sockets en tant qu’objets IFS (Installable File System), l’architecture Winsock s’adapte également aux fournisseurs de services dont les handles de socket ne sont pas des objets IFS. Les fournisseurs avec des handles IFS indiquent cela 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 été ajouté par le biais du mécanisme errata.) Les clients Winsock SPI peuvent tirer parti des fournisseurs dont les descripteurs de socket sont des handles IFS à l’aide de 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 accepte 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 pour être indistinguishable 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 tout son traitement interne. L’objectif de cette fonction de modification est de permettre aux 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. Comme commodité 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é pour stocker les informations d’état du socket.