private unsafe string[] GetValueNamesCore(int values)
{
string[] names = new string[values];
char[] name = new char[MaxValueLength + 1];
int namelen;
fixed (char* namePtr = &name[0])
{
for (int i = 0; i < values; i++)
{
namelen = name.Length;
int ret = Interop.Advapi32.RegEnumValue(_hkey,
i,
namePtr,
ref namelen,
IntPtr.Zero,
null,
null,
null);
if (ret != 0)
{
// ignore ERROR_MORE_DATA if we're querying HKEY_PERFORMANCE_DATA
if (!(IsPerfDataKey() && ret == Interop.Errors.ERROR_MORE_DATA))
Win32Error(ret, null);
}
names[i] = new string(namePtr);
}
}
return names;
}