PDA

Visualizza la versione completa : [C]Lettura di una chiave di registro


Plaoo
11-10-2009, 15:19
Salve a tutti sto cercando di scrivere un programma che mi restituisca i valori contenuti in una chiave di registro, la chiave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Run che riguarda i programmi che si avviano all' avvio del sistema. Il mio progetto visualizzare le chiavi con il proprio valore per controllare in un attimo se sono presenti programmi indesiderati (virus o malware). Ho provato RegGetValue, RegOpenKey e altre che adesso non ricordo...Ho fallito con tutte :( Potete darmi una mano??

MItaly
11-10-2009, 15:24
Le funzioni sono quelle giuste, devi usarle correttamente insieme... studiati la parte relativa al registro (http://msdn.microsoft.com/en-us/library/ms724871(VS.85).aspx) nel Platform SDK, c' tutto quello che ti serve.

Plaoo
11-10-2009, 15:27
Sisi sto procedendo con msdn.com ma c' un problema non riesco ad assegnare il valore restituito ad una stinga... (comunque adesso sto provando RegQueryInfoKey).

Sto cambiando completamente metodo
RegOpenKeyEx() - To open up a registry key
RegEnumKeyEx() - To get a list of keys in the key opened by RegOpenKeyEx().
RegEnumValue() - Get a list of the values in a registry key
RegGetValue() - Get the data that the registry value contains.
RegCloseKey() - To close the key when you are done with it.

Sto seguendo questa procedura...speriamo bene

Plaoo
11-10-2009, 16:11
Non ci riesco un aiuto?

oregon
11-10-2009, 18:12
Originariamente inviato da Plaoo
Non ci riesco un aiuto?

Cioe' ? Cosa hai scritto ?

Plaoo
11-10-2009, 18:44
Allora ho scritto:

HKEY hKey;
TCHAR *prova[666];
RegOpenKeyA(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",&hKey);
RegQueryValueA(hKey,"VBoxTray", NULL, REG_SZ, &prova);
printf("%s",prova);
Adesso come posso continuare?? per vedere le chiavi presenti? su \Run? ho scritto giusto RegOpenKey??

Plaoo
12-10-2009, 17:04
RISOLTO

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main(int argc, char *argv[])
{
LONG result = ERROR_SUCCESS;
HKEY hKey = NULL;
DWORD nome_buffer_dime = 1024;
DWORD dati_buffer_dime = 1024;

TCHAR nome_buffer[1024];
char dati_buffer[1024];
int indice = 0;

TCHAR key_nome[]= "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Ran";

result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, key_nome, 0, KEY_QUERY_VALUE, &hKey);

if (result != ERROR_SUCCESS)
{//Errore nella chiave
printf("Impossibile aprire il registro...\n\n");
return 0;
}
while(ERROR_NO_MORE_ITEMS != (result=RegEnumValueA(hKey, indice,nome_buffer,&nome_buffer_dime, NULL,NULL,(LPBYTE)dati_buffer, &dati_buffer_dime)))
{
printf("%s\n", dati_buffer);
++index;
}
system("PAUSE");
return 0;
}

Loading