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 関数を呼び出すたびに、クライアント モジュールの ProviderAttachClient コールバック関数を呼び出します。
プロバイダー モジュールは、クライアント モジュールの登録データを調べることができます。 このデータは、ClientRegistrationInstance パラメーターが指す構造にあります。 プロバイダー モジュールは、このデータを使用して、クライアント モジュールにアタッチするかどうかを判断します。
- プロバイダー モジュールがクライアント モジュールにアタッチすると判断した場合、ProviderAttachClient コールバック関数は次の操作を行う必要があります。
- ClientBindingContext で渡されたポインターを保存し、ClientDispatch パラメーターを して、プロバイダー モジュールがクライアント モジュールの NPI 関数を呼び出すことができるようにします。
- NmrBindingHandle パラメーターに渡されたハンドルを保存します。 プロバイダー モジュールは、このハンドルをパラメーターとして NmrProviderDetachClientComplete クライアント モジュールからデタッチするときに機能します。
- ProviderBindingContext パラメーターを設定して、クライアント モジュールとプロバイダー モジュール間のバインドのプロバイダー モジュールのバインド コンテキスト構造を指すようにします。
- ProviderDispatch パラメーターを、NPI 関数のプロバイダー モジュールのディスパッチ テーブルを含む構造体 ポイントするように設定します。
- STATUS_SUCCESSを返します。
- プロバイダー モジュールがクライアント モジュールにアタッチしないと判断した場合、ProviderAttachClient コールバック関数はSTATUS_NOINTERFACEを返す必要があります。
このNMRは、IRQL = PASSIVE_LEVELでプロバイダーモジュールの ProviderAttachClient コールバック関数を呼び出します。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。 |
ターゲット プラットフォーム の | ウィンドウズ |
ヘッダー | netioddk.h (Wsk.h を含む) |
IRQL | PASSIVE_LEVEL |