
Windows开发
文章平均质量分 83
哎呀呀呀浅汐
心中有丘壑,眉目作山河
展开
-
Windows的回调机制
Windows系统内核提供了一系列的事件通知(Notify)机制以及回调(Callback)机制。原创 2024-05-21 15:13:44 · 1135 阅读 · 0 评论 -
Windows中的未处理异常
上一篇文章Windows对异常的管理详细介绍了Windows中对异常的分发和处理过程。我们知道,Windows会给每个异常最多两轮被处理的机会:第一轮:先尝试发给调试器,如果调试器没有处理,则遍历并依次调用异常处理器。如果一个处理器返回EXCEPTION_CONTINUE_EXECUTION,则表示它已经处理了异常,并让系统恢复执行因为异常而中断的代码;如果返回EXCEPTION_CONTINUE_SEARCH,则表示它不能处理该异常,并让系统继续寻找其他的异常处理器。第二轮:再次发给调试器,如果还原创 2021-11-19 22:44:06 · 3144 阅读 · 0 评论 -
Windows对异常的管理(描述、分发和处理)及源码剖析
异常Windows中异常处理分为两种:硬件异常:CPU产生的异常。软件异常:通过软件方式模拟出的异常,RaiseException 或 throw。先来介绍一下软件异常,throw抛出异常底层也是通过RaiseException实现的,因此我们从throw开始!C++异常处理C++中的异常处理机制由try、throw、catch组成。try语句块负责监视异常;throw语句用于异常信息的发送,也称为抛出异常;catch语句用于异常的捕获,并作出相应的处理。代码结构如下:try{ /原创 2021-11-17 17:16:49 · 1599 阅读 · 0 评论 -
Windows的异常处理
文章目录Windows的异常处理SEHSEH的终结处理SEH的异常处理过滤表达式嵌套使用异常处理和终结处理SEH的实现机制局部展开全局展开VEHSEH和VEH的区别Windows的异常处理Windows系统的异常处理有两种:结构化异常处理(SEH,Structured Exception Handling)向量化异常处理(VEH,Vectored Exception Handling)SEHWindows定义了SEH机制来规范异常处理代码的设计(对程序员)和编译(对编译器)。SEH 提供了原创 2021-11-14 15:50:57 · 2157 阅读 · 0 评论 -
Windows的消息机制
Windows消息机制Windows是一个消息驱动的操作系统。什么是消息消息是一种手段,可以帮助应用程序和操作系统、应用程序之间 进行通信。操作系统可以发给应用程序一个消息,告诉应用程序某个特定的事件发生了。比如:当用户点击鼠标或键盘都会引发Windows发送相应的消息。应用程序也可以产生一个消息,使窗口执行特定的任务,或与其它应用程序通信。从数据结构的角度来看,消息是一个结构体,包含了消息的类型标识符和其他附加信息。typedef struct tagMSG { HWND hwnd; //原创 2021-11-11 20:59:59 · 1140 阅读 · 0 评论 -
内核函数前缀总结
内核函数前缀Windows内核会调用一些内核层的函数,这些函数都以固定的前缀开始,分别属于内核中不同的管理模块。通过这些前缀,根据函数名就可以大致知道这个函数所属的层次和模块了。Ex:管理层(Executive)Ke:核心层(Kernel)Hal:硬件抽象层(Hardware Abstraction Layer)Ob:对象管理(Object)Mm:内存管理(Memory Manager)Ps:进程管理(Process)Se:安全管理(Security)Io:I/O管理Fs:文件系统(原创 2021-10-27 16:47:45 · 509 阅读 · 0 评论 -
ProbeForRead/Write和MmIsAddressValid
ProbeForRead/Write在开发驱动模块时,有时候需要处理来自用户态进程发送的IOCTL请求。在解析参数的时候,如果有用户地址空间的内存,要检测是否可以读(ProbeForRead)写(ProbeForWrite)。看一下这两个函数的具体实现:ProbeForRead函数就是简单的检查了一下对齐粒度,然后看这块地址是否属于用户层**(地址末尾要小于MmUserProbeAddress)**3: kd> dd MmUserProbeAddress849ac850 7fff0000原创 2021-10-21 17:38:19 · 1166 阅读 · 0 评论 -
64位和32位驱动开发的差异
64位系统新增机制1. WOW64子系统WOW64子系统是64位系统为了兼容32位应用程序而新增的子系统。相当于一个轻量级的兼容层,主要在应用层工作,由三个DLL实现,Wow64.dll、Wow64Win.dll、Wow64Cpu.dll。当一个32位应用程序发起系统调用时,WOW64子系统会拦截到这个系统调用,如果其中包含指针,它会先把这些指针的长度转换成合适的长度,然后再把系统调用提交给内核。通常把这个拦截—转换的过程称为thunking,它是32位应用程序能运行在64位系统下的关键。WOW6原创 2021-10-21 11:03:29 · 1604 阅读 · 0 评论 -
Windows的事件通知机制
Windows系统内核提供了一系列的事件通知(Notify)机制以及回调(Callback)机制。事件通知机制:用于监控系统内某一事件的操作。回调机制:用来反映系统内某一个部件的状态,也可以被用来实现多个内核模块之间的通信。本文主要介绍一下事件通知机制!事件通知机制常见的事件通知有:创建进程通知(CreateProcessNotify)创建线程通知(CreateThreadNotify)加载模块通知(LoadImageNotify)注册表操作通知注意:一旦事件通知被成原创 2021-10-14 23:27:32 · 2021 阅读 · 0 评论 -
Windows内存管理—内存映射、PAE、MmPfnDatabase
Windows内存管理内存有两种,一种是由内存条构成的所谓的物理内存,这种内存读取速度快;还有一种是虚拟内存,由硬盘构成,也就是把硬盘的一部分容量拿来当作内存用,但是速度没有内存条那么快。两者的关系:每个进程都有4GB的虚拟内存,但不是所有的虚拟内存都有对应的物理内存,它其实是在物理内存和磁盘之间进行倒换的。虚拟内存在用的时候,会从磁盘倒入物理内存,不用的时候就还是存在磁盘上。因此,同一个物理内存在不同的时间可以被用于不同进程的不同虚拟内存。基于页面映射的虚拟内存机制:在硬件上:由CPU芯片内原创 2021-10-14 11:26:07 · 3330 阅读 · 0 评论 -
Interlocked系列函数
Interlocked系列函数Interlocked函数是以原子方式访问资源,保证同一时刻只有一个线程访问它,常用于多线程编程。因为从汇编的角度看,哪怕很简单的一条高级语言都可以被编译成多条机器指令。在多线程环境下,这条语句的执行就可能被打断。而在打断期间,其中间结果可能己经被其他线程更改过,从而导致错误的结果。有一个很经典的面试题:现在有一个进程中存在一个全局变量a,初值为0。两个线程同时对变量a执行a++操作,通过循环各累加1000次,最终a的值会是多少?答案是不确定,a++的过程在汇编层面有原创 2021-10-12 18:57:12 · 779 阅读 · 0 评论