Win32 API 日本語リファレンス
ホーム › Networking.WinSock › LPNSPV2SETSERVICEEX

LPNSPV2SETSERVICEEX

コールバック

シグネチャ

void LPNSPV2SETSERVICEEX(
    HANDLE hAsyncCall,
    GUID* lpProviderId,
    WSAQUERYSET2W* lpqsRegInfo,
    WSAESETSERVICEOP essOperation,
    DWORD dwControlFlags,
    void* lpvClientSessionArg
);

パラメーター

フィールド型説明
hAsyncCallHANDLE非同期呼び出しのために使用される、直前の NSPv2LookupServiceBegin の呼び出しから返されたハンドルです。
lpProviderIdGUID*名前またはサービスが登録される特定の名前空間プロバイダーの GUID へのポインターです。
lpqsRegInfoWSAQUERYSET2W*登録時に更新されるプロパティ情報です。
essOperationWSAESETSERVICEOP

要求する操作の種類です。

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

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

要求する操作を制御するフラグのセットです。

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

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

この値が設定されている場合、処理は指定されたアドレスのセットに対してのみ実行されます。登録操作は既存のアドレスを無効化せず、登録解除操作は指定されたアドレスのセットのみを無効化します。

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

lpvClientSessionArgvoid*クライアントセッションへのポインターです。

公式ドキュメント

NSPv2SetServiceEx 関数は、名前空間サービスプロバイダーバージョン2 (NSPv2) プロバイダーの名前空間内で、名前またはサービスインスタンスを登録または登録解除します。

戻り値

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

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

解説(Remarks)

NSPv2SetServiceEx 関数は、Windows Vista 以降で利用できる名前空間サービスプロバイダーバージョン2 (NSPv2) アーキテクチャの一部として使用されます。

Windows Vista および Windows Server 2008 では、NSPv2SetServiceEx 関数は NS_EMAIL 名前空間プロバイダーに対する操作にのみ使用できます。

NSPv2Startup 関数は、新しいクライアントプロセスが名前空間プロバイダーの使用を開始するたびに呼び出されます。プロバイダーは、ppvClientSessionArg パラメーターが指すクライアントセッション引数を使用して、このセッションに関する情報を格納できます。このクライアントセッション引数は、lpvClientSessionArg パラメーターで NSPv2SetServiceEx 関数に渡すことができます。

NSPv2SetServiceEx 関数は省略可能であり、NSPv2 プロバイダーの要件に依存します。NSPv2SetServiceEx 関数を実装しない場合、NSPv2 の関数ポインターは常に NO_ERROR を返すスタブ関数を指すようにできます。

次の表に、essOperation パラメーターと dwControlFlags パラメーターの値の組み合わせを示します。

essOperation dwControlFlags サービスが既に存在する場合 サービスが存在しない場合
**RNRSERVICE_REGISTER** なし オブジェクトを上書きします。指定されたアドレスのみを使用します。オブジェクトは REGISTERED になります。 新しいオブジェクトを作成します。指定されたアドレスのみを使用します。オブジェクトは REGISTERED になります。
**RNRSERVICE_REGISTER** **SERVICE_MULTIPLE** オブジェクトを更新します。既存のセットに新しいアドレスを追加します。オブジェクトは REGISTERED になります。 新しいオブジェクトを作成します。指定されたすべてのアドレスを使用します。オブジェクトは REGISTERED になります。
**RNRSERVICE_DEREGISTER** なし すべてのアドレスを削除しますが、名前空間からオブジェクトは削除しません。オブジェクトは DEREGISTERED になります。 WSASERVICE_NOT_FOUND
**RNRSERVICE_DEREGISTER** **SERVICE_MULTIPLE** オブジェクトを更新します。指定されたアドレスのみを削除します。アドレスが 1 つも存在しなくなった場合にのみ、オブジェクトを DEREGISTERED としてマークします。名前空間からは削除しません。 WSASERVICE_NOT_FOUND
**RNRSERVICE_DELETE** なし 名前空間からオブジェクトを削除します。 WSASERVICE_NOT_FOUND
**RNRSERVICE_DELETE** **SERVICE_MULTIPLE** 指定されたアドレスのみを削除します。アドレスが残っていない場合にのみ、名前空間からオブジェクトを削除します。 WSASERVICE_NOT_FOUND

dwControlFlags パラメーターに SERVICE_MULTIPLE を設定すると、アプリケーションはアドレスを個別に管理できるようになります。これは、アプリケーションがプロトコルを個別に管理する必要がある場合や、サービスが複数のコンピューター上に存在する場合に役立ちます。たとえば、サービスが複数のプロトコルを使用しているとき、一方のリッスンソケットが中断しても、他のソケットは動作を継続することがあります。この例では、サービスは他のアドレスに影響を与えることなく、中断したアドレスを登録解除できます。

SERVICE_MULTIPLE を使用する場合、アプリケーションは古いアドレスをオブジェクト内に残してはなりません。これは、アプリケーションが RNRSERVICE_DEREGISTER 要求を発行せずに中断した場合に発生する可能性があります。サービスは登録時に、自身のアドレスを保存しておく必要があります。次回の呼び出しでは、サービスは新しいアドレスを登録する前に、これらの古いアドレスを明示的に登録解除する必要があります。

NSPv2SetServiceEx 関数を実装しない場合、その関数への呼び出しは WSAEOPNOTSUPP を返すスタブ関数によってインターセプトする必要があります。 NSPV2_ROUTINE 構造体内の、実装されていない NSPv2SetServiceEx 関数に対する NSPv2 の関数ポインターは、そのスタブ関数を指す必要があります。

サービスのプロパティ

次の表に、WSAQUERYSET2 のメンバー名と、サービスのプロパティデータがどのように表現されるかを示します。省略可能であり NSPv2 プロバイダーの要件に依存すると記載されているメンバーは、名前空間プロバイダーが使用しない場合に **NULL** ポインターを指定できます。
WSAQUERYSET2 のメンバー名 サービスプロパティの説明
**dwSize** sizeof(WSAQUERYSET2) を設定します。これはバージョン管理の仕組みです。
**lpszServiceInstanceName** サービスインスタンス名を格納する文字列です。
**lpVersion** サービスインスタンスのバージョン番号です。このメンバーは省略可能であり、NSPv2 サービスプロバイダーの要件に依存します。
**lpszComment** コメント文字列です。このメンバーは省略可能であり、NSPv2 サービスプロバイダーの要件に依存します。
**dwNameSpace** 名前空間識別子です。このメンバーは省略可能であり、NSPv2 サービスプロバイダーの要件に依存します。
**lpNSProviderId** プロバイダー識別子です。名前空間プロバイダーの識別子は lpProviderId パラメーターでも渡されることに注意してください。このメンバーは省略可能であり、NSPv2 サービスプロバイダーの要件に依存します。
**lpszContext** 階層型名前空間におけるクエリの開始位置です。このメンバーは省略可能であり、NSPv2 サービスプロバイダーの要件に依存します。
**dwNumberOfProtocols** プロトコル制約配列のエントリ数のサイズ (バイト単位) です。このメンバーはゼロでもかまいません。このメンバーは省略可能であり、NSPv2 サービスプロバイダーの要件に依存します。
**lpafpProtocols** AFPROTOCOLS 構造体の配列です。このメンバーは省略可能であり、NSPv2 サービスプロバイダーの要件に依存します。
**lpszQueryString** 一部の名前空間 (whois++ など) は、単純なテキスト文字列で表現される SQL のようなリッチなクエリをサポートします。このパラメーターは、その文字列を指定するために使用します。このメンバーは省略可能であり、NSPv2 サービスプロバイダーの要件に依存します。
**dwNumberOfCsAddrs** lpcsaBuffer が参照する CSADDR_INFO 構造体の配列内の要素数です。
**lpcsaBuffer** サービスがリッスンしているアドレスを格納する CSADDR_INFO 構造体の配列へのポインターです。
**dwOutputFlags** このメンバーは省略可能であり、NSPv2 サービスプロバイダーの要件に依存します。
**lpBlob** プロバイダー固有のエンティティへのポインターです。このメンバーは NS_EMAIL 名前空間では必須です。その他の NSPv2 サービスプロバイダーでは、その要件に応じて省略可能です。
**注意** CSADDR_INFO 構造体の **iProtocol** メンバーには、ワイルドカード値を示すマニフェスト定数 **IPROTOCOL_ANY** を指定してもかまいません。名前空間プロバイダーは、指定されたアドレスファミリーおよびソケットタイプに対して適切な値を代入する必要があります。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)