/*++ BUILD Version: 0001 Copyright (c) 1990 Microsoft Corporation Module Name: ISVBOP.H Abstract: This is the header file supporting third party bops. isvbop.inc is the inc file for this h file. Note: Following include file uses 'DB' to define assembly macros. Some assemblers use 'emit' instead. If you are using such a compiler, you will have to change db's to emit's. --*/ #define BOP_3RDPARTY 0x58 #define BOP_UNSIMULATE 0xFE /* XLATOFF */ /** RegisterModule - This Bop call is made from the 16 bit module * to register a third party DLL with the bop * manager. This call returns a handle to the * 16bit caller which is to be used later to * dispatch a call to the DLL. * * INPUT: * Client DS:SI - asciiz string of DLL name. * Client ES:DI - asciiz string of Init Routine in the DLL. (Optional) * Client DS:BX - asciiz string to Dispatch routine in the DLL. * * OUTPUT: * SUCCESS: * Client Carry Clear * Client AX = Handle (non Zero) * FAILURE: * Client Carry Set * Client AX = Error Code * AX = 1 - DLL not found * AX = 2 - Dispacth routine not found. * AX = 3 - Init Routine Not Found * AX = 4 - Insufficient Memory * * NOTES: * RegisterModule results in loading the DLL (specified in DS:SI). * Its Init routine (specified in ES:DI) is called. Its Dispatch * routine (specified in DS:BX) is stored away and all the calls * made from DispatchCall are dispacthed to this routine. * If ES and DI both are null than the caller did'nt supply the init * routine. */ #define RegisterModule() _asm _emit 0xC4 _asm _emit 0xC4 _asm _emit BOP_3RDPARTY _asm _emit 0x0 /** UnRegisterModule - This Bop call is made from the 16 bit module * to unregister a third party DLL with the bop * manager. * * INPUT: * Client AX - Handle returned by RegisterModule Call. * * OUTPUT: * None (VDM Is terminated with a debug message if Handle is invalid) * * NOTES: * Use it if initialization of 16bit app fails after registering the * Bop. */ #define UnRegisterModule() _asm _emit 0xC4 _asm _emit 0xC4 _asm _emit BOP_3RDPARTY _asm _emit 0x1 /** DispacthCall - This Bop call is made from the 16 bit module * to pass a request to its DLL. * * INPUT: * Client AX - Handle returned by RegisterModule Call. * * OUTPUT: * None (DLL should set the proper output registers etc.) * (VDM Is terminated with a debug message if Handle is invalid) * * NOTES: * Use it to pass a request to 32bit DLL. The request index and the * parameters are passed in different registers. These register settings * are private to the 16bit module and its associated VDD. Bop manager * does'nt know anything about these registers. */ #define DispatchCall() _asm _emit 0xC4 _asm _emit 0xC4 _asm _emit BOP_3RDPARTY _asm _emit 0x2 /*** VDDUnSimulate16 * * This service causes the simulation of intel instructions to stop and * control to return to VDD. * * INPUT * None * * OUTPUT * None * * NOTES * This service is a macro intended for 16bit stub-drivers. At the * end of worker routine stub-driver should use it. */ #define VDDUnSimulate16() _asm _emit 0xC4 _asm _emit 0xC4 _asm _emit BOP_UNSIMULATE /* XLATON */ /* ASM RegisterModule macro db 0C4h, 0C4h, BOP_3RDPARTY, 0 endm UnRegisterModule macro db 0C4h, 0C4h, BOP_3RDPARTY, 1 endm DispatchCall macro db 0C4h, 0C4h, BOP_3RDPARTY, 2 endm VDDUnSimulate16 macro db 0C4h, 0C4h, BOP_UNSIMULATE endm */