Windows程序设计基础
2011-08-02 18:24
239 查看
基本概念:
1.CPU保护模式:
1.各进程的地址空间:被分为用户空间和系统空间,用户空间是私有的空间,保证进程间不能互相访问,虽然是同一地址,但是可以不同进程可以保存不同数据。但是通过调用API函数,就可以访问所有数据
2.内核模式和用户模式:系统通过环来管理特权级别。一般情况下用户进程是处在用户模式下,访问的是用户空间,但是,当用户访问系统资源的时候,也就是调用系统的API函数的时候,就会切换到内核模式。
2.内核对象
内核对象主要3个概念:什么是内核对象,什么是对象句柄,怎么管理内核对象的使用
3.进程
1.创建进程
Win32应用程序的启动过程:调用CreateProcess创建一个进程内核对象,其初始值是1,分配虚拟地址空间,加载所需要的代码和数据,创建主线程,主线程调用c++的运行启动代码,运行启动代码再调用main函数
当进程将自己的内核对象句柄传给hProcess,对应的句柄数会由1增加至2,所有在调用完结束的时候要closehandle,否则,无法释放这个内核对象。
2.进程控制
获取系统进程
终止当前进程
终止进程有4个原因
1.主线程的入口函数返回
2.进程中某个线程调用了ExitProcess
3.所有的线程都结束了
4.其他进程的一个线程通过调用TerminateProcess结束这个进程
注:通过调用TerminateProcess结束进程,对于操作系统是正常的,但是对于c++运行库来说,系统会没有机会去析构全局和静态的对象。
终止其他进程
通过进程的ID调用OpenProcess获取需要的进程的句柄,然后TerminateProcess来结束该进程
一旦进程被终止会发生下面的事情
1.所有被这个进程打开的句柄会关闭
2.该进程的所有线程结束
3.进程内核对象变为受信状态,所有的等待在这个对象上的线程开始执行
4.系统进程对象中退出码变为指定的退出码。
保护进程
其他进程需要结束一个进程,会先用ToolHelp或者EnumProcess查找相应的进程,然后再去kill这个进程,所以可以通过Hook这两个函数,或者直接HookTerminateProcess函数就可以保护进程不被kill掉
练习:《游戏内存修改器》
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掉
练习:《游戏内存修改器》
相关文章推荐
- Windows程序设计零基础自学_2_Windows程序的显示和更新_之WM_PAINT消息
- windows程序设计之绘图基础之GDI函数调用
- VC基础教程1:Windows程序设计基础
- 《Windows 程序设计(第五版,珍藏版)》第I部分 基础知识 学习总结
- windows程序设计_第5章_绘图基础——学习笔记
- 01 对windows程序设计的基础认识
- windows程序设计之第五章绘图基础之Devcaps编程
- windows程序设计之绘图基础之度量映射模式
- windows程序设计的一些基础知识点(链接库)
- windows程序设计之第五章绘图基础之Devcaps编程
- windows程序设计之绘图基础之度量映射模式
- windows程序设计的一些基础知识点——内核对象以及它们的句柄
- Windows程序设计零基础自学_14_Windows文件和目录操作
- C语言Windows程序设计 -> 第九天 -> GDI绘图基础
- C语言Windows程序设计 -> 第九天 -> GDI绘图基础
- windows程序设计:图形基础
- windows程序设计的一些基础知识点—— 进程及其线程
- Windows程序设计零基础自学_4_Windows程序的显示和更新_之滚动条处理
- windows程序设计——图形基础
- windows程序设计之绘图基础之设备的尺寸