BgpFwDisplayBugCheckProgressUpdate
INT64 __fastcall BgpFwDisplayBugCheckProgressUpdate(UINT64 a1, INT64 a2, CHAR a3){
unsigned int v3;
unsigned int v6;
LARGE_INTEGER v7;
union _LARGE_INTEGER v8;
LARGE_INTEGER v9;
LONGLONG v10;
LONGLONG v11;
LONGLONG v12;
LONGLONG v13;
__int64 v14;
unsigned int DisplayType;
INT64 v16;
LONGLONG v17;
struct _UNICODE_STRING *v18;
struct _UNICODE_STRING *v19;
struct _UNICODE_STRING *v20;
int v22[14];
union _LARGE_INTEGER v23;
v3 = 0;
v23.QuadPart = 0i64;
v6 = a1;
if( (dword_140C13310 & 0x400000) != 0 || (dword_140C13310 & 0x10) == 0 )
return 0i64;
v7 = KeQueryPerformanceCounter(&v23);
v8 = v23;
v9 = v7;
v10 = v7.QuadPart - BcpStartTicks;
v11 = v9.QuadPart - *(_QWORD *)BcpLastProgressUpdateTicks;
v12 = 10 * v23.QuadPart;
v13 = 2 * v23.QuadPart;
if( a3 && v10 < v12 )
v14 = 100 * v10 / v12;
else
LODWORD(v14) = 100;
if( v6 <= (unsigned int)v14 )
LODWORD(v14) = v6;
if( v11 < v13 || (unsigned int)v14 < BcpLastProgressDisplayed )
{
LODWORD(v14) = BcpLastProgressDisplayed;
}
else
{
v22[0] = *((_DWORD *)BgInternal + 2);
v22[1] = *((_DWORD *)BgInternal + 1);
v22[2] = *((_DWORD *)BgInternal + 3);
DisplayType = BcpGetDisplayType(v22);
dword_140C4C328 = dword_140C13238;
BcpCursor = *(_QWORD *)BcpProgressOffset;
BcpDisplayProgress((unsigned int)v14, DisplayType, v16);
*(LARGE_INTEGER *)BcpLastProgressUpdateTicks = KeQueryPerformanceCounter(0i64);
BcpLastProgressDisplayed = v14;
}
if( v6 != 100 || (_DWORD)v14 == 100 )
{
v18 = &stru_140C53B30;
if( !a3 )
v18 = (struct _UNICODE_STRING *)&stru_140C53B40;
*(_QWORD *)a2 = v18;
BcpConvertProgressToString((unsigned int)v14, (UNICODE_STRING *)(a2 + 24));
v19 = &stru_140C53B80;
if( v6 != 1 )
v19 = (struct _UNICODE_STRING *)&stru_140C53BA0;
v20 = &stru_140C53B70;
if( v6 != 1 )
v20 = (struct _UNICODE_STRING *)&stru_140C53B90;
*(_QWORD *)(a2 + 8) = v20;
*(_QWORD *)(a2 + 16) = v19;
}
else
{
v17 = *(_QWORD *)&KeQueryPerformanceCounter(0i64) - *(_QWORD *)BcpLastProgressUpdateTicks;
if( v17 < v13 )
KeStallExecutionProcessor(1000000 * (v13 - v17) / v8.QuadPart);
return(unsigned int)BgpFwDisplayBugCheckProgressUpdate(0x64ui64, a2, a3);
}
return v3;
}Referenced by:
BgpFwDisplayBugCheckProgressUpdate
KiBugCheckProgress