- 句柄: 在windows中,句柄是和对象一一对应的32位无符号整数值。对象可以映射到唯一的句柄,句柄也可以映射到唯一的对象。
- 操作系统的64位地址常用
LARGE_INTEGER
结构体表示,低32位LowPart
,高32位HighPart
,取全部地址QuadPart
。
首先通过input()
函数输入文件的位置
1. 寻找磁盘句柄
在HANDLE GetDiskHandle(char iDiskNo)
函数中,iDiskNo
是磁盘号,通过m_hDevice = CreateFileA(...)
返回磁盘句柄。
2. 通过磁盘的句柄,读取扇区512字节数据返回
在ReadSectorData
函数中,将读取内容保存在lpOutBuffer
中,即全局变量OutBuffer
。
3. 计算MFT起始簇号
利用计算地址函数change(start, num)
,可以由缓冲区里某个字节的起始位置和这个字节后面有几个字节来计算簇号。
4. 建立循环,一层层找文件
- 通过
SetFileName
,计算返回FileName
中有效字符个数 - 用
FindFileMftNo
,寻找文件的MFT序号。
首先调用FindFileName
,从读到的簇的文件记录里找到文件名的起始地址,如果找不到,则到index的datarun里面找。