Dienstklassendatenstrukturen im SPI

Wenn eine neue Dienstklasse installiert wird, muss eine WSASERVICECLASSINFO- Struktur vorbereitet und bereitgestellt werden. Diese Struktur besteht auch aus Unterstrukturen, die eine Reihe von Parametern enthalten, die für bestimmte Namespaces gelten.

Diagramm mit der WSASERVICECLASSINFO-Struktur, Unterstrukturen und Parametern, die für bestimmte Namespaces gelten.

Für jede Dienstklasse gibt es eine einzelne WSASERVICECLASSINFO Struktur. Innerhalb der WSASERVICECLASSINFO- Struktur ist der eindeutige Bezeichner der Dienstklasse in lpServiceClassIdenthalten, und auf eine zugeordnete Anzeigezeichenfolge wird von lpServiceClassNameverwiesen.

Der lpClassInfos Member im WSASERVICECLASSINFO Struktur verweist auf ein Array WSANSCLASSINFO Strukturen, von denen jeder einen benannten und typierten Parameter bereitstellt, der 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 in dwNameSpace-identifiziert wird. Typische Werte für dwValueType- 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 über NSPInstallServiceClassbereitgestellt. Jeder einzelne Namespaceanbieter durchforstet dann die Liste WSANSCLASSINFO Strukturen und speichert die entsprechenden Informationen. Diese Architektur sieht auch die zukünftige Existenz eines speziellen Namespaceanbieters vor, der alle Dienstklassenschemainformationen für alle Namespaces beibehalten würde. Der Ws2_32.dll würde diesen Anbieter abfragen, um die WSASERVICECLASSINFO Daten abzurufen, die zum Bereitstellen von Namespaceanbietern erforderlich sind, wenn NSPLookupServiceBegin aufgerufen wird, um eine Abfrage zu initiieren, und wenn NSPSetService- aufgerufen wird, um einen Dienst zu registrieren. Der Namespaceanbieter sollte sich zurzeit nicht auf diese Funktion verlassen und sollte stattdessen über eine anbieterspezifische Möglichkeit verfügen, alle erforderlichen Dienstklassenschemainformationen abzurufen. Wenn kein Anbieter vorhanden ist, der alle Dienstklassenschemas für alle Namespaces speichert, verwendet die Ws2_32.dll NSPGetServiceClassInfo-, um solche Informationen von jedem einzelnen Namespaceanbieter abzurufen.