2015-01-26 10 views
0

Windows API의 SetProcessDEPPolicy 함수의 주소를 (see my problem here and the first answer I got)으로 찾으려고합니다.HANDLE에서 HINSTANCE 로의 변환이 올바르지 않음 (커널 함수 주소 얻기)

내가 조금 잃었어요하지만 지금까지이 그렇게하기 전에 나는 윈도우 C++ 프로그램을 작성한 적이

:

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") ; 
: 나는 7 줄에 다음과 같은 오류를 받고 있어요

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

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

Google에서이 문제를 해결하는 방법에 대한 아이디어가 없습니다.

(? 나는이 컴파일 일단, 어떻게 포인터에 주소를 인쇄 할 수 있습니다)

편집 : 주석에서 추가 사이클론의 제안, 점점 같은 오류가 Invalid conversion from HANDLE to HINSTANCE

+1

'FARPROC * funcAddr = (FARPROC의 *) 그 지적에 대한' – Cyclonecode

+0

@Cyclone 감사합니다,하지만 포인터로 선언함으로써 정확히 같은 오류가 발생합니다. 'HANDLE에서 HINSTANCE 로의 잘못된 대화 ' – Juicy

+0

이 오류는 잘못된 매개 변수를'GetProcAddress()'에 전달함으로써 발생합니다. 확실히 한 번에 해당 함수를 호출 한 다음 두 번째 함수에서 'FARPROC *'로 변환하십시오. https://msdn.microsoft.com/en-us/library/windows/desktop/ms683199%28v=vs.85%29.aspx에서이 함수는'HANDLE '이 아닌'HMODULE'을 반환합니다. –

답변

2

이것은 당신이해야하는 방법이다 그것은 :

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

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

아름답게 작동합니다! 고마워, 내가 할 수있는 시점을 줄 것이다. – Juicy