次の方法で共有


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

関連項目

EMULATOR_ACCESS_ENTRY

HwVidFindAdapter する

HwVidStartIO

VIDEO_ACCESS_RANGE

VIDEO_PORT_CONFIG_INFO

VideoPortSynchronizeExecution