elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Leet el registro de windows
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Leet el registro de windows  (Leído 2,963 veces)
noele1995

Desconectado Desconectado

Mensajes: 137



Ver Perfil
Leet el registro de windows
« en: 13 Marzo 2012, 17:25 pm »

Hola en el proyecto actual que estoy haciendo estoy con el registro de windows, tengo algun que otro problemilla al leer los valores, cuando los valores son DWORD, no consigo leer su valor, les pongo el codigo:

Código
  1. Public Function ValueData(Key As Long, strValueName As String, sType As Long) As String
  2. Dim lResult As Long, RetornoData As Long, strData As String, lngData As Currency, binData() As Byte, sTmp As String
  3. Dim i As Integer
  4. Select Case sType
  5.    Case REG_NONE
  6.        ValueData = vbNullString
  7.  
  8.    Case REG_SZ, REG_EXPAND_SZ, REG_LINK
  9.        lResult = RegQueryValueEx(Key, strValueName, 0, ByVal 0, ByVal 0, RetornoData)
  10.  
  11.        If lResult = 0 Then
  12.            strData = String(RetornoData, Chr$(0))
  13.            lResult = RegQueryValueEx(Key, strValueName, 0, ByVal 0, ByVal strData, RetornoData)
  14.  
  15.            If lResult = 0 Then
  16.                ValueData = Left$(strData, InStr(1, strData, Chr$(0)) - 1)
  17.            End If
  18.        End If
  19.  
  20.    Case REG_MULTI_SZ
  21.        lResult = RegQueryValueEx(Key, strValueName, 0, ByVal 0, ByVal 0, RetornoData)
  22.  
  23.        If lResult = 0 Then
  24.            strData = String(RetornoData, Chr$(0))
  25.            lResult = RegQueryValueEx(Key, strValueName, 0, ByVal 0, ByVal strData, RetornoData)
  26.  
  27.            If lResult = 0 Then
  28.                For i = Len(strData) To 1 Step -1
  29.                    If Mid$(strData, i, 1) = Chr$(0) Then
  30.                    strData = Left$(strData, i - 1)
  31.                    Exit For
  32.                End If
  33.                Next
  34.                For i = 1 To Len(strData)
  35.                    If Mid$(strData, i, 1) = Chr$(0) Then
  36.                    Mid$(strData, i, 1) = " "
  37.                    End If
  38.                Next
  39.  
  40.                ValueData = Left$(strData, InStr(1, strData, Chr$(0)) - 1)
  41.            End If
  42.        End If
  43.        For i = Len(strData) To 1 Step -1
  44.            If Mid$(strData, i, 1) = Chr$(0) Then
  45.                strData = Left$(strData, i - 1)
  46.                Exit For
  47.            End If
  48.        Next
  49.        For i = 1 To Len(strData)
  50.            If Mid$(strData, i, 1) = Chr$(0) Then
  51.                Mid$(strData, i, 1) = " "
  52.            End If
  53.        Next
  54.  
  55.    Case REG_BINARY
  56.        lResult = RegQueryValueEx(Key, strValueName, 0, ByVal 0, ByVal 0, RetornoData)
  57.        If lResult = 0 Then
  58.            ReDim binData(RetornoData)
  59.            lResult = RegQueryValueEx(Key, strValueName, 0, ByVal 0, binData(0), RetornoData)
  60.  
  61.            If lResult = 0 Then
  62.                For i = 0 To UBound(binData) - 1
  63.                    sTmp = sTmp & Right$("00" & Hex$(binData(i)), 2) & " "
  64.                Next
  65.                ValueData = sTmp
  66.            End If
  67.        End If
  68.  
  69.    Case REG_DWORD, REG_DWORD_BIG_ENDIAN
  70.        lResult = RegQueryValueEx(Key, strValueName, 0, ByVal 0, lngData, RetornoData)
  71.        If lResult = 0 Then
  72.            ValueData = "0x" & Right$("00000000" & Hex$(lngData), 8) & " (" & lngData & ")"
  73.        End If
  74.    Case Else
  75.        lResult = RegQueryValueEx(Key, strValueName, 0, ByVal 0, ByVal 0, RetornoData)
  76.        If lResult = 0 Then
  77.            strData = String(RetornoData, Chr$(0))
  78.            lResult = RegQueryValueEx(Key, strValueName, 0, ByVal 0, ByVal strData, RetornoData)
  79.  
  80.            If lResult = 0 Then
  81.                ValueData = Left$(strData, InStr(1, strData, Chr$(0)) - 1)
  82.            End If
  83.        End If
  84. End Select
  85. End Function

A la funcion se la llama con la clave ya abierta, si pueden ayudarme se lo agradeceria.

PD: ¿Como hacen para que el codigo salga con colores? Es menos lioso xD


« Última modificación: 14 Marzo 2012, 19:00 pm por raul338 » En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: Leet el registro de windows
« Respuesta #1 en: 14 Marzo 2012, 01:03 am »

Encerra el codigo dentro de las etiquetas con el lenguaje correspondiente, por ejemplo en este caso con [code =vb] ' codigo [ /code] pero sin los espacios y veras que queda coloreado


En línea

noele1995

Desconectado Desconectado

Mensajes: 137



Ver Perfil
Re: Leet el registro de windows
« Respuesta #2 en: 14 Marzo 2012, 15:32 pm »

Ok eso responde a mi pregunta del color del codigo (no lo corrijo ahora porque con el movil tardo mucho ;D ), pero volviendo al tema de mi pregunta podriais ayudarme con los valores DWORD?
En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: Leet el registro de windows
« Respuesta #3 en: 14 Marzo 2012, 15:44 pm »

Yo no tengo ni idea, pero buscate en google como leer valores Dword, o sino capas que si buscas bien hasta encontras una forma de que lea todo.
En línea

burbu_1

Desconectado Desconectado

Mensajes: 159


hamen gaoz


Ver Perfil
Re: Leet el registro de windows
« Respuesta #4 en: 15 Marzo 2012, 15:33 pm »

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.

Código
  1.  Dim ValueData As String
  2.    Dim hKey As Long
  3.    If RegOpenKey(HKEY_CURRENT_USER, "kk", hKey) = ERROR_SUCCESS Then
  4.        Dim lngData As Long     'un valor Long es un número de 4 bytes CON signo
  5.        If RegQueryValueEx(hKey, "Nuevo", ByVal 0, ByVal 0, lngData, 4) = ERROR_SUCCESS Then
  6.            If lngData < 0 Then 'Si el long es negativo se pasa a DWORD (por ejemplo asi)
  7.                ValueData = "0x" & Right$("00000000" & Hex$(lngData), 8) & " (" & (2 * 2147483648#) + lngData & ")"
  8.            Else
  9.                ValueData = "0x" & Right$("00000000" & Hex$(lngData), 8) & " (" & lngData & ")"
  10.            End If
  11.        End If
  12.        RegCloseKey hKey
  13.    End If
  14.  

Saludos.
En línea

noele1995

Desconectado Desconectado

Mensajes: 137



Ver Perfil
Re: Leet el registro de windows
« Respuesta #5 en: 16 Marzo 2012, 00:15 am »

Muchas gracias me has aclarado mucho, muy bien explicado tambien. Mañana mismo corregire el codigo.
Gracias de nuevo burbu_1  ;D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Leet??? que demonios es leet
Sugerencias y dudas sobre el Foro
programatrix 2 3,404 Último mensaje 24 Octubre 2005, 17:26 pm
por Ertai
Mensajes Leet « 1 2 »
Sugerencias y dudas sobre el Foro
:ohk<any> 10 7,469 Último mensaje 15 Noviembre 2008, 15:59 pm
por Artikbot
Sistema de Login - Registro [Usando el registro de Windows]
Programación Visual Basic
ToNy_EsP 2 4,230 Último mensaje 28 Febrero 2009, 18:10 pm
por seba123neo
que significa Leet? :S « 1 2 »
Sugerencias y dudas sobre el Foro
x64core 12 12,391 Último mensaje 29 Septiembre 2011, 08:47 am
por тαптяα
Mi leet registrado en el foro xD[postea tu leet XDDD]
Foro Libre
Pablo Videla 2 6,755 Último mensaje 14 Diciembre 2011, 16:49 pm
por Pablo Videla
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines