반응형

어플을 실행할때 중복 실행이 되지 않게 하기 위해 방지 하는 방법에 대해서 알아보자.
그 방법에는 FindWindow()를 이용하거나 EnumWindows()를 이용하는등의 방법이 있지만
Mutex를 이용하여 간단하게 처리 하는 방법에 대해 알아보도록 하자.



함수원형
HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL blnitialOwner, LPCTSTR lpName);

Argument
- lpMutexAttributes : Mutex의 보안속성을 지정, 주로 상속관계를 지정하기 위해 사용, 일반적으로 NULL
- blnitialOwner : 생성시 사용권한을 갖을것인지 여부,
- lpName : Mutex의 이름, Mutex 이름을 아는 다른 프로세스와의 동기화 가능, 유니크한 이름 지정.

CreateMutex는 생성한 Mutex의 핸들을 리턴하고
같은 이름의 Mutex가 생성되어 있을 경우 해당 뮤텍스 핸들을 리턴
GetLastError()로는 ERROR_ALREADY_EXIST값을 얻을수 있고
Mutex에 접근할 수 있는 권한이 없는 경우 (ERROR_ACCESS_DENIED)NULL 을 리턴한다.

이를 통해 위 소스를 이용하여 중복실행 방지를 할수 있는 것이다.
중요한것은 CreateMutex()를 통해 Mutex의 핸들을 리턴 받은 루틴 후에
GetLastError()를 확인했을때 ERROR_ALREADY_EXIST 값과 같다면 이미 실행되어 있다는 것이고
그렇다면 종료 루틴으로 흘러가게 되고 어플은 종료 되는 것이다.
참고로 게임이나 다중 실행 방지 처리가 되어 있는데 이런방식을 사용했다면 리버싱관점에서
이 부분을 뛰어 넘기면 멀티로더를 제작할수도 있을듯 하다.

+ Recent posts