Mark offers some third party utilities. That's good, but I will show a more handy way (IMHO): how to configure and use Visual Studio for compiling drivers.
Have Fun
-
Setup Visual Studio 2008.
-
Setup DDK (WDK).
-
Add to VS paths DDK include files, libs and bins.
-
Create new empty "Win32 project" and add source file (i.e. HelloWorld.c).
-
Configure project properties (All Configurations):
-
C\C++ - General - Debug Information Format = Program Database (/Zi)
-
C\C++ - Preprocessor - Preprocessor Definitions = _X86_ [add also DBG for Debug config]
-
C\C++ - Code Generation - Enable C++ Exceptions = No
-
C\C++ - Code Generation - Basic Runtime Checks = Default
-
C\C++ - Code Generation - Buffer Security Check = No (/GS-)
-
C\C++ - Advanced - Calling Convention = __stdcall (/Gz)
-
C\C++ - Advanced - Compile As = Compile as C Code (/TC) [if you are going to use plain C]
-
Linker - General - Output File = $(OutDir)\$(ProjectName).sys
-
Linker - General - Enable Incremental Linking = Default
-
Linker - Input - Additional Dependencies = ntoskrnl.lib hal.lib $(NOINHERIT) [add needed libs here e.g. ntoskrnl.lib hal.lib]
不用拷贝两个lib文件到项目根目录中,只需要在项目属性的链接器-> 常规中将附件库目录设置成DDK中对应的lib文件夹就可以,比如: C:\WinDDK\7600.16385.1\lib\wxp\i386。为什么要用wxp下的那?参考了这个文章,不然好像会报错:http://www.codeexperts.com/showthread.php?829-unresolved-external-symbol-security_cookie - Linker - Input - Ignore All Default Libraries = Yes (/NODEFAULTLIB)
-
Linker - Manifest File - Generate Manifest = No
-
Linker - System - SubSystem = Native (/SUBSYSTEM:NATIVE)
-
Linker - System - Driver = Driver (/DRIVER)
-
Linker - Advanced - Entry Point = DriverEntry
-
Linker - Advanced - Base Address = 0x10000
-
Linker - Advanced - Randomized Base Address = Disable (/DYNAMICBASE:NO)
(应该为默认值)
-
Linker - Advanced - Data Execution Prevention (DEP) = Disable (/NXCOMPAT:NO)
(应该为默认值)
19. Linker-->Command Line:(我自己加的,在编译时有警告,应用解决方案后警告消失)Additional options = /SECTION:INIT,D /IGNORE:4078 /safeseh:no
-
这项是为了去掉以下警告:
LINK : warning LNK4078: multiple 'INIT' sections found with different attributes (E2000020)
LINK : error LNK2001: 无法解析的外部符号__load_config_used
参考了这个文章: http://www.cnblogs.com/erika/articles/2427184.html
6. OK. Done. Now you can test it with simple code, e.g.:
Hide Copy Code
#include"ntddk.h"
NTSTATUS
DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING
RegistryPath)
{
return STATUS_UNSUCCESSFUL;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架