WDK-KMD警告C4100未引用形式参数VS2015

WDK-KMD警告C4100未引用形式参数VS2015,c,device-driver,wdk,windows-kernel,C,Device Driver,Wdk,Windows Kernel,我正在用一本书学习windows驱动程序开发。 他们举了以下例子: #include "ntddk.h" void Unload(PDRIVER_OBJECT pDriverObject) { DbgPrint("Driver unloading...\n"); return; } NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING RegPath) { pDriverObject->DriverUnl

我正在用一本书学习windows驱动程序开发。 他们举了以下例子:

#include "ntddk.h"

void Unload(PDRIVER_OBJECT pDriverObject) {
DbgPrint("Driver unloading...\n");
return;
}

NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING RegPath) {

pDriverObject->DriverUnload=Unload;
DbgPrint("Driver has been loaded..");

return (STATUS_SUCCESS);

}
每当我尝试编译此文件时,都会收到以下错误和警告:

error C2220: warning treated as error - no 'object' file generated
warning C4100: pDriverObject and RegPath: unreferenced formal parameter.
我已经环顾了stackoveflow,寻找解决方案,但在这种情况下,它们似乎不起作用。 我已经尝试禁用编译器警告,但仍然没有成功


有人能解释一下吗?

编译器警告您不要使用某些函数参数。您的项目还具有将警告视为错误的设置

有两种方法可以解决这个问题

  • 更改项目设置,使警告不会被视为错误
  • 添加一些使用参数的代码
  • 使用参数的示例:

    void Unload(PDRIVER_OBJECT pDriverObject) {
        DbgPrint("Driver of type %d unloading...\n", pDriverObject->Type);
        return;
    }
    
    
    NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING RegPath) {
    
        pDriverObject->DriverUnload=Unload;
        DbgPrint("Driver has been loaded... (RegPath pointer=%p)\n", RegPath);
    
        return (STATUS_SUCCESS);
    }
    

    禁用警告的一种方法是删除参数的名称。很明显(对编译器来说)您不能使用它。所以你没有忘记

    如果您以后可能会使用它,或者希望保留该名称作为文档,您可以将其注释掉:

    void Unload(PDRIVER_OBJECT /* pDriverObject */) {
        DbgPrint("Driver unloading...\n");
        return;
    }
    

    保持最大程度的警告是最健康的做法。除了已经建议的解决方案外,还有一个WDK宏,您可以在函数体内部使用它来指示未使用参数-
    未引用的_参数(param)

    您是否验证原型是否正确匹配?您是否验证了参数类型的定义是否正确?有一些高级技术可以大大提高结构化代码的可读性,称为“缩进”。对它做一些研究,并请始终将其应用到您的代码中-无论是在家中还是在这里发布。感谢它确实起了作用!!-我确实禁用了将警告视为错误的设置,/WX被禁用,但这不起作用。仅使用参数