C# 硬件ID帮助

C# 硬件ID帮助,c#,.net,winapi,c#-2.0,hardware-id,C#,.net,Winapi,C# 2.0,Hardware Id,我正在使用C#和.NET2.0。我的应用程序需要某种方法来检查不同的用户,因此我将使用硬件id,但我发现我只能使用: mac地址-易于更改,并非每个人都有它//否 处理器id-使用WMI返回cpu型号的值,它不是唯一的//否 主板序列号-不是每个主板都有它//没有 Windows的卷序列-我不确定它是否会在Windows重新安装时更改,以及卷的格式 有什么我没有提到的吗?我想要的东西,每个人都有,它不会被删除的windows重新安装。否则我必须使用windows的卷序列号 编辑:从指令来看

我正在使用C#和.NET2.0。我的应用程序需要某种方法来检查不同的用户,因此我将使用硬件id,但我发现我只能使用:

  • mac地址-易于更改,并非每个人都有它//否
  • 处理器id-使用WMI返回cpu型号的值,它不是唯一的//否
  • 主板序列号-不是每个主板都有它//没有
  • Windows的卷序列-我不确定它是否会在Windows重新安装时更改,以及卷的格式
有什么我没有提到的吗?我想要的东西,每个人都有,它不会被删除的windows重新安装。否则我必须使用windows的卷序列号


编辑:从指令来看,我认为最好使用HDD id。如何获得它? EDIT2:我刚读到SCSI驱动器没有串行接口。这是真的吗


最终编辑:我已经在应用程序上使用根驱动器序列。它工作得很好。谢谢大家。

硬盘序列号:唯一、不可更改,每个人都有


这不是一个完美的选择,但…

我会选择不止一个id。如果你组合足够多的id,它们将为你提供足够的唯一性


编辑:您也可以选择您的程序也安装在硬盘上的位置(盘片、圆柱体等)

为什么要使用硬件Id?我自己会选择某种基于表单(或基于广告)的安全性

然而,考虑到这一点,HWID的问题在于它标识了特定的计算机配置:它被设计为在系统发生变化时进行更改。您提到Windows Volume Serial可能会在重新安装和重新格式化时发生更改,但您的软件不也必须在此时重新安装吗?如果用户出于某种原因更换HDD,HDD序列也可能发生变化


如果您必须使用HWID,您可能需要选择一个(或多个)可用选项以提供唯一性,并对需要重新安装和/或重新配置软件的硬件更改进行编码或通知用户。

MAC地址不太可靠。 您应该使用无法更改的东西,例如CPU ID或HDD IDE ID

这就是我的意思:



要回答您的问题,是的,SCSI没有硬件ID。

您需要考虑安全性还是可靠性,即用户是否想要篡改您的ID检查? 如果你需要(高)安全性,买一个“软件保护”产品,这比自己做要便宜得多

不需要高安全性?=> 另一种可能是使用用户或机器SID。您必须考虑到您的应用程序是在ELVATE=>用户是管理员的情况下执行的


最后但并非最不重要的一点:将一些字节的随机值写入HKEY_CURRENT_USER下的注册表(可能在不同位置),并将其用作ID。

您是指HDD序列,而不是逻辑驱动器(卷)序列?如果是这样,如何获得它?这不是一个好的选择,因为如果您使用的是(硬件)RAID,则无法获得该值。然后,如果用户仅更改其中一个组件,我将不得不续订其许可证。嗯,不是真的。如果您有足够的ID,您仍然可以识别用户。是的,但其目的是保护用户信息的副本。为了防止泄露用户/序列,什么是“基于表单(或基于广告)”的安全性?“基于表单”指的是必须登录(通过表单)才能使用应用程序的想法(通常用于web应用程序,但也可以在Windows应用程序上实现)。AD指的是活动目录;也就是说,挂接到公司的Active Directory服务器以检索用户权限。AD需要安装Active Directory(或类似的东西),forms security需要某种类型的数据存储(即使它在使用中的机器上是本地的)。