VP_STATUS SvgaHwIoPortUchar(
ULONG Context, | |
ULONG Port, | |
UCHAR AccessMode, | |
PUCHAR Data | |
); |
SvgaHwIoPortUchar traps an I/O port to which a full-screen MS-DOS application in an x86-based machine is sending UCHAR-sized data. Only miniport drivers of VGA-compatible SVGA adapters have SvgaHwIoPortXxx functions.
Parameters
Context
Specifies the miniport-defined context value that was set in the EmulatorAccessEntriesContext member of VIDEO_PORT_CONFIG_INFO.
Port
Specifies the mapped I/O port to be trapped.
AccessMode
Specifies the type of access to be trapped, which can be one or a combination (ORed) of the following values:
EMULATOR_READ_ACCESS
EMULATOR_WRITE_ACCESS
Data
Points to the byte to be transferred.
Return Value
SvgaHwIoPortUchar returns the final status of the operation.
Comments
SvgaHwIoPortUchar will intercept any byte access attempted by a full-screen MS-DOS application issuing either or both of the instructions OUT DX, AL and IN AL, DX.
If the miniport driver enables the Port for direct access by calling VideoSetTrappedEmulatorPorts, its SvgaHwIoPortUchar function will not be called. Such an application then will have direct access to the Port, unless the miniport driver disables the Port with another call to VideoSetTrappedEmulatorPorts.
If any application-issued x86 IN or OUT instruction(s) might affect the state of the VGA-compatible adapter sequencer register, miscellaneous output register, or any adapter-specific register and, thereby, cause the machine to hang, the miniport driver must not enable the port for direct access by calling VideoPortSetTrappedEmulatorPorts.
SvgaHwIoPortUchar must buffer subsequent instructions from the application to the Port and check that none can hang the machine. If the application issues any sequence of instructions that might hang the machine, SvgaHwIoPortUchar must discard the buffered instructions. Otherwise, it should output them, a UCHAR at a time, to the specified, mapped I/O port.
See Also
EMULATOR_ACCESS_ENTRY, SvgaHwIoPortUcharString, VIDEO_ACCESS_RANGE, VIDEO_PORT_CONFIG_INFO, VideoPortGetDeviceBase, VideoPortSetTrappedEmulatorPorts