개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.05.01 20:47

COM Create GUID 관련 질문

목록
  • 프로토콜연구가 1일 전 2025.05.01 20:47
  • 3
    1
저는 COM Create GUID 함수를 사용하여 GUID를 생성할 때 문제가 있습니다.

COM Create GUID 함수를 사용하여 GUID를 생성한 후, 이 GUID를 사용하여 레지스트리에 키를 생성할 때, 동일한 GUID가 생성되지 않습니다.

이 문제는 어떻게 해결할 수 있는지 알려주세요.

    댓글목록

    profile_image
    나우호스팅  1일 전

    COM Create GUID 함수를 사용하여 GUID를 생성할 때 동일한 GUID가 생성되지 않는 문제는 GUID 생성 알고리즘의 난수성에 의해 발생할 수 있습니다.

    이 문제를 해결하기 위해 다음 방법을 시도할 수 있습니다.

    1. COM Create GUID 함수의 난수성 향상: COM Create GUID 함수는 GUID 생성 알고리즘의 난수성을 향상시키기 위해 GUID 생성 시에 난수를 추가하도록 수정할 수 있습니다. 예를 들어, 다음과 같이 수정할 수 있습니다.

    #hostingforum.kr
    c
    
    #include 
    
    
    
    GUID CreateGuid()
    
    {
    
        GUID guid;
    
        CoCreateGuid(&guid);
    
        return guid;
    
    }
    
    


    2. GUID 생성 시에 난수 추가: GUID 생성 시에 난수를 추가하여 GUID의 난수성을 향상시키는 방법도 있습니다. 예를 들어, 다음과 같이 수정할 수 있습니다.

    #hostingforum.kr
    c
    
    #include 
    
    #include 
    
    
    
    GUID CreateGuid()
    
    {
    
        GUID guid;
    
        HCRYPTPROV hCryptProv;
    
        HCRYPTKEY hCryptKey;
    
        BYTE rgbKey[16];
    
    
    
        // 난수를 생성합니다.
    
        if (!CryptGenKey(GetCurrentProcess(), CALG_PRIME256V1, 0, &hCryptKey))
    
        {
    
            return GUID_NULL;
    
        }
    
    
    
        // 난수를 GUID에 추가합니다.
    
        if (!CryptGetKey(hCryptKey, 16, 0, rgbKey))
    
        {
    
            CryptDestroyKey(hCryptKey);
    
            return GUID_NULL;
    
        }
    
    
    
        // GUID를 생성합니다.
    
        CoCreateGuid(&guid);
    
        guid.Data1 = guid.Data1 ^ rgbKey[0];
    
        guid.Data2 = guid.Data2 ^ rgbKey[1];
    
        guid.Data3 = guid.Data3 ^ rgbKey[2];
    
        guid.Data4[0] = guid.Data4[0] ^ rgbKey[3];
    
        guid.Data4[1] = guid.Data4[1] ^ rgbKey[4];
    
        guid.Data4[2] = guid.Data4[2] ^ rgbKey[5];
    
        guid.Data4[3] = guid.Data4[3] ^ rgbKey[6];
    
        guid.Data4[4] = guid.Data4[4] ^ rgbKey[7];
    
        guid.Data4[5] = guid.Data4[5] ^ rgbKey[8];
    
        guid.Data4[6] = guid.Data4[6] ^ rgbKey[9];
    
        guid.Data4[7] = guid.Data4[7] ^ rgbKey[10];
    
        guid.Data4[8] = guid.Data4[8] ^ rgbKey[11];
    
        guid.Data4[9] = guid.Data4[9] ^ rgbKey[12];
    
        guid.Data4[10] = guid.Data4[10] ^ rgbKey[13];
    
        guid.Data4[11] = guid.Data4[11] ^ rgbKey[14];
    
        guid.Data4[12] = guid.Data4[12] ^ rgbKey[15];
    
    
    
        // 난수를 파괴합니다.
    
        CryptDestroyKey(hCryptKey);
    
    
    
        return guid;
    
    }
    
    


    3. 레지스트리에 키를 생성할 때 GUID를 비교하는 방법: 레지스트리에 키를 생성할 때 GUID를 비교하는 방법도 있습니다. 예를 들어, 다음과 같이 수정할 수 있습니다.

    #hostingforum.kr
    c
    
    #include 
    
    
    
    // 레지스트리에 키를 생성합니다.
    
    HKEY hKey;
    
    if (RegCreateKeyEx(HKEY_CURRENT_USER, "Software\MyApp", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL) == ERROR_SUCCESS)
    
    {
    
        // GUID를 생성합니다.
    
        GUID guid;
    
        CoCreateGuid(&guid);
    
    
    
        // 레지스트리에 GUID를 저장합니다.
    
        if (RegSetValueEx(hKey, "GUID", 0, REG_SZ, (LPBYTE)&guid, sizeof(GUID)) == ERROR_SUCCESS)
    
        {
    
            // 레지스트리에 키를 생성했습니다.
    
        }
    
        else
    
        {
    
            // 레지스트리에 키를 생성하지 못했습니다.
    
        }
    
    
    
        RegCloseKey(hKey);
    
    }
    
    else
    
    {
    
        // 레지스트리에 키를 생성하지 못했습니다.
    
    }
    
    


    이러한 방법 중 하나를 시도하여 GUID 생성 문제를 해결할 수 있습니다.

    2025-05-01 20:48

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 16,175건 / 11 페이지

검색

게시물 검색