KsepRegistryEnumValue

INT64 __stdcall KsepRegistryEnumValue(
        PVOID KeyHandle,
        UINT64 Index,
        UINT64 ValueNameLength,
        WCHAR *ValueName,
        UINT64 *ActualLength){
  unsigned int v7; 
  INT64 result; 
  UINT8 *v10; 
  UINT8 *v11; 
  unsigned int v12; 
  UINT64 v13; 
  UINT64 v14; 
  UINT64 Length; 
  UINT64 Lengtha; 
  UINT64 ResultLength[5]; 
  LODWORD(Length) = 0;
  v7 = Index;
  LODWORD(ResultLength[0]) = 0;
  LODWORD(result) = ZwEnumerateValueKey(KeyHandle, Index, KeyValueBasicInformation, 0i64, Length, ResultLength);
  if( (_DWORD)result == -1073741789 || (_DWORD)result == -2147483643 )
  {
    KsepPoolAllocatePaged(LODWORD(ResultLength[0]));
    v11 = v10;
    if( v10 )
    {
      LODWORD(Lengtha) = ResultLength[0];
      v12 = ZwEnumerateValueKey(KeyHandle, v7, KeyValueBasicInformation, v10, Lengtha, ResultLength);
      if( !v12 )
      {
        v13 = *((unsigned int *)v11 + 2);
        v14 = v13 + 2;
        if( v13 + 2 <= ValueNameLength )
        {
          memmove((UINT8 *)ValueName, v11 + 12, v13);
          ValueName[(unsigned __int64)*((unsigned int *)v11 + 2) >> 1] = 0;
          v14 = *((unsigned int *)v11 + 2) + 2i64;
        }
        else
        {
          v12 = -1073741789;
        }
        *ActualLength = v14;
      }
      KsepPoolFreePaged(v11);
      return v12;
    }
    else
    {
      return 3221225495i64;
    }
  }
  return result;
}

Referenced by:

KsepDbQueryRegistryDeviceDataList