如何在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的路径。

时间: 2024-08-20 11:14:32

如何在NT下获取进程的路径(增补)的相关文章

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

一:获取NT下进程路径的方法 在Win9X系统中,利用ToolHelp API中的相关函数可以很方便得得到进程的名称及其路径.但这种方法在NT系统中就不能奏效了,szExeFile仅仅得到的是进程的名称,并没有包含进程的路径. 如何在NT下获取进程的路径呢?(由于WIN9X系统不在我们讨论的范围之内,所以我们选用PSAPI中的相关函数进行说明,这仅仅适用于NT系统.)其实也很简单--用OpenProcess()函数将进程打开后,再利用EnumProcessModules()函数枚举该进程的模块,

如何在DOS下管理进程

  学会如何在DOS中分析进程的方法,在无法进人桌面环境时就显得非常有用.査看的方法很简单: 步骤1:在win7旗舰版中"运行"栏中使用"Cmd"命令打开"命令提示符"窗口. 步骤2:输入"Tasklist"命令并按Enter键,在随即得到的如图所示反馈信息中,就可以看到本机的所有进程了. 从上图中可以看出,本机的进程显示结果由五部分组成:图像名(进程名).PID.会话名.会话#.内存使用.此时,如果要关闭某个进程(如要终止本

在Win9x/NT下获取硬盘物理序列号

本文代码在Win2k下试验成功. #include <WinIOCtl.h>#include <stdio.h>#pragma inline//---------------------------------------------------------------------------// IDE NT/2000/XP专用变量#define GETVERSIONOUTPARAMS  GETVERSIONINPARAMS#define DFP_GET_VERSION  SMA

windows和linux下获取当前程序路径以及cpu数

[cpp] view plaincopy   #ifdef WIN32   #include <Windows.h>   #else   #include <stdio.h>   #include <unistd.h>   #endif      #include <assert.h>          std::string getCurrentAppPath()       {   #ifdef WIN32           char path[MAX

Spring下获取项目根路径--good

Spring 在 org.springframework.web.util 包中提供了几个特殊用途的 Servlet 监听器,正确地使用它们可以完成一些特定需求的功能.比如某些第三方工具支持通过 ${key} 的方式引用系统参数(即可以通过 System.getProperty() 获取的属性),WebAppRootListener 可以将 Web 应用根目录添加到系统参数中,对应的属性名可以通过名为"webAppRootKey"的 Servlet 上下文参数指定,默认为"w

CMD魔法堂:获取进程路径和PID值的方法集

一.前言      在开发发布更更新工具--更新Weblogic应用模块时,了解到更新Weblogic应用需要先关闭Weblogic应用窗口然后是清缓存.更新应用文 件,最后再重启Weblogic应用窗口.所以第一步需要获取Weblogic应用窗口的PID然后将其kill掉.下面将记录曾经的各种尝试,以便日后 查阅.   二.wmic命令 windows自带功能,功能十分强大 示例1--获取所有进程信息: wmic process 示例2--指定进程执行路径获取PID信息: vmic proce

WinCE下如何获取进程所在的目录

众所周知,WinCE下没有当前目录的概念,所有路径都以根目录"\\"为参考.获取进程所在目录的参考代码如下. 1     GetModuleFileName(NULL,gszPath,MAX_PATH);2     int len = wcslen(gszPath);3     TCHAR *p = gszPath + len;4     while (*--p != _T('\\'));5     *++p = _T('\0'); 或者 1     GetModuleFileName

python-如何在linux下开启守护进程

问题描述 如何在linux下开启守护进程 问题是这样的:我用python写了两个模块:Store.py,Search.py,在这两个文件中,分别会开启Store线程和Search线程.这两个线程是需要一直开启的,如果发现这两个线程挂了,需要重新开启. 我之前的做法是:在linux的begin.sh脚本中写下如下内容: #!/bin/bash python Store.py python Search.py 然后执行./begin.sh. 然后出现下面的问题: 由于Store.py中开启了线程,程

如何在win7下快速获取高级管理员权限?

  在很多情况下,我们在操作电脑的时候都需要用到高级权限,只有获取到超级管理员权限的时候,我们才可以完成某项操作,那么如何在win7下快速获取高级管理员权限?小编下面就来介绍一下吧! 其实很简单,我们只需要建立一个记事本文件,然后将小编下面给出的代码复制进去,然后再另存为".reg"格式,完成之后再双击该文件即可.以下便是需要复制的代码: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT*shellrunas] @=&quo