ok allora ti do la stessa classe un po' riadattata (molto)...
questa classe è stata fatta in c++ proprio pechè questo linguaggio consentiva di facilitare molto le operazioni, ma anche in c dovrebbe facilitarti le cose.
codice:
//Registry class
#include <winreg.h>

//****************************************
//Funzioni create da
//*** Paolo Infante ***
//L'uso di queste funzioni nelle vostre applicazioni e' garantito per fini personali e commerciali.
//La distribuzione del sorgente di questa classe (o la vendita) sono ASSOLUTAMENTE proibiti //se non consentiti da Paolo Infante, e sono punibili a norma della legge sul Copyright.
//
//L'autore,
//Paolo Infante.
//****************************************

	bool CreateKey(HKEY BaseKey, const char * SubKeyName, LPWORD dwOptions = REG_OPTION_NON_VOLATILE)
	{
		HKEY point_out;
		DWORD result;
		LONG ret_var = RegCreateKeyEx(BaseKey, SubKeyName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &point_out, &result);
		if (ret_var==ERROR_SUCCESS)
			return true;
		if (ret_var!=0)
			return false;
		return true;
	}
	
	bool DeleteKey(HKEY BaseKey, const char * SubKeyName)
	{
		LONG ret_val = RegDeleteKey(BaseKey, SubKeyName);
		if (ret_val==ERROR_SUCCESS)
			return true;
		if (ret_val != 0)
			return false;
		return false;
	}
	bool DeleteValue(HKEY BaseKey, const char * SubKeyName, const char * ValueName)
	{
		HKEY result;
		LONG ret_val = RegOpenKeyEx(BaseKey, SubKeyName, 0, KEY_ALL_ACCESS, &result);
		if (ret_val != ERROR_SUCCESS)
			return false;
		LONG ret_val_2 = RegDeleteValue(result, ValueName);
		if (ret_val_2==ERROR_SUCCESS)
			return true;
		if (ret_val_2!=0)
			return false;
		return false;
	}
	bool QueryValue(HKEY BaseKey, const char * SubKeyName, const char * ValueName, LPDWORD outValueType, LPBYTE out_data, LPDWORD size_out_data)
	{
		HKEY result;
		LONG ret_val = RegOpenKeyEx(BaseKey, SubKeyName, 0, KEY_ALL_ACCESS, &result);
		if (ret_val != ERROR_SUCCESS)
			return false;
		LONG ret_val2 = RegQueryValueEx(result, ValueName, 0, outValueType, out_data, size_out_data);
		if (ret_val2==ERROR_SUCCESS)
			return true;
		if (ret_val2!=0)
			return false;
		return false;
	}
	bool SetValue(HKEY BaseKey, const char * SubKeyName, const char * ValueName, DWORD ValueType, const BYTE * in_data)
	{
		HKEY result;
		LONG ret_val = RegOpenKeyEx(BaseKey, SubKeyName, 0, KEY_ALL_ACCESS, &result);
		if (ret_val != ERROR_SUCCESS)
			return false;
		LONG ret_val2 = RegSetValueEx(result, ValueName, 0, ValueType, in_data, sizeof(in_data));
		if (ret_val==ERROR_SUCCESS)
			return true;
		if (ret_val!=0)
			return false;
		return false;
	}
	bool QueryString(HKEY BaseKey, const char * SubKeyName, const char * ValueName, LPSTR OutValue)	
	{
		HKEY result;
		LONG ret_val = RegOpenKeyEx(BaseKey, SubKeyName, 0, KEY_ALL_ACCESS, &result);
		if (ret_val != ERROR_SUCCESS)
			return false;
		DWORD dummy;
		LONG ret_val2 = RegQueryValueEx(result, ValueName, 0, NULL, (LPBYTE)OutValue, &dummy);
		if (ret_val2==ERROR_SUCCESS)
			return true;
		if (ret_val2!=0)
			return false;
		return false;
	}
	bool SetString(HKEY BaseKey, const char * SubKeyName, const char * ValueName, LPSTR ValueString)
	{
		HKEY result;
		LONG ret_val = RegOpenKeyEx(BaseKey, SubKeyName, 0, KEY_ALL_ACCESS, &result);
		if (ret_val != ERROR_SUCCESS)
			return false;
		LONG ret_val2 = RegSetValueEx(result, ValueName, 0, REG_SZ, (BYTE*)ValueString, sizeof(ValueString)+1);
		if (ret_val==ERROR_SUCCESS)
			return true;
		if (ret_val!=0)
			return false;
		return false;
	}
non l'ho testata però dovrebbe funzionare. basta che la aggiungi ad un progetto C e poi ne richiami le varie funzioni.

questo diciamo è un'indice delle funzioni racchiuse in questo file:
codice:
bool SetString(HKEY BaseKey, const char * SubKeyName, const char * ValueName, LPSTR ValueString)
bool QueryString(HKEY BaseKey, const char * SubKeyName, const char * ValueName, LPSTR OutValue)	
bool SetValue(HKEY BaseKey, const char * SubKeyName, const char * ValueName, DWORD ValueType, const BYTE * in_data)
bool QueryValue(HKEY BaseKey, const char * SubKeyName, const char * ValueName, LPDWORD outValueType, LPBYTE out_data, LPDWORD size_out_data)
bool DeleteValue(HKEY BaseKey, const char * SubKeyName, const char * ValueName)
bool DeleteKey(HKEY BaseKey, const char * SubKeyName)
bool CreateKey(HKEY BaseKey, const char * SubKeyName, LPWORD dwOptions = REG_OPTION_NON_VOLATILE)
un'esempio:
codice:
#include <stdio.h>
#include "RegClass.h"

int main(void)
{
DeleteKey(HKEY_LOCAL_MACHINE, "\Software\Pippo");
return 0;
}
ciao!