我从网上下了过滤数据包的代码学习,编译时出现找不到ntddk.h等头文件,我猜想是没安装DDK得缘故,我从网上下了DDK安装完后,继续编译,还是找不到,于是我把DDK所在目录包含进来,结果头文件都已经找到了,结果在ntddk.h出现如KSPIN_LOCK,ULONG_PTR,PKDPC等类型没有定义得错误。注:在找不到头文件时,出现这样得错误提示,说缺少ddkroot得环境变量,请问是否与这个相关,该如何设置?

解决方案 »

  1.   

    不过首先要确定你安装的DDK版本正确啊,每个系统都有其对应的DDK,不一样的
      

  2.   

    (1)创建批处理文件build.dat,具体的作用我就先不解释了,需要再问我if"%1"=="" goto InvalidParameterif not exist %1\bin\setenv.bat goto SetenvNotFoundcall %1\bin\setenv.bat %1 %2
    %3
    cd %4
    build
    goto exit:InvalidParameter
    echo Invalid Parameter.
    goto exit:SetenvNotFound
    echo Can't found Setenv.bat
    goto exit:exit===============================================================
    其中,
    %1   表示DDk的安装路径。通常DDK再安装后会自动创建一个环境变量 %DDKROOT%
         这个变量就代表DDK的安装路径
    %2   编译模式: checked为调试模式,  free为发行模式
    %3   表示用来存放DDK源代码的磁盘盘符,比如  d:,c:
    %4   是存放DDK源代码的完整路径dat的执行过程略..
      

  3.   

    补充:build.dat文件执行过程:          首先检查参数%1是否为空,如果为空则退出。
         
              接着检查DDK本身的编译环境配置批处理文件Setenv.bat是否存在,              如果不存在则退出;如果存在,则执行这个批处理并传递 %1,%2两个
                  
                  参数来设置环境和编译模式。
           
              然后通过参数%3,%4两个参数将路径切换到存放源代码的路径上。          最后执行Build冰凌,编译并创建程序(2)执行VC并建立一个空的Makefile工程(3)在debug的command栏里输入
       
          “build.dat %DDKROOT% checked d: d:\MiniPort” // 改为实际路径
      
         同样release的command栏输入      “build.dat %DDKROOT% free d: d:\miniport”// 改为实际路径(4)创建makefile工程完成以后,将第1步的build.dat复制到这个makefile工程下(5)差不多完成了,确保编译参数命令行正确。需要指出,build.dat的第四个参数所指     的路径为源程序、source文件和makefile文件所在的路径。如果命令书写不正确,则可     以通过project菜单的setting对工程的debug和release的编译命令做修改(6)此时就可以正确的编译程序了,同以前一样添加自己.h和.cpp文件进行编辑就好了
      

  4.   

    TO piggyXP(小猪): 那个是不是应该是bat吧,我执行了一下,出来的dos屏闪了一下就没了,估计是有错误,因为都还没输入那些参数。你上面说了第一步,是不是还有另外的步骤啊,方便的话,要不我把拿份代码发给你,帮我调试一下,你再告诉我问题出在哪,我觉得那分代码本身应该没问题,主要是我调试环境没设好,谢谢!
      

  5.   

    哦呵呵,不好意思后面我刚才去忙别的事情去了,现在才给你贴上呵呵,不好意思啊^_^是的,我写错了-_-b  就是.bat批处理文件呵呵现在就是全部的步骤了,有点麻烦,但愿你别对驱动开发丧失信心才好^_^
      

  6.   

    缺少ddkroot得环境变量,
    这个是你安装可能有问题。
    假如你用的VC7编译器的话,可以下载我的这个向导文件,可以在IDE环境下编译DDK程序。
    顺便帮我顶一下。
    http://www.codeproject.com/macro/ddkwizard.asp你上面的那几个说找不到的都好像是较新版本的头文件中才有的,你可能有什么没定义。
      

  7.   

    --------------------Configuration: make - Win32 Debug--------------------
    D:\DRVFLTIP_SRC\make>if "%DDKROOT%" == "" goto InvalidParameter 
    D:\DRVFLTIP_SRC\make>if not exist %DDKROOT%\bin\setenv.bat goto SetenvNotFound 
    D:\DRVFLTIP_SRC\make>echo Can't found Setenv.bat 
    Can't found Setenv.bat
    D:\DRVFLTIP_SRC\make>goto exit ---------------------------------------
    To piggyXP(小猪):上面是我通过你上面说的方法执行的结果,按照出错的提示看,是没有找到Setenv.bat这个文件,我通过“我的电脑”属性-》高级-》环境变量查看,没有发现DDKRoot这个环境变量,我觉得环境变量是不是都应该在那儿显示的?小猪再帮帮忙,扶小弟一把
      

  8.   

    安装程序会帮你加上DDKROOT这个环境变量的!!!不然你自己加上去算了。
      

  9.   

    DDK安装以后就会自动创建一个环境变量 %DDKROOT% 啊,你是不是装错了啊呵呵要不你就自己去环境变量里面添加一下上试试看啊^_^sevencat(七猫)的这个东西不错呵呵http://www.codeproject.com/macro/ddkwizard.asp
      

  10.   

    http://www.codeproject.com/macro/ddkwizard.asp=============================================================================
    这个怎么用,恁是没看懂,英语不好,不过我一般只在VC6下编译,而且我有驱动编译的模版,所以很方便,如果是DDK带的话,一般就直接build就好了  :)
    有点笨  :)
      

  11.   

    呵呵,楼主也可以看看前面这个帖子http://community.csdn.net/Expert/topic/2921/2921208.xml?temp=.8480036不过估计你已经差不多快要成功了呵呵 再引用一下 jzyhummel(刀锋[篱影]) 的话^_^“makefile和source可以从别处拷贝”
      

  12.   

    真是非常感谢大家的帮助,现在编译总算成功了,非常感谢。不过还有些问题想请教,编译的时候出现了 "too manay actual parameters from macro dprintf"的提示,这个应该没有太大的问题吧,还有这些dprintf在我手上的程序中是用来进行出错输出的,如果真的在那出错了,它会在什么时候往哪儿输出这些错误信息?这个我太弱了,可能大家都在笑了,呵呵。还有是什么促使编译后产生的文件扩展名是.sys呢?
      

  13.   

    还要再加一问,在驱动开发中可不可以用到MFC中的类型变量,如CString等,真是弱弱的问了
      

  14.   

    驱动开发连大部分C库都不能用,你还用CSTRING呢,想得倒美。
      

  15.   

    而且了,MFC是应用层的,driver是内核层的,ring0和ring3怎么可能通用
      

  16.   

    有很多标准C库内部调用了一些WINAPI,但在驱动里面根本无法调用,所以不能用。
      

  17.   

    ansi C也不行。只有少数的函数能使用。