windows api进程创建

Posted websecyw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows api进程创建相关的知识,希望对你有一定的参考价值。

一、createprocess

BOOL CreateProcess(
LPCTSTR lpApplicationName, // name of executable module  //要创建的进程名称

LPTSTR lpCommandLine, // command line string   //命令行
LPSECURITY_ATTRIBUTES lpProcessAttributes, //  是否继承进程句柄
LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD  //是否继承线程句柄

BOOL bInheritHandles, // handle inheritance option  //是否继承句柄
DWORD dwCreationFlags, // creation flags  //有没有创建标志
LPVOID lpEnvironment, // new environment block  // 是否使用父进程环境变量
LPCTSTR lpCurrentDirectory, // current directory name  //使用父进程目录作为当前目录,可以自己设置目录
LPSTARTUPINFO lpStartupInfo, // startup information   //STARTUPINFOW结构体详细信息(启动状态相关信息)
LPPROCESS_INFORMATION lpProcessInformation // process information  //PROCESS_INFORMATION结构体进程信息

 

#include "stdafx.h"
#include "windows.h"
int main(int argc, char* argv[])
{  
//在堆栈中的局部遍历需要赋初值      char lpPath[] = "notepad.exe"; STARTUPINFO si = {sizeof(si)}; //记录结构体有多大,必须要参数 PROCESS_INFORMATION pi; //进程id,进程句柄,线程id,线程句柄存在于这个结构体 CreateProcess(NULL,lpPath,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi); return 0; }

 二、句柄表

1.内核对象,像进程,线程,文件,互斥体,事件等在内核都有一个对应的结构体,这些结构体由内核负责管理,管这样的对象叫做内核对象。

技术图片

 

 

CreateProcess等函数使用的时候都相当于在0环创建了一个结构体,句柄表不是每个内核对象都有,只有每个进程才有句柄表

 

 

技术图片

 

图文说明:会将A,B,C,D的0环地址(内核层)写进这张表里面,3环(应用层)想用的时候只需要返回编号就好了,存储的相当于是一种映射关系,得到句柄的值也就是这张表的索引,句柄表就是为了操作内核对象

技术图片

 

0环是所有进程公用的内存,内核对象都可以跨进程共享的,句柄表是私有的一张表,句柄的值只针对当前的进程才有意义,图文中的2代表的是"计数器",closehandle()将计数器减1,当计数器的值为0,内核对象才会被关闭。

 

 

以上是关于windows api进程创建的主要内容,如果未能解决你的问题,请参考以下文章

操作系统实验及代码(全)

windows 以管理员身份运行 代码

跟踪所有进程的 Windows API 调用

微信小程序代码片段

Windows API:查找消息发送者的进程 (WM_COPYDATA)

使用windows api堆栈跟踪另一个进程c