MiFreeEnclaveModules

VOID __stdcall MiFreeEnclaveModules(INT32 **a1, _EPROCESS *a2){
  INT32 *v4; 
  __int64 v5; 
  INT32 **v6; 

  while( 1 )
  {
    v4 = *a1;
    if( *a1 == (INT32 *)a1 )
      break;
    if( a2 )
      DbgkUnMapViewOfSection(&a2->Pcb, *((VOID **)v4 + 2));
    v5 = *(_QWORD *)v4;
    if( *(INT32 **)(*(_QWORD *)v4 + 8i64) != v4 || (v6 = (INT32 **)*((_QWORD *)v4 + 1), *v6 != v4) )
      __fastfail(3u);
    *v6 = (INT32 *)v5;
    *(_QWORD *)(v5 + 8) = v6;
    MiDereferenceEnclaveModule(v4);
  }
}

Referenced by:

MiCanDeleteEnclave
MmFreeVirtualMemory