А кроме диска ещё что нибудь можно подцепить?
Можно, смотри в сторону WMI (MSDN). У меня где то есть статья (надо поискать), с примером на Delphi, если мне не изменяет память, плучения данных о центральном процессоре.
Вот варианты привязки к серийому номеру тома (1-е что на ум пришло):
1-й вариант:
1. Программа инсталлятор определяет номер тома, прописывает его в устанавливаемую программу (к примеру в отведенное место под ресурс), запускает дополнительный процесс, который дожидается закрытия самого инсталлятора и аналогично прописывает в инсталлятор номер тома.
2. В дальнейшем при запуске инсталлятора или программы они находят номер тома в ресурсе и сравнивают его с текущим в системе.
2-й вариант:
На основе номера тома регистрационная часть программы генерит какой-то индентификационный номер, который вместе с регистрационными данными (First name, Last name, Company) передается владельцу программы, на основании этих данных кейгенератором генерится ключ и передается пользователю. Дальнейшее, надеюсь понятно.