MiUnmapViewOfSection

__int64 __fastcall MiUnmapViewOfSection(ULONG_PTR BugCheckParameter1, unsigned __int64 a2, unsigned int a3, int a4){
  int v4; 
  __int64 v5; 
  __int64 v8; 
  int v9; 
  ULONG_PTR v10; 
  __int64 v11; 
  unsigned int v12; 
  unsigned int v13; 
  __int64 v14; 
  unsigned __int64 v15; 
  __int64 v16; 
  int v17; 
  INT64 ***VadEvent; 
  __int64 ImageSize; 
  __int64 ImageChecksum; 
  __int64 ImageSignatureLevel; 
  int ImageSignatureType; 
  INT64 a3a; 
  __int64 v25; 
  PVOID v26; 
  _KAPC_STATE ApcState; 
  v26 = (PVOID)BugCheckParameter1;
  LODWORD(a3a) = 0;
  memset(&ApcState, 0, sizeof(ApcState));
  v4 = 0;
  v5 = 0i64;
  v25 = 0i64;
  HIDWORD(a3a) = a3;
  v8 = *((_QWORD *)KeGetCurrentThread() + 23);
  v9 = a4 & 0x4000000;
  if( (a4 & 0x4000000) != 0 && a2 != (a2 & 0xFFFFFFFFFFFFF000ui64) )
    return 3221225712i64;
  if( v8 != BugCheckParameter1 )
  {
    KiStackAttachProcess((_KPROCESS *)BugCheckParameter1, 0i64, &ApcState);
    v4 = 1;
  }
  v10 = MiObtainReferencedVadEx(a2, 1, &a3a);
  v11 = v10;
  if( !v10 )
  {
    v17 = a3a;
    if( (_DWORD)a3a == -1073741664 )
      v17 = -1073741799;
    goto LABEL_13;
  }
  v12 = *(_DWORD *)(v10 + 48);
  v13 = v12 >> 4;
  if( (v12 & 0x100000) == 0 || (v13 & 7) == 1 )
  {
    v14 = *(unsigned int *)(v10 + 24);
    v15 = (v14 | ((unsigned __int64)*(unsigned __int8 *)(v10 + 32) << 32)) << 12;
    if( (v13 & 7) == 2 && (v12 & 0xF80) == 896 )
      v5 = (v14 | ((unsigned __int64)*(unsigned __int8 *)(v10 + 32) << 32)) << 12;
    if( (v12 & 8) != 0 && (*(_DWORD *)(BugCheckParameter1 + 1124) & 0x20) == 0 )
    {
      v17 = MiCheckSecuredVad(
              v10,
              v15,
              ((*(unsigned int *)(v10 + 28) | ((unsigned __int64)*(unsigned __int8 *)(v10 + 33) << 32))
             - (v14 | ((unsigned __int64)*(unsigned __int8 *)(v10 + 32) << 32))
             + 1) << 12,
              0x55u,
              *((_BYTE *)KeGetCurrentThread() + 562));
      if( v17 < 0 )
        goto LABEL_35;
    }
    if( v9 )
    {
      if( v15 != a2 || (VadEvent = MiLocateVadEvent(v11, 128i64)) == 0i64 )
      {
        v17 = -1073741800;
        goto LABEL_35;
      }
      v16 = (__int64)VadEvent[1];
      VadEvent[1] = 0i64;
      ExAcquirePushLockExclusiveEx(v16 + 40, 0i64);
      *(_DWORD *)(v16 + 24) = *(_DWORD *)(v11 + 24);
      *(_BYTE *)(v16 + 32) = *(_BYTE *)(v11 + 32);
      *(_DWORD *)(v16 + 28) = *(_DWORD *)(v11 + 28);
      *(_BYTE *)(v16 + 33) = *(_BYTE *)(v11 + 33);
    }
    else
    {
      v16 = v25;
    }
    if( (*(_DWORD *)(v11 + 48) & 0x70) == 16 )
      MiDeleteVad((_MMVAD *)v11, v16);
    else
      MiUnmapVad(
        (_MMVAD *)v11,
        v16,
        HIDWORD(a3a),
        v14,
        ImageSize,
        ImageChecksum,
        ImageSignatureLevel,
        ImageSignatureType);
    v17 = 0;
    goto LABEL_13;
  }
  v17 = -1073741799;
LABEL_35:
  MiUnlockAndDereferenceVad((PVOID)v11);
LABEL_13:
  if( v4 == 1 )
    KiUnstackDetachProcess(&ApcState, 0i64);
  if( v5 )
    DbgkUnMapViewOfSection(v26, v5);
  return(unsigned int)v17;
}

Referenced by:

AlpcViewDestroyProcedure
MiDeleteHotPatchEntry
MiMapViewOfSection
MiPerformImageHotPatch
MiUnmapImageForEnclaveUse
MiUnmapImageInSystemSpace
MmUnmapViewOfSection
NtMapCMFModule
NtUnmapViewOfSectionEx
PsShutdownSystem