阅读:1041回复:8
设备栈和irp的关系
那位老兄可以说一说他们的关系! 谢谢!
|
|
沙发#
发布于:2002-08-12 09:50
irp在device stack从上到下的传递。
|
|
板凳#
发布于:2002-08-13 09:01
设备栈就是响应IRP的先后顺序
|
|
|
地板#
发布于:2002-08-13 09:13
谢谢你们的回答,我还有一个不明的地方是是我如何知道我程序在那一个级别,如PASSIVE_LEVEL、DISPATCH_LEVEL。
|
|
地下室#
发布于:2002-08-13 09:33
看看DDK的帮助KeGetCurrentIrql
KeLowerIrql, KeRaiseIrql 通常驱动各个例程有自己的IRQL |
|
|
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; } |
|
6楼#
发布于:2002-08-14 15:21
书还没怎么看就要紧问问题
你都Complete了还怎么向下传? 先看书吧 |
|
|
7楼#
发布于:2002-08-14 15:44
呵呵,那么凶?
|
|
8楼#
发布于:2002-08-14 15:51
有道理!
谢谢! |
|