07 2012 档案
摘要:第三章 串口过滤在windows系统上与安全软件相关的驱动开发中,“过滤”(filter)是极其重要的一个概念。过滤是在不影响上层和下层接口,在内核中加入新的层,从而不修改上层软件或下层真实驱动,就加入新功能。进行过滤的最主要的方法是对一个设备对象(DO)进行绑定。我们可以首先认为:一个真实的设备对应一个设备对象(实际对应关系可能复杂的多)。通过编程生成一个虚拟的DO,并Attach在一个真实的设备上。一旦绑定,则本来OS发给真实设备的请求,就会首先发送到这个虚拟设备。WDK有多个API实现绑定功能。NTSTATUS IoAttachDevice( IN PDEVICE_OBJECT Sou.
阅读全文
摘要:Windows的内核还有个明显的不同,就是其内核的相当一部分页面是可倒换的。内存管理即虚存技术的重要内容之一是物理页面的倒换,就是可以将已经有映射但是暂时不受到访问的页面倒换到外存中去,到实际受到访问时再倒换进来,使外存成为内存的扩充。但是,在Linux中,属于内核的页面无论是用于代码还是数据(用于文件内容缓存的除外),是不受倒换的。这一方面是为了简化内核的设计和实现,一方面也是因为觉得价值不大,因为内核毕竟是全局的,所有进程都公用同一个系统空间,即使要倒换也油水不大。但是,Windows的内核却不同,其相当一部分页面是可倒换的。究其原因,另一方面可能是来自VMS的影响,另一方面也可以从Win
阅读全文
摘要:共享的内核空间:用户空间是各个进程隔离的,但是内核空间是共享的。就是说,每个进程看到的高2GB空间范围内的数据,都应该是一样的。如果成功修改了高2GB范围内的代码,让硬盘驱动返回失败,那么所有进程都无法读取硬盘。内核空间是受到硬件保护的,比如X86下R0层的代码才可以访问内核空间。普通应用程序编译后都允许在Ring3层,R3层代码要调用R0层功能,一般都通过OS提供的一个入口(该入口中调用sysenter指令)来实现。所以编写的内核模块,是运行在内核空间中,称为OS的一个模块,最终被所有需要该模块提供功能的应用程序或OS本身调用。内核模块位于内核空间,而内核空间又被所有进程共享。因此,内核模块
阅读全文
摘要:这两天一直在查一个Bug,图方便,直接通过Windbg Release调试。问题出现在一个很奇怪的地方,线程栈似乎被破坏,但是始终查不到原因。后来同事帮忙,VS Debug一下就把问题定位了,出在一个动态库导出函数的调用约定不一致。定义为_stdcall,调用处声明为C调用约定了。Release确实忽略了一些边界的检查,如果Release不能再现,或者思路不清的。别忘了使用Debug版。
阅读全文
摘要:驱动模型区分:WDM 必须满足n种被要求的特性(如电源管理,即插即用);如果没有这些功能,则统一称为NT式驱动;如果调用了WDF的内核API,则称为WDF驱动。本书关注于通用的内核程序开发,不是针对某种硬件。例如,文件系统驱动,存储设备驱动,网络驱动。不是为了驱动某个硬件,而是在通用的windows上实现某种功能。开发环境的搭建:下载WDK,编译调试。无需VS,VS只是方便工程管理和编码。因为不是应用程序,所以所有win32API都不能使用。部分C Runtime函数也不能使用,但文档中说明的函数则可以使用。简单代码示例:#include <ntddk.h> // 提供一个Unlo
阅读全文
摘要:Base64是MIME邮件中常用的编码方式之一。它的主要思想是将输入的字符串或数据编码成只含有{'A'-'Z', 'a'-'z', '0'-'9', '+', '/'}这64个可打印字符的串,故称为“Base64”。Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。举个例子:转换前aaaaaabbccccddddeef
阅读全文
摘要:The WTSQueryUserToken function obtains the primary access token of the logged-on user specified by the session ID. To call this function successfully, the calling application must be running within the context of theLocalSystem account and have the SE_TCB_NAME privilege.MSDN明确指出调用该函数必须使用LocalSystem账
阅读全文

浙公网安备 33010602011771号