Well, if you wanna create the average HWID-Dll, just use

, the function that is used in every Dll and does not contain a single bit of hardware-depened data. But its enough do identify a computer.
If you wanna be above average,

, too.
If you wanna blow the roof off, add more hardware specific information like CPUID, etc.
Then choose a ****** method to obfuscate your information so no one will be able to emulate your packet. Funny thing is: It doesn't have to be overly complex. A few rounds of Base64 and a classic XOR with a static key is super ****** but complex enough for the average SRO-Dev to faint.
And last but not least choose a library to send packet through the SRO-Client (SRO++, Drew's Packet Injection, others ...)
And for the real fun: Make a lifetime investment in

. Its the average tool you find on a HWID-Dll. Cool thing: If you use it the way everyone uses it, you'll gain about 0.01% security while wasting a ton of money.
I highly doubt the majority of the SRO-Scene have bought it. Most of the people is using outdated versions.