Configuração e instalação do transporte
Para que um protocolo de transporte seja acessível por meio do Windows Sockets, ele deve ser instalado corretamente no sistema e registrado com o Windows Sockets. Quando um provedor de serviços de transporte é instalado invocando o programa de instalação de um fornecedor, as informações de configuração devem ser adicionadas a um banco de dados de configuração para fornecer ao Ws2_32.dll informações necessárias sobre o provedor de serviços. O Ws2_32.dll exporta várias funções de instalação, WSCInstallProvider e WSCInstallProviderAndChains, para que o programa de instalação do fornecedor forneça as informações relevantes sobre o provedor de serviços a ser instalado. Essas informações incluem, por exemplo, o nome e o caminho para a DLL do provedor de serviços e uma lista de estruturas de WSAPROTOCOL_INFO às quais esse provedor pode dar suporte. O Ws2_32.dll também fornece uma função, WSCDeinstallProvider, para que o programa de desinstalação de um fornecedor remova todas as informações relevantes do banco de dados de configuração mantido pelo Ws2_32.dll. O local exato e o formato dessas informações de configuração são privados para o Ws2_32.dll e só podem ser manipulados pelas funções mencionadas acima.
Em plataformas de 64 bits, há funções semelhantes que operam em catálogos de 32 e 64 bits. Essas funções incluem WSCInstallProvider64_32, WSCInstallProviderAndChains64_32 e WSCDeinstallProvider32.
A ordem na qual os provedores de serviços de transporte são instalados inicialmente rege a ordem na qual eles são enumerados por meio de WSCEnumProtocols e WSCEnumProtocols32 na interface do provedor de serviços ou por meio de WSAEnumProtocols na interface do aplicativo. Mais importante, essa ordem também rege a ordem na qual os protocolos e provedores de serviços são considerados quando um cliente solicita a criação de um soquete com base em sua família de endereços, tipo e identificador de protocolo. O Windows Sockets 2 inclui um miniaplicativo chamado Sporder.exe que permite que o catálogo de protocolos instalados seja reordenado interativamente depois que os protocolos já tiverem sido instalados. O Windows Sockets 2 também inclui uma DLL auxiliar, Sporder.dll, que exporta uma interface de procedimento para reordenar protocolos. Essa interface de procedimento consiste em um único procedimento chamado WSCWriteProviderOrder.
Instalando protocolos em camadas e cadeias de protocolo
A estrutura WSAPROTOCOL_INFO fornecida com cada protocolo a ser instalado indica se o protocolo é um protocolo base, protocolo em camadas ou cadeia de protocolo. O valor do parâmetro ProtocolChain.ChainLen é interpretado conforme mostrado na tabela a seguir.
Valor | Significado |
---|---|
0 | Protocolo em camadas. |
1 | Protocolo base (ou cadeia com apenas um componente). |
>1 | Cadeia de protocolos. |
A instalação de cadeias de protocolo só pode ocorrer após a instalação bem-sucedida de todos os componentes constituintes (protocolos base e protocolos em camadas). A estrutura WSAPROTOCOL_INFO para uma cadeia de protocolo usa o parâmetro ProtocolChain para descrever o comprimento da cadeia e a identidade de cada componente. Os protocolos individuais que compõem uma cadeia são listados em ordem na matriz ProtocolChain.ChainEntries, com o elemento zero da matriz correspondente ao primeiro provedor em camadas. Os protocolos são identificados por seus valores CatalogEntryID , que são atribuídos pelo Ws2_32.dll no momento da instalação do protocolo e podem ser encontrados na estrutura WSAPROTOCOL_INFO para cada protocolo.
Os valores para os parâmetros restantes na estrutura de WSAPROTOCOL_INFO da cadeia de protocolo devem ser escolhidos para refletir os atributos e identificadores que melhor caracterizam a cadeia de protocolo como um todo. Ao selecionar esses valores, os desenvolvedores devem ter em mente que as comunicações sobre cadeias de protocolo só podem ocorrer quando ambos os pontos de extremidade têm cadeias de protocolo compatíveis instaladas e que os aplicativos devem ser capazes de reconhecer a estrutura de WSAPROTOCOL_INFO correspondente.
Quando um protocolo base é instalado, não é necessário fazer nenhuma entrada na matriz ProtocolChain.ChainEntries . Entende-se implicitamente que o único componente dessa cadeia já está identificado no parâmetro CatalogEntryID da mesma estrutura WSAPROTOCOL_INFO . Observe também que as cadeias de protocolo podem não incluir várias instâncias do mesmo protocolo em camadas.