none
Obtener nº serie fisico del disco duro con DiskDrivePhysicalMedia RRS feed

  • Pregunta

  • Hola chicos resulta que necesito extraer el numero de serie fisico de un disco duro para crear una llave de seguridad de mi programa.

     

     

    He leido por foros que el unico nº de serie valido y que no es volatil es el que graba el fabricante al fabricar el Disco.

     

    tambien que la unica manera de obtenerlo es con DiskDrivePhysicalMedia.

     

    Llegados ha este punto cree este codigo pero no consigo hacerlo funcionar. me da un error en :  Dim SerialNumber As String = mo("Serialnumber")

     

    agradeceria cualquier ayuda. gracias a todos

     

     

    Code Snippet

    Dim moReturn As Management.ManagementObjectCollection

    Dim moSearch As Management.ManagementObjectSearcher

    Dim mo As Management.ManagementObject

    moSearch = New Management.ManagementObjectSearcher("Select * from Win32_DiskDrivePhysicalMedia")

    moReturn = moSearch.Get

     

     

    For Each mo In moReturn

      If Not IsDBNull(mo) Then

        Dim SerialNumber As String = mo("Serialnumber")

        MsgBox(SerialNumber, MsgBoxStyle.Information, "Informacion")

      End If

    Next

     

     

     

    jueves, 26 de junio de 2008 16:59

Respuestas

  • esto funciona bien ..... pruebalo !!!!

    Lenin LG

    *********************************************************

    Imports System.Management

     

    Public Class Form1

     

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

     

    Dim physicalMedia As New ManagementClass("Win32_PhysicalMedia")

     

    For Each physicalMedium As ManagementObject In physicalMedia.GetInstances()

     

    If physicalMedium("SerialNumber") Is Nothing Then

    ' hacer nada

    Else

    txtSerialHDD.Text = CStr(physicalMedium("SerialNumber"))

    End If

    Next physicalMedium

     

    End Sub

     

    End Class

    sábado, 26 de julio de 2008 3:56
  • Hola Marc,

     

    debes hacer dos cosas:

     

    1) Agregar la referencia a System.Management.dll en referencias del proyecto.

    2) Agregar al principio del código y antes de la definición de la clase:

     

    Code Snippet

    Imports System.Management

     

     

    Espero que esto te sirva.

     

    Un saludo,

     

    Jorge

     

    domingo, 28 de septiembre de 2008 14:39

Todas las respuestas

  • Intenta esto, te devolverá los números de serie de todos los discos:

    Code Snippet

            Try
                Dim searcher As New ManagementObjectSearcher( _
                    "root\CIMV2", _
                    "SELECT * FROM Win32_LogicalDisk")

                For Each queryObj As ManagementObject In searcher.Get()

                    Debug.Print("-----------------------------------")
                    Debug.Print("Win32_LogicalDisk instance")
                    Debug.Print("-----------------------------------")
                    Debug.Print("VolumeSerialNumber: {0}", queryObj("VolumeSerialNumber"))
                Next
            Catch err As ManagementException
                MessageBox.Show("An error occurred while querying for WMI data: " & err.Message)
            End Try


    • Propuesto como respuesta Chuysoft sábado, 24 de octubre de 2009 0:33
    jueves, 26 de junio de 2008 18:01
  • Hola Felipe Santana.

     

    Gracias por tu aporte. Veras, resulta que ese planteamiento ya lo tenia probado y resulta que el numero que te da como numero de serie cuando se formatea cambia, incluso con algunos programas que trabajan con discos duros particionamientos ... recuperacion de datos ... se puede modificar.

     

    en cambio la Firma que hace el fabricante es unica y no se puede modificar. es como el DNI de cada disco duro.

     

    Por eso preguntaba por el Win32_DiskDrivePhysicalMedia.

     

     

    Gracias de nuevo amigo Felipe Santana

     

    viernes, 27 de junio de 2008 6:13
  • esto funciona bien ..... pruebalo !!!!

    Lenin LG

    *********************************************************

    Imports System.Management

     

    Public Class Form1

     

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

     

    Dim physicalMedia As New ManagementClass("Win32_PhysicalMedia")

     

    For Each physicalMedium As ManagementObject In physicalMedia.GetInstances()

     

    If physicalMedium("SerialNumber") Is Nothing Then

    ' hacer nada

    Else

    txtSerialHDD.Text = CStr(physicalMedium("SerialNumber"))

    End If

    Next physicalMedium

     

    End Sub

     

    End Class

    sábado, 26 de julio de 2008 3:56
  • Tengo copiado el codigo tal cual en visual studio 2008 y el namespace me lo reconoce pero las cosas como el magnamentobject no me lo reconoce Tongue Tied alguien sabe porque me podria estar pasando esto?
    domingo, 28 de septiembre de 2008 11:23
  • Hola Marc,

     

    debes hacer dos cosas:

     

    1) Agregar la referencia a System.Management.dll en referencias del proyecto.

    2) Agregar al principio del código y antes de la definición de la clase:

     

    Code Snippet

    Imports System.Management

     

     

    Espero que esto te sirva.

     

    Un saludo,

     

    Jorge

     

    domingo, 28 de septiembre de 2008 14:39
  •  

    -Muchas gracias.
    domingo, 28 de septiembre de 2008 14:41
  • Intenta esto, te devolverá los números de serie de todos los discos:

    Code Snippet

            Try
                Dim searcher As New ManagementObjectSearcher( _
                    "root\CIMV2", _
                    "SELECT * FROM Win32_LogicalDisk")

                For Each queryObj As ManagementObject In searcher.Get()

                    Debug.Print("-----------------------------------")
                    Debug.Print("Win32_LogicalDisk instance")
                    Debug.Print("-----------------------------------")
                    Debug.Print("VolumeSerialNumber: {0}", queryObj("VolumeSerialNumber"))
                Next
            Catch err As ManagementException
                MessageBox.Show("An error occurred while querying for WMI data: " & err.Message)
            End Try



    oye FSantana, y para sacar unicamente de la unidad C: ??
    sábado, 24 de octubre de 2009 0:35
  • esto funciona bien ..... pruebalo !!!!

    Lenin LG

    *********************************************************

    Imports

     

     

     

     

    System.Management

     

    Public

     

     

     

     

    Class Form1

     

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

     

    Dim physicalMedia As New ManagementClass("Win32_PhysicalMedia")

     

    For Each physicalMedium As ManagementObject In physicalMedia.GetInstances()

     

    If physicalMedium("SerialNumber") Is Nothing Then

    ' hacer nada

    Else

    txtSerialHDD.Text = CStr(physicalMedium("SerialNumber"))

    End If

    Next physicalMedium

     

    End Sub

     

    End

     

     

     

     

    Class


    y para sacar el de la unidad C: ???
    sábado, 24 de octubre de 2009 0:36