Código:
char * IDInstalacion()
{
HKEY llave;
BYTE * retornar = NULL;
long resultado;
resultado = FuncionRegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Cryptography",0,KEY_QUERY_VALUE,&llave);
if (resultado != ERROR_SUCCESS) {
FuncionMessageBox(NULL,"Error al abrir la llave de registro","Pruebas",MB_OK);
}
DWORD largo = 0;
resultado = FuncionRegQueryValueEx(llave,TEXT("MachineGuid"),NULL,NULL,NULL,&largo);
retornar = (BYTE*)HeapAlloc(GetProcessHeap(),sizeof(TCHAR),largo+1);
resultado = FuncionRegQueryValueEx(llave,TEXT("MachineGuid"),NULL,NULL,retornar,&largo);
char codigo_de_error[512];
_ltoa_s(resultado,codigo_de_error,10);
if (resultado != ERROR_SUCCESS){
FuncionMessageBox(NULL,codigo_de_error,"Pruebas",MB_OK);
}
return (char*)retornar;
}
Llamo dos veces a RegQueryValueEx (si, la van a ver como FuncionRegQueryValueEx porque en realidad esta usando un puntero a funcion, la historia es laaaarga pero la resumo: me estoy peleando con otro programa que hace de "control de jefe") una para sacar el largo del valor, y la otra para sacar el valor en si..
Aparte me gustaria que me recomendaran si es mejor usar algun otro Alloc (ajustandose siempre a la WinAPI)
PD: feos los casteos pero bueno jeje
Saludos!
EDIT typo!
EDIT2: Dios, siempre me como el OSOO del WOW64, le agregue la clave de SAM KEY_WOW64_64KEY para poderlo trabajar con todo (menos Windows 2000)