Datenstrukturen der Dienstklasse 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: WSASERVICECLASSINFO-Struktur, Unterstrukturen und Parameter, 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 lpServiceClassId enthalten, und auf eine zugeordnete Anzeigezeichenfolge wird von lpServiceClassName verwiesen.

Das lpClassInfos-Element in der WSASERVICECLASSINFO-Struktur verweist auf ein Array von WSANSCLASSINFO-Strukturen , von denen jede einen benannten und typisierten Parameter bereitstellt, der für einen angegebenen Namespace gilt. Beispiele für Werte für das lpszName-Element 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-Element gibt die Länge des Datenelements an, auf das lpValue verweist.

Die gesamte Sammlung von Daten, die in einer WSASERVICECLASSINFO-Struktur dargestellt werden, wird jedem Namespaceanbieter über NSPInstallServiceClass bereitgestellt. Jeder einzelne Namespaceanbieter durchsiebt dann die Liste der WSANSCLASSINFO-Strukturen und behält die entsprechenden Informationen bei. Diese Architektur sieht auch die zukünftige Existenz eines speziellen Namespaceanbieters vor, der alle Informationen zum Dienstklassenschema für alle Namespaces beibehält. Die Ws2_32.dll würde diesen Anbieter abfragen, um die WSASERVICECLASSINFO-Daten abzurufen, die für die Bereitstellung an Namespaceanbieter 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 vorerst nicht auf diese Funktion verlassen und stattdessen über anbieterspezifische Mittel verfügen, um alle erforderlichen Informationen zum Dienstklassenschema abzurufen. Wenn kein Anbieter vorhanden ist, der das gesamte Dienstklassenschema für alle Namespaces speichert, verwendet der Ws2_32.dll NSPGetServiceClassInfo , um solche Informationen von jedem einzelnen Namespaceanbieter abzurufen.