MiFreeEnclaveModules

void __fastcall MiFreeEnclaveModules(volatile signed __int32 **a1, void *a2){
  volatile signed __int32 *v4; 
  __int64 v5; 
  volatile signed __int32 **v6; 
  while( 1 )
  {
    v4 = *a1;
    if( *a1 == (volatile signed __int32 *)a1 )
      break;
    if( a2 )
      DbgkUnMapViewOfSection(a2, *((_QWORD *)v4 + 2));
    v5 = *(_QWORD *)v4;
    if( *(volatile signed __int32 **)(*(_QWORD *)v4 + 8i64) != v4
      || (v6 = (volatile signed __int32 **)*((_QWORD *)v4 + 1), *v6 != v4) )
    {
      __fastfail(3u);
    }
    *v6 = (volatile signed __int32 *)v5;
    *(_QWORD *)(v5 + 8) = v6;
    MiDereferenceEnclaveModule(v4);
  }
}

Referenced by:

MiCanDeleteEnclave
MmFreeVirtualMemory