NdisMRegisterIoPortRange 関数 (ndis.h)

NdisMRegisterIoPortRange は、NdisRawReadPortXxx 関数と NdisRawWritePortXxx 関数を使用してデバイス I/O ポートへのドライバー アクセスを設定し、そのドライバーの NIC のレジストリ内の I/O ポート アドレスの範囲を要求します。

構文

NDIS_STATUS NdisMRegisterIoPortRange(
  [out] PVOID       *PortOffset,
  [in]  NDIS_HANDLE MiniportAdapterHandle,
  [in]  UINT        InitialPort,
  [in]  UINT        NumberOfPorts
);

パラメーター

[out] PortOffset

InitialPort および NumberOfPorts で指定された特定のバス相対 I/O ポート範囲のマップされたベース仮想アドレスを返す呼び出し元から指定された変数を指定します。

[in] MiniportAdapterHandle

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

[in] InitialPort

マップするポートの範囲のバス相対ベース ポート アドレスを指定します。

[in] NumberOfPorts

マップする範囲内のポートの数を指定します。

戻り値

NdisMRegisterIoPortRange は、次のいずれかを返すことができます。

リターン コード 説明
NDIS_STATUS_SUCCESS
指定された I/O ポートの範囲が正常にマップされたため、 PortOffset の値が有効であり、NIC のレジストリでマップされた範囲が要求されました。
NDIS_STATUS_RESOURCE_CONFLICT
レジストリ内の I/O ポート範囲を要求しようとしましたが、別のドライバーがそのデバイスの範囲を既に要求している可能性があるために失敗しました。 NdisMRegisterIoPortRange は、これが発生した場合にエラーをログに記録します。
NDIS_STATUS_RESOURCES
ポート範囲をマップできなかったか、NDIS がハードウェア リソースの競合のためにレジストリをチェックにリソースを割り当てませんでした。
NDIS_STATUS_FAILURE
バスの種類またはバス番号が範囲外であるか、指定された InitialPortNumberOfPorts が無効でした (現在のプラットフォームの I/O ポート空間内にない可能性があります)。

注釈

ミニポート ドライバーは、そのミニポートInitializeEx 関数から NdisMRegisterIoPortRange を呼び出します。 MiniportInitializeEx は を呼び出す必要があります NdisMRegisterIoPortRange を呼び出す前の NdisMSetMiniportAttributes

NdisMRegisterIoPortRange は、ミニポート ドライバーが NdisRawXxx 関数を呼び出すことによって NIC 上の I/O ポート範囲にアクセスするために後で使用できるバス相対デバイス アドレス範囲をマップします。 呼び出しが成功すると、呼び出し元の NIC のレジストリ内の指定された I/O ポートの範囲が要求されます。

NdisRawXxx に渡されるパラメーターはマップされているため、これらの関数は対応する NdisImmediate よりも大幅に高速に実行されます。ポートXxxNdisMRegisterIoPortRange を正常に呼び出した後、ミニポート ドライバーは NdisImmediate を呼び出すことができません。ポートXxx は、バス相対アドレスまたはそのような I/O ポート範囲内のマップされた仮想アドレスを持つ機能です。

NdisMRegisterIoPortRange の呼び出しが失敗した場合、MiniportInitializeEx は NIC に既に割り当てられているすべてのリソースを解放し、その NIC の初期化に失敗します。

デバイス レジスタを備えた NIC のドライバーは、ホスト メモリ空間で NdisMMapIoSpace を呼び出し、その後、NIC レジスタにアクセスするための NdisRead/WriteRegisterXxx 関数を呼び出します。

要件

要件
サポートされている最小のクライアント Windows Vista の NDIS 6.0 および NDIS 5.1 ドライバー (「NdisMRegisterIoPortRange (NDIS 5.1)」を参照) でサポートされています。 Windows XP での NDIS 5.1 ドライバー (「NdisMRegisterIoPortRange (NDIS 5.1)」を参照) でサポートされています。
対象プラットフォーム ユニバーサル
Header ndis.h (Ndis.h を含む)
Library Ndis.lib
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 Irql_Miniport_Driver_Function(ndis)NdisMRegisterIoPortRange(ndis)

こちらもご覧ください

MiniportInitializeEx

NdisMDeregisterIoPortRange

NdisMMapIoSpace

NdisRawReadPortBufferUchar

NdisRawReadPortBufferUlong

NdisRawReadPortBufferUshort

NdisRawReadPortUchar

NdisRawReadPortUlong

NdisRawReadPortUshort

NdisRawWritePortBufferUchar

NdisRawWritePortBufferUlong

NdisRawWritePortBufferUshort

NdisRawWritePortUchar

NdisRawWritePortUlong

NdisRawWritePortUshort

NdisReadRegisterUchar

NdisReadRegisterUlong

NdisReadRegisterUshort

NdisWriteRegisterUchar

NdisWriteRegisterUlong

NdisWriteRegisterUshort