如何处理 WDK 中的 winnt.h 和 ntstatus.h?

问题描述 投票:0回答:4

我正在编译一个程序,该程序出现错误,因为 winnt.h 和 ntstatus.h 都包含在 WDK 中。我用预处理编译到一个文件并发现了这个:

#line 1 "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.18362.0\\um\\winnt.h"

还有这个:

#line 1 "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.18362.0\\shared\\ntstatus.h"

这是我的内容:

#include <windows.h>
#include <winbase.h> 
#include <winnt.h>

这是我得到的错误:

1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\ntstatus.h(66,14): warning C4005: 'STATUS_WAIT_0': macro redefinition
1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winnt.h(2496): message : see previous definition of 'STATUS_WAIT_0'

我需要使用一个定义来告诉 VS 不要打开两者吗?

wdk
4个回答
4
投票

我正在使用 dokan 库。我发现 dokan.h 包含 ntstatus.h 并且有一个名为 WIN32_NO_STATUS 的定义来处理这个问题。


3
投票

添加

UMDF_USING_NTSTATUS
定义


0
投票

通用 Windows 标头包含序列,提供 NTSTATUS 代码,无需宏重新定义(例如 STATUS_SUCCESS),并修复了常见的 WinSock 问题:

#define UMDF_USING_NTSTATUS // facilitate clean inclusion of ntstatus.h header further below
#include <winsock2.h>       // put before windows.h to fix macro redefinition issues: https://stackoverflow.com/a/1372836/1173555
#include <windows.h>
#include <ntstatus.h>

归功于 Dmytro 的 UMDF_USING_NTSTATUS 见解。


0
投票

就我而言,您可以使用精确值而不是 NT 状态宏。 那么你就不再需要

#include <ntstatus.h>
了 例如,您可以在代码中使用
0
而不是
STATUS_SUCCESS

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.