blue
驱动大牛
驱动大牛
  • 注册日期2001-04-25
  • 最后登录2010-10-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:2118回复:3

lu0:怎样新建一个IRP

楼主#
更多 发布于:2001-06-14 14:37
一般使用IRP都是接收一个IRP,然后改造它。而我要在一个驱动与另一个驱动通信,需要新造一个IRP。我知道先利用函数;
PIRP   IoBuild Asynchronous FsdRequest(
                 IN ULONG  MajorFunction,
                 IN PDEVICE_OBJECT  DeviceObject,
                 IN OUT PVOID  Buffer  OPTIONAL,
                 IN ULONG  Length  OPTIONAL,
                 IN PLARGE_INTEGER  StartingOffset  OPTIONAL,
                 IN PIO_STATUS_BLOCK  IoStatusBlock  OPTIONAL
                 );
或是
PIRP  IoBuildSynchronousFsdRequest(
                 IN ULONG  MajorFunction,
                 IN PDEVICE_OBJECT  DeviceObject,
                 IN OUT PVOID  Buffer  OPTIONAL,
                 IN ULONG  Length  OPTIONAL,
                 IN PLARGE_INTEGER  StartingOffset  OPTIONAL,
                 IN PKEVENT  Event,
                 OUT PIO_STATUS_BLOCK  IoStatusBlock
                 );
再用IoCallDriver(...)就差不多了,问题是 StartingOffset  参数如何取得?
不知为什么,很少有人新建IRP,难道他们不在驱动之间通信吗?

最新喜欢:

linwnlinwn
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-06-14 17:23
StartingOffset 在读写的时候有效.否则没用.
如果目标DEVICE会对StartingOffset 解释,那就要根据目标
DEVICE的规范进行操作.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
blue
驱动大牛
驱动大牛
  • 注册日期2001-04-25
  • 最后登录2010-10-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-06-14 17:36
 我就是要进行读写,你说"如果目标DEVICE会对StartingOffset 解释,那就要根据目标 DEVICE的规范进行操作. ",能具体的说一下吗?需要进行赋值吗?
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-06-15 15:09
假定你是要读硬盘.OFFSET就一定要是512的边界.(即硬盘扇区
大小尺寸)如果是COM口,OFFSET就不会有定义. 就无所谓设不设.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
游客

返回顶部