SPI のサービス クラス データ構造
新しいサービス クラスがインストールされている場合は、WSASERVICECLASSINFO構造体を準備して指定する必要があります。 この構造体は、特定の名前空間に適用される一連のパラメーターを含むサブ構造体でも構成されます。
各サービス クラスには、WSASERVICECLASSINFO構造体1 つがあります。 WSASERVICECLASSINFO 構造体内では、サービス クラスの一意識別子は lpServiceClassId に含まれており、関連付けられた表示文字列は lpServiceClassName 参照されます。
WSASERVICECLASSINFO 構造体の lpClassInfos メンバーは、WSANSCLASSINFO 構造体の配列を参照します。各構造体は、指定された名前空間に適用される名前付きおよび型指定されたパラメーターを提供します。 lpszName メンバーの値の例としては、SAPID、TCPPORT、UDPPORT などがあります。これらの文字列は、通常、dwNameSpaceで識別される名前空間に固有です。 dwValueType の一般的な値は、REG_DWORD、REG_SZなどです。dwValueSize メンバーは、lpValue によって指データ項目の長さを示します。
WSASERVICECLASSINFO 構造体で表されるデータのコレクション全体が、NSPInstallServiceClassを介して各名前空間プロバイダーに提供されます。 その後、各名前空間プロバイダーは、WSANSCLASSINFO 構造体の一覧を参照し、それに適用できる情報を保持します。 このアーキテクチャでは、すべての名前空間のすべてのサービス クラス スキーマ情報を保持する特別な名前空間プロバイダーの将来の存在も想定しています。 Ws2_32.dll は、クエリを開始するために NSPLookupServiceBeginが呼び出されたときに名前空間プロバイダーに提供するために必要な WSASERVICECLASSINFO データを取得するために、このプロバイダーにクエリを実行し、NSPSetService呼び出してサービスを登録します。 名前空間プロバイダーは、当面この機能に依存しないでください。代わりに、必要なサービス クラス スキーマ情報を取得するためのプロバイダー固有の手段を用意する必要があります。 すべての名前空間のすべてのサービス クラス スキーマを格納するプロバイダーがない場合、Ws2_32.dll では、NSPGetServiceClassInfo を使用して、個々の名前空間プロバイダーからそのような情報を取得します。