VideoPortGetDeviceBase 関数 (video.h)
VideoPortGetDeviceBase 関数は、バス相対デバイス メモリまたは I/O アドレスの範囲をシステム空間にマップします。
構文
VIDEOPORT_DEPRECATED VIDEOPORT_API PVOID VideoPortGetDeviceBase(
PVOID HwDeviceExtension,
PHYSICAL_ADDRESS IoAddress,
ULONG NumberOfUchars,
UCHAR InIoSpace
);
パラメーター
HwDeviceExtension
ミニポート ドライバーのデバイス拡張機能へのポインター。
IoAddress
マップする範囲の基本物理アドレス。 このバス相対値を取得するには、 VideoPortGetDeviceData、 VideoPortGetRegistryParameters、または VideoPortGetAccessRanges を呼び出します。 それ以外の場合、この値は、デバイス メモリまたは I/O ポートのドライバー指定の既定のベース アドレスです。
VideoPortVerifyAccessRanges または VideoPortGetAccessRanges の前の呼び出しによって、レジストリ内の IoAddress と NumberOfUchars によって記述された範囲が正常に要求されている必要があります。
NumberOfUchars
マップする IoAddress から始まるバイト数。
InIoSpace
IoAddress 範囲の場所。 このパラメーターには、次のいずれかのフラグ、またはこれらのフラグの互換性のある ORed の組み合わせを指定できます。
フラグ | 意味 |
---|---|
VIDEO_MEMORY_SPACE_DENSE | 互換性のために残されています。 |
VIDEO_MEMORY_SPACE_IO | アドレス範囲は、メモリ空間ではなく、I/O 領域にあります。 |
VIDEO_MEMORY_SPACE_MEMORY | アドレス範囲は、I/O 空間ではなくメモリ領域にあります。 |
VIDEO_MEMORY_SPACE_P6CACHE | プロセッサは、一連の書き込み操作を集計し、キャッシュ行に送信し、後でキャッシュをフラッシュします。 このフラグは、VIDEO_MEMORY_SPACE_IOが設定されていない場合にのみ意味があります。 ビデオ メモリを書き込み結合 (WC) として指定します。 WC キャッシュの詳細については、 ビデオ ミニポート ドライバーでのメモリの書き込みの組み合わせ に関する Web サイトの記事を参照してください。 |
戻り値
成功した場合、 VideoPortGetDeviceBase はマッピングの基本仮想アドレスを返します。 指定したバス相対範囲をマップできない場合、 VideoPortGetDeviceBase は NULL を返します。
注釈
VideoPortMapMemory 関数と VideoPortUnmapMemory 関数を除き、マップされた仮想アドレスを VideoPortReadXxx、VideoPortWriteXxx、VideoPort Xxx Memory 関数に渡すことができます。
ミニポート ドライバーの HwVidFindAdapter、HwVidQueryDeviceCallback、または HwVidQueryNamedValueCallback 関数から VideoPortGetDeviceBase を呼び出す必要があります。
HwVidFindAdapter が制御を返す前に、後で使用するために、VideoPortGetDeviceBase によって返されるマップされたベース アドレスと、アダプターのデバイス拡張機能 (HwDeviceExtension によって指される) のマップされたアクセス範囲の長さの両方を格納する必要があります。
マップされたアドレス空間へのアクセスは、次の規則に従う必要があります。
- アドレスが I/O 空間にあることを示す InIoSpace がVIDEO_MEMORY_SPACE_IOの場合、この関数が返す仮想アドレスは、VideoPortReadPort Xxx、VideoPortWritePortXxx、VideoPortReadPortBuffer Xxx、VideoPortWritePortBufferXxx 関数 (Xxx は Uchar、Ushort、または Ulong) に渡す必要があります。
- アドレスが I/O 空間ではなくメモリ空間にあることを示す InIoSpace がVIDEO_MEMORY_SPACE_MEMORYの場合、この関数が返す仮想アドレスは、VideoPortReadRegister Xxx、VideoPortWriteRegisterXxx、VideoPortReadRegisterBuffer Xxx、VideoPortWriteRegisterBufferXxx 関数 (Xxx は Uchar、Ushort、または Ulong) に渡す必要があります。
- ドライバーは、 NumberOfUchars で区切られた範囲外のアドレスにアクセスすることはできません。
すべてのユニバーサル メモリ アーキテクチャ (UMA) ディスプレイ デバイスは、PCI バスではなく、メイン メモリ内にあるフレーム バッファーを使用します。 この場合、 VideoPortMapMemory を呼び出してフレーム バッファーをマップしないでください。 UMA フレーム バッファーをシステム空間にマップするには、 MmMapIoSpace を呼び出します。
ミニポート ドライバーが論理範囲をマップしたアダプターをサポートしていない場合は、 DriverEntry 関数に制御を返す前に 2 つの手順を実行する必要があります。 VideoPortFreeDeviceBase を呼び出して、以前にマップされた範囲をシステム領域からマップ解除し、 VideoPortGetAccessRanges または VideoPortVerifyAccessRanges を呼び出して、レジストリ内の範囲に対する要求を解放します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 以降のバージョンの Windows オペレーティング システムで使用できます。 |
対象プラットフォーム | デスクトップ |
Header | video.h (Video.h を含む) |
Library | Videoprt.lib |
[DLL] | Videoprt.sys |
IRQL | PASSIVE_LEVEL |