quanfuliang519
驱动牛犊
驱动牛犊
  • 注册日期2007-04-11
  • 最后登录2008-04-16
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:1373回复:0

向大家请教

楼主#
更多 发布于:2007-04-11 21:13
  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干什么呢?
游客

返回顶部