Mecanismo de Extensão Provider-Specific
A função WSAIoctl permite que os provedores de serviços ofereçam extensões de recursos específicas do provedor. Esse mecanismo pressupõe, é claro, que um aplicativo esteja ciente de uma extensão específica e entenda a semântica e a sintaxe envolvidas. Essas informações normalmente seriam fornecidas pelo fornecedor do provedor de serviços.
Para invocar uma função de extensão, o aplicativo deve primeiro solicitar um ponteiro para a função desejada. Isso é feito por meio da função WSAIoctl usando o código de comando SIO_GET_EXTENSION_FUNCTION_POINTER. O buffer de entrada para WSAIoctl contém um identificador para a função de extensão desejada, enquanto o buffer de saída contém o ponteiro de função em si. Em seguida, o aplicativo pode invocar a função de extensão diretamente sem passar pelo Ws2_32.dll.
Os identificadores atribuídos às funções de extensão são GUIDs (identificadores globalmente exclusivos) alocados por fornecedores de provedores de serviços. Os fornecedores que criam funções de extensão são instados a publicar detalhes completos sobre a função, incluindo a sintaxe do protótipo da função. Isso possibilita que funções de extensão comuns e populares sejam oferecidas por mais de um fornecedor de provedor de serviços. Um aplicativo pode obter o ponteiro de função e usar a função sem precisar saber nada sobre o provedor de serviços específico que implementa a função.
No Windows Vista e posteriores, novas extensões do sistema Winsock são exportadas diretamente da DLL winsock, portanto, a função WSAIoctl não é necessária para carregar essas extensões. As novas funções de extensão disponíveis no Windows Vista e posteriores incluem as funções WSAPoll e WSASendMsg exportadas de Ws2_32.dll.