这年来流氓软件Software特别多面对这种非常恶心软件Software让大家非常痛苦正是在这种环境的下众多客户需要强大查杀这种流氓软件Software工具如果让你来开发个查杀这种病毒软件Software你会如何做呢?当然是先把电脑里所有进程遍历出来然后把每个进程详细信息显示给用户让用户决定自己那些进程可以运行那些不可以运行或者根据当前进程信息再跟根据病毒库里特征码进行比较就可以标识那些是可疑病毒了下面就来演示用OpenProcess如何打开进程并获取进程名称
OpenProcess声明如下:
WINBASEAPI
__out
HANDLE
WINAPI
OpenProcess(
__in DWORD dwDesiredAccess,
__in BOOL bInheritHandle,
__in DWORD dwProcessId
);
dwDesiredAccess是访问进程权限
bInheritHandle是句柄是否继承进程属性
dwProcessId是进程ID
例子如下:
#001 //获取进程信息
#002 //蔡军生 2007/12/13 qq:9073204 深圳
#003 void TestOpenProcesses(void)
#004 {
#005 //
#006 const nBufSize = 512;
#007 TCHAR chBuf[nBufSize];
#008 ZeroMemory(chBuf,nBufSize);
#009
#010 //
#011 DWORD dwProcs[1024];
#012 DWORD dwNeeded;
#013
#014 //枚举所有进程ID
#015 ( !EnumProcesses( dwProcs, (dwProcs), &dwNeeded ) )
#016 {
#017 //输出出错信息
#018 wsprf(chBuf,_T("EnumProcesses failed (%d).\n"), GetLastError );
#019 OutputDebugString(chBuf);
#020
#021 ;
#022 }
#023
#024 // 计算有多少个进程ID
#025 DWORD dwProcCount = dwNeeded / (DWORD);
#026
#027 wsprf(chBuf,_T("EnumProcesses Count(%d).\n"), dwProcCount );
#028 OutputDebugString(chBuf);
#029
#030 //遍历所有进程ID打开进程
#031 for (DWORD i = 0; i < dwProcCount; i)
#032 {
#033 wsprf(chBuf,_T("EnumProcesses (%d).\r\n"), dwProcs[i] );
#034 OutputDebugString(chBuf);
#035
#036 //根据进程ID打开进程
#037 HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
#038 PROCESS_VM_READ,
#039 FALSE, dwProcs[i] );
#040
#041 (hProcess)
#042 {
#043 HMODULE hMod;
#044 DWORD cbNeeded;
#045
#046 //获取进程第个模块句柄
#047 ( EnumProcessModules( hProcess, &hMod, (hMod),
#048 &cbNeeded) )
#049 {
#050 //
#051 ZeroMemory(chBuf,nBufSize);
#052
#053 //获取进程第个模块名称
#054 (::GetModuleBaseName(hProcess,hMod,chBuf,nBufSize))
#055 {
#056 //
#057 OutputDebugString(chBuf);
#058 OutputDebugString(_T("\r\n"));
#059 }
#060 }
#061 }
#062 }
#063
#064 }
最新评论