PROTOCOL_NET_PNP_EVENT コールバック関数 (ndis.h)
NDIS は ProtocolNetPnPEvent 関数を呼び出して、ネットワーク プラグ アンド プレイ イベント、NDIS PnP イベント、または電源管理イベントをプロトコル ドライバーに示します。
構文
PROTOCOL_NET_PNP_EVENT ProtocolNetPnpEvent;
NDIS_STATUS ProtocolNetPnpEvent(
[in] NDIS_HANDLE ProtocolBindingContext,
[in] PNET_PNP_EVENT_NOTIFICATION NetPnPEventNotification
)
{...}
パラメーター
[in] ProtocolBindingContext
このドライバーがバインドごとの実行時状態情報を保持する、プロトコル ドライバーによって割り当てられたコンテキスト領域へのハンドル。 プロトコル ドライバーは、 NdisOpenAdapterEx 関数を呼び出すときに、このハンドルを提供しました。 NULLProtocolBindingContext で示される NetEventXxx イベントは、すべてのバインディングに適用されます。 NetEventBindList と NetEventBindsComplete は、常に NULLProtocolBindingContext で示されます。 NetEventReconfigure は、指定した ProtocolBindingContext または NULLProtocolBindingContext で示すことができます。
[in] NetPnPEventNotification
へのポインター NET_PNP_EVENT_NOTIFICATION NDIS がプロトコル ドライバーに示しているプラグ アンド プレイ イベントまたは Power Management イベントを記述する構造体です。
戻り値
ProtocolNetPnPEvent は、次のいずれかを返すことができます。
リターン コード | 説明 |
---|---|
|
プロトコル ドライバーは、示されたネットワーク プラグ アンド プレイ イベント、NDIS PnP イベント、または電源管理イベントを正常に処理しました。 この状態コードの意味は、バッファー内の NetEvent コードによって異なります。NetPnPEvent のNET_PNP_EVENT_NOTIFICATION構造体:
|
|
プロトコル ドライバーは、指定されたイベントに対する応答を非同期的に返します。 NdisCompleteNetPnPEvent 関数。 |
|
プロトコル ドライバーは、指定されたプラグ アンド プレイまたは Power Management イベントを満たすために必要なシステム リソースを取得できませんでした。 |
|
NDIS 6.0 以降のプロトコル ドライバーは、この状態を返す必要があります。 NDIS 5。プラグ アンド プレイをサポートしていない x プロトコル ドライバーは、基になるアダプターから NDIS がバインドを解除する必要があることを示すために、NetEventSetPower に応答してこの状態を返すことができます。 |
|
プロトコル ドライバーは、上記の一覧に記載されているもの以外の理由で、指定されたイベントに失敗しました。 |
プロトコル ドライバーは、 NetEventQueryRemoveDevice イベントと NetEventPortActivation イベントを失敗させることができます。
プロトコル ドライバーが NetEventPortActivation イベントに失敗した場合は、後続の操作で関連付けられているポートを使用しないでください。
プロトコル ドライバーは、常に 、NetEventRestart、 NetEventIMReEnableDevice、 NetEventCancelRemoveDevice、 NetEventReconfigure、 NetEventBindList、 NetEventBindsComplete、 NetEventPause、 NetEventPortDeactivation、 および 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 メンバーには、デバイスの移行先のデバイスの電源状態が含まれます。
プロトコル ドライバーは、常に NetEventQueryPower イベントに成功する必要があります。 アクティブな接続を確立した後、プロトコル ドライバーは PoRegisterSystemState 関数を呼び出して、継続的にビジー状態を登録できます。 状態登録が有効である限り、電源マネージャーはシステムをスリープ状態にしません。 接続が非アクティブになると、プロトコル ドライバーは PoUnregisterSystemState 関数を呼び出して状態の登録を取り消します。 プロトコル ドライバーでは、 NetEventQueryPower イベントが失敗してシステムがスリープ状態に移行しないようにしないでください。 NetEventQueryPower イベントの後には常に NetEventSetPower イベントが続きます。 基になるデバイスの現在の電源状態を指定する NetEventSetPower イベントは、 NetEventQueryPower イベントを取り消します。
プロトコル ドライバーがデバイスを解放できない場合 (たとえば、デバイスが使用中であるため) は、NDIS_STATUS_FAILUREを返して NetEventQueryRemoveDevice イベントを失敗させる必要があります。
プロトコル ドライバーは、常に NetEventCancelRemoveDevice、NetEventReconfigure、NetEventBindList、NetEventBindsComplete、NetEventPnPCapabilities、NetEventPause、または NetEventPortDeactivation を返して、NDIS_STATUS_SUCCESSを返す必要があります。
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 |