a couple bitwise nits in your first patch:

+#define HKCR_MASK 2
+#define IS_HKCR(hk) ((UINT_PTR)hk > 0 && ((UINT_PTR)hk & 3) == HKCR_MASK)

Typically a mask would define all the bits that could be set, and a flag would be the particular bit you want to test. Something like:
#define SPECIAL_HKEY_MASK 3
#define HKCR_FLAG 2

Also, in the following expression:
((UINT_PTR)hk > 0 && ((UINT_PTR)hk & 3)

The second can never be true when the first is false, so you can just drop the first.

How? isn't 0x80000003 < 0 && 0x80000003 & 3?
I just realized the UINT_PTR cast forces it to be >0 anyway.
 
These suggestions yield:
#define IS_HKCR(hk) (((UINT_PTR)(hk) & SPECIAL_HKEY_MASK) == HKCR_FLAG)

Thanks.
 
--Juan