SshpFreeBlockerEntry

NTSTATUS __stdcall SshpFreeBlockerEntry(PVOID P){
  _QWORD *v1; 
  INT64 v3; 
  __int64 v4; 
  unsigned __int8 v5; 
  int v6; 
  bool v7; 
  unsigned __int64 v8; 
  void *v9; 

  v1 = (_QWORD *)*((_QWORD *)P + 36);
  v3 = *((_QWORD *)P + 35);
  v4 = v1[4];
  if( v3 )
  {
    do
    {
      v5 = KeAcquireSpinLockRaiseToDpc((UINT64 *)v3);
      v6 = *((_DWORD *)P + 3);
      v7 = *(_DWORD *)(v3 + 12) == v6;
      *(_DWORD *)(v3 + 12) -= v6;
      v8 = v5;
      if( v7 )
        SshpSetBlockerActive(v3, 0);
      KxReleaseSpinLock((UINT64 *)v3);
      __writecr8(v8);
      v3 = *(_QWORD *)(v3 + 280);
    }
    while( v3 );
    v1 = (_QWORD *)*((_QWORD *)P + 36);
  }
  v9 = (void *)v1[11];
  if( v9 )
    ExFreePoolWithTag(v9, *(_DWORD *)(v4 + 24));
  ExFreePoolWithTag(v1, *(_DWORD *)(v4 + 24));
  return(unsigned int)ExFreePoolWithTag(P, *(_DWORD *)(v4 + 24));
}

Referenced by:

SshpDereferenceBlocker