Asignación de descriptores
Aunque se recomienda a los proveedores de servicios de Windows Sockets implementar sockets como objetos del sistema de archivos instalables (IFS), la arquitectura winsock también admite proveedores de servicios cuyos identificadores de socket no son objetos IFS. Los proveedores con identificadores IFS indican esto a través del bit de atributo XP1_IFS_HANDLES en la estructura WSAPROTOCOL_INFO. (Nota: el bit de atributo XP1_IFS_HANDLES no se incluyó en la versión 2.0.8 de la especificación de API, pero se ha agregado desde entonces a través del mecanismo de errata). Los clientes SPI de Winsock pueden aprovechar los proveedores cuyos descriptores de socket son identificadores IFS mediante estos descriptores con instalaciones estándar de E/S de Windows, como ReadFile y WriteFile.
Siempre que un proveedor IFS crea un nuevo descriptor de socket, es obligatorio que el proveedor llame a WPUModifyIFSHandle antes de proporcionar el nuevo identificador a un cliente SPI de Windows Sockets. Esta función toma un identificador de proveedor y un identificador IFS propuesto del proveedor como entrada y devuelve un identificador modificado (posiblemente). El proveedor IFS debe proporcionar solo el identificador modificado a su cliente y todas las solicitudes del cliente solo harán referencia a este identificador modificado. Se garantiza que el identificador modificado no se pueda distinguir del identificador propuesto en lo que respecta al sistema operativo. Por lo tanto, en la mayoría de los casos, el proveedor de servicios simplemente elegirá usar solo el identificador modificado en todo su procesamiento interno. El propósito de esta función de modificación es permitir que el Ws2_32.dll optimice considerablemente el proceso de identificación del proveedor de servicios asociado a un socket determinado.
Los proveedores que no devuelven identificadores IFS deben obtener un identificador válido de la Ws2_32.dll a través de la llamadaWPUCreateSocketHandle. El proveedor noIFS debe ofrecer solo un identificador proporcionado por Windows Sockets 2.DLL a su cliente, y todas las solicitudes del cliente solo harán referencia a estos identificadores. Como comodidad para los implementadores de proveedores de servicios, uno de los parámetros de entrada proporcionados por un proveedor en WPUCreateSocketHandle es un valor de contexto DWORD. El Ws2_32.dll asocia este valor de contexto al identificador de socket asignado y permite a un proveedor de servicios recuperar el valor de contexto en cualquier momento a través de la llamadaWPUQuerySocketHandleContext. Un uso típico para este valor de contexto sería almacenar un puntero a una estructura de datos mantenida por un proveedor de servicios que se usa para almacenar información de estado de socket.