Windows驱动程序开发 - 初识驱动

  • 什么是驱动程序?
    • [1]. 搭建Windows驱动开发环境
    • [2]. 第一个驱动程序
    • [3]. 双机调试
  • 参考
  • 总结

什么是驱动程序?

驱动(Driver)可以简单理解为设备的操作程序,通常驱动是要符合操作系统规范的。

情景一:没有操作系统的情况(裸机)

  1. 应用通过直接操作接口来发送命令编码,这一过程需要开发人员熟悉数据手册。
  2. 设备通过接口接收命令,直接执行
  3. 最后把命令封装成函数,形成库
#mermaid-svg-EdSqVzlrrS4aRRx2 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 .label text{fill:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 .node rect,#mermaid-svg-EdSqVzlrrS4aRRx2 .node circle,#mermaid-svg-EdSqVzlrrS4aRRx2 .node ellipse,#mermaid-svg-EdSqVzlrrS4aRRx2 .node polygon,#mermaid-svg-EdSqVzlrrS4aRRx2 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-EdSqVzlrrS4aRRx2 .node .label{text-align:center;fill:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 .node.clickable{cursor:pointer}#mermaid-svg-EdSqVzlrrS4aRRx2 .arrowheadPath{fill:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-EdSqVzlrrS4aRRx2 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-EdSqVzlrrS4aRRx2 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-EdSqVzlrrS4aRRx2 .edgeLabel rect{opacity:0.9}#mermaid-svg-EdSqVzlrrS4aRRx2 .edgeLabel span{color:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-EdSqVzlrrS4aRRx2 .cluster text{fill:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-EdSqVzlrrS4aRRx2 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-EdSqVzlrrS4aRRx2 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-EdSqVzlrrS4aRRx2 .actor-line{stroke:grey}#mermaid-svg-EdSqVzlrrS4aRRx2 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 .sequenceNumber{fill:#fff}#mermaid-svg-EdSqVzlrrS4aRRx2 #sequencenumber{fill:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 .messageText{fill:#333;stroke:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-EdSqVzlrrS4aRRx2 .labelText,#mermaid-svg-EdSqVzlrrS4aRRx2 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-EdSqVzlrrS4aRRx2 .loopText,#mermaid-svg-EdSqVzlrrS4aRRx2 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-EdSqVzlrrS4aRRx2 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-EdSqVzlrrS4aRRx2 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-EdSqVzlrrS4aRRx2 .noteText,#mermaid-svg-EdSqVzlrrS4aRRx2 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-EdSqVzlrrS4aRRx2 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-EdSqVzlrrS4aRRx2 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-EdSqVzlrrS4aRRx2 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-EdSqVzlrrS4aRRx2 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EdSqVzlrrS4aRRx2 .section{stroke:none;opacity:0.2}#mermaid-svg-EdSqVzlrrS4aRRx2 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-EdSqVzlrrS4aRRx2 .section2{fill:#fff400}#mermaid-svg-EdSqVzlrrS4aRRx2 .section1,#mermaid-svg-EdSqVzlrrS4aRRx2 .section3{fill:#fff;opacity:0.2}#mermaid-svg-EdSqVzlrrS4aRRx2 .sectionTitle0{fill:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 .sectionTitle1{fill:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 .sectionTitle2{fill:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 .sectionTitle3{fill:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EdSqVzlrrS4aRRx2 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-EdSqVzlrrS4aRRx2 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EdSqVzlrrS4aRRx2 .grid path{stroke-width:0}#mermaid-svg-EdSqVzlrrS4aRRx2 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-EdSqVzlrrS4aRRx2 .task{stroke-width:2}#mermaid-svg-EdSqVzlrrS4aRRx2 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EdSqVzlrrS4aRRx2 .taskText:not([font-size]){font-size:11px}#mermaid-svg-EdSqVzlrrS4aRRx2 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EdSqVzlrrS4aRRx2 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-EdSqVzlrrS4aRRx2 .task.clickable{cursor:pointer}#mermaid-svg-EdSqVzlrrS4aRRx2 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-EdSqVzlrrS4aRRx2 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-EdSqVzlrrS4aRRx2 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-EdSqVzlrrS4aRRx2 .taskText0,#mermaid-svg-EdSqVzlrrS4aRRx2 .taskText1,#mermaid-svg-EdSqVzlrrS4aRRx2 .taskText2,#mermaid-svg-EdSqVzlrrS4aRRx2 .taskText3{fill:#fff}#mermaid-svg-EdSqVzlrrS4aRRx2 .task0,#mermaid-svg-EdSqVzlrrS4aRRx2 .task1,#mermaid-svg-EdSqVzlrrS4aRRx2 .task2,#mermaid-svg-EdSqVzlrrS4aRRx2 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-EdSqVzlrrS4aRRx2 .taskTextOutside0,#mermaid-svg-EdSqVzlrrS4aRRx2 .taskTextOutside2{fill:#000}#mermaid-svg-EdSqVzlrrS4aRRx2 .taskTextOutside1,#mermaid-svg-EdSqVzlrrS4aRRx2 .taskTextOutside3{fill:#000}#mermaid-svg-EdSqVzlrrS4aRRx2 .active0,#mermaid-svg-EdSqVzlrrS4aRRx2 .active1,#mermaid-svg-EdSqVzlrrS4aRRx2 .active2,#mermaid-svg-EdSqVzlrrS4aRRx2 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-EdSqVzlrrS4aRRx2 .activeText0,#mermaid-svg-EdSqVzlrrS4aRRx2 .activeText1,#mermaid-svg-EdSqVzlrrS4aRRx2 .activeText2,#mermaid-svg-EdSqVzlrrS4aRRx2 .activeText3{fill:#000 !important}#mermaid-svg-EdSqVzlrrS4aRRx2 .done0,#mermaid-svg-EdSqVzlrrS4aRRx2 .done1,#mermaid-svg-EdSqVzlrrS4aRRx2 .done2,#mermaid-svg-EdSqVzlrrS4aRRx2 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-EdSqVzlrrS4aRRx2 .doneText0,#mermaid-svg-EdSqVzlrrS4aRRx2 .doneText1,#mermaid-svg-EdSqVzlrrS4aRRx2 .doneText2,#mermaid-svg-EdSqVzlrrS4aRRx2 .doneText3{fill:#000 !important}#mermaid-svg-EdSqVzlrrS4aRRx2 .crit0,#mermaid-svg-EdSqVzlrrS4aRRx2 .crit1,#mermaid-svg-EdSqVzlrrS4aRRx2 .crit2,#mermaid-svg-EdSqVzlrrS4aRRx2 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-EdSqVzlrrS4aRRx2 .activeCrit0,#mermaid-svg-EdSqVzlrrS4aRRx2 .activeCrit1,#mermaid-svg-EdSqVzlrrS4aRRx2 .activeCrit2,#mermaid-svg-EdSqVzlrrS4aRRx2 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-EdSqVzlrrS4aRRx2 .doneCrit0,#mermaid-svg-EdSqVzlrrS4aRRx2 .doneCrit1,#mermaid-svg-EdSqVzlrrS4aRRx2 .doneCrit2,#mermaid-svg-EdSqVzlrrS4aRRx2 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-EdSqVzlrrS4aRRx2 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-EdSqVzlrrS4aRRx2 .milestoneText{font-style:italic}#mermaid-svg-EdSqVzlrrS4aRRx2 .doneCritText0,#mermaid-svg-EdSqVzlrrS4aRRx2 .doneCritText1,#mermaid-svg-EdSqVzlrrS4aRRx2 .doneCritText2,#mermaid-svg-EdSqVzlrrS4aRRx2 .doneCritText3{fill:#000 !important}#mermaid-svg-EdSqVzlrrS4aRRx2 .activeCritText0,#mermaid-svg-EdSqVzlrrS4aRRx2 .activeCritText1,#mermaid-svg-EdSqVzlrrS4aRRx2 .activeCritText2,#mermaid-svg-EdSqVzlrrS4aRRx2 .activeCritText3{fill:#000 !important}#mermaid-svg-EdSqVzlrrS4aRRx2 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EdSqVzlrrS4aRRx2 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-EdSqVzlrrS4aRRx2 g.classGroup text .title{font-weight:bolder}#mermaid-svg-EdSqVzlrrS4aRRx2 g.clickable{cursor:pointer}#mermaid-svg-EdSqVzlrrS4aRRx2 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-EdSqVzlrrS4aRRx2 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-EdSqVzlrrS4aRRx2 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-EdSqVzlrrS4aRRx2 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-EdSqVzlrrS4aRRx2 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-EdSqVzlrrS4aRRx2 .dashed-line{stroke-dasharray:3}#mermaid-svg-EdSqVzlrrS4aRRx2 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EdSqVzlrrS4aRRx2 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EdSqVzlrrS4aRRx2 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-EdSqVzlrrS4aRRx2 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-EdSqVzlrrS4aRRx2 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EdSqVzlrrS4aRRx2 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EdSqVzlrrS4aRRx2 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EdSqVzlrrS4aRRx2 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EdSqVzlrrS4aRRx2 .commit-id,#mermaid-svg-EdSqVzlrrS4aRRx2 .commit-msg,#mermaid-svg-EdSqVzlrrS4aRRx2 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EdSqVzlrrS4aRRx2 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EdSqVzlrrS4aRRx2 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EdSqVzlrrS4aRRx2 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EdSqVzlrrS4aRRx2 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-EdSqVzlrrS4aRRx2 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-EdSqVzlrrS4aRRx2 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-EdSqVzlrrS4aRRx2 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-EdSqVzlrrS4aRRx2 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-EdSqVzlrrS4aRRx2 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-EdSqVzlrrS4aRRx2 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-EdSqVzlrrS4aRRx2 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-EdSqVzlrrS4aRRx2 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-EdSqVzlrrS4aRRx2 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-EdSqVzlrrS4aRRx2 .edgeLabel text{fill:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EdSqVzlrrS4aRRx2 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-EdSqVzlrrS4aRRx2 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-EdSqVzlrrS4aRRx2 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-EdSqVzlrrS4aRRx2 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-EdSqVzlrrS4aRRx2 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-EdSqVzlrrS4aRRx2 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-EdSqVzlrrS4aRRx2 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-EdSqVzlrrS4aRRx2 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-EdSqVzlrrS4aRRx2 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-EdSqVzlrrS4aRRx2 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-EdSqVzlrrS4aRRx2 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-EdSqVzlrrS4aRRx2 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-EdSqVzlrrS4aRRx2 .note-edge{stroke-dasharray:5}#mermaid-svg-EdSqVzlrrS4aRRx2 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-EdSqVzlrrS4aRRx2 .error-icon{fill:#522}#mermaid-svg-EdSqVzlrrS4aRRx2 .error-text{fill:#522;stroke:#522}#mermaid-svg-EdSqVzlrrS4aRRx2 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-EdSqVzlrrS4aRRx2 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-EdSqVzlrrS4aRRx2 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-EdSqVzlrrS4aRRx2 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-EdSqVzlrrS4aRRx2 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-EdSqVzlrrS4aRRx2 .marker{fill:#333}#mermaid-svg-EdSqVzlrrS4aRRx2 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-EdSqVzlrrS4aRRx2 {color: rgba(0, 0, 0, 0.75);font: ;}

命令
命令
设备
接口
应用

情景二:应用基于操作系统

  1. 设备的驱动按照OS规范进行编写,并安装注册到操作系统
  2. 应用的调用会传递到操作系统,进而调用驱动程序来操作设备。
#mermaid-svg-REV66zhENjTd7COv .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-REV66zhENjTd7COv .label text{fill:#333}#mermaid-svg-REV66zhENjTd7COv .node rect,#mermaid-svg-REV66zhENjTd7COv .node circle,#mermaid-svg-REV66zhENjTd7COv .node ellipse,#mermaid-svg-REV66zhENjTd7COv .node polygon,#mermaid-svg-REV66zhENjTd7COv .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-REV66zhENjTd7COv .node .label{text-align:center;fill:#333}#mermaid-svg-REV66zhENjTd7COv .node.clickable{cursor:pointer}#mermaid-svg-REV66zhENjTd7COv .arrowheadPath{fill:#333}#mermaid-svg-REV66zhENjTd7COv .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-REV66zhENjTd7COv .flowchart-link{stroke:#333;fill:none}#mermaid-svg-REV66zhENjTd7COv .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-REV66zhENjTd7COv .edgeLabel rect{opacity:0.9}#mermaid-svg-REV66zhENjTd7COv .edgeLabel span{color:#333}#mermaid-svg-REV66zhENjTd7COv .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-REV66zhENjTd7COv .cluster text{fill:#333}#mermaid-svg-REV66zhENjTd7COv div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-REV66zhENjTd7COv .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-REV66zhENjTd7COv text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-REV66zhENjTd7COv .actor-line{stroke:grey}#mermaid-svg-REV66zhENjTd7COv .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-REV66zhENjTd7COv .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-REV66zhENjTd7COv #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-REV66zhENjTd7COv .sequenceNumber{fill:#fff}#mermaid-svg-REV66zhENjTd7COv #sequencenumber{fill:#333}#mermaid-svg-REV66zhENjTd7COv #crosshead path{fill:#333;stroke:#333}#mermaid-svg-REV66zhENjTd7COv .messageText{fill:#333;stroke:#333}#mermaid-svg-REV66zhENjTd7COv .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-REV66zhENjTd7COv .labelText,#mermaid-svg-REV66zhENjTd7COv .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-REV66zhENjTd7COv .loopText,#mermaid-svg-REV66zhENjTd7COv .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-REV66zhENjTd7COv .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-REV66zhENjTd7COv .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-REV66zhENjTd7COv .noteText,#mermaid-svg-REV66zhENjTd7COv .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-REV66zhENjTd7COv .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-REV66zhENjTd7COv .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-REV66zhENjTd7COv .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-REV66zhENjTd7COv .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-REV66zhENjTd7COv .section{stroke:none;opacity:0.2}#mermaid-svg-REV66zhENjTd7COv .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-REV66zhENjTd7COv .section2{fill:#fff400}#mermaid-svg-REV66zhENjTd7COv .section1,#mermaid-svg-REV66zhENjTd7COv .section3{fill:#fff;opacity:0.2}#mermaid-svg-REV66zhENjTd7COv .sectionTitle0{fill:#333}#mermaid-svg-REV66zhENjTd7COv .sectionTitle1{fill:#333}#mermaid-svg-REV66zhENjTd7COv .sectionTitle2{fill:#333}#mermaid-svg-REV66zhENjTd7COv .sectionTitle3{fill:#333}#mermaid-svg-REV66zhENjTd7COv .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-REV66zhENjTd7COv .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-REV66zhENjTd7COv .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-REV66zhENjTd7COv .grid path{stroke-width:0}#mermaid-svg-REV66zhENjTd7COv .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-REV66zhENjTd7COv .task{stroke-width:2}#mermaid-svg-REV66zhENjTd7COv .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-REV66zhENjTd7COv .taskText:not([font-size]){font-size:11px}#mermaid-svg-REV66zhENjTd7COv .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-REV66zhENjTd7COv .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-REV66zhENjTd7COv .task.clickable{cursor:pointer}#mermaid-svg-REV66zhENjTd7COv .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-REV66zhENjTd7COv .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-REV66zhENjTd7COv .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-REV66zhENjTd7COv .taskText0,#mermaid-svg-REV66zhENjTd7COv .taskText1,#mermaid-svg-REV66zhENjTd7COv .taskText2,#mermaid-svg-REV66zhENjTd7COv .taskText3{fill:#fff}#mermaid-svg-REV66zhENjTd7COv .task0,#mermaid-svg-REV66zhENjTd7COv .task1,#mermaid-svg-REV66zhENjTd7COv .task2,#mermaid-svg-REV66zhENjTd7COv .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-REV66zhENjTd7COv .taskTextOutside0,#mermaid-svg-REV66zhENjTd7COv .taskTextOutside2{fill:#000}#mermaid-svg-REV66zhENjTd7COv .taskTextOutside1,#mermaid-svg-REV66zhENjTd7COv .taskTextOutside3{fill:#000}#mermaid-svg-REV66zhENjTd7COv .active0,#mermaid-svg-REV66zhENjTd7COv .active1,#mermaid-svg-REV66zhENjTd7COv .active2,#mermaid-svg-REV66zhENjTd7COv .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-REV66zhENjTd7COv .activeText0,#mermaid-svg-REV66zhENjTd7COv .activeText1,#mermaid-svg-REV66zhENjTd7COv .activeText2,#mermaid-svg-REV66zhENjTd7COv .activeText3{fill:#000 !important}#mermaid-svg-REV66zhENjTd7COv .done0,#mermaid-svg-REV66zhENjTd7COv .done1,#mermaid-svg-REV66zhENjTd7COv .done2,#mermaid-svg-REV66zhENjTd7COv .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-REV66zhENjTd7COv .doneText0,#mermaid-svg-REV66zhENjTd7COv .doneText1,#mermaid-svg-REV66zhENjTd7COv .doneText2,#mermaid-svg-REV66zhENjTd7COv .doneText3{fill:#000 !important}#mermaid-svg-REV66zhENjTd7COv .crit0,#mermaid-svg-REV66zhENjTd7COv .crit1,#mermaid-svg-REV66zhENjTd7COv .crit2,#mermaid-svg-REV66zhENjTd7COv .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-REV66zhENjTd7COv .activeCrit0,#mermaid-svg-REV66zhENjTd7COv .activeCrit1,#mermaid-svg-REV66zhENjTd7COv .activeCrit2,#mermaid-svg-REV66zhENjTd7COv .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-REV66zhENjTd7COv .doneCrit0,#mermaid-svg-REV66zhENjTd7COv .doneCrit1,#mermaid-svg-REV66zhENjTd7COv .doneCrit2,#mermaid-svg-REV66zhENjTd7COv .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-REV66zhENjTd7COv .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-REV66zhENjTd7COv .milestoneText{font-style:italic}#mermaid-svg-REV66zhENjTd7COv .doneCritText0,#mermaid-svg-REV66zhENjTd7COv .doneCritText1,#mermaid-svg-REV66zhENjTd7COv .doneCritText2,#mermaid-svg-REV66zhENjTd7COv .doneCritText3{fill:#000 !important}#mermaid-svg-REV66zhENjTd7COv .activeCritText0,#mermaid-svg-REV66zhENjTd7COv .activeCritText1,#mermaid-svg-REV66zhENjTd7COv .activeCritText2,#mermaid-svg-REV66zhENjTd7COv .activeCritText3{fill:#000 !important}#mermaid-svg-REV66zhENjTd7COv .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-REV66zhENjTd7COv g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-REV66zhENjTd7COv g.classGroup text .title{font-weight:bolder}#mermaid-svg-REV66zhENjTd7COv g.clickable{cursor:pointer}#mermaid-svg-REV66zhENjTd7COv g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-REV66zhENjTd7COv g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-REV66zhENjTd7COv .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-REV66zhENjTd7COv .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-REV66zhENjTd7COv .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-REV66zhENjTd7COv .dashed-line{stroke-dasharray:3}#mermaid-svg-REV66zhENjTd7COv #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-REV66zhENjTd7COv #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-REV66zhENjTd7COv #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-REV66zhENjTd7COv #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-REV66zhENjTd7COv #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-REV66zhENjTd7COv #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-REV66zhENjTd7COv #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-REV66zhENjTd7COv #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-REV66zhENjTd7COv .commit-id,#mermaid-svg-REV66zhENjTd7COv .commit-msg,#mermaid-svg-REV66zhENjTd7COv .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-REV66zhENjTd7COv .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-REV66zhENjTd7COv .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-REV66zhENjTd7COv g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-REV66zhENjTd7COv g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-REV66zhENjTd7COv g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-REV66zhENjTd7COv g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-REV66zhENjTd7COv g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-REV66zhENjTd7COv g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-REV66zhENjTd7COv .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-REV66zhENjTd7COv .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-REV66zhENjTd7COv .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-REV66zhENjTd7COv .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-REV66zhENjTd7COv .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-REV66zhENjTd7COv .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-REV66zhENjTd7COv .edgeLabel text{fill:#333}#mermaid-svg-REV66zhENjTd7COv .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-REV66zhENjTd7COv .node circle.state-start{fill:black;stroke:black}#mermaid-svg-REV66zhENjTd7COv .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-REV66zhENjTd7COv #statediagram-barbEnd{fill:#9370db}#mermaid-svg-REV66zhENjTd7COv .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-REV66zhENjTd7COv .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-REV66zhENjTd7COv .statediagram-state .divider{stroke:#9370db}#mermaid-svg-REV66zhENjTd7COv .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-REV66zhENjTd7COv .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-REV66zhENjTd7COv .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-REV66zhENjTd7COv .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-REV66zhENjTd7COv .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-REV66zhENjTd7COv .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-REV66zhENjTd7COv .note-edge{stroke-dasharray:5}#mermaid-svg-REV66zhENjTd7COv .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-REV66zhENjTd7COv .error-icon{fill:#522}#mermaid-svg-REV66zhENjTd7COv .error-text{fill:#522;stroke:#522}#mermaid-svg-REV66zhENjTd7COv .edge-thickness-normal{stroke-width:2px}#mermaid-svg-REV66zhENjTd7COv .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-REV66zhENjTd7COv .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-REV66zhENjTd7COv .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-REV66zhENjTd7COv .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-REV66zhENjTd7COv .marker{fill:#333}#mermaid-svg-REV66zhENjTd7COv .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-REV66zhENjTd7COv {color: rgba(0, 0, 0, 0.75);font: ;}

设备
驱动
OS
应用

[1]. 搭建Windows驱动开发环境

早期的windows驱动开发是基于WDM(Windows Driver Model)的,开发难度大。
最新官方推荐的是基于WDF(Windows Driver Foundation)的,有两种模式KMDF(Kernel-Mode内核模式驱动)和UMDF(User-Mode用户模式驱动)。

环境搭建的步骤如下:

  1. 安装Visual Studio (配置C++环境)以及Windows SDK版本
  2. 下载安装对应SDK版本的Windows Driver Kit (WDK),安装程序会检测是否已安装对应的SDK
  3. WDK安装完成会弹出提示,安装VS插件,选择安装

本机采用(适用于 Windows 10 版本 1903 的 WDK)和(Windows SDK 10.0.18362.0),IDE使用VS2019进行开发测试,系统和驱动均为64位。


[2]. 第一个驱动程序

打开Visual Stuido 2019,可以创建UMDF和KMDF模板项目、WDM空项目,我们直接使用模板创建项目。

  1. 创建 User-Mode Driver (UMDF V2) 项目
  2. 修改配置为Debug模式 x64
  3. 编译生成
  4. 安装inf,需要注意的是此时驱动并没有合法的签名,安装会报错(x64)

[3]. 双机调试

  1. 安装VMWare虚拟机,以及需要调试的目标(测试)主机系统,配置需要的驱动设备
  2. 测试主机开启调试模式,以及安装WDK Test Target到测试主机
  3. 在开发主机VS上添加和配置设备
  4. VS部署到测试主机,使用附加到进程Kernel的方式调试(前提是驱动安装到目标机)

参考

Windows 驱动程序入门

总结

Windows驱动开发是一门相对入门比较难的技术,微软对系统做了安全限制,因为驱动处于系统较底层,若没有有效的安全机制将会导致入侵计算机的可能性增大。微软的官方文档的操作很全面和详细了,在这里就只记录简化的步骤。
接触驱动,要保持足够的耐心,驱动不难,贵在坚持。

Windows驱动程序开发 - 初识驱动相关推荐

  1. windows驱动程序开发(普及)

    1.用户态驱动驱动程序和核心态驱动程序 下图描绘出了操作系统驱动程序的相关组成部分的概貌: Windows驱动程序既可以运行在用户态也可以运行在核心模态. l         用户态的驱动程序运行在非 ...

  2. Windows驱动程序开发语言

    Windows驱动程序和Win32应用程序一样,都是PE格式,所以说,只要某种语言的编译器能够编译出PE格式的二进制格式文件,并且能够设置驱动程序的入口地址,那么这种语言就可以用来开发Windows驱 ...

  3. V4L2视频驱动程序开发之驱动方法poll 和 应用程序select

    V4L2视频驱动程序开发已经进入尾声,本次视频支持多个通道的stream同时传输,即有多个设备文件关联到驱动.最高支持48个stream同时输入. 应用程序在获取stream的时候,需要用到selec ...

  4. Linux驱动(驱动程序开发、驱动框架代码编译和测试)

    目录 什么是驱动: 设备分类: 驱动认知: 字符设备驱动工作原理 字符设备.字符设备驱动与用户空间访问该设备的程序三者之间的关系 驱动程序开发步骤 基于驱动框架的代码开发 驱动模块代码编译和测试 加载 ...

  5. 《Win7设备驱动程序开发》学习笔记

    <Windows 7 设备驱动程序开发>是美国Ronald D. Reeves著的一本关于WDF模型的Windows 驱动程序开发教程,适用于Win7和Win10.本文我学习该书的一些笔记 ...

  6. Linux下PCI设备驱动程序开发 --- PCI驱动程序实现(三)

    <script type="text/javascript"> </script><script type="text/javascript ...

  7. windows 编写的硬件驱动_哪个是PXI硬件合适的设备驱动程序?VISA还是IVI?

    理想的测试系统可以认为是其组成部分的总和,包括测量和激励硬件,信号切换,电缆以及可能 的大规模互连系统,UUT电源,外部PC或嵌入式控制器,操作系统(OS)和编程环境.每个部件根据诸如UUT测试参数, ...

  8. firefox驱动_零适配 + 全兼容!龙芯电脑推出办公外设利旧通用解决方案:运行原生 Windows 驱动程序...

    龙芯中科宣布推出创新的办公外设利旧通用解决方案,采用跨指令兼容的二进制翻译(Binary Translation)技术,在龙芯电脑上运行原生的 Windows 驱动程序,具有 "零适配.全兼 ...

  9. 从零开始学习Windows WDF驱动程序开发

    摘要:本文通过简单的例子和精简的说明,带你快速了解和掌握基于WDF架构的Windows驱动程序的开发过程.WDF自带的文档非常详细而且冗长,读者需要一定的编程基础和英语水平,再加上一定的努力,才能看明 ...

  10. Windows内核安全与驱动开发

    这篇是计算机中Windows Mobile/Symbian类的优质预售推荐<Windows内核安全与驱动开发>. 编辑推荐 本书适合计算机安全软件从业人员.计算机相关专业院校学生以及有一定 ...

最新文章

  1. 《小印记》源码分享--极光推送服务器篇
  2. 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(一)-- 起步
  3. android 图像处理(黑白,模糊,浮雕,圆角,镜像,底片,油画,灰白,加旧)...
  4. Firefox(火狐)下载时卡在最后1秒解决办法
  5. 软工网络15个人作业
  6. WPS Office政府机关单位专用版[安卓+Windows]
  7. moxa串口服务器网页版用户名密码,moxa串口服务器设置密码
  8. 基于华为路由器实现NAT
  9. k8s部署-43-带你深入学习ingress-nginx(下)
  10. java 通过ffmpeg 将海康视频转码
  11. 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 数字识别
  12. 方舟服务器怎么去地牢拿芯片,方舟生存进化怎么拿芯片
  13. 6.misc类设备与蜂鸣器驱动
  14. 如何把两个pdf合并成一个pdf?
  15. DEM文件投影/基准面转换出现的问题
  16. elementUI 页面布局
  17. Apache Dubbo详解
  18. esp8266点灯LCD12864心知天气+农历+空气质量ArduinoJson6
  19. HTML、CSS 前端面试题收集
  20. 云班课js脚本解除视频不可快进

热门文章

  1. 构架高性能的InterBase/FireBird系统
  2. VBE2019的下载、安装和使用(最新版2019.5.30)
  3. [18调剂]中国科学院深圳先进技术研究院“视频信号处理”课题组招聘
  4. 传奇盗号木马清除手记(转)
  5. docker 安装 mysql ,redis ,nginx,tomcat,rabbitmq,fastdfs,kafka,mongo,elasticsearch
  6. Latex bare_jrnl模板报错:something‘s wrong--perhaps a missing\item. \end{thebibliography}
  7. php发出声音,电容也会发出声音!电容啸叫是怎么产生的?如何解决?
  8. Android 编程神器,Android轻应用开发神器!
  9. 最好的聊天机器人平台,以建立一个聊天机器人
  10. Python综合知识随笔