UuidCreateSequential的怪异行为【JAVA教程】

!
也想出现在这里? 联系我们
信息

UuidCreateSequential的怪异行为,第1张

概述UuidCreateSequential的怪异行为

我有一个运行在我公司2000多台电脑的软件,没有任何问题。

此软件有时使用UuIDCreateSequential() ( MSDN链接 )生成一个GUID (或UUID )。

该调用通常在每台计算机上返回RPC_S_OK 。 但是在其中之一,它总是返回RPC_S_UUID_LOCAL_ONLY 。

该文件指出:

如何将python中的.place()方法转换为java?

在Python 2.7.6上的Guppy / Heapy

我怎样才能在后台启动一个进程?

驱动器select框与windows窗体中的图标

以编程方式查看移动式电脑(笔记本电脑/平板电脑/等)是否连接到扩展坞

当原始计算机没有以太网/令牌环(IEEE 802.x)地址时,UuIDCreateSequential函数返回RPC_S_UUID_LOCAL_ONLY。

但是,这台电脑似乎没有networking问题。 它有一个既有效又唯一的MAC地址和IP地址的网卡,并且工作正常。

还有什么可能导致UuIDCreateSequential()总是返回RPC_S_UUID_LOCAL_ONLY ? 你有没有经历过类似的情况?

我可以帮助,有问题的电脑运行一个更新的windows XP,与Service Pack 3。

在确定菜单项目的位置时是否有任何标准要遵循?

正则Expression式匹配下级login名称

在windows中检测全屏应用程序退出

如何在Java中find“我的文档”文件夹

是否有可能知道JFrame是否完全可见?

我联系了微软,似乎这个错误只发生在windows XP上,当MAC地址的第一个字节高于或等于0x80 。

windows Vista和windows 7已经修复了这个问题。 它不会被修复的windows XP。

这是windows XP和windows server 2003中的一个错误。

MAC地址是48位,通常表示为:

00-01-02-0A-0B-0C 00:01:02:0a:0b:0c

前三个字节代表一个Organziation ,其余三个字节是组织要使用的任何编号方案。 组织ID是由IEEE颁发的。

对于所有公共MAC地址,第一个字节的第二低位(第二低位位)将为零。 如果您想要生成您自己的本地 MAC地址,您可以将该位设置为1:

00-01-02-0A-0B-0C 00000000-00000001-00000010-00001010-00001011-00001100 ^ | +- 0: Universal 1: Locally administered

或从维基百科解除的图像:

windows检查了错误的位

windows XP和windows server 2003中的错误是他们正在检查错误的位。 他们错误地检查了高位 :

我讨厌把雷蒙德放在公共汽车下面,但这是一个不正确信息的例子 :

最后48位是计算机网卡的唯一地址。 如果计算机没有网卡,则设置最高位,并使用随机数发生器作为另一个47位。没有有效的网卡在其地址中设置最高位 ,因此不可能从一个生成的GUID没有网卡的计算机将意外地与从具有网卡的计算机生成的GUID冲突。

强调我的。 更正是说:

…设置第二个最低有效位…没有有效的网卡将设置第二个最低有效位。

测试

我在我的电脑上测试了这个。 我的电脑有一个MAC地址:

‎C8-60-00-12-34-56 (Ok,i changed the serialized number,but it is a Realtek)

如果我们遵循windows XP规则,这个MAC地址将被“本地管理” ,并且UuIDCreateSequential将返回RPC_S_UUID_LOCAL_ONLY

当我在windows 7上运行UuIDCreateSequential时,它运行正常:

{FBE65AFC-2588-11E5-9F09-C86000123456} {FBE65AFD-2588-11E5-9F09-C86000123456} {FBE65AFE-2588-11E5-9F09-C86000123456} {FBE65AFF-2588-11E5-9F09-C86000123456}

但是,如果我运行它在windows XP机器上具有相同(或类似)的MAC地址:

该功能失败:

0x720仅在此计算机上有效的UUID已被分配。

固定

检查MAC地址的错误位的错误记录在:

KB2569646:UuIDCreateSequential API可能会返回RPC_S_UUID_LOCAL_ONLY(1824)错误。

发生此问题是因为如果MAC地址的第一位是ON(1)UuIDCreateSequential API错误地将MAC地址识别为无效地址。

在UuIDCreateSequential中也记录了这一点:

KB981080:在具有有效网络适配器地址的计算机上使用UUIDGEN.exe命令或UuIDCreateSequential函数时收到警告 :

出现此问题的原因是 *** 作系统错误地评估网络适配器的MAC地址。

有一个相关的修复程序,但我不相信它是固定的(即没有在服务包中的正式修复)。

你有三个选择:

在您的windows XP设置中更改您的MAC地址不具有高位设置

升级到windows Vista或更新版本

如果该函数返回RPC_S_UUID_LOCAL_ONLY ,并且在windows Vista( DWMajor < 6 )之前,则假定它实际上已成功( 危险!

也许这是一个安全问题,是用户打电话给管理员? 否则,NIC驱动程序可能无法提供MAC地址。

只要UUID用于该机器的本地,那么接受这个错误作为一个有效的结果可能是好的。

如果UUID必须保证全球唯一(例如资产注册),那么询问另一个框(例如注册服务器)可能是更好的主意。

总结

以上是内存溢出为你收集整理的UuidCreateSequential的怪异行为全部内容,希望文章能够帮你解决UuidCreateSequential的怪异行为所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞168 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容