DosCallback

This call provides a privilege level 2 IOPL segment to call a privilege level 3 application segment.

Syntax
DosCallback (Ring3Routine)

Parameters

 * Ring3Routine (PFN) - input : Address of the privilege level 3 application routine to be called.

Remarks
This function allows a routine executing with I/O privilege (at privilege level 2) to call a segment that is executing at privilege level 3 and also to have the target routine execute at privilege level 3; for example, not to allow/require the target routine to be privilege level 2 conforming.

The requested routine is given control at privilege level 3 and when it completes execution and returns, return is made to the privilege level 2 calling routine.

All registers except FLAGs are passed intact across this call return sequence and may be used to pass parameters or data. Any addresses passed from privilege level 2 to privilege level 3 must be based on privilege level 3 selectors only as the privilege level 3 code does not have proper addressability to any privilege level 2 data selectors.

The privilege level 2 stack can not be used to pass data to the privilege level 3 routine.

If DosCallback is used in a nested fashion such that a privilege level 3 routine issues a call to a privilege level 2 routine while performing a "Callback" operation (after being invoked by "Callback" but before having issued a Far RET back to the privilege level 2 code), any subsequent DosCallback requests must complete execution and issue their corresponding Far RETs in last-in-first-out (LIFO) order.

C

 * 1) define INCL_DOSDEVICES

VOID   DosCallback(Ring3Routine);

PFN    Ring3Routine;  /* Address of privilege level 3 routine */ 

MASM
 EXTRN DosCallback:FAR INCL_DOSDEVICES    EQU 1

PUSH@ OTHER   Ring3Routine  ;Address of privilege level 3 routine CALL  DosCallback

Returns NONE 