j进程和线程?

why168 2003-10-18 10:41:29
请各位大侠们帮小弟一把:
已知:一个应用程序的名称,问: 在我的程序中怎样才能取到这个应用程序的进程句柄?(用什么样的API?)
还有,在Jeffrey Richter 的书中 有一个叫“GetFirstChiled
...全文
76 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcforever 2003-10-19
  • 打赏
  • 举报
回复
用OpenProcess()来实现此功能!
具体用法楼上的说的很清楚!
jhyu 2003-10-18
  • 打赏
  • 举报
回复
这个是与操作系统内部的数据结构具体相关的,需要通过系统api实现。以win nt/2k/xp为例,可以通过PSAPI实现。可参考下面的文章:

调用PSAPI函数枚举系统进程
  
M$的Windows NT开发小组开发了自己Process Status函数,包含在
PSAPI.DLL文件中,这些函数只能在高于NT4.0以后的版本中使用。PSAPI一共有
14个函数[实际PSAPI.DLL输出函数有19个,但其中有5个函数有两个版本,分别
是ANSI和Unicode版本],通过调用这些函数,我们可以很方便的取得系统进程的
所有信息,例如进程名、进程ID、父进程ID、进程优先级、映射到进程空间的模
块列表等等。为了方便起见,以下的例子程序只获取进程的名字和ID。
  简单的程序如下:
/********************************************************************
Module:ps.c
说明:调用PSAPI函数枚举系统进程名和ID,Only for NT/2000
*********************************************************************/
#include <windows.h>
#include <stdio.h>
#include "psapi.h"
#pragma comment(lib,"psapi.lib")

void PrintProcessNameAndID( DWORD processID )
{
  char szProcessName[MAX_PATH] = "unknown";
  //取得进程的句柄
  HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                  PROCESS_VM_READ,
                  FALSE, processID );
  //取得进程名称
  if ( hProcess )
  {
    HMODULE hMod;
    DWORD cbNeeded;
    if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&cbNeeded))
      GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) );
  }
  //回显进程名称和ID
  printf( "\n%-20s%-20d", szProcessName, processID );
  CloseHandle( hProcess );
}

void main( )
{
  DWORD aProcesses[1024], cbNeeded, cProcesses;
  unsigned int i;
  //枚举系统进程ID列表
  if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded))
    return;
  // Calculate how many process identifiers were returned.
  //计算进程数量
  cProcesses = cbNeeded / sizeof(DWORD);
  // 输出每个进程的名称和ID
  for ( i = 0; i < cProcesses; i++ )
    PrintProcessNameAndID( aProcesses[i] );
  return;
}

基于PSAPI,可以显示内存中所有的进程及进程调用的所有模块文件(DLL),可以用来协助程序、DLL的调试,也可以用来查找DLL木马和后门。

当然,这篇文章也有其局限性。高手也可以通过驱动程序等方法进入ring0层(在win nt/2k/xp 即所谓的 核心态),从底层修改os内部的数据结构,从而隐藏进程,令楼主所说的功能无法实现


第二个问题看不懂你说什么
yndfcd 2003-10-18
  • 打赏
  • 举报
回复
用OpenProcess.

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧