En primer lugar tienes que asegurarte que el valor RetornoData es 4 o más grande, ya que para guardar un valor DWORD se necesitan 4 bytes, si no, RegQueryValueEx no te retornará ERROR_SUCCESS.
Para los valores de cadena y binarios, ya haces esa comprobación llamando 2 veces al api, para los DWORD no hace falta poque SIEMPRE van a ser 4 bytes
por otro lado, los valores DWORD son números de 32 bits (4bytes) SIN signo, mientras que los valores Long de vb, son números de 32 bits CON signo.
Esto quiere decir que un valor WORD puede ir
de 0 0x 00 00 00 00
a 4294967295 0x FF FF FF FF
y un Long puede ir
de 0 0x 00 00 00 00
a 2147483647 0x 07 FF FF FF
y de -1 0x FF FF FF FF
a -2147483648 0x 08 FF FF FF
por lo que si el long es negativo, hay que hacer una conversión.
Dim ValueData As String
Dim hKey As Long
If RegOpenKey(HKEY_CURRENT_USER, "kk", hKey) = ERROR_SUCCESS Then
Dim lngData As Long 'un valor Long es un número de 4 bytes CON signo
If RegQueryValueEx(hKey, "Nuevo", ByVal 0, ByVal 0, lngData, 4) = ERROR_SUCCESS Then
If lngData < 0 Then 'Si el long es negativo se pasa a DWORD (por ejemplo asi)
ValueData = "0x" & Right$("00000000" & Hex$(lngData), 8) & " (" & (2 * 2147483648#) + lngData & ")"
Else
ValueData = "0x" & Right$("00000000" & Hex$(lngData), 8) & " (" & lngData & ")"
End If
End If
RegCloseKey hKey
End If
Saludos.