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

杀毒

开发平台:

Visual C++

  1. // ProcessScanner.h: interface for the CProcessScanner class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_PROCESSSCANNER_H__0E2262CA_D316_4A03_9F2A_FD36FAE5EC10__INCLUDED_)
  5. #define AFX_PROCESSSCANNER_H__0E2262CA_D316_4A03_9F2A_FD36FAE5EC10__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #pragma warning(disable : 4786)
  10. #include "../src/VirusKiller.h"
  11. #include "ServiceThread.h"
  12. #include <map>
  13. #include <list>
  14. using namespace std;
  15. class CProcessScanner  : public CServiceThread
  16. {
  17. public:
  18. CProcessScanner();
  19. virtual ~CProcessScanner();
  20. /* a collection of processes and thier names */
  21. typedef map<DWORD, CString> Processes;
  22. /* describes a loaded process module */
  23. class Module {
  24. public:
  25. Module(DWORD processid, LPCTSTR module_name, ULONG base_address, ULONG module_size) : processId(processid), baseAddress(base_address), Length(module_size) 
  26. { ASSERT(module_name); if (module_name) moduleName=module_name; }
  27. Module(const Module& copy) : processId(copy.processId), moduleName(copy.moduleName), baseAddress(copy.baseAddress), Length(copy.Length) 
  28. { }
  29. Module& operator=(const Module& copy) 
  30. { processId=copy.processId; moduleName=copy.moduleName; baseAddress=copy.baseAddress; Length=copy.Length; return *this; }
  31. DWORD processId;
  32. CString moduleName;
  33. ULONG baseAddress;
  34. ULONG Length;
  35. };
  36. /* a collection of modules */
  37. typedef list<Module> Modules;
  38. /* scan statistics of current process */
  39. inline const CString& CurrentProcessName() const { return m_processname; }
  40. inline DWORD CurrentProcess() const { return m_processid; }
  41. inline DWORD CurrentProcessSize() const { return m_processsize; }
  42. inline DWORD CurrentProcessPosition() const { return m_processposition; }
  43. /* scan statistics of this scan (global statistics) */
  44. inline int Scanned() const { return m_scanned; }
  45. inline int Infections() const { return m_infections; }
  46. /* enumerates all processes into a collection */
  47. static Processes GetActiveProcesses();
  48. /* collection processes being scanned */
  49. Processes processes;
  50. /* notification methods */
  51. virtual VirusKiller::SCANRESULT OnInfectedProcess(HANDLE hprocess, const Module& module, VirusKiller& killer);
  52. protected:
  53. /* state of current process scan */
  54. CString m_processname;
  55. DWORD m_processid;
  56. DWORD m_processsize;
  57. DWORD m_processposition;
  58. /* global scan state */
  59. int m_scanned;
  60. int m_infections;
  61. DWORD m_bytesscanned;
  62. /* size of each process read in bytes */
  63. DWORD m_read_block_size;
  64. /* collection of virus killers */
  65. VirusKiller::Set m_killers;
  66. /* thread method */
  67. virtual void run();
  68. /* scans a single process */
  69. VirusKiller::SCANRESULT scanprocess(DWORD processid);
  70. /* scans a module loaded into a processes address space */
  71. VirusKiller::SCANRESULT scanprocessblock(HANDLE hprocess, const Module& module);
  72. /* returns a collection of modules loaded by specified process */
  73. Modules GetProcessModules(DWORD processid);
  74. Modules GetProcessModules(HANDLE process, DWORD processid);
  75. };
  76. #endif // !defined(AFX_PROCESSSCANNER_H__0E2262CA_D316_4A03_9F2A_FD36FAE5EC10__INCLUDED_)