You should use the classes in the System.Management namespace to run a
WMI query on the system. There is one instance of the Win32_Processor class
for each processor on a machine. You should be able to use the DeviceID
property here to get the unique id of the processor. For the hard drives,
you should be able to get all instances of the Win32_DiskDrive class and
then use the DeviceID property on that class.
You must be aware that not all CPUs have serial numbers available (remeber a
huge controversy over Intel decision to enable CPU serial numbers a couple
of yers ago?).
This is how you can get CPU serial number (or numbers in case it is a
multi-CPU machine):
using System;
using System.Management;
....
SelectQuery query = new SelectQuery("Win32_BaseBoard");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection coll = searcher.Get();