DLL에서 NamedPipe을 사용할 수 없습니다...!
글쓴이: jic5760 / 작성시간: 일, 2014/12/14 - 8:59오후
지금까지 여러 상황을 테스트 해서 좀더 원인에 접근하게 되었습니다...
우선 문제는...
CreateProcess으로 Suspend상태로 프로세스를 생성하고
그 프로세스에 LoadLibrary으로 DLL을 로드하고 DLL에서(DLL_PROCESS_ATTACH) CreateFile을 하는데 그러면 문제가 생깁니다.
생성한 프로세스의 Thread을 ResumeThread하는데 6(ERROR_INVALID_HANDLE) 오류가 납니다.
그런데 CreateFile은 잘 작동이 되구요...
그런데 새로 알아낸 것이 있습니다.
CreateFile에서 NamedPipe가 아니라 일반 파일 (D:\\test.txt) 같은 파일을 Open하면
이런 문제가 발생하지 않습니다.
NamedPipe을 Open하면 이런 현상이 생깁니다.....
참 이상하네요.. 하하하...;;;;;;
추가... MailSlot도 정상적으로 되네요... NamedPipe만.........
Forums:
MSDN에서...
microsoft social에도 질문을 올렸는데 답변이 올라왔네요~
http://msdn.microsoft.com/en-us/library/windows/desktop/dn633971(v=vs.85).aspx
이런 URL을 얻었습니다.
Create a named pipe or other named object (Windows 2000 only). In Windows 2000, named objects are provided by the Terminal Services DLL. If this DLL is not initialized, calls to the DLL can cause the process to crash.
Named Pipe을 만들때 DLL이 초기화 되기 전이면 문제가 생길 수 있다는거 같네요...
결국 Named Pipe는 포기해야 되겠습니다.ㅜㅜ
Mailslot같은것도 위험할거 같으니 그냥 일반 Pipe으로... (DuplicateHandle을 통해...)
댓글 달기