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 プロトコル ドライバーは、NetEventSetPower に応答してこの状態を返して、NDIS が基になるアダプターからバインドを解除する必要があることを示すことができます。 |
|
プロトコル ドライバーは、上記の一覧に記載されているもの以外の理由で、指定されたイベントに失敗しました。 |
プロトコル ドライバーは、 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 イベントを失敗する必要があります。
プロトコル ドライバーは、NDIS_STATUS_SUCCESSを返すことによって、常に NetEventCancelRemoveDevice、NetEventReconfigure、NetEventBindList、NetEventBindsComplete、NetEventPnPCapabilities、NetEventPause、または 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 |