
驱动开发 内核
文章平均质量分 78
轩动day
intel_do_flush_locked failed: Invalid argument
展开
-
ReactOS源代码分析APIC机制
上图是APIC的组成原创 2014-11-01 21:36:27 · 2193 阅读 · 0 评论 -
ReactOS分析MDL实现
用户需要从文件里面读取一段数据,最终的读操作在内核层进行。但是最终内存需要返回到用户空间。如果读取操作比较慢就需要将内核内存空间中的数据复制到用户的内核空间中去。有没有一种办法避免这种读取操作呢?MDL完全可以处理这种问题,并且更进一步。首先,看一下MDL的定义:原创 2014-09-01 13:18:07 · 935 阅读 · 0 评论 -
ReactOS分析CriticalSection
首先要区分的是,之前提过的critical region和critical section的原创 2014-09-01 09:02:58 · 1076 阅读 · 0 评论 -
ReactOS分析windows DPC机制(1)
VOIDIoInitializeDpcRequest( IN PDEVICE_OBJECT DeviceObject, IN PIO_DPC_ROUTINE DpcRoutine){ KeInitializeDpc( &DeviceObject->Dpc, (PKDEFERRED_ROUTINE) DpcRoutine,原创 2014-09-01 09:01:41 · 1304 阅读 · 0 评论 -
ReactOS分析windows APC机制
#define KeEnterGuardedRegion() \{ \ PKTHREAD _Thread = KeGetCurrentThread();原创 2014-09-01 09:01:05 · 1718 阅读 · 0 评论 -
windows系统调度
Windows系统会在初始化的时候将时钟中断与时钟中断处理函数进行关联,而正是在这个中断函数会在合适的时机进行系统的线程调度。阶段1函数HalpInitPhase0会调用HalpEnableInterruptHandler函数开启时钟中断。HalpEnableInterruptHandler函数会在内部将时钟处理函数HalpClockInterrupt设置到相应的中断向量当中。HalpCloc原创 2014-08-01 17:10:23 · 2011 阅读 · 0 评论 -
windows系统调用int 2e处理过程
在X86体系架构中,中断处理向量由一个中断描述符表保存。中断描述符表的每个描述符项包括一个中断处理函数的地址、一个32位的描述符属性和中断之后中断所在代码的特权级别。下面是一个描述符项的宏定义,每个处理器包含256个这样的宏定义用于组成一个数组变量kidt。在系统初始化时,kidt当中的元素经过一些处理之后会填充到IDT表项当中。其中,当bits被定义为INT_32_DPL0时,表明发生的是异常;原创 2014-08-01 17:00:49 · 2559 阅读 · 0 评论 -
Windows中断处理
在现代操作系统当中,驱动并不是固定与中断相对应的,而是作为一种资源由程序员自己在驱动当中申请,这样在驱动加载之后,如果有中断产生的时候,就会调用在与中断相关的函数。原创 2014-08-01 16:49:50 · 3202 阅读 · 1 评论 -
windows驱动开发——锁、死锁、以及同步
表格当中描述的是常用的同步机制,这些机制的相关属性以及他们在windows系统下面的实现。原创 2014-07-02 20:24:50 · 4884 阅读 · 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 · 2270 阅读 · 0 评论 -
调度、线程上下文以及IRQL
线程调度以及线程的上下文和当前的IRQL(中断请求级)对于每个处理器上面的驱动程序有很大的影响。而一个线程的调度优先级和处理器的当前IRQL能够决定一个运行的线程能否被中断或者抢占。在抢占式调度过程当中,系统能够利用同一个处理器上面的更高优先级的线程换掉当前正在运行的线程。一个线程上的抢占式调度使得处理器在一段时间内不能够可用。在中断线程的过程当中,系统强行要求当前线程临时的运行在一个更高中端级别原创 2014-06-29 19:37:56 · 1347 阅读 · 0 评论 -
驱动开发程序的IRP处理过程
标准IRP的处理过程如同上图所示,整个处理由IO管理器创建的IRP开始。当然这个IO管理器在大多数情况下是系统,然而在驱动程序当中也可以创建IRP。下面四个函数可以用于创建IRP:IoBuildAsynchronousFsdRequest用于创建异步IRP,发送IRP的IO管理器不需要因为等待IRP的处理。IoBuildSynchronousFsdRequest用于创建同步IRP,如果IR原创 2014-06-05 21:54:23 · 1462 阅读 · 0 评论 -
ReactOS操作系统启动代码分析(I386架构)(2)
这里紧跟上一篇谈到的0x7C00开始执行,当然此时是在实模式下面,执行最初先禁止中断,因为现在堆栈都没有就算有中断也不能执行,所以第一步禁止中断,一直到设置好堆栈才打开中断。这一部分代码很简单,利用ax将段寄存器全部清零,然后调用切换到保护模式下面去,但是由于CS一直都在使用当中,所以就不需要初始化CS。不过要注意的是实际上进入switch_to_prot的时候,并没有进入保护模式,而是在 返回的原创 2014-05-09 13:43:52 · 1688 阅读 · 0 评论 -
win2K的MBR分析
之前降到过系统启动的MBR,这次来分析FAT的MBR的原创 2014-05-08 14:45:19 · 1441 阅读 · 0 评论 -
ReactOS 系统中DOSMBR
系统的启动是由BIOS开始,然后是DBR,接下来是MBR。所以这里首先从DBR开始分析。原创 2014-05-08 09:51:10 · 1053 阅读 · 0 评论 -
ReactOS操作系统启动代码分析(I386架构)(1)
源代码在arch文件夹的arch.s汇编文件中.首先看一个宏,这个宏定义在x86comm.h头文件中,#define EXTERN(x) .global x; x:这句代码在汇编中展开就变味一条伪指令,指示x是一个全局变量,然后定义x的开始标号。原创 2014-05-07 16:36:15 · 1640 阅读 · 0 评论 -
RootKits——windows内核的安全防护(6)
驱动程序的入口很简单,仅仅设置好相应的Unload函数,并调用Hook函数。 PFILE_OBJECT pFile_tcp;PDEVICE_OBJECT pDev_tcp;PDRIVER_OBJECT pDrv_tcpip;NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_ST原创 2014-03-29 14:33:35 · 1203 阅读 · 0 评论 -
Rootkits——windows内核的安全防护(5)
在用户空间,编译的时候将驱动当做一个自定义的资源存入到.exe文件当中,然后执行的时候将其解压并且加载到内存里面。而解压出来的驱动最主要就是hook某个内核层面的函数。#pragma comment(linker,"/ENTRY:main")#pragma comment(linker,"/MERGE:.rdata=.data")#pragma comment(linker,"/MERGE原创 2014-03-28 19:55:47 · 1265 阅读 · 0 评论 -
RootKits——windows内核的安全防护
上一篇有讲到怎样利用键盘控制芯片的端口去控制键盘,但是仅仅利用定时器来实现键盘的控制是非常浪费时间的。所以我们应该换一种方式,比如说挂钩键盘击键事件的中断。整整个中断的挂钩我们在前面已经分析过了,这里将其和上一篇整合。首先利用sidt指令将键盘击键事件的中断处理事件进行挂钩,将我们的函数放入击键处理函数当中使得中断的时候调用我们的函数。然后跳转到原来的中断处理函数进行真正的中断处理。源代码如下:原创 2014-03-24 07:07:01 · 1207 阅读 · 0 评论 -
Rootkits——windows内核的安全防护(4)
在计算机组成当中,每一个硬件模块都有专属于自己的寄存器,这些寄存器用于短时间内保存自己的数据,接受命令用于下一步执行,或者保存硬件的状态。而这些寄存器可以通过相应的端口进行访问这些寄存器。NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath ){ LARGE原创 2014-03-23 09:24:13 · 861 阅读 · 0 评论 -
Rootkits——windows内核的安全防护(3)
NTSTATUS DriverEntry(IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath){ NTSTATUS ntStatus; gb_Hooked = FALSE; // We have not hooked yet ntStatus = PsSetLoadImage原创 2014-03-23 08:01:48 · 1255 阅读 · 0 评论 -
RootKits——windows内核安全防护(2)
__declspec(naked) MyKiFastCallEntry(){ __asm { jmp [d_origKiFastCallEntry] }}NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath ){ theDriverObject->D原创 2014-03-20 12:54:11 · 1294 阅读 · 0 评论 -
驱动程序编写入门以及驱动程序加载
#define PAGEDCODE code_seg("PAGE")#define LOCKEDCODE code_seg()#define INITCODE code_seg("INIT")#define PAGEDDATA data_seg("PAGE")#define LOCKEDDATA data_seg()#define INITDATA data_seg("INIT")上原创 2014-03-09 22:32:01 · 1887 阅读 · 0 评论