![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
kernal
木易云清
每天学习一点linux,每天学习享受生活,享受工作。
展开
-
分页内存,非分页内存
分页内存是低中断级别的例程可以访问的。而非分页内存则是各个中断级别的例程都可以使用的。区别在于:分页内存是虚拟内存,在物理上未必总是能得到。操作系统实现虚拟内存的主要方法就是通过分页机制。在Win32中,物理地址空间,二维虚拟地址空间和实际内存地址是三个不同的概念。操作系统通过段选择子构成二维虚拟地址空间,每个进程有一个4G的地址空间,然后操作系统的内存管理器件把每个进转载 2014-03-04 10:02:53 · 703 阅读 · 0 评论 -
驱动程序通知应用程序读取数据的方法总结
mark一下,以后需要。驱动程序如何通知应用程序读取数据?这是一个很多人都关心的问题。在此之前,我一直是采用的应用程序主动查询的方式,即,应用程序定时发送IRP来读取驱动程 序的数据。为此,必须考虑一个问题——如果应用程序没有运行,而驱动程序的缓冲区满了,如何处理?此外,应用程序需要不停地发送IRP,但是,每次发送后要Sleep一下,否则,CPU占有率会过高的。转载 2014-03-20 12:42:46 · 3059 阅读 · 1 评论 -
探究MDL
以下的虚拟内存可以理解成逻辑内存,因为我觉得只有这样才能讲通下面所有的东西。以下的“未分页”指没有为页进行编码。以下为MDL结构体(我很郁闷,我在MSDN上没有找到这个结构体)typedef struct _MDL { struct _MDL *Next; //下一个MDL CSHORT Size; //大小 CSHORT MdlFlags;转载 2014-03-20 14:44:16 · 526 阅读 · 0 评论 -
【API】MmMapLockedPagesSpecifyCache
MmMapLockedPagesSpecifyCache MmMapLockedPagesSpecifyCache 函数介绍: 这个函数是专门为2000之后的windows版本设计的,在2000或者98甚至更早版本中,用的是函数:MmMapLockedPages; 函数原型: NTKERNELAPI PVOID MmMapL转载 2014-03-21 16:31:17 · 2038 阅读 · 0 评论 -
【个人理解】探究MDL
以下的虚拟内存可以理解成逻辑内存,因为我觉得只有这样才能讲通下面所有的东西。以下的“未分页”指没有为页进行编码。以下为MDL结构体(我很郁闷,我在MSDN上没有找到这个结构体)typedef struct _MDL { struct _MDL *Next; //下一个MDL CSHORT Size; //大小 CSHORT MdlFlags;转载 2014-03-21 16:42:13 · 634 阅读 · 0 评论 -
Windows MDL原理总结
1 先是mdl的数据结构。2 下面根据用法逐步的讲解mdl数据结构的含义:一般用法,先是 IoAllocateMdl :原型为:最常用的是VirtualAddress和Length。把自己的NonPageable buffer的起始地址传给IoAllocateMdl ,长度也传给他。可是这个函数具体做了啥呢(下面只是些基本的影响理解的部分,具体更多的东西,更细节转载 2014-03-21 13:27:35 · 1398 阅读 · 0 评论 -
NT API 注册表键介绍ZW相关函数
核心提示:Windows NT和Windows 98把配置信息和其它重要信息都记录到注册表(registry)中。WDM驱动程序可以使用表3-9列出的函数访问注册表。如果你在用户模式编程中曾涉及过注册表访问,你可能会猜出如何在驱动程序中使用这些函数。然而这些内核模式中的支持函数确有些不同,我想有必要描述一下它...Windows NT和Windows 98把配置信息和其它重要信息都记录到注转载 2014-04-02 13:13:14 · 1944 阅读 · 0 评论 -
ZwMakeTemporaryObject 函数
ZwMakeTemporaryObject 把一个永久性的对象转化成一个临时的对象,仅仅是记录,暂时还是不理解具体含义。原创 2014-04-02 13:33:42 · 860 阅读 · 0 评论 -
IoMarkIrpPending
IO_STACK_LOCATION很重要,再多聊一点也无妨。上上回我们谈了IO_STACK_LOCATION和那几个重要的函数,当然,我的目的不是扫盲,而是记下一些容易犯错的地方(实际上都是工作中碰到过的钉子)以方便自己回顾。我的记性是如此的差以至于几月不看就会忘记。如果你对这东西没概念,我建议你先多查查WDK文档。上回我们聊了IoCopyCurrentIrpStackLocationTo转载 2014-04-02 14:04:18 · 665 阅读 · 0 评论 -
IO_STACK_LOCATION — I/O堆栈
I/O堆栈 任何内核模式程序在创建一个IRP时,同时还创建了一个与之关联的 IO_STACK_LOCATION 结构数组:数组中的每个堆栈单元都对应一个将处理该IRP的驱动程序,另外还有一个堆栈单元供IRP的创建者使用(见图5-3)。堆栈单元中包含该IRP的类型代码和参数信息以及完成函数的地址。下图显示了堆栈单元的结构。 I/O堆栈单元数据结构:转载 2014-04-02 14:15:40 · 1459 阅读 · 0 评论 -
IoAllocateMdl,MmProbeAndLockPages的用法
[-]IoAllocateMdlMmProbeAndLockPages的用法 IoAllocateMdlIoAllocateMdl,MmProbeAndLockPages的用法 2012-02-08 10:51:20| 分类: Windows内核编程 | 标签: |字号大中小 订阅第一,MDL的一个用法是提供驱动程序访问用户模转载 2014-04-23 16:02:02 · 1194 阅读 · 0 评论 -
AlignmentRequirement
ps执行DMA(DirectMemoryAccess,直接内存存取)传输的设备直接使用内存中的数据缓冲区工作。HAL要求DMA传输中使用的缓冲区必须按某个特定界限对齐,而且设备也可能有更严格的对齐需求。设备对象中的AlignmentRequirement域表达了这个约束,它是一个位掩码,等于要求的地址边界减一。下面语句可以把任何地址圈入这个界限:PVOID address = ...;转载 2014-04-08 23:52:31 · 852 阅读 · 0 评论 -
WDF设备驱动框架
WDF设备驱动框架2009-05-20 上午 06:491. 引言设备驱动程序是硬件设备连接到计算机系统的软件接口,任何设备都必须有相应的驱动程序才能在计算机系统上正常工作。设备驱动程序的优劣直接关系到整个系统的性能和稳定性,因此,设计和开发稳定高效的驱动程序具有重要意义。WDF(Windows Driver Foundation)是微软提出的下一代全新的驱动程转载 2014-03-19 14:26:32 · 2074 阅读 · 0 评论 -
I/O管理器及IRP缓冲区管理
I/O管理器 I/O 管理器定义了有序的结构,或者说是模型,在这个模型里将I/O请求发送给设备驱动程序。I/O系统是包驱动的,大部分I/O请求用I/O请求包(IRP)代表,从一个I/O系统组件传送到另一个组件。(注意:快速I/O不是IRP。)这种设计允许一个应用程序线程可以同时管理多个I/O请求。一个IRP是一个数据结构,包含了完整地描述一个I/O请求的信息。(可以通过Windbg内核调转载 2014-04-15 14:50:14 · 798 阅读 · 0 评论 -
I/O管理器、驱动执行过程
1.应用程序向I/O管理器发出I/O操作请求(读、写等操作)。2.I/O管理器通过建立一个IRP来分发I/O请求并把它传递给调用链中第一个驱动程序。3.第一个驱动程序通过向第二个驱动程序发出I/O请求以便继续处理。4.第二个驱动程序通过向第三个驱动程序发出I/O请求以便继续处理。5.第三个驱动程序完成I/O操作。它调用IoCompleteRequest()函数并开始转载 2014-04-15 14:35:23 · 969 阅读 · 0 评论 -
在驱动和应用程序间共享内存
在不同的场合,很多驱动编写人员需要在驱动和用户程序间共享内存。两种最容易的技术是: l 应用程序发送IOCTL给驱动程序,提供一个指向内存的指针,之后驱动程序和应用程序就可以共享内存。(应用程序分配共享内存) l 由驱动程序分配内存页,并映射这些内存页到指定用户模式进程的地址空间,并且将地址返回给应用程序。(驱动程序分配共享内存) 使用IOCT转载 2014-03-04 11:44:12 · 687 阅读 · 0 评论 -
windbg中"Your debugger is not using the correct symbols"问题解决方法
lkd> .symfix SRV*D:/WINDOWS/Symbols*http://msdl.microsoft.com/download/symbolsSymbol search path is: SRV*D:/WINDOWS/Symbols*http://msdl.microsoft.com/download/symbolslkd> !sym noisynoisy m转载 2014-03-17 10:03:48 · 3362 阅读 · 0 评论 -
驱动与应用层之间的共享内存通信与事件通知
驱动与应用程序之间通过共享内存通信,即Ring0与Ring3共享内存,有时候是一个显而易见的需求,另外,驱动很多情况下也需要在某种条件满足后主动通知应用程序做相应的操作,本文作一些我自己的学习心得记录,以便以后参考。共享内存关于内核与应用层共享内存,其实给出一篇OSR的文章和代码,一切问题都解决了,我在网络上搜到了这篇文章的一些翻译,但是诡异的是所有的这些译文居然没有把原文链接给加转载 2014-03-27 14:02:52 · 2868 阅读 · 0 评论 -
IRP结构
IRP结构图5-1显示了IRP的数据结构,阴影部分代表不透明域。下面是该结构中重要域的简要描述。MdlAddress(PMDL)域指向一个内存描述符表(MDL),该表描述了一个与该请求关联的用户模式缓冲区。如果顶级设备对象的Flags域为DO_DIRECT_IO,则I/O管理器为IRP_MJ_READ或 IRP_MJ_WRITE请求创建这个MDL。如果一个IRP_MJ_DEVICE转载 2014-03-18 10:31:38 · 638 阅读 · 0 评论 -
ExAllocatePool详解
格式有点乱,但是讲得还行就转载了。#ifdef POOL_TAGGING #ifdef ExAllocatePool #undef ExAllocatePool #endif#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a,b,'frPD')#endif内核模式中的基本堆分配函数是E转载 2014-03-17 14:35:08 · 6360 阅读 · 0 评论 -
WDK与DDK的区别
虽然都说WDK是DDK的升级版本,我下面的说话是最详细的。WDK采用WDF驱动模型,意为Windows Driver Foudation,是Vista及以后版本OS所采用的驱动模型,以前的DDK,是WDM驱动模型,意为Windows Driver ModelWDK包含了以前的DDK和IFS,和驱动验证等等……XP下也可以使用WDK,它能编译Win2000转载 2014-03-17 17:20:48 · 2866 阅读 · 0 评论 -
驱动程序中文件操作函数之ZwCreateFile
据说Windows是用80%的C和20%的汇编写成的,那么在驱动程序的DDK提供给程序员使用的内核函数就都包含了C的特性,比如一个函数的使用会包含多个结构体,所以在使用起来没有在用户模式下这么简单。为了使用ZwCreateFile这个内核函数,我们首先需要作一些准备工作,还是先来看看ZwCreateFile函数的定义,该函数的定义位于wdm.h中:NTSYSAPINTSTATU转载 2014-03-30 21:19:44 · 1852 阅读 · 0 评论 -
响应单击右键后的磁盘格式化都要处理哪些IRP呢?
如题,因为不知道需要处理那些IRP,所以我的虚拟磁盘点击格式化后没有任何反应,不会弹出那个经典的窗口^_^另外,假如我选择了NTFS,当我点击确定后,NTFS相关的数据结构是不是都通过相应的读写IRP发到磁盘驱动上了?磁盘驱动只管把接到的数据写到对应的地方就好了呢?更多0分享到:相关主题推荐: 格式化 磁盘 数据结构 数据相关帖子推荐:c#如何实原创 2014-03-18 14:14:13 · 822 阅读 · 0 评论 -
Ramdisk源代码详解
这篇文章来介绍一下WDK中提供的一个案例源码--Ramdisk虚拟磁盘。这个例子实现了一个非分页内存做的磁盘储存空间,并将其以一个独立磁盘的形式暴露给用户,用户可以将它格式化成一个Windows能够使用卷,并且像操作一般的磁盘卷一样对它进行操作。由于使用了内存作为虚拟的存储介质,使这个磁盘具有一个显著的特点,性能的提高。这个例子所使用的微软WDF驱动框架。入口函数1.入口函数的定义任何转载 2014-03-19 14:49:25 · 685 阅读 · 0 评论 -
编译安装WDK中ramdisk虚拟磁盘sample
WinDDK版本7600.16385.1,ramdisk sample位于\src\storage\ramdisk目录下;1.拷出ramdisk整个文件夹到工作目录下,打开WDK的Build Environment—>Windows XP—>x86 Checked Build Environment,进入工作目录下的ramdisk目录2.执行:BLD在objchk_wxp_x86\转载 2014-03-19 15:19:10 · 1496 阅读 · 0 评论 -
硬盘Boot Sector
1. Boot Sector 的组成 Boot Sector 也就是硬盘的第一个扇区, 它由 MBR (MasterBoot Record),DPT (Disk Partition Table) 和 Boot Record ID 三部分组成. MBR 又称作主引导记录占用 Boot Sector 的前 446 个字节( 0 to 0x1BD ),存放系统主引导程序 (它转载 2014-03-19 16:06:24 · 861 阅读 · 0 评论 -
设备读写 之 直接方式(Direct I/O)
这种方式需要在创建完设备对象后,为设备设置属性DO_DIRECT_IO 和缓冲读写设备不同,直接方式读写设备,操作系统会将用户模式下的缓冲区锁住。然后操作系统将这段缓冲区在内核模式地址空间中再映射一遍。这样,用户模式的缓冲区和内核模式的缓冲区指向的是同一区域的物理内存。无论操作系统如何切换进程,内核模式地址保持不变。 操作系统(IO管理器)先将用户模式的地址锁定后,转载 2014-04-09 10:23:42 · 1329 阅读 · 0 评论