数据恢复软件(三):浴室追凶(代码讲解版)
浴室追凶
序:网友看了我的程序很迷惑,让我写个说明。帮忙写的学习程序还要给讲解,做好人可真难。俗话说好人做到底,送佛送到西,百忙中还是写了一个故事加以形象说明。
话说我是一名刑警,刚从警校毕业,工作经验还不足。突然一天接到报警电话有人被杀,故事由此开始了 。
int main(int argc, char* argv[]
经过现场勘察发现是团伙作案,通过监控显示大概知道了罪犯的相貌,进过细致的分析,我总结了罪犯的基本材料:
struct BMPHEADER{ WORD ND; WORD TYPE; int size; WORD r1; WORD r2; }bh;
通过线人的举报,这几个罪犯正在×××泡澡。凭借直觉我知道这个是最佳的抓捕机会,于是我带上手铐、枪、警犬、逮捕证,这一次一定将罪犯一网打尽。
HANDLE f,fout; DWORD Num; int filesize; char fname[20];
来到×××门口,发现门竟然锁上了。再看这门可真厚呀,不用特殊的方法是无法打开的。我知道这是对我的一个考验,如果打不开门就表示抓捕失败。凭借警校学习的知识,我知道应该在门口设置警戒,不让人随便出入,然后我拿出×××,只使用普通的方法,就打开了把锁,虽然门厚,但打开的感觉真的是太轻松了。
f=::CreateFile("img",GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(f==INVALID_HANDLE_VALUE){return 0;}
我一脚踹开大门,只见里面雾气缭绕,看也看不清楚,隐隐约约感觉一个个赤身裸体的人影在晃动,正如我想象的一样,这里有男有女,有胖有瘦,有高有矮,还有几条狗在哪里咬架,我也不管它们是倭狗还是美分狗还是五毛狗,我也不管它们会不会咬我。我气运丹田,大吼一声“我是警察,都不许动”。看到有人进来这些人惊慌失措,突然有人大喊一声“快捂住”,众人突然醒悟,但身上要紧部位有三处,手忙脚乱捂不过来。这时又有大喊:“捂脸就行,下面都一样!” 我暗暗好笑,我知道我已经控制住了局面。凭借经验,我知道我不能漏掉一个罪犯,首先清点人数。
filesize=::GetFileSize(f,NULL);
我首先走到离我最近的一个人,然后一个一个进行搜捕。
for (int i=0;i<filesize;i+=512)
我首先抓住了他的头发,虽然有点暴利执法,但我也顾不了太多。
::SetFilePointer(f,i,NULL,FILE_BEGIN);
然后我托起他的脸,对他的面容进行精确扫描。
::ReadFile(f,&(bh.TYPE),10,&Num,NULL);
跟我的罪犯资料进行对比。
if(bh.TYPE==MAKEWORD('B','M')&&bh.r1==0&&bh.r2==0)
今天运气真的是太好了,第一个就抓到了罪犯。我以迅雷不及掩耳盗铃而响叮当之势,再次抓出了他的头发,让他在也不能逃脱。
::SetFilePointer(f,i,NULL,FILE_BEGIN);
我拿来我事先已经准备好的牢笼,这个牢笼是我为这个罪犯量身定做的,大小跟罪犯的身高一样大。
char *dout=new char[bh.size];
我对罪犯宣读了逮捕令“你有权保持沉默。如果你不保持沉默,那么你所说的一切将成为呈堂证供。”一脚将罪犯踹进牢笼里,我对自己的工作非常满意,这个牢笼制作对他真是最合适不过了。
::ReadFile(f,dout,bh.size,&Num,NULL);
我给这个罪犯制作了一个标签,既然是第一个抓住得到,那就叫做NO.0吧,我们的资源是非常有限的,计数都是从0开始,来表现我的工作态度。
sprintf(fname,"%d.bmp",i);
我给上司打了电话,通报了逮捕情况,并向监狱预定了一个牢房。
fout=::CreateFile(fname,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE
把罪犯送去牢房。,这个罪犯就可以在哪里度过他的余生了。
::WriteFile(fout,dout,bh.size,&Num,NULL);
现在罪犯的位置被清理了,开始抓捕第二名罪犯。
delete [] dout; CloseHandle(fout); i=((i+bh.size)/512)*512;
全部的抓捕都非常顺利,全部的罪犯都被抓住了。关上×××厚厚的大门,打道回府。
CloseHandle(f); return 0;
结尾:这次任务终于胜利完成了,虽然没有得到上司的奖励,但也增加了工作经验。以后的工作会更轻松的完成。
转载于:https://blog.51cto.com/jzhdd/1333614