在.NET中,有没有一种方法可以唯一地识别连接到Windows PC的任何存储介质?

8
我已经寻找了数周,想找到一种可以唯一标识连接到Windows PC的任何存储介质的方法。这尤其包括内部硬盘驱动器、外部硬盘驱动器、闪存驱动器、SD卡、智能手机存储等。不包括光盘。
基本上,我想做的是指定一种唯一的字符串与特定的存储设备绑定,这样无论驱动器字母如何更改,每次重新连接该存储设备时都可以自动检测到它。
我遇到的问题是:
  • 并非每个存储设备都有序列号。
  • 通过读卡器访问SD卡时,通过 ManagementObjectSearcher 类提供的信息与介质相关而非读卡器。
似乎有4个主要属性可以返回唯一信息,但并不总是如此。 SerialNumber , Caption , PNPDeviceID , Signature 肯定有一些Windows跟踪此类存储设备的方法。有什么建议吗?

您是否需要100%的唯一性,或者不支持的设备或低概率的身份冲突是否可以接受?如果可以接受,那么这些限制是什么? - Scott Chamberlain
@ScottChamberlain 嗯,如果可能的话,100%的独特性肯定是理想的。在搜索时我看到另一个建议是在设备上放置一个文件,并分配一个应用程序ID来将软件与存储设备链接起来。这很好,但在根目录没有写访问权限的设备上可能会有问题。 - cowsay
这听起来像是一个 XY 问题。一般来说,Windows 不关心您连接了什么类型的存储设备。大多数这些事情都在设备驱动程序层处理。那么,您真正想做什么,认为解决方案需要唯一 ID? - Eric Brown
1个回答

2

你能写入这些媒体吗?如果可以,那么在根目录中创建一个包含GUID的文件,并将该GUID的引用存储在你的应用程序中,如此便可使用该文件来唯一标识卷。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接