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

相关推荐
奋斗的小方16 小时前
Java进阶篇1-2:泛型
java·开发语言·windows
caimouse16 小时前
Reactos 第 4 章 对象管理 — 4.6 对象的访问控制 / 4.7 句柄的遗传和继承
开发语言·windows·架构
一杯奶茶¥16 小时前
一键装机助手 一键重装系统工具 专用装机助手(正版)有原版win11、win10、win7最新版系统。
windows
caimouse17 小时前
Reactos 第 4 章 对象管理 — 4.8 系统调用 NtDuplicateObject / 4.9 系统调用 NtClose
开发语言·windows·架构
Qiuner1 天前
Pico 重塑Agent时代人与数据交互方式
windows·docker·ai·架构
FL16238631291 天前
Windows x64 系统安装 ChromeDriver
windows
百事牛科技1 天前
两种方法锁定 PDF,拒绝内容被随意篡改
windows·pdf
云樱梦海1 天前
OpenClaw官方:OpenClaw Windows Node 实战(1.5K ★ 开源推荐)
windows·开源·github·openclaw
深度学习04071 天前
SVN 独立服务端部署与客户端使用指南(CentOS/Rocky 9.5 + Windows)
windows·svn
爱分享软件的学长1 天前
Tiled Map Editor 1.12.1 官方版下载(夸克网盘+百度网盘,SHA256校验)
windows·开源软件·软件下载