subme1
驱动牛犊
驱动牛犊
  • 注册日期2009-10-15
  • 最后登录2009-12-21
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望11点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2800回复:0

VS2008怎么配置DDK呢?

楼主#
更多 发布于:2009-10-15 23:57
我在网上找了个使用VS2008编译驱动程序的介绍
按照如下要求进行了设置:
一.用VS2008创建一个Win32控制台应用程序,在“附加选项”处勾选“空项目”
二.将编写好的源代码文件导入项目中
三.修改VS2008设置,添加支持驱动程序编译链接的头文件和库文件
    在Include目录中添加:
    D:\软件\WINDDK\2600\inc\w2k
    D:\软件\WINDDK\2600\inc\ddk\w2k
    D:\软件\WINDDK\2600\inc\ddk\wdm\w2k
    在Lib目录中添加:
    D:\软件\WINDDK\2600\lib\w2k\i386
四.修改项目属性。
    将项目属性依次修改为:
    “配置属性”->“C/C++” -> “常规”:
    调试信息格式:C7 兼容(/Z7)
    “配置属性”->“C/C++” -> “预处理器”:
    预处理器定义:WIN32=100;_X86_=1;WINVER=0x500;DBG=1
    “配置属性”->“C/C++” -> “代码生成”:
    启用最小重新生成:否
    基本运行时检查:默认值
    运行时库:多线程调试(/MTd)
    “配置属性”->“C/C++” -> “高级”:
    调用约定:__stdcall (/Gz)
    “配置属性”->“链接器” -> “常规”:
   输出文件:$(OutDir)\$(ProjectName).sys
    启用增量链接:否(/INCREMENTAL:NO)
    “配置属性”->“链接器” -> “输入”:
    附加依赖项:ntoskrnl.lib wdm.lib
    忽略所有默认库:是(/NODEFAULTLIB)
   “配置属性”->“链接器” -> “清单文件”:
    启用用户帐号控制UAC:否
    “配置属性”->“链接器” -> “调试”:
    生成映像文件:是(/MAP)
    映像文件名:$(TargetDir)$(TargetName).map
    “配置属性”->“链接器” -> “系统”:
    堆栈保留大小:4194304
    堆栈提交大小:4096
    驱动程序:驱动程序(/DRIVER)
    “配置属性”->“链接器” -> “高级”:
    入口点:DriverEntry
   设置效应和:是(/RELEASE)
    基址:0x10000
    随机基址:默认值
    数据执行保护(DEP):默认值
    “配置属性”->“链接器” -> “命令行”->“附加选项”:
    添加开关:/SECTION:INIT,D /IGNORE:4078 /safeseh:no可以避免以下错误提示
    LINK : warning LNK4078: 找到多个“INIT”节,它们具有不同的属性(E2000020)
    LINK : error LNK2001: 无法解析的外部符号__load_config_used
五.编译,链接。

编译连接通过,生成HelloDDK.sys,然后用驱动开发技术详解配套光盘里面的LoadDriver来启动HelloDDK.sys
但得到的这样的输出:
OpenSCManager() ok !
CrateService() Faild Service is ERROR_IO_PENDING or ERROR_SERVICE_EXISTS!
OpenService() ok !
StartService() Faild 2 !
LoadNTDriver error

我已经在LoadDriver里面将路径直接设为#define DRIVER_PATH HelloDDK.sys",然后将HelloDDK.sys和LoadDriver.EXE拷到了一起,照理说应该能找得到文件吧。
但我把这个HelloDDK.sys删除了,直接执行LoadDriver.exe输出的结果和上面的一样
不知道我是在哪儿出了问题?头痛中
希望哪位达人帮我解答一下,感激不尽



游客

返回顶部