SshpSendSessionData

VOID __fastcall SshpSendSessionData(){
  PVOID *i; 
  void *v1; 
  PKSPIN_LOCK j; 
  __int64 v3; 
  PKSPIN_LOCK v4; 
  __int64 ***v5; 
  _QWORD *v6; 
  __int64 v7; 
  PVOID *v8; 
  unsigned int k; 
  __int64 v10; 
  __int64 v11; 
  PVOID v12; 
  __int64 *v13; 
  __int64 v14; 
  ULONG_PTR *v15; 
  __int64 v16; 
  __int64 **v17; 
  __int64 *v18; 
  __int64 **v19; 
  INT64 result[2]; 
  __int64 v21; 
  char v22[16]; 
  PVOID P[47]; 
  memset((INT64)result, 0i64);
  v19 = &v18;
  v18 = (__int64 *)&v18;
  ExAcquirePushLockExclusiveEx((UINT64)&SshpLibraryListLock, 0i64);
  SSHSupportQueryInterruptTime();
  for( i = (PVOID *)SshpLibraryList; i != &SshpLibraryList; i = (PVOID *)*i )
  {
    v1 = i + 2;
    ExAcquirePushLockExclusiveEx((UINT64)(i + 2), 0i64);
    LODWORD(result[0]) = *((_DWORD *)i + 6);
    for( j = (PKSPIN_LOCK)i[5]; j != (PKSPIN_LOCK)(i + 5); j = (PKSPIN_LOCK)*j )
    {
      v3 = (__int64)j;
      SshpWriteBlocker((PKSPIN_LOCK)j[13]);
      if( (unsigned __int8)SshpQueryBlockerPendingDelete((PKSPIN_LOCK)j[13]) )
      {
        v4 = (PKSPIN_LOCK)*j;
        v5 = (__int64 ***)(j + 1);
        j = (PKSPIN_LOCK)j[1];
        if( *(_QWORD *)(*(_QWORD *)v3 + 8i64) != v3
          || *j != v3
          || (*j = (KSPIN_LOCK)v4, v4[1] = (KSPIN_LOCK)j, v6 = v19, *v19 != (__int64 *)&v18) )
        {
LABEL_34:
          __fastfail(3u);
        }
        *v5 = v19;
        *(_QWORD *)v3 = &v18;
        *v6 = v3;
        v19 = (__int64 **)v3;
      }
    }
    v7 = SshpSessionGuid - *(_QWORD *)&GUID_SPM_LOW_POWER_CS.Data1;
    if( (_QWORD)SshpSessionGuid == *(_QWORD *)&GUID_SPM_LOW_POWER_CS.Data1 )
      v7 = *((_QWORD *)&SshpSessionGuid + 1) - *(_QWORD *)GUID_SPM_LOW_POWER_CS.Data4;
    if( !v7 )
    {
      v8 = (PVOID *)i[7];
      if( v8 != i + 7 )
      {
        do
        {
          for( k = 0; k < *((_DWORD *)v8 + 10); ++k )
          {
            v10 = (__int64)&v8[4 * k + 6];
            if( (unsigned int)v21 >= 0x10 )
              SshpFlushBlockerDataCache((UINT64 *)result);
            v11 = 3i64 * (unsigned int)v21;
            *(_QWORD *)&v22[8 * v11] = v10;
            *(_OWORD *)&v22[8 * v11 + 8] = 0i64;
            if( (*(int(__fastcall **)(_QWORD))(v10 + 24))(*(_QWORD *)(v10 + 16)) < 0 )
            {
              v12 = P[v11];
              if( v12 )
                CmpFreeTransientPoolWithTag(v12, LODWORD(result[0]));
            }
            else
            {
              LODWORD(v21) = v21 + 1;
            }
          }
          v8 = (PVOID *)*v8;
        }
        while( v8 != i + 7 );
        v1 = i + 2;
      }
      SshpFlushBlockerDataCache((UINT64 *)result);
    }
    SSHSupportReleasePushLockExclusive(v1);
  }
  SSHSupportReleasePushLockExclusive(&SshpLibraryListLock);
  while( 1 )
  {
    v13 = v18;
    if( v18 == (__int64 *)&v18 )
      break;
    if( (__int64 **)v18[1] != &v18 )
      goto LABEL_34;
    v14 = *v18;
    if( *(__int64 **)(*v18 + 8) != v18 )
      goto LABEL_34;
    v18 = (__int64 *)*v18;
    *(_QWORD *)(v14 + 8) = &v18;
    v15 = &SshpBlockerCollections + 4 * *((int *)v13 + 10);
    ExAcquirePushLockExclusiveEx((UINT64)v15, 0i64);
    v16 = v13[2];
    if( *(__int64 **)(v16 + 8) != v13 + 2 )
      goto LABEL_34;
    v17 = (__int64 **)v13[3];
    if( *v17 != v13 + 2 )
      goto LABEL_34;
    *v17 = (__int64 *)v16;
    *(_QWORD *)(v16 + 8) = v17;
    SSHSupportReleasePushLockExclusive(v15);
    SshpDereferenceBlocker((_QWORD *)v13[13]);
  }
}

Referenced by:

SshpWnfCallback