NDIS ドライバーのバージョン情報要件

バージョン情報を提供する NDIS 構造体にはヘッダーメンバーがあり、これはNDIS_OBJECT_HEADER 構造体として定義され、NDIS ドライバーはこのようなバージョン情報のサポートを提供する必要があります。

NDIS は、現在の NDIS のバージョン (つまり、コンピューターが実行されているオペレーティング システムのバージョンでサポートされている NDIS のバージョン) よりも高いか低い NDIS バージョンに対応するドライバーをサポートできます。 また、ドライバーの登録済みの NDIS バージョン (つまり、ドライバーが初期化中に報告したバージョン) は、ドライバーがサポートする最も高いバージョンよりも低い場合があります。 たとえば、NDIS 5.1 ドライバーまたは NDIS 6.1 ドライバーは、NDIS 6.0 を実行しているオペレーティング システムのバージョンで実行できます。 NDIS 5.1 ドライバーは、初期化中に単純に NDIS 5.1 ドライバーとして登録されます。 ただし、NDIS 6.1 ドライバーは、現在の NDIS のバージョンをチェックする必要があり、使用可能な最も高い NDIS のレベル (この例では NDIS 6.0) をサポートするドライバーとして登録する必要があります。 現在の NDIS バージョンを取得する方法の詳細については、「NDIS バージョンの取得」を参照してください。

注: ドライバーは、構造体の以降のリビジョンのすべての機能をサポートする必要はありません。 たとえば、ミニポート ドライバーは、バージョン 2 の構造体を作成し、バージョン 1 の構造体に適した値を指定できます。

バージョン情報を持つ構造体のメンバーにアクセスするには、NDIS ドライバーで次のプロセスを完了する必要があります。

  • 構造体内のメンバーにアクセスする前に、Header.Revision メンバーと Header.Size メンバーを調べます。

  • 以前のバージョンの構造体の場合 (つまり、ドライバーがサポートする NDIS バージョンに関連付けられている番号よりも低いリビジョン番号を持つ構造体) の場合:

    • ドライバーは、Header.Size 値が Header.Revision値に対して正しいことを確認する必要があります。 たとえば、NDIS_SIZEOF_Xxx_REVISION_1 の値は Xxx_REVISION_1 については正しいけれども Xxx_REVISION_2 には小さすぎます。
    • Header.Size 値は、NDIS_SIZEOF_Xxx_REVISION_Nn 以上 (Nn は、ドライバーが使用している構造体のリビジョン番号) でなければならず、ドライバーはそのリビジョンに適した構造体の情報を正しく処理する必要があります。
  • それ以降のバージョン構造体 (つまり、ドライバーがサポートする NDIS バージョンに関連付けられている番号よりも高いリビジョン番号を持つ構造体) の場合、ドライバーは、構造体の古いリビジョンであるかのように構造体を使用できます。 上位バージョンの構造は、常に古いバージョンと互換性があります。

  • ドライバーは、ドライバーの登録済みの NDIS バージョンの構造体の正しいリビジョンを使用する必要があります。 たとえば、NDIS 6.1 ドライバーは、NDIS_OFFLOAD 構造体でそのオフロード機能を報告する必要があり、そのために NDIS_OBJECT_HEADER 構造体のメンバーを設定して NDIS_OFFLOAD_REVISION_2 を示します。 ただし、ドライバーは、NDIS_OFFLOAD_REVISION_2 に含まれるすべての機能をサポートする必要はありません。

  • OID セット要求を正常に処理するドライバーは、OID セット要求から戻ると、NDIS_OID_REQUEST 構造体の SupportedRevision メンバーを設定する必要があります。 SupportedRevision メンバーは、ドライバーがサポートしたリビジョンの要求をイニシエーターに通知します。 たとえば、ミニポート ドライバーは、Xxx_REVISION_2 構造体を作成し、Xxx_REVISION_1 構造体に適した値を指定し、構造体の残りの部分をゼロで埋めることができます。 ミニポート ドライバーは、SupportedRevision メンバーの Xxx_REVISION_1 を報告します。 この場合、Xxx_REVISION_2 をサポートできるプロトコル ドライバーは、ミニポート ドライバーがサポートした Xxx_REVISION_1 情報を使用します。

  • 基になるドライバーによって正常に処理された情報を確認するには、OID 要求が返された後で OID 要求を発行する上位ドライバーが NDIS_OID_REQUEST 構造体の SupportedRevision メンバーの値を調べる必要があります。

NDIS バージョンの概要

NDIS バージョン情報の指定