次の方法で共有


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

MiniportAddDevice 関数を使用すると、ミニポート ドライバーは追加されたデバイスのコンテキスト領域を確立できます。

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

構文

MINIPORT_ADD_DEVICE MiniportAddDevice;

NDIS_STATUS MiniportAddDevice(
  [in] NDIS_HANDLE NdisMiniportHandle,
  [in] NDIS_HANDLE MiniportDriverContext
)
{...}

パラメーター

[in] NdisMiniportHandle

プラグ アンド プレイ (PnP) マネージャーが追加するミニポート アダプターを識別する NDIS ハンドル。 NDIS では、このハンドルも に渡されます。 MiniportInitializeEx 関数。

[in] MiniportDriverContext

ドライバーが状態と構成情報を保持するドライバー割り当てコンテキスト領域へのハンドル。 ミニポート ドライバーは、このコンテキスト領域を に渡しました。 NdisMRegisterMiniportDriver 関数。

戻り値

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

リターン コード 説明
NDIS_STATUS_SUCCESS
ミニポート ドライバーは、デバイスの追加に必要なリソースを正常に割り当てた。
NDIS_STATUS_RESOURCES
ミニポート ドライバーは、必要なリソースを割り当てに失敗しました。
NDIS_STATUS_FAILURE

リソースが不足している以外の理由で、MiniportAddDevice が失敗しました。

 

MiniportAddDevice が失敗した場合、NDIS はミニポート アダプターを初期化するために MiniportInitializeEx 関数を呼び出しません。

注釈

MiniportAddDevice 関数は省略可能な関数です。 MSI-X をサポートするミニポート ドライバーでは、 でこの関数のエントリ ポイントを指定する必要があります。 NDIS_MINIPORT_PNP_CHARACTERISTICS 構造体。

MiniportAddDevice は、処理用のコンテキスト領域を割り当てることができます IRP_MN_FILTER_RESOURCE_REQUIREMENTS I/O 要求パケット (IRP) MiniportFilterResourceRequirements 関数ハンドル。 ミニポート ドライバーは、 を初期化してコンテキスト領域を指定します。 構造体NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES してから を呼び出します。 NdisMSetMiniportAttributes 関数。 NDIS は後で、このコンテキスト ハンドルを MiniportRemoveDevice に提供します。 MiniportFilterResourceRequirementsMiniportStartDeviceおよび MiniportInitializeEx 関数。 MiniportInitializeEx の場合、コンテキスト ハンドルは の MiniportAddDeviceContext メンバーに渡されます。MiniportInitParameters パラメーターが指す構造体をNDIS_MINIPORT_INIT_PARAMETERSします。

ミニポート ドライバーは、コンテキスト領域を割り当てた後、 ミニポートAddDevice 呼び出しに失敗した場合、 ドライバーは、ミニポートAddDevice から返す前に、コンテキスト領域を解放する必要があります。

ミニポート ドライバーは、NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES構造体の MiniportAddDeviceContext メンバーと 、NDIS_MINIPORT_INIT_PARAMETERS 構造体の MiniportAdapterContext メンバーに別のコンテキスト領域を使用 する 必要があります。 個別のコンテキスト領域を使用すると、コンテキスト領域の情報が再初期化されないことが保証されます。これは、ミニポート アダプターが停止して再初期化された場合に 、MiniportInitializeEx 関数で発生する可能性があります。

PnP マネージャーが NDIS にデバイスの削除を要求すると、NDIS は、MiniportRemoveDevice 関数を呼び出して 、MiniportAddDevice が実行した操作を元に戻します。

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

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

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

MINIPORT_ADD_DEVICE MyAddDevice;

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

_Use_decl_annotations_
NDIS_STATUS
 MyAddDevice(
    NDIS_HANDLE  NdisMiniportHandle,
    NDIS_HANDLE  MiniportDriverContext
    )
  {...}

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

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

要件

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

こちらもご覧ください

IRP_MN_FILTER_RESOURCE_REQUIREMENTS MiniportFilterResourceRequirements

MiniportInitializeEx

MiniportRemoveDevice

MiniportStartDevice

NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES

NDIS_MINIPORT_INIT_PARAMETERS

NDIS_MINIPORT_PNP_CHARACTERISTICS

NdisMRegisterMiniportDriver

NdisMSetMiniportAttributes