GetProp and SetProp are more elegant and portable than SetWindowLongPtr i think. basically they allow storing properties for a window, be it a handle or a pointer. The multithreading is not an issue, because there is no map involved, it is just a property of a window and maps the handle 1-1 to a property value you store.

SetWindowLongPtr may be ok as well, since it implies that it stores a pointer which is exactly what one needs, when the system needs to map a handle to a class object pointer.

And once again, performance is irrelevant, at least in this case, because properties are very fast, so is Set/GetWindowLongPtr and you dont need to do ugly assembler hacks which only work on a x86 platform anyway. I used to think like that (assembly) when I was 16 or something, but a lot changed since then, outside and inside