内核
文章平均质量分 67
yourenhello
这个作者很懒,什么都没留下…
展开
-
并发和同步
1.并发指多个控制流同时在执行,即可能是真正的并发执行,也可能是分时的并发执行,同步则是保证在并发执行的环境中各个控制流可以有效执行,包括对资源的共享或互斥访问,以及代码功能逻辑循序。2.为了保护对一个内存单元操作,我们必须使该操作称为一个院子操作。Intel x86 指令体系中,有些运算指令加上lock就可以保证其原子性。如add,adc,and btc,bts 等等。windows原创 2013-12-07 20:31:18 · 1462 阅读 · 0 评论 -
驱动对象(DRIVER_OBJECT)
每个驱动程序会有唯一的DRIVER_OBJECT驱动对象与之对应,并且这个DRIVER_OBJECT是在驱动加载时候,被内核中的对象管理器所创建。它作为驱动一个实例被内核加载,并且内核对一个驱动只加载一个实例。确切的说,是由内核的I/O管理器负责加载的。驱动程序需要在DriveEntry中初始化。typedef struct _DRIVER_OBJECT { CSHORT Type;原创 2013-12-03 19:10:44 · 922 阅读 · 0 评论 -
设备对象(DEVICE_OBJECT)
1.每个驱动程序会创建一个或多个设备对象(下文称DO),用DEVICE_OBJECT数据结构表示。每个DO都会有个指针指向下一个DO,因此就形成了一个DO链。DO链的第一个DO是由DRIVER_OBJECT 结构体中的 PDRIVER_EXTENSION 指明的.DO保存DO特征和状态信息,以下是字段信息:typedef struct _DEVICE_OBJECT { CSHORT原创 2013-12-03 20:09:03 · 1594 阅读 · 0 评论 -
驱动程序是怎么操作硬件设备的
这里以CreateFile API 为例,其他操作设备的API类似。首先应用程序调用CreateFile Api,这个API是由Win32子系统的三大模块中的Kernel32.dll实现的。CreateFile函数会调用Ntdll.dll中的NtCreateFile函数,其中NtCreateFile是未文档化的函数,最好不要直接调用NtCreateFile 的作用是穿越用户模式的边界,原创 2013-12-03 15:08:37 · 2966 阅读 · 0 评论 -
驱动笔记
1.对PNP(plug and play )and IRP 处理 ,是NT式驱动和WDM驱动的重大区别之一2.windows 的I/0 操作死基于异步设计的。也就是线程在发起一个I/0操作的时候,可以不等待这个I/o操作完成。就发起另一个I/O操作请求。这样CPU就不会将时间浪费在等待I/O 操作完成上。这样就大大提高了操作系统设计对I/O的吞吐能力。编写驱动程序的时候尽量让驱动程序支持异步操作原创 2013-12-03 11:29:13 · 762 阅读 · 0 评论 -
IO设备控制操作--DeviceIoControl
1.除了ReadFile和WirteFile以外,应用程序还可以通过另外一个API DeviceIoControl 操作设备。DeviceIoControl内部会使操作系统创建一个IRP_MJ_DEVICE_CONTROL类型的IRP,然后操作系统会将这个IRP转发到派遣函数中。2.I/O控制码(IOCTL)一个32位值。DDK提供一个宏CTL_CODE(devicetype,Func原创 2013-12-11 16:32:24 · 3389 阅读 · 0 评论 -
WDM式驱动的基本结构
1.对于WDM驱动程序来说,一般都是基于分层。也就是说,完成一个设备操作,至少要由两个驱动设备共同完成一个是物理设备对象(Physical Device Object)PDO,另一个是功能设备对象(Function Device Object)FDO。关系是附加与被附加的关系。当PC插入某个设备的时,PDO会自动创建。确切的说,是由总线驱动创建的。PDO不能单独操作设备,需要配合FDO一起使用。系原创 2013-12-05 16:54:54 · 1140 阅读 · 0 评论 -
WinDbg 内核调试常用命令
1. vertarget 命令可以显示目标系统的基本信息,如系统版本,计算机名,内核基质等kd> vertargetWindows 7 Kernel Version 7601 (Service Pack 1) MP (1 procs) Free x86 compatibleBuilt by: 7601.18113.x86fre.win7sp1_gdr.130318-1533Machine原创 2013-12-05 09:46:07 · 1781 阅读 · 0 评论 -
windows系统概念
1.从系统启动一直到内核能够正常工作,再到用户登录到系统,windows系统中的各个组件都要完成相应的初始化任务2.系统内核接收应用程序的请求,与硬件设备进行通信;另一方面,硬件设备向计算机发送信号,驱动程序收到信号后,与系统内核一起把信号传递给恰当的应用程序。3.ntoskrnl.exe 包含2层,一层是微内核(micro-kernel),这一层包含了基本的操作系原创 2013-12-05 10:41:19 · 771 阅读 · 0 评论 -
缓冲区读写操作
1.在驱动程序创建设备对象的时候,需要考虑好该设备时采用何种读写方式。当IoCreateDevie创建设备后,需要对设备对象的Flags进行设置。2.设备对象有3中读写方式:1.DO_BUFFER_IO2.DO_DIRECT_IO3.其他读写操作一般由ReadFile或者WriteFile函数引起的。3.DO_BUFFER_IO 是系统在内核中申请一块空原创 2013-12-10 18:01:31 · 1796 阅读 · 0 评论 -
测试IRP 和Dispatchroutin
下面是NT驱动demo#include "ntddk.h"void MyUnload(PDRIVER_OBJECT pDriverObj);NTSTATUS CreateDevice(PDRIVER_OBJECT pDriverObj);NTSTATUS MyDispatchRoutin(PDEVICE_OBJECT pDevObj,PIRP pIrp);extern "C" NTST原创 2013-12-10 16:01:03 · 755 阅读 · 0 评论 -
WINDOWS I/O 模型
1.对计算机的处理器来说,I/O硬件设备其实只是一些符合某些接口规范的控制器而已。处理器并不直接与设备打交道,而是向设备控制器发号施令,或者接收设备控制器的通知和命令。控制器和处理器之间通过总线进行通信2.I/O系统由5个部分组成:i/o管理器,即插即用管理器,电源管理器,WMI例程,以及驱动程序。3.I/O管理器除了支持与设备相关的驱动程序设计以外,它也允许与设备无关的驱原创 2013-12-10 13:42:18 · 603 阅读 · 0 评论 -
进程和线程
1.进程是各种资源的容器,它定义了一个地址空间作为基本的执行环境;而线程是一个指令执行序列。直接访问所属进程中的资源2.抢占式调度算法需要一个时钟中断来获得对处理器的控制权,而非抢占式算法并不需要时钟中断。3.三种典型的线程调用算法:1.先到先服务算法。(FIFO)队列2.时间片轮转调度算法。处理器的时间被分成最大长度不超过某个值的时间片段,称为时间片。这种方法存在原创 2013-12-08 15:21:09 · 542 阅读 · 0 评论 -
内核层的进程机构--KPROCESS
1.WRK中的KPROCESStypedef struct _KPROCESS { // // The dispatch header and profile listhead are fairly infrequently // referenced. // DISPATCHER_HEADER Header;//此域表明KPROCESS对象也是一个分原创 2013-12-08 16:55:50 · 2331 阅读 · 0 评论 -
内核线程结构--KTHREAD
WRK中KTHREADtypedef struct _KTHREAD { // // The dispatcher header and mutant listhead are fairly infrequently // referenced. // DISPATCHER_HEADER Header;//线程对象也是个分发器对象。 LIST原创 2013-12-08 19:38:32 · 1888 阅读 · 0 评论 -
执行体进程--EPROCESS
执行体层位于内核层之上,它侧重于提供各种管理策略,同时为上层应用层程序提供基本的功能接口。// Process structure.//// If you remove a field from this structure, please also// remove the reference to it from within the kernel debugger// (nt\p原创 2013-12-08 20:35:38 · 1356 阅读 · 0 评论 -
执行体线程--ETHREAD
typedef struct _ETHREAD { KTHREAD Tcb;//内嵌了KTHREAD对象作为第一个数据成员 LARGE_INTEGER CreateTime;//包含了线程创建时间,他是在线程创建时被赋值的。 union { LARGE_INTEGER ExitTime;//包含了线程的退出时间, LIST_ENTRY L原创 2013-12-09 17:23:45 · 2629 阅读 · 0 评论 -
NT式驱动基本结构
1.对于NT式驱动来说,主要的函数是DriveEntry函数,卸载函数,以及各个IRP的派遣函数2.驱动加载过程与驱动入口函数(DriverEntry) NTSTATUS DriveEntry(IN PDRIVER_OBJECT pDriverobject, IN PUNICODE_STRING pRegistryPath);//函数名可以自己定义DriverEntry主原创 2013-12-04 19:03:49 · 1156 阅读 · 0 评论 -
IRP与派遣函数
1.派遣函数是WINDOWS驱动程序中的重要概念。驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求时在派遣函数中处理的。2.用户模式下所有驱动程序的I/O请求,全部由操作系统化为一个叫做IRP的数据结构,不同的IRP数据会被“派遣”到不同的派遣函数(Dispatch Functin )中,这也是派遣函数名字的由来。3.IRP的处理机制类似Windows应用程序的原创 2013-12-06 10:53:26 · 1348 阅读 · 0 评论 -
IO_STACK_LOACKTION结构体
typedef struct _IO_STACK_LOCATION { UCHAR MajorFunction; UCHAR MinorFunction; UCHAR Flags; UCHAR Control; // // The following user parameters are based on the service that is原创 2013-12-10 09:59:48 · 807 阅读 · 0 评论 -
sysenter/sysexit 原理
1.从ring0到ring3最开始是用的int2E,此模式切换过程设计很多次内存访问,还有两次查表操作机访问权限的检查,这导致模式切换的开销很大从PentiumII 处理器开始,Inter引入了新的指令sysenter/sysexit,来实现快速的模式切换。2.其做法尽可能避免内存访问,而通过处理器的内部寄存器来指定必要信息。sysenter使用3个MSR寄存器来指定跳转目的地址和栈位原创 2013-12-12 16:10:15 · 1850 阅读 · 0 评论