天天加油 - 助您成才
汇编进程控制的实现方法(一)
您正在看的汇编语言是:汇编进程控制的实现方法(一)。

   进程控制简单的说相当于在一个程序中执行另一个程序,你可以把它想象成在 Dos 下用 int 21h/4bh 功能来执行另外一个程序,如果单从执行另一个程序的目的来讲,在 Windows 中有不少方法,如使用 ShellExecute 等,但这些 Api 仅仅是“执行”而已,进程控制的意义在于可以创建一个进程,并可以通过进程句柄结束进程,同样你也可以通过进程句柄来跟踪程序,还可以用 ReadProcessMemory 和 WriteProcessMemory 来读写子进程的内存空间。

   进程控制要使用的相关 API 有下面这些:

创建进程的函数为CreateProcess,该函数比较复杂,共有十个参数,但有个好消息是使用时大部分可以用 NULL。

BOOL CreateProcess(
LPCTSTR lpApplicationName, // 执行程序文件名
LPTSTR lpCommandLine, // 参数行
LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程安全参数
LPSECURITY_ATTRIBUTES lpThreadAttributes, // 线程安全参数
BOOL bInheritHandles, // 继承标记
Dword dwCreationFlags, // 创建标记
LPVOID lpEnvironment, // 环境变量
LPCTSTR lpCurrentDirectory, // 运行该子进程的初始目录
LPSTARTUPINFO lpStartupInfo, // 创建该子进程的相关参数
LPPROCESS_INFORMATION lpProcessInformation // 创建后用于被创建子进程的信息
);

各个参数的说明如下:

lpApplicationName:为执行程序的文件名,你也可以把执行文件名包括在下一个参数 lpCommandLine 中,然后把该参数置为NULL。
lpCommandLine:为参数行,如果无参数可以为NULL,在有参数传递给进程时可以如下设置:lpApplicationName=文件名;lpCommandLine=参数,或者 lpApplicationName=NULL;lpCommandLine=文件名 + 参数。
lpProcessAttributes,lpThreadAttributes:分别描述了创建的进程和线程安全属性,如果使用NULL表示使用默认的安全描述。
bInheritHandles:表示当前进程中的打开的句柄是否能够被创建的子进程所继承。
dwCreationFlags:表示创建标记,通过该标记可以设置进程的创建状态和优先级别。常用的有下面的标记:
CREATE_NEW_CONSOLE:为子进程创建一个新的控制台。
CREATE_SUSPENDED:子进程在创建时为挂起状态。如果指定了这个参数,那么执行 CreateProcess 后进程只是被装入内存,但不是马上开始执行,而是必须等主程序调用 ResumeThread 后才继续执行。
HIGH_PRIORITY_CLASS/NORMAL_PRIORITY_CLASS:高/普通优先级别。
lpEnvironment:表示子进程所使用的环境变量,如果为NULL,则表示与当前进程使用相同的环境变量。
lpCurrentDirectory:表示子进程运行的初始目录。
lpStartupInfo:STARTUPINFO 结构,用于在创建子进程时设置各种属性。
lpProcessInformation:PROCESS_INFORMATION 结构,用来在进程创建后接收相关信息,该结构由系统填写。

调用 CreateProcess 函数有三个参数是必需的,一在 lpApplicationName 或 lpCommandLine 指定文件名,二是 lpStartupInfo 结构,三是 PROCESS_INFORMATION 结构,因为 PROCESS_INFORMATION 结构返回了进程建立后的句柄,以后的一切操作将要用到这些返回的句柄,它是由系统填写的,结构说明如下:

typedef struct _PROCESS_INFORMATION {
HANDLE hProcess; //进程句柄
HANDLE hThread; //进程的主线程句柄
Dword dwProcessId; //进程ID
Dword dwThreadId; //进程的主线程ID
} PROCESS_INFORMATION;

另外还有一个关键的结构 STARTUPINFO,该结构定义如下:

typedef struct STARTUPINFO {
Dword cb; //结构长度
LPTSTR lpReserved; //保留
LPTSTR lpDesktop; //保留
LPTSTR lpTitle; //如果为控制台进程则为显示的标题
Dword dwX; //窗口位置
Dword dwY; //窗口位置
Dword dwXSize; //窗口大小
Dword dwYSize; //窗口大小
Dword dwXCountChars; //控制台窗口字符号宽度
D

排行

  1. VC防止窗口和控件闪烁的方法
  2. 基于Winsock API的VC网络编程实战
  3. 用VC实现动态改变Windows的显示特
  4. VC中利用MFC设计绘图程序初步
  5. 听说过WinZip软件也可以“杀毒”
  6. 利用Delphi开发旅游景点微机售票
  7. 在DBGrid组件中显示和编辑MEMO字
  8. 学好VC++的十大良好习惯
  9. DELPHI数据库应用程序的开发环境
  10. 汇编DEBUG全过程跟踪
  11. 汇编中的管道操作方法(一)
  12. 汇编中的管道操作方法(二)
  13. 汇编中的管道操作方法(三)
  14. 汇编进程控制的实现方法(一)
  15. 汇编进程控制的实现方法(二)
  16. 汇编中使用定时器的方法
  1. vb对象的使用
  2. vb的用户界面
  3. vb菜单在应用程序中的使用
  4. vb的工具栏、对话框
  5. vb程序设计
  6. vb控件简介
  7. vb的控件数据
  8. vb控件的使用
  9. Delphi存取图像完整解决方案
  10. vb的属性、方法和事件(二)
  11. vb的属性、方法和事件(一)
  12. vb的datagrid控件的使用
  13. frame的用法
  14. 浅析软件项目管理中十个误区
  15. 如何做好软件需求捕获
  16. 软件开发质量管理层次模型
  1. VC防止窗口和控件闪烁的方法
  2. 基于Winsock API的VC网络编程实战
  3. 用VC实现动态改变Windows的显示特
  4. VC中利用MFC设计绘图程序初步
  5. Delphi存取图像完整解决方案
  6. 听说过WinZip软件也可以“杀毒”
  7. 利用Delphi开发旅游景点微机售票
  8. 在DBGrid组件中显示和编辑MEMO字
  9. 学好VC++的十大良好习惯
  10. DELPHI数据库应用程序的开发环境
  11. 汇编DEBUG全过程跟踪
  12. 汇编中的管道操作方法(一)
  13. 汇编中的管道操作方法(二)
  14. 汇编中的管道操作方法(三)
  15. 汇编进程控制的实现方法(一)
  16. 汇编进程控制的实现方法(二)

最近更新

  • 推荐阅读
  • 汇编语言《汇编进程控制的实现方法(一)》汇编进程控制的实现方法(一)
    关于我们 | 版权申明 | 广告服务 | 友情链接 | 网站地图 | 使用帮助 | ©2006-2008 TTADD.COM