首页 > 解决方案 > UuidCreate 和 CoCreateGuid 的区别

问题描述

从 Win32 API调用UuidCreateCoCreateGuid创建的 UUID 有区别吗?

文档说 CoCreateGuid 只是调用了 UuidCreate,但是文档中的备注却大相径庭。
只有 CoCreateGuid 特别提到了用例:

[...] 您将在分布式环境中用作持久标识符的绝对唯一编号。

而 Uuidcreate 则专注于解释不可追溯性:

[...] 生成的 UUID 无法追溯到生成它的计算机的以太网地址。它也不能与在同一台计算机上创建的其他 UUID 关联。

我认为差异可能只是历史性的,文档提到 UuidCreate 在过去某个时候出于安全原因从基于 MAC 的版本 1 UUID 更改为随机的不可追踪版本 4。如果需要基于 MAC 的 UUID,则引入了 UuidCreateSequential。

如果是这样,UuidCreate 的返回值(RPC_S_OK、RPC_S_UUID_LOCAL_ONLY、RPC_S_UUID_NO_ADDRESS)现在只是为了遗留兼容性而包含在内,并且基本上已经过时了?

有人知道更多吗?据我所知,没有区别。

标签: c++winapiuuid

解决方案


CoCreateGuid调用UuidCreate

UuidCreate曾经是唯一的函数,它是一个类型 1 (mac + datetime) uuid。

后来,一个孩子写的软件因为 MAC 地址被追溯到他的笔记本电脑后被捕,Windows Vista 变成UuidCreate4 类(随机)uuid。

微软将其添加UuidCreateSequential为遗留类型 1 uuid。

出于安全原因,对 UuidCreate进行了修改,使其不再使用机器的 MAC 地址来生成 UUID。引入UuidCreateSequential是为了允许使用机器以太网卡的 MAC 地址创建UUID 。


推荐阅读