在VB.net中获取USB记忆棒的唯一标识符

时间:2018-11-28 10:20:04

标签: vb.net

从我自己阅读和尝试过的东西开始,我开始认为这是不可能的。但是如果你不问就不要...

我正在制作一种工具,用于格式化工作人员的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向导,网络更像是我的事(我有时可能需要一些帮助-但我会尽力而为!)

0 个答案:

没有答案