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 によって使用されるハンドル。 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を返し、クライアント モジュールがそのバインド コンテキストにメモリを動的に割り当てた場合、クライアント モジュールは、NMR がクライアント モジュールを呼び出すときに、その割り当てられたメモリを解放する必要がありますクライアント モジュールとプロバイダー モジュールが互いにデタッチされた後の ClientCleanupBindingContext コールバック関数。

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

要件

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

こちらもご覧ください

ClientAttachProvider

ClientCleanupBindingContext

ProviderAttachClient