2

我正在使用一本书学习 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 中寻找解决方案,但在这种情况下它们似乎不起作用。我已经尝试禁用编译器警告,但仍然没有运气。

有人能解释一下吗?

4

3 回答 3

3

将警告保持在最高水平是最健康的做法。除了已经建议的解决方案之外,还有一个 WDK 宏,您可以在函数体内使用它来指示未使用该参数 - UNREFERENCED_PARAMETER(param)

于 2016-01-23T00:56:36.080 回答
1

禁用警告的一种方法是删除参数的名称。那么很明显(对于编译器)你不能使用它。所以你不只是忘记。

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

void Unload(PDRIVER_OBJECT /* pDriverObject */) {
    DbgPrint("Driver unloading...\n");
    return;
}
于 2016-01-19T15:18:40.130 回答
0

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

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

  1. 更改项目设置,使警告不会被视为错误。
  2. 添加一些使用参数的代码。

使用参数示例:

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);
}
于 2016-01-19T14:38:23.997 回答