Answered by:
Name of USB stick

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
CorMonday, 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 thisDim 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