VC实现驱动程序的开发和编译的完整步骤

用VC6.0编译Windows驱动程序 <br />      从广义角度来讲,只要某种语言的编译器能编译出PE格式的二进制文件,并能正确指明驱动程序的入口地址,那么这种语言就能用作开发Windows驱动,所以我们可以选择C、C++、汇编,甚至是Delphi。编译Windows驱动的编译器也有很多,虽然Microsoft发布了新的WDK,但它足足有600我M啊,相比之下,我们还是比较钟意小巧的VC6.0,下面我们就一步一步把VC打造成Windows驱动编写IDE。 <br />1.修改编译选项<br />"工程"菜单"设置"选项中"C/C++" 阅读详情

前提: DDK在安装后会自动创建一个环境变量%DDKROOT%(在我按照下面步骤进行后发现编译不成功,后来看了下系统的环境变量,发现没有%DDKROOT%这个,可能装DDK的时候有些问题吧,自己加上去就可以了)

 

1) 创建批处理文件 build.bat, 其代码如下:

 

//<--------------build.bat------------------

if "%1" == "" goto InvalidParameter

 

if not exist %1/bin/setenv.bat goto SetenvNotFound

 

call %1/bin/setenv.bat %1 %2

%3

cd %4

build

goto exit

 

:InvalidParameter

echo InvalidParameter.

goto exit

 

 

:SetenvNotFound

echo Can't found setenv.bat.

goto exit

 

:exit

 

//>--------------build.bat------------------

 

  说明: %1表示DDK的安装路径。 %2表示编译模式,checked为调试模式,free为发行模式。 %3 表示用来存放DDK源代码的磁盘盘符。%4 是存放DDK源代码的完整路径。

2)

执行VC并建立一个空的MakeFile工程,如图:

 

3)

在Debug的Command栏里输入

" build.bat %DDKROOT% checked  E: E:/ATMP/VCPROG/DDK/DDKTest/test1 “

 

4)

在Release的Command栏里输入

" build.bat %DDKROOT% free  E: E:/ATMP/VCPROG/DDK/DDKTest/test1 “

5)

创建完工程后,把第1步创建的build.bat文件copy到新建工程的目录下,本例为DDKTest。

 

6)

在../test1目录下编写自己的源程序(.c ,.h )和工程文件( makefile , source )。

本例中为: MinDriver.c , MinDriver.h , MAKEFILE , Sources .

 

//<------------------ Sources 文件-------------------------

TARGETNAME = MinDriver

TARGETPATH = obj

TARGETTYPE = DRIVER

 

 

SOURCES = MinDriver.c

//>------------------ Sources 文件-------------------------

 

//<------------------ MAKEFILE 文件-------------------------

!INCLUDE $(NTMAKEENV)/makefile.def

//>------------------ MAKEFILE 文件-------------------------

 

 

//<------------------ MinDriver.h 文件-------------------------

//输出调试宏

#define  DBGPRINT(Fmt)                                                                                                  /

{                                                                                                                                               /

     DbgPrint("MinDriver debug: %s(%d)", __FILE__, __LINE__ );         /

     DbgPrint(Fmt);                                                                                                        /

}

 

//驱动程序入口函数

NTSTATUS

DriverEntry(

                       IN PDRIVER_OBJECT       DriverObject,

                       IN PUNICODE_STRING    RegistryPath

                       );

 

//驱动程序卸载函数

VOID

PacketUnload(

                        IN PDRIVER_OBJECT DriverObject

                        );

//>------------------ MinDriver.h 文件-------------------------

 

//<------------------ MinDriver.c 文件-------------------------

#include <ndis.h>

#include "MinDriver.h"

 

 

//驱动程序入口函数

NTSTATUS

DriverEntry(

                       IN PDRIVER_OBJECT       DriverObject,

                       IN PUNICODE_STRING    RegistryPath

                       )

{

     //输入调试信息

     DBGPRINT(" DriverEntry Loading.../n" );

 

     //指定卸载程序的函数指针,卸载程序会直接调用PacketUnload完成卸载

     DriverObject->DriverUnload = PacketUnload;

 

     return(0);

}

 

 

//驱动程序卸载函数

VOID

PacketUnload(

                        IN PDRIVER_OBJECT DriverObject

                        )

{

     PDEVICE_OBJECT DeviceObject;

     PDEVICE_OBJECT OldDeviceObject;

 

     DBGPRINT("DriverEntry unLoading.../n");

 

     //将驱动程序创建的设备保存到临时变量中

     DeviceObject = DriverObject->DeviceObject;

 

     //一个驱动程序可以创建多个设备,循环删除这个驱动程序创建的所有设备

     while( DeviceObject != NULL )

     {

              OldDeviceObject = DeviceObject;

              DeviceObject = DeviceObject->NextDevice;

              IoDeleteDevice( OldDeviceObject );

     }

 

}

//>------------------ MinDriver.c 文件-------------------------

 

 

7)

至此,用VC环境对驱动程序进行编译的过程就已经完成了。执行编译在目录/test1/objchk/i386下可以得到文件MinDriver.sys。

 


 

 

使用驱动程序

(这里仅仅用dbgview.exe查看我们写的调试信息)

1)

编写注册文件test1.reg:

 

//>------------------ test1.reg 文件-------------------------

Windows Registry Editor Version 5.00

 

[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/MinDriver]

"Type"=dword:00000001

"Start"=dword:00000003

"Group"="Extended Base"

"ErrorControl"=dword:00000001

"ImagePath"=hex(2):53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,4d,00,/

  69,00,6e,00,44,00,72,00,69,00,76,00,65,00,72,00,2e,00,73,00,79,00,73,00,00,/

  00

"DisplayName"="SdotNdot Min Driver Test"

//>------------------ test1.reg文件-------------------------

 

双击test1.reg文件导入注册表配置, 并将MinDriver.sys复制到winnt/system32目录下。

 

2). 重新启动计算机。

3). 运行dbgview.exe(查看调试信息工具)。

4). 进入命令行模式。

5). 在命令行模式执行命令:net start mindriver,加载驱动程序

6). 在dbgview.exe的显示区会出现MinDriver.sys输出的调试信息,

   表示入口函数DriverEntry已被调用。

7). 在命令行模式执行命令:net stop mindriver,停止驱动程序

8). Dbgview.exe 会出现MinDriver.sys输出的DriverUnload的调试信息。

VC6.0下直接用DDK编译驱动程序的方法  csdn里只有提问和回答,个人觉得只有这个还不够,还需要人来分享知识,所以今天为了推广自己写的一个VC6小插件,顺便分享一下用VC6直接编译驱动程序的心得给需要的人。全文如下: 《VC6编译驱动的方法(含32和64位)》 ======文章开始,转载请注明:潘氏软件 - http://panshisoft.cn/dirchanger.asp ======= VC6只是一个IDE,可以方便的调用编译 阅读详情

相关推荐

VC6下DDK开发环境配置与驱动程序开发指南

简介:在VC6中配置DDK开发环境是编写和调试Windows设备驱动程序的基础。DDK包含了创建Windows内核模式驱动所需的工具和库。本文详细介绍了如何下载安装合适的DDK版本,将DDK路径添加到VC6配置中,创建驱动程序项目模板,并使用DDK的API和工具进行编译与调试。掌握这些步骤对于深入了解Windows内核编程,以及开发稳定、高效的设备驱动程序至关重要。

weixin_30674431的博客 735

c语言windows驱动编程,【笔记】windows驱动编程学习-从hello world出发

本帖最后由 jy40 于 2020-3-9 10:36 编辑最近在学习windwos下的驱动编程开个贴记录一下一些相关的知识点,以及遇到的问题(各种蓝屏的姿势)配置好VS、WDK以及双机调试环境后,开始学习首先,从最简单的驱动程序开始,写个Hello World[C] 纯文本查看 复制代码#includeVOID DriverUnload(PDRIVER_OBJECT pdriver) {DbgP...

weixin_34761438的博客 1068

RFSOC实战解析(一):深入RF Data Converter的时钟与数据接口设计

本文深入解析RFSOC中RF Data Converter的时钟与数据接口设计,涵盖GHz采样、数据流处理、时钟树同步及AXI-Stream接口实战。通过详细案例和调试技巧,帮助工程师高效配置IP核,优化ADC/DAC性能,解决跨时钟域和信号完整性等关键问题。

weixin_30955617的博客 473

vc 6.0中开发驱动设备程序配置方法

刚开始利用ddk开发驱动程序的时候采用的是ultraedit编辑工具,然后编译安装驱动程序.参考www.USBSOLUTION.COM,现在介绍在vc中开发驱动程序的配置方法.一. 准备工作 1.首先创建一个你的驱动工程文件目录。这个目录下用来放置你的各个驱动工程文件夹。(比如我在D盘创建了一个MyDrivers文件夹作为我的驱动工程文件目录) 2.然后添加两个用户环境变量,一个是DDKROO

孤身我路 1912

2026零成本私有化:OpenClaw一键搭建Discord/Telegram智能机器人,数据不出本地,永久免费替代ChatGPT

如果内置的功能不能满足你的需求,你可以很容易地添加自己的自定义工具。public string Description => "查询指定城市的天气";// 调用天气API获取天气信息return $"city今天的天气是晴,温度25度";// 注册工具今天北京的天气怎么样?大模型的选择很重要:不要盲目追求大参数的模型。对于大多数场景来说,7B参数的模型已经足够用了,而且速度快,内存占用低。上下文长度不要设置太大:上下文长度越大,内存占用越高,推理速度越慢。

2601_94871597的博客 261

Apache Doris IP变更问题详解

Apache Doris IP变更问题详解

ith321的博客 7274

在vc 6.0 中设置开发驱动环境

在vc 6.0 中设置开发驱动环境1. 第一步:安装Visual c++2. 安装win 2000 ddk3.安装完 DDK 之后,接下来你应该打开 Visual C/C++ ,把 DDK 的路径加入到编译器和链接器的目录列表中。   1). 在主菜单中选择 Tools/Options ,然后单击 Directories 。在目录选择下拉列表中选择 Include files ,        然

lllxy的专栏 1590

CST实战:5分钟搞定圆极化天线轴比分析(含远场设置技巧)

本文提供了一份CST Studio Suite圆极化天线轴比分析的实战指南。文章详细讲解了轴比的概念与工程标准,并重点演示了如何正确设置远场监视器以获取Axial Ratio数据,包括关键步骤与后处理技巧。最后,通过植入式天线在生物组织环境中的案例,分析了复杂环境对轴比性能的影响及优化思路。

nokia的博客 997

c语言驱动程序开发基础教程,C 语言入门介绍

C 语言入门介绍适用于初学者和专业人士的C语言教程采用编程方法,可帮助您轻松理解C语言教程。我们的C教程通过程序解释了每个主题。C语言是由Dennis Ritchie开发的,用于创建与硬件设备(例如驱动程序,内核等)直接交互的系统应用程序。C编程被认为是其他编程语言的基础,这就是为什么它被称为母语。C是一种功能强大的通用编程语言。它可以用于开发操作系统、数据库、编译器等软件。C编程是一门优秀的编程...

weixin_34137550的博客 2092

CANoe: Panel的上位机控制方法

本文介绍了不同于IG的报文控制方法,实现了Panel面板的控制模式。

Jonsnow3zz的博客 1407

5G初始注册流程详解(2)-Registration Request

1:了解注册的本质,5G终端为什么要注册? 2:SUCI,SUPI,5G-GUTI的区别? 3:为什么会有COMPLETE REGISTRATION REQUEST呢?

weixin_53220301的博客 3794

VC开发驱动程序

用VC开发驱动程序,需要做一些特殊的工作.在VC开发环境下开发驱动程序,实际上只用VC的躯壳部分做一些程序编辑工作,对核心的部分仍然使用编译器进行.VC为我们提供了一种直接调用命令行模式的命令来编译和创建程序的makefile工程,而命令行的输出信息直接输出在VC的信息输出框内.于是我们可以把编译驱动程序的一系列命令写成一个批处理,然后让makefile工程执行这个批处理就可完成驱动程序的

sicoxp的专栏 2824

Nuvoton OpenTitan开源安全芯片技术解析与应用

硬件安全模块(HSM)作为可信计算基的核心组件,其设计透明度和可验证性正成为行业焦点。RISC-V架构凭借开源特性,为构建可审计的安全芯片提供了新范式。OpenTitan项目通过开放Verilog源码和形式化证明,实现了从物理不可克隆函数(PUF)到分层安全启动的全栈透明。该方案在lowRISC Voyager开发板上实测显示,安全启动时间小于200ms,性能损耗仅7%,显著优于传统黑盒方案。目前该技术已应用于Chromebook和数据中心,其40nm工艺版本更将功耗降至5μA待机水平,为物联网和边缘计算提

weixin_36303807的博客 399

VC 6.0下直接用DDK编译驱动程序的方法

VC 6.0下直接用DDK编译驱动程序的方法作者: 佚名,  出处:IT专家网论坛, 责任编辑: 谢妍妍, 2009-07-13 07:00   VC6只是一个IDE,可以方便的调用编译器,链接器,头文件,库文件,如果编辑和编译驱动能集成在一起,这样可以提高开发效率。  VC6只

qingruo_yin的专栏 1021

【maven】maven 3.8.1 版本编译java 17的项目报错 java.lang.ExceptionInitializerError to make field private com.s

排查发现一切正常,但是内网就是不行,然后我就想把我的程序从java 11 改成java 17,然后执行编译的时候报错。这个问题是我们内网java代码升级,项目比较复杂,是从java 8 升级到java 17,然后报错。maven-compiler-plugin 3.8.1 版本编译java 17的项目,报错。然后查看一下这个项目的lombok,结果发现还是老的版本。怀疑是不是这个问题呢?使用最新的版本就可以了。

九师兄 780

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

用VC6.0编译驱动程序的工程设置方法

用VC6.0编译驱动程序的工程设置方法  VC6.0编译驱动程序的工程设置一、编译NT式驱动1>     建立一个win32应用程序工程。2>     修改工程属性。Project --Setting-C/C++中的Project Options内容替换成/nologo /Gz /MLd /W3 /WX /Z7 /Od /D WIN32=100 /D _X86_=1 /D WI

Iqian1314的专栏 1619

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

配置vc6编译驱动程序

       之前写驱动,都是辛辛苦苦用build工具编译,不胜其烦。今天无意中看到一片文章,讲到如何配置vc的工程属性,使得可以编译驱动。想想也很自然,build不过是个外包,最终是调用编译和链接命令。只是这些命令的参数需要认真研究而已。现在好了,既然有人写了,何不尝试一下。折腾了1个小时。总算是能够成功编译了,就当做一个模板,以后改改源文件就可以了,VC里面配合Visual Assist写代码

鱼翔浅底 2187

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VC6编译驱动的方法(含32和64位)

VC6只是一个IDE,可以方便的调用编译器,链接器,头文件,库文件,如果编辑和编译驱动能集成在一起,这样可以提高开发效率。 对于普通的Win32应用程序,VC6已经默认支持了,而对于驱动程序没有设定好的工程向导。其实驱动程序也就是一个sys,是通过c语言写成,所以编译它理论上没有问题,只是在实际操作上有点麻烦。 下面就来说明一下各种平台编译sys驱动的方法(包括64位平台) 

snlying的专栏 1388

VC6+WDK+DriverStudio编译Windows驱动程序环境搭建

   自己终于把这个环境搭起来了,费了九牛二虎之力,走了很多的弯路。大家分享吧,不要嫌麻烦这差不多是最简单了。一、需要的软件及版本Vc6 英文版;(随处都有)WDK3790.1830(1830_usa_ddk.iso的解压文件)或者2006.1106版本;(http://download.microsoft.com/download/9/0/f/90f019ac-8243-48

Summon的专栏 4511

如何VC6.0下编译WDM驱动程序

1:环境 VC6.0+DDK+DDAppWiz.awx ,按照以上顺序安装,且VC6.0要安装于根目录下,文件DDAppWiz.awx 需要拷贝至Microsoft Visual Studio//Common//MSDev98//Bin//IDE目录下。 即可实现在VC环境下对驱动程序的编写和编译。 PS: 1 文件DDAppWiz.awx 来源于《Windows2000设备驱动程序设计指南(Th

yjz1409276的专栏 1762

USB--平台搭建--2--USB驱动程序开发DDK DS3.2安装

USB驱动程序开发DDK VC DS3.2安装与配置  1.软件的安装顺序:VC6.0 -> DDK_XP -> DriverStudio3.2 ,如果装错了,把DS3.2删除再重装就OK了.  2.编译库文件:  (1).启动VC6.0,进入菜单DriverStudio>>DDK Build Settings指向DDK安装位置;  (2).进入菜单Open Workspace,打开位

项立纲 6425

怎样配置vc的环境来编译驱动

写下怎么配置vc的环境吧,不过网上这方面的文章很多了,我就不写重复的东西了,讲符号配置顺延。怎样配置vc的环境来编译驱动最好用vc 7.0来编译驱动,6.0的编译器没有7.0的编译器好,编译器用的越新越好,驱动和普通的程序没有什么区别在开始讲如何配置环境前,先想想自己要编译程序,需要让编译器知道哪些东西?1.头文件和库路径,如果是编译应用程序,这个你就不用管了,默认的路径已经配置好了编

wangcheng711的专栏 2006

命令行编译和VC6.0编译驱动程序的方法

编译驱动程序分两个步骤, 1、设置编译环境 2、进行实际编译过程 还有一个前提条件就是要安装ddk 1、运行ddk目录下的setenv.bat,该命令最少有两个输入参数,一个是ddk的安装路径,一个是要求的编译结果。在不知道该如果输入参数的时候,可以不用任何参数,直接输入

embededvc的专栏 2165
上一篇: 驱动例程详解(-)
下一篇: ICMP报文格式和种类
codestinity
博客等级 码龄16年 29粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值