win32
文章平均质量分 77
轩动day
intel_do_flush_locked failed: Invalid argument
展开
-
Reactos当中的Rundll的实现
RunDll32.exe是微软系统自带的一个小程序,功能是加载系统中的dll,并且作为程序运行。控制面板里面有很多选项都可以由Rundll.exe进行加载运行。现在,我们根据reactos当中的源代码对其实现进行分析。首先看rundll32.exe调用进行调用的函数原型(源文件当中对函数的UNICODE和ASCII进行了区分)。typedef int (WINAPI *DllWinMa原创 2014-03-02 17:58:05 · 780 阅读 · 0 评论 -
windows驱动开发——锁、死锁、以及同步
表格当中描述的是常用的同步机制,这些机制的相关属性以及他们在windows系统下面的实现。原创 2014-07-02 20:24:50 · 4720 阅读 · 0 评论 -
ReactOS源代码分析APIC机制
上图是APIC的组成原创 2014-11-01 21:36:27 · 2143 阅读 · 0 评论 -
Windows中断处理
在现代操作系统当中,驱动并不是固定与中断相对应的,而是作为一种资源由程序员自己在驱动当中申请,这样在驱动加载之后,如果有中断产生的时候,就会调用在与中断相关的函数。原创 2014-08-01 16:49:50 · 3152 阅读 · 1 评论 -
windows系统调用int 2e处理过程
在X86体系架构中,中断处理向量由一个中断描述符表保存。中断描述符表的每个描述符项包括一个中断处理函数的地址、一个32位的描述符属性和中断之后中断所在代码的特权级别。下面是一个描述符项的宏定义,每个处理器包含256个这样的宏定义用于组成一个数组变量kidt。在系统初始化时,kidt当中的元素经过一些处理之后会填充到IDT表项当中。其中,当bits被定义为INT_32_DPL0时,表明发生的是异常;原创 2014-08-01 17:00:49 · 2408 阅读 · 0 评论 -
COM原理解析(1)
IDL文件时COM技术实现的一个关键,在IDL当中定义接口的实现。每一个接口包含两个部分,第一个部分是用方括号括起来的属性。在所有的属性里面比较重要的是接口的IID,这是唯一标识COM接口的标识符,紧接着接口属性的定义,是整个接口的定义,所有的借口都是从IUnknown继承而来的——这样才能利用IUnknown的一些已经定义的特性,典型的定义如下所示: [ object, uuid(C原创 2014-07-11 21:49:14 · 1010 阅读 · 0 评论 -
windows系统调度
Windows系统会在初始化的时候将时钟中断与时钟中断处理函数进行关联,而正是在这个中断函数会在合适的时机进行系统的线程调度。阶段1函数HalpInitPhase0会调用HalpEnableInterruptHandler函数开启时钟中断。HalpEnableInterruptHandler函数会在内部将时钟处理函数HalpClockInterrupt设置到相应的中断向量当中。HalpCloc原创 2014-08-01 17:10:23 · 1930 阅读 · 0 评论 -
Beep蜂鸣器驱动程序分析
typedef struct _BEEP_DEVICE_EXTENSION{ LONG ReferenceCount; FAST_MUTEX Mutex; KTIMER Timer; LONG TimerActive; PVOID SectionHandle;} DEVICE_EXTENSION, *PDEVICE_EXTENSION;上面是蜂鸣器设备的扩展结构体,其中Refer原创 2014-07-02 00:05:27 · 2207 阅读 · 0 评论 -
调度、线程上下文以及IRQL
线程调度以及线程的上下文和当前的IRQL(中断请求级)对于每个处理器上面的驱动程序有很大的影响。而一个线程的调度优先级和处理器的当前IRQL能够决定一个运行的线程能否被中断或者抢占。在抢占式调度过程当中,系统能够利用同一个处理器上面的更高优先级的线程换掉当前正在运行的线程。一个线程上的抢占式调度使得处理器在一段时间内不能够可用。在中断线程的过程当中,系统强行要求当前线程临时的运行在一个更高中端级别原创 2014-06-29 19:37:56 · 1283 阅读 · 0 评论 -
VS编译汇编语言
第一种方式肯定是嵌入汇编了,利用VS内置的__asm关键字原创 2014-05-25 18:40:18 · 9760 阅读 · 0 评论 -
win32进程之间通信的方式
一 剪切板方式剪切板是由系统创建一块公共内存用于进程之间共享数据,从而达到进程之间相互通信的目的。但是这种通信方式具有一定的盲目性,也就是发送者并不知道接受者进程会是哪一个。剪切板通信,首先利用OpenClipboard打开并且独占系统剪切板,由于传递给这个函数的参数是一个窗口句柄。所以使得实际上真正执行进程间通信的是两个与窗口相关联的线程。这一点可以通过程序片段进行验证。当属于同一个原创 2014-06-26 16:58:20 · 1311 阅读 · 0 评论 -
驱动开发程序的IRP处理过程
标准IRP的处理过程如同上图所示,整个处理由IO管理器创建的IRP开始。当然这个IO管理器在大多数情况下是系统,然而在驱动程序当中也可以创建IRP。下面四个函数可以用于创建IRP:IoBuildAsynchronousFsdRequest用于创建异步IRP,发送IRP的IO管理器不需要因为等待IRP的处理。IoBuildSynchronousFsdRequest用于创建同步IRP,如果IR原创 2014-06-05 21:54:23 · 1364 阅读 · 0 评论 -
Windows系统调用的界面
#define SVC_(name, argcount) STUB_U name, argcount原创 2014-05-15 21:49:41 · 1396 阅读 · 0 评论 -
NTFS文件系统分析
大家都知道磁盘有多个盘片重叠在一起组成,那么在不同的盘片的盘面上怎么访问数据呢?肯定一个磁头是不够的,所以每个盘片的盘面需要一个对应的磁 头。在每个盘面上又根据不同的半径分为不同的同心圆磁圈,这些在不同盘面上的半径相等的磁圈组成一个柱面,为什么需要这么分呢?其实也很好理解,因为磁盘 总共就一个马达所以就只好同手同脚的运动了。而这些柱面又由更小的单元组成,这些最小的单元被称为扇区。(之前博文提到系统原创 2014-04-22 20:36:52 · 895 阅读 · 0 评论 -
windows和Linux启动过程对比
整个Linux的启动如下图所示:原创 2014-04-19 18:02:05 · 2958 阅读 · 1 评论 -
根据ReactOS源代码分析windows蓝屏处理过程
在windows系统下面蓝屏是经常发生的事情,下面就来跟随reactOS系统的源代码看一下windows蓝屏的实现。引起蓝屏的函数实现如下面所示,这个字符串组成函数是不是和蓝屏打印出来的信息一样。而系统的关闭正是有这句引起的。至于整个输出函数也很简单,就是调用最后MACHVtbl结构体的成员函数实现。看到这里不禁对操作系统模块化有一个直观的理解。这也就是为什么可以用C++实现操作系统的原因。因为如原创 2014-05-02 20:43:52 · 1948 阅读 · 3 评论 -
由ubuntu安装tftp引发的思考
首先检查tftp是否已经安装,在控制台输入命令:netstat -a | grep tftp,如果输出udp 0 0 *:tftp则表明tftp已经安装。否则则输入以下命令 :sudo apt-get install tftpd-hpa tftp-hpa这一条命令实际上将服务端和客户端一起安装了。在安装结束之后需要进行设置,这里有两种方法。实际上市两种启动精灵进程的方式。所谓原创 2014-04-16 20:18:02 · 752 阅读 · 0 评论 -
获取C语言下面一段代码的长度
要得到一段代码的长度最根本的是要得到开始位置的EIP和结尾处的EIP。可惜我的VS2010不能保存利用汇编语言将EIP压入堆栈不然就简单了。不过既然直接走走不通,换一种思维也可以的。#include int n,m;void func(){start: _asm push start _asm pop mprintf("In The Stub!!\n");lab原创 2014-03-16 23:18:01 · 1680 阅读 · 0 评论 -
windows文件异步操作和Linux EPOLL模型
在windows系统下面存在三种形式的异步文件操作:1OVERLAPPED IO2APC3IO完成端口原创 2014-07-05 23:05:48 · 1589 阅读 · 0 评论