2012年6月20日
摘要: http://www.cnblogs.com/nuistlr/archive/2012/06/20/2555877.html在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __FD_SETSIZE 1024表示select最多同时监听1024个fd,当然,可以 阅读全文
posted @ 2012-06-20 10:43 spinsoft 阅读(181) 评论(0) 推荐(0) 编辑
摘要: Linux 启动进程是关于操作系统的启动选择方式。启动进程始于 BIOS,在 BIOS 执行硬件平台特定的启动任务后,接着是分区启动代码,之后是 Linux 引导程序。引导程序让用户选择可能的选项,在其中一个选项选定后载入操作系统。Linux 上最流行的启动引导程序是 GRand Unified Bootloader,简称 GRUB。启动的时间长短给用户留下了操作系统速度的第一印象,越短用户体验越正面。减少启动时间的一个主要方法是安装固态硬盘 SSD,但如果你不想替换主硬盘,Linux 上也有许多工具帮助改进引导进程。这篇文章列举了六款优秀的 Linux 引导工具,包括:Bootchart,B 阅读全文
posted @ 2012-06-20 10:36 spinsoft 阅读(815) 评论(0) 推荐(0) 编辑
摘要: 1.下载linux内核 ftp kernel.org2.解压内核,进入内核目录3.make mrproper:是目录下的源代码恢复到原先的无污染状态4.make clean 净化内核5.make dep 取消内核之间的连接关系6.make menuconfig 配置内核7.make bzImage 编译内核 把bzImage移动到/boot/下,8.make modules 编译模块9.make modules_install 安装内核(在/lib/modules 目录下将有你的模块)10.cd /boot目录 mkinitrd -v /boot/initrd-2.6.x.img 2.6.x 阅读全文
posted @ 2012-06-20 10:31 spinsoft 阅读(561) 评论(0) 推荐(0) 编辑
摘要: 转自陈皓 (CSDN)概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,ma 阅读全文
posted @ 2012-06-20 10:21 spinsoft 阅读(188) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/mingmingruyuedlut/archive/2011/01/21/1941225.html 我的上一篇文章已经阐述了“32位程序和64位程序在64位平台上读\写注册表的区别”,那么接下来将要回答上篇所留下来的一个问题:32位程序如何访问64位系统注册表(即:64位程序所访问的注册表位置)。 我们已经知道: ①:本机模式 64 位程序运行在纯模式下,并且访问键和存储在以下注册表子键中的值:HKEY_LOCAL_MACHINE\Software ②:32 位程序运行在 WOW64 模式下,并且访问键和值存储在以下注册表子项中:HK... 阅读全文
posted @ 2012-06-20 09:31 spinsoft 阅读(386) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/mingmingruyuedlut/archive/2011/01/20/1940371.html用C#实现注册表的读\写是一件很容易的事情,在此不做详细的讲解。 用C#操作注册表主要用到的两个函数为(已经渗透到下面的实例程序中,注:要引入Microsoft.Win32命名空间): 1:读取键值-->Registry.LocalMachine.OpenSubKey(“..Key的路径...”, true),这里的第2个bool类型的参数含义为:标志打开的键值是否可以更改(即:是否可以用SetValue()给键赋值),然后调用GetVal... 阅读全文
posted @ 2012-06-20 09:30 spinsoft 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 每个USB设备有一个或多个配置来控制其行为;每个配置中都含有一个或多个接口;设备的接口具有一个或多个端点,每个USB设备在主机看来就是一些端点的结合,提取一个端点的地址、缓冲区长度、数据传输方向、类别等信息,就把一个端点封装成一个管道,利用这个管道句柄就可以实现主机与一个内存缓冲区和设备多个端点之间的数据传输。USB通信模型,它表明了端点和管道所扮演的角色。整个模型分为3级结构:在最低一级,USB电缆把主控制器与设备的总线接口连接起来;在第二级,一个控制管道把系统软件与逻辑设备连接起来;在第三级,一捆数据管道把客户软件与一组接口连接起来,这些接口组成设备的功能.Descriptor是描述符,并 阅读全文
posted @ 2012-06-20 08:42 spinsoft 阅读(486) 评论(0) 推荐(0) 编辑
摘要: 1)当硬件连接到PC或从PC移除时,在硬件上会有信号跳变,BUS Driver会检测到器件的插入和移除,比如DVI的hotplug,再比如USB1.1的1.5K上拉。BUS Driver将调用IOInvalidateDevcieRelations,PNP Manager将知道BUS上的Device关系有所改变。2)为了获得新的Device关系,PNP Manager将调用IRP_MN_QUERY_DEVICE_RELATIONS。BUS Driver将会回应其BUS关系(目录)。3)一旦得知Device之间的关系,PNP Manager就能容易地确定哪些器件没有被初始化。IRP_MN_QUER 阅读全文
posted @ 2012-06-20 08:41 spinsoft 阅读(880) 评论(0) 推荐(0) 编辑
摘要: kd> !drvobj \driver\i8042prtDriver object (822c9b08) is for:\Driver\i8042prtDriver Extension List: (id , addr)Device Object list:82238020 822c9328 ----------------------------------------------------------------kd> !devobj 82238020Device object (82238020) is for: \Driver\i8042prt DriverObject 阅读全文
posted @ 2012-06-20 08:40 spinsoft 阅读(654) 评论(0) 推荐(0) 编辑
摘要: IRP 是 I/O request packet 的缩写,即 I/O 请求包。驱动与驱动之间通过 IRP 进行通信。而使用驱动的应用层调用的 CreatFile,ReadFile,WriteFile,DeviceIoControl 等函数,说到底也是使用 IRP 和驱动进行通信。一个 IRP 由两部分组成。首先是头部或者叫包的固定部分,是一个 IRP 结构。紧跟在这个头部之后的是 I/O stack locations ,这是一个 IO_STACK_LOCATION 结构的数组,这个数组中元素的个数是根据情况而定的,由 IoAllocateIrp( IN CCHAR StackSize , I 阅读全文
posted @ 2012-06-20 08:40 spinsoft 阅读(452) 评论(0) 推荐(0) 编辑
摘要: 1、三种类型的WDM驱动程序 总线驱动程序(bus driver) 功能驱动程序(function driver) 过滤驱动程序(filter driver)2、其他分类方法 类驱动程序(class driver) 端口驱动程序(port driver) 小端口驱动程序(miniort driver)3、驱动程序对象(DRIVER_OBJECT)主要成员 DeviceObject: 指向一个设备对相链表,每个设备对象代表一个设备。 DriverExtension: 一个结构体, 该结构只有AddDevice成员可以直接访问。 DriverStartIo: 指向驱动程序中处理I/O请求的函数。 阅读全文
posted @ 2012-06-20 08:39 spinsoft 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 【51CTO.com 专家特稿】 诚信网安--小麒麟一.驱动编写随着对windows系统的深入研究,越来越多的内核方面的知识被挖掘出来了,今天我们讨论下如何写一个简单的驱动,并使用现在比较新的windbg调试器进行调试。首先写驱动要对驱动有一个比较全面的认识。一个简单的驱动一般有以下几个部分组成:1,一个入口点(DriverEntry):用于创建设备对象及符号连接,以及其它初使化操作,如分配池内存等.2,一个出口(DriverUnload):删除符号连接与设备对象,并释放已经分配的各种资源,如池内存等3,几个派遣例程:用于响应Ring3程序的请求及其它驱动事件,并做相关处理。我用一个挂钩SSD 阅读全文
posted @ 2012-06-20 08:38 spinsoft 阅读(1824) 评论(0) 推荐(0) 编辑
摘要: DDK 的一些笔记,比较乱, 以后有时间再整理吧; typedef struct _RWCONTEXT //读写的线程环境; { struct _URB urb; //共享的urb; ULONG_PTR va; //mdl的开始地址; ULONG length; //要传输的长度; PMDL mdl; //指向当前的mdl; ULONG numxfer; //已经传送的字节数; } RWCONTEXT, *PRWCONTEXT; //----------------------- typedef struct _DE... 阅读全文
posted @ 2012-06-20 08:37 spinsoft 阅读(1430) 评论(0) 推荐(0) 编辑
摘要: DDK 的一些笔记,比较乱, 以后有时间再整理吧; typedef struct _RWCONTEXT //读写的线程环境; { struct _URB urb; //共享的urb; ULONG_PTR va; //mdl的开始地址; ULONG length; //要传输的长度; PMDL mdl; //指向当前的mdl; ULONG numxfer; //已经传送的字节数; } RWCONTEXT, *PRWCONTEXT; //----------------------- typedef struct _DE... 阅读全文
posted @ 2012-06-20 08:37 spinsoft 阅读(595) 评论(0) 推荐(0) 编辑
摘要: 下面这是kruglinski关于学习驱动编写的文章。虽然是入门级文章,但是也需要对驱动有一些了解后才可以看的比较透彻。《DDK学习笔记》1---入门1.驱动程序的结构:1.1、一个入口点(DriverEntry):用于创建设备对象及符号连接,以及其它初使化操作,如分配池内存等.1.2、一个出口(DriverUnload):删除符号连接与设备对象,并释放已经分配的各种资源,如池内存等1.3、几个DispatchHandler:用于响应Ring3程序的请求及其它驱动事件,并做相关处理2.内存管理2.1、分配系统池内存(ExAllocatePool):它有点像C中malloc,只不过存在分页和紧急选 阅读全文
posted @ 2012-06-20 08:36 spinsoft 阅读(856) 评论(0) 推荐(0) 编辑
摘要: 通常驱动程序的调试都是用ddk在cmd中完成的。这部分我暂时略过。下面先介绍如何设置vc++6.0在Visual Studio 6.0集成环境中开发设备驱动程序的方法。在Windows上,WindowsDDK提供的开发环境是基于命令行的,操作起来极为不便,而VisualStudio6.0给我们提供了非常友好易用的集成环境,让我们有如虎添翼之感。 那么,能否利用VisualStudio的集成环境来开发驱动程序呢?答案是可以的。通过对VisualStudio集成环境的简单设置,创建好自己的驱动开发集成环境就可以了。1,第一:安装Vc++6.0,我装的是英文版,中文版应该也可以,不过我没试。第二:. 阅读全文
posted @ 2012-06-20 08:35 spinsoft 阅读(760) 评论(0) 推荐(0) 编辑
摘要: 驱动对象 设备对象 设备栈 乱杂谈作者: JIURL 主页: http://jiurl.yeah.net/ -------------------------------------------------------------------------------- 用有限的几句话就舒舒服服的建立起对驱动对象和设备对象的概念是不可能的。刚开始是一片模糊,了解的多了,慢慢就清楚。下面的内容会使你对他们了解的清楚些。为了后面的叙述方便,首先列出驱动对象和设备对象的结构。驱动对象结构 DRIVER_OBJECT ,定义如下struct _DRIVER_OBJECT (sizeof=168)+0.. 阅读全文
posted @ 2012-06-20 08:34 spinsoft 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 心里总感觉 SOFTICE 的发展快到末路了。果然在 2006 年时Compuare 宣布停止 SOFTICE 开发。这里消息确实令很多人心痛。但与此同时,Windows 的配套调试器 windbg , cdb 等不断更新,功能不断强大,你必须选择它,虽然它内核调试速度不理想。后来我知道了 syser debuger, 国人写的不错的调试器,基本上 SOFTICE 命令等相似,上手很快,单机调试即可,速度挺快。但是要开发windows 内核程序,最好还是 windbg,至少 windbg 与系统的兼容肯定不会差吧。因为我自己的机器配置不高,所以平时玩的时候就用 syser , 但在公司真正解决 阅读全文
posted @ 2012-06-20 08:33 spinsoft 阅读(664) 评论(0) 推荐(0) 编辑
摘要: 1.驱动简介 1.1.驱动是什么计算机的外部设备需要和计算机进行数据交换,生产外部设备的厂家如何使计算机和自己的设备交换数据呢,就是通过驱动程序,从设备中读入到计算机中,早期的Win3.1,Win9x设备驱动是vxd,Win NT是kdm, Win2k 统一发展成wdm模式。 1.2.sys文件 sys文件是驱动程序的可执行代码,其扩展名为.sys,驱动程序安装后保存在windows/system32/drivers目录中。 对于PnP设备,在设备插入后,sys文件会被windows装载到内存中,系统线程调用sys中的函数来和设备进行通信。 1.3.inf文件inf文件是安装设备驱动程序时必须 阅读全文
posted @ 2012-06-20 08:32 spinsoft 阅读(3357) 评论(0) 推荐(0) 编辑