次の方法で共有


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

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

ミニポート フィルターResourceRequirements 定義されている場合、この関数は、ミニポート ドライバーがデバイスのリソース要件を変更できるようにします。 ミニポートStartDevice 定義されている場合、この関数はミニポート ドライバーが追加されたリソースを削除できるようにします。ミニポート フィルターResourceRequirements 関数を します。

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

構文

MINIPORT_PNP_IRP MiniportPnpIrp;

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

パラメーター

[in] MiniportAddDeviceContext

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

[in] Irp

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

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

戻り値

ミニポートPnpIrp は、次のいずれかの値を返します。

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

備考

ミニポート フィルターResourceRequirements 解説

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

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

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

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

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

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

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

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

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

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

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

NDIS は、ミニポートRemoveDevice 関数を呼び出す前に、NDIS ミニポート フィルターResourceRequirements 複数回呼び出すことができます。 ただし、NDIS 呼び出し ミニポート フィルターResourceRequirements 場合にのみ、デバイスが停止状態です。

NDIS は、IRQL = PASSIVE_LEVEL で ミニポート フィルターResourceRequirements 呼び出します。

ミニポート フィルターResourceRequirements の例

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

たとえば、"MyFilterResourceRequirements" という名前の ミニポート フィルターResourceRequirements 関数を定義するには、次のコード例に示すように 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の詳細については、「関数の動作に注釈を付ける」を参照してください。

ミニポートStartDevice の備考

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

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

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

NDIS は、IRQL = PASSIVE_LEVEL でミニポートStartDevice 呼び出します。

ミニポートStartDevice の例

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

たとえば、"MyStartDevice" という名前の ミニポートStartDevice 関数を定義するには、次のコード例に示すように 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 以降でサポートされています。
ターゲット プラットフォーム ウィンドウズ
ヘッダー ndis.h (Ndis.h を含む)
IRQL PASSIVE_LEVEL

関連項目

IO_RESOURCE_DESCRIPTOR

IRP_MN_FILTER_RESOURCE_REQUIREMENTS

IRP_MN_START_DEVICE

KAFFINITY

ミニポートAddDevice

ミニポート フィルターResourceRequirements

ミニポートInitializeEx

ミニポートRemoveDevice

ミニポートStartDevice

NdisAllocateMemoryWithTagPriority NDIS_MINIPORT_PNP_CHARACTERISTICS

NdisFreeMemory

NdisMConfigMSIXTableEntry