阅读:4226回复:18
贴一个驱动编写库和一些驱动开发的技巧
前言
在工作中,经常发现同一类的驱动,总是大同小异的改好多次,只是为了在不同的产品里面使用,比如换个设备名,每次改动都要重新整理思路(记性不好,有时还得从头看看文档),出于对多次对脑细胞的拯救,所以花了点时间,整理了一下部分代码,形成了一套库。 功能 在这套库中,实现了以下功能: 1。CDeviceQueue, 设备读写队列,应用层向驱动发出读数据请求,如果设备里面有数据,则直接拷贝数据并完成请求,如果没有,则将读请求挂起,等待数据,同样,当有数据到达设备的时候,如果没有读请求,则将数据缓存。 2。虚拟网卡框架 3。协议驱动拦截框架(就是以前gjpland说的fake protocol原理的实现,功能就不用说了) 。。。 其他看driver.h吧,做着玩得东西,也没什么文档。 例子 1。虚拟网卡,位于samples\NetVMini目录下。 2。协议驱动拦截,位于samples\ipfwdrv目录下。 其他例子,有待补充。 编译 库是用vista ddk编译的,也就是WDK 6000 for Windows 2000 x86 Build Environment,包括例子,这个DDK我个人觉得是到目前为止用的最舒服的ddk了,没有vc都可以编译。 版权 有于源代码涉及到一些版权问题,所以不能公开,请大家谅解。 另外,用了以后产生什么不当后果并且造成了什么经济损失,本人也是不负责的。 闲话不多说,上附件了。 |
|
|
沙发#
发布于:2007-07-07 22:17
如果大家觉得库还有点用呢,真要来点赞扬,我还是虚荣的,如果觉得很垃圾,就不用往我脑袋上板砖了,我有自知之明。
|
|
板凳#
发布于:2007-07-07 22:29
在用ddk写sources文件,生成一个静态库的时候,如果很多个源文件,并且这些源文件可以归纳为几类,比如有些源文件是关于ndis的,有些是关于文件系统的,有些是内核hook的,ddk默认的sources文件貌似是假设所有的文件在同一个目录下,这样如果大量的文件在同一个目录下,看起来就不那么直观,经过对ddk的一些.mak文件的分析,找到一种方法,可以做到分到不同目录,通过在sources文件里面增加一条规则:
{子目录名\}.文件扩展名(如c,cpp等){$(O)\}.obj:: @type <<$(ECHO_RSP) $(ECHO_CXX_MSG) <<NOKEEP @$(CXX_COMPILER_NAME) @<<$(CL_RSP) -Fo"$(MAKEDIR)\$(O)/" $(USE_FC) $(CXX_COMPILER_FLAGS: = ) $< <<NOKEEP 就可以了,有些扩展名可能规则不一定一样,可以去ddk的mak文件里面找。 |
|
地板#
发布于:2007-07-07 22:31
附件在这
|
|
|