CcLockSystemCacheBuffer

UINT64 __fastcall CcLockSystemCacheBuffer(VOID *a1, MDL **a2, UINT64 a3, INT64 a4, INT64 *a5){
  int v5; 
  PVOID MappedSystemVa; 
  PMDL Mdl; 
  PMDL v9; 
  int v10; 
  v5 = a4;
  MappedSystemVa = 0i64;
  *(_DWORD *)a5 = 0;
  Mdl = IoAllocateMdl(a1, a3, 0, 0, 0i64);
  v9 = Mdl;
  if( !Mdl )
  {
    *(_DWORD *)a5 = -1073741670;
LABEL_10:
    if( v9 )
    {
      MmUnlockPages(v9);
      IoFreeMdl(v9);
      v9 = 0i64;
    }
    goto LABEL_12;
  }
  MiProbeAndLockPages((INT64)Mdl, 0, v5 != 0);
  v10 = *(_DWORD *)a5;
  if( *(int *)a5 < 0 )
    goto LABEL_10;
  if( (v9->MdlFlags & 5) != 0 )
  {
    MappedSystemVa = v9->MappedSystemVa;
  }
  else
  {
    MappedSystemVa = MmMapLockedPagesSpecifyCache(v9, 0, MmCached, 0i64, 0, 0x40000000u);
    v10 = *(_DWORD *)a5;
  }
  if( !MappedSystemVa )
  {
    v10 = -1073741670;
    *(_DWORD *)a5 = -1073741670;
  }
  if( v10 < 0 )
    goto LABEL_10;
LABEL_12:
  *a2 = v9;
  return(UINT64)MappedSystemVa;
}

Referenced by:

CcCopyBytesToUserBuffer
CcMapAndCopyInToCache