3.2 页面异常-2

系列文章目录

文章目录


IoPageRead()

c 复制代码
/*
 * @implemented
 */
NTSTATUS
NTAPI
IoPageRead(IN PFILE_OBJECT FileObject,
           IN PMDL Mdl,
           IN PLARGE_INTEGER Offset,
           IN PKEVENT Event,
           IN PIO_STATUS_BLOCK StatusBlock)
{
    PIRP Irp;
    PIO_STACK_LOCATION StackPtr;
    PDEVICE_OBJECT DeviceObject;
    IOTRACE(IO_API_DEBUG, "FileObject: %p. Mdl: %p. Offset: %p \n",
            FileObject, Mdl, Offset);

    /* Get the Device Object */
    DeviceObject = IoGetRelatedDeviceObject(FileObject);

    /* Allocate IRP */
    Irp = IoAllocateIrp(DeviceObject->StackSize, FALSE);
    if (!Irp) return STATUS_INSUFFICIENT_RESOURCES;

    /* Get the Stack */
    StackPtr = IoGetNextIrpStackLocation(Irp);

    /* Create the IRP Settings */
    Irp->MdlAddress = Mdl;
    Irp->UserBuffer = MmGetMdlVirtualAddress(Mdl);
    Irp->UserIosb = StatusBlock;
    Irp->UserEvent = Event;
    Irp->RequestorMode = KernelMode;
    Irp->Flags = IRP_PAGING_IO |
                 IRP_NOCACHE |
                 IRP_SYNCHRONOUS_PAGING_IO |
                 IRP_INPUT_OPERATION;
    Irp->Tail.Overlay.OriginalFileObject = FileObject;
    Irp->Tail.Overlay.Thread = PsGetCurrentThread();

    /* Set the Stack Settings */
    StackPtr->Parameters.Read.Length = MmGetMdlByteCount(Mdl);
    StackPtr->Parameters.Read.ByteOffset = *Offset;
    StackPtr->MajorFunction = IRP_MJ_READ;
    StackPtr->FileObject = FileObject;

    /* Call the Driver */
    return IofCallDriver(DeviceObject, Irp);
}


 
相关推荐
程序员黑豆15 分钟前
Java包装类:基本类型与对象的桥梁
java·前端·ai编程
致Great1 小时前
DeepSeek Harness插件开发实战教程:我让它自己写了一个 arXiv 搜索插件
算法
bugcome_com3 小时前
JWT 知识小课堂:从入门到精通,一文吃透 JSON Web Token
前端·json
张洛闻Eren3 小时前
MySQL 维护稳定系统【MySQL第二课】
linux·数据库·mysql·云原生
To_OC3 小时前
写了三天 Next.js,我的 React 世界观被拆了又装回去
前端·全栈·next.js
ltl3 小时前
Linux 异步 I/O:epoll 与 io_uring 对比
linux
独泪了无痕3 小时前
viewer.js 安装与配置指南:实现图片预览功能
前端·vue.js
ltl3 小时前
压缩算法工程实践:吞吐、比率与 CPU 权衡
linux
mldong4 小时前
"applicant" 契约:退回发起人的闭环设计
java·架构
月华路4 小时前
G1 垃圾回收:脏卡队列、记忆集与并发精化线程机制
java·开发语言