Windows程序设计基础

基本概念:

1.CPU保护模式:

1.各进程的地址空间:被分为用户空间和系统空间,用户空间是私有的空间,保证进程间不能互相访问,虽然是同一地址,但是可以不同进程可以保存不同数据。但是通过调用API函数,就可以访问所有数据

2.内核模式和用户模式:系统通过环来管理特权级别。一般情况下用户进程是处在用户模式下,访问的是用户空间,但是,当用户访问系统资源的时候,也就是调用系统的API函数的时候,就会切换到内核模式。

2.内核对象

内核对象主要3个概念:什么是内核对象,什么是对象句柄,怎么管理内核对象的使用

3.进程

1.创建进程

Win32应用程序的启动过程:调用CreateProcess创建一个进程内核对象,其初始值是1,分配虚拟地址空间,加载所需要的代码和数据,创建主线程,主线程调用c++的运行启动代码,运行启动代码再调用main函数

当进程将自己的内核对象句柄传给hProcess,对应的句柄数会由1增加至2,所有在调用完结束的时候要closehandle,否则,无法释放这个内核对象。

2.进程控制

获取系统进程

#include "stdafx.h"
#include <windows.h>
#include <tlhelp32.h> // 声明快照函数的头文件

int main(int argc, char* argv[])
{
	PROCESSENTRY32 pe32;
	// 在使用这个结构之前,先设置它的大小
	pe32.dwSize = sizeof(pe32); 
	
	// 给系统内的所有进程拍一个快照
	HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if(hProcessSnap == INVALID_HANDLE_VALUE)
	{
		printf(" CreateToolhelp32Snapshot调用失败! \n");
		return -1;
	}
	
	// 遍历进程快照,轮流显示每个进程的信息
	BOOL bMore = ::Process32First(hProcessSnap, &pe32);
	while(bMore)
	{
		printf(" 进程名称:%s \n", pe32.szExeFile);
		printf(" 进程ID号:%u \n\n", pe32.th32ProcessID);

		bMore = ::Process32Next(hProcessSnap, &pe32);
	}

	// 不要忘记清除掉snapshot对象
	::CloseHandle(hProcessSnap);
	return 0;
}

 

终止当前进程

终止进程有4个原因

1.主线程的入口函数返回

2.进程中某个线程调用了ExitProcess

3.所有的线程都结束了

4.其他进程的一个线程通过调用TerminateProcess结束这个进程

注:通过调用TerminateProcess结束进程,对于操作系统是正常的,但是对于c++运行库来说,系统会没有机会去析构全局和静态的对象。

 

终止其他进程

通过进程的ID调用OpenProcess获取需要的进程的句柄,然后TerminateProcess来结束该进程

一旦进程被终止会发生下面的事情

1.所有被这个进程打开的句柄会关闭

2.该进程的所有线程结束

3.进程内核对象变为受信状态,所有的等待在这个对象上的线程开始执行

4.系统进程对象中退出码变为指定的退出码。

 

保护进程

其他进程需要结束一个进程,会先用ToolHelp或者EnumProcess查找相应的进程,然后再去kill这个进程,所以可以通过Hook这两个函数,或者直接HookTerminateProcess函数就可以保护进程不被kill掉

 

练习:《游戏内存修改器》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值