c++ - 从 HANDLE 到 HINSTANCE 的无效转换(获取内核函数的地址)

标签 c++ windows kernel32 getprocaddress

我试图在 kernel32 ( see my problem here and the first answer I got ) 中找到 Windows API 的 SetProcessDEPPolicy 函数的地址。

我以前从未写过 Windows C++ 程序,所以我有点迷茫,但到目前为止我有这个:

#include <windows.h>
#include <iostream>

int main(int argc, char* argv[])
{
    HANDLE kernel32 = GetModuleHandle("kernel32");
    FARPROC* funcAddr = (FARPROC *) GetProcAddress(kernel32, "SetProcessDEPPolicy");
    std::cout << "@ ";
}

我在第 7 行收到以下错误:

C:\Documents and Settings\John\Desktop>c++ finddep.cpp -o finddep.exe finddep.cpp: In function 'int main(int, char**)': finddep.cpp:7:79: error: invalid conversion from 'HANDLE {aka void*}' to 'HINSTA NCE' [-fpermissive]   FARPROC funcAddr = (FARPROC *) GetProcAddress(kernel32, "SetProcessDEPPolicy") ;
                                                                               ^
In file included from c:\mingw\include\windows.h:50:0,
from finddep.cpp:1: c:\mingw\include\winbase.h:1675:27: error:   initializing argument 1 of 'int (__ attribute__((__stdcall__)) * GetProcAddress(HINSTANCE, LPCSTR))()' [-fpermissive ]  WINBASEAPI FARPROC WINAPI GetProcAddress(HINSTANCE,LPCSTR);
^ finddep.cpp:7:79: error: cannot convert 'int (__attribute__((__stdcall__)) **)() ' to 'FARPROC {aka int (__attribute__((__stdcall__)) *)()}' in initialization   FARPROC funcAddr = (FARPROC *) GetProcAddress(kernel32, "SetProcessDEPPolicy") ;

我找不到任何关于如何从 Google 解决这个问题的好主意。

(一旦我得到这个编译,我怎样才能在指针中打印地址?)

编辑:从评论中添加了 Cyclone 的建议,得到相同的错误 Invalid conversion from HANDLE to HINSTANCE

最佳答案

这是你应该做的:

#include <windows.h>
#include <iostream>

int main(int argc, char* argv[])
{
    HMODULE kernel32 = GetModuleHandleA("kernel32");
    FARPROC *funcAddr = (FARPROC *)GetProcAddress(kernel32, "SetProcessDEPPolicy");
    std::cout << "@" << funcAddr;
}

关于c++ - 从 HANDLE 到 HINSTANCE 的无效转换(获取内核函数的地址),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28158329/

相关文章:

c++ 相当于 matlab max(find(array < x) 和 min(find(array > x)

c++ - 如何在 C++ 中指向函数

windows - 在 windows/direct3d 中使用来自 ttf 文件的字体

c# - GetPrivateProfileString 不工作.NET

windows - 获取Windows体系结构(32/64位版本)

c++ - std::move 操作 C++

C++实现AVL树

java - jstack 结果为 "Windbg Error: WaitForEvent failed"

c# - 如何抓取图像并将其保存在文件夹中[c# windows应用程序]

windows - XP 系统上的 GetProductInfo