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