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

相关推荐
百事牛科技13 分钟前
PPT只读怎么取消?四种情况分别处理
windows·powerpoint
熊明才19 小时前
WSL2 网络突然瘫痪(Network is unreachable / 没有 eth0)最短修复指南(2026年9月20日亲测可用)
linux·windows·wsl2
离凌寒1 天前
一、关于linux开发板上移植ubuntu根文件系统并配置桌面环境笔记记录
驱动开发·单片机
临期冰淇淋1 天前
Unisoc 展锐平台Camera摄像头分辨率适配
linux·c语言·驱动开发
Rsingstarzengjx1 天前
第二十八章 Linux 并发与竞争实验
驱动开发·嵌入式硬件·stm32mp157
xbzb1 天前
Windows 启动故障修复知识整理:蓝屏 / 无限重启 / 盘符 X / 无 PE 盘
windows
我命由我123451 天前
Mac 操作系统 - 一些使用记录
运维·windows·学习·系统安全·运维开发·mac·学习方法
ysu_03141 天前
TinyML 模型部署:从 Edge Impulse 到 STM32F103
驱动开发·stm32·嵌入式硬件·mcu·硬件架构·硬件工程·dsp开发
kakakahahahaha2 天前
Windows Steam 游戏存档在哪里?定位和恢复排查流程
windows·其他·电脑·笔记本电脑·内容运营·软件需求
Xy-unu2 天前
Windows 开启外接显示器 HDR 后外接显示器无信号、无法扩展模式故障记录
windows