Newsgroup: it.comp.lang.visual-basic
Titolo: Identificazione hard disk

Ciao a tutti
Spero mi possiate, per favore, dare qualche indicazione su cosa
cercare su Google per sapere se esistono degli standard accettati
da tutti i produttori di hard disk per la codifica dei dati
identificativi del prodotto (non solo del "tipo" di prodotto
ma proprio dello specifico unico esemplare che "ho qui davanti a me" !)
e su come leggere questi dati attraverso Visual Basic.
Grazie per l'attenzione.
Ciao ciao.

 cercare su Google per sapere se esistono degli standard accettati
C'è un'Api, mi pare sia qualcosa come GetSerialNumber che da il seriale del 
disco, ma poi non so se questo è univoco per il modello, per la ditta o per 
il mondo.
greg 

 il mondo.
Da quel che ho letto, in questi casi si tenta di mischiare piů codici
leggibili da VB (es. MAC, disco, seriali vari) e si mettono insieme per
creare un qualcosa che identifichi "univocamente" un pc.

 creare un qualcosa che identifichi "univocamente" un pc.
Esattamente.
Il problema è dato dal fatto che il seriale dell'hard disk non è il vero 
seriale ma un codice che viene assegnato alla partizione dal programma 
di formattazione/partizionamento. L'utente più esperto potrebbe comprare 
una sola licenza e partizionare tutti i suoi pc con lo stesso seriale. 
In questo modo la tua licenza varrebbe su qualsiasi pc.
Per questo motivo si cerca di leggere, ove presente, il Mac Address 
(anche questo è modificabile dall'utente) ed altre variabili.
Non per nulla i vari produttori HW si stanno accordando per una 
piattaforma TCP (Trusted Computing Platform).
Nicola
PS Per leggere il mac address ti consiglio questo. Mettilo in un modulo .bas
Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright ©1996-2003 VBnet, Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Distribution: You can freely use this code in your own
'               applications, but you may not reproduce
'               or publish this code on any web site,
'               online service, or distribute as source
'               on any media without express permission.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Const NO_ERROR = 0
Public Declare Function inet_addr Lib "wsock32.dll" _
         (ByVal s As String) As Long
Public Declare Function SendARP Lib "iphlpapi.dll" _
         (ByVal DestIP As Long, _
         ByVal SrcIP As Long, _
         pMacAddr As Long, _
         PhyAddrLen As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32" _
         Alias "RtlMoveMemory" _
         (dst As Any, _
         src As Any, _
         ByVal bcount As Long)
Public Function GetRemoteMACAddress(ByVal sRemoteIP As String, _
                                      sRemoteMacAddress As String) As 
Boolean
     Dim dwRemoteIP As Long
     Dim pMacAddr As Long
     Dim bpMacAddr() As Byte
     Dim PhyAddrLen As Long
     Dim cnt As Long
     Dim tmp As String
     'convert the string IP into
     'an unsigned long value containing
     'a suitable binary representation
     'of the Internet address given
     dwRemoteIP = inet_addr(sRemoteIP)
     If dwRemoteIP <> 0 Then
         'set PhyAddrLen to 6
         PhyAddrLen = 6
         'retrieve the remote MAC address
         If SendARP(dwRemoteIP, 0&, pMacAddr, PhyAddrLen) = NO_ERROR Then
             If pMacAddr <> 0 And PhyAddrLen <> 0 Then
                 'returned value is a long pointer
                 'to the mac address, so copy data
                 'to a byte array
                 ReDim bpMacAddr(0 To PhyAddrLen - 1)
                 CopyMemory bpMacAddr(0), pMacAddr, ByVal PhyAddrLen
                 'loop through array to build string
                 For cnt = 0 To PhyAddrLen - 1
                     If bpMacAddr(cnt) = 0 Then
                         tmp = tmp & "00-"
                     Else
                         tmp = tmp & Hex$(bpMacAddr(cnt)) & "-"
                     End If
                 Next
                 'remove the trailing dash
                 'added above and return True
                 If Len(tmp) > 0 Then
                     sRemoteMacAddress = Left$(tmp, Len(tmp) - 1)
                     GetRemoteMACAddress = True
                 End If
                 Exit Function
             Else
                 GetRemoteMACAddress = False
             End If
         Else
             GetRemoteMACAddress = False
         End If    'SendARP
     Else
         GetRemoteMACAddress = False
     End If    'dwRemoteIP
End Function
'--end block--

E questo per il seriale della partizione dell'hd:
'
' Questo modulo contiene la funzione da usare per ricavare il 
Serial-Number di una unita'.
' Alla funzione GetSerialNumber(strDrive As String) va passato come 
parametro una stringa
' contenente l'unita' da controllare, esempio "D:\".
'
Private Declare Function GetVolumeInformation Lib "kernel32.dll" Alias _
         "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal _
         lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Integer, _
         lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, _
         lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As 
String, ByVal _
         nFileSystemNameSize As Long) As Long
Function GetSerialNumber(strDrive As String) As Long
     Dim SerialNum As Long
     Dim Res As Long
     Dim Temp1 As String
     Dim Temp2 As String
     Temp1 = String$(255, Chr$(0))
     Temp2 = String$(255, Chr$(0))
     ' Se vi sono errori Res=0, altrimenti, se tutto e' andato ok, Res=1
     Res = GetVolumeInformation(strDrive, Temp1, Len(Temp1), SerialNum, 
0, 0, Temp2, Len(Temp2))
     GetSerialNumber = SerialNum
End Function

piattaforma TCP (Trusted Computing Platform).
Intendi il famigerato Palladium?
--
ciao
  Stefano

 Intendi il famigerato Palladium?
Si, purtroppo.
Ora hanno cambiato nome e connotati, ma le tecnologia alla base sono quelle.
Nicola