我正在编写这个项目https://github.com/namazso/hdd_serial_spoofer
我收到上面的错误信息,我该如何解决?我正在使用vs 2017和wdk 10。
(必须在发布时编译,不支持调试模式。在这个项目中没有DriverEntry函数,hwid.cpp中的EntryPoint(void * ntoskrn,void * image,void * alloc)函数是真正的入口点。)
我做了很多研究,但仍未能使其工作。我是内核模式驱动程序开发的菜鸟。
该项目使用(显然被忽略)选项
<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)中运行代码以限制它可能造成的损害
这不是普通的驱动程序,WDF直接支持的那种。它是一个“无人驾驶的驱动程序”,它使用了一个无证的黑客,它吸引那些编写rootkit以获得乐趣和利润的程序员。 DriverEntry()函数实际上不是驱动程序的入口点,而是回调函数。就像WinMain()函数实际上并不是本机Win32程序的入口点。项目源代码中的EntryPoint()函数是本机驱动程序入口点的替代品。请注意,该项目似乎具有类似rootkitty的行为,旨在欺骗检查驱动器序列号的简单复制保护方案。
GsDriverEntry()函数是普通KMDF驱动程序中的真正入口点。它执行必要的初始化以支持/GS compiler option,旨在检测缓冲区溢出。完成后,它调用DriverEntry()。该项目用EntryPoint()替换此入口点。
该项目是使用旧版Visual Studio项目模板编写的。要使其正确构建,需要进行一些更改:
在此之后,它建立清洁。我没有测试生成的hwid.sys,看起来有点太邪恶,无法将我的机器暴露给它。