VioGlobalReg allows a subsystem to receive notification at the completion of VIO calls issued by all applications running in full-screen sessions.
VioGlobalReg
ModuleName (PSZ) - input
BIT REGISTERED FUNCTION BIT REGISTERED FUNCTION ────────────────────────────────────────────────────────────────── 31 VioPrtScToggle 15 VioWrtCharStr 30 VioEndPopUp 14 VioWrtTTY 29 VioPopUp 13 VioWrtNCell 28 VioSavRedrawUndo 12 VioWrtNAttr 27 VioSavRedrawWait 11 VioWrtNChar 26 VioScrUnLock 10 VioReadCellStr 25 VioScrLock 9 VioReadCharStr 24 VioPrtSc 8 VioShowBuf 23 VioGetAnsi 7 VioSetMode 22 VioSetAnsi 6 VioSetCurType 21 VioScrollRt 5 VioSetCurPos 20 VioScrollLf 4 VioGetPhysBuf 19 VioScrollDn 3 VioGetBuf 18 VioScrollUp 2 VioGetMode 17 VioWrtCellStr 1 VioGetCurType 16 VioWrtCharStrAtt 0 VioGetCurPosFunctionMask2 (ULONG) - input
Bit
Notification of VIO calls issued within the hard error handler and DOS (real mode) sessions is not provided.
When control is routed to EntryPoint, the stack appears as it did after the original VIO call except that four additional values have been pushed onto the stack. The first is the index number (WORD) of the routine called. The second is a near pointer (WORD). The third is the caller's DS register (WORD). The fourth is the return address (DWORD) to the VIO router.
For example, if VioSetCurPos were a registered function, the stack would appear as if the following instruction sequence were executed if VioSetCurPos were called and control routed to EntryPoint:
┌───────────────────────────────────────────────────────┐ │ PUSH WORD Row │ │ PUSH WORD Column │ │ PUSH WORD VioHandle │ │ CALL FAR VioSetCurPos │ │ PUSH WORD Index │ │ CALL NEAR Entry point in Vio router │ │ PUSH WORD Caller's DS │ │ CALL FAR Dynamic link entry point │ └───────────────────────────────────────────────────────┘
The index numbers that correspond to the registered functions are listed below:
On entry to the global subsystem, AX contains the return code that is returned to the application that issued the VIO call. The global subsystem must return with all stack parameters and all general purpose registers, including AX, restored to the same values as on entry.
All VIO functions within a session are serialized on a thread basis. That is, when a global subsystem receives control, it can safely assume that it is not called again from the same session until the current call has completed. Note, however, that VIO calls across different sessions are not serialized.
VioGlobalReg may only be issued during system initialization. After system initialization, VioGlobalReg returns ERROR_VIO_REGISTER. A globally registered subsystem is active for the life of the system.
If multiple global subsystems are registered, they are given control in the order that they are registered.
A globally registered subsystem receives control on VIO calls issued from all full-screen sessions except the hard error handler and DOS (real mode) sessions.