Windows内核驱动开发时是否要设置版本控制宏

Windows内核驱动开发时是否要设置版本控制宏

不是必须的,但在专业开发中强烈推荐设置,否则会带来很多问题。


1. 如果不设置会怎样?

默认情况下,编译器会使用最低版本的 Windows API 定义(通常是 Windows 2000 或 XP 级别)。这会导致:

c 复制代码
// 如果没有定义 NTDDI_VERSION
#include <wdm.h>

// 你可能无法使用新版本 API
NTSTATUS MyFunction() {
    // Windows 10 新增的函数
    NTSTATUS status = SomeWindows10Api();  // ❌ 编译错误:未声明的标识符
    
    // 或者结构体字段不全
    PDEVICE_OBJECT device;
    device->SomeNewField = 1;  // ❌ 编译错误:没有此成员
}

2. 什么时候必须设置?

场景 是否必须 原因
使用新版本 Windows 的 API 必须 否则找不到函数声明
使用新版 SDK 新增的结构体字段 必须 否则结构体定义不完整
使用版本相关的功能(如 DMF、WDF 2.0) 必须 需要对应版本的头文件
开发通用驱动(兼容多版本) 可选但建议 用条件编译适配不同版本
开发内部专用驱动 可选 如果只用基本 API 可不设

3. 正确的设置方法

3.1 在 targetver.h 中统一设置(推荐)

c 复制代码
// targetver.h
#pragma once

// 目标 Windows 10 1909
#define NTDDI_VERSION NTDDI_WIN10_19H1
#define _WIN32_WINNT 0x0A00
#define WINVER 0x0A00

3.2 在项目属性中设置

  • VS -> 项目属性 -> C/C++ -> 预处理器 -> 预处理器定义
  • 添加:NTDDI_VERSION=NTDDI_WIN10_19H1;_WIN32_WINNT=0x0A00;WINVER=0x0A00

3.3 在源文件开头设置

c 复制代码
// Driver.h
#include <ntddk.h>

// 必须在包含 wdm.h/ntddk.h 之前定义
#define NTDDI_VERSION NTDDI_WIN10_RS3
#define _WIN32_WINNT 0x0A00
#define WINVER 0x0A00

#include <wdm.h>
// 现在可以使用 Windows 10 RS3 的所有 API

4. 各版本宏的值

Windows 版本 NTDDI_VERSION _WIN32_WINNT WINVER
Windows 10 2004 NTDDI_WIN10_VB 0x0A00 0x0A00
Windows 10 1909 NTDDI_WIN10_19H1 0x0A00 0x0A00
Windows 10 1903 NTDDI_WIN10_19H1 0x0A00 0x0A00
Windows 10 1809 NTDDI_WIN10_RS5 0x0A00 0x0A00
Windows 10 1803 NTDDI_WIN10_RS4 0x0A00 0x0A00
Windows 10 1709 NTDDI_WIN10_RS3 0x0A00 0x0A00
Windows 10 1703 NTDDI_WIN10_RS2 0x0A00 0x0A00
Windows 10 1607 NTDDI_WIN10_RS1 0x0A00 0x0A00
Windows 10 1511 NTDDI_WIN10_TH2 0x0A00 0x0A00
Windows 10 1507 NTDDI_WIN10 0x0A00 0x0A00
Windows 8.1 NTDDI_WINBLUE 0x0603 0x0603
Windows 8 NTDDI_WIN8 0x0602 0x0602
Windows 7 NTDDI_WIN7 0x0601 0x0601

相关推荐
广州灵眸科技有限公司10 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
王维同学16 小时前
[原创][Windows C++]LSA 认证、安全与通知包的注册表枚举
c++·windows·安全
YCOSA202516 小时前
雨晨 Windows 11 IOT 企业版 LTSC 24H2 轻装 2合1 26100.8968
windows·物联网
汤姆yu17 小时前
CodeGeeX 4完整安装与实操使用全指南
人工智能·windows·ai·智能体·视频模型
吐了啊取名字太难19 小时前
美颜系统AI修图本地跑并支持Mac、win、安卓、iOS不卡顿
android·人工智能·windows·数码相机·mac·ai编程
筱羽_筱羽21 小时前
VS2022 编译SOEM
windows·visualstudio·soem
love530love1 天前
【排障实录】GPT Desktop (Codex) 开启 WSL 智能体模式后无法启动?手把手教你修复
人工智能·windows·gpt·agent
WangWei_CM1 天前
Session Manager 的 BootExecute、SetupExecute 与 Execute 多字符串解析
windows
寒水馨1 天前
Windows 11下载、安装openclaw-v2026.7.1(附安装包OpenClawCompanion-Setup-x64.exe)
windows·大模型·开源软件·ai助手·openclaw·个人ai·中文版
kidwjb1 天前
Linux内核-0.1版本的中断流程
linux·内核·中断