hiahia
驱动牛犊
驱动牛犊
  • 注册日期2002-01-17
  • 最后登录2002-07-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2407回复:4

v86模式下的汇编程序如何与驱动程序进行通信?

楼主#
更多 发布于:2002-04-16 17:28
在v86模式下运行的汇编程序应该也会经过驱动程序吧?
那么,如果在汇编程序中加入out port,al之类的语句,驱动程序中的irp号是什么呢?
我现在的观点是:windows下的程序通过调用api函数来产生一个irp,然后由驱动程序通过判断irp号来进行相应的处理。然而,如果是汇编的话,如何控制呢?
hello
wuqix
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2008-06-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-04-17 01:15
我不明白你的意思,32位的windows,驱动都是在运行在保护模式下的ring0(打印机的有点特别),你的v86好象说的是应用程序,而应用程序的io请求是要经过环境子系统后,由内核组件实际做出irp的。在ring3,你的out port,al不能用,如果你想写汇编来调用windows的api,那么irp和调用的api是对应的,比如ReadFile对应IRP_MJ_READ。
houjzs
驱动牛犊
驱动牛犊
  • 注册日期2002-01-29
  • 最后登录2002-07-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-04-19 16:05
To 斑竹:
   hiahia说的是在v86下,调用out port ,al ...等指令。当然,w
                 ^^^
windows会接管调用的,hiahia的问题就是要问,windows是如何接管的。
wuqix
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2008-06-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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传给相应的驱动。
zzfd97
驱动小牛
驱动小牛
  • 注册日期2002-02-01
  • 最后登录2005-07-31
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-04-20 14:14
我也不知道,具体的情况,但是我知道的是,你要知道驱动程序中的IO口(IO管理器)以及中断,然后通过windows API来和驱动取的联系!
游客

返回顶部