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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  RegQueryInfoKey -> Retorna un numero erroneo?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: RegQueryInfoKey -> Retorna un numero erroneo?  (Leído 1,177 veces)
someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
RegQueryInfoKey -> Retorna un numero erroneo?
« en: 27 Octubre 2014, 14:52 pm »

Hola, muchachos, estoy medio atorado con un pedazo de programa que estoy escribiendo..
La idea es listar los programas instalados QUE FIGURAN en "Agregar o Quitar programas"..
Pero, el problema viene que RegQueryInfoKey me retorna un valor que nada que ver en cuanto a la cantidad de subclases que una clase tiene en el registro..
A continuacion el codigo:
Código:
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#define MAXIMO_NOMBRE_LLAVE 16384 // 16383 + '\0'
#define MAXIMO_VALOR_LLAVE 256 // 255 + '\0'
void listar_software_instalado()
{
HKEY llave;
TCHAR buffer[512] = "";
DWORD largo_buffer;// = MAX_PATH;

DWORD retcode = RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall",&llave);
if (retcode != ERROR_SUCCESS) {
printf("Error al abrir la llave\n");
return;
}
DWORD cantidad_de_subclases = 0;
retcode = RegQueryInfoKey(
llave,
buffer,
&largo_buffer,
NULL,
&cantidad_de_subclases,
//NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
);
if (retcode != ERROR_SUCCESS) {
printf("RegQueryInfoKey -> error: %d\n",retcode);
return;
}
DWORD indice = 0;
printf("Cantidad de subclases encontradas: %d\n",cantidad_de_subclases);
/*for (indice = 0 ; indice < cantidad_de_subclases ; indice++) {
printf("Software instalado encontrado (%d)\n",indice);
}*/
RegCloseKey(llave);
}

En mi caso retorna 446 (?) cuando (contados a mano en esa clase) hay 113..
Pero no entiendo donde le estoy pifiando..
PD: puede haber typos en el codigo porque lo estaba copiando de un papel y ando medio distraido


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: RegQueryInfoKey -> Retorna un numero erroneo?
« Respuesta #1 en: 27 Octubre 2014, 15:20 pm »

Código
  1. TCHAR buffer[512] = "";
  2. DWORD largo_buffer;// = MAX_PATH;

largo_buffer debería contener el tamaño máximo del buffer... y sin embargo la variable está sin inicializar, eso puede provocar que se pise memoria al leer datos del registro. Por cierto, "largo_buffer=MAX_PATH" seguirá estando mal, ya que el tamaño que estás asignando al buffer es 512.

Además, creo recordar que estas funciones trabajan con wchar_t, no con char... sería conveniente poner el prefijo "L" al string de la ruta: L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"

Por lo demás no he visto nada raro.

Un saludo.






En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.645


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: RegQueryInfoKey -> Retorna un numero erroneo?
« Respuesta #2 en: 27 Octubre 2014, 15:40 pm »

¿Es tu programa de 32 bits y tu S.O. de 64 bits? Si es asi en realidad tu programa esta abriendo HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall.

Registry Keys Affected by WOW64

Y no cambies las cadenas, esta trabajando en ANSI, sino no compilaria:
Unicode and ANSI names
RegQueryInfoKeyW (Unicode) and RegQueryInfoKeyA (ANSI)

RegQueryInfoKey function
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: RegQueryInfoKey -> Retorna un numero erroneo?
« Respuesta #3 en: 27 Octubre 2014, 23:22 pm »

Definitivamente, esta abriendo Wow6432Node..
El tema de asignarle a largo_buffer el valor MAX_PATH es porque en http://msdn.microsoft.com/en-us/library/windows/desktop/ms724256(v=vs.85).aspx estan haciendo eso, pero de cualquier manera entiendo lo que decis, por eso esta comentado de cualquir manera, mala eleccion de nombres.. :P

Gracias muchachos, cualquier cosa molesto de nuevo
En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.645


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: RegQueryInfoKey -> Retorna un numero erroneo?
« Respuesta #4 en: 28 Octubre 2014, 00:15 am »

Entonces retorna el valor correcto  ::) Ahi en la MSDN explica como saltar la redireccion si queres.

De nadas.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: RegQueryInfoKey -> Retorna un numero erroneo?
« Respuesta #5 en: 28 Octubre 2014, 14:15 pm »

Entonces retorna el valor correcto  ::) Ahi en la MSDN explica como saltar la redireccion si queres.

De nadas.


Vos sabes que lo estuve mirando, pero en fin de cuentas, es mejor mirar en Wow6432Node como me redirige porque ahi si me figuran todos(incluidas las tontecas de Steam)

Me parece que me voy a poner a hacerle una limpieza a esta maquina porque ya hace cada pavada.. Ademas el hecho de que haya estado 8 meses encendida no ayuda :/
Menos cuando vivis probando boludeces jeje..

Aparte de eso estuve mirando en stackoverflow que otros lugares tendria que mirar para rescatar la lista de software+actualizaciones instaladas, todo porque estoy intentando hacer una limpieza profunda del sistema de archivos y del registro a mano (bueno quien dice a mano dice programaticamente no? :P) pero me da que va a terminar siendo mejor idea cargar de nuevo.. Total al SSD le sobran ciclos todavia y el resto esta en una de las particiones de los HDD..
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Banner creo que erroneo
Sugerencias y dudas sobre el Foro
Tor 2 941 Último mensaje 24 Mayo 2005, 17:13 pm
por el-brujo
Ayuda con RegQueryInfoKey
Programación Visual Basic
noob_Setup 3 1,238 Último mensaje 13 Octubre 2005, 18:46 pm
por noob_Setup
cs source erroneo... :(
Juegos y Consolas
claver_14 0 486 Último mensaje 15 Marzo 2006, 23:41 pm
por claver_14
Error en C ¿Compilador erróneo?
Programación C/C++
iCore 3 2,080 Último mensaje 12 Octubre 2010, 18:17 pm
por iCore
[Urgente] Ayuda codigo erroneo VB6
Análisis y Diseño de Malware
kaskull 2 1,754 Último mensaje 6 Febrero 2012, 18:52 pm
por xSundeRx
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines