Utilizando el FSO:

Dim FileWsh As Object
Set FileWsh = CreateObject(”Scripting.FileSystemObject”)
MsgBox “Número de Serie del Volumen en Hexadecimal: ” & Hex$(FileWsh.Drives(”C”).SerialNumber)
MsgBox “Número de Serie del Volumen en decimal: ” & FileWsh.Drives(”C”).SerialNumber
Set FileWsh = Nothing

Utilizando API:

Private Declare Function GetVolumeSerialNumber Lib “kernel32″ Alias “GetVolumeInformationA” (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Sub VolumeSerialNumber()
Dim VolLabel As String
Dim VolSize As Long
Dim Serial As Long
Dim MaxLen As Long
Dim Flags As Long
Dim Name As String
Dim NameSize As Long
Dim S As String
Dim Ret As Boolean
Ret = GetVolumeSerialNumber(”C:\”, VolLabel, VolSize, Serial, MaxLen, Flags, Name, NameSize)
If Ret Then
S = Format(Hex(Serial), “00000000″)
MsgBox “Serie del Volumen: ” & Left(S, 4) + “-” + Right(S, 4)
Else
MsgBox “0000-0000″
End If
End Sub

Utilizando WMI. Con WMI tienes varias clases que se refieren a los discos: Win32_DiskDrive que representa al disco fisico, Win32_LogicalDisk que representa al disco logico y Win32_PhysicalMedia que representa un medio fisico de almacenamiento. Con la propiedad VolumeSerialNumber de Win32_LogicalDisk obtienes el # de serie dado al formatear el disco logico. La propiedad Signature de Win32_DiskDrive segun la documentacion es un identificador del disco que esta disponible en desde el XP en adelante y no da indicacion de que sea el numero de serie. Lo que si te devuelve el numero de serie fisico del disco es la propiedad SerialNumber de Win32_PhysicalMedia (que segun la documentacion es “Manufacturer-allocated number used to identify the physical media.”). Resumiendo el tema de los numeros de serie obtenidos con WMI:

Sub Fisico()
‘Disco Fisico
Dim ObjetoWMI As Object
Dim Disco As Object
Dim Discos As Object
Set ObjetoWMI = GetObject(”WINMGMTS:”)
Set Discos = ObjetoWMI.InstancesOf(”Win32_DiskDrive”)
For Each Disco In Discos
MsgBox “Serie decimal: ” & Disco.signature
MsgBox “Serie Hexadecimal: ” & Hex$(Disco.signature)
Next
End Sub
Sub Logico()
‘Disco Logico
‘Numero dado al formatear
Dim ObjetoWMI As Object
Dim Disco As Object
Dim Discos As Object
Set ObjetoWMI = GetObject(”WINMGMTS:”)
Set Discos = ObjetoWMI.InstancesOf(”Win32_LogicalDisk”)
For Each Disco In Discos
MsgBox “Unidad disco: ” & Disco.Name & ” serie logica: ” & Disco.VolumeSerialNumber
Next
End Sub
Sub Fabrica()
‘devuelve el numero de serie fisico del disco(que segun la documentacion es “Manufacturer-allocated number used to identify the ‘physical media.”).
Dim ObjetoWMI As Object
Dim Disco As Object
Dim Discos As Object
Set ObjetoWMI = GetObject(”WINMGMTS:”)
Set Discos = ObjetoWMI.InstancesOf(”Win32_PhysicalMedia”)
For Each Disco In Discos
MsgBox “Serie Fabrica: ” & Disco.SerialNumber
Next
End Sub

Fuente: http://accessbuho.mvps.org

Leave a Reply