- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编写简易杀毒软件
编写简易杀毒软件 2011-02-16 ?????0?个评论??? ?? 收藏????我要投稿 文/ 冀云[太原铁通分公司]杀毒软件的编写,也许一直以来都是高手手中的法宝。我不是高手,也没有能力写一款杀毒软件出来。我的文章也没有新颖之处,说是“简易”,其实类似于大家编写的专杀工具,或者是一些国内个人防毒软件使用的技术。我只是简单地整理了一些大家在编写专杀时常常能使用到的代码,或许对于大家在写专杀或者写个人防毒软件时能用得着,毕竟善于总结和归纳也是一种学习的方法和提高的手段。我不知道编写一个防毒工具或专杀工具应该从哪个地方开始入手,也不知道要从哪部分开始介绍。算了,还是不去想先后顺序了,一部分一部分地介绍吧,只要能把我想说的都说完就可以了。首先从文件扫描开始吧。文件扫描是每个杀毒软件都有的,不管是“扫描全盘”也好,还是针对某个分区或是文件夹扫描也好,都要进行文件扫描才能完成查找病毒的任务。这个问题并不怎么难理解,只要是使用过杀毒软件或者使用过有哪些信誉好的足球投注网站文件工具的人都应该非常清楚。好吧,既然大家都了解了,那么就看看具体实现扫描的代码的编写吧。?DWORD WINAPI FindFiles(LPVOID lpszPath){……//此处省略了很多变量的定义szFilter=*.*;????????????? //定义扫描文件的类型,这里是所有文件lstrcpy(szPath,(char *)lpszPath);len=lstrlen(szPath);if(szPath[len-1]!=\){szPath[len]=\;szPath[len+1]=;}lstrcpy(szSearch,szPath);lstrcat(szSearch,szFilter);hFindFile=FindFirstFile(szSearch,stFindFile);if(hFindFile!=INVALID_HANDLE_VALUE){do{lstrcpy(szFindFile,szPath);lstrcat(szFindFile,stFindFile.cFileName);if(stFindFile.dwFileAttributes FILE_ATTRIBUTE_DIRECTORY){if(stFindFile.cFileName[0]!=.){FindFiles(szFindFile);//递归扫描下层目录}}else{printf(%s ,szFindFile);}ret=FindNextFile(hFindFile,stFindFile);}while(ret!=0);}FindClose(hFindFile);return 0;} 一切定义变量的部分我都省略了,大家可以看我随文提供的源代码。我把这个扫描文件的代码写成了一个函数,参数只有一个,就是要求输入一个要扫描的路径。代码里面也没有什么特殊的部分,只是个简单的循环,循环里面还有一个递归。递归是一个比较复杂的算法,“递归跳跃的信任”也是不容易掌握的。我对递归的应用可以说是差到了极点,好在这里不需要我来说明递归的使用方法,大家可以翻翻书去掌握这个算法。继续说我们上面的代码,代码里没有复杂的地方,大家只要查看MSDN中关于FindFirstFile()和FileNextFile()的使用方法就可以了。说白了,这两个函数就是扫描文件的两个关键函数了。虽然扫描文件的方法比较简单,但是有一点要提醒大家,算是编程中应该注意的问题。如果想做一个图形界面的文件扫描的程序的话,大家往往会为了人性化而在状态栏上显示一下当前正扫描到的文件名,或者在状态栏里做一个统计当前扫描完的文件个数的一个计数器,不管是文件的显示,还是计数的显示,都是一个实时过程,就是要随时更新显示。如果大家把扫描的函数写在主线程中(也就是跟窗口写在一个线程中),那么状态栏上的内容是无法被更新和显示的。因为扫描文件的循环会占去资源,而无法有机会去更新状态栏的显示。因此,大家在编写的时候一定要把扫描文件的函数放在另外一个工作线程中,让界面的主线程去启动扫描文件的工作线程,主线程就有机会去更新状态栏的显示了。除了要扫描文件以外,我们还要得到系统的硬盘和可移动磁盘,实现代码也比较简单。?char DriveName[4];char *p;p=DriveName;strncpy(DriveName,C:,4);while(*pZ){if(GetDriveType(p)==DRIVE_FIXED || GetDriveType(p)==DRIVE_REMOVABLE){……//得到的硬盘和可移动磁盘的盘符}++*p;} 上面的代码果然是太简单了,简单到已经
文档评论(0)