阅读:1373回复:0
向大家请教
NTSTATUS ForwardAndWait(PDEVICE_OBJECT fdo, PIRP Irp)
{ KEVENT event; <--1 KeInitializeEvent(&event, NotificationEvent, FALSE); IoCopyCurrentIrpStackLocationToNext(Irp); <--2 IoSetCompletionRoutine(Irp, <--3 (PIO_COMPLETION_ROUTINE) OnRequestComplete, (PVOID) &event, TRUE, TRUE, TRUE); PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension; IoCallDriver(pdx->LowerDeviceObject, Irp); <--4 KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL); <--5 return Irp->IoStatus.Status; <--6 } 现在小弟我有一个疑问:IoCallDriver是以什么方式进行的呢: 若它以发送消息的形式将IRP发送,那它有怎么接收下层驱动的返回呢 若它以调用的方式,调用下层处理该IRP的函数那还要EVENT干什么呢? |
|