ModulePage.cpp
上传用户:shouhua
上传日期:2014-12-06
资源大小:5685k
文件大小:4k
源码类别:

杀毒

开发平台:

Visual C++

  1. // ModulePage.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "AntiEvilTools.h"
  5. #include "ModulePage.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CModulePage property page
  13. IMPLEMENT_DYNCREATE(CModulePage, CPropertyPage)
  14. CModulePage::CModulePage() : CPropertyPage(CModulePage::IDD)
  15. {
  16. //{{AFX_DATA_INIT(CModulePage)
  17. // NOTE: the ClassWizard will add member initialization here
  18. //}}AFX_DATA_INIT
  19. }
  20. CModulePage::~CModulePage()
  21. {
  22. }
  23. void CModulePage::DoDataExchange(CDataExchange* pDX)
  24. {
  25. CPropertyPage::DoDataExchange(pDX);
  26. //{{AFX_DATA_MAP(CModulePage)
  27. DDX_Control(pDX, IDC_LIST_MODULE, m_ctrlModule);
  28. //}}AFX_DATA_MAP
  29. }
  30. BEGIN_MESSAGE_MAP(CModulePage, CPropertyPage)
  31. //{{AFX_MSG_MAP(CModulePage)
  32. ON_NOTIFY(NM_RCLICK, IDC_LIST_MODULE, OnRclickProcessList)
  33. ON_COMMAND(ID_MENUITEM_MODULE_REFRESH,OnMenuitemModuleRefresh)
  34. //}}AFX_MSG_MAP
  35. END_MESSAGE_MAP()
  36. /////////////////////////////////////////////////////////////////////////////
  37. // CModulePage message handlers
  38. BOOL CModulePage::OnInitDialog()
  39. {
  40. CDialog::OnInitDialog();
  41. int ret=m_ctrlModule.InsertColumn(0,"文件名",LVCFMT_RIGHT,100,0);
  42.     m_ctrlModule.InsertColumn(1,"基址",LVCFMT_LEFT,100,1);
  43. m_ctrlModule.InsertColumn(2,"映像大小",LVCFMT_LEFT,100,2);
  44. m_ctrlModule.InsertColumn(3,"标志",LVCFMT_LEFT,100,3);
  45. m_ctrlModule.InsertColumn(4,"加载顺序",LVCFMT_LEFT,60,4);
  46. m_ctrlModule.InsertColumn(5,"文件名称",LVCFMT_LEFT,250,5);
  47. m_ctrlModule.SetTextBkColor(RGB(171,174,235));
  48. m_ctrlModule.SetExtendedStyle(LVS_EX_FULLROWSELECT);
  49. ListModule();
  50. return  true;
  51. }
  52. void CModulePage::ListModule()
  53. {  
  54. NTSTATUS                    status;
  55. CString                     str;
  56.     PSYSTEM_MODULE_INFORMATION  module = NULL;
  57.     ULONG                       n      = 0;
  58.     ULONG                       i      = 0;
  59.     void                       *buf    = NULL;
  60.     m_ctrlModule.DeleteAllItems();
  61. if ( !( ZwQuerySystemInformation = ( ZWQUERYSYSTEMINFORMATION )GetProcAddress(GetModuleHandle("ntdll.dll"),
  62.          "ZwQuerySystemInformation" ) ) )
  63.     {
  64.         return;
  65.     }
  66.     ZwQuerySystemInformation( SystemModuleInformation, &n, 0, &n );
  67.     if ( NULL == ( buf = calloc( ( size_t )n, 1 ) ) )
  68.     {
  69.         return;
  70.     }
  71.     status = ZwQuerySystemInformation( SystemModuleInformation, buf, n, NULL );
  72.     if ( !NT_SUCCESS( status ) )
  73.     {
  74.        return;
  75.     }
  76.     module = ( PSYSTEM_MODULE_INFORMATION )( ( PULONG )buf + 1 );
  77.     n      = *( ( PULONG )buf );
  78.     for ( i = 0; i < n; i++ )
  79.     {
  80. m_ctrlModule.InsertItem(i,(LPCTSTR)(module[i].ImageName + module[i].ModuleNameOffset));
  81.         str.Format("0x%08x",module[i].Base);
  82. m_ctrlModule.SetItemText(i,1,str);
  83. str.Format("0x%08x",module[i].Size);
  84. m_ctrlModule.SetItemText(i,2,str);
  85. str.Format("0x%08x",module[i].Flags);
  86. m_ctrlModule.SetItemText(i,3,str);
  87. str.Format("%d",module[i].Index);
  88. m_ctrlModule.SetItemText(i,4,str);
  89. m_ctrlModule.SetItemText(i,5,(LPCTSTR)(module[i].ImageName));
  90.     }
  91.     if ( buf != NULL )
  92.     {
  93.         free( buf );
  94.         buf = NULL;
  95.     }
  96.     return;
  97. }
  98. void CModulePage::OnMenuitemModuleRefresh() 
  99. {
  100. // TODO: Add your command handler code here
  101. ListModule();
  102. }
  103. void CModulePage::OnRclickProcessList(NMHDR* pNMHDR, LRESULT* pResult) 
  104. {
  105. POINT point;
  106. ::GetCursorPos(&point);
  107. CMenu menu;
  108. menu.LoadMenu(IDR_MENU_MODULE);
  109. menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);
  110. *pResult = 0;
  111. }