FopReadNamingTable

__int64 __fastcall FopReadNamingTable(_FILE_IMAGE *a1, UINT64 a2, _QWORD *a3){
  int v4; 
  NTSTATUS NameRecord; 
  __int16 v7; 
  UINT64 v8; 
  unsigned int v9; 
  unsigned int v10; 
  _WORD *Memory; 
  unsigned int v12; 
  unsigned int v13; 
  __int128 Buffer; 
  __int16 v16; 

  v16 = 0;
  v4 = a2;
  Buffer = 0i64;
  NameRecord = FioFwReadBytesAtOffset(a1, a2, 6ui64, &Buffer);
  if( NameRecord >= 0 )
  {
    LOWORD(Buffer) = __ROR2__(Buffer, 8);
    v7 = __ROR2__(WORD2(Buffer), 8);
    WORD1(Buffer) = __ROR2__(WORD1(Buffer), 8);
    v8 = 18i64;
    v9 = WORD1(Buffer);
    if( WORD1(Buffer) )
    {
      v10 = 12 * WORD1(Buffer) + 18;
      if( v10 < 0x12 )
        return(unsigned int)-1073741675;
      v8 = v10;
      NameRecord = 0;
    }
    Memory = BgpFwAllocateMemory(v8);
    if( Memory )
    {
      v12 = v4 + 6;
      *(_DWORD *)Memory = Buffer;
      Memory[2] = v7;
      v13 = 0;
      if( v9 )
      {
        while( 1 )
        {
          NameRecord = FopReadNameRecord(a1, v12, &Memory[6 * v13 + 3]);
          if( NameRecord < 0 )
            break;
          ++v13;
          v12 += 12;
          if( v13 >= v9 )
            goto LABEL_9;
        }
        BgpFwFreeMemory(Memory);
      }
      else
      {
LABEL_9:
        *a3 = Memory;
      }
    }
    else
    {
      return(unsigned int)-1073741801;
    }
  }
  return(unsigned int)NameRecord;
}

Referenced by:

FopValidateFontNameTable