系统机制: windows2000为执行体.内核.设备驱动程序等核心态部分提供了一些基础机制.先让我们看看都有哪些: (1)陷阱调度:包括中断.延迟过程调用(DPC).异步过程调用(APC).异常处理.系统服务调度. (2)执行体对象管理 (3)同步机制:自旋锁.内核调度对象以及等待是如何实现的 (4)系统线程 (5)多种系统机制如windows2000全局标志 (6)本地过程调用 下面我们就来逐个分析: 陷阱调度: 中断和异常的实质是使CPU不按照正常的步骤来工作,硬件和软件都能够察觉到它们.…
上节讲了消息的相关概念,本文将进一步聊聊C++中的消息机制. 从简单例子探析核心原理 在讲之前,我们先看一个简单例子:创建一个窗口和两个按钮,用来控制窗口的背景颜色.其效果 图1.效果图  Win32Test.h #pragma once #include <windows.h> #include <atltypes.h> #include <tchar.h> //资源ID #define ID_BUTTON_DRAW 1000 #define ID_BUTTON_SW…
1) Debug与Release的区别:前者称调试版,后者称发行版.调试版基本不优化,而发行版会经过编译器的极致优化,往往与优化前的高级语言执行流程会大相径庭,但是实现的功能是等价的. 2) 如下for循环语句: int MyFunction(int a,int b) { int c = a + b; int i; ; i < ; i ++ ) { c = c + i; } return c; } Debug版汇编后代码为: int MyFunction(int a, int b) { //省略…
本篇读书笔记主要参考自<深入解析Windows操作系统>和<软件调试>这两本书. IDT是处理异常,实现操作系统与CPU的交互的关口. 系统在初始化阶段会去填写这个结构. IDT的每一个表项都成为门描述符,因为IDT的功能就像大门一样,从一个空间跳到另一个空间去执行. IDT中包含三种门描述符 任务门描述符:用于任务切换 中断门描述符:用于描述中断处理例程 陷阱们描述符:用于描述异常处理例程 CPU如何使用IDT cpu首先根据IDTR找到IDT,再利用向量号码找到门描述符.再去判…
Windows内核开发-6-内核机制 Kernel Mechanisms 一部分Windows的内核机制对于驱动开发很有帮助,还有一部分对于内核理解和调试也很有帮助. Interrupt Request Level 中断请求级别 Deferred Procedure Calls(DPC) 延迟调用 Asynchronous Procedure Calls(APC) 异步调用 Structured Exception Handling 异常处理 System Crash 系统崩溃 Thread S…
3.系统机制 微软提供了一些基本组件让内核模式的组件使用: 1.陷阱分发,包括终端,延迟的过程调用(DPC),异步过程调用(APC),异常分发以及系统服务分发 2.执行体对象管理器 3.同步,包括自旋锁,内核分发器对象,以及等待是如何实现的. 4.系统辅助线程 5.其他的机制,比如Windows全局标记 6.本地过程调用 7.内核事件跟踪 8.Wow64 3.系统机制 3.1陷阱分发 3.1.1 中断分发 3.1.1.1 硬件中断 3.1.1.2 软中断请求级别(IRQL) 3.1.1.3 软中…
转载自 Windows系统机制之对象管理器 设计的几个目的: 提供一种公共统一的机制来使用系统资源 将对象保护隔离到OS中的一个地方,从而确保统一的一致的对象访问策略 提供一种机制来管理进程对对象的使用 支持各种OS环境需求,比如一个进程能够从父进程继承资源 建立统一的规则来维护对象的保持力 提供为特定的会话隔离对象的能力,以便在命名空间中允许局部和全局对象并存 对象接口 Windows 提供了执行以下任务的函数: 创建对象 获取对象句柄 获取有关对象的信息 设置有关对象的信息 关闭对象句柄 销…
本篇博文的开始,先介绍一道书上看到的智力题:有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸.有一台称重精准的天平,只是用一次天平的情况下如何找出比较重的那瓶药丸? 好了,直接公布答案.从药瓶#1取出一粒药丸,从药瓶#2取出两粒,从药瓶#3取出三粒,依此类推.如果每粒药丸均重1克,则称得总重量为210克(1 + 2 + … + 20 = 20 * 21 / 2 = 210),“多出来的”重量必定来自每粒多0.1克的药丸.药瓶的编号可由算式(weight - 210 gr…
初窥软件工程 2020BUAA软件工程\(\cdot\)个人博客作业 目录 初窥软件工程 2020BUAA软件工程$\cdot$个人博客作业 一.作业要求简介 二.正文 (一) 快速看完整部教材,列出你仍然不懂的5到10个问题 问题1. 单元测试时如何有效拆分单元?输入数据和输出数据如何构造? 问题2. 即使用了源代码管理工具,也很容易忘记某个版本究竟是干什么的,如何更好地通过message提示自己? 问题3. 怎么在源代码管理工具中更优雅地改bug? 问题4. 多人合作时,如何解决push冲突…
每天我们都在使用Windows系统学习.编程.听音乐.玩游戏,Windows的操作想来是非常熟练了,但是你又对Windows究竟了解多少呢?本系列的目的,就是让你对Windows系统有个更直观.更清楚.更彻底的认识.尽管我们大多数人看不到Windows的源代码,对其内存调度算法这样的最深层次的技术内幕不能明窥,但是我们能够做到比方今知道的很多其它,了解这些之后你会发如今Windows上面开发会轻车熟路,不论什么木马病毒到了你机器上只是仅仅会成为你的试验品. 鉴于Windows 9X内核早已淘汰,…