当前位置: 首页 > news >正文

win32相关(进程相关API)

进程相关API


ID与句柄

在任务管理器中,有一栏是PID,上面记录着windows中每个进程的唯一编号。除了每个进程都有一个句柄表以外,windows还有一个父唯一的全局句柄表

CreateProcess

	BOOL CreateProcess(LPCSTR                	lpApplicationName,			// 对象名称LPSTR                 	lpCommandLine,				// 命令行LPSECURITY_ATTRIBUTES 	lpProcessAttributes,		// 不继承进程句柄LPSECURITY_ATTRIBUTES 	lpThreadAttributes,			// 不继承线程句柄BOOL                  	bInheritHandles,			// 不继承句柄DWORD                 	dwCreationFlags,			// 没有创建标志LPVOID                	lpEnvironment,				// 使用父进程环境变量LPCSTR                	lpCurrentDirectory,			// 使用父进程目录作为当前目录LPSTARTUPINFOA        	lpStartupInfo,				LPPROCESS_INFORMATION 	lpProcessInformation
);// LPSTARTUPINFOA 信息       	
typedef struct _STARTUPINFOA {DWORD  cb;LPSTR  lpReserved;LPSTR  lpDesktop;LPSTR  lpTitle;DWORD  dwX;DWORD  dwY;DWORD  dwXSize;DWORD  dwYSize;DWORD  dwXCountChars;DWORD  dwYCountChars;DWORD  dwFillAttribute;DWORD  dwFlags;WORD   wShowWindow;WORD   cbReserved2;LPBYTE lpReserved2;HANDLE hStdInput;HANDLE hStdOutput;HANDLE hStdError;
} STARTUPINFOA, *LPSTARTUPINFOA;// LPPROCESS_INFORMATION 信息
typedef struct _PROCESS_INFORMATION {HANDLE hProcess;			// 进程句柄HANDLE hThread;			// 线程句柄DWORD  dwProcessId;		// 进程idDWORD  dwThreadId;		// 线程id
} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;

TerminateProcess

BOOL TerminateProcess(HANDLE hProcess,			// 要终止的进程句柄UINT   uExitCode			// 进程和线程将使用的退出代码
);

OpenProcess

HANDLE OpenProcess(DWORD dwDesiredAccess,	// 进程访问权限BOOL  bInheritHandle,		// 是否继承DWORD dwProcessId			// 要打开的本地标识符(pid)
);
我们来看一下CreateProcess中的 `dwCreationFlags` 属性 

dwCreationFlags属性

说一下CREATE_SUSPENDED这种方式创建的线程,如果是以挂起的方式来创建的进程,那么它的进程创建过程就会有一些变化

  1. 映射exe文件
  2. 创建内核对象EPROCESS
  3. 映射系统DLL
  4. 创建线程内核对象ETHREAD
  5. 如果是以挂起方式创建:
    • 这里面就可以做一些其他的事情(提前注入,等)
  6. 恢复以后再继续执行
  7. 。。。

GetModuleFilename

// 检索包含指定模块的文件的完全限定路径
DWORD GetModuleFileNameA(HMODULE hModuleLPSTR   lpFilename,DWORD   nSize
);

GetCurrentDirectory

// 检索当前进程的当前目录
DWORD GetCurrentDirectory(DWORD  nBufferLength,LPTSTR lpBuffer
);

其他进程相关api

  • GetCurrentProcessId 获取进程PID
  • GetCurrentProcess 获取进程句柄
  • GetcommandLine 获取命令行
  • GetStartupInfo 获取启动信息
  • EnumProcesses 遍历进程ID
  • CreateToolhelp32napshot 获取进程快照
  • Exitprocess 退出本进程
  • WinExec 启动一个程序
  • ShellExecute 运行一个外部程序,或者打开一个文件目录,文件夹等
  • system 控制台命令

相关文章:

  • 什么是DevOps的核心目标?它如何解决传统开发与运维之间的冲突?​
  • 好坏质检分类实战(异常数据检测、降维、KNN模型分类、混淆矩阵进行模型评估)
  • 7000字基于 SpringBoot 的 Cosplay 文化展示与交流社区系统设计与实现
  • Excel 统计某个字符串在指定区域出现的次数
  • 有什么excel.js支持IE11,可以显示EXCEL单元格数据,支持单元格合并,边框线,单元格背景
  • 小样本分类新突破:QPT技术详解
  • day 33 python打卡
  • SPSS跨域分类:自监督知识+软模板优化
  • SpringBoot-允许跨域配置
  • 参数/非参数检验和连续/离散/分类等变量类型的关系
  • Rust 开发的一些GUI库
  • Reactor和Proactor
  • React从基础入门到高级实战:React 核心技术 - 错误处理与错误边界:构建稳定的应用
  • React 虚拟dom
  • Rust语言学习教程、案例与项目实战指引
  • 甲醇 燃料 不也有碳排放吗?【AI回答版】
  • FPGA 的分类和发展
  • Rust 学习笔记:关于闭包的练习题
  • 运维自动化工具 ansible 知识点总结
  • 怎么查找idea插件的下载位置,并更改
  • 宽屏企业网站模板/专业网站快速
  • 做物流的网站都有什么风险/百度seo优化服务
  • 专业做网站的公司哪家好/长春网站建设公司
  • 池州网站制作优化/朋友圈软文
  • 自己做的网站怎么挣钱/欧美seo查询
  • wordpress怎么让图全屏显示/seo职业培训学校