jfory
驱动小牛
驱动小牛
  • 注册日期2002-05-14
  • 最后登录2003-06-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1041回复:8

设备栈和irp的关系

楼主#
更多 发布于:2002-08-12 09:31
那位老兄可以说一说他们的关系! 谢谢!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-08-12 09:50
irp在device stack从上到下的传递。
Iamme
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2005-10-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-13 09:01
设备栈就是响应IRP的先后顺序
Go,go ahead
jfory
驱动小牛
驱动小牛
  • 注册日期2002-05-14
  • 最后登录2003-06-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-08-13 09:13
谢谢你们的回答,我还有一个不明的地方是是我如何知道我程序在那一个级别,如PASSIVE_LEVEL、DISPATCH_LEVEL。
Iamme
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2005-10-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-13 09:33
看看DDK的帮助KeGetCurrentIrql
KeLowerIrql, KeRaiseIrql
通常驱动各个例程有自己的IRQL
Go,go ahead
jfory
驱动小牛
驱动小牛
  • 注册日期2002-05-14
  • 最后登录2003-06-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-08-14 14:08
----------------------------------
设备栈就是响应IRP的先后顺序
----------------------------------
设备栈就是响应IRP的先后顺序
---------------------------------
驱动程序A位于驱动程序B,当上A驱动响应IRP_MJ_WRITE后它如何将IRP_MJ_WRITE发送到下一级驱动B的呢?
代码如下:
NTSTATUS DriverEntry(....)
{......
    MajorFunction[IRP_MJ_CLOSE] = HidKbdWrite;
......
}
NTSTATUS HidKbdWrite( IN PDEVICE_OBJECT fdo,
IN PIRP Irp)
{
PHIDKBD_DEVICE_EXTENSION dx = (PHIDKBD_DEVICE_EXTENSION)fdo->DeviceExtension;

PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp);
ULONG BytesTxd = 0;
NTSTATUS status = STATUS_SUCCESS;

// Get call parameters
LONGLONG FilePointer = IrpStack->Parameters.Write.ByteOffset.QuadPart;
ULONG WriteLen = IrpStack->Parameters.Write.Length;
DebugPrint(\"Write %d bytes from file pointer %d\",(int)WriteLen,(int)FilePointer);

if( FilePointer<0)
status = STATUS_INVALID_PARAMETER;

DebugPrint(\"Write: %d bytes written\",(int)BytesTxd);

// Complete IRP
CompleteIrp(Irp,status,BytesTxd);
return status;
}

NTSTATUS CompleteIrp( IN PIRP Irp, IN NTSTATUS status, IN ULONG info)
{
Irp->IoStatus.Status = status;
Irp->IoStatus.Information = info;
IoCompleteRequest(Irp,IO_NO_INCREMENT);
return status;
}

Iamme
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2005-10-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-08-14 15:21
书还没怎么看就要紧问问题
你都Complete了还怎么向下传?
先看书吧
Go,go ahead
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2002-08-14 15:44
呵呵,那么凶?
jfory
驱动小牛
驱动小牛
  • 注册日期2002-05-14
  • 最后登录2003-06-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-08-14 15:51
有道理!
谢谢!
游客

返回顶部