阅读:2407回复:4
v86模式下的汇编程序如何与驱动程序进行通信?
在v86模式下运行的汇编程序应该也会经过驱动程序吧?
那么,如果在汇编程序中加入out port,al之类的语句,驱动程序中的irp号是什么呢? 我现在的观点是:windows下的程序通过调用api函数来产生一个irp,然后由驱动程序通过判断irp号来进行相应的处理。然而,如果是汇编的话,如何控制呢? |
|
|
沙发#
发布于:2002-04-17 01:15
我不明白你的意思,32位的windows,驱动都是在运行在保护模式下的ring0(打印机的有点特别),你的v86好象说的是应用程序,而应用程序的io请求是要经过环境子系统后,由内核组件实际做出irp的。在ring3,你的out port,al不能用,如果你想写汇编来调用windows的api,那么irp和调用的api是对应的,比如ReadFile对应IRP_MJ_READ。
|
|
板凳#
发布于:2002-04-19 16:05
To 斑竹:
hiahia说的是在v86下,调用out port ,al ...等指令。当然,w ^^^ windows会接管调用的,hiahia的问题就是要问,windows是如何接管的。 |
|
地板#
发布于:2002-04-20 03:57
呵呵,这个样子啊。
Ring3的out port ,al在2000/nt/xp下执行了以后会引起保护性错误,因为执行这个指令的时候,cpu的硬件等级不够,所以cpu接管,然后触发一个trap,再由windows捕获后,给你一个对话框。如果你调win32 api来做的话,和用c写没有什么道理上的不同,都是由api再内部来一个int 2e的trap,经windows相应的服务程序判断为合法调用以后,进入内核,内核的io管理器之类的组件作相应的处理,比如实际生成一个irp,把用户层的地址转换到核心层之类,再根据调用api时要求的驱动名,把这个irp传给相应的驱动。 |
|
地下室#
发布于:2002-04-20 14:14
我也不知道,具体的情况,但是我知道的是,你要知道驱动程序中的IO口(IO管理器)以及中断,然后通过windows API来和驱动取的联系!
|
|