我正在尝试使用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.
导致这些错误的原因是什么?
答案 0 :(得分:7)
更推荐的方法是使用UNREFERENCED_PARAMETER()
宏,因此您的功能可以更改为:
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
UNREFERENCED_PARAMETER(DriverObject);
UNREFERENCED_PARAMETER(RegistryPath);
DbgPrint("Hello, World");
return STATUS_SUCCESS;
}
答案 1 :(得分:5)
WDK激活了“将警告视为错误”,未使用的参数会触发警告。
因此,如果您将代码更改为:
NTSTATUS DriverEntry(PDRIVER_OBJECT /*DriverObject*/, PUNICODE_STRING /*RegistryPath*/)
{
DbgPrint("Hello, World");
return STATUS_SUCCESS;
}
它应该编译。
答案 2 :(得分:1)
更简单的方法是使用IN:
#include <ntddk.h>
NTSTATUS DriverEntry(IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath) {
DbgPrint("Hello World!\n");
return STATUS_SUCCESS;
}
来源:颠覆Windows内核:Greg Hoglund&amp;詹姆斯巴特勒