首页 文萃 技术文档 二手市场 培训机构 e书下载 五星图书 考试资源 软件下载 标准下载 最新资讯
图书资源 留言板 联系我们
Windows API OpenProcess函数 |西安信息资源网|E书下载|电子书下载|信息发布


Windows API OpenProcess函数 转帖

推荐人:WD

 
      
 这一年来流氓软件特别多,面对这种非常恶心的软件,让大家非常痛苦。正是在这种环境之下,众多客户需要强大查杀这种流氓软件的工具。如果让你来开发一个查杀这种病毒的软件,你会怎么做呢?当然是先把电脑里所有进程遍历出来,然后把每个进程的详细信息显示给用户,让用户决定自己那些进程可以运行,那些不可以运行。或者根据当前进程的信息,再跟根据病毒库里的特征码进行比较,就可以标识那些是可疑的病毒了。下面就来演示用函数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 int nBufSize = 512;
 #007         TCHAR chBuf[nBufSize];
 #008         ZeroMemory(chBuf,nBufSize);
 #009 
 #010         //
 #011         DWORD dwProcs[1024];
 #012         DWORD dwNeeded;
 #013 
 #014         //枚举所有进程ID。
 #015         if ( !EnumProcesses( dwProcs, sizeof(dwProcs), &dwNeeded ) )
 #016         {
 #017               //输出出错信息。
 #018               wsprintf(chBuf,_T("EnumProcesses failed (%d).\n"), GetLastError() );
 #019               OutputDebugString(chBuf);
 #020 
 #021               return;
 #022         }    
 #023 
 #024         // 计算有多少个进程ID。
 #025         DWORD dwProcCount = dwNeeded / sizeof(DWORD);
 #026 
 #027         wsprintf(chBuf,_T("EnumProcesses Count(%d).\n"), dwProcCount );
 #028         OutputDebugString(chBuf);
 #029 
 #030         //遍历所有进程ID,打开进程。
 #031         for (DWORD i = 0; i < dwProcCount; i++)
 #032         {
 #033               wsprintf(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               if (hProcess)
 #042               {
 #043                    HMODULE hMod;
 #044                    DWORD cbNeeded;
 #045 
 #046                    //获取进程第一个模块的句柄。
 #047                    if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), 
 #048                          &cbNeeded) )
 #049                    {
 #050                          //
 #051                          ZeroMemory(chBuf,nBufSize);
 #052 
 #053                          //获取进程第一个模块的名称。
 #054                        if (::GetModuleBaseName(hProcess,hMod,chBuf,nBufSize))
 #055                          {
 #056                               //
 #057                               OutputDebugString(chBuf);
 #058                               OutputDebugString(_T("\r\n"));
 #059                          }
 #060                    }                     
 #061               }
 #062         }         
 #063 
 #064  }

 

[收藏本文]   [发表评论]  [查看评论我要推荐文章

上一篇:Web MVC框架-命令及页面跳转 下一篇:一个使用J2ME技术实现的简单计算器

最新参与TOP10
ascall码
【经典推荐】每个JAVA初学者都应该搞懂的问题
成功安装Mysql+Apache2+php5过程
五种提高 SQL 性能的方法
配置Eclpise+tomcat并实现JSP的编写与部署
Eclipse 3.0 上配置JSP开发环境
PHP中的XML拉模式详解
php的ajax框架xajax入门与试用
win2000server IIS和tomcat5多站点配置
JSP连接SQL Server 2000系统配置

西安信息资源网 版权所有 全球排名

QQ:363694816