Python遍历进程中的所有句柄

要遍历 Python 进程中的所有句柄,可以使用 ctypes 库来访问 Windows API。下面是一个示例代码:

import ctypes
import sys

kernel32 = ctypes.windll.kernel32

PROCESS_QUERY_INFORMATION =0x0400
PROCESS_VM_READ = 0x0010

def enum_windows_handles(pid):
    hModule = kernel32.GetModuleHandleW("kernel32.dll")
    psapi = ctypes.WinDLL("psapi.dll")
    EnumProcessModules = psapi.EnumProcessModules
    EnumProcessModules.restype = ctypes.c_bool
    GetModuleBaseName = psapi.GetModuleBaseNameW
    GetModuleBaseName.restype = ctypes.c_uint
    GetModuleBaseName.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_uint32]
    hProcess = kernel32.OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, False, pid)

    if hProcess:
        modules = (ctypes.c_void_p * 1024)()
        cbNeeded = ctypes.c_uint32()
        if EnumProcessModules(hProcess, ctypes.byref(modules), ctypes.sizeof(modules), ctypes.byref(cbNeeded)):
            nMods = cbNeeded.value // ctypes.sizeof(ctypes.c_void_p)
            for i in range(nMods):
                module = modules[i]
                module_name = ctypes.create_unicode_buffer(1024)
                GetModuleBaseName(hProcess, module, module_name, ctypes.sizeof(module_name))
                print(module_name.value)
        else:
            print("Failed to enumerate modules.")
        kernel32.CloseHandle(hProcess)
    else:
        print("Failed to open process with PID %d." % pid)
        sys.exit(1)

enum_windows_handles(pid=int(sys.argv[1]))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值