DLL에서 CreateFile을 하면 문제가 생깁니다.ㅠㅠ

jic5760의 이미지

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.
이런말이 있다네요...)