Partager via


Structures de données de résolution de noms

Il existe plusieurs structures de données importantes qui sont largement utilisées dans 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

Au sein de la structure WSAQUERYSET , la plupart des membres 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 aux 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 comment effectuer la comparaison. Les choix sont COMP_EQUALS qui nécessite une correspondance exacte dans la version, 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 de lpNSProviderId dépend de la façon dont la structure est utilisée et est décrite plus en détail dans les descriptions des fonctions 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 l’emplacement dans la hiérarchie où réside le service. Les règles générales sont les suivantes :

  • La valeur NULL, vide (« ») démarre la recherche au niveau du 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 le confinement peuvent retourner une erreur si autre chose que « » ou « \ » est spécifié. Les fournisseurs qui prennent en charge le confinement 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, seuls « » ou « \ » doivent être passés en tant que contexte, car ils 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 à des fins de requête uniquement et fournit une liste de protocoles pour limiter la requête. Ces protocoles sont représentés en tant que paires (famille d’adresses, protocole), car les valeurs de protocole ont une signification uniquement 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 à un service à utiliser pour établir une écoute ou pour qu’un client utilise pour établir une connexion au service. Les membres LocalAddr et RemoteAddr contiennent tous deux directement une structure SOCKET_ADDRESS .

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

Un client crée son socket en appelant la fonction socket ou WSASocket à l’aide du tuple de LocalAddr.lpSockaddr-sa_family>, iSocketType et iProtocol en tant que paramètres. Un client utilise la combinaison de RemoteAddr.lpSockaddr et RemoteAddr.lpSockaddrLength comme paramètres lors de l’établissement d’une connexion à distance à l’aide de la fonction connect, ConnectEx ou WSAConnect .

Structures de données de la classe de service

Lorsqu’une nouvelle classe de service est installée, une structure WSASERVICECLASSINFO doit ê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 d’elles fournit un membre nommé et typé qui s’applique à un espace de noms spécifié. 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.

L’intégralité de la collection de données représentée 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 au crible la liste des structures WSANSCLASSINFO et conserve les informations qui lui sont applicables.

AFPROTOCOLS

CSADDR_INFO

Modèle de résolution de noms

Résolution de noms indépendante du protocole

Inscription et résolution de noms

SOCKET_ADDRESS

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

WSAECOMPARATOR

WSAGetServiceClassNameByClassId

WSAInstallServiceClass

WSALookupServiceBegin

WSAQUERYSET

WSASERVICECLASSINFO