构建时<wsk.h>中未解析的外部符号

问题描述 投票:0回答:1

我尝试使用Winsock内核并编写一个测试项目来设置wsk环境,但是在构建项目时发生错误,Visual Studio无法链接wsk函数的定义。

我以为是我的错,我的电脑上缺少一些标头,但我抓取了互联网上第一个使用 wsk.h 的项目,并且它已成功编译。 在此输入图片描述

#include <ntddk.h>
#include <wsk.h>


NTSTATUS registerWSKApp();
NTSTATUS wskAppWorkerRoutine();

NTSTATUS registerWSKApp()
{
    NTSTATUS status;

    WSK_CLIENT_NPI wskClientNpi{};

    wskClientNpi.ClientContext = NULL;
    wskClientNpi.Dispatch = &dispatchTable;
    status = WskRegister(&wskClientNpi, &wskRegistration);

    return status;
}


NTSTATUS wskAppWorkerRoutine()
{
    KdPrint(("[+] Call of wskAppWorkerRoutine!"));

    NTSTATUS status;

    WSK_PROVIDER_NPI wskProviderNpi;

    status = WskCaptureProviderNPI(
        &wskRegistration,
        WSK_NO_WAIT,
        &wskProviderNpi
    );

    if (!NT_SUCCESS(status))
    {
        if (status == STATUS_NOINTERFACE)
        {
            KdPrint(("[-] A requested WSK version is not supported!\n"));
            return status;
        }

        return status;
    }

    KdPrint(("[+] Succesfully capture NPI!\n"));

    //
    // 1. Create socket
    // 2. Bind socket
    // 3. listen socket
    // 4. accept connection
    // 5. receive data
    //

    WSK_APP_SOCKET_CONTEXT socketContext { 0 };
    //creation of socket
    status = createListeningSocket(&wskProviderNpi, &socketContext, NULL);

    if (!NT_SUCCESS(status))
    {
        KdPrint(("[-] Failed to create listening socket!\n"));
    }

    return status;
}   

我尝试通过尝试与此问题相关的所有编译器设置来解决 netiodef.h 中的问题,但这没有帮助

c++ driver winsock windows-kernel
1个回答
0
投票

如果您的链接器报告“wsk.h”和子标头中未解析的符号,您需要在其他依赖项中显式地将链接器指向“netio.lib”库。

我认为应该在 learn.microsoft.com 上的文章“注册 Winsock 内核应用程序”中添加信息

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