Windows内核代码片段
+ -

内核事件等待KeWaitForSingleObject超时处理和IPR的完成例程

2021-08-30 446 0

Windows内核中通过KeWaitForSingleObject等待事件完成,并且设置IPR的完成例程

NTSTATUS
IrpCompletionRoutine(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP           Irp,
    IN PVOID          Context
)
{
    UNREFERENCED_PARAMETER(Irp);
    UNREFERENCED_PARAMETER(DeviceObject);

    PKEVENT event = (PKEVENT)Context;
    if (event != NULL)
    {
        KeSetEvent(event, IO_NO_INCREMENT, FALSE);
    }

    return STATUS_MORE_PROCESSING_REQUIRED;
}

 VOID IrpCancelRoutine(PDEVICE_OBJECT devObj, PIRP Irp)
{
    UNREFERENCED_PARAMETER(devObj);
    IoReleaseCancelSpinLock(Irp->CancelIrql);
    Irp->IoStatus.Status = STATUS_CANCELLED;
    Irp->IoStatus.Information = 0;
    IoCompleteRequest(Irp, IO_NO_INCREMENT);
}

void Test()
{

     KEVENT event;
    KeInitializeEvent(&event, NotificationEvent, FALSE);

    IoCopyCurrentIrpStackLocationToNext(Irp);
    IoSetCompletionRoutine(Irp,
        (PIO_COMPLETION_ROUTINE)IrpCompletionRoutine,
        (PVOID) & event,
        TRUE,
        TRUE,
        TRUE);

    IoSetCancelRoutine(Irp, IrpCancelRoutine);

    status = IoCallDriver(DeviceObject, Irp);
    if (status == STATUS_PENDING)
    {
        LARGE_INTEGER interval;
        interval.QuadPart = 3000 * -10000;//100ns为单位,这时待待3秒种,负数
        status = KeWaitForSingleObject(&event,
            Executive,
            KernelMode,
            FALSE,
            &interval);
        if (status == STATUS_SUCCESS)
        {
            status = Irp->IoStatus.Status;
        }
        else
        {
            IoCancelIrp(Irp);
        }
        DbgPrint("SyncForwardIrp KeWaitForSingleObject:[%08x]\n", status);
    }
    else
    {
        DbgPrint("SyncForwardIrp IoCallDriver:[%08x]\n", status);
    }
}

0 篇笔记 写笔记

内核事件等待KeWaitForSingleObject超时处理和IPR的完成例程
Windows内核中通过KeWaitForSingleObject等待事件完成,并且设置IPR的完成例程NTSTATUSIrpCompletionRoutine( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, ......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!