VM에서 CoCreateGuid() 를 이용해서 GUID를 생성하는 경우 Guid가 중복 생성되는 현상이 있습니다.


테스트 방법을 요약하면 다음과 같습니다.


  1. VM에서 Windows를 Shutdown하지 않은 상태로 스냅샷 생성
  2. CoCreateGuid()를 여러번 호출하여 GUID를 생성하고 기록
  3. 1에서 생성한 스냅샷으로 Revert
  4. 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() 함수랑 다를게 별로 없네요 칫.)


Posted by kuaaan
,


사랑합니다. 편안히 잠드소서