locked
Name of USB stick RRS feed

  • Question

  • Hai,

     

    With this code i check the serial serialnumber of a usb stick.

     Public Function GetSerialNumberVista(ByVal DriveLetter As String) As String
            Dim wmiObj, wmiPartitie, wmiDisk, obj As ManagementObject
            Dim temp, Velden(), Resultaat As String
    
            Resultaat = ""
            wmiObj = New ManagementObject("Win32_LogicalDisk.DeviceID='" & DriveLetter.TrimEnd("\"c) & "'")     'Zoek de logische disk voor deze drive-letter
            For Each wmiPartitie In wmiObj.GetRelated("Win32_DiskPartition")     'Zoek de bijbehorende partitie
                For Each wmiDisk In wmiPartitie.GetRelated("Win32_DiskDrive")     ' Zoek de bijbehorende DiskDrive
                    Dim wmi As New ManagementClass("Win32_DiskDrive")
                    For Each obj In wmi.GetInstances
                        If obj("DeviceID").ToString = wmiDisk("DeviceID").ToString Then     'hebben we de drive gevonden?
                            temp = obj("PnPDeviceID").ToString     'Serienummer bevindt zich binnen PnPDeviceID
                            If Not temp.StartsWith("USBSTOR") Then
                                Throw New ApplicationException(DriveLetter & " is geen USB device")
                            End If
                            Velden = temp.Split("\&".ToCharArray)
                            Resultaat = Velden(Velden.Length - 2)
                        End If
                    Next
                Next
            Next
    
            Return Resultaat
        End Function
    
    
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            Dim usbSerieNummer As String = GetSerialNumberVista("G:\")
            TextBox1.Text = usbSerieNummer
    
     End Sub
     

    It is not perfect because the programma crash when there is no usb in de PC.


    But how do i search fot the sctick if it has a name , for example PPH ?

    And not G:\ , because it is everytime a different station.

    Monday, November 21, 2011 5:57 PM

Answers

  • Hello Fred

    Interesting code, 

    I've changed it a little bit and it runs, with no stick it tells not found (I've a UK setting).

    Imports System.Management
    Public Class Form1
        Public Function GetSerialNumberVista(ByVal DriveLetter As String) As String
            Dim temp, Velden(), Resultaat As String
            Try
                Dim wmiObj As New ManagementObject("Win32_LogicalDisk.DeviceID='" & DriveLetter.TrimEnd("\"c) & "'")     'Zoek de logische disk voor deze drive-letter
                For Each wmiPartitie As ManagementObject In wmiObj.GetRelated("Win32_DiskPartition")     'Zoek de bijbehorende partitie
                    For Each wmiDisk As ManagementObject In wmiPartitie.GetRelated("Win32_DiskDrive")     ' Zoek de bijbehorende DiskDrive
                        Dim wmi As New ManagementClass("Win32_DiskDrive")
                        For Each obj In wmi.GetInstances
                            If obj("DeviceID").ToString = wmiDisk("DeviceID").ToString Then     'hebben we de drive gevonden?
                                temp = obj("PnPDeviceID").ToString     'Serienummer bevindt zich binnen PnPDeviceID
                                If Not temp.StartsWith("USBSTOR") Then
                                    Throw New ApplicationException(DriveLetter & " is geen USB device")
                                End If
                                Velden = temp.Split("\&".ToCharArray)
                                Resultaat = Velden(Velden.Length - 2)
                            End If
                        Next
                    Next
                Next
                Return Resultaat
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            Return Resultaat
        End Function
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            'Houdt er rekening mee de goede drive letter te zetten
            Dim usbSerieNummer As String = GetSerialNumberVista("F:\")
            TextBox1.Text = usbSerieNummer
        End Sub
    End Class
    


     

     


    Success
    Cor
    • Proposed as answer by Carmelo La Monica Monday, November 21, 2011 8:59 PM
    • Marked as answer by KeesBlunder Wednesday, November 23, 2011 6:56 AM
    Monday, November 21, 2011 6:34 PM

All replies

  • Hello Fred

    Interesting code, 

    I've changed it a little bit and it runs, with no stick it tells not found (I've a UK setting).

    Imports System.Management
    Public Class Form1
        Public Function GetSerialNumberVista(ByVal DriveLetter As String) As String
            Dim temp, Velden(), Resultaat As String
            Try
                Dim wmiObj As New ManagementObject("Win32_LogicalDisk.DeviceID='" & DriveLetter.TrimEnd("\"c) & "'")     'Zoek de logische disk voor deze drive-letter
                For Each wmiPartitie As ManagementObject In wmiObj.GetRelated("Win32_DiskPartition")     'Zoek de bijbehorende partitie
                    For Each wmiDisk As ManagementObject In wmiPartitie.GetRelated("Win32_DiskDrive")     ' Zoek de bijbehorende DiskDrive
                        Dim wmi As New ManagementClass("Win32_DiskDrive")
                        For Each obj In wmi.GetInstances
                            If obj("DeviceID").ToString = wmiDisk("DeviceID").ToString Then     'hebben we de drive gevonden?
                                temp = obj("PnPDeviceID").ToString     'Serienummer bevindt zich binnen PnPDeviceID
                                If Not temp.StartsWith("USBSTOR") Then
                                    Throw New ApplicationException(DriveLetter & " is geen USB device")
                                End If
                                Velden = temp.Split("\&".ToCharArray)
                                Resultaat = Velden(Velden.Length - 2)
                            End If
                        Next
                    Next
                Next
                Return Resultaat
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            Return Resultaat
        End Function
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            'Houdt er rekening mee de goede drive letter te zetten
            Dim usbSerieNummer As String = GetSerialNumberVista("F:\")
            TextBox1.Text = usbSerieNummer
        End Sub
    End Class
    


     

     


    Success
    Cor
    • Proposed as answer by Carmelo La Monica Monday, November 21, 2011 8:59 PM
    • Marked as answer by KeesBlunder Wednesday, November 23, 2011 6:56 AM
    Monday, November 21, 2011 6:34 PM
  • Hai Cor,

    Thanks works great.

     

    Do you also have a anser to my second question.

     

    How do i search for the stick if it has a name , for example PPH ?

    And not F:\ , because it is everytime a different station.

    Monday, November 21, 2011 8:19 PM
  • Kees,

    If I had that answer I had given it to you, I did not even know about this code and was currious if it would run, I needed to do some small changes like you saw.

    However, maybe is this tool helpful for you, with this wmi code you can also check what the different drive letters mean.

    To be honnest, I did not even know that you can give a memorystick a name.

    http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=8572


    Success
    Cor
    Monday, November 21, 2011 10:14 PM
  •  

    Hai Cor,

    Yes you can give it a name, in My Computer rightclick on the stick en choose rename then put PPH or something that you want.

     

    This works,

     Dim getInfo As System.IO.DriveInfo()
            getInfo = System.IO.DriveInfo.GetDrives
            For Each info As System.IO.DriveInfo In getInfo
                If info.DriveType = System.IO.DriveType.Removable Then
                    If info.VolumeLabel = "PPH" Then
    
                        Label1.Text = (info.Name)
    
    
                    End If
                End If
            Next
            
             
    

    Then i put this

     Dim usbSerieNummer As String = GetSerialNumberVista(Label1.Text)
            Label1.Text = usbSerieNummer
                    If Label1.Text = ("162682804") Then
                Form2.Show()

     

     

     

     

    Tuesday, November 22, 2011 7:43 AM
  • To get the Plug and play device ID ( PnPDeviceID ) from the Drive letter or from the volume name here an example

    NB: the  PnPDeviceID  is not the manufacturer serial number

     

    
    Imports System.Management
    
    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            TextBox1.Text = GetLogicalDriveSerialNumber("E:", "") ' From the drive letter
            TextBox2.Text = GetLogicalDriveSerialNumber("", "PPH") 'From the volume name
        End Sub
    
        Public Function GetLogicalDriveSerialNumber(ByVal DriveName As String, ByVal VolumeName As String) As String
            Dim MC As New ManagementClass(New ManagementPath("Win32_LogicalDisk"))
            Dim MOC As ManagementObjectCollection = MC.GetInstances
            If DriveName <> "" Then
                For Each MBO As ManagementObject In MOC
                    If CStr(MBO.Item("Name")) = DriveName Then
                        Dim FirstPartition As ManagementObject = DirectCast(MBO.GetRelated("Win32_DiskPartition")(0), ManagementObject)
                        Dim PhysicalDrive As ManagementObject = DirectCast(FirstPartition.GetRelated("Win32_DiskDrive")(0), ManagementObject)
                        Return CStr(PhysicalDrive.Item("PNPDeviceID"))
                    End If
                Next
            ElseIf VolumeName <> "" Then
                For Each MBO As ManagementObject In MOC
                    If CStr(MBO.Item("VolumeName")) = VolumeName Then
                        Dim FirstPartition As ManagementObject = DirectCast(MBO.GetRelated("Win32_DiskPartition")(0), ManagementObject)
                        Dim PhysicalDrive As ManagementObject = DirectCast(FirstPartition.GetRelated("Win32_DiskDrive")(0), ManagementObject)
                        Return CStr(PhysicalDrive.Item("PNPDeviceID"))
                    End If
                Next
            End If
            Return Nothing
        End Function
    
    End Class
    

     

    Tuesday, November 22, 2011 8:49 AM