SshpFlushBlockerDataCache

NTSTATUS __stdcall SshpFlushBlockerDataCache(UINT64 *a1){
  unsigned int v2; 
  unsigned int v3; 
  UINT64 *v4; 
  unsigned int v5; 
  __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  unsigned __int16 *v9; 
  __int64 v10; 
  __int64 v11; 
  __int64 v12; 
  unsigned __int64 v13; 
  __int64 v14; 
  __int64 v15; 
  __int64 v16; 
  __int64 v17; 
  char v19; 
  unsigned int i; 
  int v21; 
  int v22; 
  _EVENT_DATA_DESCRIPTOR v23; 
  int *v24; 
  __int64 v25; 

  v21 = 0;
  v19 = 0;
  v22 = 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);
        v21 = *(unsigned __int16 *)a1[3 * v3 + 3] >> 1;
        v7 = 2i64 * (v5 + 1);
        v22 = LOWORD(a1[3 * v3 + 4]) >> 1;
        v8 = 2i64 * v5;
        *(&v23.Ptr + v8) = (unsigned __int64)v4;
        *((_QWORD *)&v23.Size + v8) = 16i64;
        *(&v23.Ptr + v7) = (unsigned __int64)&v21;
        *((_QWORD *)&v23.Size + v7) = 4i64;
        v9 = (unsigned __int16 *)a1[3 * v3 + 3];
        v10 = *v9;
        *(&v23.Ptr + v6) = *((_QWORD *)v9 + 1);
        v11 = 2i64 * (v5 + 3);
        *(&v23.Size + 2 * v6) = v10;
        *(&v23.Reserved + 2 * v6) = 0;
        *(&v23.Ptr + v11) = (unsigned __int64)&v22;
        *((_QWORD *)&v23.Size + v11) = 4i64;
        LODWORD(v6) = LOWORD(a1[3 * v3 + 4]);
        v12 = 2i64 * (v5 + 4);
        v13 = a1[3 * ++v3 + 2];
        i = v3;
        *(&v23.Size + 2 * v12) = v6;
        *(&v23.Ptr + v12) = v13;
        *(&v23.Reserved + 2 * v12) = 0;
      }
      while( v3 < v2 );
      v19 = SshpSessionId;
      *(_QWORD *)&v23.Size = 1i64;
      v23.Ptr = (unsigned __int64)&v19;
      v25 = 4i64;
      v24 = (int *)&i;
      v14 = 2i64 * (v2 + 4 * v2 + 2);
      *(&v23.Ptr + v14) = (unsigned __int64)&SshpSessionId;
      *((_QWORD *)&v23.Size + v14) = 8i64;
      SSHSupportEtwWrite(v14, &SLEEPSTUDY_EVT_SCENARIO_BLOCKER_DATA, v10, v3 + 4 * v3 + 3, &v23);
    }
  }
  v15 = 0i64;
  for( i = 0; (unsigned int)v15 < *((_DWORD *)a1 + 4); i = v15 )
  {
    v16 = v15 + 1;
    v17 = 3 * v16;
    CmpFreeTransientPoolWithTag((VOID *)a1[3 * v16 + 2], *(unsigned int *)a1);
    *(_OWORD *)&a1[v17] = 0i64;
    a1[v17 + 2] = 0i64;
    v15 = i + 1;
  }
  *((_DWORD *)a1 + 4) = 0;
  return v15;
}

Referenced by:

SshpSendSessionData