RpcNsBindingExportA 関数 (rpcnsi.h)

RpcNsBindingExport 関数は、サーバーに対して複数のバインド ハンドルと複数のオブジェクトを持つ name service-database エントリを確立します。

メモ この関数は、Windows Vista 以降のオペレーティング システムではサポートされていません。
 

構文

RPC_STATUS RpcNsBindingExportA(
  unsigned long      EntryNameSyntax,
  RPC_CSTR           EntryName,
  RPC_IF_HANDLE      IfSpec,
  RPC_BINDING_VECTOR *BindingVec,
  UUID_VECTOR        *ObjectUuidVec
);

パラメーター

EntryNameSyntax

EntryName の構文。

HKEY_LOCAL_MACHINE\Software\Microsoft\Rpc\NameService\DefaultSyntaxレジストリ 値エントリで 指定された構文を使用するには、RPC_C_NS_SYNTAX_DEFAULTの値を指定します。

EntryName

バインド ハンドルとオブジェクト UUID がエクスポートされるエントリ名へのポインター。 null または空の文字列を指定することはできません。 クライアントとサーバーの両方で同じエントリ名を使用する必要があります。

IfSpec

エクスポートするインターフェイスを指定するスタブ生成データ構造。 null 値は、エクスポートするバインド ハンドルがないことを示し (オブジェクト UUID のみがエクスポートされます)、 BindingVec は無視されます。

BindingVec

エクスポートするサーバー バインドへのポインター。 null 値は、エクスポートするバインド ハンドルがないことを示します (オブジェクト UUID のみがエクスポートされます)。

ObjectUuidVec

サーバーによって提供されるオブジェクト UUID のベクターへのポインター。 サーバー アプリケーションは、このベクターを構築します。 null 値は、エクスポートするオブジェクト UUID がないことを示します (バインド ハンドルのみがエクスポートされます)。

戻り値

説明
RPC_S_OK
呼び出しは成功しました。
RPC_S_NOTHING_TO_EXPORT
エクスポートするものは何もありませんでした。
RPC_S_INVALID_BINDING
バインド ハンドルが無効です。
RPC_S_WRONG_KIND_OF_BINDING
これは、操作のバインドの種類が間違っていました。
RPC_S_INVALID_NAME_SYNTAX
名前の構文が無効です。
RPC_S_UNSUPPORTED_NAME_SYNTAX
名前の構文はサポートされていません。
RPC_S_INCOMPLETE_NAME
名前が不完全です。
RPC_S_NO_NS_PRIVILEGE
名前サービス操作に対する特権がありません。
RPC_S_NAME_SERVICE_UNAVAILABLE
名前サービスを利用できません。
 
メモ 有効なエラー コードの一覧については、「 RPC 戻り値」を参照してください。
 

解説

RpcNsBindingExport 関数を使用すると、サーバー アプリケーションは、任意のクライアント アプリケーションで使用するために、ネーム サービス データベース内のインターフェイスをパブリックに提供できます。

Windows 2000 で有効な RPC ランタイム環境では、Active Directory を名前サービス データベースとして使用します。 つまり、承認されたエクスポートされたエントリはネーム サービスに保持され、再起動後も表示されます。 承認されていないエクスポートは保持されません。 承認とAccess Controlリストの詳細については、プラットフォーム ソフトウェア開発キット (SDK) の「セキュリティ」セクションの「Access Control」を参照してください。

インターフェイスをエクスポートするために、サーバー アプリケーションはインターフェイスを使用 して RpcNsBindingExport ルーチンを 呼び出し、サーバー バインドはクライアントがサーバーへのアクセスに使用できる処理を処理します。 また、サーバー アプリケーションは RpcNsBindingExport 関数を 呼び出して、提供するリソースのオブジェクト UUID (存在する場合) をネーム サービス データベースにパブリックに提供します。

サーバーは 、RpcNsBindingExport への 1 回の呼び出しでインターフェイスとオブジェクトをエクスポートすることも、個別にエクスポートすることもできます。 EntryName で指定された名前サービス データベース エントリが存在しない場合、 RpcNsBindingExport はそれを作成しようとします。 この場合、サーバー アプリケーションにはエントリを作成する権限が必要です。RpcNsBindingExport の呼び出しに加えて、RpcServerUseAllProtseqs または RpcServerUseProtseq 関数を呼び出したサーバーは、RpcEpRegister または RpcEpRegisterNoReplace を呼び出してローカル エンドポイント マップ データベースに登録する必要があります。

サーバーは、そのインターフェイスをネーム サービス データベースにエクスポートする必要はありません。 サーバーがエクスポートしない場合、サーバーのバインド情報がプライベートに認識されているクライアントのみが、そのインターフェイスにアクセスできます。 たとえば、文字列バインディングを構築するために必要な情報を持つクライアントは 、RpcBindingFromStringBinding を呼び出して、サーバーへのリモート プロシージャ 呼び出しを行うバインド ハンドルを作成できます。

RpcNsBindingExport を呼び出す前に、サーバーで次の操作を行う必要があります。

RpcServerInqBindings 関数から返されるベクターは、RpcNsBindingExportBinding パラメーターになります。 バインドがエクスポートされないようにするには、選択したベクター要素を null 値に設定します。

サーバーが同じネーム サービス データベース エントリに複数回エクスポートする場合、 RpcNsBindingExport に対する 2 回目以降の呼び出しでは、そのデータがサーバー エントリに既に含まれているバインディング情報と異なる場合に、バインド情報とオブジェクト UUID が追加されます。 既存のデータはエントリから削除されません。

ネーム サービス データベースからバインド ハンドルとオブジェクト UUID を削除するために、サーバー アプリケーションは RpcNsBindingUnexport 関数を 呼び出します。

サーバー エントリには、少なくとも 1 つのバインド ハンドルが存在する必要があります。 その結果、UUID のみを既存のエントリにエクスポートしても効果はなく、すべてのバインド ハンドルのエクスポートを解除すると、エントリが削除されます。

注意

rpcnsi.h ヘッダーは、RPCNsBindingExport をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

   
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー rpcnsi.h (Rpc.h を含む)
Library Rpcns4.lib
[DLL] Rpcns4.dll

関連項目

RpcBindingFromStringBinding

RpcEpRegister

RpcEpRegisterNoReplace

RpcNsBindingUnexport

RpcServerInqBindings

RpcServerUseAllProtseqs

RpcServerUseAllProtseqsIf

RpcServerUseProtseq

RpcServerUseProtseqEp

RpcServerUseProtseqIf