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 が呼び出されたとき、および NSPSetService が呼び出されてサービスを登録するときに、名前空間プロバイダーに提供するために必要な WSASERVICECLASSINFO データを取得するために、このプロバイダーに対してクエリを実行します。 名前空間プロバイダーは、当面この機能に依存しないようにし、代わりにプロバイダー固有の手段を使用して、必要なサービス クラス スキーマ情報を取得する必要があります。 すべての名前空間のすべてのサービス クラス スキーマを格納するプロバイダーがない場合、Ws2_32.dllは NSPGetServiceClassInfo を使用して、個々の名前空間プロバイダーからそのような情報を取得します。