NdisMMapIoSpace 関数 (ndis.h)
NdisMMapIoSpace は、特定のバス相対 "物理" 範囲のデバイス RAM またはレジスタをシステム空間の仮想範囲にマップします。
構文
NDIS_STATUS NdisMMapIoSpace(
[out] PVOID *VirtualAddress,
[in] NDIS_HANDLE MiniportAdapterHandle,
[in] NDIS_PHYSICAL_ADDRESS PhysicalAddress,
[in] UINT Length
);
パラメーター
[out] VirtualAddress
呼び出しが成功した場合に変換された仮想アドレスに設定される呼び出し元が指定した変数へのポインター。
[in] MiniportAdapterHandle
MiniportInitializeEx へのハンドル入力を指定します。
[in] PhysicalAddress
マップするデバイス メモリ範囲のバス相対ベース物理アドレスを指定します。
[in] Length
マップするバイト数を指定します。
戻り値
NdisMMapIoSpace は、次のいずれかの状態値を返すことができます。
リターン コード | 説明 |
---|---|
|
デバイス メモリ範囲が正常にマップされたため、 VirtualAddress の値が有効であり、NIC のレジストリでマップされた範囲が要求されました。 |
|
別のドライバーがそのデバイスの範囲を既に要求している可能性があるため、レジストリ内のデバイス メモリ範囲を要求しようとしましたが失敗しました。 NdisMMapIoSpace では、これが発生した場合にエラーがログに記録されます。 |
|
メモリをマップできなかったか、十分な仮想メモリを割り当てられなかった。 |
|
バスの種類またはバス番号が範囲外であるか、指定された PhysicalAddress と Length が無効でした (現在のプラットフォームの I/O 領域内にない可能性があります)。 |
注釈
この関数は、オンボード メモリまたはデバイス レジスタのバンクがホストの I/O 空間に表示されている NIC のドライバーによって呼び出されます。 たとえば、PIO を使用する NIC のドライバーは NdisMMapIoSpace を呼び出します。
NdisMMapIoSpace の呼び出しが成功すると、ドライバーの NIC のレジストリ内のハードウェア リソースが要求されます。 したがって、 ミニポートInitializeEx 関数のみが NdisMMapIoSpace を呼び出します。
NdisMMapIoSpace は、NDIS_STATUS_SUCCESSを返さない場合、 VirtualAddress の変数を NULL に設定します。
MiniportInitializeEx は、ドライバーのパラメーター レジストリ キーから PhysicalAddress 値を取得するか、バスの種類に固有の NdisXxx 構成関数を呼び出すことによって取得します。 指定された物理アドレス範囲は、現在のプラットフォームの I/O 空間内に含まれている必要があります。 ホスト物理メモリ アドレスを使用して NdisMMapIoSpace を 呼び出すプログラミング エラーです。
ミニポート ドライバーは、NIC がコンピューターから削除された場合、および/またはドライバーがアンロードされている場合、ミニポート ドライバーは、その後 NIC の初期化に失敗した場合に、システム リソースに対する要求を解放するには、逆の NdisMUnmapIoSpace を呼び出す必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista の NDIS 6.0 および NDIS 5.1 ドライバー (「NdisMMapIoSpace (NDIS 5.1)」を参照) でサポートされています。 Windows XP の NDIS 5.1 ドライバー (「NdisMMapIoSpace (NDIS 5.1)」を参照) でサポートされています。 |
対象プラットフォーム | ユニバーサル |
Header | ndis.h (Ndis.h を含む) |
Library | Ndis.lib |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 | Irql_Miniport_Driver_Function(ndis), NdisMMapIoSpace(ndis) |