日期:2014-05-17  浏览次数:20891 次

windows驱动学习笔记

零零散散花了一个月的时间初步学习了windows驱动编程,接着开始要制定2013年的学习计划,即将步入另外一个学习战场,于是就将最近学习记录下来,也好将来再返回学习时有点基础。

一、windows驱动安装

1、到官方下载DDK安装,ex : 3790.1830.DDK

2、目录简介 

      示例代码: 安装目录/src/general/event/sys

      编译:build

      基本文件:源文件,sources, makefile

     

二、VC6 驱动设置

1、 Tools->Options->Directories->Executable files->新建   ...\3790.1830\BIN\X86 移到最上边

       Tools->Options->Directories->Include files->新建  ...\3790.1830\INC\CRT

       Tools->Options->Directories->Include files->新建  ...\3790.1830\INC\DDK\WXP

       Tools->Options->Directories->Include files->新建  ...\3790.1830\INC\WXP

       Tools->Options->Directories->Include files->新建  ...\3790.1830\INC\DDK\WDM\WXP

       Tools->Options->Directories->Library files->新建  ...\3790.1830\LIB\WXP\I386

2、编译设置:适用于NT驱动,WDM驱动

       Project->Configurations->Add... 新建编译选项

       Project->Setting->C/C++->Project Options

       /nologo /Gz /MLd /WZ /WX /Z7 /Od /D WIN32=100 /D _X86_=1 /D WINVER=0x501 /D DBG=1 /Fo "ddk_check1" /Fd "ddk_check1" /FD /c

       Project->Setting->Link->Project Options

       wdm.lib ntoskrnl.lib /nologo /base:"0x10000" /stack:0x400000,0x1000

       /entry:"DriverEntry" /subsystem:console /incremental=no

       /pdb:"ddk_check/event.pdb" /debug /machine:I386

       /nodefaultlib  /out:"ddk_check/event.sys"  /subsystem:native

       /driver   /SECTION:INIT,D  /RELEASE   /IGNORE:4078


三、VS2003设置

一、配置移到最上面 

        工具->选项-》项目-》VC++目录-》包含文件-》新建...  3790.1830\inc\crt

       工具->选项-》项目-》VC++目录-》包含文件-》新建...  3790.1830\inc\ddk\wxp

       工具->选项-》项目-》VC++目录-》包含文件-》新建...  3790.1830\inc\wxp

       工具->选项-》项目-》VC++目录-》包含文件-》新建...  3790.1830\inc\ddk\wdm\wxp

       工具->选项-》项目-》VC++目录-》库文件-》新建  ...3790.1830\Bin\x86

       工具->选项-》项目-》VC++目录-》可执行文件-》新建  ...3790.1830\Bin\x86


       项目-》event属性-》配置管理器-》项目上下文-》新建项目配置    + "check"

       项目-》event属性-》配置属性-》C/C++-》常规-》调试信息格式@c7

       项目-》event属性-》配置属性-》C/C++-》常规-》警告等级@wz

       项目-》event属性-》配置属性-》C/C++-》预处理器: WIN32=100;_X86_=1, WINVER=0X501; DBG=1

       项目-》event属性-》配置属性-》C/C++-》代码生成-》运行时库 @多线程

       项目-》event属性-》配置属性-》C/C++-》代码生成-》缓冲区安全检查 @否

       项目-》event属性-》配置属性-》C/C++-》高级-》调用约定 @__stdcall   

       项目-》event属性-》链接器-》常规-》输出文件 @.sys

       项目-》event属性-》链接器-》输入-》附加依赖项@wdm.lib

       项目-》event属性-》高级-》入口点 @DriverEntry

       项目-》event属性-》高级-》基址@ 0x10000


四、驱动编写
DDK_HelloWorld书写
int DriverEntry( PDRIVER_OBJECT,    PUNICODE_STRING)
头文件  #include <ntddk.h>