Я использую WDM для создания простого драйвера. (У меня установлена последняя версия WDK, а также последняя версия Visual Studio 2017).
Проблема в том, что когда дело доходит до сборки решения, оно просто не проходит компоновщик и возвращает ошибку 2019 (нажмите здесь, чтобы узнать об этом подробнее, если вы не знакомы с ошибкой), и там написано, что _DriverEntry@8 является неразрешенным внешним символ, указанный в функции _GsDriverEntry@8, а файл называется BufferOverflowFastFailK.lib.
Вот как я написал подпись своей функции: NTSTATUS DriverEntry(_In_ struct _DRIVER_OBJECT *DriverObject, _In_ PUNICODE_STRING RegistryPath)
Кто-нибудь знает, как это исправить?
РЕДАКТИРОВАТЬ: Вот мой код:
#include "ntddk.h"
UNICODE_STRING DeviceName = RTL_CONSTANT_STRING(L"\\Device\\deviceone");
UNICODE_STRING SymLinkName = RTL_CONSTANT_STRING(L"\\??\\deviceonelink");
PDEVICE_OBJECT DeviceObject = NULL;
void Unload(PDRIVER_OBJECT DriverObject) {
IoDeleteSymbolicLink(&SymLinkName);
IoDeleteDevice(DeviceObject);
KdPrint(("Driver unloaded"));
}
NTSTATUS DriverEntry(_In_ struct _DRIVER_OBJECT *DriverObject, _In_ PUNICODE_STRING RegistryPath) {
NTSTATUS status;
DriverObject->DriverUnload = Unload;
status = IoCreateDevice(DriverObject, 0, &DeviceName, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &DeviceObject);
if (!NT_SUCCESS(status)) {
KdPrint(("Couldn't create device"));
return status;
}
status = IoCreateSymbolicLink(&SymLinkName, &DeviceName);
if (!NT_SUCCESS(status)) {
KdPrint(("Failed to create symbolic link"));
IoDeleteDevice(DeviceObject);
return status;
}
KdPrint(("Driver has been loaded"));
return status;
}
dumpbin /symbols
, чтобы проверить, чем он отличается от ожидаемого символа. - person PeterT   schedule 21.12.2018extern "C"
впереди - person PeterT   schedule 21.12.2018