본문 바로가기

Study Memos/Windows Programming

Windows Event (Section 6)

참고> https://blog.naver.com/tipsware/221211432527

 

1. Win32 프로그램에서는 WinMain 함수가 시작 함수

2. 이벤트 객체는 0 또는 1(False 또는 True)의 상태를 기억할 수 있는 '커널 객체(운영체제가 관리하는 객체)'이다.

3. 같은 프로세스 내에 있는 스레드 간에는 변수(메모리)를 같이 사용할 수 있기 때문에 이벤트 이름을 굳이 지정하지 않아도 되지만,
서로 다른 프로세스에 있는 스레드 간에 이벤트 객체를 공유하고 싶다면 이벤트 이름을 만들어 두어야 한다.

4. 이벤트 객체를 생성할 때 이름을 동일하게 사용해서 이벤트 객체가 공유된다면 먼저 만들어진 이벤트 객체의 정보가 우선시 되기 때문에 
나중에 사용한 CreateEvent 함수의 bManualReset, bInitialState에 적은 매개 변수 값은 무시된다.

5. 이벤트 객체를 생성할 때 사용한 이름이 이벤트 객체가 아닌 다른 커널 객체(Semaphore, Mutex, Waitable timer, Job, File-Mapping 객체)에 사용되고 있다면
객체의 공유가 불가능하기 때문에 CreateEvent 함수는 실패하고 NULL을 반환한다.

====> 즉 !! 커널 객체는 다른 형식의 커널 객체와 이름을 공유할 수 없기 때문에 동일한 형식의 커널 객체 간에서만 공유 여부가 결정된다.

6. 다 사용한 이벤트 객체는 CloseHandle 함수로 해제해주자. 
만일 다른 프로세스에서 이 이벤트 객체를 사용하고 있다면 그 프로세스에서도 CloseHandle을 사용해야지만 이벤트 객체가 제거된다.

7. 이벤트 객체 관련 자주 쓰는 함수
CreateEvent: 이벤트 객체 생성
SetEvent: 이벤트 객체의 상태 설정 
WaitForSingleObject: 이벤트 객체의 상태 체크, Timeout을 주거나 Infinite 값을 주어서 다른 스레드와의 동기화를 할 수 있음
CloseHandle: 이벤트 객체 해제

 

8. 파일, 스레드, 이벤트와 같은 커널 객체들은 만들어질 때 '보안 기술자(Security Descriptor)'를 할당받는다.  
     이 '보안 기술자'에는 ACL 정보가 포함되어 있다. 

9. ACL(Access Control List): 여러 개의 ACE로 구성되어 있다. 

10. ACE(Access control Entry): 보안 ID와 접근 권한에 대한 정보로 이루어져 있다. 
===> 커널 객체를 사용하려면 ACL에 포함되어 있는 보안 ID와 접근 권한이 있어야 한다.

반응형

'Study Memos > Windows Programming' 카테고리의 다른 글

Bitmap (Section 13)  (0) 2020.08.27
Windows Message (Section 8)  (0) 2020.08.26
Windows Class (Section 7)  (0) 2020.08.24
HInstance (Section 5)  (0) 2020.08.24
Windows Handle (Section 3)  (0) 2020.08.24