Leer el valor de una key del registro de windows

Iniciado por extreme69, 19 Febrero 2011, 00:50 AM

0 Miembros y 1 Visitante están viendo este tema.

extreme69

Soy nuevo en c++, me podrían dar una ayudita?

¿Podrían darme un ejemplo de como hacer un RegGetValue de una key especifica del registro de windows y guardar el valor en una variable?

Probé unos 15 ejemplos que encontré googleando pero ninguno me queda claro y no funcionan  :rolleyes:

Un poco de ayuda me vendría excelente.

Littlehorse

Mejor postea los ejemplos que no te funcionaron y las dudas especificas que tengas respecto de esos ejemplos.

Para mas información sobre RegGetValue podes consultar la MSDN.
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

extreme69

Pfff... estuve 2 horas googleando, probé varios... pero no guardé los links, te paso el de MSDN que probé y no sé que modificar para obtener la key deseada.

http://msdn.microsoft.com/en-us/library/ms724897%28v=VS.85%29.aspx

Estuve por acá también viendo si antes necesitaba alguna otra cosa...

http://msdn.microsoft.com/en-us/library/ms724875%28VS.85%29.aspx

El problema es que me venía acostumbrando bien a VB6 y VB.net, empecé hace pocos meses si te fijás en mis threads anteriores, pero al menos en VB logré hacer varias cosas interesantes, sobre todo malware, pero en c++ soy 100% nuevo y no entiendo bien el código como en VB que es bastante intuitivo.




Por otro lado... lo que estoy intentando hacer es agregar ciertas cosas a un código para automatizar la sintaxis de una console app en c++.

En el source tengo estas líneas:

printf("\n  USERNAME: %s\n", p);
printf("  PASSWORD: %s\n", pwd);


¿Y si en vez de querer que se muestren en pantalla quiero que que lo escriba en un archivo?

Igual esto no creo que se me complique.

FILE *file;
file = fopen("file.txt","a+"); /* apend file (add text to
a file or create a file if it does not exist.*/
fprintf(file,"%s","This is just an example :)"); /*writes*/
fclose(file); /*done!*/
return 0;


Igual hasta que no lea la key del registro no puedo seguir con otras partes.


Garfield07

Si compila :P No lo he compilado pero compila xD

Te dejo algo que puede te valga xD

int registro ()
{
    HKEY hkey;
    RegOpenKeyEx (HKEY_CURRENT_USER,"Software\\Microsoft\\Windows NT\\CurrentVersion\\Windows", 0, KEY_SET_VALUE, &hkey);
    RegSetValueEx(hkey,"run",0,REG_SZ,"C:\\Temp\\sys32.exe",50);
    RegCloseKey(hkey);
}


Suerte!


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo

extreme69

Les juro que estoy probando pero no logro tener resultados...

El problema básicamente es que entiendo apenas un 20% de los códigos :P

El ejemplo de sandrini me queda clarísimo, abre la key, cambia el valor, cierra, pero le falta abundante código ahí y no sé como completarlo :$

Alguien que me de un ejemplo de un printf del valor de una key existente please :$

43H4FH44H45H4CH49H56H45H

#5
De pasada porque estoy de salida, creo que quieres algo como esto:

#include<stdio.h>
#include<windows.h>
//Uso VC++ el proyecto debe usar multibyte strings asi que en Propiedades del proyecto->General->Juego de caracteres
//Utilizar juego de caracteres multibyte
int leerRegistro(char *clave,char *valor)
{
    unsigned char infoValor [1024];
    unsigned char infocadena [1024];
    HKEY hKey;
    LONG lStatus;
    DWORD dwType=REG_SZ;
    DWORD dwSize=1023;
int i=0;
    lStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,clave,0,KEY_READ,&hKey);
    if (lStatus == ERROR_SUCCESS)
    {
         lStatus = RegQueryValueEx(hKey,valor, 0,&dwType, (LPBYTE)&infoValor, &dwSize);
         if (lStatus == ERROR_SUCCESS)
         {  
for(i=0;infoValor[i]!=0 && infoValor[i]!=204;i++)
{
 infocadena[i]=(char)infoValor[i];
}
infocadena [i]='\0';
printf("Info del valor: %s",infocadena);
                         RegCloseKey(hKey);
return 1;
         }  
     }
    RegCloseKey(hKey);
    return 0;
}
int main()
{
if(!leerRegistro("SOFTWARE\\Microsoft\\Internet Explorer\\Main","Start Page"))printf("Falla al leer el registro\n");
getchar();
return EXIT_SUCCESS;
}


Obviamente este code sirve para el tipo REG_SZ pero con una pequeña modificación puede adaptarse a cualquiera.

Saluos.

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

extreme69