アダプターからのバインド解除
NDIS は、プロトコル ドライバーの ProtocolUnbindAdapterEx 関数を呼び出して、ドライバーが基となるアダプターからバインドを解除するよう要求します。 NDIS は、相互の ProtocolBindAdapterEx として ProtocolUnbindAdapterEx を呼び出し、アダプターへのバインドを閉じ、ドライバーがバインドを割り当てたリソースを解放します。
ProtocolUnbindAdapterEx では、プロトコル ドライバーが NdisCloseAdapterEx を呼び出して、基になるアダプターへのバインドを閉じます。 プロトコル ドライバーは、NdisOpenAdapterEx が NdisBindingHandle パラメーターで提供したハンドルを NdisCloseAdapterEx に渡します。 このハンドルは、NDIS が閉じる必要があるバインドを識別します。
プロトコル ドライバーは、ProtocolBindAdapterEx 関数または ProtocolUnbindAdapterEx 関数からアダプターを閉じる必要があります。
プロトコル ドライバーがバインドを閉じる操作を開始する必要がある場合、ドライバーは NdisUnbindAdapter を呼び出すことができます。 NdisUnbindAdapter は、ProtocolUnbindAdapterEx への NDIS 呼び出しを行う作業項目をスケジュールします。 この作業項目は、NdisUnbindAdapter への呼び出しが返される前に実行できます。 そのため、ドライバー作成者は、NdisUnbindAdapter が返された後はバインド ハンドルが無効であることを前提とする必要があります。
プロトコル ドライバーが ProtocolUnbindAdapterEx から NDIS_STATUS_PENDING を返す場合、バインド要求を完了するには、最終的なステータスで NdisCompleteUnbindAdapterEx を呼び出す必要があります。
NDIS が NdisCloseAdapterEx から NDIS_STATUS_PENDING を返す場合、NDIS は後で プロトコル ドライバーの ProtocolCloseAdapterCompleteEx 関数を呼び出します。
バインドが一時停止状態にある場合、NDIS は ProtocolUnbindAdapterEx を呼び出すことができます。
すべてのバインド解除操作が完了すると、バインドは Unbound 状態になります。