如何解决函数GsDriverEntry中引用的LNK2019未解析外部符号DriverEntry?

问题描述 投票:5回答:2

我正在编写这个项目https://github.com/namazso/hdd_serial_spoofer

我收到上面的错误信息,我该如何解决?我正在使用vs 2017和wdk 10。

(必须在发布时编译,不支持调试模式。在这个项目中没有DriverEntry函数,hwid.cpp中的EntryPoint(void * ntoskrn,void * image,void * alloc)函数是真正的入口点。)

我做了很多研究,但仍未能使其工作。我是内核模式驱动程序开发的菜鸟。

windows visual-studio driver kmdf
2个回答
4
投票

该项目使用(显然被忽略)选项

<EntryPointSymbol>EntryPoint定义为条目。

这是here的文档,但是当前的文档似乎意味着这仅适用于.exe和.dll项目。

从Windows驱动程序系统调用的消息的形式

NTSTATUS DriverInitialize(
  _DRIVER_OBJECT *DriverObject,
  PUNICODE_STRING RegistryPath
)

与项目中的EntryPoint不兼容

EntryPoint(void* ntoskrn, void* image, void* alloc)

这并不是很糟糕,因为没有使用为EntryPoint调用的参数。

所以最简单的实现就是

extern "C"
{
    DRIVER_INITIALIZE DriverEntry;
    _Use_decl_annotations_
        NTSTATUS
        DriverEntry(
            struct _DRIVER_OBJECT  *DriverObject,
            PUNICODE_STRING  RegistryPath
        )
    {
        EntryPoint(NULL, NULL, NULL);
        return STATUS_SUCCESS;
    }
}

内核开发不适合胆小的人,并且在您的计算机上运行无效的内核代码可能会使启动变得困难,或者在极端情况下损坏计算机。我没有检查项目中的任何代码是否正确。

请在虚拟机(vmware,virtualbox,hyper-v)中运行代码以限制它可能造成的损害


3
投票

这不是普通的驱动程序,WDF直接支持的那种。它是一个“无人驾驶的驱动程序”,它使用了一个无证的黑客,它吸引那些编写rootkit以获得乐趣和利润的程序员。 DriverEntry()函数实际上不是驱动程序的入口点,而是回调函数。就像WinMain()函数实际上并不是本机Win32程序的入口点。项目源代码中的EntryPoint()函数是本机驱动程序入口点的替代品。请注意,该项目似乎具有类似rootkitty的行为,旨在欺骗检查驱动器序列号的简单复制保护方案。

GsDriverEntry()函数是普通KMDF驱动程序中的真正入口点。它执行必要的初始化以支持/GS compiler option,旨在检测缓冲区溢出。完成后,它调用DriverEntry()。该项目用EntryPoint()替换此入口点。

该项目是使用旧版Visual Studio项目模板编写的。要使其正确构建,需要进行一些更改:

  • C / C ++>代码生成>安全检查。必须是“禁用安全检查(/ GS-)”,原始项目文件才是正确的。
  • 相同的属性页> Control Flow Guard。必须设置为“否”以防止链接器错误。此选项添加了无法运行的其他安全检查,必须禁用。
  • C / C ++>常规> SDL检查。使用下拉箭头覆盖“从父级继承”,以使选项显示为空白。需要禁用的更多安全检查会抑制sdl与/ gs-不兼容的警告。
  • 相同的属性页>警告级别。覆盖“Level3(/ W3)”,禁止关于未使用的函数参数的警告。
  • 链接器>输入>附加依赖项。单击下拉箭头>编辑。取消选中“从父级继承”复选框并更改为$(DDK_LIB_PATH)ntoskrnl.lib。请注意继承值列表框中的$(KernelBufferOverflowLib)条目,解析为bufferoverflowfastfailk.lib,即包含GsDriverEntry()并生成链接器错误的那个。
  • 链接器>高级>入口点。必须是“EntryPoint”,原始项目模板才是正确的。

在此之后,它建立清洁。我没有测试生成的hwid.sys,看起来有点太邪恶,无法将我的机器暴露给它。

© www.soinside.com 2019 - 2024. All rights reserved.