Mecanismo de Extensão Provider-Specific
A funçãoWSAIoctlpermite que os provedores de serviços ofereçam extensões de recurso 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çãoWSAIoctlusando 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 próprio ponteiro de função. 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 solicitados 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 posterior, 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.