精华内容
下载资源
问答
  • WDK驱动开发微软官方帮助文档,帮您找到相关的驱动开发API函数
  • 2011-11-18 11:44:00| 分类: windows驱动开发|字号 订阅 本文参照原文: http://www.cppblog.com/guojingjia2006/archive/2011/03/19/142211.html   1. 安装VS2010,WDK7.60(GRMWDK_EN_7600_1)  WDK...
      
    2011-11-18 11:44:00|  分类: windows驱动开发|字号 订阅
    本文参照原文:
    http://www.cppblog.com/guojingjia2006/archive/2011/03/19/142211.html
     
    1.  安装VS2010,WDK7.60(GRMWDK_EN_7600_1)
          WDK下拉地址:http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=11800
    2.  新建VC 控制台项目(选择为空项目)
     
    3.  新建项目配置“driver” ,点击下拉按钮-点击(配置管理器)
        右键点击项目 --  属性  -- 配置管理器
     
     
    输入名称(driver)点击确定就可以了,其他的不要动哦!
    完成后的效果:
     
     
    点击确定按钮之后呈现出来的画面
     
     
     
    鼠标右击新建的driver属性,会弹出以下窗口!
      
     
    4.  设置VC++路径   [注意:这些路径要放在原有路径的后面,否则会报错]
    <我把wdk安装在D盘下> 
    a.  配置可执行文件目录:   ;D:\WinDDK\7600.16385.1\bin\x86;
    b.  配置包含目录:    ;C:\WinDDK\7600.16385.1\inc\ddk ;D:\WinDDK\7600.16385.1\inc\;D:\WinDDK\7600.16385.1\inc\api; 
    c.  配置库目录:        ;D:\WinDDK\7600.16385.1\lib\win7\i386;
     (win7的填win7..XP的填wxp)
    新建C/C++文件不然无C/C++设置选项
    <刚开始我们创建了一个空的项目所以项目里没有c++文件,现在要做的就是在空的项目-源文件-添加一个新建项c++文件>
    常规  
    目标文件扩展名:.sys          //必选
      
    6.  设置C/C++选项 
    常规选项卡 
    1 调试信息格式(C7 兼容(/Z7)        //可选 
    2 警告等级     (2 级(/W2)          //可选 
    3 将警告视为错误  (是(/wx)         //可选 
        
    优化选项卡 
    优化(禁用/Od)                          //可选 
      
    预处理器 
    预处理器定义:WIN32=100;_X86_=1;WINVER=0x501;DBG=1         //必选 
      
    代码生成 
           启用最小重新生成:否                                        //可选   
           基本运行时检查:默认值                                     //可选 
           运行时库:多线程调试(/MTd)  或  多线程(/MT)                 //建议选<本人选择的是多线程调试(/MTd)> 
           缓冲区安全检查:否                                            //可选 
      (可避免出现  LINK : error LNK2001:  无法解析外部符号  __security_cookie)
      
    高级 
         调用约定  __stdcall(/Gz)                                       //必选  
     
    7.  链接器设置 
    常规 
         启用增量链接:否(/INCREMENTAL:NO)                           //建议选上 
         忽略导入库:是                                                  // 可选  
         ( 设置为此值时,必须在附加库目录中加: E:\WinDDK\7600.16385.1\lib\win7\i386  这样项目就不会依赖 IDE 环境的设置)
         如果否  (  设置为此值时,将依赖  IDE  的环境的相关设置  ) 
      
    输入 
    附加依赖项  后面( %(AdditionalDependencies) 前面 )加入: 
                   ;ntoskrnl.lib;Hal.lib;wdm.lib;wdmsec.lib;wmilib.lib;ndis.lib;MSVCRT.LIB;LIBCMT.LIB;        //必选  
    【这一步在第一次操作时成功,再次操作时,报连接不上ntoskrnl.lib,去掉了,测试代码还是能生成的。】
                //NT式驱动  ntoskrnl.lib    WDM式驱动    wdm.lib 
    ( HalXXX函数在Hal.lib,WmiXXX函数在  wmilib.lib  ,NdisXXX函数在  ndis.lib ) 
    (  必要时需要增加微软的标准库  MSVCRT.LIB MSVCRTD.LIB(调试库) LIBCMT.LIBIBCMTD.LIB(调试库) ) 
      (  如果源码中有  source  文件,那么该文件的  TARGETLIBS  字段会列出该项目需要的库  )
    忽略所有默认库:    是 (/NODEFAULTLIB)                 //必选 
    清单文件:
       生成清单                               否    //原文未提到,不选可能报错 
      启用用户账户控制(UAC)   否  //必选  
     
    不然会出现  >LINK : fatal error LNK1295: “/MANIFESTUAC”与“/DRIVER”规范不兼容;链接时不使用“/MANIFESTUAC”   
      
        调试: 
    生成调试信息  是(/DEBUG)                                              //可选 
    生成映像文件:是(/MAP)                                               //可选 
    映像文件名:$(TargetDir)$(TargetName).map                     //可选 
      
        系统(System) 
         子系统:  控制台(/SUBSYSTEM:CONSOLE)                                //必选 
         堆栈保留大小:4194304                                              //可选 
         堆栈提交大小:  4096                                                //可选 
         驱动程序:    驱动程序(/DRIVER)                                        //必选  
     
          高级: 
        入口点:DriverEntry                                                    //必选 
        随机基址:清空           //把框里的数据删掉。(yes也不是no也不是就是要一个干干净净的文本框)   //必选 
        不然会出现  e:\xxx.sys : fatal error LNK1295: 
    “/DYNAMICBASE”与“/DRIVER”规范不兼容;链接时不使用“/DYNAMICBASE”

        数据执行保护(DEP):  清空 //把框里的数据删掉。(yes也不是no也不是就是要一个干干净净的文本框) //必选   
         不然会出现  e:\xxx.sys : fatal error LNK1295:        
    “/NXCOMPAT:NO”与“/DRIVER”规范不兼容;链接时不使用“/NXCOMPAT:NO”  
     
    设置校验和:是(/RELEASE)                              //可选
    基址:0x10000                                           //建议选上  
        
    命令行:/SECTION:INIT,D /IGNORE:4078        (建议不要写进去,会报错!)       
     
               
    最后给出一个超级简单的代码来测试一下我们配置的是否成功??
    #include "ntddk.h"
    NTSTATUS 
    DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRINGRegistryPath) 

    return STATUS_UNSUCCESSFUL; 
    }
     
    如果没有报错那么恭喜你配置成功了!
    在项目文件的上一级目录下,driver 文件夹下,生成 .sys 文件
    展开全文
  • WINDOWS WDK的微软官方开发文档,包括各种实例及介绍,涵盖了WDK的各种API,包括user driver及KERNEL DRIVER的的说明及例子。
  • WDK驱动开发点滴

    2020-04-14 09:16:04
    1对一些概念的理解: ...UMDF驱动运行在用户空间,调试相对容易,程序崩溃时也不至于对系统影响太大。所以只要能实现,应该首选使用UMDF框架。 虽说UMDF框架运行在用户空间,但也不是说所有WIN32应用程...

    1对一些概念的理解:

    KMDF与UMDF。两者的框架,及使用VS生成的初始代码基本相同,只有所包含的头文件不同,链接的系统库不同,最终生成的文件分别为.sys和.dll。因为框架完全相同,相互移植应该比较容易。

    UMDF驱动运行在用户空间,调试相对容易,程序崩溃时也不至于对系统影响太大。所以只要能实现,应该首选使用UMDF框架。

    虽说UMDF框架运行在用户空间,但也不是说所有WIN32应用程序可以使用的API都能正常工作。本人遇到过调用WMI组件在UMDF驱动中编译失败的问题,比较有趣的是使用C++调用时编译失败,但使用C文件调用时就正常。

     

    上手

    无论什么时候,微软提供的例子都是最好的学习材料,而且某些例子本身就已经能够工作的非常出色。本人曾经使用其中提供的键盘过滤驱动,只修改了安装文件中的设备路径,就可以正常安装,稳定工作。所以当要开发一个驱动时,最快捷的方法是找到最接近其功能的例子,拿它来修改。以下所记录的内容都基于一个例子,或者使用WDK的模板创建的驱动框架。

     

    INF文件及安装

    INF文件中最重要的是硬件编号,即[Standard.NT$ARCH$]所指定的内容。这里设定的硬件编号与实际安装时使用的硬件编号一定要相同。否则安装会失败。

    如果是设备管理器能直接看到的设备,如果一个ACPI设备,在设备管理器中安装就可以。如果我们开发的设备驱动没有对应的硬件设备结点,就需要使用devcon来安装,该程序会创建硬件设备结点,并安装驱动。devcon可以在WDK的安装目录中找到。使用方法:

    devcon.exe inf文件名称   硬件设备结点(即inf文件中设置的结点)

    例如,如果设备驱动的INF文件中有如下片段:

    [Standard.NT$ARCH$]

    %mydriver.DeviceDesc%=mydriver_Device, Root\MyDriver

    则devcon的用法为:devcon.exe install  xxx.inf   Root\MyDriver

     

    在测试阶段,因为我们的驱动没有获得微软提供的签名,需要在系统中开启测试签名才能正常安装,某些驱动甚至需要将驱动文件中的测试签名证书安装到系统信任的证书目录中。开启测试签名的方法:bcdedit /set testsigining on

     

    WHCK测试

    如果只是单纯的学习WDK驱动开发,可以不做WHCK测试,但如果是做产品,WHCK是必须要做的,需要注意的几点:

    1)server必须是 server2008 R2, server2012, server2016等的英文版。其它更新的server版本是否可用不清楚,但英文版本是必须的。

    2)安装server时注意不要安装标准版,它没有桌面,只有命令行,使用不便,至于基于它能否运行WHCK server,还真没有试过。

    3)如果一时找不到英文版本也没有关系,安装完,将界面改成英文资源。

    并修改注册表以将系统默认语言改为英文。

    将HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Language

    下面InstallLanguage的值改为0409。如果还有问题,可以把同级的跟Language相关的注册表值都改为:0409

    4)最好使用真实机器安装server,来运行WHCK服务器端。因为WHCK运行时间很长,可能需要几天。放在开发机上一不小心关掉,就麻烦了。我试过在vmware中运行server, WHCK客户端连不上。在服务端看不到测试机。

    5)WHCK测试环境bug很多,需要问题不要心急,要多试。不行就重启测试机,服务一般不需要重启,实在没办法重启它也是一种方法。

    6)可以在开发机上安装whck的studio,用来连接到服务器,执行测试用例,而不需要登录到服务器,比较方便。

     

    指定驱动的类型

    在调用WdfDeviceCreate之前调用:WdfDeviceInitSetDeviceType来设置驱动自身的类型,如:

    WdfDeviceInitSetDeviceType(DeviceInit, FILE_DEVICE_ACPI); 将其设置为一个基于ACPI的驱动。

    如果我们不依赖于其它总线,就可以不调用这个函数。如果设置的类型不对就不能正常安装。如果是过滤驱动,在调用它之前还需要调用WdfFdoInitSetFilter来申明自己是过滤驱动。

    驱动中使用事件

    UMDF驱动中可以直接使用CreateEvent等用户空间的API,这里不再赘述。KMDF中需要使用KeInitializeEvent来初始化一个Event,  KeWaitForSingleObject来等待。KePulseEvent来释放等待中的事件。

     

    驱动中使用延时

    KMDF驱动中使用KeDelayExecutionThread来做延时,需要注意的是:其时间单位是100纳秒。如果延时1毫秒需要使用的值为:10000。而且有一个变态的设计:我们传入的值如果为负数,即表示需要等待的时间,如果为正数,则表示需要等待到的时间,即如果使用正数,就需要读出当前时间,加上要等待的时间以后再传给KeDelayExecutionThread。相信还是使用负数比较方便。

    驱动相互调用

    两个KMDF驱动调用比较方便,在A驱动中WdfDeviceCreate之前调用WdfDeviceInitAssignName函数来为自己申明一个名字。如:

        DECLARE_CONST_UNICODE_STRING(devName, L"\\Device\\MyTestDevice");

        status = WdfDeviceInitAssignName(DeviceInit, &devName);

    这样在B驱动中就可以使用IoGetDeviceObjectPointer来获取驱动A的相关信息,进而调用IoCallDriver来发送Iocontrol进行数据交互。

    而UMDF驱动访问KMDF驱动就比较麻烦了。请参考:

     

     

    更多干货 请点击这里

    展开全文
  • WDK驱动开发注意事项

    2020-10-03 11:15:15
    参考 https://blog.csdn.net/liny000/article/details/81260385 需要设置对应的平台版本才可以,不然会蓝屏!!!! SDK要对应相应的WDK

    在这里插入图片描述

    参考 https://blog.csdn.net/liny000/article/details/81260385
    win10 + vs2017 + wdk10 + xp sp3

    加载驱动软件

    在这里插入图片描述

    编译注意

    • 警告选择R3
    • 不把警告当错误

    在这里插入图片描述

    需要设置对应的平台版本才可以,不然会蓝屏!!!!
    SDK要对应相应的WDK
    在这里插入图片描述

    虚拟机配置(xp)

    1. 内核模式直接用串口连接
      在这里插入图片描述
    2. xp 的启动设置
      添加一行这个 注意com口的号码要和虚拟机的硬件号码对应
    multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debugport=com2 /baudrate=115200
    

    在这里插入图片描述

    1. 虚拟机需要重启,或者恢复快照才能被VS调试检测到,推荐在设置完虚拟机之后创建个快照

    在这里插入图片描述

    VS配置

    在这里插入图片描述

    关于符号

    1. https://docs.microsoft.com/en-us/visualstudio/debugger/specify-symbol-dot-pdb-and-source-files-in-the-visual-studio-debugger?view=vs-2019
      直接在VS里设置就行

    2. 虚拟机是xp系统的话,需要在物理机安装xp 的符号离线包,然后设置系统环境变量(其他系统应该类似)

    3. https://www.52pojie.cn/thread-956567-1-1.html这里有大佬给出了xp离线包的下载地址

    key value
    _NT_SYMBOL_PATH C:\Symbols

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • wdk驱动开发的特点

    千次阅读 2016-03-19 14:55:54
    wdk开发的基本知识入门技巧,和windows应用层开发的区别

    本文介绍WDK开发的一些特点。与应用层开发的差异性,不能混为一谈。

    一、函数的调用点

    在内核编程中,一个函数往往有多个调用点,而应用层中一个函数一般只在main里面有调用点。内核函数调用点一般在:

    1、入口函数DriverEnty和DriverUnload中

    2、各种分发函数(普通分发和快速IO分发)

    3、请求处理完成后会被系统调用的回调函数。

    (回调函数参考http://www.zhihu.com/question/19801131  或者 http://blog.csdn.net/callmeback/article/details/4242260)

    一个形象的例子:

    你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。
    4、其他回调函数(NDIS驱动程序的特征函数)

    二、函数的多线程安全性
    1、运行在多线程的函数必须是安全的,单线程的环境运行,不需要多线程安全。
    2、函数的调用源运行在单线程,函数也会运行在单线程中。
    3、函数调用源如果在多线程下,或者并发调用下,如果调用路径没有强制多线程序列成单线程,则函数可能在多线程中。
    4、如果在调用路径上,有序列化成单线程,则函数可能运行在单线程下。

    三、判断函数是否多线程安全
    1、完全不用全局变量,静态变量或者其他全局性的资源
    2、使用互斥体、自旋锁等同步手段将多线程序列化成单线程

    四、PE格式
    内核模块编译出来的PE格式的sys文件是有不同的节.
    INIT:初始化完成后就从内存中撤掉,不占用内存空间
    PAGE:分页内存,当内存不足时候,这段代码可以以文件形式交换到硬盘上,以节约内存空间
    PAGELK:默认存放在不可分页的内存空间中,一直存在内存空间

    五、代码中断级
    Disptch高于 Passive级别
    具有复杂功能的内核API都在Passive运行,如果当前代码是运行在Dispatch级别,但是必须要调用一个Passive级别的API,是不可以随意降低当先线程的中断级的。
    Windows的代码都会按照一定规范运行在应该的中断级上,随意降低会影响系统的稳定性。
    针对这种情况,一般用一个专门的线程去处理Passive级别的代码。

    六、代码调试
    在入口函数写入如下代码,这样可以让代码在调试状态下强行中断下来。以便后面F9的断点设置,否则F9断点在WDBG下是很不方便的。
    #if DBG
         __asm
    {
    int 3;
    }
    #endif

    展开全文
  • VS2008+WDK+DDKWizard驱动开发环境配置
  • vs2005与wdk 驱动开发环境配置

    千次阅读 2009-07-29 14:54:00
      vs2005与wdk 驱动开发环境配置 Posted on 2009/6/30 22:58 Posted by 枫之羽 in 内核安全编程, 本站原创 阅读
  • vs2008 wdk 驱动开发环境配置 之wdm

    千次阅读 2009-09-16 11:33:00
    vs2008 wdk 驱动开发环境配置 之wdm 收藏 1、建立一个C++空项目2、打开配置管理器,新建配置一个配置如Check,把Check设为活动的。注意不要使用Debug或Realse,否则后面会出现奇怪错误。3.打开项目配置,点击c/C++页...
  • 对于进入windows驱动开发的朋友,这个资源会有一定帮助。 下面是配合过程博文:http://blog.csdn.net/luopeiyuan1990/article/details/9745841
  • 安装了好多遍驱动开发环境都不成功,最终成功了一次。 win10 64位 vs2015 windows sdk 10.0.15版本 wdk 10.0.15版本 测试环境win7 64位 根据别人的教程尝试过多次vs2017不过都失败了,不知道为什么。 ...
  • WDK驱动开发DbgBreakPoint使用注意

    千次阅读 2012-11-19 23:26:38
    写了个驱动,好不容易在DEBUG模式下用WINDBG调试没问题了,然后发布成RELEASE模式。 安装运行后,怎么都不能得到正确结果,郁闷。vmware不在DEBUG模式下,也不能用WINDBG调试。只好开DEBUGVIEW跟踪DbgPrint的输出。...
  • WDK驱动开发与VS2008开发环境整合

    千次阅读 2010-08-26 08:16:00
    一、下载与安装WDK《寒》说,以前说的DDK、IFS已成为历史,现在已经改为使用WDK了,具体下载地址可以这里注册并下载:http://connect.microsoft.com,目前的版本是6001.18002,大小只有577MB。下载安装后,...
  • WDK驱动开发中WCSSTR导致的蓝屏

    千次阅读 2012-11-19 21:19:57
    在VMWARE调试驱动,有时会蓝屏。使用WINDBG查看崩溃日志CASH文件 发现错误是在 if (wcsstr(nameInfo->Name.Buffer, L"XXX.EXE") > 0) { 这行,原来wcsstr是根据最后一个字符是否为NULL判断字符串是否完成的,而...
  • WDK 驱动开发环境的搭建

    千次阅读 2008-12-01 16:57:00
    今天在看雪论坛(至今为止在此论坛上我看到了许多令我敬佩的高手)上http://bbs.pediy.com/showthread.php?t=69395&highlight=%E9%A9%B1%E5%8A%A8+%E5%8A%A8%E5%BC%80+%E5%BC%80%E5%8F%91 看到一篇文章搭建驱动开发...
  • 有个问题,搞了一天没解决在vs2017添加设备总是卡在这里,虚拟机串行端口已经配置了,这个是vs中的配置, vs2017+win10 ,刚开始学习,希望帮忙解决下 !... !... ...图片上传好像出了点问题,神奇的图片传进来了,不修改了...
  • 驱动中不能连接umdf模式驱动建立的设备, 也就是用IoGetDeviceInterfaces获取到umdf设备的符号链接,但是ZwCreateFile失败, umdf1.9之后的版本修改inf中wdf段设置 UmdfKernelModeClientPolicy = <...
  • 手动使用WDK 的CMD 编译,发现编译错误, 把项目路径中的所有空格去掉。 再次使用VS编译仍然无法编译通过,所以狠下决心直接分析编译脚本。 问题1: echo "FINDSTR is a prerequisite but wasn't ...
  • VS2010 WDK7.60 配置驱动开发环境

    热门讨论 2012-04-18 01:23:45
    WIN7 VS2010 WDK7.60 配置驱动开发环境(DDK驱动开发 WDK驱动开发) VS2010是中文版的
  • WIN7 VS2010 WDK7.60 配置驱动开发环境(DDK驱动开发 WDK驱动开发)  1. 安装VS2010,WDK7.60(GRMWDK_EN_7600_1) 2. 新建VC++ General(选择为Empty Project) 3 4 ……
  • 新手学习windows驱动开发的重要参考文档,通过这个文档可以了解驱动的架构已经开发驱动必需要掌握的一些技能
  • wdk Windows驱动开发

    2019-03-24 02:10:00
    https://www.cnblogs.com/liaoguifa/p/9049859.html 安装wdk8.1 转载于:https://www.cnblogs.com/hshy/p/10586707.html
  • VC6 + 最新WDK7600 驱动开发的安装配置 2011-06-02 19:51 开始之前要一定要明确一件事情,单独使用WDK+记事本就可以开发驱动,和VC的编译器耗无关系,而使用VC的唯一目的,就是把它当作超级记事本,这样可以省...
  • WDK设备驱动开发

    2020-07-13 11:46:15
    "problemMatcher": [], "group": { "kind": "build", "isDefault": true } } ] "D:\WinDDK\7600.16385.1\"是wdk的安装路径 check相当于debug、free相当于release inf配置 inf文件中,[string]设置前面%var%变量的...
  • vs2019双机调试wdk驱动程序远程配置虚拟机我们发现VS2019菜单栏那里没有Driver选项,怎么办呢?在虚拟机设置中把打印机移除后再添加串行端口该端是服务器,另一端是应用程序,这是什么意思呢?NT式的驱动就是以服务...
  • WDK10驱动开发包安装教程

    万次阅读 2017-09-26 09:14:58
    【1】安装WDK10驱动开发包步骤: 1、下载VS2015,安装Window 10 SDK. 2、下载WDK10离线包(在线包下载时容易出现问题) 3、WDK10安装过程中,一般为默认安装路径来安装,因为正好VS2015的头文件库也在这个路径. 4、WD
  • vs2013 驱动开发模块 下载后放入C盘VS2013模块文件夹内即可 可执行文件目录改成自己WDK所在盘符。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 821
精华内容 328
关键字:

wdk驱动开发