USB は、USB パケットの形式で、有線経由でデータを渡しますが、NDIS またはネットワーク パケットと混同しないでください。 USB エンドポイントの送受信のUSB パケットの最大長は、エンドポイントの記述子の wMaxPacketSize フィールドの値に制限されます。 バルク パイプの場合、最大パケット サイズは 64 バイトです。 特定の USB ホスト コントローラーの制約により、短い USB パケット (たとえば、データのストリーミング時に 64 バイト未満のパケット) の使用と関連しペナルティが発生します。
この制限に対処するために、リモート NDIS USB デバイスは、短いパケットが発生しないように (REMOTE_NDIS_INITIALIZE_MSG の MaxTransferSize フィールドの制約内で) データ メッセージに 0 バイトのパディングを追加できます。 最終的な REMOTE_NDIS_PACKET_MSG の MessageLength フィールドには、これらの追加されたパディング バイトは含まれません。
デバイスが最後に使用可能な REMOTE_NDIS_PACKET_MSG を送信した場合 (そのため、デバイスのキューにはそれ以上残っていない場合)、短い USB パケットを送信できます。
デバイス送信リモート NDIS データ メッセージの最後の REMOTE_NDIS_PACKET_MSG (0 バイトのパディングなし) が、そのエンドポイントの wMaxPacketSize と全く同じ長さの USB パケットで終わる場合、デバイスは転送の追加部分として追加の 1 バイト 0 パケットを送信する場合があります。 一部のデバイス実装は、この許容量によって簡略化されています。
同様に、一部のデバイス側 USB チップセットは、そのエンドポイントの wMaxPacketSize と同じ長さの USB パケットで終わる受信 USB 転送の終了を検出しません。 このため、ホストはデータ転送に 1 バイト 0 パケットを追加する必要があります。それ以外の場合は、受信側エンドポイントの wMaxPacketSize の倍数の長さになります。 USB リモート NDIS デバイスは、追加されたバイトを許容する必要があります。 最後の REMOTE_NDIS_PACKET_MSG の MessageLength フィールドには、この追加バイトは含まれません。