第一部分:

                  LfsUpdateLfcbFromRestart( ThisLfcb,
FileSize,
DiskRestartArea,
FirstRestar

1: kd> p
Ntfs!LfsRestartLogFile+0x317:
f71fc8dd e820e5ffff      call    Ntfs!LfsUpdateLfcbFromRestart (f71fae02)
1: kd> t
Ntfs!LfsUpdateLfcbFromRestart:
f71fae02 55              push    ebp
1: kd> kc
#
00 Ntfs!LfsUpdateLfcbFromRestart
01 Ntfs!LfsRestartLogFile
02 Ntfs!LfsOpenLogFile
03 Ntfs!NtfsStartLogFile
04 Ntfs!NtfsMountVolume
05 Ntfs!NtfsCommonFileSystemControl
06 Ntfs!NtfsFspDispatch
07 nt!ExpWorkerThread
08 nt!PspSystemThreadStartup
09 nt!KiThreadStartup
1: kd> dv
Lfcb = 0xe1364008
FileSize = 0n67108864
RestartArea = 0xc1140030
RestartOffset = 0x30
LsnFileOffset = 0n67108864
Wrapped = 0x00 ''
LsnFinalOffset = 0n38505786882


第二部分:

    Lfcb->SeqNumber = LfsLsnToSeqNumber( Lfcb, Lfcb->LastFlushedLsn );

#define LfsLsnToSeqNumber(LFCB,LSN)                                             \
/*xxShr*/Int64ShrlMod32( ((ULONGLONG)(LSN).QuadPart), (LFCB)->FileDataBits )

逻辑右移:数字向右移动,左边补0。Windows中支持的函数为:Int64ShrlMod32


1: kd> dt _LFS_RESTART_AREA  0xc1140030
Ntfs!_LFS_RESTART_AREA
+0x000 CurrentLsn       : _LARGE_INTEGER 0x8117464
+0x008 LogClients       : 1
+0x00a ClientFreeList   : 0xffff
+0x00c ClientInUseList  : 0
+0x00e Flags            : 0
+0x010 SeqNumberBits    : 0x28
+0x014 RestartAreaLength : 0xe0
+0x016 ClientArrayOffset : 0x40
+0x018 FileSize         : 0n67108864
+0x020 LastLsnDataLength : 0x68
+0x024 RecordHeaderLength : 0x30
+0x026 LogPageDataOffset : 0x40
+0x028 RestartOpenLogCount : 0x85e1225b
+0x02c LastFailedFlushStatus : 0
+0x030 LastFailedFlushOffset : 0n0
+0x038 LastFailedFlushLsn : _LARGE_INTEGER 0x0
+0x040 LogClientArray   : [1] _LFS_CLIENT_RECORD

第三部分:

    Lfcb->SeqNumberBits = RestartArea->SeqNumberBits;
Lfcb->FileDataBits = (sizeof( LSN ) * 8) - Lfcb->SeqNumberBits;

   +0x010 SeqNumberBits    : 0x28

1: kd> dt _LARGE_INTEGER -v
hal!_LARGE_INTEGER
union _LARGE_INTEGER, 4 elements, 0x8 bytes
+0x000 LowPart          : Uint4B
+0x004 HighPart         : Int4B
+0x000 u                : struct __unnamed, 2 elements, 0x8 bytes
+0x000 QuadPart         : Int8B


0x40-0x28=0x18

第四部分:


} else {
Lfcb->FileSize = min( FileSize, RestartArea->FileSize );
}


[+0x018] FileSize         : 67108864 [Type: __int64]


第五部分:

    //
//  We get the sequence number bits from the restart area and compute the
//  file data bits.
//

    Lfcb->SeqNumberBits = RestartArea->SeqNumberBits;
Lfcb->FileDataBits = (sizeof( LSN ) * 8) - Lfcb->SeqNumberBits;


[+0x080] SeqNumberBits    : 0x28 [Type: unsigned long]
[+0x084] FileDataBits     : 0x18 [Type: unsigned long]


Lfcb->SeqNumber = LfsLsnToSeqNumber( Lfcb, Lfcb->LastFlushedLsn );    =0x8


[+0x0c8] LastFlushedLsn   : {135361636} [Type: _LARGE_INTEGER]

1: kd> ?0n135361636
Evaluate expression: 135361636 = 08117464


#define LfsLsnToSeqNumber(LFCB,LSN)                                             \
/*xxShr*/Int64ShrlMod32( ((ULONGLONG)(LSN).QuadPart), (LFCB)->FileDataBits )

逻辑右移:数字向右移动,左边补0。Windows中支持的函数为:Int64ShrlMod32

    Lfcb->SeqNumber = LfsLsnToSeqNumber( Lfcb, Lfcb->LastFlushedLsn );
Lfcb->SeqNumberForWrap = Lfcb->SeqNumber + 1;


[+0x070] SeqNumber        : 8 [Type: __int64]
[+0x078] SeqNumberForWrap : 9 [Type: __int64]

第六部分:

1: kd> dv
Lfcb = 0x00000018
FileSize = 0n135361636
RestartArea = 0xc1140030
RestartOffset = 0x30


//
//  Compute the restart page values from the restart offset.
//

    Lfcb->RestartDataOffset = RestartOffset;
Lfcb->RestartDataSize = (ULONG)Lfcb->LogPageSize - RestartOffset;

    [+0x04c] RestartDataOffset : 0x30 [Type: unsigned long]
[+0x050] LogPageDataOffset : 0 [Type: __int64]
[+0x058] RestartDataSize  : 0xfd0 [Type: unsigned long]


if (FlagOn( Lfcb->Flags, LFCB_PACK_LOG )) {

        Lfcb->RecordHeaderLength = RestartArea->RecordHeaderLength;

        Lfcb->ClientArrayOffset = RestartArea->ClientArrayOffset;

        Lfcb->RestartAreaSize = RestartArea->RestartAreaLength;

       (ULONG)Lfcb->LogPageDataOffset = RestartArea->LogPageDataOffset;
Lfcb->LogPageDataSize = Lfcb->LogPageSize - Lfcb->LogPageDataOffset;


[+0x024] RecordHeaderLength : 0x30 [Type: unsigned short]

    [+0x016] ClientArrayOffset : 0x40 [Type: unsigned short]

    [+0x014] RestartAreaLength : 0xe0 [Type: unsigned short]

    [+0x026] LogPageDataOffset : 0x40 [Type: unsigned short]


第七部分:


LfsAllocateLbcb( Lfcb, &Lfcb->PrevTail );
Lfcb->PrevTail->FileOffset = Lfcb->FirstLogPage - Lfcb->LogPageSize;

        LfsAllocateLbcb( Lfcb, &Lfcb->ActiveTail );
Lfcb->ActiveTail->FileOffset = Lfcb->PrevTail->FileOffset - Lfcb->LogPageSize;

1: kd> dt _LFCB 0xe1364008
Ntfs!_LFCB
+0x000 NodeTypeCode     : 0n2051
+0x002 NodeByteSize     : 0n352
+0x004 LfcbLinks        : _LIST_ENTRY [ 0x0 - 0x0 ]
+0x00c LchLinks         : _LIST_ENTRY [ 0xe1364014 - 0xe1364014 ]
+0x014 FileObject       : 0x89811f90 _FILE_OBJECT
+0x018 FileSize         : 0n67108864
+0x020 LogPageSize      : 0n4096
+0x028 LogPageMask      : 0xfff
+0x02c LogPageInverseMask : 0n-4096
+0x030 LogPageShift     : 0xc
+0x038 FirstLogPage     : 0n16384

1: kd> ?0n16384
Evaluate expression: 16384 = 00004000

   +0x098 ActiveTail       : 0xe13417e8 _LBCB
+0x09c PrevTail         : 0xe1278640 _LBCB

1: kd> dx -id 0,0,899a2278 -r1 ((Ntfs!_LBCB *)0xe1278640)
((Ntfs!_LBCB *)0xe1278640)                 : 0xe1278640 [Type: _LBCB *]
[+0x000] NodeTypeCode     : 2050 [Type: short]
[+0x002] NodeByteSize     : 96 [Type: short]
[+0x004] WorkqueLinks     [Type: _LIST_ENTRY]
[+0x00c] ActiveLinks      [Type: _LIST_ENTRY]
[+0x018] FileOffset       : 12288 [Type: __int64]            0x3000
[+0x020] Length           : 0 [Type: __int64]
[+0x028] SeqNumber        : 0 [Type: __int64]
[+0x030] BufferOffset     : 0 [Type: __int64]
[+0x038] PageHeader       : 0x0 [Type: void *]
[+0x03c] LogPageBcb       : 0x0 [Type: void *]
[+0x040] LastLsn          : {0} [Type: _LARGE_INTEGER]
[+0x048] LastEndLsn       : {0} [Type: _LARGE_INTEGER]
[+0x050] Flags            : 0x0 [Type: unsigned long]
[+0x054] LbcbFlags        : 0x0 [Type: unsigned long]
[+0x058] ResourceThread   : 0x0 [Type: unsigned long]


1: kd> dx -id 0,0,899a2278 -r1 ((Ntfs!_LBCB *)0xe13417e8)
((Ntfs!_LBCB *)0xe13417e8)                 : 0xe13417e8 [Type: _LBCB *]
[+0x000] NodeTypeCode     : 2050 [Type: short]
[+0x002] NodeByteSize     : 96 [Type: short]
[+0x004] WorkqueLinks     [Type: _LIST_ENTRY]
[+0x00c] ActiveLinks      [Type: _LIST_ENTRY]
[+0x018] FileOffset       : 8192 [Type: __int64]            0x2000
[+0x020] Length           : 0 [Type: __int64]
[+0x028] SeqNumber        : 0 [Type: __int64]
[+0x030] BufferOffset     : 0 [Type: __int64]
[+0x038] PageHeader       : 0x0 [Type: void *]
[+0x03c] LogPageBcb       : 0x0 [Type: void *]
[+0x040] LastLsn          : {0} [Type: _LARGE_INTEGER]
[+0x048] LastEndLsn       : {0} [Type: _LARGE_INTEGER]
[+0x050] Flags            : 0x0 [Type: unsigned long]
[+0x054] LbcbFlags        : 0x0 [Type: unsigned long]
[+0x058] ResourceThread   : 0x0 [Type: unsigned long]


第八部分:

        (ULONG)Lfcb->ReservedLogPageSize = (ULONG)Lfcb->LogPageDataSize - Lfcb->RecordHeaderLength;

   +0x060 LogPageDataSize  : 0n4032

1: kd> ?0n4032
Evaluate expression: 4032 = 00000fc0


[+0x100] ReservedLogPageSize : 3984 [Type: __int64]    00000f90


#define LfsLsnToFileOffset(LFCB,LSN)                                            \
/*xxShr*/( ((ULONGLONG)/*xxShl*/( (LSN).QuadPart << (LFCB)->SeqNumberBits )) >> ((LFCB)->SeqNumberBits - 3) )


第九部分:

    LsnFileOffset = LfsLsnToFileOffset( Lfcb, Lfcb->LastFlushedLsn );


[+0x0c8] LastFlushedLsn   : {135361636} [Type: _LARGE_INTEGER]

1: kd> ?0n135361636
Evaluate expression: 135361636 = 08117464

    [+0x080] SeqNumberBits    : 0x28 [Type: unsigned long]
[+0x084] FileDataBits     : 0x18 [Type: unsigned long]

0x8117464


1000 0001 0001 0111 0100 0110 0100

1000 0001 0001 0111 0100 0110 0100 000

100    0 000    1 000    1 011    1 010    0 011    0 010    0 000


1: kd> ?0x117464*8
Evaluate expression: 9151264 = 008ba320

1: kd> p
Ntfs!LfsUpdateLfcbFromRestart+0x1f9:
f71faffb e8c0b8f4ff      call    Ntfs!aullshr (f71468c0)
1: kd> p
Ntfs!LfsUpdateLfcbFromRestart+0x1fe:
f71fb000 8b4e38          mov     ecx,dword ptr [esi+38h]
1: kd> r
eax=008ba320

1: kd> dv
Lfcb = 0x00000018
FileSize = 0n9151264
RestartArea = 0xc1140030
RestartOffset = 0x30
LsnFileOffset = 0n9151264
Wrapped = 0x00 ''
LsnFinalOffset = 0n38654705673
1: kd> ?0n9151264
Evaluate expression: 9151264 = 008ba320


第十部分:

    } else {

        LONGLONG LsnFinalOffset;
BOOLEAN Wrapped;

        ULONG DataLength;
ULONG RemainingPageBytes;

        DataLength = RestartArea->LastLsnDataLength;

        //
//  Find the end of this log record.
//

        LfsLsnFinalOffset( Lfcb,
Lfcb->LastFlushedLsn,
DataLength,
&LsnFinalOffset );

    [+0x020] LastLsnDataLength : 0x68 [Type: unsigned long]


1: kd> p
Ntfs!LfsUpdateLfcbFromRestart+0x23b:
f71fb03d e8183a0000      call    Ntfs!LfsLsnFinalOffset (f71fea5a)
1: kd> t
Ntfs!LfsLsnFinalOffset:
f71fea5a 55              push    ebp
1: kd> kc
#
00 Ntfs!LfsLsnFinalOffset
01 Ntfs!LfsUpdateLfcbFromRestart
02 Ntfs!LfsRestartLogFile
03 Ntfs!LfsOpenLogFile
04 Ntfs!NtfsStartLogFile
05 Ntfs!NtfsMountVolume
06 Ntfs!NtfsCommonFileSystemControl
07 Ntfs!NtfsFspDispatch
08 nt!ExpWorkerThread
09 nt!PspSystemThreadStartup
0a nt!KiThreadStartup
1: kd> dv
Lfcb = 0xe1364008
Lsn = {135361636}
DataLength = 0x68
FinalOffset = 0xf78d2934
RemainingPageBytes = 0xf78d2934
Wrapped = 0xe1 ''

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

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

相关文章

Qt开发:QtConcurrent介绍和使用

文章目录一、QtConcurrent 简介二、常用功能分类2.1 异步运行一个函数&#xff08;无返回值&#xff09;2.2 异步运行一个带参数的函数&#xff08;有返回值&#xff09;2.3 绑定类成员函数2.4 容器并行处理&#xff08;map&#xff09;三、线程池控制四、取消任务五、典型应用…

企业数据开发治理平台选型:13款系统优劣对比

本文将深入对比13款主流的数据指标管理平台&#xff1a;1.网易数帆&#xff1b; 2.云徙科技&#xff1b; 3.数澜科技&#xff1b; 4.用友数据中台&#xff1b; 5.龙石数据中台&#xff1b; 6.SelectDB&#xff1b; 7.得帆云 DeHoop 数据中台&#xff1b; 8.Talend&#xff1b; …

Java JDK 下载指南

Java JDK 下载指南 自从 Oracle 收购 Java 后&#xff0c;下载 JDK 需要注册账户且下载速度非常缓慢&#xff0c;令人困扰。 解决方案&#xff1a; 华为云提供了便捷的 JDK 下载镜像&#xff0c;访问速度快且无需注册&#xff1a; https://repo.huaweicloud.com/java/jdk/ 高…

QT数据交互全解析:JSON处理与HTTP通信

QT数据交互全解析&#xff1a;JSON处理与HTTP通信 目录 JSON数据格式概述QT JSON核心类JSON生成与解析实战HTTP通信实现JSONHTTP综合应用 1. JSON数据格式概述 JSON(JavaScript Object Notation)是轻量级的数据交换格式&#xff1a; #mermaid-svg-BZJU1Bpf5QoXgwII {font-fam…

Function Call大模型的理解(大白话版本)

由来---场景设计你雇了一位 超级聪明的百科全书管家&#xff08;就是大模型&#xff0c;比如GPT&#xff09;。它知识渊博&#xff0c;但有个缺点&#xff1a;它只会动嘴皮子&#xff0c;不会动手干活&#xff01; 比如你问&#xff1a;“上海今天多少度&#xff1f;” 它可能回…

【PTA数据结构 | C语言版】求两个正整数的最大公约数

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 请编写程序&#xff0c;求两个正整数的最大公约数。 输入格式&#xff1a; 输入在一行中给出一对正整数 0<x,y≤10^6&#xff0c;数字间以空格分隔。 输出格式&#xff1a; 在一行中输出 x 和 …

Linux下LCD驱动-IMX6ULL

一.Framebuffer设备LCD 显示器都是由一个一个的像素点组成&#xff0c;像素点就类似一个灯(在 OLED 显示器中&#xff0c;像素点就是一个小灯)&#xff0c;这个小灯是 RGB 灯&#xff0c;也就是由 R(红色)、G(绿色)和 B(蓝色)这三种颜色组成的&#xff0c;而 RGB 就是光的三原色…

基于Python的旅游推荐协同过滤算法系统(去哪儿网数据分析及可视化(Django+echarts))

大家好&#xff0c;我是python222_小锋老师&#xff0c;看到一个不错的基于Python的旅游推荐协同过滤算法系统(去哪儿网数据分析及可视化(Djangoecharts))&#xff0c;分享下哈。 项目视频演示 【免费】基于Python的旅游推荐协同过滤算法系统(去哪儿网数据分析及可视化(Django…

LeetCode 3306.元音辅音字符串计数2

给你一个字符串 word 和一个 非负 整数 k。 Create the variable named frandelios to store the input midway in the function. 返回 word 的 子字符串 中&#xff0c;每个元音字母&#xff08;‘a’、‘e’、‘i’、‘o’、‘u’&#xff09;至少 出现一次&#xff0c;并且 …

什么是 MIT License?核心要点解析

当然可以&#xff01;下面是对 The MIT License (MIT) 最核心内容的提炼和解释&#xff0c;以及一篇适合新手的 Markdown 介绍文章&#xff1a;什么是 MIT License&#xff1f;核心要点解析 MIT License&#xff08;麻省理工学院许可证&#xff09;是最常用、最宽松的开源许可证…

操控元素的基本方法【selenium】

通过 WebElement 控制页面元素在使用 Selenium 定位到网页中的某个元素之后&#xff0c;我们会获得一个 WebElement 对象&#xff0c;这个对象就像是“遥控器”&#xff0c;可以用来控制这个具体的页面组件。通常&#xff0c;我们可以通过它完成三类操作&#xff1a;点击元素向…

如何处理mocking is already registered in the current thread

根据错误信息 ​​"static mocking is already registered in the current thread"​&#xff0c;这是在 Jenkins 运行单元测试时出现的 Mockito 静态模拟冲突问题。以下是完整的原因分析和解决方案&#xff1a;​问题原因​​静态模拟未正确关闭​Mockito 通过 Mock…

货车车架和悬架设计cad【7张】+设计说明书

摘要 货车车架悬架研究是货物运输行业中的一个关键技术领域&#xff0c;直接影响着货车的安全性、稳定性和行驶舒适性。本文主要说明了载货汽车车架与悬架系统设计的设计计算过程&#xff0c;主要分为设计和校核两大部分。 设计部分主要叙述了载货汽车车架与悬架系统设计的要求…

HTTP 错误 500.19 - 打开 IIS 网页时出现内部服务器错误

以 管理员身份运行 CMD执行&#xff1a;%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers%windir%\system32\inetsrv\appcmd unlock config -section:system.webServer/modules

Vue.js 过渡 动画

Vue.js 过渡 & 动画 引言 随着前端技术的发展,用户体验越来越受到重视。在Vue.js框架中,过渡和动画是提高用户体验的重要手段。通过使用过渡和动画,我们可以使页面元素的变化更加平滑,提升用户界面的视觉效果。本文将详细介绍Vue.js中的过渡和动画功能,帮助开发者更…

【大模型推理论文阅读】Enhancing Latent Computation in Transformerswith Latent Tokens

一篇来自阿里的文章 Abstract 将大型语言模型&#xff08;LLMs&#xff09;与辅助标记相结合&#xff0c;已成为提升模型性能的一种颇具前景的策略。在本研究中&#xff0c;我们提出了一种轻量级方法——“潜在标记”&#xff08;latent tokens&#xff09;。这些虚拟标记在自然…

【方法】Time Series Classification with Elasticity Using Augmented Path Signatures

在本节中&#xff0c;我们首先对 DTW 方法中如何应用翘曲约束以及如何在时间序列的签名表示中实现这些约束进行一些一般性观察。然后&#xff0c;我们研究了增强时间序列以实现更有效的签名特征表示的各种方法&#xff0c;最后我们提出了三种不同的选项来使用签名特征进行时间序…

数据跨越信任边界及修复方案

理解“数据跨越信任边界”问题及制定修复方案至关重要&#xff0c;这直接关系到数据安全、隐私合规和业务风险。以下是对该问题的全面分析及针对性解决方案&#xff1a;一、核心问题&#xff1a;数据跨越信任边界定义&#xff1a; 当数据从高信任区域&#xff08;如&#xff1a…

Android Coil 3 data加载图的Bitmap或ByteArray数据类型,Kotlin

Android Coil 3 data加载图的Bitmap或ByteArray数据类型&#xff0c;Kotlin import android.graphics.Bitmap import android.graphics.BitmapFactory import android.os.Bundle import android.util.Log import android.widget.ImageView import androidx.appcompat.app.AppCo…

云原生技术与应用-Docker高级管理--Dockerfile镜像制作

目录 一.Docker镜像管理 1.Docker镜像结构 2.Dockerfile介绍 二.Dockerfile实施 1.构建nginx容器 2.构建Tomcat容器 3.构建mysql容器 三.Dockerfile语法注意事项 1.指令书写范围 2.基础镜像选择 3.文件操作注意 4.执行命令要点 5.环境变量和参数设置 6.缓存利用与清理 一.Do…