LPNSPSETSERVICE コールバック関数 (ws2spi.h)
NSPSetService 関数は、名前空間内のサービス インスタンスを登録または登録解除します。
構文
LPNSPSETSERVICE Lpnspsetservice;
INT Lpnspsetservice(
[in] LPGUID lpProviderId,
[in] LPWSASERVICECLASSINFOW lpServiceClassInfo,
[in] LPWSAQUERYSETW lpqsRegInfo,
[in] WSAESETSERVICEOP essOperation,
[in] DWORD dwControlFlags
)
{...}
パラメーター
[in] lpProviderId
サービスが登録されている特定の名前空間プロバイダーの GUID へのポインター。
[in] lpServiceClassInfo
サービス クラスのスキーマ情報。
[in] lpqsRegInfo
登録時に更新されるプロパティ情報。
[in] essOperation
要求された操作の種類。
このパラメーターには、Winsock2.h ヘッダー ファイルで定義されている WSAESETSERVICEOP 列挙型の値のいずれかを指定できます。
値 | 意味 |
---|---|
|
サービスを登録します。 NetWare 環境内で使用される Service Advertising Protocol (SAP) 名前空間の場合、これは定期的なブロードキャストの送信を意味します。 これは、ドメイン ネーム システム (DNS) 名前空間の NOP です。 永続データ ストアの場合、これはアドレス情報を更新することを意味します。 |
|
サービスの登録を解除します。 SAP 名前空間の場合、これは定期的なブロードキャストの送信を停止します。 これは DNS 名前空間の NOP です。 永続データ ストアの場合、これはアドレス情報を削除することを意味します。 |
|
動的な名前と永続的なスペースからサービスを削除します。 (SERVICE_MULTIPLE フラグを使用して) 複数の CSADDR_INFO 構造体で表されるサービスの場合、指定されたアドレスのみが削除され、サービスの登録時に指定された対応する **CSADDR_INFO** 構造体と完全に一致する必要があります。 |
[in] dwControlFlags
要求されたサービス操作を制御するフラグのセット。
このパラメーターに指定できる値は、 Winsock2.h ヘッダー ファイルで定義されています。
戻り値
ルーチンが成功した場合、関数は NO_ERROR (ゼロ) を返す必要があります。 ルーチン が 失敗し、 WSASetLastError を使用して適切なエラー コードを設定する必要がある場合は、SOCKET_ERROR (-1) を返す必要があります。
エラー コード | 意味 |
---|---|
呼び出し元ルーチンには、サービスをインストールするための十分な特権がありません。 | |
この操作を実行するのに十分なメモリがありません。 | |
このプロバイダーに対して、1 つ以上のパラメーターが無効であるか、不足しています。 | |
この操作はサポートされていません。 名前空間プロバイダーがこの関数を実装していない場合、このエラーが返されます。 | |
サービスが不明です。 指定した名前空間にサービスが見つかりません。 |
注釈
次の表に、 essOperation と dwControlFlags で使用できる値を示します。
操作 | Flags | サービスは既に存在します | サービスが存在しない |
---|---|---|---|
**RNRSERVICE_REGISTER** | なし | オブジェクトを上書きします。 指定されたアドレスのみを使用します。 オブジェクトは REGISTERED です。 | 新しいオブジェクトを作成します。 指定されたアドレスのみを使用します。 オブジェクトは REGISTERED です。 |
**RNRSERVICE_REGISTER** | **SERVICE_MULTIPLE** | 更新 オブジェクト。 既存のセットに新しいアドレスを追加します。 オブジェクトは REGISTERED です。 | 新しいオブジェクトを作成します。 指定されたすべてのアドレスを使用します。 オブジェクトは REGISTERED です。 |
**RNRSERVICE_DEREGISTER** | なし | すべてのアドレスを削除しますが、名前空間からオブジェクトを削除することはありません。 オブジェクトは DEREGISTERED です。 | WSASERVICE_NOT_FOUND |
**RNRSERVICE_DEREGISTER** | **SERVICE_MULTIPLE** | 更新 オブジェクト。 指定されたアドレスのみを削除します。 アドレスが存在しない場合にのみ、オブジェクトを DEREGISTERED としてマークします。 名前空間から削除しません。 | WSASERVICE_NOT_FOUND |
**RNRSERVICE_DELETE** | なし | 名前空間からオブジェクトを削除します。 | WSASERVICE_NOT_FOUND |
**RNRSERVICE_DELETE** | **SERVICE_MULTIPLE** | 指定されたアドレスのみを削除します。 アドレスが残っていない場合にのみ、名前空間からオブジェクトを削除します。 | WSASERVICE_NOT_FOUND |
dwControlFlags パラメーターが SERVICE_MULTIPLE に設定されている場合、これにより、アプリケーションはアドレスを個別に管理できます。 これは、アプリケーションでプロトコルを個別に管理する必要がある場合や、サービスが複数のコンピューターに存在する場合に便利です。 たとえば、サービスで複数のプロトコルが使用されている場合、1 つのリッスン ソケットが中止される可能性がありますが、他のソケットは動作したままです。 この例では、サービスは、他のアドレスに影響を与えることなく、中止されたアドレスの登録を解除できます。
SERVICE_MULTIPLEを使用する場合、アプリケーションは古いアドレスを オブジェクトに残してはなりません。 これは、アプリケーションがRNRSERVICE_DEREGISTER要求を発行せずに中止した場合 に 発生する可能性があります。 サービスが登録するときは、そのアドレスを格納する必要があります。 次の呼び出しでは、サービスは新しいアドレスを登録する前に、これらの古いアドレスの登録を明示的に解除する必要があります。
サービスのプロパティ
次の表に 、WSAQUERYSET メンバー名の一覧と、サービス プロパティ データの表現方法を示します。 (省略可能) としてラベル付けされたメンバーは、null ポインターで指定できます。WSAQUERYSET メンバー名 | サービス プロパティの説明 |
---|---|
**Dwsize** | sizeof(WSAQUERYSET) に設定します。 これはバージョン管理メカニズムです。 |
**lpszServiceInstanceName** | 参照される文字列には、サービス インスタンス名が含まれています。 |
**lpServiceClassId** | このサービス クラスに対応する GUID。 |
**lpVersion** | 省略可能。 サービス インスタンスのバージョン番号を指定します。 |
**lpszComment** | 省略可能。 省略可能なコメント文字列。 |
**dwNameSpace** | この操作では無視されます。 |
**lpNSProviderId** | この操作では無視されます。 プロバイダー識別子は lpProviderId パラメーターに含まれています。 |
**lpszContext** | 省略可能。 階層型名前空間内のクエリの開始点。 |
**dwNumberOfProtocols** | この操作では無視されます。 |
**lpafpProtocols** | この操作では無視されます。 |
**pszQueryString** | この操作では無視されます。 |
**dwNumberOfCsAddrs** | lpcsaBuffer によって参照されるCSADDR_INFO構造体の配列内の要素の数。 |
**lpcsaBuffer** | サービスがリッスンしているアドレスを含む CSADDR_INFO 構造体の配列へのポインター。 |
**dwOutputFlags** | この操作では無視されます。 |
**lpBlob** | 省略可能。 プロバイダー固有のエンティティへのポインター。 |
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | ws2spi.h |