用VC6.0编译Windows驱动程序

来源:互联网 发布:cmmi软件成熟度 编辑:程序博客网 时间:2024/04/30 12:54

      从广义角度来讲,只要某种语言的编译器能编译出PE格式的二进制文件,并能正确指明驱动程序的入口地址,那么这种语言就能用作开发Windows驱动,所以我们可以选择C、C++、汇编,甚至是Delphi。编译Windows驱动的编译器也有很多,虽然Microsoft发布了新的WDK,但它足足有600我M啊,相比之下,我们还是比较钟意小巧的VC6.0,下面我们就一步一步把VC打造成Windows驱动编写IDE。

1.修改编译选项
"工程"菜单"设置"选项中"C/C++"选项卡中的"Project Options"里。删除原有的内容,输入下面的内容:

/nologo /Gz /Mld /W3 /WX /Z7 /Od /D WIN32=100 /D _X86_=1 /D WINVER=0x500 /D DBG=1 /Fo"MyDriver_Check" /Fd"MyDriver_Check" /FD /c

说明:
/nologo:代表不显示编译版权信息
/Gz:默认函数调用采用标准调用(_stdcall)
/W3:采用第三级警告模式
/WX:将警告信息变成错误信息,最大程序地保证了代码的可靠性
/Z7:用Z7模式产生调试信息。VC默认的Program Database for "Edit&Continue",这个和Link的/driver选项冲突
/Od:关闭调试模式。驱动程序不需要像Win32程序那样用VC调试器调试,而需要用到内核调试器调试
/D WIN32=100 /D _X86_=1 /D WINVER=0x500 /D DBG=1:定义一此宏,这些是必需的
/Fo"MyDriver_Check":设置中间生成目标代码的路径(根据具体环境会有所变化)
/Fd"MyDriver_Check":设置pdb文件的目录位置,pdb文件中包含了大量的符号,这是调试驱动时候所必需的(根据具体环境会有所变化)
/FD:生成文件依赖
/c:只进行编译,而不链接

2.修改链接选项
"工程"菜单"设置"选项中"Link"选项卡中的"Project Options"里。删除原有的内容,输入下面的内容:

ntoskrnl.lib /nologo /base:"0x10000" /stack:0x400000,0x100 /entry:"DriverEntry" /subsystem:console /incremental:no /pdb:"MyDriver_Check/HelloDDK.pdb" /debug /machine:I386 /nodefaultlib /out:"MyDriver_Check/HelloDDK.sys" /pdbtype:sept /subsystem:native /driver /SECTION:INIT,D /RELEASE /IGNORE:4078

说明:
ntoskrnl.lib:NT驱动需要链接此库,如果是WDM驱动程序,则需要链接wdm.lib
/nologo:链接时不显示版权信息
/base:"0x10000":加载驱动时,设定加载在虚拟内存中的位置
/stack:0x400000,0x1000:设定函数使用堆栈的大小
/entry:"DriverEntry":入口函数的地址,此函数必须是符号标准函数调用的
/subsystem:console:设置子系统
/incremental:no:非递增式的链接
/pdb:"MyDriver_Check/HelloDDK.pdb":设置pdb文件的文件名(根据具体环境会有所变化)
/debug:以debug方式链接
/machine:I386:产生代码是386兼容平台的
/nodefaultlib:不使用默认的库
/out:"MyDriver_Check/HelloDDK.sys":输出二进制代码的名称(根据具体环境会有所变化)
/pdbtype:sept:设置pdb文件类型
/subsystem:native:子系统是内核系统
/driver:编译驱动
/SECTION:INIT,D:将INIT的段设置为可抛弃的
/IGNORE:4078:忽略4078号警告错误

 

原创粉丝点击