次の方法で共有


RpcNsBindingExportA 関数 (rpcnsi.h)

RpcNsBindingExport 関数は、サーバーの複数のバインド ハンドルと複数のオブジェクトを持つネーム サービス-データベース エントリを確立します。

この機能は、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 を名前サービス データベースとして使用します。 つまり、承認されたエクスポートされたエントリはネーム サービスに保持され、再起動後も表示されます。 承認されていないエクスポートは保持されません。 承認とアクセス制御リストの詳細については、「プラットフォーム ソフトウェア開発キット (SDK) のセキュリティ」セクションの「アクセス制御の」を参照してください。

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

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

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

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

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

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

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

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

手記

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

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされる最小サーバー Windows 2000 Server [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー rpcnsi.h (Rpc.h を含む)
ライブラリ Rpcns4.lib
DLL Rpcns4.dll

関連項目

RpcBindingFromStringBinding

RpcEpRegister の

RpcEpRegisterNoReplace の

RpcNsBindingUnexport の

RpcServerInqBindings の

RpcServerUseAllProtseqs を する

RpcServerUseAllProtseqsIf

RpcServerUseProtseq の

RpcServerUseProtseqEp の

RpcServerUseProtseqIf を する