C++ 定义函数指针
我正在尝试调用内部Windows NT API函数NtOpenProcess。我知道调用内部API可能是个坏主意,但是对于这个特定的工具,我需要这个API提供的低级访问 我的问题是,要使用这样的内部API,我需要使用运行时动态链接,如中所述 为此,我需要定义一个指向NtOpenProcess的函数指针。这是我的声明:C++ 定义函数指针,c++,function-pointers,C++,Function Pointers,我正在尝试调用内部Windows NT API函数NtOpenProcess。我知道调用内部API可能是个坏主意,但是对于这个特定的工具,我需要这个API提供的低级访问 我的问题是,要使用这样的内部API,我需要使用运行时动态链接,如中所述 为此,我需要定义一个指向NtOpenProcess的函数指针。这是我的声明: typedef NTSTATUS (NTAPI *_NtOpenProcess) ( OUT PHANDLE, IN ACCESS_MASK, IN POBJECT_ATTRIBU
typedef NTSTATUS (NTAPI *_NtOpenProcess) (
OUT PHANDLE,
IN ACCESS_MASK,
IN POBJECT_ATTRIBUTES,
IN PCLIENT_ID OPTIONAL);
class procManager
{
HINSTANCE hNTDLL;
public:
procManager()
{
hNTDLL = LoadLibrary(L"ntdll.dll");
if (!hNTDLL)
throw std::runtime_error("NTDLL.DLL failure.");
_NtOpenProcess NtOpenProcess;
NtOpenProcess = reinterpret_cast <_NtOpenProcess> (GetProcAddress(hNTDLL, L"NtOpenProcess"));
if (!NtOpenProcess)
throw std::runtime_error("NtOpenProcess not found.");
//Use NTOpenProcess for stuff here
};
~procManager()
{
FreeLibrary(hNTDLL);
};
};
导致另一个错误:
错误C2065:“\u NtOpenProcess”:
未声明的标识符
在这一点上,我说“当然它是未定义的,这就是为什么它是typedef!”
有人在声明中看到我的错误吗?是否包含“ntdef.h”和“ntstatus.h”?
编译器可能无法理解NTSTATUS。我想我确实理解了。。。但问题是->#如果取消NTSTATUS#定义长NTSTATUS#如果我切换了长NTSTATUS。谢谢从DDK获取ntdll.lib并静态链接。
typedef NTSTATUS (*_NtOpenProcess) (
OUT PHANDLE,
IN ACCESS_MASK,
IN POBJECT_ATTRIBUTES,
IN PCLIENT_ID OPTIONAL);