在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中的Build.exe,由于它是命令行程序,使用很不方便。其实在VC++中也可以编译
驱动,而且设置的方法也有很多,下面是其中一种,我想也是最常用的。

一般使用VC++编译驱动,可以建立一个Win32 (x86) Application工程,然后将所有Windows程序中的编译开关
都删除,最后添加编译驱动的开关就行了。

"$(ddkroot)/inc/ddk"和"$(ddkroot)/inc"为DDK头文件目录。
DBG为编译方式,1为Debug,0为Release。
_X86_表示Intel平台驱动
添加int64.lib ntoskrnl.lib hal.lib三个库文件,并使用/nodefaultlib忽略其他默认库
/libpath:"$(ddkroot)/libchk/i386"设置DDK库文件目录
/base:"0x10000"修改基址,应用程序使用0x40000,驱动使用0x10000
/entry:"DriverEntry"驱动入口函数
-driver表示连接内核驱动
-subsystem:NATIVE,5.00表示子系统为Native

下面是一个名为TestDriver的dsp文件,修改TestDriver可以实现名字的改变,有兴趣的朋友可以写个程序。
如果要用在XP或2003,还需要修改其他一些编译开关,例如:_WIN32_WINNT=0x500

dsp文件内容:
  1.  
  2. # Microsoft Developer Studio Project File - Name="TestDriver" - Package Owner=<4>
  3. # Microsoft Developer Studio Generated Build File, Format Version 6.00
  4. # ** DO NOT EDIT **
  5.  
  6. # TARGTYPE "Win32 (x86) Application" 0x0101
  7.  
  8. CFG=TestDriver - Win32 Debug Build
  9. !MESSAGE This is not a valid makefile. To build this project using NMAKE,
  10. !MESSAGE use the Export Makefile command and run
  11. !MESSAGE 
  12. !MESSAGE NMAKE /f "TestDriver.mak".
  13. !MESSAGE 
  14. !MESSAGE You can specify a configuration when running NMAKE
  15. !MESSAGE by defining the macro CFG on the command line. For example:
  16. !MESSAGE 
  17. !MESSAGE NMAKE /f "TestDriver.mak" CFG="TestDriver - Win32 Debug Build"
  18. !MESSAGE 
  19. !MESSAGE Possible choices for configuration are:
  20. !MESSAGE 
  21. !MESSAGE "TestDriver - Win32 Debug Build" (based on "Win32 (x86) Application")
  22. !MESSAGE "TestDriver - Win32 Release Build" (based on "Win32 (x86) Application")
  23. !MESSAGE 
  24.  
  25. # Begin Project
  26. # PROP AllowPerConfigDependencies 0
  27. # PROP Scc_ProjName ""
  28. # PROP Scc_LocalPath ""
  29. CPP=cl.exe
  30. MTL=midl.exe
  31. RSC=rc.exe
  32.  
  33. !IF  "$(CFG)" == "TestDriver - Win32 Debug Build"
  34.  
  35. # PROP Use_MFC 0
  36. # PROP Output_Dir "Debug"
  37. # PROP Intermediate_Dir "Debug"
  38. # PROP Ignore_Export_Lib 0
  39. # PROP Target_Dir ""
  40. # ADD CPP /nologo /Gz /W3 /Gm /Gi /Zi /Od /I "$(ddkroot)/inc/ddk" /I "$(ddkroot)/inc" /D DBG=1 /D "_X86_" /D _WIN32_WINNT=0x500 /c
  41. # ADD BASE RSC /l 0x804
  42. # ADD RSC /l 0x804
  43. BSC32=bscmake.exe
  44. LINK32=link.exe
  45. # ADD BASE LINK32 /machine:IX86
  46. # ADD LINK32 int64.lib ntoskrnl.lib hal.lib /nologo /base:"0x10000" /entry:"DriverEntry" /machine:I386 /nodefaultlib /out:"Debug/TestDriver.sys" /libpath:"$(ddkroot)/libchk/i386" -driver -subsystem:NATIVE,5.00
  47. # SUBTRACT LINK32 /pdb:none
  48.  
  49. !ELSEIF  "$(CFG)" == "TestDriver - Win32 Release Build"
  50.  
  51. # PROP Use_MFC 0
  52. # PROP Output_Dir "Release"
  53. # PROP Intermediate_Dir "Release"
  54. # PROP Ignore_Export_Lib 0
  55. # PROP Target_Dir ""
  56. # ADD CPP /nologo /Gz /W3 /Gi /I "$(ddkroot)/inc/ddk" /I "$(ddkroot)/inc" /D DBG=0 /D "_X86_" /D _WIN32_WINNT=0x500 /c
  57. # ADD BASE RSC /l 0x804
  58. # ADD RSC /l 0x804
  59. BSC32=bscmake.exe
  60. LINK32=link.exe
  61. # ADD BASE LINK32 /machine:IX86
  62. # ADD LINK32 int64.lib ntoskrnl.lib hal.lib /nologo /base:"0x10000" /entry:"DriverEntry" /machine:I386 /nodefaultlib /out:"Release/TestDriver.sys" /libpath:"$(ddkroot)/libfre/i386" -driver -subsystem:NATIVE,5.00
  63. # SUBTRACT LINK32 /pdb:none
  64.  
  65. !ENDIF 
  66.  
  67. # Begin Target
  68.  
  69. # Name "TestDriver - Win32 Debug Build"
  70. # Name "TestDriver - Win32 Release Build"
  71. # Begin Group "Source Files"
  72.  
  73. # PROP Default_Filter "cpp;c;cxx;rc;bat"
  74. # End Group
  75. # Begin Group "Header Files"
  76.  
  77. # PROP Default_Filter "h;hpp"
  78. # End Group
  79. # End Target
  80. # End Project
  81.  
  82.  


dsw文件内容:
  1. Microsoft Developer Studio Workspace File, Format Version 6.00
  2.  
  3. # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
  4.  
  5.  
  6.  
  7. ###############################################################################
  8.  
  9.  
  10.  
  11. Project: "TestDriver"=./TestDriver.dsp - Package Owner=<4>
  12.  
  13.  
  14.  
  15. Package=<5>
  16.  
  17. {{{
  18.  
  19. }}}
  20.  
  21.  
  22.  
  23. Package=<4>
  24.  
  25. {{{
  26.  
  27. }}}
  28.  
  29.  
  30.  
  31. ###############################################################################
  32.  
  33.  
  34.  
  35. Global:
  36.  
  37.  
  38.  
  39. Package=<5>
  40.  
  41. {{{
  42.  
  43. }}}
  44.  
  45.  
  46.  
  47. Package=<3>
  48.  
  49. {{{
  50.  
  51. }}}
  52.  
  53.  
  54.  
  55. ###############################################################################
  56.  
  57.  
【字体大小:大 中 小】【复制源文件】
VC6.0下直接用DDK编译驱动程序的方法  csdn里只有提问和回答,个人觉得只有这个还不够,还需要人来分享知识,所以今天为了推广自己写的一个VC6小插件,顺便分享一下用VC6直接编译驱动程序的心得给需要的人。全文如下: 《VC6编译驱动的方法(含32和64位)》 ======文章开始,转载请注明:潘氏软件 - http://panshisoft.cn/dirchanger.asp ======= VC6只是一个IDE,可以方便的调用编译 阅读详情

相关推荐

DTS中video-interfaces接口详解

视频数据管道通常由外部设备组成,例如通过I2C、SPI或UART总线控制的摄像机传感器,以及SoC内部IP块(包括视频DMA引擎和视频数据处理器)。 SoC内部块由DT节点描述,与其他SoC块放置方式类似。外部设备表示为它们各自总线控制器节点的子节点,例如I2C。 所有视频设备上的数据接口都由它们的子“port”节点描述。端口的配置取决于参与数据传输的其他设备,并由“endpoint”子节...

龙图腾的博客 9010

Windows驱动开发错误:MSB8040 此项目需要缓解了Sprctre漏洞的库

VS2019编译WDK驱动时,出现如下错误: MSB8040 此项目需要缓解了Sprctre漏洞的库。从Visual Studio安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构哦安装它们。了解详细信息:http://aka.ms/Ofhn4c。 -----------------------------------------------------------------------------------------------------------------------..

王小波门下走狗 2万+

告别单一查询!MultiQueryRetriever在LangChain中的高级用法解析

本文深入解析了LangChain中的MultiQueryRetriever高级用法,该工具通过大语言模型自动生成多样化查询,显著提升文档检索的召回率和准确性。文章详细介绍了其核心机制、高级配置调优策略以及在多语言和专业领域中的实际应用,为开发者提供了优化知识库问答系统的实用方案。

weixin_28730927的博客 271

error C2220: 警告被视为错误 - 没有生成“object”文件

这种错误的原因是:原因是该文件的代码页为英文,而我们系统中的代码页为中文。 解决方案:1. 启动Microsoft Visual Studio 2005,文件->打开->选择该cpp,然后保存。从新打开程序文件运行,此错误不再出现。     如果不行, 则 2 2. 如果上述不能去掉错误,还可以点击项目,右击选择属性->配置属性->c/c++->常规,将“警告视为错误”的选

cay22的专栏 4万+

HFSS螺旋线圈的优化设计与高效仿真实践

本文详细介绍了HFSS螺旋线圈的优化设计与高效仿真实践,涵盖核心参数设置、参数化建模、仿真加速技巧及结果分析。通过HFSS软件实现螺旋线圈的高效仿真,特别适用于无线充电和RFID系统设计,提升设计效率与性能验证准确性。

weixin_30235225的博客 445

FreeRTOS-Plus-CLI使用笔记

FreeRTOS-Plus-CLI使用笔记 一、简介 详细介绍可参考FreeRTOS-Plus-CLI官网地址入口 FreeRTOS+CLI(Command Line Interface, 命令行接口)提供了一种简单、小型、可扩展且RAM高效的方法,使FreeRTOS应用程序能够处理命令行输入。添加一条指令的步骤如下: 提供一个实现命令功能的函数 将命令映射到该功能函数 注册命令 运行命令解释器 命令行调试接口对于排查分析出现的问题提供了很好的接口,可以通过查看传感器信息判断传感器是否正常,可以查看内置

ApexYuan 6964

vs2019编译7zip 最新版本

由于项目需要,要用于7zip解压缩,之前是用c#直接调用7z.exe来解压缩,后来因为要解压缩文件比较大,原来7z.exe中无法通过管道捕获正在解压缩的进度。于是得通过改7z的源代码实现,因为是win10平台下,必须要用vs2019进行编译。下面理一下遇到的坑。 下载源代码 https://www.7-zip.org/download.html 我们下载最新的21.03 beta 解压缩E:\test\7z2103\之后用vs2019打开 E:\test\7z2103\CPP\7zip\UI.

babytiger的专栏 1982

122、Android Camera HAL3 框架:Request、Result、Metadata 的异步管道模型

本文深入剖析了Android Camera HAL3框架中的异步管道模型,围绕Request、Result和Metadata三个核心要素展开。作者通过实际案例(黑屏闪退问题)切入,揭示了异步模型中常见的帧序错乱陷阱。文章详细阐释了三个角色的交互机制,指出HAL3采用生产者-消费者模式的关键特征:Request与Result一一对应但不保证顺序。针对开发实践,总结了三个必须加锁的场景和回调函数的锁使用禁忌,并给出解决帧序问题的具体方案(独立帧号生成器)。最后提出五项经验性建议,强调异步模型带来的灵活性与复杂性

sundong_81的博客 214

VC6.0 工程改名 和 多个工程合并到一个工作空间 小技巧

前提: 为了将多个工程合并到一个工作空间,可以批量编译,每个工程必须不同名。因此要对工程改名。 但其他文件和类的名字不改变,否则要动大手术,不在本文讨论之列。 操作步骤: (1)删除 .dsw 文件。改好了会再自动生成的。 (2)比如要把工程名由 HY 改成 CY: 打开 HY.dsp: # Microsoft Developer Studio Project File - Name

My学习空间 1760

X书x-mini-sig_x-mini-mua

X书的tiny风控代码,成功运行x-mini-sig|x-mini-mua

Codeooo 博客 1万+

把 Claude Code 接进 ABAP 世界,vibing-steampunk 到底能做什么

《Vibing Steampunk:AI Agent 与 ABAP 开发的工程化桥梁》摘要 Vibing Steampunk(vsp)是一个连接 AI Agent 与 SAP ABAP 开发环境的开源工具,通过 Model Context Protocol(MCP)将 ABAP 开发能力标准化。它解决了传统 ABAP 开发中 AI 辅助工具的局限性,使 Claude Code 等 AI 编程助手能够直接访问 ADT API,实现代码读写、调试、测试等完整开发流程。该工具采用 Go 语言开发,提供 147 个

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1935

配置vc6编译驱动程序

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

鱼翔浅底 2187

001、专栏导论:为什么我们需要MLIR与算子中间表示

五年前,大家还在争论“TVM还是XLA”。现在回头看,TVM的Relay IR和XLA的HLO都是特定领域的IR,它们解决了各自的问题,但缺乏通用性。MLIR的出现,本质上是因为硬件异构化已经到了一个临界点——CPU、GPU、NPU、DSP、FPGA,每个硬件都有自己的指令集和内存层次,没有一个统一的IR能同时高效表达所有硬件的计算模式。MLIR的“方言+渐进式lowering”模式,恰好提供了这种灵活性。你可以为每个硬件定制一套方言,然后共享公共的lowering路径。

Jack010169的博客 488

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

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

wangcheng711的专栏 2007

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

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

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

snlying的专栏 1388

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

另一种vc编译驱动方法

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

lionzl的专栏 625

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

<br />《VC6编译驱动的方法(含32和64位)》 <br />======文章开始,转载请注明:潘氏软件 - http://panshisoft.cn/dirchanger.asp ======= <br />VC6只是一个IDE,可以方便的调用编译器,链接器,头文件,库文件,如果编辑和编译驱动能集成在一起,这样可以提高开发效率。 <br />对于普通的Win32应用程序,VC6已经默认支持了,而对于驱动程序没有设定好的工程向导。其实驱动程序也就是一个sys,是通过c语言写成,所以编译它理论上没有问题

qingruo_yin的专栏 1298

用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

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

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

qingruo_yin的专栏 1021

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

<br /><br />前提: DDK在安装后会自动创建一个环境变量%DDKROOT%(在我按照下面步骤进行后发现编译不成功,后来看了下系统的环境变量,发现没有%DDKROOT%这个,可能装DDK的时候有些问题吧,自己加上去就可以了)<br /> <br />1) 创建批处理文件 build.bat, 其代码如下:<br /> <br />//<--------------build.bat------------------<br />if "%1" == "" goto InvalidParameter

codestinity fight for 1390

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

《VC6编译驱动的方法(含32和64位)》======文章开始,转载请注明:潘氏软件======= VC6只是一个IDE,可以方便的调用编译器,链接器,头文件,库文件,如果编辑和编译驱动能集成在一起,这样可以提高开发效率。对于普通的Win32应用程序,VC6已经默认支持了,而对于驱动程序没有设定好的工程向导。其实驱动程序也就是一个sys,是通过c语言写成,所以编译它理论上没有问题,

chao272724792的专栏 736

VC6下驱动编译全过程

前提是确保winxp ddk已安装 1.准备build.bat,代码如下: @echo off 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 :SetenvNotFoun

hutao1101175783的专栏 500
上一篇: NT DDK的安装以及设备驱动程序的编译
下一篇: IP欺骗技术介绍
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值