Windows程序设计基础
来源:互联网 发布:mysql分类后如何排序 编辑:程序博客网 时间:2024/05/16 11:16
基本概念:
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程序设计基础
- Windows程序设计基础
- Windows 程序设计基础
- Windows程序设计基础总结
- windows程序设计:图形基础
- Windows程序设计基础(变量)
- Windows程序设计之图形基础
- Windows程序设计基础(1)
- 《Windows程序设计》读书笔记------------->>GDI的简单基础<<
- windows程序设计的最基础内容
- windows程序设计第五章 图形基础
- 01 对windows程序设计的基础认识
- windows程序设计学习笔记-Unicode,绘图基础
- 《Windows程序设计》读书笔五 绘图基础
- windows程序设计——图形基础
- 《Windows程序设计》读书笔记------------->>鼠标基础和显示区域鼠标消息<<
- windows程序设计的一些基础知识点(链接库)
- windows程序设计之第五章绘图基础之Devcaps编程
- hive用户自定义函数
- apidemo代码分析
- 获取scroll位置,页面指向指定sroll位置
- json 经典实例
- 用C#获取硬盘序列号,CPU序列号,网卡MAC地址
- Windows程序设计基础
- AS3动画效果公式,常用处理公式代码,基本运动公式,三角公式
- Extjs4 API文档阅读(一)——类系统(Class System)
- ArcGIS server发布服务遇到http404错误或者提示Tomcat未启动
- FastJson---高性能JSON开发包
- ExtJS4学习笔记(十)---ExtJS4图片验证码的实现
- Android 添加宏编译进SystemProperties文件 实现运行时控制
- 关于Extjs4开发笔记(二)的补充说明
- ps 快捷键大全