次の方法で共有


NmrClientAttachProvider 関数 (netioddk.h)

NmrClientAttachProvider 関数は、クライアント モジュールをプロバイダー モジュールにアタッチします。

構文

NTSTATUS NmrClientAttachProvider(
  [in]  HANDLE                 NmrBindingHandle,
  [in]  __drv_aliasesMem PVOID ClientBindingContext,
  [in]  const VOID             *ClientDispatch,
  [out] PVOID                  *ProviderBindingContext,
  [out] const VOID             **ProviderDispatch
);

パラメーター

[in] NmrBindingHandle

クライアント モジュールとプロバイダー モジュールの間のバインドを表すために、NMR によって使用されるハンドル。 クライアント モジュールの ClientAttachProvider コールバック関数を呼び出すと、このハンドルがクライアント モジュールに渡されます。

[in] ClientBindingContext

クライアント モジュールとプロバイダー モジュールの間のバインディングの呼び出し元が指定したコンテキストへのポインター。 クライアント モジュールはこのコンテキストを使用して、バインディングの状態を追跡します。 クライアント モジュールのバインド コンテキストの内容は、プロバイダー モジュールに対して不透明です。 プロバイダー モジュールは、クライアント モジュールのバインド コンテキストを必要とするクライアント モジュールの NPI コールバック関数を呼び出すたびに、このポインターをクライアント モジュールに渡します。 クライアント モジュールは、プロバイダー モジュールがクライアント モジュールにアタッチされている限り、このコンテキストが有効であり、メモリ内に常駐していることを確認する必要があります。

[in] ClientDispatch

クライアント モジュールの NPI コールバック関数のディスパッチ テーブル 含む定数構造体へのポインター。 クライアント モジュールは、プロバイダー モジュールがクライアント モジュールに接続されている限り、この構造体が有効であり、メモリ内に常駐していることを確認する必要があります。 構造体の内容は NPI 固有です。 NPI でクライアント ディスパッチ テーブル構造が定義されていない場合、クライアント モジュールはこのパラメーターを NULL 設定する必要があります。

[out] ProviderBindingContext

クライアント モジュールとプロバイダー モジュールの間のバインディングに対するプロバイダー モジュールのコンテキストへのポインターを受け取る変数へのポインター。 プロバイダー モジュールでは、このコンテキストを使用して、バインディングの状態を追跡します。 プロバイダー モジュールのバインド コンテキストの内容は、クライアント モジュールに対して不透明です。 クライアント モジュールは、プロバイダー モジュールのバインディング コンテキストを必要とするプロバイダー モジュールの NPI 関数を呼び出すたびに、このポインターをプロバイダー モジュールに渡します。

[out] ProviderDispatch

ディスパッチ テーブルを含む構造体へのポインターを受け取る変数へのポインター
プロバイダー モジュールの NPI 関数を します。 構造体の内容は NPI 固有です。

戻り値

NmrClientAttachProvider 関数は、次のいずれかの NTSTATUS コードを返します。

リターン コード 形容
STATUS_SUCCESS
クライアント モジュールがプロバイダー モジュールに正常にアタッチされました。
STATUS_NOINTERFACE
プロバイダー モジュールがクライアント モジュールにアタッチされませんでした。
その他の状態コードの
エラーが発生しました。

備考

クライアント モジュールは、ClientAttachProvider コールバック関数から NmrClientAttachProvider 関数を呼び出して、プロバイダー モジュールにアタッチします。

クライアント モジュールが NmrClientAttachProvider 関数を呼び出すと、NMR はプロバイダー モジュールの ProviderAttachClient コールバック関数を呼び出して添付ファイル プロセスを完了します。 NmrClientAttachProvider 関数は、プロバイダー モジュールの ProviderAttachClient コールバック関数によって返される状態コードを返します。

NmrClientAttachProvider 関数がSTATUS_SUCCESSを返さない場合、クライアント モジュールは、バインディング コンテキスト構造に含まれるデータの必要なクリーンアップを実行する必要があります。 その後、クライアント モジュールは、その構造体のメモリを動的に割り当てた場合、そのバインディング コンテキスト構造体のメモリを解放する必要があります。

NmrClientAttachProvider 関数がSTATUS_SUCCESSを返し、クライアント モジュールがバインド コンテキストのメモリを動的に割り当てた場合、クライアント モジュールは、クライアント モジュールがクライアント モジュールを呼び出すときに、割り当てられたメモリを解放する必要があります。 ClientCleanupBindingContext、クライアント モジュールとプロバイダー モジュールが互いにデタッチされた後のコールバック関数です。

NmrClientAttachProvider 関数がSTATUS_SUCCESSを返す場合、クライアント モジュールは、ProviderBindingContext で返されたポインターを保存し、ProviderDispatch パラメーターを して、プロバイダー モジュールの NPI 関数を呼び出すことができるようにする必要があります。

必要条件

要件 価値
サポートされる最小クライアント Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。
ターゲット プラットフォーム デスクトップ
ヘッダー netioddk.h (Wsk.h を含む)
ライブラリ Netio.lib
IRQL PASSIVE_LEVEL

関連項目

ClientAttachProvider

ClientCleanupBindingContext

ProviderAttachClient