RaspGetXExtent
NTSTATUS __stdcall RaspGetXExtent(
WCHAR Character,
_TEXT_ATTRIBUTES *TextAttributes,
UINT64 *XExtent,
_CHARACTER_CACHE *Workspace,
UINT8 ForceBitmapToCallerCache,
_BG_RASTERIZER_WORKSPACE *a9){
_BG_RASTERIZER_WORKSPACE *v8;
int v9;
_GRAPHICS_RECTANGLE *v10;
int v11;
__int64 v12;
UINT64 v13;
UINT64 v14;
_GRAPHICS_RECTANGLE **v15;
char *Memory;
__int64 v18;
_BG_RASTERIZER_WORKSPACE *v19;
_BG_RASTERIZER_WORKSPACE v20;
UINT64 *FontHandle;
_CACHED_BITMAP *Match;
_BG_RASTERIZER_WORKSPACE v23[4];
__int64 v24;
char v25[128];
_GRAPHICS_RECTANGLE *MaxRow;
memset(v25, 0i64, 0x46u);
v8 = a9;
v9 = 0;
Match = 0i64;
v10 = 0i64;
v11 = 0;
MaxRow = 0i64;
v12 = *(_QWORD *)a9;
*(_DWORD *)&ForceBitmapToCallerCache = 0;
v24 = 0i64;
*(_OWORD *)v23 = 0i64;
if( Character >= 0x20u )
{
v13 = (unsigned int)TextAttributes[4];
a9 = (_BG_RASTERIZER_WORKSPACE *)*((_QWORD *)TextAttributes + 1);
RaspGetCacheEntry((_BITMAP_CACHE *)&SbiVmbusArrivalEvent + 16, Character, v13, (unsigned int)a9[10], a9, &Match);
Memory = (char *)Match;
if( Match )
{
LABEL_3:
v11 = *((_DWORD *)Memory + 11);
*((_QWORD *)v8 + 2) = *(_QWORD *)(Memory + 62);
goto LABEL_4;
}
LODWORD(FontHandle) = 0;
v9 = RaspRasterize(
TextAttributes,
Character,
v14,
v15,
FontHandle,
(INT64 *)&MaxRow,
(_BG_RASTERIZER_WORKSPACE *)&ForceBitmapToCallerCache);
if( v9 >= 0 )
{
if( v12 )
{
Memory = v25;
LABEL_10:
v18 = *((_QWORD *)v8 + 2);
v19 = a9;
v10 = MaxRow;
v20 = a9[10];
*((_DWORD *)Memory + 10) = TextAttributes[4];
*((_DWORD *)Memory + 11) = ForceBitmapToCallerCache;
*((_DWORD *)Memory + 12) = 0;
*((_DWORD *)Memory + 13) = 4;
*((_DWORD *)Memory + 14) = 4;
*((_WORD *)Memory + 30) = Character;
*((_DWORD *)Memory + 9) = v20;
*((_QWORD *)Memory + 3) = v19;
*((_QWORD *)Memory + 2) = v10;
*(_QWORD *)(Memory + 62) = v18;
if( !v12 )
RaspAddCacheEntry((_BITMAP_CACHE *)&SbiVmbusArrivalEvent + 16, (_CACHED_BITMAP *)Memory);
goto LABEL_3;
}
Memory = (char *)RaspAllocateMemory(0x46ui64, v23);
if( Memory )
goto LABEL_10;
v9 = -1073741801;
}
v10 = MaxRow;
v11 = ForceBitmapToCallerCache;
}
LABEL_4:
*(_DWORD *)XExtent = v11;
if( v12 || v9 < 0 )
{
if( v10 )
RaspFreeMemory(v10, v8);
}
return v9;
}Referenced by:
BcpGetCharacterMaxResourceProfile
BgpRasGetGlyphAdvanceWidth