MINIPORT_PNP_IRP コールバック関数 (ndis.h)

MiniportPnpIrp 関数を使用すると、ミニポート ドライバーは必要に応じてそのプラグ アンド プレイ (PnP) リソースを管理できます。 MiniportPnpIrp 自体は、ミニポート ドライバーによって直接定義されることはありません。 代わりに、 MiniportFilterResourceRequirements または MiniportStartDevice として定義されます。

MiniportFilterResourceRequirements として定義されている場合、この関数を使用すると、ミニポート ドライバーはデバイスのリソース要件を変更できます。 MiniportStartDevice として定義されている場合、この関数を使用すると、ミニポート ドライバーは、 に追加されたリソースを削除できます。 MiniportFilterResourceRequirements 関数。

メモこの関数は、MINIPORT_FILTER_RESOURCE_REQUIREMENTS型またはMINIPORT_START_DEVICE型のいずれかを使用して宣言する必要があります。 詳細については、次の例に関するセクションを参照してください。
 

構文

MINIPORT_PNP_IRP MiniportPnpIrp;

NDIS_STATUS MiniportPnpIrp(
  [in] NDIS_HANDLE MiniportAddDeviceContext,
  [in] PIRP Irp
)
{...}

パラメーター

[in] MiniportAddDeviceContext

ミニポート ドライバーが ミニポートAddDevice 関数で NDIS に登録されているドライバーによって割り当てられたコンテキスト領域のハンドル。

[in] Irp

この関数が MiniportFilterResourceRequirements として定義されている場合、このパラメーターはドライバーが処理する IRP_MN_FILTER_RESOURCE_REQUIREMENTS へのポインターです。

この関数が MiniportStartDevice として定義されている場合、このパラメーターは IRP_MN_START_DEVICE IRP へのポインターです。

戻り値

MiniportPnpIrp は、次のいずれかの値を返します。

リターン コード 説明
NDIS_STATUS_SUCCESS
ミニポート ドライバーは、デバイスの開始要求を正常に処理しました。
NDIS_STATUS_RESOURCES
ミニポート ドライバーは、リソースが少ないため、デバイスの開始要求を処理できませんでした。
NDIS_STATUS_FAILURE
リソースが不足している以外の理由で、MiniportFilterResourceRequirements が失敗しました。

注釈

MiniportFilterResourceRequirements 解説

MiniportFilterResourceRequirements 関数は省略可能な関数です。 ミニポート ドライバーは、MSI X をサポートし、次の少なくとも 1 つが当てはまる場合、この関数を登録する必要があります。
  • ドライバーには、各 MSI-X メッセージの割り込みアフィニティを変更する機能が必要です。
  • ドライバーは、 の行ベースの割り込みに登録されます。 MiniportInitializeEx 関数。
MiniportFilterResourceRequirements を登録するには、 でエントリ ポイントを指定します。 NDIS_MINIPORT_PNP_CHARACTERISTICS 構造体。

NDIS は、NDIS が を受け取 った後に MiniportFilterResourceRequirements 関数を呼び出します。 IRP_MN_FILTER_RESOURCE_REQUIREMENTSネットワーク インターフェイス カード (NIC) の IRP。 NDIS は、デバイス スタックの基になる関数ドライバーが IRP の処理を完了した後に 、MiniportFilterResourceRequirements を呼び出します。

ミニポート ドライバーは、MiniportAddDevice 関数がNDIS_STATUS_SUCCESSを返した直後に、MiniportFilterResourceRequirements からのIRP_MN_FILTER_RESOURCE_REQUIREMENTSを処理するように準備する必要があります。

ミニポート ドライバーは、MSI-X メッセージを記述する CmResourceTypeInterrupt 型のリソースごとにアフィニティ ポリシーを設定できます。 アフィニティ ポリシーが特定のプロセッサ セットを対象とすることを要求した場合、ミニポート ドライバーは、IO_RESOURCE_DESCRIPTOR構造体の Interrupt.TargetedProcessors メンバーに KAFFINITY マスクも設定します。

NDIS 6.1 以降のミニポート ドライバーでは、より多くのメッセージ割り込みリソースが必要な場合は、リソースの一覧にメッセージ割り込みリソースを追加できます。 オペレーティング システムがより多くのメッセージ割り込みリソースを提供できる場合、ミニポート アダプターは、開始時に追加されたメッセージ割り込みリソースを受け取ります。

リスト内の各メッセージ割り込みリソースには、リソース リスト内の順序に対応するメッセージ番号が割り当てられます。 メッセージには、0 からメッセージ割り込みリソースの合計数から 1 を引いた番号が付きます。

実行時に MSI-X テーブル エントリを CPU に割り当てるには、ミニポート ドライバーは を呼び出すことができます。 NdisMConfigMSIXTableEntry 関数。

ミニポート ドライバーは、メッセージ割り込みリソースである CmResourceTypeInterrupt 型のすべてのリソースを削除できます。 その後、ドライバーは 、MiniportInitializeEx 関数の行ベースの割り込みに登録できます。 ミニポート ドライバーがこれらのメッセージ割り込みリソースを削除しない場合、ドライバーが MiniportInitializeEx に行ベースの割り込みを登録しようとすると、オペレーティング システムは失敗します。

新しいリソース要件リストにメモリを割り当てるには、 NdisAllocateMemoryWithTagPriority 関数。 ミニポート ドライバーは、 NdisFreeMemory 関数を使用して、古いリソース要件リストのメモリを解放できます。 PnP マネージャーは、関連付けられている IRP が完了した後、ドライバーによって割り当てられたメモリを解放します。

ミニポート ドライバーは、 CmResourceTypeMemory や CmResourceTypePort リソースなどの他 リソースを変更しないでください。 ミニポート ドライバーは、リソースの一覧に新しいリソースを追加しないようにする必要があります。 ただし、ミニポート ドライバーは、より多くのメッセージ割り込みリソースを追加できます。 ミニポート ドライバーは、より多くのメッセージ割り込みリソースを追加する場合、ドライバーは 、ミニポートStartDevice 関数からそれらを削除することはできません。

ミニポート ドライバーが ミニポートフィルターResourceRequirements からNDIS_STATUS_RESOURCESまたはNDIS_STATUS_FAILUREを返す場合、NDIS は親バス ドライバーで指定されたリソース要件を使用します。

NDIS は、NDIS が MiniportRemoveDevice 関数を呼び出す前に、MiniportFilterResourceRequirements を複数回呼び出すことができます。 ただし、NDIS は、デバイスが停止状態の場合にのみ 、MiniportFilterResourceRequirements を呼び出します。

NDIS は、IRQL = PASSIVE_LEVEL で MiniportFilterResourceRequirements を呼び出します。

MiniportFilterResourceRequirements の例

MiniportFilterResourceRequirements 関数を定義するには、まず、定義する関数の種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーの関数型のセットが用意されています。 関数の種類を使用して関数を宣言すると、 ドライバーのコード分析静的ドライバー検証ツール (SDV)、およびその他の検証ツールでエラーが検出され、Windows オペレーティング システム用のドライバーを記述するための要件になります。

たとえば、" MyFilterResourceRequirements" という名前の MiniportFilterResourceRequirements 関数を定義するには、次のコード例に示すように 、MINIPORT_FILTER_RESOURCE_REQUIREMENTS 型を使用します。

MINIPORT_FILTER_RESOURCE_REQUIREMENTS MyFilterResourceRequirements;

次に、次のように関数を実装します。

_Use_decl_annotations_
NDIS_STATUS
 MyFilterResourceRequirements(
    NDIS_HANDLE  MiniportAddDeviceContext,
    PIRP  Irp
    )
  {...}

MINIPORT_FILTER_RESOURCE_REQUIREMENTS関数の種類は、Ndis.h ヘッダー ファイルで定義されています。 コード分析ツールを実行するときにエラーをより正確に識別するには、 Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のMINIPORT_FILTER_RESOURCE_REQUIREMENTS関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「NDIS ドライバーの関数 ロール型を使用して関数を宣言する」を参照してください。

Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。

MiniportStartDevice 解説

MiniportStartDevice は省略可能な関数です。 MSI-X をサポートするミニポート ドライバーでは、 でこの関数のエントリ ポイントを指定できます。 NDIS_MINIPORT_PNP_CHARACTERISTICS 構造体。 NDIS がデバイスを起動するプラグ アンド プレイ (PnP) マネージャーから要求を受け取ると、NDIS は、存在する場合は、MiniportStartDevice 関数を呼び出します。 ミニポート ドライバーが に新しいリソースを追加する場合 MiniportFilterResourceRequirements 関数は、リソースを削除する MiniportStartDevice 関数を提供する必要があります。

基になるバス ドライバーがリソースを認識できないようにミニポート ドライバーがリソースを変更する場合、ドライバーは、リソースを削除する MiniportStartDevice 関数を提供する必要があります。 基になるバス ドライバーは、ミニポート ドライバーが MiniportFilterResourceRequirements に追加されたリソースを認識しない場合、デバイスの開始要求に失敗する可能性があります。 ミニポート ドライバーがメッセージ割り込みリソースを追加する場合は、 それらを MiniportStartDevice から削除しないでください。

NDIS は、基になるドライバーに開始デバイス要求を転送する前に 、MiniportStartDevice を呼び出します。 基になるドライバーが正常に要求を完了した場合、NDIS はミニポート アダプターを初期化する MiniportInitializeEx 関数を呼び出します。

NDIS は IRQL = PASSIVE_LEVEL で MiniportStartDevice を呼び出します。

MiniportStartDevice の例

MiniportStartDevice 関数を定義するには、まず、定義する関数の種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーの関数型のセットが用意されています。 関数の種類を使用して関数を宣言すると、 ドライバーのコード分析静的ドライバー検証ツール (SDV)、およびその他の検証ツールでエラーが検出され、Windows オペレーティング システム用のドライバーを記述するための要件になります。

たとえば、"MyStartDevice" という名前の MiniportStartDevice 関数を定義するには、次のコード例に示すように 、MINIPORT_START_DEVICE 型を使用します。

MINIPORT_START_DEVICE MyStartDevice;

次に、次のように関数を実装します。

_Use_decl_annotations_
NDIS_STATUS
 MyStartDevice(
    NDIS_HANDLE  MiniportAddDeviceContext,
    PIRP  Irp
    )
  {...}

MINIPORT_START_DEVICE関数の種類は、Ndis.h ヘッダー ファイルで定義されています。 コード分析ツールを実行するときにエラーをより正確に識別するには、 Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のMINIPORT_START_DEVICE関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「NDIS ドライバーの関数 ロール型を使用して関数を宣言する」を参照してください。

Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。

要件

要件
サポートされている最小のクライアント NDIS 6.0 以降でサポートされています。
対象プラットフォーム Windows
ヘッダー ndis.h (Ndis.h を含む)
IRQL PASSIVE_LEVEL

こちらもご覧ください

IO_RESOURCE_DESCRIPTOR

IRP_MN_FILTER_RESOURCE_REQUIREMENTS

IRP_MN_START_DEVICE

KAFFINITY

MiniportAddDevice

MiniportFilterResourceRequirements

MiniportInitializeEx

MiniportRemoveDevice

MiniportStartDevice

NDIS_MINIPORT_PNP_CHARACTERISTICS NdisAllocateMemoryWithTagPriority

NdisFreeMemory

NdisMConfigMSIXTableEntry