我尝试使用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 中的问题,但这没有帮助
如果您的链接器报告“wsk.h”和子标头中未解析的符号,您需要在其他依赖项中显式地将链接器指向“netio.lib”库。
我认为应该在 learn.microsoft.com 上的文章“注册 Winsock 内核应用程序”中添加信息