用VC6开发驱动的工程设置
更新时间:2023-11-08 18:34:01 阅读量: 教育文库 文档下载
- 用vc6开发操作系统推荐度:
- 相关推荐
用VC6开发驱动的工程设置
2008-03-17 16:09 1624人阅读 评论(0) 收藏 举报
这篇文章将说明如何设置VC6,使得可以编译驱动文件。
1 首先在vc6里面设置ddk的include和lib路径,要安装好一个ddk,以前安装好的也可以,只要ddk目录还在就可以了,这里假设ddk目录是F:/WINDDK
那么该目录下还会有子目录,一般2660是xp的ddk,3790是win2003的sdk,随便用一种都无所谓。
在vc6里面,Tools --> Option -->Directoriers里面设置 Include路径
F:/WINDDK/3790/inc/wnet F:/WINDDK/3790/INC/DDK/WNET LIB路径
F:/WINDDK/3790/LIB/WNET/I386 DDK的路径要放到最先
这些设置好了,就可以开始下一步了。有时候,你还需要用到最新的SDK,那么请同样把sdk目录添加进去,sdk应该在ddk后面,不过一般无所谓
2 用vc新建一个工程,选择Windows的空的工程,然后添加一个cpp文件,内容如下: extern \{
#include
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegistryPath) {
NTSTATUS NtStatus = STATUS_SUCCESS; UNICODE_STRING usDriverName, usDosDeviceName; DbgPrint(\
RtlInitUnicodeString(&usDriverName, L\//Device//Example\
RtlInitUnicodeString(&usDosDeviceName, L\//DosDevices//Example\ DbgPrint(\
return NtStatus; }
这里需要用到 extern \才包含 ntddk.h,为什么呢?因为,如果不这样做,在cpp文件中,默认以为 DbgPrint 这些函数是c++规则的,那么就导致错误
unresolved external symbol \(?DbgPrint@@YAKPADZZ) 3 这时候直接编译,那么就会有错误
f:/winddk/3790/inc/ddk/wnet/ntddk.h(11545) : error C2146: syntax error : missing ';' before identifier 'ContextRecord'
f:/winddk/3790/inc/ddk/wnet/ntddk.h(11545) : error C2501: 'PCONTEXT' : missing storage-class or type specifiers
f:/winddk/3790/inc/ddk/wnet/ntddk.h(11545) : error C2501: 'ContextRecord' : missing storage-class or type specifiers
f:/winddk/3790/inc/ddk/wnet/ntddk.h(12331) : fatal error C1189: #error : \architecture\
因为,没有定义任何的ddk的目标体系,这时候,需要在 C++设置Preprocessor definitions里面,添加 预定义_X86_,当然,你也可以在cpp Include ntddk.h 文件之前这样定义 #define _X86_ 4 继续编译,错误为:
DriverMain.obj : error LNK2001: unresolved external symbol __imp__RtlInitUnicodeString@8
DriverMain.obj : error LNK2001: unresolved external symbol _DbgPrint
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16 这时候需要在link --> Object/library Modules去掉全部默认的lib,添加 ntoskrnl.lib并且在Output里面更改Base Address为0x10000、Entry-point symbol为DriverEntry 并且把/subsystem:windows 改为 /subsystem:native 5 保存,编译,还有一个错误
DriverMain.obj : error LNK2001: unresolved external symbol __chkesp
这个需要在C++选项下面,把/GZ 这个参数删除,默认下,debug模式,vc6会添加这个选项。我们不需要函数调用返回时对esp进行错误检查,可以去掉这个选项
6 编译通过了,但是还是需要修改一下,首先输出的是.sys而不应该是.exe,这个可以到link选项下修改
我们还可以添加一个编译选项 /driver 或者/DRIVER:WDM 有或者 /DRIVER:UP (这个选项表明,该驱动不能用于多处理器环境)
7 还有一点应该修改的是C++ --> Code Generation -->Calling convention:修改为 __stdcall 并且C++ Language里面把所有特性都去掉,什么 exception handling以及Enable Run-Time Type Inform去掉
并且由于这个是驱动,所以Debug Info应该使用C7 Compatible,这样可以让softice调试驱动可以载入符号
并且link选项,应该把Link incrementally去掉,Debug Info应该选择 Both formats以保证各种调试器的兼容性。
8现在就可以正确编译了,不过还有以下错误,无法更正
F:/WINDDK/3790/inc/wnet/ntdef.h(963) : warning C4163: '_rotl64' : not available as an intrinsic function
F:/WINDDK/3790/inc/wnet/ntdef.h(965) : warning C4163: '_rotr64' : not available as an intrinsic function
F:/WINDDK/3790/INC/DDK/WNET/ntddk.h(7423) : warning C4035: 'InterlockedExchange' : no return value
F:/WINDDK/3790/INC/DDK/WNET/ntddk.h(7477) : warning C4035: 'InterlockedExchangeAdd' : no return value
F:/WINDDK/3790/INC/DDK/WNET/ntddk.h(7508) : warning C4035: 'InterlockedCompareExchange' : no return value
F:/WINDDK/3790/INC/DDK/WNET/ntddk.h(7723) : warning C4163: '_ReadWriteBarrier' : not available as an intrinsic function
查了一下,没有找到解决方法,好像不影响驱动,就不管它了
正在阅读:
用VC6开发驱动的工程设置11-08
无私奉献的名人事例02-15
中国网络游戏行业调研及市场分析报告目录11-19
小学生日记大全50字02-21
2017年新年寄语02-13
涡轮盘材料的研究09-12
经典环保公益广告语02-14
建筑常用十种保温材料特点08-21
北屯中心小学316工程评估自查总结报告11-20
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 驱动
- 设置
- 开发
- 工程
- VC6