HKEY get_registry_keyname(char* out_keyname, const char* section)
{
	// Every compiler from Visual Studio 2008 onward should have support for UAC
#if _MSC_VER >= 1400
	if (userSIDValid)
	{
		if (needsWOW64())
		{
			if (section) {
				sprintf(out_keyname, "%s_Classes\\VirtualStore\\Machine\\Software\\Wow6432Node\\%s\\%s\\%s", userSID.c_str(), szCompanyName, szAppName, section);
			}
			else {
				sprintf(out_keyname, "%s_Classes\\VirtualStore\\Machine\\Software\\Wow6432Node\\%s\\%s", userSID.c_str(), szCompanyName, szAppName);
			}
		}
		else
		{
			if (section) {
				sprintf(out_keyname, "%s_Classes\\VirtualStore\\Machine\\Software\\%s\\%s\\%s", userSID.c_str(), szCompanyName, szAppName, section);
			}
			else {
				sprintf(out_keyname, "%s_Classes\\VirtualStore\\Machine\\Software\\%s\\%s", userSID.c_str(), szCompanyName, szAppName);
			}
		}

		return HKEY_USERS;
	}
	else
	{
		// This will probably fail
		if (section) {
			sprintf(out_keyname, "Software\\%s\\%s\\%s", szCompanyName, szAppName, section);
		}
		else {
			sprintf(out_keyname, "Software\\%s\\%s", szCompanyName, szAppName);
		}

		return HKEY_LOCAL_MACHINE;
	}
#else
	if (section) {
		sprintf(out_keyname, "Software\\%s\\%s\\%s", szCompanyName, szAppName, section);
	}
	else {
		sprintf(out_keyname, "Software\\%s\\%s", szCompanyName, szAppName);
	}

	return HKEY_LOCAL_MACHINE;
#endif
}
HKEY get_registry_keyname(char* out_keyname, const char* section)
{
	if (!Cmdline_alternate_registry_path) {
		// Use the original registry path, sometimes breaks for no reason which can be fixed by the code below
		if (section) {
			sprintf(out_keyname, "Software\\%s\\%s\\%s", szCompanyName, szAppName, section);
		}
		else {
			sprintf(out_keyname, "Software\\%s\\%s", szCompanyName, szAppName);
		}
		return HKEY_LOCAL_MACHINE;
	}

	// Every compiler from Visual Studio 2008 onward should have support for UAC
#if _MSC_VER >= 1400
	if (userSIDValid)
	{
		if (needsWOW64())
		{
			if (section) {
				sprintf(out_keyname, "%s_Classes\\VirtualStore\\Machine\\Software\\Wow6432Node\\%s\\%s\\%s", userSID.c_str(), szCompanyName, szAppName, section);
			}
			else {
				sprintf(out_keyname, "%s_Classes\\VirtualStore\\Machine\\Software\\Wow6432Node\\%s\\%s", userSID.c_str(), szCompanyName, szAppName);
			}
		}
		else
		{
			if (section) {
				sprintf(out_keyname, "%s_Classes\\VirtualStore\\Machine\\Software\\%s\\%s\\%s", userSID.c_str(), szCompanyName, szAppName, section);
			}
			else {
				sprintf(out_keyname, "%s_Classes\\VirtualStore\\Machine\\Software\\%s\\%s", userSID.c_str(), szCompanyName, szAppName);
			}
		}

		return HKEY_USERS;
	}
	else
	{
		// This will probably fail
		if (section) {
			sprintf(out_keyname, "Software\\%s\\%s\\%s", szCompanyName, szAppName, section);
		}
		else {
			sprintf(out_keyname, "Software\\%s\\%s", szCompanyName, szAppName);
		}

		return HKEY_LOCAL_MACHINE;
	}
#else
	if (section) {
		sprintf(out_keyname, "Software\\%s\\%s\\%s", szCompanyName, szAppName, section);
	}
	else {
		sprintf(out_keyname, "Software\\%s\\%s", szCompanyName, szAppName);
	}

	return HKEY_LOCAL_MACHINE;
#endif
}