NdisMSetAttributesEx 関数 (ndis.h)

メモ NDIS 5。 x は非推奨となり、NDIS 6 に置き換えられます。 x があります。 新しい NDIS ドライバーの開発については、「 Windows Vista 以降のネットワーク ドライバー」を参照してください。 NDIS 5 の移植に関する情報。 x ドライバーから NDIS 6 へ。 x については、「 NDIS 5.x ドライバーを NDIS 6.0 に移植する」を参照してください。

NdisMSetAttributesEx は 、初期化中に呼び出し元の NIC または仮想 NIC の重要な機能について NDIS ライブラリに通知します。

構文

void NdisMSetAttributesEx(
  [in]           NDIS_HANDLE         MiniportAdapterHandle,
  [in]           NDIS_HANDLE         MiniportAdapterContext,
  [in, optional] UINT                CheckForHangTimeInSeconds,
  [in]           ULONG               AttributeFlags,
  [in, optional] NDIS_INTERFACE_TYPE AdapterType
);

パラメーター

[in] MiniportAdapterHandle

MiniportInitialize へのハンドル入力を指定します。

[in] MiniportAdapterContext

MiniportInitialize によって割り当てられた常駐コンテキスト領域のハンドルを指定します。

[in, optional] CheckForHangTimeInSeconds

NDIS が MiniportCheckForHang 関数を呼び出す間隔を秒単位で指定します。 ドライバーが OID 要求に応答していない場合、または MiniportCheckForHang への 2 回の連続する呼び出し内で要求を送信した場合、NDIS はドライバーの ミニポートReset 関数を呼び出すことができます。

MiniportCheckForHang を呼び出すときに NDIS が使用する実際の間隔は、常に 2 秒の倍数です。 たとえば、5 秒を指定すると、実際の間隔は約 4 秒になります。

このパラメーターに 0 を指定すると、NDIS は NDIS の既定の 2 秒間隔で MiniportCheckForHang を呼び出す必要があることを示します。

呼び出し元が AttributeFlags でNDIS_ATTRIBUTE_DESERIALIZEを設定する場合、NDIS はミニポート ドライバーの送信を保留中のキューにありません。 代わりに、このような逆シリアル化されたドライバーは、受信送信をすぐに送信するためのリソースが不足している場合は常に、後続の送信要求の独自のキューを内部的に管理する必要があります。

[in] AttributeFlags

次のフラグの 1 つ以上 (ORed) で設定できるビットマスクを指定します。

  • NDIS_ATTRIBUTE_BUS_MASTER
    呼び出し元の NIC がバス マスター DMA デバイスである場合に設定します。

  • NDIS_ATTRIBUTE_DESERIALIZE
    呼び出し元が逆シリアル化されたミニポート ドライバーである場合に設定します。

  • NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT
    NDIS がタイムアウトを試みない場合に設定保留中の送信パケットが呼び出し元にキューに格納されます。 中間ドライバーではこのフラグを設定する必要がありますが、NIC ドライバーは設定しないでください。

  • NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT
    NDIS が保留中のクエリをタイムアウトにしようとせず、キューに格納されている要求を呼び出し元に設定しない場合に設定します。 中間ドライバーではこのフラグを設定する必要がありますが、NIC ドライバーは設定しないでください。

  • NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER
    呼び出し元が中間ドライバーの場合は を設定します。

  • NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS
    トークン リング エラーが示されている場合、NDIS がトークン リング NIC ドライバーの MiniportReset 関数を呼び出さない場合に設定します。

  • NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND
    システムが低電力 (スリープ) 状態に移行する前に、NDIS がドライバーの MiniportHalt 関数を呼び出さない場合に設定します。 ハードウェア保守状態に依存するドライバーでは、このフラグを設定しないでください。

    メモこのフラグを設定すると、ネットワーク インターフェイス チェック カード (NIC) の [プロパティ] ダイアログ ボックスの [電源管理] タブにある [コンピューターがこのデバイスの電源をオフにして電力を節約できるようにする] ボックスが無効になります。 NIC で電源管理が可能な場合でも、電源管理は無効になります。

  • NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK
    ドライバーがユーザー通知なしで NIC の削除を処理できるかどうかを設定します。 このようなドライバーは、 ミニポートPnPEventNotify 関数をエクスポートします。 NDIS_ATTRIBUTE_SURPRISE_REMOVE_OKのシステム サポートは、Windows XP 以降のオペレーティング システムで利用できます。

  • NDIS_ATTRIBUTE_NOT_CO_NDIS
    接続指向デバイスとコネクションレス デバイスの両方をサポートできるドライバーによって設定され、デバイスがコネクションレス デバイスであることを示します。 NDIS_ATTRIBUTE_NOT_CO_NDISのシステム サポートは、Windows XP 以降のオペレーティング システムで利用できます。

  • NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS
    NdisBufferVirtualAddressSafeNdisGetFirstBufferFromPacketSafeNdisQueryBufferSafe を使用して、送信パケット バッファーのシステム仮想アドレスに排他的にアクセスするドライバーによって設定されます。 NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APISは、このようなバッファーにアクセスするために物理アドレスのみを使用するドライバーによっても設定されます。 NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS設定すると、オペレーティング システムが送信パケット バッファーをシステム仮想アドレスにマップする必要がないため、パフォーマンスが向上する可能性があります。 NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APISのシステム サポートは、Windows XP 以降のバージョンで利用できます。

  • NDIS_ATTRIBUTE_DO_NOT_BIND_TO_ALL_CO
    TAPI サービスを提供しない CoNDIS ミニポート ドライバーによって設定されます。 NDIS_ATTRIBUTE_DO_NOT_BIND_TO_ALL_CO設定すると、NDIS がミニポート ドライバーを NDIS TAPI プロキシ ドライバー (NDPROXY) にバインドできなくなります。 既定では、NDIS は、すべての CoNDIS ミニポート ドライバーに NDPROXY をバインドします。

[in, optional] AdapterType

呼び出し元の NIC の I/O バス インターフェイスの種類を指定します。これは通常、NIC が接続されている I/O バスの種類です。次のいずれかです。

  • NdisInterfaceInternal
    ホスト固有の内部インターフェイスを指定します。

  • NdisInterfaceIsa
    ISA インターフェイスを指定します。

  • NdisInterfaceEisa
    拡張 ISA (EISA) インターフェイスを指定します。

  • NdisInterfaceMca
    これは、サポートされなくなった MCA バスを指します。

  • NdisInterfaceTurboChannel
    Turbo チャネル インターフェイスを指定します。

  • NdisInterfacePci
    周辺機器コンポーネント相互接続 (PCI) インターフェイスを指定します。

  • NdisInterfacePcMcia
    パーソナル コンピューター メモリ カード国際協会 (PC カード) インターフェイスを指定します。

このパラメーターは中間ドライバーには関係ありません。この引数に対して 0 を NdisMSetAttributesEx に渡す必要があります。

戻り値

なし

解説

MiniportInitialize 関数は、NdisMSetAttributesEx に指定された情報に依存する他の NdisMRegisterXxx または NdisXxx 関数を呼び出す前に、NdisMSetAttributesEx(または NdisMSetAttributes) を呼び出す必要があります。 たとえば、MiniportInitialize がまだ NdisMSetAttributesEx を呼び出していない場合、AttributeFlags が NDIS_ATTRIBUTE_BUS_MASTER で設定されている場合、NIC ドライバーの NdisMAllocateMapRegisters への呼び出しは失敗します。

中間ドライバーは 、NdisMSetAttributes ではなく NdisMSetAttributesEx を呼び出す必要があり、 AttributeFlags でNDIS_ATTRIBUTE_INTERMEDIATE_DRIVERを設定する必要があります。 このフラグを設定すると、NDIS は、中間ドライバーを全二重ミニポート ドライバーとして扱います。これにより、中間ドライバーでまれに断続的なデッドロックが発生するのを防ぐことができます。 したがって、すべての中間ドライバーは、同時送信と表示を処理できる必要があります。

逆シリアル化されたドライバーは 、NdisMSetAttributesEx も呼び出す必要があり、 AttributeFlags でNDIS_ATTRIBUTE_DESERIALIZEを設定する必要があります。 NDIS では、逆シリアル化されたドライバーの送信パケット キューは維持されず、このようなドライバーの MiniportXxx 関数への呼び出しもシリアル化されません。 逆シリアル化されたドライバーによって、次の処理が行われます。

  • すべての受信送信要求を受け入れる
  • たとえば、逆シリアル化された NIC ドライバーに現在、受信送信パケットをすぐに送信するために使用できるリソースが不足している場合など、必要に応じて内部的に受信送信パケットをキューに登録する
  • ドライバーのルーチン間で必要に応じて内部キューへのアクセスを同期する
  • 要求されたすべての送信を非同期的に完了するには、そのミニポート (Co)Send(Packets) 関数に渡される各プロトコル指定のパケット記述子を使用して NdisMSendComplete を呼び出します。

NDIS では、NdisMSetAttributesEx に渡される AttributeFlags に関係なく、すべての接続指向ミニポートが逆シリアル化されたドライバーであることを前提としています。 つまり、MajorNdisVersion として0x05を使用して NdisMRegisterMiniport を呼び出すドライバーは、逆シリアル化されたミニポート ドライバーである必要があります。

シリアル化された NIC ドライバーは 、MiniportInitialize からこれらの関数のいずれかを呼び出すことができますが、 NdisMSetAttributes では、NIC ドライバーの MiniportCheckForHang 関数や MiniportReset 関数が呼び出される間隔を、呼び出し元が調整することはできません。

CheckForHangTimeInSeconds の値は、送信時の NDIS ライブラリのタイムアウト間隔 (存在する場合) を決定し、呼び出し元にキューに入れたままにすることを要求します。 既定では、NDIS はキューに入った送信 (シリアル化されたドライバーの場合のみ) と要求を 2 倍のチェックハング間隔でタイムアウトします。その後、ドライバーが AttributeFlags をNDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUTに設定し、NdisMSetAttributesEx を呼び出すときにNDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUTしない限り、MiniportReset 関数を呼び出します。 このようなドライバーは、基になる NIC ドライバーが送信と要求を処理するタイミングを決定または制御できないため、中間ドライバーは NdisMSetAttributesEx を呼び出すときにこれらのフラグを設定する必要があります。

NIC ドライバーは、シリアル化された NIC ドライバーによってこのような仕様を受け入れられますが、NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUTとNDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUTフラグを設定しないでください。 ただし、NIC ドライバーは、明示的な CheckForHangTimeInSeconds を指定することで、MiniportReset 関数が呼び出されるタイムアウト間隔を調整できます。 たとえば、モデム経由でイーサネットをエミュレートする NIC ドライバーは、NDIS ライブラリの既定のタイムアウト間隔内のすべてのパケットを完了しない場合があります。 このような NIC でパケットがタイムアウトするように見えるたびに、NDIS は NIC が正しく動作しなくなったと想定し、ドライバーのミニポートReset 関数を呼び出します。 このような NIC のドライバーの場合、CheckForHangTimeInSeconds を 2 より大きい値に設定して NdisMSetAttributesEx を呼び出すと、不要なリセットが防止され、Nic の動作状態をテストするために MiniportCheckForHang 関数が呼び出される間隔が拡張されます。

中間ドライバーは、NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND フラグを設定する必要があります。 このフラグを設定すると、システムが低電力 (スリープ) 状態に移行する前に、NDIS がドライバーを停止できなくなります。

PnP 対応でない NIC を管理するレガシ ミニポート ドライバーは、システムが低電力状態に移行する前に NDIS がドライバーを停止しないように、NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND フラグを設定できます。 ミニポート ドライバーがこのフラグを設定する場合、NDIS は、ミニポート ドライバーの NIC のバス ドライバーが、NIC が PM 対応ではないことを示している可能性 がある場合でも 、OID_PNP_CAPABILITIESミニポート ドライバーを照会します。 ミニポート ドライバーは、NDIS_STATUS_SUCCESSでOID_PNP_CAPABILITIES要求に成功する必要があります。 この OID によって返されるNDIS_PM_WAKE_UP_CAPABILITIES構造体では、ミニポート ドライバーは、ウェイクアップ機能ごとに NdisDeviceStateUnspecified のデバイスの電源状態も指定する必要があります。 システムが低電力状態に移行すると、NDIS はこのようなミニポート ドライバーの MiniportHalt 関数を呼び出しません。 システムが低電力状態に移行する前に、ミニポート ドライバーは、維持するハードウェア コンテキストを保存する必要があります。 D3 状態への OID_PNP_SET_POWER 要求を受信すると、ミニポート ドライバーは、NIC を低電力状態の適切な状態に設定する必要があります。 D0 状態へのOID_PNP_SET_POWER要求を受信すると、ミニポート ドライバーは、NIC を動作状態に適した状態に設定する必要があります。

デバイスの突然の削除 (ユーザー インターフェイスによる通知なしの削除) をサポートするミニポート ドライバーは、NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK設定する必要があります。 これにより、ミニポートのデバイスが通知なしで削除されたときに、PnPEventNdisDevicePnPEventSurpriseRemoved に設定されたドライバーのミニポートPnPEventNotify 関数を NDIS が呼び出します。 また、NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK設定すると、ユーザーにデバイスを削除する前に停止するように求める警告ダイアログ ボックスが表示されなくなります。

コネクションレス デバイスと接続指向デバイスの両方をサポートできるミニポート ドライバーは、そのデバイスがコネクションレス デバイスである場合NDIS_ATTRIBUTE_NOT_CO_NDIS設定する必要があります。 それ以外の場合、ドライバーは NdisMRegisterMiniport に接続指向のミニポート ドライバー関数を登録するため、NDIS は誤ってデバイスが接続指向であると想定します。

一般に、NIC ドライバーは、NIC のレジストリ内のハードウェア リソースを要求する NdisXxx 関数を呼び出す前に NdisMSetAttributesEx を呼び出す必要があります。これは、このような呼び出しを行う前に NDIS に AttributeFlags 値が必要であり、ドライバーは通常、これらの呼び出しの情報を格納するために MiniportAdapterContext のメモリを必要とするためです。 この制限は、NIC ドライバーのミニポート初期化関数が NdisMSetAttributesEx を呼び出す前に、次の NdisXxx を呼び出すことができないことを意味します。

ただし、 NdisMSetAttributesEx を呼び出す前に、ドライバーの MiniportInitialize 関数は Ndis を呼び出すことができます レジストリにインストールされている構成情報を取得する構成関数。 また、ミニポート初期化では、ドライバーのインターフェイスの種類に対してインストールされているレジストリ エントリがバスの種類固有の NdisReadXxxMiniportInitialize 呼び出しと一致する限り、NdisReadPciSlotInformation などのバスの種類固有の NdisReadXxx 関数を呼び出すこともできます。

NdisMSetAttributesEx に提供される MiniportAdapterContext ハンドルは、NdisMRegisterMiniport または NdisIMRegisterLayeredMiniport の呼び出しで、MiniportInitialize と共に登録されたすべての MiniportXxx 関数への入力パラメーターになります。 通常、このハンドルは、ドライバーが NIC 固有の実行時状態を維持する ミニポート初期化によって割り当てられた常駐メモリへのポインターです。

  • ターゲット プラットフォーム: ユニバーサル
  • バージョン: Windows Vista の NDIS 6.0 ドライバーではサポートされていません。 代わりに NdisMSetMiniportAttributes を使用してください。 Windows Vista および Windows XP の NDIS 5.1 ドライバーでサポートされています。

要件

要件
Header ndis.h (Ndis.h を含む)
Library Ndis.lib
IRQL PASSIVE_LEVEL

こちらもご覧ください