如何在NT下获取进程的路径

王朝vc·作者佚名  2006-01-17
宽屏版  字体: |||超大  

如何在NT下获取进程的路径

作者:赵春生

下载示例源代码

一:获取NT下进程路径的方法

在Win9X系统中,利用ToolHelp API中的相关函数可以很方便得得到进程的名称及其路径。但这种方法在NT系统中就不能奏效了,szExeFile仅仅得到的是进程的名称,并没有包含进程的路径。

如何在NT下获取进程的路径呢?(由于WIN9X系统不在我们讨论的范围之内,所以我们选用PSAPI中的相关函数进行说明,这仅仅适用于NT系统。)其实也很简单——用OpenProcess()函数将进程打开后,再利用EnumProcessModules()函数枚举该进程的模块,最后利用GetModuleFileNameEx()函数就能取得该进程的路径了。

下面的这段程序将枚举NT系统中的进程,并将显示每个进程的路径。当然,这种方法对一些系统保护的进程而言或多或少会出现些问题,例如:smss.exe、winlogon.exe,csrss.exe等。如果谁有更好的方法请赐教,不胜感激。

二:具体实践

//////////////////////////////////////////////////////////////////////////////////

/*

* ShowProcessPath_PSAPI

* 版权所有 (C) 2004 赵春生

* 2004.08.08

* http://timw.yeah.net

* http://timw.126.com

* 本程序适用于:WinNT

* 代码在Win2000P+SP4 + VC6+SP5测试通过

*/

#include <stdio.h

#include <windows.h

#include "PSAPI.H"

#pragma comment( lib, "PSAPI.LIB" )

int main(void)

{

DWORD processid[1024],needed,processcount,i;

HANDLE hProcess;

HMODULE hModule;

char path[MAX_PATH] = "",temp[256];

printf("ShowProcessPath with [Process Status API]\n\n");

EnumProcesses(processid, sizeof(processid), &needed);

processcount=needed/sizeof(DWORD);

for (i=0;i<processcount;i++)

{

hProcess=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,false,processid[i]);

if (hProcess)

{

EnumProcessModules(hProcess, &hModule, sizeof(hModule), &needed);

GetModuleFileNameEx(hProcess, hModule, path, sizeof(path));

GetShortPathName(path,path,256);

itoa(processid[i],temp,10);

printf("%s --- %s\n",path,temp);

}

else

printf("Failed!!!\n");

}

CloseHandle(hProcess);

CloseHandle(hModule);

itoa(processcount,temp,10);

printf("\nProcess Count:%s\n\n",temp);

return 0;

}

//////////////////////////////////////////////////////////////////////////////////

三:相关测试

用ToolHelp API按上述方法也能达到获取进程路径的目的,但和PSAPI相比后者则更有优势,详见下表,测试环境为:Win2000P+SP4。

-----进程名--------PSAPI----THAPI---

| smss.exe | Y N

|

csrss.exeN N

| winlogon.exe | Y N

|

services.exe Y N

| lsass.exe| Y N

|

svchost.exeY N

| WinMgmt.exe| Y N

|

Explorer.EXE Y Y

| mobsync.exe| Y Y

|

conime.exe Y Y

------------------------------------

四:测试环境

以上代码在Win2000P+SP4 + VC6+SP5测试通过。

源码也可从我的个人主页下载。

http://timw.yeah.net

http://timw.126.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有