![课程讲义-windows wdm驱动开发_第1页](http://file4.renrendoc.com/view/10d4604ea831039267d03fc13f211622/10d4604ea831039267d03fc13f2116221.gif)
![课程讲义-windows wdm驱动开发_第2页](http://file4.renrendoc.com/view/10d4604ea831039267d03fc13f211622/10d4604ea831039267d03fc13f2116222.gif)
![课程讲义-windows wdm驱动开发_第3页](http://file4.renrendoc.com/view/10d4604ea831039267d03fc13f211622/10d4604ea831039267d03fc13f2116223.gif)
![课程讲义-windows wdm驱动开发_第4页](http://file4.renrendoc.com/view/10d4604ea831039267d03fc13f211622/10d4604ea831039267d03fc13f2116224.gif)
![课程讲义-windows wdm驱动开发_第5页](http://file4.renrendoc.com/view/10d4604ea831039267d03fc13f211622/10d4604ea831039267d03fc13f2116225.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WindowsWDMWyouken&O4icwin2005年11月Rev.(c)2005-2006,ICWIN保留所RevisionIssueWyouken&第一 概 本的规划 第二 IRP主功能码(MajorFunction IRP_MJ_PNP次功能码(MinorFunction IRP_MJ_POWER次功能码(MinorFunction 第三 安装 在project->settings中设置成如下 还可以在Tools->Options-〉directories中选择“Executablefiles”并添加MakeDrvr.bat的 再按F7编译有编译提 搞清楚MakeDrvr.BAT文件的功 第四章安装DebugPrintMonitor驱动程 检查DebugPrintdriver的安装情 第五章安装wdm1驱动程 INF文 第六章执行应用程 编译Wdm1Test工 重新指定Wdm1Test工程的setupapi.lib的路 第七章启用wdm1驱动程 第八章停用wdm1驱动程 点击“我的电脑”–“属性”–“硬件 点击“设备管理器”并展开其他设 第九章还有更好的 得到 原 修改wdm1工程的例 第十章USB驱动程序的设计详 第十一章PCI驱动设计详 序80年代以前的程序员们个个身怀绝技,软硬兼通,从最顶层的应用到最底层的IO控制都人们随时都有感。所以一部分人开始转向嵌入式开发,硬件逻辑设计等等方面。需求让开发商们不得不做出接口丰富的产品。驱动的经历浅薄的写出来,只要您是有心人,此文将能最大限度的快速入门。如果您有好的文章或建议,请给我们!第一本的规划应用系统开发的角度来一步步的去讲解如何实现WDM驱动的开发。阅读本书的条件(阅读者必须具备的能力Icwin书写本文的目的第二章WDM动程序的运WDM驱动程序的基本调用流程WDMIRP_MJ_*IRP_MN_*等都是可以理驱动程序何时从何处开始执行驱动程序都可从正确安装成功或更新后就会作系统调用,并*根据VID和PID计算机会查找是否已经装过驱动程序,如果没有装过,就提示新设备要装驱动程序了;如果已经装了,就由系统装载驱动程序并开始从DriverEntry()执行(如果有正DbgPrint就可以看到驱动程序执行的流程一般情况下,驱动程序从windows检查到设备的拔插开始,由操作系统调用执行,进入我们驱动代码的是DriverEntry()DriverEntry()大约做些什么#pragma#pragmacode_seg("INIT")//startINITsectionextern"C"NTSTATUS INPDRIVER_OBJECTINPUNICODE_STRING{NTSTATUSstatus=#ifDebugPrint("RegistryPathis//ExportotherdriverentryDriverObject->DriverExtension->AddDevice=Wdm1AddDevice;DriverObject->DriverUnload=Wdm1Unload;DriverObject->MajorFunction[IRP_MJ_CREATE]=Wdm1Create;//forDriverObject->MajorFunction[IRP_MJ_CLOSE]=Wdm1Close;//forDriverObject->MajorFunction[IRP_MJ_PNP]=Wdm1Pnp;DriverObject->MajorFunction[IRP_MJ_POWER]=Wdm1Power;DriverObject->MajorFunction[IRP_MJ_READ]DriverObject->MajorFunction[IRP_MJ_READ]=Wdm1Read;//forReadFileDriverObject->MajorFunction[IRP_MJ_WRITE]=Wdm1Write;//for//Initialisespinlockwhichprotectsaccesstosharedmemorybufferreturnstatus;}#pragmacode_seg()//endINIT回调函数分为主功能和次功能两种 IRP功能码(MajorFunction驱动程序与应用程序相关的功能码如何调用DriverEntry()中您必须要回调函DriverObject->MajorFunction[IRP_MJ_CREATE]=息码的消息处理函数Wdm1Create():NTSTATUS INPDEVICE_OBJECTfdo,INPIRP在您的应用程序中正确调用HANDLEHANDLErv=CreateFile(ifDetail->DevicePath,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,IoControl调用#define#defineIOCTL_WDM1_ZERO_BUFFERCTL_CODE(\ if(if(!DeviceIoControl(hWdm1,NULL,0,//InputNULL,0,//Output{}\NTSTATUSINNTSTATUSINPDEVICE_OBJECTINPIRP{PIO_STACK_LOCATIONIrpStack=IoGetCurrentIrpStackLocation(Irp);NTSTATUSstatus=STATUS_SUCCESS;ULONGBytesTxd=ULONGControlCodeIrpStack->Parameters.DeviceIoControl.IoControlCode;取得ControlCodeULONGInputLength=IrpStack->Parameters.DeviceIoControl.InputBufferLength;DebugPrint("DeviceIoControl:Controlcode%xInputLength%dOutputLength%d",ControlCode,InputLength,OutputLength);//GetaccesstothesharedbufferKIRQLirql;switch(ControlCode){///////ZerocaseIOCTL_WDM1_ZERO_BUFFER://处理此//Zerotheif(Buffer!=NULL&&}}第三章开始编WDM动程得到一个Demo工程 ││││││││││││││││││││││││││││││││││││││││││││││││││││││ │ │ │││ │ │ │ │ │ │││││││││││ ││VCDDK我 :H:\driverDev\ 我的机器XP_DDK的 :D:\winddk\2600(根据您自己的填写) ”和”DDK :H:\driverDev\ 我的机器XP_DDK的 :D:\winddk\2600(根据您自己的填写)“R”或点击“属性”出现属性注:变量值是你的DDK的 (bin的上层 打开wdm1\sys\Wdm1.dsp点 “是修改H:\driverDev\MakeDrvr.bat @echo@echo@echoDDK_DIR:%1if"%1"==""gotousageif"%3"==""gotoifnotexist%1\bin\setenv.batgotousagecall%1\bin\setenv%1%4cdbuild-b-w-cef%5%6%7%8%9gotoexitechousage MakeDrvrDDK_dirDriver_DriveDriver_Dirfree/checkedecho MakeDrvr%%DDKROOT%%C:%%WDMBOOK%%free-ConfigurationWdm1Win32Free'MakeDrvr'不是内部或外部命令,也不是可运行的程序Errorexecutingc:\windows\system32\cmd.exe.Wdm1.sys-1error(s),0warning(s)VC前面的内容编译时出了错误(配置我们在VC6中常做的有两种解决的办法:注意:后面的3.2.5.1.1和3.2.5.1.2project->settings中设置成如还可以在Tools->Options-〉directories中选择“Executablefiles”并添加MakeDrvr.bat的 F7编译Configuration:Configuration:Wdm1-Win32BUILD:Objectrootsetto:==>BUILD:Adding/YtoCOPYCMDsoxcopyopswon'thang.BUILD:/iswitchignoredBUILD:CompileandLinkforBUILD:LoadingD:\WINDDK\2600\build.dat...BUILD:ComputingIncludefiledependencies:BUILD:SavingD:\WINDDK\2600\build.dat...BUILD:DoneWdm1.sys-0error(s),0SRC_ROOT:c:我们应该更改C:为我们源代码的 (即把下图的C:改SRC_PATH:H:\driverDev\wdm1\sys的 搞清楚MakeDrvr.BAT文件的 @echo@echo @echo DDK@echo SRCROOT,@echoif"%1"==""gotoif"%3"==""gotoifnotexist%1\bin\setenv.batgotocall%1\bin\setenv%1cdbuildbwcef%567%89buildgotoexitechousage MakeDrvrDDK_dirDriver_DriveDriver_Dirfree/checkedecho MakeDrvr%%DDKROOT%%C:%%WDMBOOK%%free-Configuration:Configuration:Wdm1-Win32COMPILETYPE:checkedCOMPILEPARAM:-cefH:\driverDev\wdm1\sys>if"d:\winddk\2600"==""gotousageH:\driverDev\wdm1\sys>if"H:\driverDev\wdm1\sys"==""gotousageH:\driverDev\wdm1\sys>ifnotexistd:\winddk\2600\bin\setenv.batgotousagecalld:\winddk\2600\bin\setenvd:\winddk\2600checkedH:\driverDev\wdm1\sys>calld:\winddk\2600\bin\setenvd:\winddk\2600checkedbuild-b-w-cefBUILD:Objectrootsetto:==>BUILD:Adding/YtoCOPYCMDsoxcopyopswon'thang.BUILD:/iswitchignoredBUILD:CompileandLinkforBUILD:Loadingd:\winddk\2600\build.dat...BUILD:ComputingIncludefileBUILD:ExaminingH:\driverDev\wdm1\sysdirectoryforfilestoH:\driverDev\wdm1\sys-5sourcefiles(1,824lines)BUILD:Savingd:\winddk\2600\build.dat...BUILD:CompilingH:\driverDev\wdm1\sysdirectoryCompiling-wdm1.rcfori386Compiling-debugprint.cfori386Compiling-init.cppfori386Compiling-dispatch.cppfori386Compiling-pnp.cppfori386LinkingExecutable-objchk\i386\wdm1.sysforBUILD:BUILD:LinkingH:\driverDev\wdm1\sysdirectoryBUILD:Done9filescompiled 9121executableWdm1.sys-0error(s),0LinkingExecutable-objchk\i386\wdm1.sysfori386第四章DebugPrintMonitor用控制面板安(Y”然后点击“下一步”(H点击“打开(O)”
DebugPrintdriver安装情没有黄色的警告和红X说明安装成功了第五章安装wdm1动程INF安装驱动程序必须有*.INF文件,INF文件主要了*.sys文件相对于*.INF文件的位置,驱动程序相关的版本、厂商、时间等等信息。全新安装驱DriverEntry安装驱动 我们点击Configuration:Wdm1TestConfiguration:Wdm1Test-Win32H:\driverDev\wdm1\exe\Wdm1Test.cpp(17):fatalerrorC1083:Cannotopenincludefile:'c:\98ddk\inc\win98\setupapi.h':NosuchfileordirectoryErrorexecutingWdm1Test.exe-1error(s),0Cannotopenincludefile:'c:\98ddk\inc\win98\setupapi.h':Nosuchfileor修改Wdm1Test.CPP文件的setupapi.h的路上面的编译错误了setupapi.h路径错误,这是DDK的文件,我们在DDK(D:\WINDDK\2600)下搜索setupapi.h并把 我的DDK 是D:\winddk\2600#include Configuration:Wdm1TestConfiguration:Wdm1Test-Win32 ErrorexecutingWdm1Test.exe-1error(s),0 这是说找不到重新指Wdm1Test工程setupapi.lib的路VC6projectsettingsLinkObject/librarymodules的 类型DWORD_PTR和ULONG_PTRd:\winddk\2600\inc\crt\setupapi.h(688)d:\winddk\2600\inc\crt\setupapi.h(688):errorC2146:syntaxerror:missing';'beforeidentifier''d:\winddk\2600\inc\crt\setupapi.h(688):errorC2501:'ULONG_PTR':missingstorage-classortypespecifiersd:\winddk\2600\inc\crt\setupapi.h(1492):errorC2146:syntaxerror:missing';'beforeidentifier'PrivateData'd:\winddk\2600\inc\crt\setupapi.h(1492):errorC2501:'DWORD_PTR':missingstorage-classtypetypedefPVOID////DefinetypeforreferencetodeviceinformationtypedefPVOID//addedbytypedefunsignedlong*ULONG_PTR;typedefunsignedlong*DWORD_PTRConfiguration:Wdm1TestConfiguration:Wdm1Test-Win32Wdm1Test.exe-0error(s),0调试WdmTest设置断在VC搜 HANDLErv=CreateFile(ifDetail-单步执 下驱动程序代码对照EXE中继续往下执行执行ReadFile执行WriteFile其他的请自己执第
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度木门设计与制造一体化购销合同
- 2025年度光伏发电项目开发与建设合同
- 2025年度城市排水管网清疏及维修合同
- 2025年度会展现场医疗急救与保障服务合同范本
- 2025年度建筑工程后期维护单项承包合同范本
- 2025年度新型防水材料瓦工施工技术合同
- 2025年度会议室租赁服务及品牌合作合同
- 2025年度教育培训机构校企合作与实习实训服务合同范本
- 2025年度河北燃气管道铺设劳务合作合同
- 2025年度智能家居系统经销商合同范本
- 电网工程设备材料信息参考价(2024年第四季度)
- 2025年江苏农牧科技职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025江苏连云港市赣榆城市建设发展集团限公司招聘工作人员15人高频重点提升(共500题)附带答案详解
- 江苏省扬州市蒋王小学2023~2024年五年级上学期英语期末试卷(含答案无听力原文无音频)
- 数学-湖南省新高考教学教研联盟(长郡二十校联盟)2024-2025学年2025届高三上学期第一次预热演练试题和答案
- 项目部、公司成本管理流程图
- 高中英语选择性必修二 Unit 1 Period 1 Reading and thinking(课件)(共38张)
- 小学生电子小报通用模板-A4电子小报15
- CAS云计算软件平台深入介绍
- 课堂教学方法与手段(课堂PPT)课件(PPT 16页)
- 氯盐型和环保型融雪剂发展现状
评论
0/150
提交评论