リモート NDIS の概念と定義
このセクションでは、ホストとリモート NDIS デバイスの間の通信に使用される通信チャネルと下位層ドライバーのリモート NDIS 要件の概要について説明します。 このセクションでは、デバイス状態の遷移と、初期化、停止、リセットなどの主要な操作についても説明します。
コントロール チャネル
制御チャネルは信頼性が高く、シーケンス配信を保証する必要があります。 ネットワーク データ パケットの送信を除くすべての通信に使用されます。 REMOTE_NDIS_HALT_MSG および REMOTE_NDIS_INDICATE_STATUS_MSG を除くすべての必要な制御メッセージは、ホストによって開始された要求と応答の交換です。 デバイスは、各バスに対して指定されたタイムアウト期間内に応答する必要があります。
データ チャネル
データ チャネルは、ネットワーク データ パケットの送信専用に使用されます。 これは、適切なバスに対して定義されている複数のサブチャネル (サービスの品質が変化する場合など) で構成される場合があります。
初期化と破棄
制御チャネルとデータ チャネルは、適切なバスに対して指定されたとおりに初期化および設定されます。 ホストは、REMOTE_NDIS_INITIALIZE_MSG メッセージをリモート NDIS デバイスに送信します。 リモート NDIS デバイスは、その種類 (コネクションレスまたは接続指向)、サポートされているメディア、および応答メッセージ REMOTE_NDIS_INITIALIZE_CMPLT のバージョンに関する情報を提供します。
ホストまたはリモート NDIS デバイスは、REMOTE_NDIS_HALT_MSG メッセージを通じて通信チャネルを破棄できます。 未処理のすべての要求とパケットは、このメッセージの受信時に破棄されます。
デバイス状態の定義
バス レベルの初期化の後、デバイスは RNDIS 未初期化状態にあると考えられます。 REMOTE_NDIS_INITIALIZE_MSG を受信し、ステータスが RNDIS_STATUS_SUCCESS の REMOTE_NDIS_INITIALIZE_CMPLT で応答すると、デバイスは RNDIS 初期化状態になります。
OID_GEN_CURRENT_PACKET_FILTER の 0 以外のフィルター値を指定する REMOTE_NDIS_SET_MSG を受け取ると、デバイスは RNDIS データ初期化状態になります。
RNDIS データ初期化状態の場合、OID_GEN_CURRENT_PACKET_FILTER のゼロ フィルター値を指定する REMOTE_NDIS_SET_MSG を受信すると、デバイスは RNDIS 初期化状態に強制的に戻されます。
REMOTE_NDIS_HALT_MSG またはバスレベルの切断/ハード リセットを受信すると必ず、デバイスは RNDIS 非初期化状態になります。
Halt
デバイスが RNDIS 初期化状態または RNDIS データ初期化状態の場合、ホスト コンピューターは、REMOTE_NDIS_HALT_MSG をデバイスに送信することにより、デバイスのリモート NDIS 機能を終了できます。
通信チャネルのリセット
メッセージ タイムアウトなどのエラーが発生すると、通信チャネルがリセットされます。 ホストは、REMOTE_NDIS_RESET_MSG メッセージをデバイスに送信することにより、デバイスが RNDIS 初期化状態のときいつでもリセットを開始できます。デバイスは、リセットが完了したときに応答メッセージを送信する必要があります。 たとえば、メッセージのタイムアウトなどのエラーが発生したとき、ホストがリセットを開始することができます。
これは、すべてのハンドル (接続指向デバイス用の VC など) がリセット後も引き続き有効であるという意味でのソフト リセットである点に注意してください。 リモート NDIS デバイスは、未処理の要求とパケットをすべて、リセット プロセスの一部として破棄します。 リモート デバイスはハードウェア コンポーネントの一部をリセットする可能性がありますが、通信チャネルはそのまま維持されます。
リモート NDIS デバイスが再起動を実行した場合、このイベントは、"削除" の後の "追加" プラグ アンド プレイ イベントと同等です。 ホスト NDIS ミニポート ドライバーが停止して削除され、新しいインスタンスが追加および開始されます。 すべてのバス レベルとリモート NDIS の初期化が再実行されます。 リモート NDIS デバイスは、重大なデバイス障害が発生した場合にそれ自体を再起動することがあります。
フロー制御
リモート NDIS デバイスは、ホストがパケットでデータ バッファーをオーバーフローしないようフロー制御を実行する必要が生じることがあります。 フロー制御のプロビジョニングまたは要件は、バス固有です。
数値バイトの順序付け
リモート NDIS メッセージのすべての数値は、リトル エンディアン形式でコード化する必要があります (先頭に最下位バイト)。
NDIS メッセージ カプセル化
NDIS メッセージをネイティブ バス メッセージまたはプリミティブにカプセル化する方法に関しては、リモート NDIS 仕様はありません。