본문 바로가기

윈도우개발3

[Win32] 메시지 루프는 어떻게 창에 메시지를 전달할까? 하나의 윈도우 프로그램에는 여러 개의 창이 존재한다. 그리고 그 창에는 자기한테 들어온 메시지를 처리하기 위해 각자의 프로시저(Procedure)를 갖는다(엄밀히 창 클래스마다 프로시저를 갖는다). 그렇다면 어떻게 메시지 루프는 메시지에 알맞은 창을 찾을 수 있을까? 다음은 일반적인 윈도우 프로그램의 메인 메시지 루프(싱글스레드)이다. // Main message loop: while (GetMessage(&msg, nullptr, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } 메시지 큐에서 GetMessage로 메시지를 가져와 Transla.. 2022. 7. 31.
[Win32] 윈도우의 닫기 버튼을 눌렀을 때 일어 나는 일 (WM_CLOSE) 이번 포스트에서는 Win32 GUI프로그래밍을 공부하면서 거의 처음으로 배우는 내용인 윈도우가 닫힐 때 일어나는 일에 대해서 알아보겠다. 쌩으로 Win32부터 MFC, WTL까지 하다보니 좀 오래전에 공부해서 인지 가물가물하여 다시한번 리마인드 차원에서 정리해본다. Windows에서 창의 닫기 버튼을 눌렀을때 어떤일이 발생할까? 사용자가 닫기창이 눌렸을 때, 개발자는 많은 것을 고려해야 할 수 있다. 단순히 창을 hide할 것인지, 정말로 프로그램을 종료할 것 인지? 종료한다면 메모리정리, 리소스 정리, 사용자가 작업한 내용, 프로그램의 상태등을 안전하게 정리할 것인지 고려 해야 할 수 있을 것 이다. 닫기동작은 나름 그래서 중요하다고 생각한다. 그럼 닫기 버튼을 눌렀을 때 어떤 일이 발생할까? http.. 2022. 7. 31.
세션0(session 0) 격리 윈도우 서비스에 미치는 영향 세션0(session 0) 격리 윈도우 서비스에 미치는 영향 윈도우XP, Server 2003을 포함한 이전 버전에서는 모든 서비스가 같은 세션 0에서 실행 되었습니다. 세션 0에서 실행되는 서비스들과 유저 애플리케이션은 보안적인 문제가 있을 수 있었습니다. 서비스는 상승된 권한(Privilege)에서 실행되었으며 이러한 서비스들은 권한 상승을 노리는 악성프로그램에 대한 타겟이 되었기 때문입니다. 윈도우 비스타(Server 2008) 이후 버전에서는 세션0에서 실행되는 서비스들을 격리시키고 세션0를 비 대화식(noninteractive)형태로 만들어 보안적인 위협에 대응하게 되었습니다. 시스템 프로세스들과 서비스들은 오직 세션 0에서 실행 됩니다. 세션 0는 비디오 드라이버에 엑세스 할 수 없기 때문에 .. 2020. 4. 7.