VirusCleaner.h
上传用户:leon2013
上传日期:2007-01-10
资源大小:186k
文件大小:4k
源码类别:

杀毒

开发平台:

Visual C++

  1. // VirusCleaner.h: interface for the CVirusCleaner class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_VIRUSCLEANER_H__0C2F5D44_E182_44B9_B6EC_99169BDEE15B__INCLUDED_)
  5. #define AFX_VIRUSCLEANER_H__0C2F5D44_E182_44B9_B6EC_99169BDEE15B__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #pragma warning(disable : 4786)
  10. #include "ServiceThread.h"
  11. #include "../src/VirusKiller.h"
  12. #include <set>
  13. #include <map>
  14. class CVirusCleaner  : public CServiceThread
  15. {
  16. public:
  17. /* scan starts immediately */
  18. CVirusCleaner(LPCTSTR root=NULL);
  19. /* stops scan (if in progress) and destroys object */
  20. virtual ~CVirusCleaner();
  21. /* overload of service thread */
  22. virtual bool Start();
  23. /* control of scanning thread */
  24. inline bool IsPaused() const { return m_paused; }
  25. void Pause() { m_paused=true; }
  26. void Continue()  { m_paused=false; }
  27. /* get or set the root directory the scan begins at */
  28. inline const CString& Root() const { return m_root; }
  29. void Root(LPCTSTR root); 
  30. /* number of files scanned */
  31. inline int Scanned() const { return m_scanned; }
  32. /* number of files skipped in scan */
  33. inline int Skipped() const { return m_skipped; }
  34. /* number of errors encountered scanning files */
  35. inline int Errors() const { return m_errors; }
  36. /* number of directories scanned */
  37. inline int Directories() const { return m_directories; }
  38. /* velocity of scanning in files / second */
  39. double Velocity() const;
  40. /* number of files cleaned */
  41. inline int Cleaned() const { return m_cleaned; }
  42. /* number of files deleted */
  43. inline int Deleted() const { return m_deleted; }
  44. /* number of files infected */
  45. inline int Infected() const { return m_infected; }
  46. /* start of scanning */
  47. inline CTime StartTime() const { m_starttime; }
  48. /* duration of scanning */
  49. inline CTimeSpan Duration() const { if (Running()) return CTime::GetCurrentTime()-m_starttime; else return m_stoptime-m_starttime; }
  50. /* last file scanned */
  51. inline const CString& LastFileScanned() const { return m_lastfile; }
  52. /* amount of data scanned in bytes */
  53. inline DWORD BytesScanned() const { return m_bytesscanned; }
  54. /* true if cleaner is to scan all files */
  55. inline bool ScanAll() const { return false; }
  56. /* notification method that a file has been scanned as infected */
  57. virtual void OnInfected(LPCTSTR filename, VirusKiller::SCANRESULT result) {}
  58. protected:
  59. /* starting directory of scan */
  60. CString m_root;
  61. /* pauses scanning thread */
  62. bool m_paused;
  63. /* scan statistics */
  64. int m_scanned,
  65. m_skipped,
  66. m_errors,
  67. m_infected,
  68. m_deleted,
  69. m_cleaned,
  70. m_directories;
  71. double m_velocity;
  72. DWORD m_bytesscanned;
  73. CTime m_starttime,
  74. m_stoptime;
  75. CString m_lastfile;
  76. /* log file */
  77. CFile m_logfile;
  78. /* scan algorithm configuration */
  79. DWORD m_read_block_size; /* size of each file read operation */
  80. /* collection of virus scanners & killers */
  81. VirusKiller::Set m_killers;
  82. /* start of worker thread : starts scanning from root */
  83. virtual void run();
  84. /* definition of a collection of virus keyed by extension */
  85. typedef map<CString , VirusKiller::Set > VirusGraph;
  86. /* collection of virus signatures when scan is active */
  87. VirusGraph m_killergraph;
  88. /* builds a graph of file extensions and associated virus killers given a list of virus killers */
  89. VirusGraph BuildVirusGraph(const VirusKiller::Set& kset);
  90. /* scans a single directory for infected files : uses recursion */
  91. bool scandirectory(LPCTSTR root);
  92. /* scans a file for a virus signature */
  93. bool scanfile(LPCTSTR file);
  94. /* cleans a specified file by a specified number of virus killers */
  95. VirusKiller::SCANRESULT cleanfile(LPCTSTR file, VirusKiller::Set& infections);
  96. };
  97. #endif // !defined(AFX_VIRUSCLEANER_H__0C2F5D44_E182_44B9_B6EC_99169BDEE15B__INCLUDED_)