VXD SERVICE的问题

陆麟
转载请征得作者同意.
2000.1.24



1.VXD本身调用没有硬规则.和汇编一样.用寄存器传参数.但是通常FSD用C调用.
2.VXD SERVICE调用没有特权级变换.调用其实是有INT20H实现的. VXDCALL被编译成
INT20H
DW VXDID
DW SERVICETAG,
当VXD首次调用一VXD服务时,,这些代码被INT20H解释并且INT20H修改代码段,使之成为一个远跳转指令.被CALL的VXD自己定义调用约定.CALLER必须遵守被调用者的约定,MS没有硬规定.VXD SERVICE仅对VXD开放.RING3不能直接调用VXD SERVICE. 因为INT20H会检查调用是否从RING0发出,如果不是RING0发出,就被过滤调了.对RING3提供的SERVICE需要其他接口.

Best Regards,
Lu Lin
For more information, please visit Inside Programming
http://lu0.126.com
[email protected]
----- Original Message -----
From: Vaxi
To: 陆麟
Sent: Sunday, January 23, 2000 12:46 PM
Subject: 真不好意思,又有问题要请教你了
 

1〉Win9x VXD 重的函数是遵守什么调用规则呢?StdCall or Pascal or FastCall
    函数是自己清除栈上的参数,还是让调用方来清除呢?

2〉VXD Service 的调用是否有特权级的变换呢?被调用时他的栈上都有什么东西呢?
    是否有外层的SS ESP 呢?的一个参数又应该是 ESP 加上几呢?

谢谢。