本文详细介绍C++语言的VxD与外界通信的所有接口
VMM动态装卸VxD时,以命令码0及-1发送W32_DEVICEIOCONTROL消息给VxD,故Vireo公司建议命令码C取[2048,4095]。
2. 被Real/V86模式下16位应用程序访问的接口
my.VxD先要指定接口ID(如3180h),再在API页上选Standard Application Entry Points框中的Real/V86 Mode标签,即可生成MyDevice::V86_API_Entry入口,访问它的汇编程序是:
entry dd ?
mov ax,1684h ;功能号
mov bx,3180h ;接口ID
int 2fh ;取入口的段/偏移到es/di,成功时,di及es返回非零值
mov ax,es
or ax,di
jz L0
mov word ptr [entry],di
mov word ptr [entry+2],es
mov ah,码C
call [entry]
L0: 错误处理
MyDevice::V86_API_Entry(VMHANDLE hVM,CLIENT_STRUCT* p)入口可以是:
if (p->CBRS.Client_AH==码C) p->CBRS.Client_AL=0;
3. 被保护模式下16位应用程序访问的接口
与第2条类似,但选Protected Mode标签,即可生成MyDevice::PM_API_Entry入口,访问它的程序是:
int PASCAL WinMain(HANDLE h1,HANDLE h0,LPSTR lpCmdLine,int nCmdShow){
FARPROC entry; //32位
_asm{
mov ax,1684h
mov bx,3180h
int 2fh ;取入口的选择符/偏移到es/di,成功时,di及es返回非零值
mov ax,es
or ax,di
jz L0
mov word ptr [entry],di
mov word ptr [entry+2],es
mov ah,码C
call [entry]
}
责编:豆豆技术应用