`RegQueryValueExW`'s last parameter is in and out, so that `length` is set to the actual written length after the call.
It might cause an OOB write though, with a data race on the registry key (if the key's value happens to grow in length by a char or two between the calls, time of check time of use yada yada).