使用 NET_LUID 索引
NDIS 提供函数来分配和释放创建 NET_LUID 值所需的 NET_LUID 索引。 NDIS 接口提供程序必须分配 NET_LUID 值才能注册接口。
若要分配 NET_LUID 索引,接口提供程序将调用 NdisIfAllocateNetLuidIndex 函数。 分配索引后,接口提供程序会调用 NDIS_MAKE_NET_LUID 宏来生成 NET_LUID 值。 若要释放 NET_LUID 索引,接口提供程序将调用 NdisIfFreeNetLuidIndex 函数。
NdisIfAllocateNetLuidIndex 尝试分配一个 24 位的值,该值与调用方在 IfType 参数指定的接口类型相关联,并且对于本地计算机是唯一的。 如果索引分配成功,NdisIfAllocateNetLuidIndex 将返回 NDIS_STATUS_SUCCESS,并在 pNetLuidIndex 参数中提供的地址处提供 NET_LUID 索引。 如果 NDIS 找不到可用的 NET_LUID 索引,NdisIfAllocateNetLuidIndex 将返回 NDIS_STATUS_RESOURCES。 NdisIfAllocateNetLuidIndex 可返回其他 NDIS 状态值,以指明 NDIS 中的内部错误。 当计算机以后重新启动时,NDIS 会记录此索引的分配。 即使在计算机重新启动之后,NDIS 也不会将特定索引用于以后的调用方,除非分配该索引的接口提供程序调用了该索引的 NdisIfFreeNetLuidIndex 函数。
NdisIfFreeNetLuidIndex 释放以前分配的 NET_LUID 索引,使 NDIS 可能将该索引重新分配给另一个接口。 调用方必须在调用 NdisIfAllocateNetLuidIndex 分配 NET_LUID 索引时,在 IfType 处传递该调用方使用的相同接口类型。 如果释放操作成功,NdisIfFreeNetLuidIndex 将返回 NDIS_STATUS_SUCCESS。 如果对 NdisIfFreeNetLuidIndex 的调用失败,接口提供程序应删除在永久性存储中保持的与 NET_LUID 索引相关的所有信息。 删除信息将确保提供程序不会继续尝试释放计算机每次重启后释放的索引。 调用 NdisIfFreeNetLuidIndex 后,调用方不得再次使用 NET_LUID 值,除非它再次为同一接口类型调用 NdisIfAllocateNetLuidIndex,并接收它所释放的同一 NET_LUID 索引。
若要注册网络接口,接口提供程序必须将有效的 NET_LUID 值传递到 NdisIfRegisterInterface 函数。 有关注册网络接口的详细信息,请参阅注册网络接口。