Hay yo solo lo he hecho una vez y de forma más corta, es decir, no con este código que pongo aquí sino con algo más corto pero no recuerdo bien como es, y fijate que no consigo el proyecto porque tengo el disco duro algo regado:D
[b]Api:[/b]
Private Declare Function GetVolumeInformation& Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal pVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long)
[b]Y esto lo pones donde vas a llamar esa información:[/b]
Dim cad1 As String * 256
Dim cad2 As String * 256
Dim numSerie As Long
Dim longitud As Long
Dim flag As Long
Unidad = "C:"
Call GetVolumeInformation(Unidad, cad1, 256, numSerie, longitud, flag, cad2, 256)
MsgBox "Numero de Serie de la unidad " & Unidad & " = " & numSerie
Esto sirve para evitar que se cargue el software en PC de los "amigos de lo ajeno" (pero el ejecutable claro) con una sentencia If comparas el serial del discho duro del PC en donde reside el software, y si no es igual a uno indicado, pues que se descargue de memoria y ya:D
Algo así como un AntiCopy