Network Direct Kernel Provider Interface (NDKPI) の概要
ネットワーク ダイレクト カーネル プロバイダー インターフェイス (NDKPI) は、ネットワーク アダプター (RNIC とも呼ばれます) でカーネル モードのリモート ダイレクト メモリ アクセス (RDMA) のサポートを提供する IHV を許可する NDIS の拡張機能です。 アダプターの RDMA 機能を公開するには、IHV は NDKPI リファレンスで定義されている NDKPI インターフェイスを実装する必要があります。
NDKPI と RDMA
NIC ベンダーは、ソフトウェア、ファームウェア、ハードウェアの組み合わせとして RDMA を実装します。 ハードウェアとファームウェアの部分は、NDK/RDMA 機能を提供するネットワーク アダプターです。 この種類のアダプターは、RDMA 対応 NIC (RNIC) とも呼ばれます。 ソフトウェア部分は、NDKPI インターフェイスを実装する NDK 対応ミニポート ドライバーです。
RDMA は、Windows 実装では、ネットワーク ダイレクト (ND) と呼ばれます。 カーネル部分は、ネットワーク ダイレクト カーネル (NDK) と呼ばれます。
NDK プロバイダーは、NDK 対応ミニポート アダプターに割り当てられた IPv4 アドレスと IPv6 アドレスの両方を介したネットワーク ダイレクト接続をサポートする必要があります。
RDMA の詳細については、「RDMA でのバックグラウンド読み取り」を参照してください。
NDK プロバイダー
NDK プロバイダーは、NDKPI インターフェイスを実装するミニポート ドライバーです。
NDK プロバイダーは、PnP マネージャーによって読み込まれ、初期化されます。 詳細については、「NDK 対応ミニポート ドライバーの初期化」と「NDK ミニポート アダプターの初期化」を参照してください。
NDK プロバイダーが読み込まれて初期化されると、NDK コンシューマーからの要求を処理する準備が整います。 これらの要求は、プロバイダー関数の呼び出しとして到着します。
NDK コンシューマーからの要求を処理する場合、プロバイダーはコンシューマーの NDK コールバック関数を呼び出すことができます。 これらは、「NDKPI コンシューマー コールバック関数」に記載されています。
NDK プロバイダーは、NDKPI コンシューマー コールバック関数を除き、NDKPI リファレンスに記載されている NDKPI インターフェイスのすべての要素を実装する必要があります。
NDK コンシューマー
NDK コンシューマーは、SMB サーバーやクライアントなどのカーネル モードの Windows コンポーネントです。
注: このドキュメントでは、NDK コンシューマーを実装する方法については説明しません。 NDKPI コンシューマー デバイス ドライバー インターフェイス (DDI) は、独自の Windows 内部インターフェイスです。
NDK コンシューマーは、プロバイダーの NdkOpenAdapter (OPEN_NDK_ADAPTER_HANDLER) コールバック関数を呼び出してアダプター オブジェクトを作成し、NdkCloseAdapter (NDK_FN_CLOSE_OBJECT) を呼び出してそれを閉じます。 プロバイダーがアダプター オブジェクトを作成すると、コンシューマーは他のプロバイダー コールバック関数を呼び出して、追加の NDK オブジェクトを作成します。
NDK コンシューマーは、NDK プロバイダーによって呼び出される NDKPI コンシューマー コールバック関数を実装します。