【发布时间】:2013-03-20 19:38:37
【问题描述】:
我已经在这段代码上工作了好几个小时,这让我发疯了!
完整的来源在这里 http://pastebin.com/Urxh68W4 但我很确定我知道问题所在。
extern "C" NTSYSAPI LONG NTAPI ZwUnmapViewOfSection(HANDLE, PVOID);
当我运行它时,我收到以下错误:
Error 1 error LNK2019: unresolved external symbol __imp__ZwUnmapViewOfSection@8 referenced in function _wWinMain@16
我猜我应该包含一些 dll 或库,所以我将 Ntoskrnl.lib 添加到我的项目中,因为它包含 ZwUnmapViewOfSection 函数。
我完全不知道该怎么做。我应该使用 Ntdll.dll 吗?如果是这样,我什至如何链接 dll?我以为你只能使用 Visual Studio 2010 中的库。
另外,NTSYSAPI 和 NTAPI 到底是什么?网上几乎没有任何信息。
【问题讨论】:
-
很可能一种是调用约定,一种是导出规范。
-
你能详细说明一下吗?你有点含糊。
-
您似乎正试图在用户模式程序中使用内核模式 API(用于驱动程序)中的函数。他们不一起去。如果您想了解有关内核模式 API 的信息,请获取 WDK(Windows 驱动程序工具包)。
-
msdn.microsoft.com/en-us/library/windows/hardware/… 说 包含在 Ntoskrnl.lib 中,所以我不确定您关心的是什么。它还说标头是 Wdm.h(包括 Wdm.h、Ntddk.h 或 Ntifs.h),但您没有将其包含在示例代码中。如果你没有这个文件,你可能应该得到 WDK/DDK 或任何包含它的东西。
-
@ta.speot.是肯定的。 Nt* 变体按惯例是首选,但 Zw* 调用无论如何都会映射到用户模式下的 Nt* 调用。它们仅在内核上有所不同。
标签: c++ windows linker linker-errors ntdll