- 注册时间
- 2011-3-6
- 最后登录
- 1970-1-1
该用户从未签到
|
//开始搜索
void C文件特征码扫描工具Dlg::OnBnClickedButton3()
{
m_CListBox.ResetContent();
CFile AimFile;
std::fstream SettingFile;
SettingFile.open(m_csSettingFilePath);
char chDataName[100];
char chCode[150];
BYTE BCode[75],BBuff[1024*100];
int iOffset=0;
wchar_t wchDataName[100];
size_t Size;
while(!SettingFile.eof())
{
SettingFile>>chDataName;
MultiByteToWideChar(CP_ACP,0,chDataName,-1,wchDataName,100);
memset(chCode,0,150);
memset(BCode,0,75);
SettingFile>>chCode;
SettingFile>>iOffset;
Size=CharToBYTE(chCode,BCode);//将读出的特征码由字符串转换BYTE数组
if(Size==0)
{
CString csBuffer=wchDataName;
csBuffer+=L": 特征码有误";
m_CListBox.AddString(csBuffer);
continue;
}
//下面开始搜索整个文件
ULONGLONG ullReadFileSize=0;
BOOL bFind=FALSE;
AimFile.Open(m_csAimFilePath,CFile::modeRead|CFile::typeBinary|CFile::shareDenyNone);
while(ullReadFileSize<=AimFile.GetLength() && !bFind)
{
AimFile.Read(BBuff,1024*100);//每次读取100K的数据
for(int i=0;i<1024*100;i++)
{
if(BBuff[i]==BCode[0])
{
if(CompareTwoBYTE(&BBuff[i],BCode,Size))//如果相等,那么找到了
{
CString csBuff=wchDataName;
wchar_t wchBuff[30];
_itow_s((int)ullReadFileSize+i+0x00400000+iOffset,wchBuff,16);
csBuff+=L": ";
csBuff+=wchBuff;
csBuff.MakeUpper();
m_CListBox.AddString(csBuff);
bFind=TRUE;
break;
}
}
}
ullReadFileSize+=1024*100;
}
AimFile.Close();
if(!bFind)//如果没有找到
{
CString csBuff=wchDataName;
csBuff+=L": NULL";
m_CListBox.AddString(csBuff);
}
}
SettingFile.close();
}
BOOL C文件特征码扫描工具Dlg::CompareTwoBYTE(BYTE* B1, BYTE* B2, size_t Size)
{
for(size_t i=0;i<Size;i++)
{
if(B1[i]!=B2[i])
{
return FALSE;
}
}
return TRUE;
} |
|