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
繁體地址,請注明出處:http://hk.pswp.cn/web/80950.shtml
英文地址,請注明出處:http://en.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;已廣泛應用于醫療診斷、安防監控、自動駕駛和電子商務等領域…