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

相关推荐
嵌入式×边缘AI:打怪升级日志1 天前
Linux 驱动实战:SR501 人体红外传感器驱动开发与调试全记录
linux·运维·驱动开发
正点原子1 天前
【正点原子Linux连载】第三章 U-Boot使用 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南
linux·运维·驱动开发
NoSi EFUL1 天前
redis存取list集合
windows·redis·list
coNh OOSI1 天前
Redis——Windows安装
数据库·windows·redis
iNgs IMAC1 天前
如何在Windows系统上安装和配置Node.js及Node版本管理器(nvm)
windows·node.js
无巧不成书02182 天前
Rust开发环境完全指南:Windows/Linux双平台配置与实战
linux·windows·rust·gnu·msvc·mingw-w64安装·镜像配置
xiaoshuaishuai82 天前
C# ZLibrary数字资源分发
开发语言·windows·c#
私人珍藏库2 天前
[Windows] 电子教鞭演示工具 PointerStick v7.11
windows·自动化·工具·软件·多功能
Full Stack Developme2 天前
Hutool TreeUtil 教程
大数据·windows
破阵子443282 天前
PowerShell-7 下载安装教程(如何更新 PowerShell)
windows