Freigeben über


Namensauflösungsdatenstrukturen

Es gibt mehrere wichtige Datenstrukturen, die in den Namensauflösungsfunktionen umfassend verwendet werden.

Die WSAQUERYSET--Struktur wird verwendet, um Abfragen für WSALookupServiceBeginzu bilden und zum Bereitstellen von Abfrageergebnissen für WSALookupServiceNext. Es ist eine komplexe Struktur, da sie Zeiger auf mehrere andere Strukturen enthält, von denen einige noch auf andere Strukturen verweisen. Die Beziehung zwischen der WSAQUERYSET Struktur und den Strukturen, auf die verwiesen wird, wird wie folgt veranschaulicht.

Beziehung zwischen wsaqueryset und den zugehörigen Strukturen

Innerhalb der WSAQUERYSET Struktur sind die meisten Member selbsterklärend, aber einige verdienen zusätzliche Erläuterungen. Das dwSize Member muss immer mit sizeof(WSAQUERYSET) ausgefüllt werden, da dies von Namespaceanbietern verwendet wird, um verschiedene Versionen der WSAQUERYSET- Struktur zu erkennen und anzupassen, die im Laufe der Zeit angezeigt werden kann.

Der dwOutputFlags Member wird von einem Namespaceanbieter verwendet, um zusätzliche Informationen zu Abfrageergebnissen bereitzustellen. Ausführliche Informationen finden Sie in der WSALookupServiceNext--Funktion.

Die WSAECOMPARATOR- Struktur, auf die vom lpversion Member verwiesen wird, wird sowohl für Abfrageeinschränkungen als auch für Ergebnisse verwendet. Bei Abfragen gibt der dwVersion Member die gewünschte Version des Diensts an. Das ecHow Member ist ein Aufzählungstyp, der angibt, wie der Vergleich durchgeführt werden kann. Die Auswahlmöglichkeiten sind COMP_EQUALS, für die eine genaue Übereinstimmung in der Version erforderlich ist, oder COMP_NOTLESS, die angibt, dass die Versionsnummer des Diensts nicht kleiner als der Wert des dwVersion Members ist.

Die Interpretation von dwNameSpace und lpNSProviderId hängt davon ab, wie die Struktur verwendet wird und weiter in den einzelnen Funktionsbeschreibungen beschrieben wird, die diese Struktur nutzen.

Der lpszContext Member gilt für hierarchische Namespaces und gibt den Ausgangspunkt einer Abfrage oder den Speicherort innerhalb der Hierarchie an, in der sich der Dienst befindet. Die allgemeinen Regeln sind:

  • Ein Wert von NULL, leer ("") startet die Suche im Standardkontext.
  • Ein Wert von "\" startet die Suche oben im Namespace.
  • Jeder andere Wert beginnt die Suche an dem angegebenen Punkt.

Anbieter, die die Eindämmung nicht unterstützen, können einen Fehler zurückgeben, wenn etwas anderes als "" oder "\" angegeben ist. Anbieter, die eingeschränkte Eindämmung unterstützen, z. B. Gruppen, sollten "", "\" oder einen bestimmten Punkt akzeptieren. Kontexte sind namespacespezifisch. Wenn der dwNameSpace Member NS_ALL ist, sollte nur "" oder "\" als Kontext übergeben werden, da diese von allen Namespaces erkannt werden.

Der lpszQueryString Member wird verwendet, um zusätzliche namespacespezifische Abfrageinformationen wie eine Zeichenfolge anzugeben, die einen bekannten Dienst- und Transportprotokollnamen beschreibt, wie in "FTP/TCP".

Die AFPROTOCOLS- Struktur, auf die von der lpafpProtocols Member verwiesen wird, wird nur für Abfragezwecke verwendet und stellt eine Liste von Protokollen bereit, um die Abfrage einzuschränken. Diese Protokolle werden als (Adressfamilie, Protokoll)-Paare dargestellt, da Protokollwerte nur im Kontext einer Adressfamilie Bedeutung haben.

Das Array der CSADDR_INFO Struktur, auf die vom lpcsaBuffer Member verwiesen wird, enthält alle Informationen, die für einen Dienst erforderlich sind, um eine Überwachung herzustellen, oder für einen Client, der zum Herstellen einer Verbindung mit dem Dienst verwendet werden soll. Die LocalAddr-- und RemoteAddr- Elemente enthalten beide direkt eine SOCKET_ADDRESS Struktur.

Ein Dienst erstellt einen Socket durch Aufrufen des Sockets oder WSASocket--Funktion mithilfe des Tupels von LocalAddr.lpSockaddr->sa_family, iSocketTypeund iProtocol als Parameter. Ein Dienst bindet den Socket an eine lokale Adresse, indem die Bindung sfunktion mithilfe LocalAddr.lpSockaddr- und LocalAddr.lpSockaddrLength- als Parameter aufgerufen wird.

Ein Client erstellt seinen Socket durch Aufrufen des Sockets oder WSASocket--Funktion mithilfe des Tupels von LocalAddr.lpSockaddr->sa_family, iSocketTypeund iProtocol als Parameter. Ein Client verwendet die Kombination aus RemoteAddr.lpSockaddr und RemoteAddr.lpSockaddrLength- als Parameter, wenn eine Remoteverbindung mithilfe der connect, ConnectEx-oder WSAConnect--Funktion hergestellt wird.

Dienstklassendatenstrukturen

Wenn eine neue Dienstklasse installiert wird, muss eine WSASERVICECLASSINFO- Struktur vorbereitet und bereitgestellt werden. Diese Struktur besteht auch aus Unterstrukturen, die eine Reihe von Membern enthalten, die für bestimmte Namespaces gelten. Eine Klasseninformationsdatenstruktur lautet wie folgt:

Architektur der Dienstklassendatenstrukturen

Für jede Dienstklasse gibt es eine einzelne WSASERVICECLASSINFO Struktur. Innerhalb der WSASERVICECLASSINFO Struktur ist der eindeutige Bezeichner der Dienstklasse im lpServiceClassId Member enthalten, und auf eine zugeordnete Anzeigezeichenfolge wird vom lpServiceClassName Member verwiesen. Dies ist die Zeichenfolge, die von der funktion WSAGetServiceClassNameByClassId zurückgegeben wird.

Der lpClassInfos Member im WSASERVICECLASSINFO Struktur verweist auf ein Array WSANSCLASSINFO Strukturen, von denen jedes ein benanntes und typiertes Element bereitstellt, das für einen angegebenen Namespace gilt. Beispiele für Werte für das lpszName Member sind: "SapId", "TcpPort", "UdpPort" usw. Diese Zeichenfolgen sind im Allgemeinen spezifisch für den Namespace, der im dwNameSpace Member identifiziert wird. Typische Werte für das dwValueType Member können REG_DWORD, REG_SZ usw. sein. Das dwValueSize Member gibt die Länge des Datenelements an, auf das durch lpValueverwiesen wird.

Die gesamte Sammlung von Daten, die in einer WSASERVICECLASSINFO Struktur dargestellt werden, wird jedem Namespaceanbieter bereitgestellt, wenn die WSAInstallServiceClass-Funktion aufgerufen wird. Jeder einzelne Namespaceanbieter durchforstet dann die Liste der WSANSCLASSINFO Strukturen und behält die entsprechenden Informationen bei.

AFPROTOCOLS

CSADDR_INFO

Namensauflösungsmodell

Protocol-Independent Namensauflösung

Registrierungs- und Namensauflösung

SOCKET_ADDRESS

Zusammenfassung der Namensauflösungsfunktionen

WSAECOMPARATOR-

WSAGetServiceClassNameByClassId

WSAInstallServiceClass-

WSALookupServiceBegin-

WSAQUERYSET-

WSASERVICECLASSINFO-