获取NT中系统进程的路径
来源:互联网 发布:英文网络流行语 编辑:程序博客网 时间:2024/05/02 05:01
如何在NT下获取进程的路径(增补)
——获取NT中系统进程的路径
天津 赵春生
一、程序说明
最近整理文档,发现以前写的《如何在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,sizeof tkp,NULL,NULL );//通知系统修改进程权限return( (GetLastError()==ERROR_SUCCESS) );}通过OpenProcessToken函数获得进程(本例为自身进程)访问令牌的句柄,然后调用此函数后就可以像原文那样打开目标进程获取路径了。可以看到:本方法已经成功获取了系统进程csrss.exe的路径。
二、具体实践
/////////////////////////////////////////////// *ShowProcessPath 2.0 *版权所有 (C) 2005 赵春生 *2005.09.02 *http://timw.yeah.net *http://timw.126.com *本程序适用于:WinNT *代码在Win2000P+SP4 + VC6+SP6测试通过*///////////////////////////////////////////////#include <stdio.h>#include <windows.h>#include "PSAPI.H"#pragma comment( lib, "PSAPI.LIB" )//自定义函数:赋予指定特权。这里用来提升程序权限。BOOL EnablePrivilege(HANDLE hToken,LPCSTR szPrivName);int main(void){DWORD processid[1024],needed,processcount,i;HANDLE hProcess;HMODULE hModule;char path[MAX_PATH] = "",temp[256];HANDLE hToken;printf("ShowProcessPath 2.0 with [Process Status API]/n/n");if ( OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken) ){if (EnablePrivilege(hToken,SE_DEBUG_NAME)){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);}elseprintf("Failed!!!/n");}}}CloseHandle(hProcess);CloseHandle(hModule);itoa(processcount,temp,10);printf("/nProcess Count:%s/n/n",temp);return 0;}//////////////////////////////////////////////////////////////////////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,sizeof tkp,NULL,NULL );//通知系统修改进程权限return( (GetLastError()==ERROR_SUCCESS) );}三、以上代码在Win2000P+SP4 + VC6+SP6测试通过。
源码可从我的个人主页下载。
http://timw.yeah.net
http://timw.126.com
- 获取NT中系统进程的路径
- 如何在NT下获取进程的路径(增补)
- 如何在NT下获取进程的路径
- 如何在NT下获取进程的路径
- windows NT中获取系统用户名
- Windows NT/2000系统中如何获取系统的启动时间(zz)
- Windows NT/2000系统中如何获取系统的启动时间
- js中获取系统的应用路径
- 提升权限获取其他系统进程的路径(转)
- 提升权限获取其他系统进程的路径(转)
- 使用wmic获取运行中进程的路径
- Windows NT/2000系统下进程的隐藏
- NT系统下木马进程的隐藏与检测
- NT系统下木马进程的隐藏与检测
- NT系统下木马进程的隐藏与检测(转)
- NT系统下木马进程的隐藏与检测
- 获取进程当前的路径
- WinCE 系统取得进程中 EXE 文件的完整路径
- 我在挣扎
- 使用Visual SourceSafe管理Asp.Net项目出现速度极慢的故障原因
- 测试
- web开发的下一个学习方向:ajax
- ACE_Future实现了单写多读模式,可以用来异步方法调用的结果返回
- 获取NT中系统进程的路径
- windows 2003下asp.Net站点无法使用用户名+密码的方式连接SQLSERVER的问题
- 新型BT软件雏形
- 使用split分割多字符的字符串的方法
- 2005.9.25 精神亢奋
- 将HTML代码直接加入到TWebbrowser组件中去
- 网上书店可行性分析报告(原创)
- XP介面
- DVDRip转成的AVI,播放出现画面抖动的解决方法!