Ntfs!_LFCB结构如何构建出来的--从Ntfs!NtfsMountVolume到Ntfs!LfsAllocateLfcb

Ntfs!LfsRestartLogFile函数分析之调用Ntfs!LfsAllocateLfcb函数初始化Lfcb->LbcbWorkque

第一部分:

F:\srv03rtm>grep "NtfsStartLogFile" -rn F:\srv03rtm\base\fs\ntfs |grep -v "inary"
F:\srv03rtm\base\fs\ntfs/fsctrl.c:1890:            NtfsStartLogFile( Vcb->LogFileScb,
F:\srv03rtm\base\fs\ntfs/logsup.c:130:#pragma alloc_text(PAGE, NtfsStartLogFile)
F:\srv03rtm\base\fs\ntfs/logsup.c:3556:NtfsStartLogFile (
F:\srv03rtm\base\fs\ntfs/logsup.c:3587:    DebugTrace( +1, Dbg, ("NtfsStartLogFile:\n") );
F:\srv03rtm\base\fs\ntfs/logsup.c:3634:    DebugTrace( -1, Dbg, ("NtfsStartLogFile -> VOID\n") );
F:\srv03rtm\base\fs\ntfs/mp/ntfs.prf:348:NtfsStartLogFile@8
F:\srv03rtm\base\fs\ntfs/ntfsproc.h:3031:NtfsStartLogFile (

NTSTATUS
NtfsMountVolume (
    IN PIRP_CONTEXT IrpContext,
    IN PIRP Irp
    )
{

        //
        //  Create the log file Scb and really look up its size.
        //

        NtfsOpenSystemFile( IrpContext,
                            &Vcb->LogFileScb,
                            Vcb,
                            LOG_FILE_NUMBER,
                            0,
                            $DATA,
                            TRUE );

        try {

            Status = STATUS_SUCCESS;
            UnrecognizedRestart = FALSE;

            NtfsStartLogFile( Vcb->LogFileScb,
                              Vcb );

第二部分:

VOID
NtfsStartLogFile (
    IN PSCB LogFileScb,
    IN PVCB Vcb
    )
{


    Vcb->LogHeaderReservation = LfsOpenLogFile( LogFileScb->FileObject,
                                                UnicodeName,
                                                1,
                                                0,
                                                LogFileScb->Header.AllocationSize.QuadPart,
                                                &LfsInfo,
                                                &Vcb->LogHandle,
                                                &Vcb->LfsWriteData );

F:\srv03rtm>grep "LfsOpenLogFile" -rn F:\srv03rtm\base\fs\ntfs |grep -v "inary"
F:\srv03rtm\base\fs\ntfs/logsup.c:3623:    Vcb->LogHeaderReservation = LfsOpenLogFile( LogFileScb->FileObject,
F:\srv03rtm\base\fs\ntfs/mp/ntfs.prf:389:LfsOpenLogFile@36

第三部分:

ULONG
LfsOpenLogFile (
    IN PFILE_OBJECT LogFile,
    IN UNICODE_STRING ClientName,
    IN USHORT MaximumClients,
    IN ULONG LogPageSize OPTIONAL,
    IN LONGLONG FileSize,
    IN OUT PLFS_INFO LfsInfo,
    OUT PLFS_LOG_HANDLE LogHandle,
    OUT PLFS_WRITE_DATA WriteData
    )
{


            //
            //  Perform Lfs restart on this file object.
            //

            ThisLfcb = NewLfcb = LfsRestartLogFile( LogFile,
                                                    MaximumClients,
                                                    LogPageSize,
                                                    FileSize,
                                                    LfsInfo,
                                                    WriteData );

第四部分:

LfsAllocateLfcb
LfsRestartLogFile

PLFCB
LfsRestartLogFile (
    IN PFILE_OBJECT LogFile,
    IN USHORT MaximumClients,
    IN ULONG LogPageSize OPTIONAL,
    IN LONGLONG FileSize,
    IN OUT PLFS_INFO LfsInfo,
    OUT PLFS_WRITE_DATA WriteData
    )


   try {

        //
        //  Normalize the values passed in with this call.
        //

        LfsNormalizeBasicLogFile( &FileSize,
                                  &LogPageSize,
                                  &MaximumClients,
                                  UseDefaultLogPage );

        //
        //  Allocate an Lfcb to use for this file.
        //

        ThisLfcb = LfsAllocateLfcb( LogPageSize, FileSize );

第五部分:Ntfs!_LFCB结构的建立

PLFCB
LfsAllocateLfcb (
    IN ULONG LogPageSize,
    IN LONGLONG FileSize
    )
{

        //
        //  Initialize the Lbcb links.
        //

        InitializeListHead( &Lfcb->LbcbWorkque );
        InitializeListHead( &Lfcb->LbcbActive );

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86082.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Domain层到底是什么

层级主要职责是否依赖 iOS / UIKit?Presentation (UI)视图、控制器、ViewModel,将用户操作转成「意图」,把结果渲染到屏幕是Domain业务规则 与 用例 (Use Case),维护系统在概念上的真实世界模型否(纯 Swift&#xff0c…

Rust 服务端项目分层结构

DDD src/ ├── main.rs # 程序入口,负责启动和依赖注入 ├── lib.rs # 公共库入口,便于单元测试和复用 ├── config.rs # 配置管理(如数据库、端口、环境变量等) ├── entities/ …

山东大学《Web数据管理》期末复习宝典【万字解析!】

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏:🏀山东大学期末速通专用_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1…

解决“在EFI系统上,Windows只能安装到GPT磁盘“错误

环境:AMI BIOS(2012 American Megatrends,Inc.),清华同方笔记本,windows10安装U盘 背景:使用安装U盘安装系统时,在选择磁盘下一步,出现了“无法在驱动器0的分区1上安装windows(w)。…

NetworkTermination-原始固件-分区备份

在对设备进行固件分区备份之前,我们需要通过设备的 debug 接口进行连接。设备的 debug 接口位于左下角,连接时需设置波特率为 115200。 ssh连接 设备默认的 SSH 服务配置较为严格,端口号为 33998,且不允许通过密码直接登录。我们可…

Network Manager客户端制作小结

关联资料 Unity 入门到精通(沈军) c语言中的局部变量和全局变量_c语言全局变量-CSDN博客 关键词 本地玩家信息:LocalClientId 网络状态及网络序列化 网络游戏服务器和客户端 ClientRpc与ServerRpc 变量作用域与作用周期 Network Manager —…

Python 开发环境全栈隔离架构:从 Anaconda 到 PyCharm 的四级防护体系

【深度探索】Windows 下 Python 多版本虚拟环境管理与隔离实战:支持 Anaconda、Poetry、Pipenv、venv、uv、Hatch、PyCharm、VS Code 全工具链方案-CSDN博客 【零基础】Python 多版本虚拟环境管理与隔离实战——支持 Anaconda、Poetry、Pipenv、venv、uv、Hatch、Py…

Redis集群性能优化实战指南

Redis集群性能优化实战指南 一、技术背景与应用场景 随着互联网服务规模不断扩大,缓存层承载了海量的读写请求。Redis因其高性能和丰富的数据结构被广泛用于缓存、排行榜、会话存储等场景。单节点Redis在并发、内存和持久化方面会遇到瓶颈,Redis集群&a…

使用 Telegraf 向 TDengine 写入数据

Telegraf 是一款十分流行的指标采集开源软件。在数据采集和平台监控系统中,Telegraf 可以采集多种组件的运行信息,而不需要自己手写脚本定时采集,降低数据获取的难度。 只需要将 Telegraf 的输出配置增加指向 taosAdapter 对应的 url 并修改…

华为云 Flexus+DeepSeek 征文|华为云Dify 平台 CCE 高可用集群部署与大模型高质量知识库构建指南

华为云 FlexusDeepSeek 征文|华为云Dify 平台 CCE 高可用集群部署与大模型高质量知识库构建指南 文章目录 华为云 FlexusDeepSeek 征文|华为云Dify 平台 CCE 高可用集群部署与大模型高质量知识库构建指南前言1、ModelArts Studio大模型开通2、Dify平台CC…

测试校招/应届刷题知识路线

需要重点关注计算机基础知识和测试相关技能 对于即将参加校招或应届的同学,测试岗位需要重点关注计算机基础知识和测试相关技能。 掌握操作系统、计算机网络、数据库等计算机基础,同时熟悉测试基础理论、测试方法、自动化测试工具 (如 Selenium、JMeter)和编程语言(如 Py…

华为云Flexus+DeepSeek征文 | 基于华为云的 Dify-LLM 企业级 AI 开发平台部署指南

前言 在人工智能技术迅猛发展的今天,大语言模型(LLM)已成为推动企业智能化转型的核心引擎。然而,如何高效、安全地将 LLM 能力整合到实际业务场景中,仍然是许多开发者面临的挑战。Dify 作为一款开源的 LLM 应用开发平…

Dify×奇墨科技:开源+本土化,破解企业AI落地难题

在人工智能技术迅猛发展的今天,企业亟需高效、安全的AI应用开发工具。开源LLMOps平台Dify.AI凭借其灵活性与开放性,已成为开发者构建AI应用的首选之一。而它在中国市场的规模化落地,离不开本土合作伙伴的强力支撑——奇墨科技作为Dify中国大陆…

Vue3+Spring boot 前后端防抖增强方案

我将基于您提供的防抖切面代码进行改进,主要优化点包括使用Redis实现分布式防抖、增强键生成策略、改进异常处理等。以下是完整的改进方案: 1. 改进的防抖注解 (Debounce.java) java 复制 下载 package com.weiyu.anno;import java.lang.annotation…

Cppcheck 使用教程:本地 + CMake + GitHub Actions 自动分析实战

Cppcheck 是一款强大的 C/C 静态分析工具,专注于发现内存泄漏、未初始化变量、死代码、未使用函数等问题。它不依赖编译器,适合在持续集成和本地开发中快速定位潜在 Bug。 本文将手把手教你如何: 安装 Cppcheck 在命令行中使用 集成到 CMak…

Mac Parallels Desktop Kali 2025 代理设置

Mac Parallels Desktop Kali 2025 代理设置 核心步骤: kali设置桥接wifi 查看kali和主机ip 运行命令ifconfig查看kali ip: mac主机ip: kali设置proxy ip填写主机ip,port为主机proxy端口 enjoy

通义灵码编程智能体深度评测(Qwen3模型+终端操作+MCP工具调用实战)

1 引言 随着AI编程助手进入工具链集成时代,通义灵码作为阿里云推出的智能编程解决方案,其Qwen3模型与MCP(Multi-tool Calling Platform)的协同能力引发开发者关注。本文将基于真实开发场景,从代码理解、终端操作和工具链调用三个维度展开深度…

SpringBoot电脑商城项目--商品详情+加入购物车

商品详情 1. 持久层 1.1. 规划sql语句 根据id查询商品详情 1.2 mapper层编写抽象方法 /*** 根据商品id查询商品详情* param id 商品id* return 匹配的id商品详情,如果没有匹配的数据,则返回null*/Product findById(Integer id); 1.3 xml文件中编写sq…

上交卡尔动力联合提出FastDrive!结构化标签实现自动驾驶端到端大模型更快更强

最近将类人的推理能力融入到端到端自动驾驶系统中已经成为了一个前沿的研究领域。其中,基于视觉语言模型的方法已经吸引了来自工业界和学术界的广泛关注。 现有的VLM训练范式严重依赖带有自由格式的文本标注数据集,如图1(a)所示。虽然这些描述能够捕捉丰…

C# 委托(什么是委托)

什么是委托 可以认为委托是持有一个或多个方法的对象。当然,一般情况下你不会想要“执行”一个对 象,但委托与典型的对象不同。可以执行委托,这时委托会执行它所“持有"的方法。 本章将揭示创建和使用委托的语法和语义。在本章后面&am…