次の方法で共有


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 列挙型の値のいずれかを指定できます。

意味
RNRSERVICE_REGISTER
0
サービスを登録します。 NetWare 環境内で使用される Service Advertising Protocol (SAP) 名前空間の場合、これは定期的なブロードキャストの送信を意味します。 これは、ドメイン ネーム システム (DNS) 名前空間の NOP です。 永続データ ストアの場合、これはアドレス情報を更新することを意味します。
RNRSERVICE_DEREGISTER
1
サービスの登録を解除します。 SAP 名前空間の場合、これは定期的なブロードキャストの送信を停止します。 これは DNS 名前空間の NOP です。 永続データ ストアの場合、これはアドレス情報を削除することを意味します。
RNRSERVICE_DELETE
2
動的な名前と永続的なスペースからサービスを削除します。 (SERVICE_MULTIPLE フラグを使用して) 複数の CSADDR_INFO 構造体で表されるサービスの場合、指定されたアドレスのみが削除され、サービスの登録時に指定された対応する **CSADDR_INFO** 構造体と完全に一致する必要があります。

[in] dwControlFlags

要求されたサービス操作を制御するフラグのセット。

このパラメーターに指定できる値は、 Winsock2.h ヘッダー ファイルで定義されています。

意味
SERVICE_MULTIPLE
0x00000001
操作のスコープを制御します。

この値が設定されている場合、アクションは指定されたアドレス セットに対してのみ実行されます。 登録操作では既存のアドレスは無効になりません。登録解除操作では、指定されたアドレスのセットのみが無効になります。

この値がない場合、サービス アドレスはグループとして管理されます。 レジスタまたは登録解除は、指定されたアドレス セットを追加する前に、既存のすべてのアドレスを無効にします。

戻り値

ルーチンが成功した場合、関数は NO_ERROR (ゼロ) を返す必要があります。 ルーチン 失敗し、 WSASetLastError を使用して適切なエラー コードを設定する必要がある場合は、SOCKET_ERROR (-1) を返す必要があります。

エラー コード 意味
WSAEACCES
呼び出し元ルーチンには、サービスをインストールするための十分な特権がありません。
WSA_NOT_ENOUGH_MEMORY
この操作を実行するのに十分なメモリがありません。
WSAEINVAL
このプロバイダーに対して、1 つ以上のパラメーターが無効であるか、不足しています。
WSAEOPNOTSUPP
この操作はサポートされていません。 名前空間プロバイダーがこの関数を実装していない場合、このエラーが返されます。
WSASERVICE_NOT_FOUND
サービスが不明です。 指定した名前空間にサービスが見つかりません。

注釈

次の表に、 essOperationdwControlFlags で使用できる値を示します。

操作 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** 省略可能。 プロバイダー固有のエンティティへのポインター。
 
**注** ワイルドカード値を示すマニフェスト定数 **IPROTOCOL_ANY** を含むには、 CSADDR_INFO 構造体の **iProtocol** メンバーを使用できます。 名前空間プロバイダーは、指定されたアドレス ファミリとソケットの種類に許容される値を置き換える必要があります。
 

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー ws2spi.h

こちらもご覧ください

CSADDR_INFO

WSAQUERYSET

WSASetLastError