Skip to content

Windows 内核中的 LUID 是什么?它为什么如此古怪?

原文:In the Windows kernel, what is a LUID, and what makes it loo-ey?
日期:2024年8月30日

在 Windows 内核中,你会看到一个称为 LUID 的东西,通常发音为 /loo-id/。内核文档说

LUID 结构是一种不透明结构,它指定一个保证在本地计算机上唯一的标识符。有关详细信息,请参阅 Microsoft Windows SDK 文档中 LUID 的参考页。

如果你前往 Windows SDK 文档,你会得到

描述适配器的本地标识符。

备注
该结构体被 ID3D12Device::GetAdapterLuid 和 GetSharedResourceAdapterLuid 方法使用。

不知何故,显示驱动程序人员接管了LUID文档,并使其成为与显示驱动程序相关的内容。就好像文件系统团队已经接管了LARGE_INTEGER文档,并使其说“LARGE_INTEGER结构体以字节为单位保存文件大小”,因为GetFileSizeEx函数使用LARGE_INTEGER结构来实现此目的。

实际上,LUID是一种保存 64 位整数(分为两个 32 位的部分)的结构。这个 64 位整数是“本地唯一的”,从某种意义上说,在系统重新启动之前,它不会与从同一系统生成的任何其他LUID匹配。

你可以通过调用AllocateLocallyUniqueId来请求为你生成LUID

由于LUID仅对系统是唯一的,因此你不应该将它们发送到其他系统(因为它们在那里不是唯一的)。由于LUID在系统重启时会丢失唯一性,因此你不应该将它们保存在任何持久位置,因为它们在重启后没有意义。LUID的用途是让系统识别其生存期不会超过重新启动的事物。