Hello World驱动程序无法正确编译

时间:2019-05-19 08:31:05

标签: c visual-studio driver visual-studio-2019

我开始进行驱动程序开发,但是我遵循了在此处在线遇到的一些教程,并且试图将驱动程序编译为简单的.sys文件。

代码如下:

#include <ntddk.h>
#include <wdf.h>

#define UNREFERENCED_PARAMETER(P) (P)
VOID DriverUnload(PDRIVER_OBJECT driver)
{
    DbgPrint("first:HelloWorld End!");
}

NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pUnicodeString)
{
    DbgPrint("first:HelloWorld Begin!");
    pDriverObject->DriverUnload = DriverUnload;
    return STATUS_SUCCESS;
}

我没有编译,而是得到了一个非常有趣的错误:

Error   C2220   warning treated as error - no 'object' file generated   MyHelloWorldDriver  C:\Users\****\source\repos\MyHelloWorldDriver\MyHelloWorldDriver\main.c 7   

我迷路了,因为我不知道从其他地方寻求答案。我检查了所有内容,并得到了这个有趣的错误,该错误恰好在Visual Studio的其他版本上正常工作。如果删除警告,则不会担心,它可以正常编译并且不会向屏幕发送任何错误,为什么会这样?

我正在使用Visual Studio 2019,显然我可能会缺少什么??

PS

我得到的警告如下

Error (active)  E1097   unknown attribute "no_init_all" MyHelloWorldDriver  C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\km\ntddk.h  372 
Error (active)  E1097   unknown attribute "no_init_all" MyHelloWorldDriver  C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\km\ntddk.h  1093    
Warning MSB8038 Spectre mitigation is enabled but Spectre mitigated libraries are not found.  Verify that the Visual Studio Workload includes the Spectre mitigated libraries.  See https://aka.ms/Ofhn4c for more information. MyHelloWorldDriver  C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets 422 
Error   C2220   warning treated as error - no 'object' file generated   MyHelloWorldDriver  C:\Users\***\source\repos\MyHelloWorldDriver\MyHelloWorldDriver\main.c  7   
Warning C4566   character represented by universal-character-name '\uFF01' cannot be represented in the current code page (1252)    MyHelloWorldDriver  C:\Users\***\source\repos\MyHelloWorldDriver\MyHelloWorldDriver\main.c  7   
Warning C4100   'driver': unreferenced formal parameter MyHelloWorldDriver  C:\Users\***\source\repos\MyHelloWorldDriver\MyHelloWorldDriver\main.c  5   
Warning C4566   character represented by universal-character-name '\uFF01' cannot be represented in the current code page (1252)    MyHelloWorldDriver  C:\Users\***\source\repos\MyHelloWorldDriver\MyHelloWorldDriver\main.c  12  
Warning C4100   'pUnicodeString': unreferenced formal parameter MyHelloWorldDriver  C:\Users\***\source\repos\MyHelloWorldDriver\MyHelloWorldDriver\main.c  10  

3 个答案:

答案 0 :(得分:3)

可能的解决方法是将此代码添加到一个主头文件中:

#if (_MSC_VER >= 1915)
#define no_init_all deprecated
#endif

答案 1 :(得分:0)

看起来像Visual Studio的问题: https://developercommunity.visualstudio.com/content/problem/549389/intellisense-error-e1097-because-intellisense-does.html

这是该链接的副本:

对于Visual C ++ 2017 15.8版(编译器版本19.15.26726.0),新的未记录的编译器选项/ d1initall和 新属性__declspec(no_init_all)已添加到编译器。 Intellisense(VS17和19)无法识别此属性,并表示未知。

问题是Intellisense不知道no_init_all属性的存在。

此属性在正式的Windows SDK和WDK 10.0.18362.0头文件中使用, 这意味着Intellisense会针对包含以下内容的所有项目显示此错误 Windows套件\ 10 \ Include \ 10.0.18362.0 \ um \ winnt.h(588和1093行)或 Windows套件\ 10 \ Include \ 10.0.18362.0 \ km \ ntddk.h(第7597行)。

您还可以通过简单地使用__declspec(no_init_all)属性定义结构来重现错误,

__ declspec(no_init_all)结构A {}; 可以正常编译,没有任何警告/错误,但Intellisense表示错误。


它已于2019年4月29日修复。

答案 2 :(得分:0)

您可以在Tools / option / Text-Editor / C C ++ / Extension中激活预编译头,并将Disable Automatic Precompiled Header设置为false。