SleepstudyHelperDestroyLibrary

INT64 __fastcall SleepstudyHelperDestroyLibrary(PVOID P){
  unsigned int v1; 
  _QWORD *v3; 
  PVOID *v4; 
  _QWORD *v5; 
  _QWORD *v6; 
  __int64 v7; 
  ULONG_PTR *v8; 
  __int64 v9; 
  _QWORD *v10; 
  PVOID *i; 
  v1 = 0;
  if( P )
  {
    ExAcquirePushLockExclusiveEx((UINT64)&SshpLibraryListLock, 0i64);
    v3 = *(_QWORD **)P;
    if( *(PVOID *)(*(_QWORD *)P + 8i64) != P || (v4 = (PVOID *)*((_QWORD *)P + 1), *v4 != P) )
LABEL_17:
      __fastfail(3u);
    *v4 = v3;
    v3[1] = v4;
    SSHSupportReleasePushLockExclusive(&SshpLibraryListLock);
    v5 = (char *)P + 40;
    while( 1 )
    {
      v6 = (_QWORD *)*v5;
      if( (_QWORD *)*v5 == v5 )
        break;
      if( (_QWORD *)v6[1] != v5 )
        goto LABEL_17;
      v7 = *v6;
      if( *(_QWORD **)(*v6 + 8i64) != v6 )
        goto LABEL_17;
      *v5 = v7;
      *(_QWORD *)(v7 + 8) = v5;
      v8 = &SshpBlockerCollections + 4 * *((int *)v6 + 10);
      ExAcquirePushLockExclusiveEx((UINT64)v8, 0i64);
      v9 = v6[2];
      if( *(_QWORD **)(v9 + 8) != v6 + 2 )
        goto LABEL_17;
      v10 = (_QWORD *)v6[3];
      if( (_QWORD *)*v10 != v6 + 2 )
        goto LABEL_17;
      *v10 = v9;
      *(_QWORD *)(v9 + 8) = v10;
      SSHSupportReleasePushLockExclusive(v8);
      SshpDereferenceBlocker((_QWORD *)v6[13]);
    }
    for( i = (PVOID *)((char *)P + 56); *i != i; SshpFreeDataEntry(*i) )
      ;
    CmpFreeTransientPoolWithTag(P, *((unsigned int *)P + 6));
  }
  else
  {
    return(unsigned int)-1073741811;
  }
  return v1;
}

Referenced by:

SleepstudyHelper_Uninitialize
SshpUninitialize