标签:rtu 一个 for 应用层 char 对象 png creation pthread
一、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,内核对象才会被关闭。
标签:rtu 一个 for 应用层 char 对象 png creation pthread
原文地址:https://www.cnblogs.com/websecyw/p/12952448.html