从我自己阅读和尝试过的东西开始,我开始认为这是不可能的。但是如果你不问就不要...
我正在制作一种工具,用于格式化工作人员的USB记忆棒(它会添加商标,说明,手册等)。在执行此操作的同时,我尝试将设备的“序列号/唯一标识符”存储在数据库中,以便我可以找到丢失的记忆棒,即使原来的所有者已被重新格式化,也可以找出谁是原始所有者!
我从SO上的另一个答案中得到了这个片段
Dim driveNames As New List(Of String)
For Each drive As DriveInfo In My.Computer.FileSystem.Drives
Try
Dim fso As Scripting.FileSystemObject
Dim oDrive As Scripting.Drive
fso = CreateObject("Scripting.FileSystemObject")
oDrive = fso.GetDrive(drive.Name)
ListBox1.Items.Add(drive.Name & " " & oDrive.SerialNumber)
Catch ex As Exception
End Try
Next
End Sub
这将返回一个数字,但是在格式化驱动器时会更改。
我还尝试修改我认为是从在线(CodeProject)获得的代码段。
'Check for valid drive letter argument.
ToolStripStatusLabel1.Text = "Fetching Device Serial ('" & DriveLetter & "' Validating drive letters)"
Dim ValidDriveLetters As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
If ValidDriveLetters.IndexOf(DriveLetter) <> -1 Then
If DriveLetter.Length = 1 Then
ToolStripStatusLabel1.Text = "Fetching Device Serial ('" & DriveLetter & "' Creating Disk Management Object)"
Dim Disk As New System.Management.ManagementObject("Win32_LogicalDisk.DeviceID=""" & DriveLetter & ":""")
ToolStripStatusLabel1.Text = "Fetching Device Serial ('" & DriveLetter & "' Creating Disk Property)"
Dim DiskProperty As System.Management.PropertyData
For Each DiskProperty In Disk.Properties
ToolStripStatusLabel1.Text = "Fetching Device Serial ('" & DriveLetter & "' Reading " & DiskProperty.Name & ": " & DiskProperty.Value & ")"
'Threading.Thread.Sleep(1000)
If DiskProperty.Name = "VolumeSerialNumber" Then
Return DiskProperty.Value.ToString '.ToString 'Return the volume serial number.
End If
Next DiskProperty
End If
End If
Return Nothing 'Invalid drive letter.
当前返回卷序列(我现在可以得到的最佳结果),格式化驱动器时显然会改变。
我已经浏览了属性名称,但是还没有找到可以唯一标识驱动器本身而不是驱动器卷的信息。
是否存在我可以读取的,对于每个设备来说都是唯一的属性? (甚至制造商/型号相同)
OR
我会以错误的方式处理吗?我还考虑过用隐藏分区对USB进行分区,然后存储该分区的卷序列。如果最终用户通过资源管理器格式化驱动器,他们只会擦除可见分区,而不是我的秘密隐藏分区……但这似乎是一种解决方法,而不是实际解决方案?
请注意,我不是VB.net向导,网络更像是我的事(我有时可能需要一些帮助-但我会尽力而为!)