资源描述:
《如何在nt下获取进程路径(增补)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、如何在NT下获取进程的路径(增补).txt爱情就像脚上的鞋,只有失去的时候才知道赤脚走路是什么滋味骗人有风险,说慌要谨慎。不要爱上年纪小的男人,他会把你当成爱情学校,一旦学徒圆满,便会义无反顾地离开你。如何在NT下获取进程的路径(增补)——获取NT中系统进程的路径天津赵春生下载源代码一、程序说明 最近整理文档,发现以前写的《如何在NT下获取进程的路径》一文中还有个问题没有解决:原文中的程序无法获取系统进程的路径,如:csrss.exe。记得VCKBASE上有位网友说过一个方法:“给枚举的进程增加SE_DEBUG_NAME权限即可”,于是在网上找了些资料,解决了原文中的问题。这里要特别感谢那位
2、名叫rovershen的网友!我自定义了一个函数,用来赋予进程指定的权限(本例为SE_DEBUG_NAME):BOOLEnablePrivilege(HANDLEhToken,LPCSTRszPrivName){TOKEN_PRIVILEGEStkp;LookupPrivilegeValue(NULL,szPrivName,&tkp.Privileges[0].Luid);//修改进程权限tkp.PrivilegeCount=1;tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;AdjustTokenPrivileges(hToken,FALS
3、E,&tkp,sizeoftkp,NULL,NULL);//通知系统修改进程权限return((GetLastError()==ERROR_SUCCESS));} 通过OpenProcessToken函数获得进程(本例为自身进程)访问令牌的句柄,然后调用此函数后就可以像原文那样打开目标进程获取路径了。可以看到:本方法已经成功获取了系统进程csrss.exe的路径。二、具体实践///////////////////////////////////////////////*ShowProcessPath2.0*版权所有(C)2005赵春生*2005.09.02*http://timw.yeah.
4、net*http://timw.126.com*本程序适用于:WinNT*代码在Win2000P+SP4+VC6+SP6测试通过*///////////////////////////////////////////////#include#include#include"PSAPI.H"#pragmacomment(lib,"PSAPI.LIB")//自定义函数:赋予指定特权。这里用来提升程序权限。BOOLEnablePrivilege(HANDLEhToken,LPCSTRszPrivName);intmain(void){DWORDprocessi
5、d[1024],needed,processcount,i;HANDLEhProcess;HMODULEhModule;charpath[MAX_PATH]="",temp[256];HANDLEhToken;printf("ShowProcessPath2.0with[ProcessStatusAPI]");if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken)){if(EnablePrivilege(hToken,SE_DEBUG_NAME)){EnumProcesses(processid,
6、sizeof(processid),&needed);processcount=needed/sizeof(DWORD);for(i=0;i7、PROCESS_VM_READ,false,processid[i]);if(hProcess){EnumProcessModules(hProcess,&hModule,sizeof(hModule),&needed);GetModuleFileNameEx(hProcess,hModule,path,sizeof(path
8、));GetShortPathName(path,path,256);itoa(processid[i],temp,10);printf("%s---%s",path,temp);}elseprintf("Failed!!!");}}}CloseHandle(hProcess);CloseHandle(hModule);itoa(processcount,temp,10);printf("