前言
各位师傅好,我是qmx_07,今天给大家介绍一下有关SDK的相关概念,以及必备知识点,后续会更新有关GDI绘制图形,对话框一类的知识点
SDK
概念:软件开发套件(SDK)是通常由硬件平台、操作系统(OS)或编程语言的制造商提供的一套工具。--软件开发包
本质:库函数头文件+说明文档
Windows应用程序接口(API)
概念:操作系统所提供的一些功能性函数,能够让 程序 间接的使用 被操作系统所接管的输入输出设备
为什么我们不能直接让 应用程序调用输入输出设备?
因为windows系统中,操作系统接管了所有的输入输出设备,应用想要调用输入输出设备,就必须通过WINDOWS操作系统的函数或则代码返回给应用程序
内核对象
概念:受操作系统保护的对象,只允许通过该对象提供的API接口来修改或则访问的对象
内核对象与一般数据结构的区别?
内核对象与一般数据结构的最大区别是其内部数据结构是隐藏的,必须调用一个对象服务才能从此对象中得到数据。
内核对象的数据结构仅能够从内核模式访问,所以直接在内存中定位这些数据结构对应用程序来说是不可能的,只能通过API来访问它,在用户界别下用来表示内存对象的数据成为对象句柄。可以认为是另一种形式下的“指针”
访问内核对象 需要 API + 相应的句柄(想要访问的对象)
如同类私有成员一样,WINDOWS也有保护的成员,这个就是内核。内核提供操作内核数据的接口API。
句柄
概念:操作系统内部有非常多的内核对象,如果想要访问特定的内核对象,那么必须告诉操作系统,我们需要访问的对象是哪一个对象,也就是给对象一个标识符。方便与用户代码进行交互
内核对象的 "ID" (每个对象对应的唯一标识符)
我们举个例子:任务管理器里面的进程(PID):
我们可以创建多个应用程序,每个程序都有自己的唯一标识符,这样用来确认是哪一个
消息机制(Msg)
我们先来讲一下windows程序的运行原理
Windows程序:消息驱动,不由事件的顺序来控制,而是由事件的发生来控制,所有的事件都是无序的,所为一个程序员,在你编写程序时,你并不知道用户先按哪个按纽,也不知道程序先触发哪个消息。你的任务就是对正在开发的应用程序要发出或要接收的消息进行排序和管理。事件驱动程序设计是密切围绕消息的产生与处理而展开的,一条消息是关于发生的事件的消息
windows 是消息驱动的操作系统。没消息的时候,什么也不干,当有消息的时候才开始干活。
实质:不停的输入,不停的封装消息,应用程序不停的处理。
本质:回调函数,开发者自己实现该动作的响应方法,然后把这个函数的地址传给操作系统,操作系统接收到响应动作的时候,通过函数指针回调开发者自定义的函数。
Windows多任务的实现(多线程)
在WINDOWS中,可以同时执行很多程序,一个CPU在一个时间内只能执行一个应用的代码,在操作系统中,有很多程序同时运行,是怎么同时管理那么多程序的呢?
Windows操作系统上执行代码的基本单位 —— 线程,一个操作系统可以执行多个任务
80386对多任务操作系统的支持的原理
来回切换应用程序,由于cpu执行代码的速度非常快,所以每个应用程序执行一段代码后又跳过去执行另外一个应用程序,肉眼是无法分辨出来的。
进程隔离
windows操作系统对每个进程进行了内存隔离,每个进程的高2G空间都指向了物理内存的同一块位置(操作系统代码每个进程都一样)。低2G指向了物理内存条不同的地方,这是内存映射,且在进程开始的时候并不是运行开始就分配4G的空间,而用多少分配多少,程序运行时的内存也叫虚拟内存,它是映射到物理内存的,当我们需要访问程序的某个地址时,会通过转换 + 偏移,映射到物理内存的特定的位置。
用户和内核模式
0环~3环 4个等级,给操作者分级,不同操作者使用不同的等级
操作系统-高权限——0环
普通应用-低权限——3环
WINDOWS操作系统为什么只有 0 环和 3 环?
目的:为了提升兼容。不想与CPU绑定,防止CPU更改权限使其不兼容
在DOS时代不区分权限,只要程序有执行的能力,DOS能够修改操作系统的内容,所以那时的病毒非常的泛滥。
目前的病毒,要做的第一件事是提权,跟随电脑的启动而启动(服务),由于创建服务需要管理员权限,所以这种病毒只是三环的病毒,不会影响内核的东西。
结语
我们学习了SDK软件工具包,API调用,消息机制,句柄,多线程原理,用户和内核模式的一些概念,下一章节学习 SDK的基本流程讲解