Several things are wrong.
First you don't use the code tags. Please put you code in [ code ] and [/ code ] tags (without the spaces) to make it more readable.
Second you should look a close look at the documentation when you use functions you don't know.http://msdn.microsoft.com/en-us/library/windows/desktop/ms724844%28v=vs.85%29.aspx
It says "Creates the specified registry key. If the key already exists, the function opens it."
And about the return value:
"If the function succeeds, the return value is ERROR_SUCCESS.
If the function fails, the return value is a nonzero error code defined in Winerror.h. You can use the FormatMessage function with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic description of the error."
That means the return value doesn't tell you if the key existed or not, if it doesn't exist it is created.
The third parameter is Reserved "This parameter is reserved and must be zero.". So why do you pass 123? This value is most likely ignored, but you should pass 0 just to be sure.
The parameter you want to use is the last one, lpdwDisposition. You should check the value of your dwDisposition variable to see if the key was created or opened. Of course you should also check the return value to see if there was an error. If there was an error you have to do something else because the other values are not valid.
Who needs a signature anyway.