FopGetTableOffsetAndSize
NTSTATUS __stdcall FopGetTableOffsetAndSize(
_FILE_IMAGE *FileHandle,
UINT64 OffsetTableOffset,
UINT64 TagId,
UINT64 *FileOffset,
UINT64 *Size){
int v6;
int v7;
int v9;
unsigned __int16 v10;
unsigned int v11;
unsigned int v12;
unsigned int v13;
NTSTATUS v14;
unsigned __int32 v15;
unsigned __int32 v16;
unsigned __int32 v17;
__int64 Buffer;
int v20;
__int128 v21;
v6 = TagId;
Buffer = 0i64;
v20 = 0;
v7 = OffsetTableOffset;
v21 = 0i64;
v9 = FioFwReadBytesAtOffset(FileHandle, OffsetTableOffset, 0xCui64, &Buffer);
if( v9 < 0 )
{
v10 = WORD2(Buffer);
}
else
{
if( _byteswap_ulong(Buffer) != 0x10000 )
return -1073741637;
v10 = __ROR2__(WORD2(Buffer), 8);
v9 = 0;
}
if( v9 >= 0 )
{
v11 = 0;
v12 = v10;
v13 = v7 + 12;
if( v10 )
{
while( 1 )
{
v14 = FioFwReadBytesAtOffset(FileHandle, v13, 0x10ui64, &v21);
v15 = HIDWORD(v21);
v9 = v14;
v16 = DWORD2(v21);
v17 = v21;
if( v14 >= 0 )
{
v9 = 0;
v17 = _byteswap_ulong(v21);
v16 = _byteswap_ulong(DWORD2(v21));
v15 = _byteswap_ulong(HIDWORD(v21));
*(_QWORD *)&v21 = __PAIR64__(_byteswap_ulong(DWORD1(v21)), v17);
*((_QWORD *)&v21 + 1) = __PAIR64__(v15, v16);
}
if( v9 < 0 )
break;
if( v17 == v6 )
{
*(_DWORD *)FileOffset = v16;
*(_DWORD *)Size = v15;
return v9;
}
++v11;
v13 += 16;
if( v11 >= v12 )
return -1073741275;
}
}
else
{
return -1073741275;
}
}
return v9;
}Referenced by:
BgpRasInitializeRasterizer
FopInitializeFonts
FopValidateFontNameTable