windows驱动开发 driverstudio 教程
vc++60中开发驱动程序的配置方法

VC++6.0中开发驱动程序的配置方法注意:如果你的电脑中没有安装VC++6.0等软件的话,请先安装 VC++ 6.0 ,再安装DDK,最后安装DriverStudio。
安装顺序一定不要搞错哟。
一、首先创建一个你的驱动工程文件目录。
这个目录下用来放置你的各个驱动工程文件夹。
(比如我在D盘创建了一个D:\PCI9052DVP\PCI9052DRV文件夹作为我的驱动工程文件目录)。
二、然后添加1个用户环境变量,DDKROOT,他的值应该是你所安装DDK的根目录。
(比如在安装DDK时安装到了E:\WINDDK\3790.1830,那么 DDKROOT的值应该为E:\WINDDK\3790.1830)。
添加用户环境变量后电脑需要重启。
如果没有这个用户环境变量,将不会编译任何一个文件。
三、编写一个MakeDrvr.bat批处理文件,如下(可直接copy,不用修改)。
MakeDrvr.bat应该放在工程目录下面D:\PCI9052DVP\PCI9052DRV。
@echo offif "%1"=="" goto usageif "%3"=="" goto usageif not exist %1\bin\setenv.bat goto usagecall %1\bin\setenv %1 %4%2cd %3build -b -w %5 %6 %7 %8 %9goto exit:usageecho usage MakeDrvr DDK_dir Driver_Drive Driver_Dir free/checked [build_options]echo eg MakeDrvr %%DDKROOT%% F: %%WDMWorkshop%% free -cef:exit四、建立一个Makefile工程下面我将要建立一个PCI9052DRV的工程。
WDM驱动程序

建立驱动开发环境建立驱动开发环境,所需的软件为DriverStudio3.2 + DDK2003 + VC。
DDK建议使用最新的DDK2003,因为可以减少很多麻烦。
使用DDK2600的话,很多人反映会碰到一个编译出错的问题。
这是我使用DDK2600时碰到的同样的问题,然后在EDNchina网站上发的贴:--------------我在用DriverStudio开发驱动时,碰到了这样的问题:--------------------Configuration: KFileWrite - Win32Free--------------------d:\DESIGN~1\DRIVER~1\DRIVER~4\include\kcsq.h(35): Could not find the file csq.h.d:\DESIGN~1\DRIVER~1\DRIVER~4\include\kcsq.h(35): Could not find the file csq.h.Linking with DDK linker...LINK : fatal error LNK1181: cannot open input file 'ntstrsafe.lib' Error executing link.exe.KFileWrite.sys - 1 error(s), 0 warning(s)关键是这个ntstrsafe.lib.我在网上一搜,碰到这种问题的人还不少呢,虽然解决方法是很多,但都差不了几个字,要么从DDK2003那拷一个,或者是在project-->setting-->link下去掉对ntstrsafe.lib的链接,也不知他们自己到底有没有试,我在project-->setting-->link下压根就没看到ntstrsafe.lib几个字...很郁闷啊--------------网上所说的解决方法是对的,但没有说清楚,使人无法一时明白。
Windows 驱动程序开发指导说明书

课程内容驱动基本概念介绍驱动核心代码分析WDM和WDF介绍Windows 10通用驱动平台驱动程序是一个软件模块,可以使操作系统和硬件设备进行交互驱动程序是操作系统的一个扩展驱动程序一般是由硬件的设计者或厂商进行编写Microsoft已经为符合公共设计规范的硬件设备提供了内置的驱动程序可执行文件,扩展名是.exe入口函数是Main()Main()函数完成大部分工作应用程序完成工作后返回,并释放内存空间在用户态运行可执行文件,扩展名是.sys入口函数是DriverEntry()DriverEntry()不会做很多工作,只是初始化驱动驱动其他部分会注册很多回调函数,会被系统的不同模块调用驱动不会返回,会一直存在直至被显示的释放在内核态或用户态运行Driver StacksPDO位于驱动栈的最底层,和总线驱动相关联当总线驱动被加载时,它会枚举所有挂载在总线上面的设备并请求设备所需要的资源每个设备都有自己对应的PDOPnP管理器会确定每个设备的驱动并在设备的PDO 之上构建适当的设备栈设备栈的核心部分,FDO和设备功能驱动相关联设备功能驱动完成Windows和设备交互的核心功能对上向应用程序和服务提供上层接口对下为设备或其他驱动提供数据交换的接口一个设备栈可以包含多个FiDO,可以在FDO之上或之下每个FiDO和一个过滤驱动相关联,FiDO是可选的通常的目的是修改一些在设备栈中传输的I/O请求,例如可以加密和解密读写请求当一个新设备被插入到系统后,系统总线驱动会向PnP管理器报告这个新设备PnP管理器通过总线驱动查询这个设备的更多信息,比如设备ID和设备所需要的资源PnP管理器利用这个信息去查找是否有有对应的驱动在本地或WU(Windows Update)上面一旦查找到设备对应的驱动,Windows便会安装并加载这个驱动加载驱动到地址空间解析驱动中引入的函数-调用其他模块调用驱动的入口函数(DriverEntry()),因此驱动可以注册回调函数调用AddDevice(),驱动此时可以创建一个“设备对象”,并将这个对象加入到设备栈中所有的事物在驱动框架中都是用对象呈现的(驱动,设备,请求等等)对象拥有属性,方法和事件WDF 对象方法属性事件操作对象的函数被WDF 框架调用用于通知某些事件设置或获取单个属性值的方法Driver (WDFDRIVER)Device (WDFDEVICE)Device (WDFDEVICE)Queue (WDFQUEUE)Queue (WDFQUEUE)……ObjectOperation方法:Status = Wdf Device Create ();属性:Cannot failWdfInterrupt Get Device();WdfInterrupt Set Policy();Can fail:Status = WdfRegistry Assign Value();Status = WdfRegistry Query Value();Status = WdfRequest Retrieve InputBuffer();回调事件:PFN_WDF_INTERRUPT_ENABLE EvtInterruptEnable初始化宏:WDF_XXX_CONFIG_INITWDF_XXX_EVENT_CALLBACKS_INIT当驱动被加载时,DriverEntry是第一个被操作系统调用的函数WdfDriverCreate( RawDriverObject, […] , attributes, &driver )NTSTATUS DriverEntry(_In_PDRIVER_OBJECT DriverObject ,_In_PUNICODE_STRING RegistryPath ) {[…]// Create WDF Driver ObjectWDF_OBJECT_ATTRIBUTES_INIT(&attributes);attributes.EvtDriverUnload = OnDriverUnload;WDF_DRIVER_CONFIG_INIT(&config, OnDeviceAdd);status = WdfDriverCreate(DriverObject ,RegistryPath ,&attributes,&config,&driver );}WDF EventWDF MethodWDF ObjectDeclare vars这是一个过滤驱动程序吗?驱动程序是电源管理策略的所有者吗?为设备对象创建I/O队列创建辅助对象,例如计时器,工作者对象,锁等NTSTATUS OnDeviceAdd( WDFDRIVER Driver,PWDFDEVICE_INIT DeviceInit) {WDFDEVICE device;IWDFIoQueue* pDefaultQueue= NULL;DeviceInit->SetPowerPolicyOwnership(TRUE );status= WdfDeviceCreate(&DeviceInit,&deviceAttributes, &device);context = GetContext(device);context->WdfDevice= device;status = pIWDFDevice->CreateIoQueue(NULL, TRUE, WdfIoQueueDispatchParallel,TRUE, FALSE, &pDefaultQueue);return status;}Static Configuration Device CreateSetting ContextQueue Create进入电源状态管理(D0Entry)使能中断(InterruptEnable)…获取硬件资源,进行一些静态配置,(PrepareHardware)进入电源状态管理(D0Entry)使能中断(InterruptEnable)…获取硬件资源,进行一些静态配置,(PrepareHardware)NTSTATUS OnPrepareHardware(WDFDEVICE Device ,WDFCMRESLIST ResourcesRaw ,WDFCMRESLIST ResourcesTranslated ) {int ResourceCount = WdfCmResourceListGetCount(ResourcesTranslated );for (i=0; i < ResourceCount; i++) {descriptor =WdfCmResourceListGetDescriptor(ResourcesTranslated , i);switch (descriptor->Type) {case CmResourceTypePort : […]case CmResourceTypeMemory : […]case CmResourceTypeInterrupt : […]default : break ;}}return STATUS_SUCCESS ;}进入电源状态管理(D0Entry)使能中断(InterruptEnable)…获取硬件资源,进行一些静态配置,(PrepareHardware)NTSTATUS OnD0Entry(IN WDFDEVICE Device ,IN WDF_POWER_DEVICE_STATE RecentPowerState ){PADXL345AccDevice pAccDevice = nullptr pAccDevice = GetContext(Device);WdfWaitLockAcquire(pAccDevice->m_WaitLock);I2CSensorWriteRegister(pAccDevice->m_I2CIoTarget, MY_REGISTER,MY_VALUE, sizeof (MY_VALUE) );pAccDevice->m_PoweredOn = true ;WdfWaitLockRelease(pAccDevice->m_WaitLock);return STATUS_SUCCESS ;}进入电源状态管理(D0Entry)使能中断(InterruptEnable)…获取硬件资源,进行一些静态配置,(PrepareHardware)NTSTATUS OnInterruptEnable(IN WDFINTERRUPT Interrupt,IN WDFDEVICE Device){PDEVICE_EXTENSION devExt;ULONG regUlong;PULONG intCsr;devContext = GetDeviceContext(WdfInterruptGetDevice(Interrupt) );intRegId = &devContext->IntRegisterId regVal = READ_REGISTER_ULONG( intRegId );regVal = ENABLE_INTERRUPT_BYTE( regVal );WRITE_REGISTER_ULONG( intRegId, regVal );return STATUS_SUCCESS;}进入电源状态管理(D0Entry)使能中断(InterruptEnable)…获取硬件资源,进行一些静态配置,(PrepareHardware)EvtIoResume EvtDMAEnablerFillEvtDeviceSelfManagedIoInitEvtDeviceDisarmWakeFromSxEventChildListScanForChildren EvtDeviceRemoveAddedResourcesStart power-managed queuesEvtIoResume Disarm wake signal, if it was armed. (called onlyduring power up; not called during resource rebalance)EvtDeviceDisarmWakeFromSx EvtDeviceDisarmWakeFromS0Request information about child devicesEvtChildListScanForChildren Enable DMA, if driver supports it EvtDmaEnablerSelfManagedIoStartEvtDmaEnablerEnableEvtDmaEnablerFillConnect interruptsEvtDeviceD0EntryPostInterruptsEnabledEvtInterruptEnable Notify Driver of state change EvtDeviceD0EntryDevice OperationalRestart from here if device is in low power statePrepare hardware for power EvtDevicePrepareHardwareChange resources requirements EvtDeviceRemoveAddedResourcesEvtDeviceFilterAddResourceRequirementsEvtDeviceFilterRemoveResourcRequirementsRestart from here if rebalancing resourcesCreate Device object EvtDriverDeviceAddDevice arrivedEnable self-managed I/O, if driver supports it.EvtDeviceSelfManagedIoInit (implicit power up),EvtDeviceSelfManagedIoRestart (explicit power up)Stop power-managed queuesEvtIoStop Arm wake signal, if it was not armed. (calledonly during power up; not called duringresource rebalance)EvtDeviceArmWakeFromSx EvtDeviceArmWakeFromS0Disable DMA, if driver supports it EvtDmaEnablerSelfManagedIoStopEvtDmaEnablerDisableEvtDmaEnablerFlushDisconnect interrupts EvtDeviceD0EntryPostInterruptsDisabledEvtInterruptDisableNotify Driver of state changeEvtDeviceD0Exit Device OperationalStop here if transitioning to low power stateRelease hardware EvtDeviceReleaseHardwarePurge power-managed queuesEvtIoStop Stop here if rebalancing resourcesFlush I/O if driver supports self-managedI/OEvtDeviceSelfManagedIoFlush Device removedSuspend self-managed I/O, if driver supports it.EvtDeviceSelfManagedIoSuspend Cleanup I/O buffers if driver supports self-managed i/o EvtDeviceSelfManagedIoCleanupDelete device object s context area.EvtDeviceContextCleanupEvtDeviceContextDestroyWDM和操作系统深度耦合,WDM驱动程序直接调用系统服务例程,直接操作系统数据结构WDM驱动程序全部为内核态程序,操作系统对驱动输入只做有限的检查WDF框架处理与操作系统的交互,驱动本身专注于和设备交互WDF基于对象模型和事件驱动WDF支持内核态程序和用户态程序将操作系统底层的复杂逻辑抽象化使驱动代码有可能<20行对不同的硬件设备使用相同的编程模型例如GPIO,UART,I2C,NFC,传感器驱动框架内置的日志系统为数据分析定制的工具支持上千种不同的硬件设备最初UMDF V1基于C++ COMUMDF V2使用和内核态驱动开发相同的模型和语法支持USB周边设备,传感器,NFC,智能卡,HID(包括触控)等等驱动崩溃只会影响宿主进程,不会影响整个操作系统系统重启策略可以自动恢复崩溃的UMDF驱动Windows 10提供了一系列API和DDI,对于所有的Windows平台都是通用的,被称为Universal Windows Platform(UWP) Windows通用驱动是指一个内核态或用户态的驱动并能运行在所有基于UWP的系统上面Windows通用驱动只能调用属于UWP部分的DDI,这部分DDI会在MSDN文档中标记为Universal确定你的驱动是否支持UWP,把你的驱动标记为通用驱动然后重新编译在Visual Studio中打开驱动项目工程在配置选项中把操作系统选择为Windows 10在工程属性中把目标平台改为“通用”,其他选项还有“桌面”和“手机”重新编译驱动,这时可以会出现一些链接器错误尝试修复这些错误,对于出现错误的API,请参考文档是否有通用平台的API可以替代,如果没有,您可能需要重新设计你的驱动KMDF version Release method Included in this versionof Windows Drivers using it run on1.19Windows 10, version1607 WDK Windows 10, version1607Windows 10 version1607 and later,Windows Server 20161.17Windows 10, version1511 WDK Windows 10, version1511Windows 10 version1511 and later,Windows 10 Mobile,Windows 10 IoT Core,Windows Server 20161.15Windows 10 WDK Windows 10Windows 10 for desktop editions, Windows 10 Mobile, IoT Core, Windows Server 2016UMDF version Release method Included in this version ofWindows Drivers using it can run on2.19Windows 10, version 1607WDK Windows 10, version 1607Windows 10, version 1607 (all SKUs), Windows Server 20162.17Windows 10, version 1511WDK Windows 10, version 1511Windows 10 for desktop editions (Home, Pro, Enterprise, and Education), Windows 10 Mobile, Windows 10 IoT Core (IoT Core), Windows Server 20162.15Windows 10 WDK Windows 10Windows 10 for desktop editions, Windows 10 Mobile, IoT Core, Windows Server 2016驱动程序运行在哪个版本的操作系统上驱动程序支持的硬件类型驱动程序使用的驱动模型确定驱动程序是否使用了只有KMDF支持的功能,如果驱动程序没有使用KMDF的功能,并且驱动运行在Windows 8.1或以后的系统上,则可以迁移到UMDF 2https:///en-us/windows/hardware/drivers/wdf/wdf-porting-guide Which Drivers Can Be Ported and WhereDifferences Between WDM and WDFPreparing for PortingSteps in PortingSummary of KMDF and WDM Equivalents。
DriverStudio培训教程

DriverStudio培训教程DriverStudio是一款Windows驱动程序开发工具,由Borland公司开发。
针对初学者,DriverStudio官网提供了丰富的培训教程。
本文将重点介绍DriverStudio培训教程。
一、教程类型DriverStudio官网提供了多种类型的教程,包括视频教程、在线演示和文档教程。
其中,视频教程和在线演示以视频和动画的方式向用户展示DriverStudio各个功能的使用方法。
文档教程则以文字形式详细介绍了DriverStudio各个模块的使用方法。
二、教程内容1. DriverStudio安装DriverStudio的安装是开发驱动程序的第一步,教程中详细介绍了DriverStudio的安装方法和注意事项。
2. 驱动程序开发基础驱动程序开发需要掌握基础知识,如驱动程序的特点、驱动程序的组成部分、Windows系统驱动模型等。
DriverStudio官网提供了多篇基础教程,帮助用户熟悉驱动程序的开发基础知识。
3. 编写驱动程序DriverStudio提供了多种驱动程序模板,并且提供了编写驱动程序的教程。
教程中详细介绍了如何编写驱动程序、如何生成驱动程序、如何调试驱动程序等。
4. DriverWizard使用DriverWizard是DriverStudio的一个特色功能,通过DriverWizard,用户可以快速创建驱动并配置驱动的属性。
DriverStudio官网提供了详细的DriverWizard使用教程,帮助用户轻松使用DriverWizard。
5. Debugging Tools使用Debugging Tools是Windows操作系统的调试工具,也是开发驱动程序不可或缺的工具。
DriverStudio官网提供了Debugging Tools使用教程,帮助用户了解如何使用Debugging Tools调试驱动程序。
6. DevPartner使用DevPartner是一款用于检测和解决软件开发中常见问题的工具。
windows驱动开发 driverstudio 教程

前言鉴于国内开发人员迫切需要学习驱动开发技术,而国内有关驱动开发工具DriverStudio的资料很少,大家在开发过程中遇到很多问题却没处问,没法问.而这些问题却是常见的,甚至是很基础的问题。
有感于此,本站联合北京朗维计算机应用公司编写了本教程。
本教程的目的是让一个有一些核心态程序编写经验或对系统有所了解的人学习编写驱动程序。
当然,本教程不是DDK中有关驱动方面内容的替换,而只是一个开发环境的介绍和指导。
学习本教程,你应该能熟练地使用本套工具编写基本的驱动程序。
当然如果你想能顺利地编写各种各样的驱动的话,你应该有相关的硬件知道和系统核心知识并且要经过必要的训练才能胜任。
如果真心说一句话,DriverStudio并没有对驱动程序开发有什么实质的改变,它和DDk的关系不过是sdk和mfc的关系,但很多人选择了MFC,原因不言自明,方便二字何以说得完呀?你再也不用去关注繁琐的框架实现代码,也不用去考虑让人可怕的实现细节。
封装完整的C++函数库让你专注于你要实现的程序逻辑。
它包含一套完整调试和性能测试、增强工具,使你的代码更稳定。
说些题外话,作驱动开发很苦,不是一般的人能忍受的,那怕开发一个小小的驱动也要忍受无数次的宕机,有时甚至有些灾难性的事故等着你,所以要有充分的思想准备。
当然,在开发的过程中你会有一种彻底控制计算机的满足感,调试开发完毕后的成就感是其它开发工作所不能体会到的。
当然,就个人前途来说,作驱动开发能拿到别的开发所不能得到的薪水。
而且开发的生命期也会长一些,你不用不断的学习新的开发工具,只需要不断的加深对系统的理解就行了。
当然,还有一点是必需的,那就是英文要好,否则永远比国外同行慢半拍。
本人水平不高,所做的工作只要能提起大家学习驱动开发的兴趣,能带领大家入门便心满意足了。
在此感谢北京朗维公司(DriverStduio 国内总代理)的大力赞助,特别是感谢技术部的王江涛,市场部的李强两位先生的大力支持。
Driver Studio 驱动--xp环境下配置驱动程序的开发环境

1、分别安装VC、XPDDK、DriverStudio,建议安装顺序为:VC-〉DriverStudio-〉XPDDK。
2、用VC打开“…\DriverStudio\DriverWorks\source\VdwLibs.dsw”,在工程下分别进行如下操作:1)选择“组建->批组建…”,在打开对话框中选中所有的含Win32的子项,进行“全部重建”操作。
2)选择“DriverStudio->DDK Build Setting”,在“DDK Root Directory”选项中选入你的DDK目录,如我的是“D:\WINDDK\2600”。
3、打开电脑“系统属性->高级->环境变量”,添加Adminstrator的用户变量,变量名为BASEDIR,变量值为DDK目录,同上。
4、利用DriverWizard向导对所要开发的驱动类型进行正确配置,生成所需要的驱动工程框架。
5、在所创建的驱动工程中,无论选择“build”工具栏中“Win32 Checked”还是“Win32 Free”进行编译时,均需要删除“工程->设置->连接”下对ntstrsafe.lib的连接。
over在组建过程中出现的错误一般都是因为没有按照如上所说一一执行。
不过,笔者还是遇到一个特例:在一切都按部就班顺利执行的情况下,组建仍有错误。
显示“CVTRES:…out of memory , 40bytesrequired”。
经过艰难的baidu和实验,终于找到了病因:都是cvtres.exe 的版本惹的祸。
我的解决方法如下:将VC中的cvtres.exe复制,替换ddk中的cvtres.exe,各自路径为:D:\WINDDK\2600\bin\x86和D:\Program Files\VC++\Bin。
(路径因人而异。
事实上,似乎ddk的cvtres的版本比VC要高,不知用ddk的去替换VC的是否也可行,有兴趣可尝试。
Windows下设备驱动程序的开发方法

目录一、驱动开发环境的搭建 (1)1.1 关于DDK (1)1.2 关于驱动程序的编译 (1)1.3关于驱动程序的运行 (2)二、驱动程序的结构 (3)2.1 驱动程序的头文件 (3)2.2 驱动程序的入口点 (3)2.3 创建设备例程 (4)2.4 卸载驱动例程 (5)2.5 派遣例程 (6)三、编写驱动程序的基础知识 (6)3.1 内核模式下的字符串操作 (6)3.2 内核模式下各种开头函数的区别 (8)3.3 一个示例程序 (10)3.4 补充说明 (10)四、在驱动中使用链表 (10)4.1 内存的分配与释放 (10)4.2 使用LIST_ENTRY (12)4.3 使用自旋锁 (12)五、在驱动中读写文件 (15)5.1 使用OBJECT_ATTRIBUTES (15)5.2 创建、打开文件 (16)5.3 读写文件操作 (16)5.4 文件的其它相关操作 (18)六、在驱动中操作注册表 (18)6.1 创建、打开注册表 (19)6.2 读写注册表 (20)6.3 枚举注册表 (21)七、在驱动中获取系统时间 (21)7.1 获取启动毫秒数 (21)7.2 获取系统时间 (22)八、在驱动中创建内核线程 (23)8.1 创建内核线程 (23)8.2 关于线程同步 (24)九、初探IRP (25)9.1 IRP的概念 (25)9.2 IRP的处理 (26)9.3 IRP派遣例程示例 (27)十、驱动程序与应用层的通信 (29)10.1 使用WriteFile通信 (29)10.2 使用DeviceIoControl进行通信 (32)十二、驱动程序开发实例 (33)12.1 NT驱动程序 (33)12.2 WDM驱动程序 (35)十三、参考资料 (41)一、驱动开发环境的搭建1.1 关于DDK开发驱动程序必备的一个东西就是DDK(Device Development Kit,设备驱动开发包),它跟我们在ring3常听到的SDK差不多,只不过它们分别支持开发不同的程序而已。
关于Driver Studio 3.2 的安装详解)

关于Driver Studio 3.2 的安装详解经过对VC、WINDDK、Driver Studio这三个软件反复的安装,终于可以使Driver Studio能在VC环境下正常编译了。
俗话说久病成医,遇到的问题多了,自然就有了很多解决问题的方法,现在拿出来和大家一起分享一下。
1、分别安装VC、WINDDK、Driver Studio,为:VC-〉WINDDK-〉Driver Studio。
其实顺序也可以变一下的,笔者曾试过VC-〉Driver Studio -〉WINDDK,没问题的,但最好按建议顺序安装;2、注意安装DDK时,建议将例子等全部安装,否则Driver Studio编译时会提示缺少头文件;3、在VS2005环境下,安装Driver Studio时会有对话框弹出,单击Ignore按钮,解决办法会在后面详细说明;4、选择“DriverStudio->DDK Build Setting”,在“DDK Root Directory”选项中选入DDK目录,例如“C:\WINDDK\2600”。
为了防止每次启动VC来编译WDM时,都要设置DDK目录,可以在“控制面板”的“系统”-〉“高级”-〉“环境变量E”设置中,添加一个值为C:\WINDDK\2600的系统变量BASEDIR;5、用VC打开“…\DriverStudio\DriverWorks\source\VdwLibs.dsw”,用Driver Studio进行编译,如果编译成功就OK了,然后可以进行驱动的开发了。
6、利用DriverWizard向导对所要开发的驱动类型进行正确配置,生成所需要的驱动工程框架。
安装DriverStudio3.2 过程中出现DSDDKEnv8.dll failed to register错误的解决方法原因:与VS2005集成时会发生此错误。
解决方法,补丁:ftp:///pub/driverstudio/outgoing/patch/DSDDKEnv.zip>Extract it into a temp directory.>Copy the file DSDDKEnv8.dll into the <INSTALL_DIR>\DriverStudio\Common\Bin directory.>Select "yes" if prompted to copy over an existing one.>Copy the file DSDDKEnv8UI.dll into the <INSTALL_DIR>\DriverStudio\Common\Bin\1033 directory. Select "yes" if prompted to copy over an existing one.>Then unregister the older versionGo to start->run and type "regsvr32 -u "<INSTALL_DIR> \DriverStudio\Common\ Bin\ dsddkenv8.dll"注意〈INSTALL_DIR〉不能含有空格,否则命令无法执行,笔者曾将DriverStudio 安装在C:\Program Files下,总是运行不了,为此郁闷了好久,后经别人提点才解决此问题,但不知其原因,请问有人知道吗?>Then register the new copyGo to start->run and type "regsvr32 <INSTALL_DIR>\ DriverStudio\ Common\ Bin\ dsddkenv8.dll">DriverStudio menu should now be part of the VisualStudio 2005 menu如果在vs2005+补丁后生成的解决方案文件.sln无法双击打开工程时可以使用文本编辑器打开.sln文件在第二行加入“# Visual Studio 2005”保存即可,例如:Microsoft Visual Studio Solution File, Format Version 9.00# Visual Studio 2005Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aa", "driver\aa.vcproj", "{6A0A9D07-FD4C-4D7C-805D-48D25FB4BE6C}" EndProject根治方法:打开\DriverStudio\DriverWizard\Templates目录的文件找到“Microsoft Visual Studio Solution File, Format Version 9.00”这一行,在其后下一行加入“# Visual Studio 2005”保存即可,以后用DriverWizard生成的工程就可以正常双击打开了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
前言鉴于国内开发人员迫切需要学习驱动开发技术,而国内有关驱动开发工具DriverStudio的资料很少,大家在开发过程中遇到很多问题却没处问,没法问.而这些问题却是常见的,甚至是很基础的问题。
有感于此,本站联合北京朗维计算机应用公司编写了本教程。
本教程的目的是让一个有一些核心态程序编写经验或对系统有所了解的人学习编写驱动程序。
当然,本教程不是DDK中有关驱动方面内容的替换,而只是一个开发环境的介绍和指导。
学习本教程,你应该能熟练地使用本套工具编写基本的驱动程序。
当然如果你想能顺利地编写各种各样的驱动的话,你应该有相关的硬件知道和系统核心知识并且要经过必要的训练才能胜任。
如果真心说一句话,DriverStudio并没有对驱动程序开发有什么实质的改变,它和DDk的关系不过是sdk和mfc的关系,但很多人选择了MFC,原因不言自明,方便二字何以说得完呀?你再也不用去关注繁琐的框架实现代码,也不用去考虑让人可怕的实现细节。
封装完整的C++函数库让你专注于你要实现的程序逻辑。
它包含一套完整调试和性能测试、增强工具,使你的代码更稳定。
说些题外话,作驱动开发很苦,不是一般的人能忍受的,那怕开发一个小小的驱动也要忍受无数次的宕机,有时甚至有些灾难性的事故等着你,所以要有充分的思想准备。
当然,在开发的过程中你会有一种彻底控制计算机的满足感,调试开发完毕后的成就感是其它开发工作所不能体会到的。
当然,就个人前途来说,作驱动开发能拿到别的开发所不能得到的薪水。
而且开发的生命期也会长一些,你不用不断的学习新的开发工具,只需要不断的加深对系统的理解就行了。
当然,还有一点是必需的,那就是英文要好,否则永远比国外同行慢半拍。
本人水平不高,所做的工作只要能提起大家学习驱动开发的兴趣,能带领大家入门便心满意足了。
在此感谢北京朗维公司(DriverStduio 国内总代理)的大力赞助,特别是感谢技术部的王江涛,市场部的李强两位先生的大力支持。
同时要感谢我的女友,可爱的小猫(我对她的呢称)的贴心照顾和支持(一些很好看的图片就出自她手:))。
在此我也要感谢论坛各大版主的鼎力支持和广大网友的关怀。
DriverStudio工具包介绍:DriverStudio 是一套用来简化微软Windows 平台下设备驱动程序的开发,调试和测试的工具包。
DriverStudio 当前的版本包括下列工具模块:DriverAgentDriverAgent 为Win32 应用程序提供直接访问硬件的功能。
即使你没有任何设备驱动程序开发的经验或经历,你也能编写出DriverAgent应用程序来直接访问硬件设备。
DriverAgent 应用程序可以运行在 Windows 98, Windows 95, Windows NT 和 Windows 2000平台上。
(当前版本不支持Windows XP平台。
)VToolsDVToolsD 是一个用来开发针对Win9X (Windows 95 和 Windows 98)操作系统下设备驱动程序(VxD)的工具。
VToolsD 中包括生成驱动程序源代码的工具,run-time 和 interface 库,以及一些驱动程序样本,可以用来作为各种类型的设备驱动程序的基础部分。
DriverWorksDriverWorks对于Windows NT下和 Windows 98 与 Windows 2000共同支持的Win32驱动模型(WDM)设备驱动程序的开发提供完全的支持。
DriverWorks中包含一个非常完善的源代码生成工具(DriverWizard) 以及相应的类库和驱动程序样本,它提供了在C++下进行设备驱动程序开发的支持。
DriverNetworksDriverNetworks 是针对Windows网络驱动开发人员的一个模块。
在它的核心部分,DriverNetworks 是一个针对NDIS drivers 和 TDI clients (DriverSockets)的 C++ 的类库。
DriverNetworks 中也有Quick Miniport Wizard 用来直接开始一个NDIS Miniport 或Intermediate Driver 工程。
它可以让你快速的生成所有采用DriverNetworks C++ 类库编写的NDIS驱动程序的编译,安装和调试所需要的文件SoftICESoftICE 是一个功能极其强大的内核模式调试器,它支持在配置一台单独的计算机或两台计算机下进行设备驱动程序的调试。
BoundsChecker Driver EditionBoundsChecker 驱动程序版采用了NuMega针对应用程序开发的一种创新的错误检测技术。
BoundsChecker 驱动程序版中提供了参数确认和系统实施可以用来监视和跟踪在不同的设备驱动程序与其它的操作系统的组件之间的所有的交互作用。
配置向导提供了对于BoundsChecker 采集到的各种类型的大量信息的精确的控制。
BoundsChecker 驱动程序版当前支持Windows NT, Windows 2000, Windows Millennium Edition 和 Windows 98。
(当前版本不支持Windows XP)DriverWorkbenchDriverWorkbench 可以使你进一步了解系统崩溃时的dump 文件和当时的事件。
由于与BoundsChecker Driver Edition集成在一起, 在DriverWorkbench 中可以看到在系统崩溃前或其登录的时候由BoundsChecker 采集到的数据。
这种独特的查看系统的方式提供了空前的能力,使得可以通过查看在系统崩溃之前系统实际活动的踪迹来发现问题之所在。
DriverWorkbench 中也包含了 TrueTime Driver Edition. TrueTime Driver Edition 是一个性能分析工具,可让Windows NT 的设备驱动开发人员发现并修正驱动程序的性能瓶颈。
TrueTime Driver Edition 是用来满足对于设备驱动程序和内核模式下代码开发人员的需求。
一些额外的功能将出现在TrueTime Driver Edition 的下一个版本中。
DriverWorkbench 当前支持 Windows NT 和 Windows 9x. (当前版本不支持Windows XP) FieldAgentFieldAgent 可让你对运行在客户的计算机上的驱动程序进行处理。
由FieldAgent收集到的信息可用于追捕到那些可能只发生在特定的配置环境下问题的原因。
FieldAgent 当前支持 Windows NT 和 Windows 9x. (当前版本不支持Windows XP) TrueCoverage Driver Edition用来确保对于所有的代码都已经完全被测试的方法是使用代码覆盖率工具。
TrueCoverage 可以帮助你检测代码中的哪些部分已经被测试,哪些部分还没有被测试。
通过在开发过程中测量和跟踪代码的执行情况和稳定程度,可以节约测试时间并提高代码的可靠性。
TrueCoverage 能够很轻松的收集驱动程序的覆盖率数据,在源代码的上下文中查看这些数据,也可以将多次会话的结果合并以累加覆盖率的数据。
TrueCoverage Driver Edition当前支持 Windows NT 4.0 (Service Pack 3 or later) 和 Windows2000. (当前版本不支持Windows XP)在我们推荐你使用DriverWorks 或 VToolsD来开发设备驱动程序的同时,DriverStudio 中的工具与Microsoft DDK在一起也能很好的与其配合使用来开发出高质量的驱动程序。
DriverStudio套件包的安装与运行环境设置硬件和软件需求在安装该产品前最好将你的系统进行备分。
下列是安装和运行DriverStudio 所需的要求:· PC-compatible Intel x86 系统· Microsoft Windows NT 4.0 (Service Pack 3 or later), Windows 2000, Whistler Build 2296. (Optional: 其中一些工具也支持 Windows 98 和 Windows 95.)· 内存: 最少32 MB, 推荐使用64 MB· 硬盘:完全安装需要 72 MB· 针对 SoftICE的远程调试: NE2000-compatible 网卡或 3Com 网卡· 针对 DriverWorks: Microsoft DDK,MS Visual C++DriverStudio 也支持其它的编译器。
当前支持的编译器的详细列表参见/drivercentral/components/compatibility.shtml安装DriverWorks1. 在安装DriverWorks之前,首先要保证你的计算机上安装了Microsoft Visual C++以及相应针对Windows NT 或WDM的DDK。
2. 在安装完成后,启动MSVC 5.0或6.0。
启动MSVC最好的方法是使用SetDDKGo工具,位于开始|程序|Numega DriverStudio|Tools菜单中(Setup DDk and Start MSVC)。
SetDDKGo执行一系列的命令行参数来定义BASEDIR环境变量。
3. 在FILE|Open Workspace中打开DriverStudio\DriverWorks\Source\vdwlibs.dsw将VDWLIBS 工程载入。
4. 选择Build|Batch Build,选中你需要编译的配置。
5. 点击Build编译所选择的库文件。
注意:库文件只需在安装完成后第一次使用前编译一次即可。
以后要使用DriverWorks,只需通过SetDDKGo进入MSVC即可。
安装VtoolsD安装程序主要执行以下两个基本的功能:1.将VtoolsD的组成文件复制到你指定的目录下。
2.创建配制文件USER.MAK,用来定义VtoolsD在系统中使用的符号。
USER.MAK是用来定位VtoolsD在系统中生成VxDs时使用的工具的配置文件。
它由一系列的符号定义列表组成,每一个都告知 NMAKE 各个特定的程序在系统中驻留的位置。
SETUP提示你输入工具所需变量的路径。
正确的USER.MAK是安装成功的关键。
在安装完成后要检查该文件。
一些在USER.MAK中定义的符号是文件,一些是用来控制生成过程的符号。