BcpDisplayProgress

INT64 __fastcall BcpDisplayProgress(UINT64 ProgressValue, UINT64 a2, INT64 a3){
  unsigned int v3; 
  unsigned int v4; 
  bool v5; 
  __int64 v6; 
  INT64 v7; 
  INT64 v8; 
  struct _UNICODE_STRING *v9; 
  INT64 v10; 
  INT64 v11; 
  struct _UNICODE_STRING *v12; 
  __int64 v13; 
  int v14; 
  unsigned int v15; 
  unsigned int v16; 
  unsigned int v17; 
  int v18; 
  unsigned int v19; 
  int v20; 
  unsigned __int64 v22; 
  int v23; 
  int v24; 
  unsigned __int64 v25; 
  int v26; 
  UINT64 a1; 
  int v28; 
  UNICODE_STRING ProgressValueString; 
  char v30; 
  v3 = a2;
  v4 = ProgressValue;
  v25 = 0i64;
  v26 = 0;
  v23 = 0;
  v5 = (_DWORD)ProgressValue == 1;
  v24 = 0;
  v6 = 9i64 * (int)a2;
  v7 = (unsigned int)a2;
  v8 = LODWORD(qword_140C10E80[9 * (int)a2 + 1]);
  v9 = &stru_140C53B70;
  if( !v5 )
    v9 = (struct _UNICODE_STRING *)&stru_140C53B90;
  BcpDisplayCriticalString(&v9->Length, v8, a3, v7);
  *(_QWORD *)&ProgressValueString.Length = 0x80000i64;
  ProgressValueString.Buffer = (wchar_t *)&v30;
  BcpConvertProgressToString(v4, &ProgressValueString);
  BcpDisplayCriticalString(&ProgressValueString.Length, LODWORD(qword_140C10E80[v6 + 1]), v10, v3);
  v12 = &stru_140C53B80;
  if( v4 != 1 )
    v12 = (struct _UNICODE_STRING *)&stru_140C53BA0;
  BcpDisplayCriticalString(&v12->Length, LODWORD(qword_140C10E80[v6 + 1]), v11, v3);
  v13 = BcpCursor;
  v14 = dword_140C4C328;
  a1 = BcpCursor;
  v28 = dword_140C4C328;
  if( BcpCursorLessThan(&a1) )
  {
    v15 = a1;
    v16 = HIDWORD(a1);
    v25 = a1;
    v17 = *(_DWORD *)(*(_QWORD *)(qword_140C53C30 + 24) + 40i64);
    if( BcpTextBoxLeftEdgeOverride )
      v18 = *(_DWORD *)BcpTextBoxLeftEdgeOverride;
    else
      v18 = LODWORD(qword_140C10E80[v6 + 4]) + LODWORD(qword_140C10E80[v6 + 2]);
    if( BcpTextBoxRightEdgeOverride )
      v19 = *(_DWORD *)BcpTextBoxRightEdgeOverride;
    else
      v19 = LODWORD(qword_140C10E80[v6 + 4]) + LODWORD(qword_140C10E80[v6 + 3]) + LODWORD(qword_140C10E80[v6 + 2]);
    while( BcpCursorLessThan(&v25) )
    {
      BgpDisplayCharacterEx(0x20u, qword_140C53C30, v15, v16, v17, v17, &v23, &v24, v22, &BcpWorkspace);
      if( v20 < 0 )
        return 0i64;
      v15 += v23;
      LODWORD(v25) = v15;
      if( v15 > v19 )
      {
        v16 += v24;
        v15 = v18;
        v25 = __PAIR64__(v16, v18);
      }
    }
    v13 = a1;
  }
  if( (dword_140C13310 & 0x1000000) == 0 )
  {
    BcpProgressEnd = v13;
    dword_140C13258 = v14;
  }
  return 0i64;
}

Referenced by:

BcpGetComponentOffsets
BgpFwDisplayBugCheckProgressUpdate
BgpFwDisplayBugCheckScreen