Per quello che invece riguarda l'altro problema, cioè quello che tu associ un codice all'hard-disk, sinceramente non so come leggere il seriale però non mi sembra una soluzione molto buona, se per esempio il tipo a cui vendi il programma deve cambiare hard-disk cosa fa riacquista il programma?
Di solito io per proteggere i miei programmi uso il solito metodo username password, in pratica mi faccio dare dal cliente un user che intende usare e se non me lo può dare glielo scelgo io, poi uso un programma che mi codifica l'username con il quale calcolo la password mentre all'interno del programma che gli do c'è ovviamente la stessa funzione codifica l'username che viene inserito(o memorizzato nel registro di sistema) e lo confronta con la password inserita(o appunto memorizzata nel registro).

Certo così è possibile cheil tuo cliente passi sia il programma che la coppia password username ad un altro e quest'altro li può usare senza che tu te ne accorga, però in fondo anche con windows e altri programmi importanti si fa così no?