如何在VxD中回调应用程序中的函数
Hi, 我想在应用程序中传给VxD一个函数的地址,以便VxD需要时进行回调
我的用法如下:
应用程序中:
typedef void(_cdecl FAR *MyCAllback)(void);
MyCallback MyCallbackAddress;
void _cdecl FAR MyCallbackHandler(void)
{
....
}
初始化:MyCallbackAddress = MyCallbackHandler;
然后把MyCallbackAddress用DeviceIoControl传给VxD
在VxD中:
typedef void(_cdecl FAR *MyCAllback)(void);
MyCallback MyCallbackAddress;
pcrs->CWRS.Client_SI = *(WORD*)(&pData[0]);
pcrs->CRS.Client_ES = *(WORD*)(&pData[2]);
MyCallbackAddress =(MyCallback*)Map_Flat(CLIENT_ES, CLIENT_SI);
然后调用时:
MyCallbackAddress();//应用程序死掉了??????,why?????
问题点数:250、回复次数:14Top
1 楼Kronus(叶落归根)回复于 2000-12-29 00:06:00 得分 0
我查了VtoolsD的帮助:
是不是Shell_Event(...)可以支持回调V86的应用程序?但是我尝试了多次没有成功。
还有在PM模式下,VWIN32_QueueUserApc (...)怎么使用?
Top
2 楼Kronus(叶落归根)回复于 2000-12-29 18:59:00 得分 0
我试了用Simulate_Far_Jum(...)也没有成功,大师在哪?????Top
3 楼mmmyyyaaa(编程浪子)回复于 2000-12-29 19:05:00 得分 125
为什么不使用发送自定义消息呢?
在Vxd 和应用程序定义一个相同的自定义消息,在vxd的初始化是通过参数把窗口的句柄传递给vxd,在vxd中可以向指定的窗口发送一个消息,而应用程序可以在消息处理函数中做各种处理。
你是不是在中断的时候调用,你能捕捉到中断吗?我曾经试图捕捉打印口的中断,没有成功,如果你的中断捕捉很成功,可以告诉我。
如果你需要我的消息发送和接受函数,给我发个email,我给你发过去。mmmyyyaaa@sina.comTop
4 楼mmmyyyaaa(编程浪子)回复于 2000-12-29 19:12:00 得分 0
使用消息,很安全,调试的时候不会死,顶多不干活Top
5 楼Kronus(叶落归根)回复于 2000-12-29 19:19:00 得分 0
因为消息有延时,而这个该死的应用程序要求必须及时响应,只能用Callback的方法。
老兄,你有这方面的例子吗?
谢谢
我的中断捕捉已经成功,你是要求在V86下还是PM下?Top
6 楼Kronus(叶落归根)回复于 2000-12-29 19:21:00 得分 0
我的oicq:2078570, 欢迎交流Top
7 楼Kronus(叶落归根)回复于 2000-12-29 21:01:00 得分 0
以下是我尝试Simulate_Far_Jmp的程序:
有一个奇怪的现象,如果加上Save_Client_State和EndJ_Client_State则死机,还有如果加上Resume_Exec也死机????????
//Save_Client_State(pClientStruct);
//Begin_Nest_Exec();
Begin_Nest_V86_Exec();
Disable_VM_Ints();
Simulate_Far_Jmp(MyCallBackAddressSeg, MyCallBackAddressOff);
//Resume_Exec();
Enable_VM_Ints();
End_Nest_Exec();
//Restore_Client_State(pClientStruct);
why???????????????????
Top
8 楼Kronus(叶落归根)回复于 2000-12-30 00:48:00 得分 0
大师在不在,我都快要黔驴技穷了!!!!!Top
9 楼Kronus(叶落归根)回复于 2000-12-30 13:10:00 得分 0
help!Top
10 楼znsoft(中文网址: 驱动开发网)回复于 2001-01-02 10:41:00 得分 125
何别呢, 让你上我的网站看你不去, 这下该后悔了吧。 我的站上有呀
http://www.driverdevelop.comTop
11 楼Kronus(叶落归根)回复于 2001-01-02 17:54:00 得分 0
谢谢你,但是那个方法我一直我没有实验成功:(Top
12 楼Kronus(叶落归根)回复于 2001-01-03 13:42:00 得分 0
我又加了150分,Jansen Zhu, Help!Top
13 楼Kronus(叶落归根)回复于 2001-01-04 02:52:00 得分 0
不要见死不救啊!!!!!Top
14 楼Kronus(叶落归根)回复于 2001-01-06 14:52:00 得分 0
终于搞定了!!!!!!!!!!!!!
分数不能赏给自己,那就送给各位了Top
相关问题
- 如何用shell函数调用带参数的应用程序?
- 在VC中,调用另外一个应用程序的函数是什么???
- 能把自定义函数放在二进制文件里,再在应用程序里调用该函数吗?
- Com应用程序QueryInterface()函数问题
- VC++.NET 里面创建windows 应用程序和创建MFC应用程序有什么区别,windows 应用程序调用MFC函数是不是有什么冲突,有没有这方面资料!
- 如何在webservice的一个函数里返回多个参数给远程调用的应用程序?
- 主应用程序调用子应用程序?50分
- 急!急!请教!用InstallShield6 for VC6.0 中使用LaunchApp 和LaunchAppAndWait函数调用外部应用程序,为何编译出现vc6 不支持此函数的
- 急!PB中获得当前应用程序路径的函数?
- 如何用SENDMESSAGE函数给一个应用程序送按键?




