Lyn
조회 수 27210 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
#include <windows.h>
#include <cstdio>
#include <cstdlib>

bool isThreadWaiting(HANDLE ThreadHandle)
{
	bool Result = false;

	SuspendThread(ThreadHandle);
	CONTEXT ThreadContext;
	ThreadContext.ContextFlags = CONTEXT_CONTROL;
	BOOL a = GetThreadContext(ThreadHandle, &ThreadContext);
	INT_PTR* StackPointer = reinterpret_cast<INT_PTR*>(ThreadContext.Esp);

	HMODULE DLLHandle = LoadLibraryA("Ntdll.dll");
	INT_PTR WaitFunctionPtr = reinterpret_cast<INT_PTR>(GetProcAddress(DLLHandle, "NtWaitForSingleObject")); 
	//WaitForSingleObject의 종착점이 되는 함수가 NtWaitForSingleObject
	
	if ((*StackPointer >= WaitFunctionPtr) && (*StackPointer <= WaitFunctionPtr + 50))
	{
		//대충 +50을 해 주는 이유는 실제 복귀주소로 저장된 곳이 NtWaitForSingleObject의 시작주소가 아니라 조금 실행된 뒤이기 때문
		Result = true;		
	}

	FreeLibrary(DLLHandle);
	ResumeThread(ThreadHandle);

	return Result;
}

DWORD PASCAL ThreadFun1(PVOID Param)
{
	WaitForSingleObject(HANDLE(Param), INFINITE);

	return 0;
}

DWORD PASCAL ThreadFun2(PVOID Param)
{
	while(true)
	{
		Sleep(100000);
	}

	return 0;
}
void main()
{	
	HANDLE Event = CreateEvent(nullptr, TRUE, FALSE, nullptr);

	HANDLE Thread1 = CreateThread(nullptr, 0, &ThreadFun1, reinterpret_cast<LPDWORD>(Event), 0, nullptr);
	HANDLE Thread2 = CreateThread(nullptr, 0, &ThreadFun2, nullptr, 0, nullptr);

	Sleep(1000); //Thread 돌 시간좀 주고 ...

	printf("Is Thread1 Waiting? %s\n", isThreadWaiting(Thread1) ? "Yes" : "No");
	printf("Is Thread2 Waiting? %s\n", isThreadWaiting(Thread2) ? "Yes" : "No");

	system("pause");
}


sc1.png


Wait계열 함수가 몇종류 더 있는데 그것도 그냥 각자 처리해 주면 간단...


?

List of Articles
번호 제목 글쓴이 날짜 조회 수
157 현재 MSDN Download Page file Lyn 2013.09.23 19526
156 폰트 TTF와 OTF 그 역사의 아이러니함. Lyn 2015.06.30 2817
» 특정 Thread가 Wait계열 함수에 의해 Block 중인지 확인하기 file Lyn 2012.06.28 27210
154 컨테이너가 파괴될 때 소유한 객체 자동으로 파괴하기 Lyn 2008.10.22 36763
153 잠시후 한국시각 21일 0시부터 VS 2015 런칭행사를 합니다. Lyn 2015.07.21 2264
152 웹 개발 문서가 MDN으로 통합 Lyn 2017.12.05 689
151 요즘 공부를 안하니 쓸게 없네요 Lyn 2018.06.02 548
150 외주도 안하고 공부도 안하니 이 서버가 무용지물이 되어가고 있군요 Lyn 2018.09.18 766
149 왜 MemberFunction Pointer 를 cout 으로 출력하면 1이 나올까 Lyn 2017.03.27 1677
148 오랫만에 인증서 업데이트와 서버 이전 Lyn 2018.07.07 478
147 오랫만에 서버 업데이트... 인데 Lyn 2015.03.03 5758
146 프로그래밍 대회 알고리즘 파트 문제 2 secret Lyn 2008.11.22 15485
145 심심해서 만들어본 폰 요금 계산기 Lyn 2019.08.18 191
144 서버를 이전했습니다. Lyn 2014.08.19 28711
143 서버를 Windows 2012 R2로 교체 하였습니다. 1 Lyn 2013.09.29 22082
142 새해복 많이받으세요 Lyn 2019.02.05 291
141 새해다 ... Lyn 2012.01.01 28080
140 사이트에서 http2 프로토콜을 지원 하기 시작 했습니다. Lyn 2016.10.01 4320
139 사이트에 SSL 인증서를 적용 했습니다... 적용 방법 Lyn 2016.09.07 2071
138 사용중인 FireFox 플러그인. Lyn 2010.05.18 42342
Board Pagination Prev 1 2 3 4 5 6 7 ... 8 Next
/ 8