Game Dev/Work Log

OpenProcess using Native API

AKer 2011. 7. 6. 18:17
반응형
빌어먹을 VC6은 OpenProcess API를 지원하지 않는다. 따라서 Thread ID를 HANDLE로 변환시킬 방법이 없는데 검색 결과 Native API(=공개되지 않은 Kernel API)를 사용하여 HANDLE을 얻어와야 한다. 

원문 : 
http://www.codeguru.com/forum/showthread.php?t=329867
typedef DWORD (WINAPI*OTFUNC)(HANDLE*,DWORD,void*,void*);
HANDLE OpenThread_VC6(DWORD dwThreadID, BOOL bInherit)
{
	HANDLE hThread = NULL;
	DWORD struct1[] = {0x18, 0, 0, 0, 0, 0};
	DWORD struct2[] = {0,dwThreadID};
	HMODULE hLib = LoadLibrary(TEXT("ntdll.dll"));
	
	OTFUNC OpenThatNTThread =
		(OTFUNC)GetProcAddress(hLib, TEXT("NtOpenThread"));
	
	struct1[3] = bInherit;
	OpenThatNTThread(&hThread, THREAD_ALL_ACCESS, struct1, struct2);
	FreeLibrary(hLib);
	return hThread;
}

 참고 (Native API)
- Native API 설명 : http://en.wikipedia.org/wiki/Native_API
- Native API 정리 : http://undocumented.ntinternals.net/
* Native API는 비공식 API이므로 MS가 사전 동의나 공지없이 Interface 등을 변경할 수 있다.


 
반응형

'Game Dev > Work Log' 카테고리의 다른 글

Gwen Library 설치  (0) 2012.12.08
Horizon Occlusion  (0) 2011.07.06
GPU Gems3 - Vegetaion Procedural Animation and Shading in Crysis  (0) 2011.07.01
Rain Post Processing  (0) 2011.07.01