[Windows] Kernel Object 사용(mutex)

kimyb·2022년 12월 6일

Windows에서 고유한 프로세스별로 커널 개체 (Kernel Object)를 생성하고,

해당 개체의 핸들을 얻기위해, C++ 언어로 작성.
(핸들이 있어야, 커널 개체를 조작 할 수 있음.)

#include <windows.h>
#include <iostream>

int main() {
    // 프로세스 고유 이름 생성.
    DWORD processId = GetCurrentProcessId();
    wchar_t uniqueObjectName[256];
    swprintf_s(uniqueObjectName, sizeof(uniqueObjectName) / sizeof(wchar_t), L"MyUniqueMutex_%u", processId);

    // LPCWSTR 형식으로 변환.
    LPCWSTR lpUniqueObjectName = uniqueObjectName;

    // 뮤텍스를 생성.
    HANDLE hMutex = CreateMutexW(NULL, FALSE, lpUniqueObjectName);

    if (hMutex != NULL)
    {
        // 뮤텍스로 공유 리소스에 접근을 동기화.
        if (WaitForSingleObject(hMutex, INFINITE) == WAIT_OBJECT_0) 
        {
            std::cout << "공유 리소스에 접근 가능." << std::endl;

            // 뮤텍스를 해제.
            ReleaseMutex(hMutex);
        }
        else 
        {
            // WaitForSingleObject 호출이 실패한 경우
        }

        // 핸들 닫기.
        CloseHandle(hMutex);
    }
    else
    {
        // 뮤텍스 생성 실패
    }
    return 0;
}

생성된 커널 개체 핸들(hMutex)을 사용하여 해당 object를 제어 할 수 있다.

완료 되면, CloseHandle 함수를 사용하여 커널 개체 핸들을 해제 해야 함.

profile
공부했던것을 정리.

0개의 댓글