public string[] GetValueNames(RegistryKey rkey)
{
IntPtr handle = Win32RegistryApi.GetHandle(rkey);
ArrayList arrayList = new ArrayList();
int num = 0;
for (;;)
{
StringBuilder stringBuilder = new StringBuilder(1024);
int capacity = stringBuilder.Capacity;
RegistryValueKind registryValueKind = RegistryValueKind.Unknown;
int num2 = Win32RegistryApi.RegEnumValue(handle, num, stringBuilder, ref capacity, IntPtr.Zero, ref registryValueKind, IntPtr.Zero, IntPtr.Zero);
if (num2 == 0 || num2 == 234)
{
arrayList.Add(stringBuilder.ToString());
}
else
{
if (num2 == 259)
{
break;
}
if (num2 == 1018)
{
goto Block_3;
}
this.GenerateException(num2);
}
num++;
}
return((string[])arrayList.ToArray(typeof(string)));
Block_3:
throw RegistryKey.CreateMarkedForDeletionException();
}