gu_nj
驱动牛犊
驱动牛犊
  • 注册日期2003-06-18
  • 最后登录2004-09-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1181回复:4

请教irp的问题!

楼主#
更多 发布于:2003-10-07 11:22
  在看了walter Oney的书和结合一些例子后还是有疑惑,请教下面的问题:
  IRP的创建是在驱动中还是应用程序中执行的呢?
  我看到几个例子中的测试程序并没有IoAllocateIrp之类创建irp的函数,只有createfile,writefile之类函数调用设备,那么它是如何把相关参数传递到驱动中的呢?
  如果设备(并口)不支持pnp的话,就不能写成wdm模式,那么用2000ddk写成的遗留驱动移植到xp要用xpddk重新编译吗?
  对了并口(遗留设备)的简单读写操作,如果不写驱动,直接在应用程序中加ddk头文件,用write_port_xxx之类可以对设备进行操作吗?如果这样的话,写驱动意义何在呢?
  请高手不吝赐教,谢谢!
  
呵呵,加油啊!一定能行!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-10-07 12:21
IRP由IO manager创建,当然driver也可以创建。

NT内核不允许在ring3直接访问硬件。
gu_nj
驱动牛犊
驱动牛犊
  • 注册日期2003-06-18
  • 最后登录2004-09-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-07 12:48
  i/o管理器创建irp是个显视的过程吗,即是否系统自动完成的?那么应用程序如何填充irp中的参数呢?
  谢谢!
呵呵,加油啊!一定能行!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-10-07 16:59
app不用考虑什么irp
readfile、deviceiocontrol等API的参数填对就行了。
gu_nj
驱动牛犊
驱动牛犊
  • 注册日期2003-06-18
  • 最后登录2004-09-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-10-07 21:52
  I/O管理器把用户模式程序发送给驱动程序的数据复制到这个缓冲区,这也是创建IRP过程的一部分。这些数据可以是与WriteFile调用有关的数据,或者是DeviceIoControl调用中所谓的输入数据。对于读请求,设备驱动程序把读出的数据填到这个缓冲区,然后I/O管理器再把缓冲区的内容复制到用户模式缓冲区。
  我有些明白了,比方说writefile函数,我们可以把参数保存在开辟的数组中由I/O管理器填充在AssociatedIrp.SystemBuffer传递过去,驱动就可以读取了。
  谢谢!
呵呵,加油啊!一定能行!
游客

返回顶部