OK here's the issue. We currently develop some software that gives the end user a number to register with. We use that number to create a unique license, user inputs the license and the software works OK. The number is generated by using hardware, such as MAC address and a few other bits, so that it's tied to that PC/server.

The problem we're starting to have is that some virtual environments regularly change some of their hardware parameters, meaning that the license is becoming invalid, so we have to generate a new one based on a new number being generated. Same issue happens if the virtual machine is moved to a new server.

The developers have now decided to create the code based on software and not hardware to overcome this problem, for example the time & date that the software was installed or the product key.

What I'm looking for is ideas on what they could look for in Windows to use as part of the code generated that is unique to each system and won't change if a server is moved across systems. Any ideas?