NET_PNP_EVENT 構造体 (netpnp.h)
NET_PNP_EVENT構造体では、ネットワーク プラグ アンド プレイ (PnP) イベント、NDIS PnP イベント、または電源管理イベントについて説明します。
構文
typedef struct _NET_PNP_EVENT {
NET_PNP_EVENT_CODE NetEvent;
PVOID Buffer;
ULONG BufferLength;
ULONG_PTR NdisReserved[4];
ULONG_PTR TransportReserved[4];
ULONG_PTR TdiReserved[4];
ULONG_PTR TdiClientReserved[4];
} NET_PNP_EVENT, *PNET_PNP_EVENT;
メンバー
NetEvent
イベントを次のいずれかとして記述するイベント コード。
NetEventSetPower
電源マネージャーが Set Power 要求を送信したことを示します。これは、システムの電源状態への移行を指定します。 NDIS は、この状態をデバイスの適切なデバイス電源状態に変換します。
詳細については、「解説」を参照してください。
NetEventQueryPower
電源マネージャーが Query Power 要求を送信したことを示します。この要求は、システムの電源状態への移行を要求します。 NDIS は、この状態をデバイスの適切なデバイス電源状態に変換します。
詳細については、「解説」を参照してください。
NetEventQueryRemoveDevice
PnP マネージャーがクエリ削除デバイス要求を送信したことを示します。 PnP マネージャーは、操作を中断せずにデバイスを削除できるかどうかを照会するために、この要求を送信します。
NetEventCancelRemoveDevice
PnP マネージャーがデバイスの削除の取り消し要求を送信したことを示します。 PnP マネージャーは、PnP マネージャーがデバイスの削除要求のクエリを送信した後、デバイスの削除を取り消すためにこの要求を送信します。
NetEventReconfigure
ネットワーク コンポーネントの構成が変更されたことを示します。 たとえば、ユーザーがネットワークとダイヤルアップ Connections フォルダーを介して TCP/IP の IP アドレスを変更した場合、NDIS は NetEventReconfigure イベントを TCP/IP プロトコルに示します。 また、中間ドライバーは通常、このイベントをトリガーとして使用して、 NdisIMInitializeDeviceInstanceEx 関数とその仮想ミニポートを開始します。 NetEventReconfigure の詳細については、「NetEventIMReEnableDevice」を参照してください。
NetEventBindList
バインド リストの処理順序が再構成されたことをプロトコル ドライバーに示します。 この一覧は、複数のバインドのいずれかにルーティングされる可能性があるユーザー要求など、処理時にバインドに適用される相対順序を示します。 このイベントで渡されるバッファーには、null で終わる Unicode 文字列として書式設定されたデバイス名の一覧が含まれています。 各デバイス名の形式は、ProtocolBindAdapterEx 関数の呼び出しに渡される AdapterName メンバーと同じです。
NetEventBindsComplete
プロトコル ドライバーがバインドできるすべての NIC にバインドされていることを示します。 PNP NIC がシステムに接続されていない限り、NDIS はプロトコルにそれ以上 NIC を示しません。
NetEventPnPCapabilities
ユーザーが基になるアダプターのウェイクアップ機能を有効または無効にしたことを示します。 (バインディングは、ProtocolNetPnPEvent 関数に渡される ProtocolBindingContext パラメーターによって指定されます)。
NetEventPause
指定したプロトコル バインドが一時停止状態に入る必要があることを示します。 バインドは、NDIS がバインドのすべての未処理の送信要求を完了した後、一時停止状態になります。
NetEventRestart
指定したプロトコル バインドが再起動状態に入っていることを示します。 プロトコル ドライバーがバインディングの送受信操作を再開する準備ができたら、バインディングは実行中の状態になります。
NetEventPortActivation
指定したバインディングに関連付けられているポートの一覧のアクティブ化を示します。
NetEventPortDeactivation
指定したバインディングに関連付けられているポートの一覧の非アクティブ化を示します。
NetEventIMReEnableDevice
NDIS 6.0 以降の中間ドライバーの仮想ミニポートの構成が変更されたことを示します。 NetEventIMReEnableDevice は NetEventReconfigure イベントに似ていますが、中間ドライバーが 1 つの仮想ミニポートに対してこのイベントを受信し、 NetEventReconfigure イベントがすべての中間ドライバーの仮想ミニポートに適用されることを除きます。 たとえば、ユーザーが無効にし、デバイス マネージャーまたは別のソースから 1 つの仮想ミニポートを有効にすると、中間ドライバーは NetEventIMReEnableDevice イベントを受け取ります。 ドライバーの中間電源管理の例については、GitHub の Windows ドライバー サンプル リポジトリで入手できる NDIS MUX 中間ドライバーとオブジェクト通知ドライバーのサンプルを参照してください。
NetEventNDKEnable
ネットワーク ダイレクト カーネル (NDK) が現在有効になっていることを示します。
NetEventNDKDisable
NDK が現在無効になっていることを示します。
NetEventFilterPreDetach
フィルターがデタッチされようとしていることを示します。フィルターが FilterDetach ハンドラーでは不可能な必要なクリーンアップを実行できるようにします (その時点で OID と表示パスが閉じられているためです)。
NetEventBindFailed
バインド イベントエラーが発生したことを示します。
NetEventSwitchActivate
Hyper-V 拡張可能スイッチがアクティブ化を完了し、スイッチ拡張機能が安全にクエリを実行して、さらにスイッチの構成を行うことができることを示します。 この表示は、拡張機能ミニポートによって発行された Hyper-V 拡張可能スイッチ スタックでのみ使用されます。 詳細については、「 Hyper-V 拡張可能スイッチの構成 と NDIS_SWITCH_PARAMETERS の照会」を参照してください。
NetEventInhibitBindsAbove
他のフィルターとプロトコルがミニポート アダプターにバインドできないようにする同期イベント。 以前にバインドされていたフィルターまたはプロトコルは、イベントが完了する前にバインド解除されます。 使用規則を次に示します。
- ミニポート アダプターを 1000 ミリ秒より長く禁止状態のままにしないでください。
- このイベントは 、MiniportInitializeEx が開始された後にのみ発行でき、 MiniportHaltEx が返された後に発行することはできません。
- このイベントは、ミニポート アダプターが D0 状態の場合にのみ発行できます。
- このイベントはブロックしているため、デッドロックを引き起こすコンテキストによって発行されるべきではありません。
- このイベントの発行中にロックを保持することはできません。
- このイベントは、PASSIVE_LEVELで発行する必要があります。
NetEventAllowBindsAbove
NetEventInhibitBindsAbove の効果を反転させる非同期イベント。 使用規則を次に示します。
- このイベントは 、MiniportInitializeEx が開始された後にのみ発行でき、 MiniportHaltEx が返された後に発行することはできません。
- このイベントは、ミニポート アダプターが D0 状態の場合にのみ発行できます。
- このイベントの発行中にロックを保持することはできません。
- このイベントは、PASSIVE_LEVELで発行する必要があります。
NetEventRequirePause
ミニポート アダプターを含むプロトコルとフィルターを示す同期イベントを一時停止する必要があります。 プロトコルとフィルターとミニポート アダプターは、 NdisMNetPnPEvent ルーチンが返されるときに一時停止することが保証されます。 使用規則を次に示します。
- ユーザー アプリケーションの遅延を防ぐために、NetEventAllowStart イベントと NetEventRequirePause イベントの間で 1000 ミリ秒を超える遅延を回避します。
- このイベントは 、MiniportInitializeEx が開始された後にのみ発行でき、 MiniportHaltEx が返された後に発行することはできません。
- このイベントが発行された後、NDIS が MiniportPause を 呼び出す保証はありません。 特に、ミニポート アダプターが既に一時停止されている場合、NDIS では追加の開始一時停止ループは導入されません。 つまり、 MiniportPause が呼び出される回数が、このイベントが発行された金額より大きい、より小さい、または等しくないことを意味します。
- このイベントはブロックしているため、デッドロックを引き起こすコンテキストによって発行されるべきではありません。
- このイベントの発行中にロックを保持することはできません。
NetEventAllowStart
ミニポート アダプターを含むプロトコルとフィルターを示す非同期イベントを一時停止する必要はありません。 使用規則を次に示します。 NdisMNetPnPEvent ルーチンが返された後、プロトコルとフィルター内のドライバーの一時停止状態は保証されません。
- このイベントは 、MiniportInitializeEx が開始された後にのみ発行でき、 MiniportHaltEx が返された後に発行することはできません。
- このイベントはブロックしているため、デッドロックを引き起こすコンテキストによって発行されるべきではありません。
- このイベントの発行中にロックを保持することはできません。
Buffer
NetEvent メンバーで示されるイベントに固有の情報を含むバッファーのアドレス。 イベントの種類ごとに、バッファーには次の情報が含まれます。
NetEventSetPower
バッファーには、デバイスが移行しているデバイスの電源状態が含まれています。
NDIS がプロトコル ドライバーの ProtocolNetPnPEvent 関数を呼び出すと、デバイスの状態はNDIS_DEVICE_POWER_STATEされ、次のいずれかの値を指定できます。
NdisDeviceStateUnspecified
ネットワーク デバイスは、電源管理をサポートしていません。
NdisDeviceStateD0
デバイスが完全な機能とパフォーマンスを提供するフルパワー状態。
NdisDeviceStateD1
ホストからの送信要求がデバイスによって受け入れられない、デバイスが受信したデータがホスト メモリに転送されず、割り込みが発生しない低電力状態。 一部のデバイス コンテキストが失われる可能性があります。 NIC とそのミニポート ドライバーの機能によっては、デバイスがウェイクアップ信号を生成できる場合があります。
NdisDeviceStateD2
NdisDeviceStateD1 に似た低電力状態です。ただし、通常、より多くの電力とより少ないコンテキストが保存され、完全な電源状態に移行するためにより多くの時間が必要になる点が除きます。
NdisDeviceStateD3
電源がデバイスから完全に削除されたオフ状態。
プロトコル ドライバーの場合、 NdisDeviceStateD0 は、NIC が完全に動作し、通常の操作で使用できる状態であることを意味します。 その他のデバイスの状態は、デバイスが完全に電源が供給されておらず、ネットワーク データの送受信に使用できないことを意味します。
NetEventQueryPower
バッファーには、デバイスに対して要求されたデバイスの電源状態が含まれています。 デバイスの状態はNDIS_DEVICE_POWER_STATEです ( NetEventSetPower 値の説明で説明されています)。
NetEventQueryRemoveDevice
バッファーの内容は NULL です。
NetEventCancelRemoveDevice
バッファーの内容は NULL です。
NetEventReconfigure
バッファーには、プロトコル固有のデータを含めることができます。 プロトコル ドライバーは、このデータの検証を担当します。
NetEventBindList
バッファーには、ネットワーク コンポーネントの変更されたバインディング リストが含まれています。 構造体NET_PNP_EVENT_NOTIFICATION 渡されています。 バインド リストは、一連の null で終わる Unicode 文字列であり、REG_MULTI_SZ形式です。 各文字列はアダプター名です。 プロトコルにバインドされている TDI クライアントは、このバインド リストを使用してバインドを並べ替えます。 プロトコル ドライバーは、この一覧の検証を担当します。
NetEventBindsComplete
バッファーの内容は NULL です。
NetEventPnPCapabilities
バッファーは、ビットマスクを含む ULONG です。 ビットマスクでNDIS_DEVICE_WAKE_UP_ENABLE フラグを設定すると、NIC のウェイクアップ機能が有効になります。 それ以外の場合、NIC のウェイクアップ機能は無効になります。 (バインディングは、ProtocolNetPnPEvent に渡される ProtocolBindingContext パラメーターによって指定されます)。0 に設定すると、このフラグは NIC のウェイクアップ機能が無効になっていることを示します。
NetEventPause
バッファーには、 NDIS_PROTOCOL_PAUSE_PARAMETERS 構造体。
NetEventRestart
バッファーに NULL または が含まれている可能性があります。 NDIS_PROTOCOL_RESTART_PARAMETERS 構造体。 NDIS は、 NDIS_PROTOCOL_RESTART_PARAMETERS 構造体の RestartAttributes メンバー内のNDIS_RESTART_ATTRIBUTES構造体へのポインターを提供します。
NetEventPortActivation
バッファーには、NDIS がアクティブ化するポートを識別 するNDIS_PORT 構造体の一覧の最初のエントリが含まれています。 NDIS_PORT構造体の Next メンバーを使用して、リスト内の次の構造体を取得できます。
NetEventPortDeactivation
バッファーには、NDIS が非アクティブ化する NDIS ポートを識別するNDIS_PORT_NUMBER型 (ULONG として定義) のポート番号の配列が含まれています。 配列内の要素の数を計算するには、 bufferLength メンバーの値を除算します。これは、 NET_PNP_EVENT_NOTIFICATION の NetPnPEvent メンバーで指定された NET_PNP_EVENT構造体内にある sizeof(NDIS_PORT_NUMBER) で除算します。
NetEventIMReEnableDevice
バッファーには、有効になっているデバイスの仮想ミニポートのデバイス オブジェクトに名前を付ける null で終わる Unicode 文字列を含む、NDIS_STRING型の変数へのポインターが含まれています。 文字列は、完全なパス名 (たとえば、\Device\DeviceName) です。
NetEventNDKEnable
Buffer メンバーは NULL です。
NetEventNDKDisable
Buffer メンバーは NULL です。
NetEventFilterPreDetach
Buffer メンバーは NULL です。
NetEventBindFailed
バッファーには 、NDIS_BIND_FAILED_NOTIFICATION 構造体が含まれています。
NetEventSwitchActivate
バッファーの内容は NULL です。
NetEventAllowBindsAbove
バッファーの内容は NULL です。
NetEventInhibitBindsAbove
バッファーの内容は NULL です。
NetEventAllowStart
バッファーの内容は NULL です。
NetEventRequirePause
バッファーの内容は NULL です。
BufferLength
Buffer でのイベント固有の情報のバイト数。
NdisReserved[4]
NDIS で使用するために予約されている領域。
TransportReserved[4]
トランスポート ドライバーで使用するために予約されている領域。
TdiReserved[4]
TDI で使用するために予約されている領域。
TdiClientReserved[4]
TDI クライアントで使用するために予約されている領域。
注釈
NDIS 6.0 以降のバージョンでは、オペレーティング システムがミニポート アダプターを表すターゲット デバイス オブジェクトにシステム PnP イベントまたは電源管理イベントを発行すると、NDIS はイベントを に変換します。 NET_PNP_EVENT_NOTIFICATION 構造体。 NET_PNP_EVENT_NOTIFICATION 構造体の NetPnPEvent メンバーは、NET_PNP_EVENT構造体です。
NDIS は、プロトコル ドライバーのProtocolNetPnPEvent 関数を呼び出すことによって、ミニポート アダプターにバインドされている各プロトコル ドライバーにNET_PNP_EVENT構造体へのポインターを渡します。 ポインターは NdisCompleteNetPnPEvent 関数への入力パラメーターであるため、プロトコル ドライバーはこのポインターを保存する必要があります。これは、 ドライバーが ProtocolNetPnPEvent の呼び出しを非同期的に完了するために呼び出します。
NDIS は、フィルター ドライバーのFilterNetPnPEvent 関数を呼び出すことによって、ミニポート アダプターにバインドされている各フィルター ドライバーにNET_PNP_EVENT構造体へのポインターを渡します。 フィルター ドライバーは FilterNetPnPEvent への呼び出しを同期的に完了する必要があるため、このポインターを保存する必要はありません。
NDIS 6.30 以降では、NDIS が ProtocolNetPnPEvent 関数または FilterNetPnPEvent 関数を呼び出すときに、プロトコルドライバーまたはフィルター ドライバーは次のガイドラインに従う必要があります。
-
NET_PNP_EVENT構造体の NetEvent メンバーが NetEventSetPower に設定されている場合、ドライバーは新しい I/O 要求の生成を停止する必要があります。 また、ドライバーは保留中の I/O 要求の完了を待つ必要があります。
プロトコルまたはフィルター ドライバーが ProtocolNetPnPEvent または FilterNetPnPEvent から戻った後、次の条件に該当する場合、電源状態の遷移中に NDIS によってこれらのドライバーが一時停止および再起動されることはありません。
- 基になるミニポート ドライバーは、NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES構造体のNDIS_MINIPORT_ATTRIBUTES_NO_PAUSE_ON_SUSPEND フラグを設定します。 ドライバーは、 NdisMSetMiniportAttributes 関数の呼び出しで、この構造体へのポインターを渡します。
- ミニポート ドライバーに接続されているすべてのフィルター ドライバーは、NDIS 6.30 以降のバージョンの NDIS をサポートします。
- ミニポート ドライバーにバインドされているすべてのプロトコル ドライバーは、NDIS 6.30 以降のバージョンの NDIS をサポートします。
- NET_PNP_EVENT構造体の NetEvent メンバーが NetEventSetPower または NetEventQueryPower に設定されている場合、ドライバーは保留中の I/O 要求の完了を待つ必要はありません。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | NDIS 5.1 および NDIS 6.0 以降でサポートされています。 この構造体の NDIS 5.1 バージョンの詳細については、「NET_PNP_EVENT (NDIS 5.1)」を参照してください。 |
Header | netpnp.h (Ndis.h、Netpnp.h を含む) |