- 句柄: 在windows中摩渺,句柄是和對象一一對應的32位無符號整數(shù)值。對象可以映射到唯一的句柄剂邮,句柄也可以映射到唯一的對象摇幻。
- 操作系統(tǒng)的64位地址常用
LARGE_INTEGER
結(jié)構(gòu)體表示,低32位LowPart
挥萌,高32位HighPart
绰姻,取全部地址QuadPart
。
首先通過input()
函數(shù)輸入文件的位置
1. 尋找磁盤句柄
在HANDLE GetDiskHandle(char iDiskNo)
函數(shù)中引瀑,iDiskNo
是磁盤號狂芋,通過m_hDevice = CreateFileA(...)
返回磁盤句柄。
2. 通過磁盤的句柄憨栽,讀取扇區(qū)512字節(jié)數(shù)據(jù)返回
在ReadSectorData
函數(shù)中帜矾,將讀取內(nèi)容保存在lpOutBuffer
中,即全局變量OutBuffer
屑柔。
3. 計算MFT起始簇號
利用計算地址函數(shù)change(start, num)
屡萤,可以由緩沖區(qū)里某個字節(jié)的起始位置和這個字節(jié)后面有幾個字節(jié)來計算簇號。
4. 建立循環(huán)掸宛,一層層找文件
- 通過
SetFileName
死陆,計算返回FileName
中有效字符個數(shù) - 用
FindFileMftNo
,尋找文件的MFT序號唧瘾。
首先調(diào)用FindFileName
措译,從讀到的簇的文件記錄里找到文件名的起始地址,如果找不到饰序,則到index的datarun里面找瞳遍。