HKLM\SOFTWARE\Classes\AIFFFile\FriendlyTypeName
It returns ERROR_MORE_DATA, but if I print the value out anyway it returns the value...
Here is the code:
int PrintRegKey(HKEY hKey, HKEY szHKEY, char *RegistryLine, char *szRegistryKey)
{
DWORD items = 0;
DWORD buffersizeentry = 0;
DWORD buffersizevalue = 0;
DWORD buffersizesubkey = 0;
DWORD DataType = 0;
TCHAR szRegistryEntry[MAX_PATH + 1];
TCHAR szRegistryValue1[MAX_PATH + 1];
TCHAR szRegistrySubKey[MAX_PATH + 1];
// printf("%s %s\n", szRegistryKey, RegistryLine);
buffersizevalue = sizeof(szRegistryValue1);
buffersizeentry = sizeof(szRegistryEntry);
// RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &buffersizevalue, &buffersizeentry, NULL, NULL);
// buffersizevalue++;
// buffersizeentry++;
long test = RegEnumValue(hKey, items, szRegistryValue1, &buffersizevalue, 0, &DataType, (LPBYTE) &szRegistryEntry, &buffersizeentry);
while (test != ERROR_NO_MORE_ITEMS)
{
if (1 != 1)
{
fprintf(fErrorLog, "Buffer size inadequate for attribute in key: %s %s %i %i\n", szRegistryKey, szRegistryEntry, buffersizevalue, buffersizeentry);
}
else
{
if (test == ERROR_MORE_DATA)
{
fprintf(fErrorLog, "Buffer size inadequate for attribute in key: %s %s %i %i\n", szRegistryKey, szRegistryEntry, buffersizevalue, buffersizeentry);
fprintf(fOut, "ERROR_MORE_DATA\n"

;
}
buffersizevalue = sizeof(szRegistryValue1);
buffersizeentry = sizeof(szRegistryEntry);
switch(DataType)
{
case (REG_BINARY):
{
fprintf(fOut, "%s;%s\\%s\\%s;", HOSTNAME, RegistryLine, szRegistryKey, szRegistryValue1);
RegQueryValueEx(hKey, szRegistryValue1, NULL, NULL, NULL, &buffersizeentry);
for (DWORD i = 0; i < buffersizeentry; i++)
{
fprintf(fOut, "%02x ", szRegistryEntry
& 255);
}
fprintf(fOut, "\n"
;
break;
}
case (REG_DWORD):
{
fprintf(fOut, "%s;%s\\%s\\%s;%x\n", HOSTNAME, RegistryLine, szRegistryKey, szRegistryValue1, *szRegistryEntry);
break;
}
case (REG_EXPAND_SZ):
{
fprintf(fOut, "%s;%s\\%s\\%s;%s\n", HOSTNAME, RegistryLine, szRegistryKey, szRegistryValue1, szRegistryEntry);
break;
}
case (REG_MULTI_SZ):
{
char *pointer = szRegistryEntry;
while (pointer[0] != '\0')
{
fprintf(fOut, "%s;%s\\%s\\%s;%s\n", HOSTNAME, RegistryLine, szRegistryKey, szRegistryValue1, pointer);
while (pointer[0] != '\0') pointer++;
pointer++;
}
break;
}
case (REG_SZ):
{
fprintf(fOut, "%s;%s\\%s\\%s;%s\n", HOSTNAME, RegistryLine, szRegistryKey, szRegistryValue1, szRegistryEntry);
break;
}
case (REG_LINK):
case (REG_NONE):
//case (REG_DWORD_LITTLE_ENDIAN):
//case (REG_DWORD_BIG_ENDIAN):
//case (REG_QWORD):
//case (REG_QWORD_LITTLE_ENDIAN):
default: break;
}
}
items++;
test = RegEnumValue(hKey, items, szRegistryValue1, &buffersizevalue, 0, &DataType, (LPBYTE) &szRegistryEntry, &buffersizeentry);
}
items = 0;
buffersizesubkey = sizeof(szRegistrySubKey);
while (RegEnumKey(hKey, items, szRegistrySubKey, buffersizesubkey) == ERROR_SUCCESS)
{
buffersizesubkey = sizeof(szRegistrySubKey);
//printf("%s\\%s\\%s\n", RegistryLine, szRegistryKey, szRegistrySubKey);
items++;
char *newkey = (char *) malloc (strlen(szRegistryKey) + strlen(szRegistrySubKey) + 2);
HKEY newHKEY;
strcpy(newkey, szRegistryKey);
strcat(newkey, "\\"
;
strcat(newkey, szRegistrySubKey);
if (RegOpenKeyEx(szHKEY, newkey, 0, KEY_READ, &newHKEY) == ERROR_SUCCESS)
{
PrintRegKey(newHKEY, szHKEY, RegistryLine, newkey);
free(newkey);
RegCloseKey(newHKEY);
}
}
return 0;
}
int ReadReg(char *RegistryLine)
{
HKEY hKey;
HKEY szHKEY;
DWORD buffersizeentry = 0;
DWORD buffersizevalue = 0;
DWORD buffersizesubkey = 0;
DWORD DataType = 0;
TCHAR szRegistryEntry[MAX_PATH + 1];
// TCHAR szRegistryValue1[MAX_PATH + 1];
// TCHAR szRegistrySubKey[MAX_PATH + 1];
LPTSTR szRegistryKey = (LPTSTR) malloc (256);
LPTSTR szRegistryValue = (LPTSTR) malloc (256);
//LPTSTR szRegistryValueEnum;
szRegistryKey = strchr(RegistryLine, '\\') + 1;
szRegistryValue = strrchr(RegistryLine, '\\') + 1;
szRegistryKey[strlen(szRegistryKey) - strlen(szRegistryValue) - 1] = '\0';
RegistryLine[strlen(RegistryLine) - strlen(szRegistryKey) - 1] = '\0';
if (strcmp(RegistryLine, "HKEY_CLASSES_ROOT"
== 0) szHKEY = HKEY_CLASSES_ROOT;
if (strcmp(RegistryLine, "HKEY_CURRENT_USER"
== 0) szHKEY = HKEY_CURRENT_USER;
if (strcmp(RegistryLine, "HKEY_LOCAL_MACHINE"
== 0) szHKEY = HKEY_LOCAL_MACHINE;
if (strcmp(RegistryLine, "HKEY_USERS"
== 0) szHKEY = HKEY_USERS;
if (strcmp(RegistryLine, "HKEY_CURRENT_CONFIG"
== 0) szHKEY = HKEY_CURRENT_CONFIG;
if (RegOpenKeyEx(szHKEY, szRegistryKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
{
if (strcmp(szRegistryValue, "*"
== 0)
{
PrintRegKey(hKey, szHKEY, RegistryLine, szRegistryKey);
}
else
{
buffersizeentry = sizeof(szRegistryEntry);
if (RegQueryValueEx(hKey, szRegistryValue, 0, &DataType, (LPBYTE) &szRegistryEntry, &buffersizeentry) == ERROR_SUCCESS)
{
fprintf(fOut, "%s;%s\\%s\\%s;%s\n", HOSTNAME, RegistryLine, szRegistryKey, szRegistryValue, szRegistryEntry);
}
else
{
fprintf(fErrorLog, "Error getting attibute for %s\\%s\\%s\n", RegistryLine, szRegistryKey, szRegistryValue);
}
}
}
else
{
fprintf(fErrorLog, "Error opening key: %s\\%s\\%s\n", RegistryLine, szRegistryKey, szRegistryValue);
}
return 0;
}