Example of reading registry string (REG_SZ)
Code:
#pragma comment( lib, "advapi32.lib" )
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
BOOL ReadRegistryString(HKEY hKey, LPCTSTR szValueName, LPTSTR * lpszReturnValue)
{
DWORD dwType = 0, dwDataSize = 0, dwBufferSize = 0;
if(RegQueryValueEx(hKey, szValueName, 0, &dwType, NULL, &dwDataSize ) != ERROR_SUCCESS) return FALSE;
else if (dwType != REG_SZ) return FALSE;
dwBufferSize = dwDataSize + (1 * sizeof(CHAR));
if((*lpszReturnValue = (LPTSTR) malloc(dwBufferSize)) == NULL)
return FALSE;
if( RegQueryValueEx(hKey, szValueName, 0, &dwType, (LPBYTE) *lpszReturnValue, &dwDataSize ) != ERROR_SUCCESS)
{
free(*lpszReturnValue);
return FALSE;
}
else if (dwType != REG_SZ)
{
free(*lpszReturnValue);
return FALSE;
}
(*lpszReturnValue)[(dwBufferSize / sizeof(CHAR)) - 1] = '\0';
return TRUE;
}
INT main(void)
{
HKEY hKey = NULL;
HKEY hKeyRemote = NULL;
LPTSTR szReturnValue;
CHAR szComputerName[] = {"\\\\myPC"};
if(RegConnectRegistry(szComputerName, HKEY_LOCAL_MACHINE, &hKeyRemote) == ERROR_SUCCESS)
{
if(RegOpenKeyEx(hKeyRemote, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion", 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS)
{
if( ReadRegistryString(hKey,"ProgramFilesDir", &szReturnValue) == TRUE)
{
printf("The returned value is %s\n", szReturnValue);
RegCloseKey(hKey);
}
else printf("ReadRegistryString failed\n");
}
RegCloseKey(hKeyRemote);
}
else printf("RegConnectRegistry failed\n");
return 0;
}