DLL에서 CreateFile을 하면 문제가 생깁니다.ㅠㅠ
Main프로그램에서 Sub프로그램을 SUSPENDED 상태로 프로세스를 생성한 뒤 DLL을 Inject(LoadLibrary)하고
RemoteOps(http://www.codeproject.com/Tips/139349/Getting-the-address-of-a-function-in-a-DLL-loaded)을 이용해서
DLL내부 함수의 주소를 알아낸다음 그 함수를 실행(CreateRemoteThread)합니다.
그 함수에서는 CreateFile을 합니다.
그런데 그 뒤 Main프로그램에서 Sub프로그램의 메인쓰레드를 ResumeThread하는데...
(수정 : DLL_PROCESS_ATTACH할때 CreateFile을 해도 이러네요...)
INVAILD HANDLE (오류번호 6번) 을 밷어버리면서 안됩니다...
ResumeThread을 하면 원래 뜨려던 Window가 떠야 하는데 나오지 않고 이렇게 오류가 뜨네요...
어떻게 해야 할까요?? 이유도 모르겠습니다..ㅠㅠ
CreateFile을 빼면 잘 됩니다...
그 함수 내에서 CreateThread같은 API는 작동하는데, CreateFile는 작동은 하지만 ResumeThread가 안됩니다..
새로 Thread을 만들어서 그 안에서 CreateFile을 해도 안되구요...
도대체 왜 이럴까요??
CreateFile을 빼고 정상적으로 ResumeThread을 한 뒤에는 그 Sub프로그램에서 CreateFile은 잘 작동합니다.
(수정 :
MSDN에
During process startup and DLL initialization routines, new threads can be created,
but they do not begin execution until DLL initialization is done for the process.
이런말이 있다네요...)
댓글 달기