WIN32汇编: 14.进程[1]

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 goddragon 的 blog

第十四课 进程


本课中我们将学习:什么是进程?如何产生和终止一个进程?

初步知识:

进程是什么?下面是我从win32 api指南中节选的解释:
“一个进程是一个正在执行的应用程序,它包含有:私有的虚拟地址空间、代码、数据和其它的操作系统资源,譬如进程可以存取的管道、文件和同步对象等等。”

从上面的定义中您可以看到,一个进程拥有几个对象:地址空间、执行模块和其它该执行程序打开或创建的任何对象或资源。至少,一个进程必须包含可执行模块、私有的地址空间和一个以上的线程。什么是线程呢?一个线程实际上是一个执行单元。当windows产生一个进程时,它自动为该进程产生一个主线程。该线程通常从模块的第一条指令处开始执行。如果进程需要更多的线程,它可以随后显式地产生。
当windwos 接收到产生进程的消息时,它会为进程生成私有内存地址空间,接着把可执行文件映射到该空间。在win32下为进程产生了主进程后,您还可以调用函数createprocess来为您的进程产生更多的线程。

createprocess的原型如下:

createprocess proto lpapplicationname:dword,\
                                 lpcommandline:dword,\
                                 lpprocessattributes:dword,\

                                 lpthreadattributes:dword,\
                                 binherithandles:dword,\
                                 dwcreationflags:dword,\
                                 lpenvironment:dword,\
                                 lpcurrentdirectory:dword,\
                                 lpstartupinfo:dword,\
                                 lpprocessinformation:dword

不要被这么多的参数吓倒,其实您可以忽略其中的大多数的参数(让它们有缺省值)。

lpapplicationname --> 可执行文件的名称(含或不含路径)。如果该参数为null,那必须在参数lpcommandline中传递文件名称。
lpcommandline --> 传递给欲执行的文件的命令行参数。如果lpapplicationname为null,那必须在该参数中指定,譬如:"notepad.exe readme.txt" 。
lpprocessattributes 和 lpthreadattributes --> 指定进程和主线程的安全属性。您可以把它们都设成为null,这样就设置了缺省的安全属性。
binherithandles --> 标志位。用来设置新进程是否继承创建进程所有的打开句柄。
dwcreationflags --> 有几个标志可以在此处设置以决定欲创建进程的行为,譬如:您可能想创建进程后并不想让它立刻运行,这样在它真正运行前可以作一些检查和修改工作。您还可以在此处设置新进程中的所有线程的优先级,通常我们把它设置为normal_priority_class。
lpenvironment --> 指向环境块的指针,一般地环境块包含几个环境字符串。如果该参数为null,那么新进程继承创建进程的环境块。
lpcurrentdirectory --> 指向当前目录以及为子进程设置的“当前目录”的路径。如果为null, 则继承创建进程的“当前目录”路径。
lpstartupinfo --> 指向新进程的启动结构体startupinfo的指针。startupinfo告诉windows如何显示新进程的外观。该参数有许多的成员变量,如果您不想新进程有什么的特别之处,可以调用getstartupinfo函数来用创建进程的启动参数来填充startupinfo结构体变量。
lpprocessinformation --> 指向结构体process_information的指针,该结构体变量包含了一些标识该进程唯一性的一些成员变量:

process_information struct
    hprocess          handle ?             ; handle to the child process
    hthread            handle ?             ; handle to the primary thread of the child process
    dwprocessid     dword ?             ; id of the child process
    dwthreadid      dword ?            ; id of the primary thread of the child process

本文关键:asm
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top