簡體   English   中英

無法解析的外部符號-VC ++鏈接器

[英]Unresolved extenral symbol - VC++ Linker

我正在使用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;
}

如果您正在使用驅動程序,則最好在標題中使用:

#ifdef __cplusplus
extern "C" {
#endif

NTSTATUS DriverEntry(_In_ struct _DRIVER_OBJECT *DriverObject, _In_ PUNICODE_STRING RegistryPath);

#ifdef __cplusplus
}
#endif

或只是extern "C" NTSTATUS DriverEntry(_In_ struct _DRIVER_OBJECT *DriverObject, _In_ PUNICODE_STRING RegistryPath); 如果這是唯一需要使用C調用約定和符號修飾符導出的函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM