2

VisualStudio2012でWDKを使用して最も単純な「HelloWorld」ドライバーを作成しようとしています。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&JamesButlerによるルートキット

于 2013-04-05T19:19:07.457 に答える