MiFlushComplete

VOID __stdcall MiFlushComplete(VOID *Context, _IO_STATUS_BLOCK *IoStatus, UINT64 Reserved){
  __int64 v3; 
  __int16 v6; 
  UINT64 *v7; 
  _MI_CONTROL_AREA_WAIT_BLOCK *v8; 
  __int64 v9; 

  v3 = *((_QWORD *)Context + 9);
  v6 = *(_WORD *)(v3 + 10);
  if( (v6 & 0x200) != 0 )
  {
    MiRetardMdl((_MDL *)v3);
    v6 = *(_WORD *)(v3 + 10);
  }
  v7 = (UINT64 *)(v3
                + 48
                + 8
                * ((*(unsigned int *)(v3 + 40)
                  + 4095i64
                  + (unsigned __int64)((*(_DWORD *)(v3 + 32) + *(_DWORD *)(v3 + 44)) & 0xFFF)) >> 12));
  if( (v6 & 1) != 0 )
    MmUnmapLockedPages(*(VOID **)(v3 + 24), (_MDL *)v3);
  MiUnlockMdlWritePages((UINT64 *)(v3 + 48), v7, IoStatus);
  if( IoStatus->Status < 0 )
    IoStatus->Information = 0i64;
  v8 = MiDecrementModifiedWriteCount(*((_CONTROL_AREA **)Context + 4), 0i64);
  if( v8 )
    MiReleaseControlAreaWaiters(v8);
  if( (VOID *)v3 != (char *)Context + 80 )
  {
    ExFreePoolWithTag((PVOID)v3, 0);
    *((_QWORD *)Context + 9) = (char *)Context + 80;
  }
  *((_QWORD *)Context + 2) = 0i64;
  KeSetEvent((PRKEVENT)((char *)Context + 48), 0, 0);
  v9 = *((_QWORD *)Context + 5);
  if( v9 )
  {
    if( IoStatus->Status < 0 )
      *(_DWORD *)(v9 + 20) = IoStatus->Status;
    if( _InterlockedExchangeAdd((volatile signed __int32 *)(v9 + 16), 0xFFFFFFFF) == 1 )
      MiFreeOverlappedFlushEntry((_MI_OVERLAPPED_FLUSH_ENTRY *)v9);
  }
}

Referenced by:

MiIssueAsynchronousFlush