В проекте используется (очевидно игнорируемый) параметр
<EntryPointSymbol>
для определения EntryPoint
в качестве записи.
Это задокументировано здесь , но текущая документацияПо-видимому, это означает, что это действительно только для проектов .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), чтобы ограничить ущерб, который он может нанести