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

相关推荐
qq_3692243312 天前
Windows全系通用!ntdll.dll文件丢失、报错、闪退问题的完整排查与修复教程
windows·dll·dll修复·dll丢失·dll错误
阿米亚波12 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
世微 如初12 天前
AP5125大功率LED恒流驱动实战:地摊灯项目从原理图到调试笔记
驱动开发·芯片·led电源驱动·降压恒流ic
caimouse12 天前
Reactos 第 10 章 网络操作 — 10.3.1 NIC驱动
网络·windows
ScilogyHunter12 天前
Zephyr串口驱动开发及构建完全指南
驱动开发·uart·zephyr
初圣魔门首席弟子12 天前
Node.js 详细介绍(知识库版)
windows·qt·node.js·知识库
_Emma_12 天前
【DRM&Graphic】Linux图形与显示框架
linux·驱动开发·图形渲染·显示器
董厂长12 天前
Loop Engineering:停止手动提示,开始设计自动提示的系统
大数据·人工智能·驱动开发·llm
CHENG-JustDoIt12 天前
AI工具 | 爆火开源项目Odysseus AI 工作台:从项目介绍、部署情况及其使用等多方位分析指南(含详细步骤)
大数据·人工智能·windows·python·ai·开源·github
kingbal12 天前
Windows:flutter环境搭建
windows·flutter