Partager via


Structures de données de résolution de noms

Il existe plusieurs structures de données importantes qui sont utilisées largement dans toutes les fonctions de résolution de noms.

La structure WSAQUERYSET est utilisée pour former des requêtes pour WSALookupServiceBegin, et utilisée pour fournir des résultats de requête pour WSALookupServiceNext. Il s’agit d’une structure complexe, car elle contient des pointeurs vers plusieurs autres structures, dont certaines font référence à d’autres structures. La relation entre la structure WSAQUERYSET et les structures qu’elle référence est illustrée comme suit.

relation entre wsaqueryset et ses structures associées

Dans la structure WSAQUERYSET, la plupart du membre sont explicites, mais certains méritent une explication supplémentaire. Le membre dwSize doit toujours être rempli avec sizeof(WSAQUERYSET), car il est utilisé par les fournisseurs d’espaces de noms pour détecter et s’adapter à différentes versions de la structure WSAQUERYSET qui peuvent apparaître au fil du temps.

Le membre dwOutputFlags est utilisé par un fournisseur d’espaces de noms pour fournir des informations supplémentaires sur les résultats de la requête. Pour plus d’informations, consultez la fonction WSALookupServiceNext.

La structure WSAECOMPARATOR référencée par le membre lpversion est utilisée pour la contrainte de requête et les résultats. Pour les requêtes, le membre dwVersion indique la version souhaitée du service. Le membre ecHow est un type énuméré qui spécifie la façon dont la comparaison peut être effectuée. Les choix sont COMP_EQUALS qui nécessitent qu’une correspondance exacte dans la version se produise, ou COMP_NOTLESS qui spécifie que le numéro de version du service n’est pas inférieur à la valeur du membre dwVersion.

L’interprétation de dwNameSpace et lpNSProviderId dépend de la façon dont la structure est utilisée et est décrite plus loin dans les descriptions de fonction individuelles qui utilisent cette structure.

Le membre lpszContext s’applique aux espaces de noms hiérarchiques et spécifie le point de départ d’une requête ou de l’emplacement dans la hiérarchie où réside le service. Les règles générales sont les suivantes :

  • Une valeur de NULL , vide ( » « ) démarre la recherche dans le contexte par défaut.
  • La valeur « \ » démarre la recherche en haut de l’espace de noms.
  • Toute autre valeur démarre la recherche au point désigné.

Les fournisseurs qui ne prennent pas en charge l’isolement peuvent retourner une erreur si quelque chose d’autre que « » ou « \ » est spécifié. Les fournisseurs qui prennent en charge l’isolement limité, tels que les groupes, doivent accepter « », « \ » ou un point désigné. Les contextes sont spécifiques à l’espace de noms. Si le membre dwNameSpace est NS_ALL, seul « » ou « \ » doit être passé comme contexte, car ceux-ci sont reconnus par tous les espaces de noms.

Le membre lpszQueryString est utilisé pour fournir des informations de requête supplémentaires spécifiques à l’espace de noms, telles qu’une chaîne décrivant un nom de protocole de transport et de service connu, comme dans « FTP/TCP ».

La structure AFPROTOCOLS référencée par le membre lpafpProtocols est utilisée uniquement à des fins de requête et fournit une liste de protocoles pour limiter la requête. Ces protocoles sont représentés sous forme de paires (famille d’adresses, protocole), car les valeurs de protocole ont uniquement une signification dans le contexte d’une famille d’adresses.

Le tableau de la structure CSADDR_INFO référencée par le membre lpcsaBuffer contient toutes les informations nécessaires pour qu’un service utilise pour établir une écoute, ou pour qu’un client utilise pour établir une connexion au service. Les membres LocalAddr et RemoteAddr contiennent directement une structure de SOCKET_ADDRESS.

Un service crée un socket en appelant lede socketou fonction WSASocket à l’aide du tuple de LocalAddr.lpSockaddr->sa_family, iSocketTypeet iProtocol en tant que paramètres. Un service lie le socket à une adresse locale en appelant la fonction lier à l’aide de LocalAddr.lpSockaddr et LocalAddr.lpSockaddrLength en tant que paramètres.

Un client crée son socket en appelant la fonctionde socketou WSASocket à l’aide du tuple de LocalAddr.lpSockaddr->sa_family, iSocketTypeet iProtocol en tant que paramètres. Un client utilise la combinaison de RemoteAddr.lpSockaddr et RemoteAddr.lpSockaddrLength en tant que paramètres lors de l’établissement d’une connexion distante à l’aide de lade connexion, ConnectExou fonction WSAConnect.

Structures de données de classe de service

Lorsqu’une nouvelle classe de service est installée, une structureWSASERVICECLASSINFOdoit être préparée et fournie. Cette structure se compose également de sous-structures qui contiennent une série de membres qui s’appliquent à des espaces de noms spécifiques. Une structure de données d’informations de classe est la suivante :

architecture des structures de données de classe de service

Pour chaque classe de service, il existe une seule structure WSASERVICECLASSINFO. Dans la structure WSASERVICECLASSINFO, l’identificateur unique de la classe de service est contenu dans le membre lpServiceClassId et une chaîne d’affichage associée est référencée par le membre lpServiceClassName. Il s’agit de la chaîne retournée par la fonction WSAGetServiceClassNameByClassId.

Le membre lpClassInfos dans la structure WSASERVICECLASSINFO fait référence à un tableau de structures WSANSCLASSINFO, chacune fournissant un membre nommé et typé qui s’applique à un espace de noms spécifié. Voici des exemples de valeurs pour le membre lpszName : « SapId », « TcpPort », « UdpPort », etc. Ces chaînes sont généralement spécifiques à l’espace de noms identifié dans le membre dwNameSpace. Les valeurs classiques du membre dwValueType peuvent être REG_DWORD, REG_SZ, etc. Le membre dwValueSize indique la longueur de l’élément de données pointé par lpValue.

La collection complète de données représentées dans une structure WSASERVICECLASSINFO est fournie à chaque fournisseur d’espaces de noms lorsque la fonction WSAInstallServiceClass est appelée. Chaque fournisseur d’espaces de noms individuel passe ensuite en revue la liste des structures WSANSCLASSINFO et conserve les informations applicables à celui-ci.

AFPROTOCOLS

CSADDR_INFO

modèle de résolution de noms

Protocol-Independent résolution de noms

d’inscription et de résolution de noms

SOCKET_ADDRESS

résumé des fonctions de résolution de noms

WSAECOMPARATOR

WSAGetServiceClassNameByClassId

WSAInstallServiceClass

WSALookupServiceBegin

WSAQUERYSET

WSASERVICECLASSINFO