我想在Windows中找到每个正在运行的进程的路径。

我尝试使用psutil模块,但并未显示所有路径。由于以下错误,它找不到许多进程的路径:“ psutil.AccessDenied”

c = wmi.WMI()

for process in c.Win32_Process():

p = psutil.Process(int(process.ProcessId))

try:

path = p.exe()

except:

path = "-"

还有另一种方法来获取流程的路径吗?

python大神给出的解决方案

作为管理员,如果您没有获得PROCESS_QUERY_LIMITED_INFORMATION(0x400),则可能可以获取给定进程的PROCESS_QUERY_INFORMATION(0x1000)访问权限。 QueryFullProcessImageNameW仅需要受限访问。但是,这并非在所有情况下都可行。例如,csrss.exe上的安全描述符仅授予对SYSTEM帐户的访问权限,而不授予管理员访问权限。另一个示例是services.exe,它以System(S-1-16-16384)完整性级别运行,而管理员令牌仅以High(S-1-16-12288)完整性级别运行。

通常,您无法打开此类进程的句柄。但作为管理员,您几乎可以使用SeDebugPrivilege。如果启用此特权,Windows AccessCheck会突然成为您最好的朋友(但即使是最好的朋友也有其限制)。

以下是一些ctypes代码,用于启用和禁用当前进程访问令牌中的特权。特权必须首先存在于令牌中,因此请确保使用管理员帐户或以高级管理员(如果使用UAC)运行此特权。

from ctypes import *

from ctypes.wintypes import *

kernel32 = WinDLL('kernel32', use_last_error=True)

advapi32 = WinDLL('advapi32', use_last_error=True)

SE_PRIVILEGE_ENABLED = 0x00000002

TOKEN_ALL_ACCESS = 0x000F0000 | 0x01FF

class LUID(Structure):

_fields_ = (('LowPart', DWORD),

('HighPart', LONG))

class LUID_AND_ATTRIBUTES(Structure):

_fields_ = (('Luid', LUID),

('Attributes', DWORD))

class TOKEN_PRIVILEGES(Structure):

_fields_ = (('PrivilegeCount', DWORD),

('Privileges', LUID_AND_ATTRIBUTES * 1))

def __init__(self, PrivilegeCount=1, *args):

super(TOKEN_PRIVILEGES, self).__init__(PrivilegeCount, *args)

PDWORD = POINTER(DWORD)

PHANDLE = POINTER(HANDLE)

PLUID = POINTER(LUID)

PTOKEN_PRIVILEGES = POINTER(TOKEN_PRIVILEGES)

def errcheck_bool(result, func, args):

if not result:

raise WinError(get_last_error())

return args

kernel32.CloseHandle.argtypes = (HANDLE,)

kernel32.GetCurrentProcess.errcheck = errcheck_bool

kernel32.GetCurrentProcess.restype = HANDLE

# https://msdn.microsoft.com/en-us/library/aa379295

advapi32.OpenProcessToken.errcheck = errcheck_bool

advapi32.OpenProcessToken.argtypes = (

HANDLE, # _In_ ProcessHandle

DWORD, # _In_ DesiredAccess

PHANDLE) # _Out_ TokenHandle

# https://msdn.microsoft.com/en-us/library/aa379180

advapi32.LookupPrivilegeValueW.errcheck = errcheck_bool

advapi32.LookupPrivilegeValueW.argtypes = (

LPCWSTR, # _In_opt_ lpSystemName

LPCWSTR, # _In_ lpName

PLUID) # _Out_ lpLuid

# https://msdn.microsoft.com/en-us/library/aa375202

advapi32.AdjustTokenPrivileges.errcheck = errcheck_bool

advapi32.AdjustTokenPrivileges.argtypes = (

HANDLE, # _In_ TokenHandle

BOOL, # _In_ DisableAllPrivileges

PTOKEN_PRIVILEGES, # _In_opt_ NewState

DWORD, # _In_ BufferLength

PTOKEN_PRIVILEGES, # _Out_opt_ PreviousState

PDWORD) # _Out_opt_ ReturnLength

def enable_privilege(privilege):

hToken = HANDLE()

luid = LUID()

advapi32.LookupPrivilegeValueW(None, privilege, byref(luid))

try:

advapi32.OpenProcessToken(kernel32.GetCurrentProcess(),

TOKEN_ALL_ACCESS,

byref(hToken))

tp = TOKEN_PRIVILEGES()

tp.Privileges[0].Luid = luid

tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED

advapi32.AdjustTokenPrivileges(hToken, False,

byref(tp),

sizeof(tp),

None, None)

finally:

if hToken:

kernel32.CloseHandle(hToken)

def disable_privilege(privilege):

hToken = HANDLE()

luid = LUID()

advapi32.LookupPrivilegeValueW(None, privilege, byref(luid))

try:

advapi32.OpenProcessToken(kernel32.GetCurrentProcess(),

TOKEN_ALL_ACCESS,

byref(hToken))

tp = TOKEN_PRIVILEGES()

tp.Privileges[0].Luid = luid

tp.Privileges[0].Attributes = 0

advapi32.AdjustTokenPrivileges(hToken, False,

byref(tp),

sizeof(tp),

None, None)

finally:

if hToken:

kernel32.CloseHandle(hToken)

测试:

if __name__ == '__main__':

import psutil

system_process_names = {'smss.exe',

'csrss.exe',

'wininit.exe',

'winlogon.exe',

'services.exe',

'lsass.exe',

'lsm.exe'}

system_processes = []

print('SeDebugPrivilege Enabled')

enable_privilege('SeDebugPrivilege')

for proc in psutil.process_iter():

try:

name = proc.name().lower()

path = proc.exe()

except psutil.AccessDenied:

print('{:04d} ACCESS_DENIED'.format(proc.pid))

continue

if name in system_process_names:

system_process_names.remove(name)

system_processes.append(proc)

print('{:04d} {}'.format(proc.pid, path))

assert not system_process_names

print('\nSeDebugPrivilege Disabled')

disable_privilege('SeDebugPrivilege')

for proc in system_processes:

try:

path = psutil.Process(proc.pid).exe() # avoid cache

except psutil.AccessDenied:

path = 'ACCESS DENIED'

print('{:04d} {}'.format(proc.pid, path))

输出量

SeDebugPrivilege Enabled

0000 ACCESS_DENIED

0004 ACCESS_DENIED

0256 C:\Windows\System32\smss.exe

0404 C:\Windows\System32\csrss.exe

0492 C:\Windows\System32\wininit.exe

0540 C:\Windows\System32\winlogon.exe

0588 C:\Windows\System32\services.exe

0596 C:\Windows\System32\lsass.exe

0604 C:\Windows\System32\lsm.exe

4704 ACCESS_DENIED

SeDebugPrivilege Disabled

0256 ACCESS DENIED

0404 ACCESS DENIED

0492 ACCESS DENIED

0540 ACCESS DENIED

0588 ACCESS DENIED

0596 ACCESS DENIED

0604 ACCESS DENIED

拒绝访问空闲(0)和系统(4)进程是可以理解的。但是,有趣的是,即使对调试器,也无法访问PID 4704。这是audiodg.exe,它是受保护的进程,如可在Windows Hardware Dev Center Archive处下载的“受保护的进程”白皮书中所述。受保护的进程允许查询有限的信息,例如图像路径。让我们快速验证是否是这种情况:

>>> kernel32.OpenProcess(0x1000, 0, 4704)

304

>>> path = (c_wchar * 260)()

>>> size = c_uint(260)

>>> kernel32.QueryFullProcessImageNameW(304, 0, path, byref(size))

1

>>> path.value

'C:\\Windows\\System32\\audiodg.exe'

查看正在运行python进程_查找Python中每个正在运行的进程的路径 - python相关推荐

  1. nms python代码_?标检测中的?极?值抑制算法(nms):python代码解析

    ⾮极⼤值抑制(Non-Maximum Suppression)原理 ⾮极⼤值抑制,顾名思义,找出极⼤值,抑制⾮极⼤值.这种思路和算法在各个领域中应⽤⼴泛,⽐如边缘检测算法canny算⼦中就使⽤了该⽅法 ...

  2. 使用Python,OpenCV查找图像中的最亮点

    Python,OpenCV找出图像中的最亮点 1. 原理 2. 优化 3. 效果图 4. 源码 参考 这篇博客将向您展示如何使用Python和OpenCV查找图像中的最亮点,以及应用单行预处理代码-- ...

  3. 查找有向图中两个顶点之间是否存在路径

    查找有向图中两个顶点之间是否存在路径 给定一个有向图和其中的两个顶点,检查是否存在从第一个给定顶点到第二个顶点的路径. Consider the following Graph:Input : (u, ...

  4. cmd中如何运行python文件_在cmd中运行.py文件: python的操作步骤

    在cmd中运行.py文件: python的操作步骤 1 打开cmd, 不改变运行的目录: 输入python 空格  调试好的python文件路径 或者python 空格  将python文件拖入cmd ...

  5. 怎么把python解释器配置在pycharm中_在PyCharm中配置项目(三):配置Python解释器...

    PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具.此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发. PyCha ...

  6. 风变编程python助教_花30天时间,学完了风变编程Python基础语法课

    原标题:花30天时间,学完了风变编程Python基础语法课 20节实打实的课程,1个月时间,我终于学完了风变编程的Python基础语法课.刚开始学的时候,就有人问我感受怎么样,当时本着未知全貌不予置评 ...

  7. linux查看pid 对应的程序_资深程序员总结:分析 Linux 进程的 6 个方法,我全都告诉你...

    (给Linux爱好者加星标,提升Linux技能) 作者:LemonCoder(本文来自作者投稿) 操作系统「进程」是学计算机都要接触的基本概念,抛开那些纯理论的操作系统底层实现,在Linux下做软件开 ...

  8. 高一信息技术课件python编程_教科版高中信息技术选修第一章第三节Python入门--奇妙曲线的绘制 课件(22张ppt) 教案 (2份打包)...

    ID:10986924 资源大小:11671KB 资料简介: 教学设计 [课程标准要求] 体验算法思想,了解算法和程序设计在解决问题过程中的地位及作用:能从简单的问题出发,设计解决问题的算法,并能初步 ...

  9. 风变编程python课_花30天时间,学完了风变编程Python基础语法课

    原标题:花30天时间,学完了风变编程Python基础语法课 20节实打实的课程,1个月时间,我终于学完了风变编程的Python基础语法课.刚开始学的时候,就有人问我感受怎么样,当时本着未知全貌不予置评 ...

  10. android调用python框架_在Java中从Android应用程序执行Python脚本?

    我正试图找到一种在Android中从Java代码执行Python脚本的方法.我对这个问题做了一个研究,但我发现的唯一问题是,如何在APK for android(Kivy e.t.c.)中转换pyth ...

最新文章

  1. php 5.6 mcrypt,php-mcrypt 在PHP5.60+的版本中怎么使用?
  2. 找回mysql root密码_找回MySQL的root密码
  3. 如何写一个Python万能装饰器,既可以装饰有参数的方法,也可以装饰无参数方法,或者有无返回值都可以装饰
  4. CheckBox in ListView
  5. LinuxUSB驱动程序调试--009:编写应用程序---验证协议【转】
  6. URAL1204. Idempotents(扩展欧几里得)
  7. ActiveReports 报表应用教程 (10)---交互式报表之向下钻取(详细数据按需显示解决方案)...
  8. 深入解析Linux并发同步
  9. Gradient Boosting Decision Tree学习
  10. C/S系统实现两数求和(非阻塞+epoll+心跳包检测用户在线状况+滚动日志+配置文件.)...
  11. No such file or directory
  12. Linux常用视频播放器
  13. 计算机的次要功能,FRM考试时所用计算器的操作指南
  14. Android中常用计时器,延时,定时
  15. 将pyecharts生成的html转为图片的一些问题
  16. 我的小米智能家居系统
  17. 3GPP 资源 使用、查找 教程
  18. windows linux 共存,Windows与Linux共存
  19. java编程判断斐波那契数是质数
  20. 特征空间、(数据集)线性可分:线性(二分类)模型

热门文章

  1. 程序员必备Java API和类搜索辅助工具-Jadeite和Apatite
  2. 关于资金调拨系统的设计方法论
  3. BZOJ-1827 [Usaco2010 Mar]gather 奶牛大集会
  4. 从技术债务的角度, 谈谈重构
  5. python的六种基本数据类型_Python基本数据类型
  6. php 抽奖活动_php 积分抽奖活动(大转盘)
  7. three.js物体移动以及相机的移动(位置以及旋转方位)
  8. python因子分析案例_因子分析及python实现(一)
  9. 服务器文件系统报错处理办法
  10. 用C语言画一个Q版奥特曼