直接上代码:

1、

my_debugger_defines.py

定义相关结构体(在后面创建进程及返回信息时,传参可用到)

 1 from ctypes import *
 2 # Let's map the Microsoft types to ctypes for clarity
 3 WORD=c_ushort
 4 DWORD=c_ulong
 5 LPBYTE=POINTER(c_ubyte)
 6 LPTSTR=POINTER(c_char)
 7 HANDLE=c_void_p
 8 #constants
 9 DEBUG_PROCESS=0x00000001
10 CREATE_NEW_CONSOLE = 0x00000010
11 # Structures for CreateProcessA() function
12 class STARTUPINFO(Structure):
13     _fields_=[
14         ("cb",DWORD),
15         ("lpReserved",LPTSTR),
16         ("lpDesktop",LPTSTR),
17         ("lpTitle",LPTSTR),
18         ("dwX",DWORD),
19         ("dwY",DWORD),
20         ("dwXSize",DWORD),
21         ("dwYSize",DWORD),
22         ("dwXCountChars",DWORD),
23         ("dwYCountChars",DWORD),
24         ("dwFlags",DWORD),
25         ("wShowWindow",WORD),
26         ("bcReserved2",WORD),
27         ("lpReserved2",LPBYTE),
28         ("hStdInput", HANDLE),
29         ("hStdOutput", HANDLE),
30         ("hStdError", HANDLE),
31         ]
32
33 class PROCESS_INFORMATION(Structure):
34     _fields_=[
35         ("hProcess",HANDLE),
36         ("hThread", HANDLE),
37         ("dwProcessId", DWORD),
38         ("dwThreadId", DWORD),
39         ]

View Code

2、my_debugger.py

定义创建并跟踪进程的函数:

 1 from ctypes import *
 2 from my_debugger_defines import *
 3
 4 kernel32=windll.kernel32
 5
 6 class debugger():
 7     def _init_(self):
 8         pass
 9     def load(self,path_to_exe):
10         # dwCreation flag determines how to create the process
11         # set creation_flags = CREATE_NEW_CONSOLE if you want
12         # to see the calculator GUI
13         creation_flags = DEBUG_PROCESS
14
15         startupinfo=STARTUPINFO()
16         process_information=PROCESS_INFORMATION()
17
18         startupinfo.dwFlags=0x1
19         startupinfo.wShowWindow
20         startupinfo.cb=sizeof(startupinfo)
21
22         #win32api函数CreatProcess用来创建一个新的进程和他的主线程,
23         #这个新进程运行指定的可执行文件,由第一个参数指定
24         if kernel32.CreateProcessW(path_to_exe, #should be CreateProcessW ,not CreateProcessA ,it is UNICODE API
25                         None,
26                     None,
27                         None,
28                     None,
29                                         #指定附加的、用来控制优先类和进程的创建的标志。
30                     creation_flags,
31                     None,
32                     None,
33                                         #该参数指向一个用于决定新进程的主窗体如何显示的STARTUPINFO结构体。
34                     byref(startupinfo), #byref() 按地址传递
35                                         #该参数指向一个用来接收新进程的识别信息的PROCESS_INFORMATION结构体。
36                     byref(process_information)#这里有个问题:
37                                    #结构体之间的赋值是如何进行的?
38                                    #因为这里定义的process_information跟
39                                    #creatprocess中process_information的参数数量一致
40                                    #而startupinfo是不一致的
41                                    ):
42             print("We have sucessfully lunched the process")
43             print("PID:%d"%process_information.dwProcessId)
44
45         else:
46              print("Error:0x%08x."%kernel32.GetLastError())
47              

View Code

尝试,调用函数:

1 import my_debugger
2
3 debugger=my_debugger.debugger()
4
5 debugger.load("C:\Windows\System32\calc.exe")

View Code

问题:

#结构体之间的赋值是如何进行的?按顺序?
#这里自己定义的process_information结构体跟
#win32函数中creatprocess中process_information的成员数量、位置是必须一致的吗?

#好像也不是这样,因为我process_information是一致的,成功传参了,而我startupinfo不一致,也成功了。

关于win32函数中creatprocess中process_information、startupinfo见http://baike.baidu.com/view/2421585.htm

转载于:https://www.cnblogs.com/zjdyl/p/4197121.html

初学ctypes:打开进程并返回相关信息相关推荐

  1. muduo:获取进程相关信息

    muduo里面有专门获取进程信息的类,记录一下. // Use of this source code is governed by a BSD-style license // that can b ...

  2. 进程控制块包含的信息

    进程控制块包含三类信息  1.标识信息. 用于唯一地标识一个进程,常常分由用户使用的外部标识符和被系统使用的内部标识号.几乎所有操作系统中进程都被赋予一个唯一的.内部使用的数值型的进程号,操作系统的其 ...

  3. 根据身份证号获取相关信息(籍贯、性别、出生日期...)

    根据身份证号获取相关信息(籍贯.性别.出生日期-) 首先我的只是个demo,身份证号也是写死的.仅供参考! 通过访问其他HTTP接口,将身份证号当作参数.调用接口返回相关信息 效果展示: **接口地址 ...

  4. C# 获取进程或线程的相关信息

    参考文章:http://www.cnblogs.com/tommyli/p/4054296.html using System; using System.Collections.Generic; u ...

  5. lsof查看进程占用文件_lsof命令查看进程socket相关信息

    1.释义 查看进程打开的文件.目录,还可以查看进程监听的端口等socket相关的信息 2.系统帮助 lsof: illegal option character: - lsof: -e not fol ...

  6. cpu相关信息(进程、线程、核...)

    cpu的相关信息. 1.cpu 1.1 物理cpu 实际Server中插槽上的CPU个数.物理cpu数量,可以数不重复的 physical id 有几个 1.1.1 查看物理CPU的个数 cat /p ...

  7. linux c 通过 pid 获取 进程相关信息 cmdline

    linux系统命令ps和top都是通过读取/proc/$PID 目录下的信息获取进程的相关信息, 它遍历/proc目录下的首字符为数字的目录,获取系统进程的信息. 我们经常会把pid写到/var/ru ...

  8. php会员到期怎么判断,织梦用php判断检测会员是否登录并返回会员相关信息

    织梦有自带的会员功能,只需开启就可以直接使用了. 但是我们经常是需要判断会员是否登录了的,如果登录了就显示会员相关信息,没有登录就提示登录.我们可以在php文件中写入以下代码,用以判断并调取会员数据. ...

  9. linux netstat Netstat是在内核中访问网络连接状态及其相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

    在Internet RFC标准中,Netstat的定义是: Netstat是在内核中访问网络连接状态及其相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告. Netstat ...

最新文章

  1. python在财务领域的应用-浅谈财务智能化在实际工作中的运用
  2. ubuntu mysql 5.7_Ubuntu 18.04 安装mysql5.7
  3. php oauth api,PHP实现人人OAuth登录和API调用
  4. spark的python开发安装方式_PyCharm搭建Spark开发环境的实现步骤
  5. 47_pytorch循环神经网络(学习笔记)
  6. mousedown(function(){ return false; })作用
  7. 【数据结构与算法】之深入解析运用链表结构计算“两数相加”的算法实现
  8. 细数开源历史上的九个重大事件
  9. 计算机小知识分享,分享几小个计算机操作技巧
  10. 链接ftp,把文件或图片上传到ftp指定的文件夹中
  11. 用AI算法分析光影看到盲点:这项MIT新研究偷学到二娃技能
  12. yaf mysql pdo 封装_PDO 操作数据库
  13. oracle dblink设置
  14. Extjs4创建简单的图片上传
  15. noi题目答案c语言,NOI2019基础知识题库
  16. OpenGl运行窗口出现纯白色
  17. php ppt如何转换成pdf,PHP将Word,Wps,Excel,PPT转成PDF
  18. vue组件中引入public文件,build打包后找不到资源报错404
  19. GitLab 中编辑 Markdown 写README技巧
  20. win10如何通过局域网从浏览器访问ip

热门文章

  1. linux内核配置参考,[转]Linux内核配置选项 参考(3)
  2. unity 关闭自己脚本_unity中使用代码控制脚本的开启和关闭 enabled
  3. 【cropper】限制图片大小
  4. 【linux】查看内存使用情况
  5. python 数字证书模拟登录_用于生成WebService使用的数字证书及签署证书.python脚本...
  6. python画方波_numpy绘制方波及方波无穷级数的表示
  7. linux 限制连接时间,linux抵御DDoS攻击方法 通过iptables限制TCP连接和频率
  8. f12控制台如何查看consul_如何打印consul的错误信息
  9. 鸿蒙杀戮手机电脑版,鸿蒙杀戮单职业最新版
  10. Flink Operator之CoGroup、Join以及Connect