sxmize
驱动牛犊
驱动牛犊
  • 注册日期2008-10-31
  • 最后登录2012-05-04
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望214点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1386回复:1

请问tooflat提供的透明加密代码中的SfForwardIrpSyncronously函数的作用?

楼主#
更多 发布于:2009-03-06 17:08
请教各位:
从字面上看,这个函数是IRP同步的作用,
代码就是下发IRP,然后等待完成函数的KeSetEvent后继续执行,请问这个函数用在SfCreate、SfCleanup等函数中有什么用??

谢谢!

NTSTATUS
SfForwardIrpSyncronouslyCompletion (
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp,
    IN PVOID Context
    )
{
    PKEVENT Event = Context;

    UNREFERENCED_PARAMETER(DeviceObject);

    ASSERT(IS_MY_DEVICE_OBJECT(DeviceObject));

    if (Irp->PendingReturned)
    {
        KeSetEvent(Event, IO_NO_INCREMENT, FALSE);
    }

    return STATUS_MORE_PROCESSING_REQUIRED;
}

NTSTATUS
SfForwardIrpSyncronously(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
{
    KEVENT Event;
    NTSTATUS Status;

    KeInitializeEvent(&Event, NotificationEvent, FALSE);
    IoCopyCurrentIrpStackLocationToNext(Irp);
    IoSetCompletionRoutine(Irp, SfForwardIrpSyncronouslyCompletion, &Event, TRUE, TRUE, TRUE);
    Status = IoCallDriver(DeviceObject, Irp);
    if (STATUS_PENDING == Status)
    {
        KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
        Status = Irp->IoStatus.Status;
    }
    return Status;
sxmize
驱动牛犊
驱动牛犊
  • 注册日期2008-10-31
  • 最后登录2012-05-04
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望214点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-03-12 10:15
自己顶一个
游客

返回顶部