分类: C/C++
2008-03-14 15:28:12
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 * * * 本程序适用于:WinNT * 代码在Win2000P+SP4 + VC6+SP6测试通过 */ ////////////////////////////////////////////// #include#include #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 三、以上代码在Win2000P+SP4 + VC6+SP6测试通过。
源码可从我的个人主页下载。