윈도우 API를 사용하다 실패하면 GetLastError()를 먼저 살펴보게 된다. {{{#!c DWORD WINAPI GetLastError(void); }}} GetLastError를 사용하면 가장 최근 실패한 에러코드를 반환한다. 따라서 API 실행이 실패한 이후 다른 API를 호출하면 GetLastError 값도 바뀔(덮어 쓸) 수 있기 때문에 실패한 API를 사용한 직후에 GetLastError를 사용해야 정확한 값을 알 수 있다. GetLastError는 ''현재 스레드의 마지막 에러 코드''를 반환한다. 따라서 멀티 스레드로 동작중이라고 해도 GetLastError 값이 덮어 써질 일은 없다. 윈도우의 스레드를 구성하는 세 가지 요소로는 스레드 커널 오브젝트, 스택, 스레드 환경 블록(TEB)이 있다. 이 중 TEB는 다른 요소들과 다르게 유저 모드 주소 공간에서 직접 접근 가능한 여러가지 스레드 환경 정보를 가지고 있는 데이터 구조체이며, TEB에 마지막 에러 코드를 기록하는 LastErrorValue를 포함하고 있다. http://www.codeproject.com/KB/threads/662735/TEB.JPG 즉, 스레드에서 API가 실패하면 스레드 환경 블록(TEB)의 LastErrorValue 에러코드를 기록한다. GetLastError를 호출하면 TEB의 LastErrorValue 값을 반환한다. ---- CategoryDocument