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

NDIS は ProtocolNetPnPEvent 関数を呼び出して、ネットワーク プラグ アンド プレイ イベント、NDIS PnP イベント、または電源管理イベントをプロトコル ドライバーに示します。

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

構文

PROTOCOL_NET_PNP_EVENT ProtocolNetPnpEvent;

NDIS_STATUS ProtocolNetPnpEvent(
  [in] NDIS_HANDLE ProtocolBindingContext,
  [in] PNET_PNP_EVENT_NOTIFICATION NetPnPEventNotification
)
{...}

パラメーター

[in] ProtocolBindingContext

このドライバーがバインドごとの実行時状態情報を保持する、プロトコル ドライバーによって割り当てられたコンテキスト領域へのハンドル。 プロトコル ドライバーは、 NdisOpenAdapterEx 関数を呼び出したときに、このハンドルを提供しました。 NULLProtocolBindingContext で示される NetEventXxx イベントは、すべてのバインドに適用されます。 NetEventBindListNetEventBindsComplete は常に NULLProtocolBindingContext で示されます。 NetEventReconfigure は、指定した ProtocolBindingContext または NULLProtocolBindingContext を使用して示すことができます。

[in] NetPnPEventNotification

へのポインター NET_PNP_EVENT_NOTIFICATION NDIS がプロトコル ドライバーに示すプラグ アンド プレイ イベントまたは Power Management イベントを表す構造体です。

戻り値

ProtocolNetPnPEvent は、次のいずれかを返すことができます。

リターン コード 説明
NDIS_STATUS_SUCCESS
プロトコル ドライバーは、示されたネットワーク プラグ アンド プレイ イベント、NDIS PnP イベント、または電源管理イベントを正常に処理しました。 この状態コードの意味は、バッファー内の NetEvent コードによって異なります。NetPnPEventNET_PNP_EVENT_NOTIFICATION構造体:
NetEventSetPower
プロトコル ドライバーは、要求されたデバイスの電源状態へのデバイスの移行の準備に必要なドライバー固有のアクションを実行しました。
NetEventQueryPower
基になるアダプターは、要求されたデバイスの電源状態に移行できます。
NetEventQueryRemoveDevice
基になるアダプターを削除できます。
NetEventCancelRemoveDevice
プロトコル ドライバーは、基になるアダプターの取り消しの準備に必要なドライバー固有のアクションを実行しました。
NetEventReconfigure
プロトコル ドライバーは、変更された構成を受け入れた。
NetEventBindList
プロトコル ドライバーには新しいバインド リストがあり、関連する処理が実行されています。
NetEventBindsComplete
プロトコル ドライバーは、使用可能なすべての基になるアダプターにプロトコル ドライバーがバインドされていることを NDIS から示したことを確認しました。
NetEventPnPCapabilities
プロトコル ドライバーは、指定されたバインディングに関連付けられている基になるアダプターの現在のウェイクアップ機能を受信したことを確認しました。
NetEventPause
指定したプロトコル バインドが 一時停止 状態に入っています。 バインドは、NDIS がバインドのすべての未処理の送信要求を完了した後、 一時停止 状態になります。 一時停止操作の詳細については、「 バインディングの一時停止」を参照してください。
NetEventRestart
指定したプロトコル バインドが 再起動 状態に入っています。 プロトコル ドライバーがバインディングの送受信操作を再開する準備ができたら、バインディングは 実行中 の状態になります。
NetEventPortActivation
プロトコル ドライバーは、指定されたバインディングに関連付けられているポートのアクティブ化を確認しました。 ポートのアクティブ化の詳細については、「 NDIS ポートのアクティブ化」を参照してください。
NetEventPortDeactivation
プロトコル ドライバーは、指定されたバインディングに関連付けられているポートのアクティブ化を確認しました。
NDIS_STATUS_PENDING
プロトコル ドライバーは、 への呼び出しを使用して、指定されたイベントへの応答を非同期的に返します。 NdisCompleteNetPnPEvent 関数。
NDIS_STATUS_RESOURCES
プロトコル ドライバーは、指定されたプラグ アンド プレイまたは Power Management イベントを満たすために必要なシステム リソースを取得できませんでした。
NDIS_STATUS_NOT_SUPPORTED
NDIS 6.0 以降のプロトコル ドライバーは、この状態を返す必要があります。 NDIS 5。プラグ アンド プレイをサポートしていない x プロトコル ドライバーは、NetEventSetPower に応答してこの状態を返して、NDIS が基になるアダプターからバインドを解除する必要があることを示すことができます。
NDIS_STATUS_FAILURE
プロトコル ドライバーは、上記の一覧に記載されているもの以外の理由で、指定されたイベントに失敗しました。
 

プロトコル ドライバーは、 NetEventQueryRemoveDevice イベントと NetEventPortActivation イベントに失敗する可能性があります。

プロトコル ドライバーが NetEventPortActivation イベントに失敗した場合は、後続の操作で関連付けられているポートを使用しないでください。

プロトコル ドライバーは、常に、 NetEventRestartNetEventIMReEnableDeviceNetEventCancelRemoveDeviceNetEventReconfigureNetEventBindListNetEventBindsCompleteNetEventPauseNetEventPortDeactivationおよび NetEventPnPCapabilities イベントを成功させる必要があります。NDIS_STATUS_SUCCESSを返します。

注釈

ProtocolNetPnPEvent 関数は、プラグ アンド プレイと Power Management をサポートするためにプロトコル ドライバーで必要です。 NDIS は ProtocolNetPnPEvent を呼び出して、ネットワーク プラグ アンド プレイ イベント、NDIS PnP イベント、または Power Management イベントが発生したことをプロトコル ドライバーに通知します。

次に、ProtocolNetPnPEvent に渡される構造体NET_PNP_EVENT_NOTIFICATION、イベントについて説明します。 ProtocolNetPnPEvent は、NET_PNP_EVENT_NOTIFICATION構造内の 2 つの基本的な情報を解釈します。

  • プラグ アンド プレイまたは Power Management イベントの種類を識別する NetEvent メンバーのコード。
  • イベント固有の情報。 たとえば、 NetEventSetPower イベントの 場合、Buffer メンバーには、デバイスが移行しているデバイスの電源状態が含まれます。
プロトコル ドライバーは 、NetPnPEvent ポインターを保存する必要があります。 このポインターは 、NdisCompleteNetPnPEvent 関数に必要な入力パラメーターです。 ProtocolNetPnPEvent がNDIS_STATUS_PENDINGを返す場合、プロトコル ドライバーは後で を呼び出す必要があります。

プロトコル ドライバーは、常に NetEventQueryPower イベントに成功する必要があります。 アクティブな接続を確立した後、プロトコル ドライバーは PoRegisterSystemState 関数を呼び出して、継続的にビジー状態を登録できます。 状態の登録が有効である限り、電源マネージャーはシステムをスリープ状態にしようとしません。 接続が非アクティブになると、プロトコル ドライバーは PoUnregisterSystemState 関数を呼び出して状態の登録を取り消します。 プロトコル ドライバーは、 NetEventQueryPower イベントが失敗して、システムがスリープ状態に移行しないようにしないでください。 NetEventQueryPower イベントの後には常に NetEventSetPower イベントが続きます。 基になるデバイスの現在の電源状態を指定する NetEventSetPower イベントは、 NetEventQueryPower イベントを取り消します。

プロトコル ドライバーがデバイスを解放できない場合 (たとえば、デバイスが使用中であるため)、NDIS_STATUS_FAILUREを返して NetEventQueryRemoveDevice イベントを失敗する必要があります。

プロトコル ドライバーは、NDIS_STATUS_SUCCESSを返すことによって、常に NetEventCancelRemoveDeviceNetEventReconfigure、NetEventBindList、NetEventBindsCompleteNetEventPnPCapabilitiesNetEventPause、または NetEventPortDeactivation を成功させる必要があります。

NetEventReconfigure または NetEventBindList を処理する場合、プロトコル ドライバーは、イベントに関連付けられているデータを検証する必要があります。 このようなデータの詳細については、「 NET_PNP_EVENT_NOTIFICATION」を参照してください。

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

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

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

PROTOCOL_NET_PNP_EVENT MyNetPnPEvent;

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

_Use_decl_annotations_
NDIS_STATUS
 MyNetPnPEvent(
    NDIS_HANDLE  ProtocolBindingContext,
    PNET_PNP_EVENT_NOTIFICATION  NetPnPEvent
    )
  {...}

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

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

要件

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

こちらもご覧ください

NET_PNP_EVENT_NOTIFICATION

NdisCompleteNetPnPEvent

NdisOpenAdapterEx

PoRegisterSystemState

PoUnregisterSystemState