SshpFlushBlockerDataCache

INT64 __fastcall SshpFlushBlockerDataCache(UINT64 *a1){
  unsigned int v2; 
  unsigned int v3; 
  UINT64 *v4; 
  unsigned int v5; 
  __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  unsigned __int16 *v9; 
  UINT64 *v10; 
  __int64 v11; 
  __int64 v12; 
  __int64 v13; 
  _EPROCESS *v14; 
  INT64 result; 
  INT64 v16; 
  __int64 v17; 
  char v18; 
  int i; 
  int v20; 
  int v21; 
  char *v22; 
  __int64 v23[165]; 
  v20 = 0;
  v18 = 0;
  v21 = 0;
  if( SshpTraceHandleRegistered )
  {
    v2 = *((_DWORD *)a1 + 4);
    if( v2 )
    {
      v3 = 0;
      v4 = a1 + 1;
      i = 0;
      do
      {
        v5 = v3 + 4 * v3 + 2;
        v6 = 2i64 * (v5 + 2);
        v20 = *(unsigned __int16 *)a1[3 * v3 + 3] >> 1;
        v7 = 2i64 * (v5 + 1);
        v21 = LOWORD(a1[3 * v3 + 4]) >> 1;
        v8 = 2i64 * v5;
        v23[v8 - 1] = (__int64)v4;
        v23[v8] = 16i64;
        v23[v7 - 1] = (__int64)&v20;
        v23[v7] = 4i64;
        v9 = (unsigned __int16 *)a1[3 * v3 + 3];
        v10 = (UINT64 *)*v9;
        v23[v6 - 1] = *((_QWORD *)v9 + 1);
        v11 = 2i64 * (v5 + 3);
        LODWORD(v23[v6]) = (_DWORD)v10;
        HIDWORD(v23[v6]) = 0;
        v23[v11 - 1] = (__int64)&v21;
        v23[v11] = 4i64;
        LODWORD(v6) = LOWORD(a1[3 * v3 + 4]);
        v12 = 2i64 * (v5 + 4);
        v13 = a1[3 * ++v3 + 2];
        i = v3;
        LODWORD(v23[v12]) = v6;
        v23[v12 - 1] = v13;
        HIDWORD(v23[v12]) = 0;
      }
      while( v3 < v2 );
      v18 = SshpSessionId;
      v23[0] = 1i64;
      v22 = &v18;
      v23[2] = 4i64;
      v23[1] = (__int64)&i;
      v14 = (_EPROCESS *)(2i64 * (v2 + 4 * v2 + 2));
      v23[(_QWORD)v14 - 1] = (__int64)&SshpSessionId;
      v23[(_QWORD)v14] = 8i64;
      SSHSupportEtwWrite(v14, (UINT64 *)&SLEEPSTUDY_EVT_SCENARIO_BLOCKER_DATA.Id, v10);
    }
  }
  result = 0i64;
  for( i = 0; (unsigned int)result < *((_DWORD *)a1 + 4); i = result )
  {
    v16 = result + 1;
    v17 = 3 * v16;
    CmpFreeTransientPoolWithTag((PVOID)a1[3 * v16 + 2], *(unsigned int *)a1);
    *(_OWORD *)&a1[v17] = 0i64;
    a1[v17 + 2] = 0i64;
    result = (unsigned int)(i + 1);
  }
  *((_DWORD *)a1 + 4) = 0;
  return result;
}

Referenced by:

SshpSendSessionData