windows学习笔记2进程
来源:互联网 发布:python 键盘控制程序 编辑:程序博客网 时间:2024/06/04 19:55
系统在创建新的进程时会为新进程指定一个STARTUPINFO类型的变量,这个结构包含了父进程传递给子进程的一些显示信息
一个进程可以调用GetStartupInfo函数来取得父进程创建自己时使用的STARTUPINFO结构。
函数定义:VOID GetStartupInfo(LPSTARTUPINFO lpStartupInfo);
定义一个STARTUPINFO结构的对象后,总要在使用此对象前将对象的cb成员初始化为STARTUPINFO结构的大小:
STARTUPINFOsi={sizeof(si)};
::GetStartupInfo(&si);
typedef struct _STARTUPINFO{
DWORD cb; //本结构的长度,总是应该被设为sizeof(STARTUPINFO)
LPTSTR lp[微软用户1] Reserved; //保留(Reserve)字段,即程序不适用这个参数
LPTSTR [微软用户2] lpDesktop; //指定桌面名称
LPTSTR lpTitle; //控制台应用程序使用,指定控制台窗口标题
DWORD dwX; //指定新创窗口的位置坐标(dwX,dwY)和大小信息
DWORD dwY;
DWORD dwXSize;
DWORD dwYSize;
DWORD dwXCountChars; //控制台程序使用,指定控制台窗口的行数
DWORD dwYCountChars;
DWORD dwFillAttribute; //控制台程序使用,指定控制台窗口的背景颜色
DWORD dwFlags;//标志。它的值决定STARTUPINFO结构中哪些成员的值是有效的
WORD wShowWindow; //窗口显示方式
WORD cbReserved2;
LPBYTE lpReserved2;
HANDLE hStdInput; //控制台程序使用,几个标准句柄
HANDLE hStdOutput;
HANDLE hStdError;
} STARTUPINFO,*LPSTARTUPINFO;
CreateProcess函数创建一个新的进程和该进程的主进程。新的进程会在父进程的安全上下文中运行指定的可执行文件。
如果系统能够成功创建新的进程和进程的主线程,CreateProcess函数会返回TRUE,否则返回FALSE。
BOOL CreateProcess
(
LPCTSTR lpApplicationName, //可执行文件的名称
LPTSTR lpCommandLine, //指定了要传递给执行模块的参数
LPSECURITY_ATTRIBUTES lpProcessAttributes,//进程安全性,NULL表示使用默认值
LPSECURITY_ATTRIBUTES lpThreadAttributes,//线程安全性,NULL表示使用默认值
BOOL bInheritHandles, //指定了当前进程中的可继承句柄是否被新进程继承
DWORD dwCreationFlags, //指定了新进程的优先级以及其他创建标志
LPVOID lpEnvironment, //指定新进程使用的环境变量
LPCTSTR lpCurrentDirectory, //新进程使用的当前目录
LPSTARTUPINFO lpStartupInfo, //指定新进程中主窗口的位置、大小和标准句柄
LPPROCESS_INFORMATION lpProcessInformation//[out]返回新建进程的标志信息,如ID号、句柄等
);
举例(打开记事本):
STARTUPINFO si={sizeof(si)};
PROCESS_INFORMATION pi;
char* szCommandLine="notepad";
::CreateProcess(NULL,szCommandLine,NULL,NULL,FALSE,NULL,NULL,NULL,&si,&pi);
修改:char*szCommandLine="notepad ReadMe.txt";
lpProcessInformation参数是一个指向PROCESS_INFORMATION结构的指针。CtraeteProcess函数会在返回之前初始化此结构的成员。结构定义如下:
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess; //新建过程句柄
HANDLE hThread; //新建进程中主线程的内核句柄
DWORD dwProcessId; //新建进程的ID
DWORD dwThreadId; //新建进程的主线程ID
}PROCESS_INFORMATION, *LPPROCESS_INFORMATION;
创建一个新进程会促使系统创建一个进程内核对象和一个线程内核对象。在CreateProcess函数返回前,这个函数打开此进程内核对象和线程内核对象的句柄,并将它们的值传给上述结构的hPROCESS和hThread成员。
[微软用户1]Long pointer,说明变量是指针类型
B代表BOOL
Sz代表以0结尾的字符串
[微软用户2]Const char* 的宏定义
- windows学习笔记2进程
- Windows 进程APC学习笔记
- Windows核心编程学习笔记(7)--进程详谈2
- WINDOWS API学习笔记之创建进程
- windows API学习笔记 之 结束进程
- Windows核心编程笔记(2)----进程
- Windows核心编程学习笔记(6)--进程详谈1
- Windows核心编程学习笔记--进程和线程的优先级
- Windows学习(007)--进程
- 操作系统 学习笔记2-进程管理
- 操作系统学习笔记2----进程管理
- 进程管理--学习笔记
- 进程--学习笔记
- shell学习笔记(进程)
- 学习笔记之进程
- 进程控制学习笔记
- Linux进程学习笔记
- 进程调度学习笔记
- 手把手教你创建个人微信公众号
- Java:按值传递还是按引用传递详细解说
- poj2479 Maximum sum(动态规划)
- [模板]求最长公共子序列
- C了个++:03 - C++的字符串与 string 类
- windows学习笔记2进程
- 吴韦朋:一个“深漂”从零到百万的365天创业日记(连载5)
- hdu1272 并查集
- Reverse Nodes in k-Group,LeetCode
- 为什么full join 会报错?而right(left) join没问题?
- 快速集成 iMessage (上)
- Leetcode 63. Unique Paths II (Medium) (java)
- 备忘录(需要以后自己详细记录学习的知识点)
- android模拟器-文件位置