Estruturas de dados de resolução de nomes

Existem várias estruturas de dados importantes que são usadas extensivamente em todas as funções de resolução de nomes.

A estrutura WSAQUERYSET é usada para formar consultas para WSALookupServiceBegine usada para fornecer resultados de consulta para WSALookupServiceNext. É uma estrutura complexa, uma vez que contém ponteiros para várias outras estruturas, algumas das quais fazem referência a outras estruturas. A relação entre a estruturaWSAQUERYSET e as estruturas a que faz referência é ilustrada da seguinte forma.

relação entre wsaqueryset e suas estruturas associadas

Dentro da estruturaWSAQUERYSET, a maioria dos membros é autoexplicativa, mas alguns merecem explicações adicionais. O dwSize membro deve sempre ser preenchido com sizeof(WSAQUERYSET), pois é usado por provedores de namespace para detetar e se adaptar a diferentes versões da estrutura WSAQUERYSET que podem aparecer ao longo do tempo.

O dwOutputFlags membro é usado por um provedor de namespace para fornecer informações adicionais sobre os resultados da consulta. Para obter detalhes, consulte a função WSALookupServiceNext.

A estrutura WSAECOMPARATOR referenciada pelo membro lpversion é usada para restrição de consulta e resultados. Para consultas, o membro dwVersion indica a versão desejada do serviço. O membro ecHow é um tipo enumerado que especifica como a comparação pode ser feita. As opções são COMP_EQUALS que requer que ocorra uma correspondência exata na versão ou COMP_NOTLESS que especifica que o número da versão do serviço não seja inferior ao valor do dwVersion membro.

A interpretação de dwNameSpace e lpNSProviderId depende de como a estrutura está sendo usada e é descrita mais detalhadamente nas descrições de funções individuais que utilizam essa estrutura.

O membro lpszContext aplica-se a namespaces hierárquicos e especifica o ponto de partida de uma consulta ou o local dentro da hierarquia onde o serviço reside. As regras gerais são as seguintes:

  • Um valor de NULL, blank ("") inicia a pesquisa no contexto padrão.
  • Um valor de "\" inicia a pesquisa na parte superior do namespace.
  • Qualquer outro valor inicia a pesquisa no ponto designado.

Os provedores que não oferecem suporte à contenção podem retornar um erro se algo diferente de "" ou "\" for especificado. Os provedores que oferecem suporte a contenção limitada, como grupos, devem aceitar "", '\", ou um ponto designado. Os contextos são específicos do namespace. Se o dwNameSpace membro for NS_ALL, então apenas "" ou "\" devem ser passados como o contexto, uma vez que estes são reconhecidos por todos os namespaces.

O membro lpszQueryString é usado para fornecer informações de consulta adicionais específicas do namespace, como uma cadeia de caracteres que descreve um nome de protocolo de transporte e serviço bem conhecido, como em "FTP/TCP".

A estruturaAFPROTOCOLS referenciada pelo membro lpafpProtocols é usada apenas para fins de consulta e fornece uma lista de protocolos para restringir a consulta. Esses protocolos são representados como pares (família de endereços, protocolo), uma vez que os valores de protocolo só têm significado dentro do contexto de uma família de endereços.

A matriz da estrutura de CSADDR_INFO referenciada pelo membro do lpcsaBuffer contém todas as informações necessárias para um serviço usar no estabelecimento de um escuta ou para um cliente usar no estabelecimento de uma conexão com o serviço. Os membros LocalAddr e RemoteAddr contêm diretamente uma estrutura SOCKET_ADDRESS.

Um serviço criaria um soquete chamando ode soqueteou função WSASocket usando a tupla de LocalAddr.lpSockaddr->sa_family, iSocketTypee iProtocol como parâmetros. Um serviço vincularia o soquete a um endereço local chamando a função bind usando LocalAddr.lpSockaddr e LocalAddr.lpSockaddrLength como parâmetros.

Um cliente cria seu soquete chamando ode soqueteou função WSASocket usando a tupla de LocalAddr.lpSockaddr->sa_family, iSocketTypee iProtocol como parâmetros. Um cliente usa a combinação de RemoteAddr.lpSockaddr e RemoteAddr.lpSockaddrLength como parâmetros ao fazer uma conexão remota usando o conectar, ConnectExou função WSAConnect.

Estruturas de dados de classe de serviço

Quando uma nova classe de serviço é instalada, uma estrutura deWSASERVICECLASSINFOdeve ser preparada e fornecida. Essa estrutura também consiste em subestruturas que contêm uma série de membros que se aplicam a namespaces específicos. Uma estrutura de dados de informações de classe é a seguinte:

arquitetura de estruturas de dados de classe de serviço

Para cada classe de serviço, há um único WSASERVICECLASSINFO estrutura. Dentro da estrutura deWSASERVICECLASSINFO, o identificador exclusivo da classe de serviço está contido no membro lpServiceClassId e uma cadeia de caracteres de exibição associada é referenciada pelo membro lpServiceClassName. Esta é a cadeia de caracteres retornada pela função WSAGetServiceClassNameByClassId.

O membro lpClassInfos na estruturaWSASERVICECLASSINFOfaz referência a uma matriz de estruturas de WSANSCLASSINFO, cada uma das quais fornece um membro nomeado e digitado que se aplica a um namespace especificado. Exemplos de valores para o membro lpszName incluem: "SapId", "TcpPort", "UdpPort", etc. Essas cadeias de caracteres geralmente são específicas para o namespace identificado no dwNameSpace membro. Os valores típicos para o dwValueType membro podem ser REG_DWORD, REG_SZ, etc. O membro dwValueSize indica o comprimento do item de dados apontado por lpValue.

Toda a coleção de dados representada em uma estrutura de WSASERVICECLASSINFO é fornecida a cada provedor de namespace quando a funçãoWSAInstallServiceClassé invocada. Em seguida, cada provedor de namespace individual vasculha a lista de estruturas de WSANSCLASSINFO e retém as informações aplicáveis a ele.

PROTOCOLOS

CSADDR_INFO

Modelo de Resolução de Nomes

Protocol-Independent Resolução de Nomes

Registo e Resolução de Nomes

SOCKET_ADDRESS

Resumo das funções de resolução de nomes

WSAECOMPARATOR

WSAGetServiceClassNameByClassId

WSAInstallServiceClass

WSALookupServiceBegin

WSAQUERYSET

WSASERVICECLASSINFO