Newsgroup: it.comp.lang.delphi
Titolo: getVolumeInfo

Riguardo la funzione in oggetto mi succede una cosa strana
Su due pc portatili asus differenti mi da' le stesse informazioni!
Come si spiega una cosa simile?
Pensavo in questo modo di poter identificare in maniera univoca il pc.
Se non è il metodo migliore (anche se non capisco come mai di questo
risultato identico)
c'è un metodo affidabile legato all'harware del pc per identificarlo
in maniera univoca?


La funzione che tu citi presumo sia l'API GetVolumeInformation.
Presumo inoltre che con "le stesse informazioni" intendi
"lo stesso numero seriale": questo fatto e' altamente improbabile,
ma non e' impossibile (per esempio se cloni un HD, il numero seriale
che viene generato da Windows quando lo formatti, si mantiene).
Forse pero' sbagli ad usare l'API. Prova con questa funzione e vedi se
ottieni qualcosa di diverso oppure hai sempre lo stesso risultato:
  function GetNumSeriale(const drive: TFilename): longword;
  var
    VolumeName, FileSystemName: array[0..MAX_PATH-1] of char;
    VolumeSerialNumber, MaxFilenameLength, FileSystemFlags: longword;
  begin
    GetVolumeInformation(PChar(IncludeTrailingBackslash(drive)),
      VolumeName, MAX_PATH, @VolumeSerialNumber, MaxFilenameLength,
      FileSystemFlags, FileSystemName, MAX_PATH);
    Result := VolumeSerialNumber;
  end;
  procedure TForm1.Button1Click(Sender: TObject);
  var
    NumSeriale: longword;
  begin
    NumSeriale := GetNumSeriale('C:\');
    ShowMessage(IntToHex(HiWord(NumSeriale), 4)
        + '-' + IntToHex(LoWord(NumSeriale), 4));
  end;
In ogni caso, il numero seriale che ottieni con questa API e' quello
generato da
Windows al momento della formattazione e, ti ripeto, non e' assicurato che
sia
unico. Per identificare in maniera univoca un hardware devi usare API di
livello
piu' basso (come per esempio le IOCTL S.M.A.R.T.) oppure, se devi
distinguere
un PC da un'altro, raccogli piu' info possibili sul sistema in esame e poi
applica
tecniche di hashing/checksum su di esse.
Ciao.
--
ACSH
[D4]
---------------------------
Chi fa da se'
fatica il doppio

in maniera univoca?
Per identificare in modo univoco un PC puoi usare il MAC address della
scheda di rete, ammesso ovviamente che per i PC su cui devi compiere
questa operazione si possa presupporre la presenza di una scheda di
rete!
Sarebbe bene però sapere qual'e' l'obiettivo finale che ti proponi, se
per caso hai bisogno di un codice unico per realizzare una chiave
software per un tuo programma allora il MAC address non è un gran
garanzia.
Ciao
Alf

in maniera univoca?
Sě,  il metodo consiste nello scaricare da sourceforge OnGuard di turbopower,
installarlo in delphi e aprire il progetto ExMachID che trovi nella cartella
Examples\Delphi.
Lě dentro c'e' tutto quello che ti serve per generarti un numero univoco di
identificazione basato su queste peculiarita', selezionabili a scelta o anche
tutte insieme: (ti faccio un copia incolla del codice della funzione):
function CreateMachineID(MachineInfo : TEsMachineInfoSet) : LongInt;
{ Obtains information from:
    - Volume sizes (NOT free space)
    - Volume serial numbers
    - Registration name and company
    - GetSystemInfo relevant info
    - Network card ID (if available)
}
Visto quanta roba? ;-)
Tutto AGGRATISSS! :O
Ciao
-- 
Morde. 
(
mo...@despammed.com
)
M-List di icld: 
http://it.groups.yahoo.com/group/icld/

garanzia.
Si, infatti
all'università per bypassare la protezione di un programma che usava
il mac address ricordo che socprirono che da woindows sulla gran parte
dei pc entrando nella configurazione della scheda di rete si poteva
cambiare (almeno temporaneamente) il mac address.
Era antipatico dover fare questa operazione ad ogni avvio del sistema
ma in ogni caso il programma si utilizzava senza dover ricorrere a
nessun gener di crack o programma aggiuntivo!
Comunque il mio obiettivo è quello di realizzare una chiave software
per l'attivazione di un mio programma
Il prgramma è già funzionante da tempo e non ho mai avuto problemi
riferendomi al numero seriale del volume
Solo che ora, trovare due pc con seriale identico mi ha lasciato un
po' perplesso sulla validità del mio algoritmo.
Suppongo anche io che ASUS per installazioni identiche su diversi pc
non faccia altro che fare il mirror di un unico disco fisso.