NtfsLookupAttributeByName函数分析之和Scb->AttributeName的关系

第一部分:

VOID
FindFirstIndexEntry (
    IN PIRP_CONTEXT IrpContext,
    IN PSCB Scb,
    IN PVOID Value,
    IN OUT PINDEX_CONTEXT IndexContext
    )
{

。。。。。。

    //
    //  Lookup the attribute record from the Scb.
    //

    if (!NtfsLookupAttributeByName( IrpContext,
                                    Scb->Fcb,
                                    &Scb->Fcb->FileReference,
                                    $INDEX_ROOT,
                                    &Scb->AttributeName,
                                    NULL,
                                    FALSE,
                                    &IndexContext->AttributeContext )) {

第二部分:

0: kd> p
Ntfs!FindFirstIndexEntry+0x68:
f71740d2 84c0            test    al,al
0: kd> dv


     IrpContext = 0xf793291c
            Scb = 0xe1363d20
          Value = 0xe13559b0
   IndexContext = 0xe1352348
      Attribute = 0x00000000
      IndexRoot = 0xe1352348
             Sp = 0xe1363d20
0: kd> dx -r1 ((Ntfs!_SCB *)0xe1363d20)
((Ntfs!_SCB *)0xe1363d20)                 : 0xe1363d20 [Type: _SCB *]
    [+0x000] Header           [Type: _NTFS_ADVANCED_FCB_HEADER]
    [+0x040] FcbLinks         [Type: _LIST_ENTRY]
    [+0x048] Fcb              : 0xe1363c58 [Type: _FCB *]
    [+0x04c] Vcb              : 0x895d5100 [Type: _VCB *]
    [+0x050] ScbState         : 0x100006a0 [Type: unsigned long]
    [+0x054] NonCachedCleanupCount : 0x0 [Type: unsigned long]
    [+0x058] CleanupCount     : 0x1 [Type: unsigned long]
    [+0x05c] CloseCount       : 0x2 [Type: unsigned long]
    [+0x060] ShareAccess      [Type: _SHARE_ACCESS]
    [+0x07c] AttributeTypeCode : 0xa0 [Type: unsigned long]
    [+0x080] AttributeName    : "$I30" [Type: _UNICODE_STRING]
    [+0x088] FileObject       : 0x8962b128 [Type: _FILE_OBJECT *]
    [+0x08c] NonpagedScb      : 0x89954e60 [Type: _SCB_NONPAGED *]
    [+0x090] Mcb              [Type: _NTFS_MCB]
    [+0x0a8] McbStructs       [Type: NTFS_MCB_INITIAL_STRUCTS]
    [+0x0f0] CompressionUnit  : 0x0 [Type: unsigned long]
    [+0x0f4] AttributeFlags   : 0x0 [Type: unsigned short]
    [+0x0f6] CompressionUnitShift : 0x0 [Type: unsigned char]
    [+0x0f7] PadUchar         : 0x0 [Type: unsigned char]
    [+0x0f8] ValidDataToDisk  : 0 [Type: __int64]
    [+0x100] TotalAllocated   : 8192 [Type: __int64]
    [+0x108] EofListHead      [Type: _LIST_ENTRY]
    [+0x110] CcbQueue         [Type: _LIST_ENTRY]
    [+0x118] ScbSnapshot      : 0x0 [Type: _SCB_SNAPSHOT *]
    [+0x11c] EncryptionContext : 0x0 [Type: void *]
    [+0x120] EncryptionContextLength : 0x0 [Type: unsigned long]
    [+0x124] ScbPersist       : 0x0 [Type: unsigned long]
    [+0x128] IoAtEofThread    : 0x0 [Type: unsigned long *]
    [+0x130] ScbType          [Type: __unnamed]


第三部分:


BOOLEAN
NtfsFindInFileRecord (
    IN PIRP_CONTEXT IrpContext,
    IN PATTRIBUTE_RECORD_HEADER Attribute,
    OUT PATTRIBUTE_RECORD_HEADER *ReturnAttribute,
    IN ATTRIBUTE_TYPE_CODE QueriedTypeCode,
    IN PCUNICODE_STRING QueriedName OPTIONAL,
    IN BOOLEAN IgnoreCase,
    IN PVOID QueriedValue OPTIONAL,
    IN ULONG QueriedValueLength
    )
{


    while ( TRUE ) {

。。。。。。

                NtfsInitializeStringFromAttribute( &AttributeName, Attribute );

                //
                //  See if we have a name match.
                //

                if (NtfsAreNamesEqual( UpcaseTable,
                                       &AttributeName,
                                       QueriedName,
                                       IgnoreCase )) {

                    break;
                }

    return TRUE;
}


第四部分:

                NtfsInitializeStringFromAttribute( &AttributeName, Attribute );

#define NtfsInitializeStringFromAttribute(NAME,ATTRIBUTE) {                \
    (NAME)->Length = (USHORT)(ATTRIBUTE)->NameLength << 1;                 \
    (NAME)->MaximumLength = (NAME)->Length;                                \            
    (NAME)->Buffer = (PWSTR)Add2Ptr((ATTRIBUTE), (ATTRIBUTE)->NameOffset); \
}

(NAME)->Buffer        (ATTRIBUTE)->NameLength            +0x009 NameLength       : 0x4 ''
(NAME)->Buffer        (ATTRIBUTE)->NameOffset            +0x00a NameOffset       : 0x18


0: kd> dt Ntfs!_ATTRIBUTE_RECORD_HEADER  0xc1241438+48+60+28+48
   +0x000 TypeCode         : 0x90
   +0x004 RecordLength     : 0xe0
   +0x008 FormCode         : 0 ''
   +0x009 NameLength       : 0x4 ''
   +0x00a NameOffset       : 0x18
   +0x00c Flags            : 0
   +0x00e Instance         : 6
   +0x010 Form             : __unnamed

0: kd> db 0xc1241438+48+60+28+48+18
c1241568  24 00 49 00 33 00 30 00-30 00 00 00 01 00 00 00  $.I.3.0.0.......


第五部分:

0: kd> p
Ntfs!NtfsFindInFileRecord+0x92:
f7171ac2 384d1c          cmp     byte ptr [ebp+1Ch],cl
0: kd> dv
        IrpContext = 0xf793291c
         Attribute = 0xc1241438

0: kd> dx -r1 ((Ntfs!_ATTRIBUTE_RECORD_HEADER *)0xc1241438)
((Ntfs!_ATTRIBUTE_RECORD_HEADER *)0xc1241438)                 : 0xc1241438 [Type: _ATTRIBUTE_RECORD_HEADER *]
    [+0x000] TypeCode         : 0x10 [Type: unsigned long]
    [+0x004] RecordLength     : 0x48 [Type: unsigned long]
    [+0x008] FormCode         : 0x0 [Type: unsigned char]
    [+0x009] NameLength       : 0x0 [Type: unsigned char]
    [+0x00a] NameOffset       : 0x18 [Type: unsigned short]
    [+0x00c] Flags            : 0x0 [Type: unsigned short]
    [+0x00e] Instance         : 0x0 [Type: unsigned short]
    [+0x010] Form             [Type: __unnamed]
0: kd> dt Ntfs!_ATTRIBUTE_RECORD_HEADER  0xc1241438
   +0x000 TypeCode         : 0x10
   +0x004 RecordLength     : 0x48
   +0x008 FormCode         : 0 ''
   +0x009 NameLength       : 0 ''
   +0x00a NameOffset       : 0x18
   +0x00c Flags            : 0
   +0x00e Instance         : 0
   +0x010 Form             : __unnamed
0: kd> dt Ntfs!_ATTRIBUTE_RECORD_HEADER  0xc1241438+48
   +0x000 TypeCode         : 0x30
   +0x004 RecordLength     : 0x60
   +0x008 FormCode         : 0 ''
   +0x009 NameLength       : 0 ''
   +0x00a NameOffset       : 0x18
   +0x00c Flags            : 0
   +0x00e Instance         : 1
   +0x010 Form             : __unnamed
0: kd> dt Ntfs!_ATTRIBUTE_RECORD_HEADER  0xc1241438+48+60
   +0x000 TypeCode         : 0x40
   +0x004 RecordLength     : 0x28
   +0x008 FormCode         : 0 ''
   +0x009 NameLength       : 0 ''
   +0x00a NameOffset       : 0
   +0x00c Flags            : 0
   +0x00e Instance         : 9
   +0x010 Form             : __unnamed
0: kd> dt Ntfs!_ATTRIBUTE_RECORD_HEADER  0xc1241438+48+60+28
   +0x000 TypeCode         : 0x50
   +0x004 RecordLength     : 0x48
   +0x008 FormCode         : 0x1 ''
   +0x009 NameLength       : 0 ''
   +0x00a NameOffset       : 0x40
   +0x00c Flags            : 0
   +0x00e Instance         : 2
   +0x010 Form             : __unnamed
0: kd> dt Ntfs!_ATTRIBUTE_RECORD_HEADER  0xc1241438+48+60+28+48
   +0x000 TypeCode         : 0x90
   +0x004 RecordLength     : 0xe0
   +0x008 FormCode         : 0 ''
   +0x009 NameLength       : 0x4 ''
   +0x00a NameOffset       : 0x18
   +0x00c Flags            : 0
   +0x00e Instance         : 6
   +0x010 Form             : __unnamed

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

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

相关文章

关闭 Ubuntu 20.04 的 GNOME Shell和PulseAudio

一、GNOME Shell GNOME Shell 是 Ubuntu 20.04 默认的桌面环境管理器。关闭它会失去图形界面&#xff08;回到纯终端模式&#xff09;&#xff0c;但可以节省内存和 CPU 资源。 方法 1&#xff1a;临时关闭&#xff08;当前会话生效&#xff09; sudo systemctl stop gdm #…

Dijkstra算法——不带负权的单源最短路径

目录 算法学习 算法原理 稠密图Dijkstra模板 稀疏图Dijkstra模板 练习 1 网络延迟时间 2 到达最后一个房间的最少时间Ⅰ 3 到达最后一个房间的最少时间Ⅱ 4 访问消失节点的最少时间 5 设计可以求最短路径的图类 6 概率最大的路径 7 最小体力消耗路径 8 从第一个节…

【安全攻防与漏洞​】​​Heartbleed漏洞复现与修复

Heartbleed漏洞复现与修复 一、漏洞原理 Heartbleed漏洞&#xff08;CVE-2014-0160&#xff09; 是 OpenSSL 1.0.1 至 1.0.1f 版本中的一个严重内存泄漏漏洞。它源于 TLS 心跳扩展&#xff08;Heartbeat Extension&#xff09;协议中对请求长度字段的未校验&#xff0c;导致攻…

力扣-最大连续一的个数

1.题目描述 2.题目链接 1004. 最大连续1的个数 III - 力扣&#xff08;LeetCode&#xff09; 3.代码解答 class Solution {public int longestOnes(int[] nums, int k) {int zero0,length0;for(int left0,right0;right<nums.length;right){if(nums[right]0){zero;}while…

虚拟机Centos7:Cannot find a valid baseurl for repo: base/7/x86_64问题解决

问题 解决&#xff1a;更新yum仓库源 # 备份现有yum配置文件 sudo cp -r /etc/yum.repos.d /etc/yum.repos.d.backup# 编辑CentOS-Base.repo文件 vi /etc/yum.repos.d/CentOS-Base.repo[base] nameCentOS-$releasever - Base baseurlhttp://mirrors.aliyun.com/centos/$relea…

Node.js 库大全

在当今快速迭代的软件开发领域&#xff0c;Node.js 凭借其强大的异步 I/O 处理能力和繁荣的生态系统&#xff0c;已成为全栈开发的核心技术。社区中涌现的无数实用库&#xff0c;如同开发者手中的“瑞士军刀”&#xff0c;能显著提升效率、优化性能并保障安全。本文将系统梳理 …

如何评估物联网框架的交互体验?

物联网&#xff08;IoT&#xff09;技术的快速发展推动了各类物联网框架的涌现&#xff0c;但如何评估其交互体验却成为开发者和企业面临的重要挑战。交互体验不仅涉及用户界面&#xff08;UI&#xff09;的直观性&#xff0c;还包括设备接入效率、协议兼容性、数据交互流畅度以…

3D个人简历网站 6.弹出框

3D个人简历网站 6.弹出框 在components下创建HomeInfo.jsx用于控制主页弹出框信息 输入rafce快速生成代码块 import React from reactconst HomeInfo () > {return (<div>HomeInfo</div>) }export default HomeInfo修改Home.jsx代码实现弹出简单效果 ……re…

在 ABP VNext 中集成 OpenCvSharp:构建高可用图像灰度、压缩与格式转换服务

&#x1f680; 在 ABP VNext 中集成 OpenCvSharp&#xff1a;构建高可用图像灰度、压缩与格式转换服务 &#x1f389; &#x1f4da; 目录 &#x1f680; 在 ABP VNext 中集成 OpenCvSharp&#xff1a;构建高可用图像灰度、压缩与格式转换服务 &#x1f389;&#x1f3af; 一、…

C++之STL--string

string 深入探索 C STL 中的 std::string一、std::string 的基本概念1. 内存管理2. 安全性 二、std::string 的构造与初始化1. 默认构造2. 从 C 风格字符串构造3. 从字符串的一部分构造4. 使用重复字符构造 三、std::string 的常用操作1. 字符串拼接2. 字符串比较3. 字符串查找…

网络层——蚂蚁和信鸽的关系VS路由原理和相关配置

前言&#xff08;&#x1f41c;✉️&#x1f54a;️&#xff09; 今天内容的主角是蚂蚁&#xff08;动态路由&#xff09;和信鸽&#xff08;静态路由&#xff09;&#xff0c;为什么这么说呢&#xff0c;来看一则小故事吧。 森林里&#xff0c;森林邮局要送一份重要信件&am…

在 Excel xll 自动注册操作 中使用东方仙盟软件2————仙盟创梦IDE

// 获取当前工作表名称string sheetName (string)XlCall.Excel(XlCall.xlfGetDocument, 7);// 构造动态名称&#xff08;例如&#xff1a;Sheet1!MyNamedCell&#xff09;string fullName $"{sheetName}!MyNamedCell";// 获取引用并设置值var namedRange (ExcelRe…

nginx日志

目录 实验要求&#xff1a; 实验1&#xff1a; 1.使用vim打开/etc/nginx/nginx.conf查看内容 2.重新读取文件并且重启软件 3.实时查看nginx日志 实验2&#xff1a; 1.使用vim打开/etc/rsyslog.conf 2.配置此文件 3.保存退出后&#xff0c;将核心防护与防火墙关闭。 4.…

【高德开放平台-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

2024 CKA模拟系统制作 | Step-By-Step | 3、CKA考试系统的技术设置

目录 免费获取题库配套 CKA_v1.31_模拟系统 一、免费提权配置 1、使用vim 编辑/etc/sudoers 二、安装命令 1、安装运行时接口命令 2、安装Etcd命令 3、配置K8S命令自动补全 三、配置Kubectl 访问集群 1、Master节点 2、Node01节点 四、SSH配置 1、Node01节点candi…

微信小程序请求扣子(coze)api的例子

1. 准备工作 在开始之前&#xff0c;确保已经完成了以下准备工作&#xff1a; 创建并发布了 Coze 智能体。获取了个人访问令牌&#xff08;Personal Access Token&#xff09;&#xff0c;这是用于授权的关键凭证。确认目标智能体的 Bot ID 和其他必要参数已准备就绪。 2. 请…

visual studio重新安装如何修改共享组件、工具和SDK路径方案

安装了VsStudio后,如果自己修改了Shared路径&#xff0c;当卸载旧版本&#xff0c;需要安装新版本时发现&#xff0c;之前的Shared路径无法进行修改&#xff0c;这就很坑了 但是却遇到了路径无法修改的问题…真让人头大&#xff0c;当然不修改也可以&#xff0c;有时候&#x…

【Python 算法零基础 4.排序 ② 冒泡排序】

目录 一、引言 二、算法思想 三、时间复杂度和空间复杂度 1.时间复杂度 2.空间复杂度 四、冒泡排序的优缺点 1.算法的优点 2.算法的缺点 五、实战练习 88. 合并两个有序数组 算法与思路 ① 合并数组 ② 冒泡排序 2148. 元素计数 算法与思路 ① 排序 ② 初始化计数器 ③ 遍历数组…

Java设计模式之桥接模式:从入门到精通

文章目录 1. 桥接模式概述1.1 定义与核心思想1.2 模式结构1.3 通俗理解2. 桥接模式详解2.1 为什么需要桥接模式2.2 桥接模式与相关模式对比2.3 桥接模式的优缺点3. 桥接模式实现步骤3.1 实现步骤详解3.2 代码示例:遥控器与电视4. 桥接模式的高级应用4.1 多维度扩展4.2 与工厂模…

AI与.NET技术实操系列(六):实现图像分类模型的部署与调用

引言 人工智能&#xff08;AI&#xff09;技术的迅猛发展推动了各行各业的数字化转型。图像分类&#xff0c;作为计算机视觉领域的核心技术之一&#xff0c;能够让机器自动识别图像中的物体、场景或特征&#xff0c;已广泛应用于医疗诊断、安防监控、自动驾驶和电子商务等领域…