Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Há várias estruturas de dados importantes que são usadas extensivamente em todas as funções de resolução de nomes.
estruturas de dados Query-Related
A estrutura WSAQUERYSET é usada para formar consultas para WSALookupServiceBegin e usada para fornecer resultados de consulta para WSALookupServiceNext. É uma estrutura complexa, pois contém ponteiros para várias outras estruturas, algumas das quais fazem referência a outras estruturas. A relação entre a estrutura WSAQUERYSET e as estruturas que ela faz referência é ilustrada da seguinte maneira.
Dentro da estrutura WSAQUERYSET , a maior parte do membro é autoexplicativa, mas algumas merecem explicação adicional. O membro dwSize sempre deve ser preenchido com sizeof(WSAQUERYSET), pois isso é usado por provedores de namespace para detectar e adaptar-se a diferentes versões da estrutura WSAQUERYSET que podem aparecer ao longo do tempo.
O membro dwOutputFlags é 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 exigem que ocorra uma correspondência exata na versão ou COMP_NOTLESS que especifica que o número de versão do serviço não seja menor que o valor do membro dwVersion .
A interpretação de dwNameSpace e lpNSProviderId depende de como a estrutura está sendo usada e é descrita ainda mais nas descrições de função 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 em que o serviço reside. As regras gerais são:
- Um valor nulo, em branco ("") 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.
Provedores que não dão suporte à contenção poderão retornar um erro se algo diferente de "" ou "\" for especificado. Os provedores que dão suporte à contenção limitada, como grupos, devem aceitar "", "\" ou um ponto designado. Os contextos são específicos do namespace. Se o membro dwNameSpace for NS_ALL, somente "" ou "\" deverá ser passado como o contexto, pois eles são reconhecidos por todos os namespaces.
O membro lpszQueryString é usado para fornecer informações adicionais de consulta específicas do namespace, como uma cadeia de caracteres que descreve um nome de protocolo de transporte e serviço conhecido, como em "FTP/TCP".
A estrutura AFPROTOCOLS 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), pois os valores de protocolo só têm significado dentro do contexto de uma família de endereços.
A matriz da estrutura CSADDR_INFO referenciada pelo membro lpcsaBuffer contém todas as informações necessárias para um serviço usar no estabelecimento de uma 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 o soquete ou a função WSASocket usando a tupla de LocalAddr.lpSockaddr-sa_family>, iSocketType e iProtocol como parâmetros. Um serviço associaria 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 o soquete ou a função WSASocket usando a tupla de LocalAddr.lpSockaddr-sa_family>, iSocketType e 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 a função connect, ConnectEx ou WSAConnect .
Estruturas de dados da classe de serviço
Quando uma nova classe de serviço é instalada, uma estrutura WSASERVICECLASSINFO deve 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:
Para cada classe de serviço, há uma única estrutura WSASERVICECLASSINFO . Dentro da estrutura WSASERVICECLASSINFO , 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 . Essa é a cadeia de caracteres retornada pela função WSAGetServiceClassNameByClassId .
O membro lpClassInfos na estrutura WSASERVICECLASSINFO faz referência a uma matriz de estruturas WSANSCLASSINFO , cada uma das quais fornece um membro nomeado e tipado 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 membro dwNameSpace . Valores típicos para o membro dwValueType 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 WSASERVICECLASSINFO é fornecida a cada provedor de namespace quando a função WSAInstallServiceClass é invocada. Cada provedor de namespace individual, em seguida, examina a lista de estruturas WSANSCLASSINFO e retém as informações aplicáveis a ele.
Tópicos relacionados