次の方法で共有


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 は ProtocolBindingContext のハンドルを ProtocolCloseAdapterCompleteEx に渡します。

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

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

ProtocolUnbindAdapterExNdisCloseAdapterEx を呼び出すとすぐに、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 以降でサポートされています。
対象プラットフォーム Windows
ヘッダー 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