I am developing a library in C# that generates a unique hardware ID using these 3 variables
According to this documentation:
Mac OS X doesn't support getting hard disk serial number from user-level application
If the requirement to be root on mac is not a problem for you (or you skip the mac version), I have one brute way to solve the problem:
/sbin/udevadm info --query=property --name=sda
On mac you can use Disk Utility (as root) to get harddrive serial. On windows you can use the standard approach.