_GetGlblRng0V86IntBase

include vmm.inc

VMMcall _GetGlblRng0V86IntBase

mov [Address], eax ; address for ring-0 V86 interrupt handlers


The _GetGlblRng0V86IntBase service returns the linear address used to manage ring-0 global V86 interrupt handlers.

This service is only available during initialization, and only available for Windows version 3.1 or later.

Parameters

This service has no parameters.

Return Value

The EAX register contains the linear address of the ring-0 handler.

Comments

Ring-0 global V86 interrupt handlers require segment selectors that permit execution in protected mode at ring 0. Furthermore, the selectors must represent memory that is not subject to page faults. Page faults are a potential problem, because part of the global code or data for a ring-0 V86 interrupt handler may overlap with the noninstanced part of an instance data page.

This service returns the linear address of the start of a V86 address space in which instance data pages are always present. The linear address is a duplicate of the V86 address 0:0 in the system virtual machine. The size of this duplicate mapping is 1 megabyte plus 64 kilobytes. This address space includes the XMS HMA (pages 100h-10Fh). The system sets up the duplicate mapping after all virtual devices have processed the Sys_Critical_Init message. The A20 state of the system virtual machine, or any other virtual machine, has no effect on the mapping used for this address space. The physical (global) HMA is always mapped in this address space. Thus, A20 is effectively always on (HMA is always enabled).

Virtual devices that use this address space must wait until the Device_Init
or Init_Complete message to request the address. This service returns zero
if a virtual device attempts to retrieve the address while processing the
Sys_Critical_Init message. If a virtual device needs the address sooner than
receipt of the Device_Init message, the virtual device can use a base address
of 0 to build the selectors. It can then edit the selectors when it processes the
Device_Init message, changing the base address to the correct location by
adding in the return value from this service.

Ring-0 global V86 interrupt handlers may only access global memory.

Instance data does not work properly in this address space. The local part of this address space is mapped with the system nul page.

Uses

EAX