2

我正在尝试使用 WDK 在 Visual Studio 2012 中创建一个最简单的“hello world”驱动程序。Device.c 文件的代码是这样的:

#include <ntddk.h>

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
    DbgPrint("Hello, World");

    return STATUS_SUCCESS;
}

构建时出现错误:

1>Driver.c(3): error C2220: warning treated as error - no 'object' file generated
1>Driver.c(3): warning C4100: 'RegistryPath' : unreferenced formal parameter
1>Driver.c(3): warning C4100: 'DriverObject' : unreferenced formal parameter
2>------ Build started: Project: KMDFSmall Package, Configuration: Win7 Debug x64 ------
2>C:\Program Files (x86)\Windows Kits\8.0\build\WindowsDriver8.0.common.targets(1347,5): error MSB3030: Could not copy the file "Path\To\Projects\SimpleDriver\x64\Win7Debug\KMDFSmall.sys" because it was not found.

是什么导致了这些错误?

4

3 回答 3

7

更推荐的方法是使用UNREFERENCED_PARAMETER()宏,因此您的功能可以更改为:

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
    UNREFERENCED_PARAMETER(DriverObject);
    UNREFERENCED_PARAMETER(RegistryPath);

    DbgPrint("Hello, World");

    return STATUS_SUCCESS;
}
于 2012-10-20T04:12:34.597 回答
5

WDK 已激活“将警告视为错误”,未使用的参数会触发警告。

因此,如果您将代码更改为:

NTSTATUS DriverEntry(PDRIVER_OBJECT /*DriverObject*/, PUNICODE_STRING /*RegistryPath*/)
{
    DbgPrint("Hello, World");

    return STATUS_SUCCESS;
}

它应该编译。

于 2012-10-19T17:29:12.197 回答
1

更短的 t 方法是使用 IN:

#include <ntddk.h>

NTSTATUS DriverEntry(IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath) {
    DbgPrint("Hello World!\n");
    return STATUS_SUCCESS;
}

资料来源:颠覆 Windows 内核:Greg Hoglund 和 James Butler 的 Rootkits

于 2013-04-05T19:19:07.457 回答