SleepstudyHelperDestroyLibrary

NTSTATUS __stdcall SleepstudyHelperDestroyLibrary(PVOID P){
  NTSTATUS v1; 
  _QWORD *v3; 
  PVOID *v4; 
  _QWORD *v5; 
  _QWORD *v6; 
  __int64 v7; 
  _EX_PUSH_LOCK *v8; 
  __int64 v9; 
  _QWORD *v10; 
  PVOID *i; 

  v1 = 0;
  if( !P )
    return -1073741811;
  ExAcquirePushLockExclusiveEx(&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((ULONG_PTR)&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 = (_EX_PUSH_LOCK *)((char *)&SshpBlockerCollections + 32 * *((int *)v6 + 10));
    ExAcquirePushLockExclusiveEx(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((ULONG_PTR)v8);
    SshpDereferenceBlocker((_QWORD *)v6[13]);
  }
  for( i = (PVOID *)((char *)P + 56); *i != i; SshpFreeDataEntry(*i) )
    ;
  CmpFreeTransientPoolWithTag(P, *((unsigned int *)P + 6));
  return v1;
}

Referenced by:

SleepstudyHelper_Uninitialize
SshpUninitialize