ホスト スタックは、ミニポート ドライバーの NIC またはオフロード ターゲットの TCP オフロード機能を取得するOID_TCP_TASK_OFFLOAD OID を照会します。 NIC またはオフロード ターゲットがサポートするオフロード機能を決定した後、ホスト スタックは、報告された機能の 1 つ以上を有効にするようにこの OID を設定します。 ホスト スタックでは、OID_TCP_TASK_OFFLOADを設定することで、NIC またはオフロード ターゲットの TCP オフロード機能をすべて無効にすることもできます。 特定の NIC の TCP オフロード機能を有効にできるのは、一度に 1 つのプロトコルだけです。
オフロード機能のクエリ
ホスト スタッククエリがOID_TCP_TASK_OFFLOADされると、InformationBufferNDIS_TASK_OFFLOAD_HEADER 構造体に格納されます。 この構造体は、次を指定します。
- ホスト スタックでサポートされているオフロード バージョン。
- ホスト スタックによって処理される送受信パケットのカプセル化形式。
- このようなパケット内のカプセル化ヘッダーのサイズ。
この情報を使用すると、ミニポート ドライバーまたはその NIC は、オフロード タスクを実行するための前提条件である送信パケットの最初の IP ヘッダーの先頭を見つけることができます。 オフロード ターゲットは、受信パケットを処理するためのカプセル化形式を認識している必要があります。 OID_TCP_TASK_OFFLOADのクエリに応答して、ミニポート ドライバーまたはオフロード ターゲットは、InformationBufferで、NDIS_TASK_OFFLOAD_HEADER構造体の直後に 1 つ以上の NDIS_TASK_OFFLOAD 構造体が返されます。 各NDIS_TASK_OFFLOAD構造体は、ミニポート ドライバーの NIC またはオフロード ターゲットによってサポートされるオフロード機能について説明します。 ミニポート ドライバーの NIC またはオフロード ターゲットが特定のオフロード機能の複数のバージョンをサポートしている場合は、バージョンごとに 1 つのNDIS_TASK_OFFLOAD構造体を返す必要があります。
各NDIS_TASK_OFFLOAD構造体には、構造体が適用される特定のオフロード機能を指定する Task メンバーがあります。 各NDIS_TASK_OFFLOAD構造体には、指定したオフロード機能に関連する情報を含む TaskBuffer もあります。 TaskBuffer の情報は、次のいずれかの構造体として書式設定されます。
-
NDIS_TASK_TCP_IP_CHECKSUM
チェックサム オフロード機能を指定します。 -
NDIS_TASK_IPSEC
インターネット プロトコル セキュリティ (IPsec) オフロード機能を指定します。 -
NDIS_TASK_TCP_LARGE_SEND
大きな TCP パケット セグメント化機能を指定します。 -
NDIS_TASK_TCP_CONNECTION_OFFLOAD
TCP のチムニー オフロード機能を指定します。 NDIS_TASK_TCP_CONNECTION_OFFLOADの詳細については、「TCP Offload Offload」を参照してください。
手記
中間ドライバーがパケットに対して TCP オフロード関数を実行できないように、基になるミニポート ドライバーに転送するパケットの内容を変更する場合、中間ドライバーは、基になるミニポート ドライバーまたはオフロード ターゲットに OID 要求を渡す代わりに、NDIS_STATUS_NOT_SUPPORTEDの状態でOID_TCP_TASK_OFFLOADクエリに応答する必要があります。
オフロード機能の有効化
NIC またはオフロード ターゲットのオフロード機能に対してクエリを実行した後、ホスト スタックは、OID_TCP_TASK_OFFLOADを設定することで、これらの機能の 1 つ以上を有効にします。 OID_TCP_TASK_OFFLOADを設定すると、ホスト スタックは、InformationBufferで、NDIS_TASK_OFFLOAD_HEADER構造体の直後に、ホスト スタックが有効にしている各オフロード機能のNDIS_TASK_OFFLOAD構造を提供します。
各NDIS_TASK_OFFLOAD構造体の タスク は、ホスト スタックが有効にしているオフロード機能を示します。 ホスト スタックでは、各NDIS_TASK_OFFLOAD構造体の TaskBuffer 内の構造体のメンバーを設定することで、特定のオフロード機能の特定の側面も有効にします。
オフロード機能の変更
NIC またはオフロード ターゲットに対して有効になっているオフロード機能を変更するには、ホスト スタックがOID_TCP_TASK_OFFLOAD設定します。 ミニポート ドライバーまたはオフロード ターゲットは、OID_TCP_TASK_OFFLOADの最新のセットで指定されたオフロード機能のみを有効にする必要があります。 ミニポート ドライバーまたはオフロード ターゲットは、他のすべてのオフロード機能を無効にする必要があります。 特定の TCP チムニー オフロード機能を無効にする前に、ホスト スタックは、その機能を使用するオフロードされた TCP 接続のオフロードを終了することに注意してください。
オフロード ターゲットは、一時停止または再開オフロード表示を使用して、報告された TCP オフロード機能を変更できます。
- オフロード ターゲットは、NdisMIndicateStatusEx 関数を呼び出して、NDIS_STATUS_INDICATION->StatusCode メンバーをNDIS_STATUS_OFFLOAD_PAUSEに設定することで一時停止を示します。
- オフロード ターゲットは、NDIS_STATUS_INDICATION->StatusCode メンバーをNDIS_STATUS_OFFLOAD_RESUMEに設定して、NdisMIndicateStatusEx 関数を呼び出すことによって再開を示します。
オフロード ターゲットがオフロード状態オブジェクトの再開をホスト スタックに要求した後、ホスト スタック クエリは再びOID_TCP_TASK_OFFLOADして、オフロード ターゲットの TCP オフロードの変更された機能を取得します。 詳細については、NDIS_STATUS_OFFLOAD_RESUMEを参照してください。
オフロード機能の無効化
NIC またはオフロード ターゲットでサポートされているすべてのオフロード機能を無効にするには、ホスト スタックがOID_TCP_TASK_OFFLOAD設定します。 InformationBufferでは、ホスト スタックは、この構造体の OffsetFirstTask メンバーを 0 に設定してNDIS_TASK_OFFLOAD_HEADER構造体を提供します。
必要条件
バージョン: Windows Vista 以降の ヘッダー: Ntddndis.h (Ndis.h を含む)