VideoPortSetTrappedEmulatorPorts 関数 (video.h)
VGA 互換 (SVGA) ミニポート ドライバーは、VideoPortSetTrappedEmulatorPorts 関数を呼び出して、X86 ベースのコンピューターで VDM (ビデオ ディスプレイ モニター) が全画面表示モードで実行されたときにトラップされる I/O ポートの一覧を動的に変更します。
構文
VIDEOPORT_DEPRECATED VIDEOPORT_API VP_STATUS VideoPortSetTrappedEmulatorPorts(
PVOID HwDeviceExtension,
ULONG NumAccessRanges,
[in] PVIDEO_ACCESS_RANGE AccessRange
);
パラメーター
HwDeviceExtension
ミニポート ドライバーのデバイス拡張機能へのポインター。
NumAccessRanges
AccessRange 配列内の要素の数を指定します。
[in] AccessRange
VIDEO_ACCESS_RANGE 要素の配列へのポインター。 各要素は、ミニポート ドライバーが VIDEO_PORT_CONFIG_INFOで設定 EmulatorAccessEntries の適切な部分範囲を記述します。 AccessRange 要素の RangeVisible メンバーを true に設定、全画面表示の MS-DOS アプリケーションで I/O ポート範囲に直接アクセスできるようにします。 RangeVisible メンバーを FALSE 設定すると、アプリケーションによって発行された が inに発生します。 INSB/INSW/INSD を、OUT または outSB/OUTSW/OUTSD s をその範囲にして、トラップされ、検証のために対応するミニポート ドライバー SvgaHwIoPortXxx 関数に転送されます。
VideoPortSetTrappedEmulatorPorts に渡される AccessRange 配列は、EmulatorAccessEntriesVIDEO_PORT_CONFIG_INFO 構造体の配列で設定 HwVidFindAdapter 関数が設定する I/O ポート範囲の適切なサブセットである必要があります。 EmulatorAccessEntries 配列に含まれていないアクセス範囲配列内のすべての I/O ポート範囲は、トラップされ、VDD ユーザー モードに反映されます。
戻り値
VideoPortSetTrappedEmulatorPorts は、トラップされたポートが正常に変更された場合にNO_ERRORを返します。 それ以外の場合は、ERROR_INVALID_PARAMETERを返します。
備考
既定では、全画面表示 MS-DOS アプリケーションが直接アクセスできる I/O ポートの AccessRange には、VIDEO_PORT_CONFIG_INFO 構造体の EmulatorAccessEntries 配列に対応する要素を持つ I/O ポート範囲を記述するアクセス範囲配列要素は含まれます。 つまり、対応するエミュレーター アクセス エントリを持つ I/O ポート範囲は、既定ではミニポート ドライバーの SvgaHwIoPortXxx 関数にフックされるため、アプリケーションによって発行された命令は検証のために SvgaHwIoPortXxx 関数に転送されます。
VGA と互換性のある SVGA ミニポート ドライバーは、VideoPortSetTrappedEmulatorPortsへの呼び出しを使用して、必要に応じて I/O ポートの範囲を有効または無効にすることができます。 有効なポート範囲を使用すると、アプリケーションが発行したアセンブリ命令をトラップしてミニポート ドライバーの SvgaHwIoPortXxx 関数に転送することなく、全画面表示の MS-DOS アプリケーションがこれらの I/O ポートに直接アクセスして検証を行えます。 このようなアプリケーションの直接 I/O ポート アクセスにより、ユーザーはビデオ I/O 応答時間を短縮できます。
VideoPortSetTrappedEmulatorPorts は、最初の要素から最後の要素までの AccessRange パラメーター配列をスキャンし、各要素の指示に応じて I/O ポートを有効または無効にします。 有効なポートの範囲 (RangeVisible メンバー TRUEに設定) は、ミニポート ドライバーに同じ範囲の重複する説明が含まれている場合は、同じ呼び出しで再度無効にできます RangeVisible メンバーが FALSE に設定されています。 ミニポート ドライバーは、AccessRange 配列の初期要素で幅広い I/O ポートを有効にし、VideoPortSetTrappedEmulatorPorts 呼び出すときに、後続の配列要素のポートのサブ範囲を選択的に無効にできることにも注意してください。
すべての全画面表示 MS-DOS アプリケーションは、x86 ベースのマシンで同じ IOPM (I/O アクセス許可マップ) を使用するため、有効または無効の I/O ポートの同じセットを使用します。 このような全画面表示アプリケーションへの各スイッチで、VGA と互換性のあるミニポート ドライバーの HwVidStartIO 関数は、IOCTL_VIDEO_ENABLE_VDM VRPで呼び出されます。 ミニポート ドライバーは、EmulatorAccessEntries 配列に任意のポートを含めることができる直接アクセス可能な I/O ポートの既定のセットを再初期化する必要があります。
x86 ベースのコンピューター上の全画面表示 MS-DOS アプリケーションにビデオ ポートへの直接アクセスを提供すると、アプリケーションが開始するビデオ操作が高速になりますが、VGA と互換性のあるすべての SVGA ミニポート ドライバーは、このようなアプリケーションがコンピューターをハングさせないように、重要な I/O ポートのサブセットをトラップし続ける必要があります。 特に、このようなミニポート ドライバーは、VGA と互換性のあるアダプター シーケンサーとその他の出力レジスタに常にアプリケーション I/O をトラップ する必要があります。 このようなミニポート ドライバーは、トラップし、I/O ポートの追加のアダプターに依存するサブセットのコンピューターがハングする可能性があるアプリケーションによって発行された直接 I/O を検証する必要があります。
VideoPortSetTrappedEmulatorPorts を再度呼び出し、AccessRange 要素の RangeVisible メンバーをリセットして FALSE を すると、その範囲のアプリケーションによって発行された命令が、SvgaHwIoPortXxx 関数 対応するミニポート ドライバーに転送されます。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 2000 以降のバージョンの Windows オペレーティング システムで使用できます。 |
ターゲット プラットフォーム の | デスクトップ |
ヘッダー | video.h (Video.h を含む) |
ライブラリ | Videoprt.lib |
DLL | Videoprt.sys |
IRQL | PASSIVE_LEVEL |
関連項目
HwVidFindAdapter を する
HwVidStartIO の