专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »C语言教程 » 获取进程路径:在NT下获取进程路径的方法 »正文

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

来源: 发布时间:星期四, 2009年2月12日 浏览:101次 评论:0


介绍说明

  最近整理文档发现以前写如何在NT下获取进程路径文中还有个问题没有解决:原文中无法获取系统进程路径如:csrss.exe记得VCKBASE上有位网友说过个思路方法:给枚举进程增加SE_DEBUG_NAME权限即可于是在网上找了些资料解决了原文中问题这里要特别感谢那位名叫rovershen网友!

我自定义了用来赋予进程指定权限(本例为SE_DEBUG_NAME): BOOL EnablePrivilege(HANDLE hToken,LPCSTR szPrivName)
{

TOKEN_PRIVILEGES tkp;

LookupPrivilegeValue( NULL,szPrivName,&tkp.Privileges[0].Luid );//修改进程权限
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken,FALSE,&tkp, tkp,NULL,NULL );//通知系统修改进程权限

( (GetLastErrorERROR_SUCCESS) );

}
  通过OpenProcessToken获得进程(本例为自身进程)访问令牌句柄然后后就可以像原文那样打开目标进程获取路径了可以看到:本思路方法已经成功获取了系统进程csrss.exe路径



2、具体实战

//////////////////////////////////////////////
/ * ShowProcessPath 2.0
* 版权所有 (C) 2005 赵春生
* 2005.09.02
* http://timw.yeah.net
* http://timw.126.com
* 适用于:WinNT
* 代码在Win2000P+SP4 + VC6+SP6测试通过
*/
//////////////////////////////////////////////

# <stdio.h>
# <windows.h>
# \"PSAPI.H\"
#pragma comment( lib, \"PSAPI.LIB\" )

//自定义:赋予指定特权这里用来提升权限
BOOL EnablePrivilege(HANDLE hToken,LPCSTR szPrivName);

(void)
{
DWORD processid[1024],needed,processcount,i;
HANDLE hProcess;
HMODULE hModule;
char path[MAX_PATH] = \"\",temp[256];



HANDLE hToken;
[Page]
prf(\"ShowProcessPath 2.0 with [Process Status API]\\n\\n\");

( OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES,&hToken) )
{
(EnablePrivilege(hToken,SE_DEBUG_NAME))
{

EnumProcesses(processid, (processid), &needed);
processcount=needed/(DWORD);

for (i=0;i<processcount;i)
{
hProcess=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
false,
processid[i]);
(hProcess)


{
[Page] EnumProcessModules(hProcess, &hModule, (hModule), &needed);
GetModuleFileNameEx(hProcess, hModule, path, (path));
GetShortPathName(path,path,256);
itoa(processid[i],temp,10);
prf(\"%s --- %s\\n\",path,temp);
}

prf(\"Failed!!!\\n\");
}
}
}

CloseHandle(hProcess);
CloseHandle(hModule);

itoa(processcount,temp,10);
prf(\"\\nProcess Count:%s\\n\\n\",temp);



0;
}

//////////////////////////////////////////////////////////////////////
[Page]
BOOL EnablePrivilege(HANDLE hToken,LPCSTR szPrivName)
{
TOKEN_PRIVILEGES tkp;

LookupPrivilegeValue( NULL,szPrivName,&tkp.Privileges[0].Luid );//修改进程权限
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken,FALSE,&tkp, tkp,NULL,NULL );//通知系统修改进程权限

( (GetLastErrorERROR_SUCCESS) );
}
3、以上代码在Win2000P+SP4 + VC6+SP6测试通过
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: