阅读:2118回复:3
lu0:怎样新建一个IRP
一般使用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,难道他们不在驱动之间通信吗? |
|
最新喜欢:linwn |
沙发#
发布于:2001-06-14 17:23
StartingOffset 在读写的时候有效.否则没用.
如果目标DEVICE会对StartingOffset 解释,那就要根据目标 DEVICE的规范进行操作. |
|
|
板凳#
发布于:2001-06-14 17:36
我就是要进行读写,你说"如果目标DEVICE会对StartingOffset 解释,那就要根据目标 DEVICE的规范进行操作. ",能具体的说一下吗?需要进行赋值吗?
|
|
地板#
发布于:2001-06-15 15:09
假定你是要读硬盘.OFFSET就一定要是512的边界.(即硬盘扇区
大小尺寸)如果是COM口,OFFSET就不会有定义. 就无所谓设不设. |
|
|