当前位置: 首页 > news >正文

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.lryc.cn/news/574180.html

相关文章:

  • CentOS 上安装snmp
  • 如何在 Python 中连接 Elasticsearch 并使用 Qwen3 来实现 RAG
  • AI编程再突破,文心快码发布行业首个多模态、多智能体协同AI IDE
  • 【深度学习加速探秘】Winograd 卷积算法:让计算效率 “飞” 起来
  • SpringCloud系列(33)--使用Hystrix进行通配服务降级
  • 前缀树进阶-经典案例详解
  • Ubuntu20.04安装录屏工具OBS
  • 【Leetcode】有效的括号、用栈实现队列、用队列实现栈
  • Spring Boot + Logback MDC 深度解析:实现全链路日志追踪
  • 从数据到洞察:UI前端如何利用大数据优化用户体验
  • 用Fiddler抓包工具优化API联调流程:与Postman、Wireshark协作实践分享
  • Zynq + FreeRTOS + YAFFS2 + SQLite3 集成指南
  • 在Ubuntu上设置Firefox自动化测试环境:指定Marionette端口号
  • SpringBoot+Vue自习室座位预约系统
  • Lamp和友点CMS一键部署脚本(Rocky linux)
  • 技术干货 | 深度解读GB/T 45086.1-2024 EMC部分关键项
  • Excel学习03
  • 如何在 Vue 应用中嵌入 ONLYOFFICE 编辑器
  • 零基础学习RabbitMQ(2)--Linux安装RabbitMQ
  • 16.数据聚合
  • 文章以及好用网站分享
  • [QMT量化交易小白入门]-六十六、加入评分阈值后,历史回测收益率达到74%
  • Matlab自学笔记六十:符号表达式的缩写和简化
  • <tauri><threejs><rust><GUI>基于tauri和threejs,实现一个3D图形浏览程序
  • WPF中MVVM和MVVMLight模式
  • 技术逐梦之旅:从C语言到Vue的成长之路
  • 【附源码】考试报名系统设计与实现+SpringBoot + Vue (前后端分离)
  • Java底层原理:深入理解类加载机制与反射
  • 开始读Learning PostgresSQL第二版
  • C# SolidWorks二次开发-实战2,解决SolidWorks2024转step文件名乱码问题