次の方法で共有


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

NDIS は、基になるミニポート アダプターからバインドを解除するドライバーを要求するプロトコル ドライバーの ProtocolUnbindAdapterEx 関数を呼び出します。

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

構文

PROTOCOL_UNBIND_ADAPTER_EX ProtocolUnbindAdapterEx;

NDIS_STATUS ProtocolUnbindAdapterEx(
  [in] NDIS_HANDLE UnbindContext,
  [in] NDIS_HANDLE ProtocolBindingContext
)
{...}

パラメーター

[in] UnbindContext

このバインド解除操作の NDIS コンテキスト領域を識別するハンドル。

[in] ProtocolBindingContext

プロトコル ドライバーによって割り当てられたコンテキスト領域へのハンドル。 プロトコル ドライバーは、バインディングごとのコンテキスト情報をこのコンテキスト領域に保持します。 ドライバーは、ドライバーが ndisOpenAdapterEx 関数 呼び出したときに NDIS にこのハンドルを提供しました。

戻り値

ProtocolUnbindAdapterEx は、次のいずれかの状態値を返します。

リターン コード 形容
NDIS_STATUS_SUCCESS
ProtocolUnbindAdapterEx 基になるミニポート アダプターから正常にバインド解除されます。
NDIS_STATUS_PENDING
ProtocolUnbindAdapterEx はバインド解除操作を完了せず、操作は非同期的に完了します。 プロトコル ドライバーは、次のコマンドを呼び出す必要があります。バインド解除操作の完了後に NdisCompleteUnbindAdapterEx 関数を します。

備考

ProtocolUnbindAdapterEx は必須の関数です。 ProtocolBindAdapterEx 関数の逆数として、NDIS は ProtocolUnbindAdapterEx を呼び出して、ドライバーがバインドに固有のネットワーク I/O 操作に割り当てたリソースを解放します。 プロトコル ドライバーは、バインド解除操作を失敗できません。

ProtocolUnbindAdapterEx を呼び出す前に、NDIS はプロトコル バインディングを一時停止します。 バインドを一時停止するために、NDIS は ProtocolNetPnPEvent 関数を呼び出し、NetEventPause イベントを指定します。

ProtocolUnbindAdapterEx 基になるミニポート アダプターへのバインドを閉じるには、NdisCloseAdapterEx 関数を呼び出す必要があります。 NdisCloseAdapterEx NDIS_STATUS_SUCCESSが返された場合、閉じる操作は完了です。 NdisCloseAdapterEx がNDIS_STATUS_PENDINGを返す場合、NDIS はプロトコル ドライバーを呼び出します。 ProtocolCloseAdapterCompleteEx 関数は、閉じる操作が完了した後です。

NdisCloseAdapterEx 呼び出す前に、プロトコル ドライバーは、バインディングのマルチキャスト アドレス一覧とパケット フィルターをクリアする必要があります。 プロトコル ドライバーは、バインディング マルチキャスト アドレス一覧を NULL し、パケット フィルターを 0 に設定します。 詳細については、OID_802_3_MULTICAST_LIST OID_GEN_CURRENT_PACKET_FILTER.

ウェイクアップ パターンが指定されている場合、プロトコル ドライバーは、OID_PNP_REMOVE_WAKE_UP_PATTERN OID でそれを削除し、OID_GEN_RECEIVE_SCALE_PARAMETERS OID を使用して受信側のスケーリング パラメーターをクリアする必要があります。 NDIS 6.20 以降のプロトコル ドライバーは、OID_PM_REMOVE_WOL_PATTERN OID で wake-on-LAN パターンを削除し、OID_PM_REMOVE_PROTOCOL_OFFLOAD OID で低電力プロトコル オフロードを削除する必要があります。

ProtocolUnbindAdapterEx は、閉じる操作が完了するまで、ProtocolBindingContext でメモリを解放しないでください。 NDIS は、ProtocolCloseAdapterCompleteEx ProtocolBindingContext のハンドル渡します。

プロトコル ドライバーがバインド解除操作を完了した場合は、ProtocolUnbindAdapterEx NDIS_STATUS_SUCCESSを返すことができます。 NdisCloseAdapterEx がNDIS_STATUS_PENDINGを返す場合、ProtocolUnbindAdapterEx は、NDIS が protocolCloseAdapterCompleteEx を呼び出すのを待ってから、 NDIS_STATUS_SUCCESSを返す必要があります。

ProtocolUnbindAdapterEx NDIS_STATUS_PENDINGを返して、バインド解除操作の完了を後で延期できます。 ProtocolUnbindAdapterEx がNDIS_STATUS_PENDINGを返す場合、ドライバーは最終的に 関数を して、バインド解除操作を完了します。 NdisCloseAdapterEx 関数がNDIS_STATUS_PENDING返された場合、ドライバーは ProtocolCloseAdapterCompleteExでバインド解除操作を完了できます。 ProtocolUnbindAdapterEx は、NdisCloseAdapterExを呼び出す前に、ProtocolBindingContext のコンテキスト領域にある UnbindContext にハンドルを格納できます。 ProtocolUnbindAdapterEx ハンドルを格納 場合、ProtocolCloseAdapterCompleteEx はハンドルを渡して NdisCompleteUnbindAdapterEx してバインド解除操作を完了できます。

ProtocolUnbindAdapterEx が NdisCloseAdapterEx 呼び出されると、NdisBindingHandle パラメーターの NdisOpenAdapterEx 関数から取得したハンドルが無効になります。 ProtocolUnbindAdapterEx は、このハンドルを使用して NdisXxx関数 後続の呼び出しを行うことはできません。 ドライバーは、閉じる操作が完了するまで、基になるミニポート アダプターから受信と状態の表示を取得できます。

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

電源管理と RSS 設定の更新の

NDIS 6.0 および 6.1 プロトコル ドライバーは、必要に応じて、次の操作を実行する必要があります。
  1. を使用して、ミニポート アダプターから電源管理ウェイク オン LAN (WOL) パターンを削除します。 OID_PNP_REMOVE_WAKE_UP_PATTERN OID。
  2. を使用して、受信側のスケーリング パラメーターをクリアします。 OID_GEN_RECEIVE_SCALE_PARAMETERS OID。
NDIS 6.20 以降のプロトコル ドライバーは、次の操作を実行する必要があります。
  1. OID_PM_REMOVE_WOL_PATTERN OID を使用して、ミニポート アダプターから電源管理の WOL パターンを削除します。
  2. ミニポート アダプターから電源管理プロトコル オフロードを削除します。 OID_PM_REMOVE_PROTOCOL_OFFLOAD OID。

の例

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

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

PROTOCOL_UNBIND_ADAPTER_EX MyUnbindAdapterEx;

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

_Use_decl_annotations_
NDIS_STATUS
 MyUnbindAdapterEx(
    NDIS_HANDLE  UnbindContext,
    NDIS_HANDLE  ProtocolBindingContext
    )
  {...}

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

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

必要条件

要件 価値
サポートされる最小クライアント NDIS 6.0 以降でサポートされています。
ターゲット プラットフォーム ウィンドウズ
ヘッダー ndis.h (Ndis.h を含む)
IRQL PASSIVE_LEVEL

関連項目

NdisCloseAdapterEx

NdisCompleteUnbindAdapterEx

NdisOpenAdapterEx

OID_802_3_MULTICAST_LIST

OID_GEN_CURRENT_PACKET_FILTER

OID_GEN_RECEIVE_SCALE_PARAMETERS

OID_PNP_REMOVE_WAKE_UP_PATTERN

ProtocolBindAdapterEx

ProtocolCloseAdapterCompleteEx

ProtocolNetPnPEvent