Простейший драйвер с помощью Visual студии разработки


Я пытаюсь создать простейший драйвер "hello world" в Visual Studio 2012 с помощью WDK. Код устройства.файл 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 Kits8.0buildWindowsDriver8.0.common.targets(1347,5): error MSB3030: Could not copy the file "PathToProjectsSimpleDriverx64Win7DebugKMDFSmall.sys" because it was not found.

Что вызывает эти ошибки?

3 2

3 ответа:

В WDK активировано "рассматривать предупреждение как ошибку", а неиспользуемые параметры вызывают предупреждение.

Поэтому, если вы измените свой код на:

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

    return STATUS_SUCCESS;
}

Он должен компилироваться.

Более рекомендуемым способом является использование макроса UNREFERENCED_PARAMETER(), поэтому ваша функция может быть изменена на:

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

    DbgPrint("Hello, World");

    return STATUS_SUCCESS;
}

Более короткий способ сделать t-это использовать IN:

#include <ntddk.h>

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

Источник: Subverting the Windows Kernel: Rootkits by Greg Hoglund & James Butler