NPI_PROVIDER_ATTACH_CLIENT_FN コールバック関数 (netioddk.h)
プロバイダー モジュールの ProviderAttachClient コールバック関数は、プロバイダー モジュールをクライアント モジュールにアタッチします。
構文
NPI_PROVIDER_ATTACH_CLIENT_FN NpiProviderAttachClientFn;
NTSTATUS NpiProviderAttachClientFn(
[in] HANDLE NmrBindingHandle,
[in] PVOID ProviderContext,
[in] PNPI_REGISTRATION_INSTANCE ClientRegistrationInstance,
[in] PVOID ClientBindingContext,
[in] const VOID *ClientDispatch,
[out] PVOID *ProviderBindingContext,
[out] const VOID **ProviderDispatch
)
{...}
パラメーター
[in] NmrBindingHandle
クライアント モジュールとプロバイダー モジュールの間のバインドを表すために、NMR によって使用されるハンドル。
[in] ProviderContext
プロバイダー モジュールの登録コンテキストへのポインター。 プロバイダー モジュールは、 NmrRegisterProvider 関数を呼び出して自身を NMR に登録するときに、このポインターを NMR に渡します。
[in] ClientRegistrationInstance
へのポインター NPI_REGISTRATION_INSTANCE 構造体。 この構造体には、クライアント モジュールの登録データが含まれています。
[in] ClientBindingContext
クライアント モジュールとプロバイダー モジュールの間のバインドに対するクライアント モジュールのコンテキストへのポインター。 クライアント モジュールでは、このコンテキストを使用してバインディングの状態を追跡します。 クライアント モジュールのバインド コンテキストの内容は、プロバイダー モジュールに対して不透明です。 プロバイダー モジュールは、クライアント モジュールのバインド コンテキストを必要とするクライアント モジュールの NPI コールバック関数のいずれかを呼び出すたびに、このポインターをクライアント モジュールに渡します。
[in] ClientDispatch
クライアント モジュールの NPI コールバック関数のディスパッチ テーブルを含む定数構造体へのポインター。 構造体の内容は NPI 固有です。 NPI でクライアント ディスパッチ テーブル構造が定義されていない場合、このポインターは NULL になります。
[out] ProviderBindingContext
プロバイダー モジュールがクライアント モジュールとプロバイダー モジュールの間のバインドのコンテキストへのポインターを格納する変数へのポインター。 プロバイダー モジュールでは、このコンテキストを使用してバインディングの状態を追跡します。 プロバイダー モジュールのバインド コンテキストの内容は、クライアント モジュールに対して不透明です。 クライアント モジュールは、プロバイダー モジュールのバインド コンテキストを必要とするプロバイダー モジュールの NPI 関数のいずれかを呼び出すたびに、このポインターをプロバイダー モジュールに渡します。 プロバイダー モジュールは、クライアント モジュールがプロバイダー モジュールにアタッチされている限り、このコンテキストが有効であり、メモリ内に常駐していることを確認する必要があります。
[out] ProviderDispatch
プロバイダー モジュールが、プロバイダー モジュールの NPI 関数のディスパッチ テーブルを含む定数構造体へのポインターを格納する変数へのポインター。 プロバイダー モジュールは、クライアント モジュールがプロバイダー モジュールにアタッチされている限り、この構造体が有効であり、メモリ内に常駐していることを確認する必要があります。 構造体の内容は NPI 固有です。
戻り値
プロバイダー モジュールの ProviderAttachClient コールバック関数は、次のいずれかの NTSTATUS コードを返します。
リターン コード | 説明 |
---|---|
|
プロバイダー モジュールがクライアント モジュールに正常にアタッチされました。 |
|
プロバイダー モジュールがクライアント モジュールにアタッチされませんでした。 |
|
エラーが発生しました。 |
解説
クライアント モジュールがクライアント モジュールとプロバイダー モジュール間のバインドを表すハンドルを使用して NmrClientAttachProvider 関数を呼び出すたびに、NMR はプロバイダー モジュールの ProviderAttachClient コールバック関数を呼び出します。
プロバイダー モジュールは、クライアント モジュールの登録データを調べることができます。 このデータは、 ClientRegistrationInstance パラメーターによって指される構造にあります。 プロバイダー モジュールは、このデータを使用して、クライアント モジュールにアタッチするかどうかを決定します。
- プロバイダー モジュールがクライアント モジュールにアタッチすると判断した場合、 ProviderAttachClient コールバック関数は次の操作を行う必要があります。
- ClientBindingContext パラメーターと ClientDispatch パラメーターに渡されたポインターを保存して、プロバイダー モジュールがクライアント モジュールの NPI 関数を呼び出すことができるようにします。
- NmrBindingHandle パラメーターに渡されたハンドルを保存します。 プロバイダー モジュールは、このハンドルをパラメーターとして に渡します。クライアント モジュールからデタッチする場合の NmrProviderDetachClientComplete 関数。
- ProviderBindingContext パラメーターを設定して、クライアント モジュールとプロバイダー モジュール間のバインドのプロバイダー モジュールのバインド コンテキスト構造を指すようにします。
- プロバイダー モジュールの NPI 関数のディスパッチ テーブルを含む構造体を指す ProviderDispatch パラメーターを設定します。
- STATUS_SUCCESSを返します。
- プロバイダー モジュールがクライアント モジュールにアタッチしないと判断した場合、 ProviderAttachClient コールバック関数はSTATUS_NOINTERFACEを返す必要があります。
NMR は、IRQL = PASSIVE_LEVELでプロバイダー モジュールの ProviderAttachClient コールバック関数を呼び出します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。 |
対象プラットフォーム | Windows |
ヘッダー | netioddk.h (Wsk.h を含む) |
IRQL | PASSIVE_LEVEL |