获得当前目录:
DWORD GetFullPathName(PCTSTR pszFile,DWORD cchPath,PTSTR pszPath,PTSTR *ppszFilePart);

获取C盘的当前目录
TCHAR szCurDir[MAX_PATH];
GetFullPathName("C",MAX_PATH,szCurDir,NULL);

获得系统版本:
BOOL GetVersion(POSVERSIONINFO pVersionInformation);

创建进程函数:
BOOL CreateProcess
{
PCTSTR pszApplicationName;//新进程使用的可执行文件的名字
PTSTR pszCommandLine;//传递给新进程的命令行字符串
PSECURITY_ATTRIBUTES psaProcess;//创建进程的安全属性,一般默认为NULL
PSECURITY_ATTRIBUTES psaThread; //创建线程的安全属性,一般默认为NULL
BOOL bInteritHandle;//是否可继承
DWORD fdwCreate;//如何来创建进程
PVOID pvEnvironment;//用于指向包含新进程将要使用的环境字符串的内存块
PCTSTR pszCurDir;//父进程设置目录,NULL为默认程序运行的目录
PSTARTUPINFO psiStartInfo;//指向STARTUPINFO结构,堆栈,最好要先
STARTUPINFO si={sizeof(si)};
GetStartupInfo(&si);(初始化)否则会把无用信息传递给CreateProcess,产生不确定因素
PPROCESS_INFOMATION ppiProcInfo//PROCESS_INFORMATION结构,里面记录该进程的所拥有的线程ID和子进程ID
};

成功返回TRUE //注意,如果创建进程找不到相关的DLL也会返回TRUE;

pszCommandLine最好不要传入常量,VC会把传入的字符串放入只读内存,例如:
CreateProcess(NULL,_T("NOTEPAD"),NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
将会运行错误(经过自己测试,GCC不会运行错误,VS2005会,书上说早期的VC也不会错误)

最好是:
TCHAR szCommandLine[]=_T("NOTEPAD");
CreateProcess(NULL,szCommandLine,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
将会打开NOTEPAD程序

TCHAR szPath[]="WORDPAD README.TXT";
CreateProcess("C:\\WINDOWS\\SYSTEM32\\NOTEPAD.EXE",szPath,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
打开NOTEPAD程序,并传入szpaht的命令

fdwCreate 用于规定如何来创建新进程,也可以设定优先级.
EBUG_PROCESS:当子进程发生某些事情,要告诉父进程

DEBUG_ONLY_THIS_PROCESS:和EBUG_PROCESS类似,不过只告诉发生的某些特定时间,比如子进程再创建子进程就不告诉

CREATE_SUSPENDED:子进程创建,父进程挂起

DETACHED_PROCESS:组织基于GUI进程对他的父进程console的访问,并将输出发送到新的console窗口

CREATE_NEW_CONSOLE:创建新进程同时为新进程创建控制台,不可和DETA_PROCESS同时使用,否则产生一个错误

CREATE_NO_WINDOW:不要为新进程创建控制台窗口

CREATE_NEW_PROCESS_GROUP:当创建多个进程后,如果用户按下CTRL+C,那么将会同时告诉所有进程用户按下CTRL+C;

CREATE_DEFAULT_ERROR_MODE:新进程不继承父进程的错误使用模式

CREATE_SEPARATE_WOW_VDM:当在WINDOWS 2000运行16位的时候,创建单独的DOS虚拟机

CREATE_SHARED_WOW_VDM:当在windows 2000运行16位的时候,除非设定CREATE_SHPARATE_WOW_VDM,否则所有16位程序都在单独的DOS虚拟机运行,但是可以改变注册表共享

CREATE_FORCEDOS:强制系统运行嵌入16位OS/2应用程序的MOS-DOS应用程序

CREATE_BREAKAWAY_FROM_JOB:使用作业中的金衡生成一个与作业相关联的新进程

终止运行进程:
1.主线程函数返回(最好的方法)
2.进程中的线程调用ExitProcess(最好不要);
3.另外一个进程中的线程(最好也不要);
4.所有线程自行终止

BOOL TerminateProcess(HANDLE hProcess,UINT fuExitCode);
与EixtProcess差别:任何线程都可以调用TerminateProcess

获得目前已经撤销进程的退出代码
BOOL GetExitCodeProcess(HANDLE hProcess,PDWORD pdwExitCode);

CloseHandle(HANDLE hProcess);关闭不用的句柄,很重要

DWORD WaitForSingleObject(HANDLE hObject,DWORD dwTimeout);
等待hObject终止运行

PVOID GetModulePreferredBaseAddr(DWORD dwProcessID,PVOID pvModuleRemote);
接受一个进程ID和进程模块的地址

windows核心编程 第四章 进程相关推荐

  1. Windows核心编程 第四章 进程(下)

    4.3 终止进程的运行 若要终止进程的运行,可以使用下面四种方法: • 主线程的进入点函数返回(最好使用这个方法) . • 进程中的一个线程调用E x i t P r o c e s s函数(应该避免 ...

  2. Windows核心编程 第四章 进程(上)

    第4章 进 程     本章介绍系统如何管理所有正在运行的应用程序.首先讲述什么是进程,以及系统如何创建进程内核对象,以便管理每个进程.然后将说明如何使用相关的内核对象来对进程进行操作.接着,要介绍进 ...

  3. Windows核心编程 第四章 进程(中)

    4.2 CreateProcess函数 可以用C r e a t e P r o c e s s函数创建一个进程: BOOL CreateProcessW( _In_opt_ LPCWSTR lpAp ...

  4. Windows核心编程(四)进程-1

    如何定义进程 进程一般定义为正在运行的程序的一个实例,由以下两部分组成: 一个内核对象,用于保存进程统计信息并管理进程 一的地址空间,其中包括所有可执行文件或动态链接库(DLL)模板的代码和数据,与此 ...

  5. Windows核心编程 第七章 线程的调度、优先级和亲缘性(下)

    7.6 运用结构环境 现在应该懂得环境结构在线程调度中所起的重要作用了.环境结构使得系统能够记住线程的状态,这样,当下次线程拥有可以运行的C P U时,它就能够找到它上次中断运行的地方. 知道这样低层 ...

  6. Windows核心编程 第三章 内核对象

    第3章内核对象 在介绍Windows API的时候,首先要讲述内核对象以及它们的句柄.本章将要介绍一些比较抽象的概念,在此并不讨论某个特定内核对象的特性,相反只是介绍适用于所有内核对象的特性. 首先介 ...

  7. Windows核心编程 第27章 硬件输入模型和局部输入状态

    第27章 硬件输入模型和局部输入状态 这章说的是按键和鼠标事件是如何进入系统并发送给适当的窗口过程的.微软设计输入模型的一个主要目标就是为了保证一个线程的动作不要对其他线程的动作产生不好的影响. 27 ...

  8. Windows核心编程 第十七章 -内存映射文件(下)

    17.3 使用内存映射文件 若要使用内存映射文件,必须执行下列操作步骤: 1) 创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件. 2) 创建一个文件映射内核对象,告诉系统该 ...

  9. Windows核心编程 第十七章 -内存映射文件(上)

    第1 7章 内存映射文件 对文件进行操作几乎是所有应用程序都必须进行的,并且这常常是人们争论的一个问题.应用程序究竟是应该打开文件,读取文件并关闭文件,还是打开文件,然后使用一种缓冲算法,从文件的各个 ...

最新文章

  1. Qt实现主界面圆角化
  2. (转) Twisted :第二十一部分 惰性不是迟缓: Twisted和Haskell
  3. 贪心、递归、递推以及动态规划算法的分析与对比
  4. ref:下一个项目为什么要用 SLF4J
  5. 源码分析Dubbo服务注册与发现机制RegistryDirectory)
  6. vSphere 高级特性FT配置与管理
  7. *** error 65: access violation at C:0x001B : no 'execute/read' permission
  8. ModuleNotFoundError: No module named ‘distutils.util‘
  9. [NOIP]2017列队——旋转treap/非旋转treap
  10. MoFi 路由器10个后门还剩4个未修复
  11. 2014年工作中遇到的20个问题:161-180
  12. @Resource 注解和 @Autowired 注解的对比
  13. 暴雨公式 matlab,对雨水暴雨强度公式中降雨历时分解.pdf
  14. sql2012下载,安装,
  15. 《图说VR入门》——360全景视频
  16. 2020最新部编人教小学语文状元大课堂课件教案习题全套
  17. 20220929 今天的世界发生了什么
  18. Ubuntu20.04切换阿里源镜像(清华源、网易源)
  19. 【node.js】nvm安装最新教程
  20. 7-2 冒泡法排序之过程 (15分)

热门文章

  1. 设计模式 - 软件设计的七大原则
  2. soi cmos技术及其应用_微生物污水处理技术及其应用
  3. DFS和BFS概念及实践+acwing 842 排列数字(dfs) +acwing 844. 走迷宫(bfs)
  4. 一种编程语言必备的功能
  5. 运维经理:如果连CentOS网络配置都不会,就收包袱走人吧
  6. 30行Python代码,打造一个微信群聊助手~
  7. 任正非霸气回应:没有谷歌,华为也能成为世界第一!
  8. repo init 错误SyntaxError:invalid syntax
  9. PHP一行代码集成雅虎宝贝鱼在线翻译功能 -- JAVAEYE不支持IE8
  10. WS2812B 驱动程序