VM에서 CoCreateGuid() 를 이용해서 GUID를 생성하는 경우 Guid가 중복 생성되는 현상이 있습니다.
테스트 방법을 요약하면 다음과 같습니다.
- VM에서 Windows를 Shutdown하지 않은 상태로 스냅샷 생성
- CoCreateGuid()를 여러번 호출하여 GUID를 생성하고 기록
- 1에서 생성한 스냅샷으로 Revert
- CoCreateGuid()를 여러번 호출하여 GUID를 생성하고 기록한 후 2에서 기록한 GUID와 비교
결과는 다음과 같습니다.
붉은 색 박스친 부분이 스냅샷을 Take하거나 Revert한 이후에 생성된 GUID값들입니다.
완벽하게 일치하는 것을 볼 수 있습니다.
나타난 현상으로 요약하건대 다음과 같은 방식인 것 같습니다.
동일 PC에서 동일한 시각에 부팅된 경우, CoCreateGuid() 호출 횟수(몇번째 호출인지?)가 동일하면 생성되는 GUID값도 동일하다.
MSDN에 보면 다음과 같이 되어 있습니다.
The CoCreateGuid function calls the RPC function UuidCreate, which creates a GUID, a globally unique 128-bit integer. Use CoCreateGuid when you need an absolutely unique number that you will use as a persistent identifier in a distributed environment.To a very high degree of certainty, this function returns a unique value – no other invocation, on the same or any other system (networked or not), should return the same value.
음... 저 말을 그대로 믿으면 큰일날 것 같습니다. ㅡ.ㅡ
(예전에 사용하던 rand() 함수랑 다를게 별로 없네요 칫.)
'C++' 카테고리의 다른 글
CreateFile 시 DesiredAccess와 ShareMode의 관계 (2) | 2013.07.31 |
---|---|
파일이 수정 (삭제) 가능한 상태인지 체크하는 방법 (How to Determine a File is Writable or Deletable) (2) | 2013.07.18 |
CreateProcessAsUser 시 ACCESS_DENIED 문제 (0) | 2013.06.13 |
DLL / LIB 에서의 함수 Export 시 Name Mangling (Decoration) 규칙 (0) | 2012.05.08 |
서비스를 svchost에 따로 실행하기 (0) | 2011.07.27 |