ViGetMdlBufferSa

VOID *__stdcall ViGetMdlBufferSa(ULONG_PTR Mdl, VOID *BufferVA){
  UINT64 v2; 
  __int64 v4; 
  __int64 v5; 
  char *v6; 
  UINT64 Param3; 
  UINT64 Priority; 
  UINT64 v10; 

  v2 = *(_QWORD *)&Mdl;
  v4 = *(unsigned int *)(*(_QWORD *)&Mdl + 44i64);
  v5 = *(_QWORD *)(v2 + 32);
  if( (unsigned __int64)BufferVA < v5 + v4
    || (unsigned __int64)BufferVA >= v4 + v5 + (unsigned __int64)*(unsigned int *)(v2 + 40) )
  {
    ViHalPreprocessOptions(
      &qword_140C12CD0,
      (PSTR)"Virtual address %p out of bounds of MDL %p",
      0x1Bui64,
      (UINT64)BufferVA,
      v2,
      0i64,
      v10);
    VfReportIssueWithOptions(0xE6ui64, 0x1Bu, (ULONG_PTR)BufferVA, v2, 0, &qword_140C12CD0);
  }
  else
  {
    if( (*(_BYTE *)(v2 + 10) & 5) != 0 )
    {
      v6 = *(char **)(v2 + 24);
    }
    else
    {
      LODWORD(Priority) = 1073741840;
      LODWORD(Param3) = 0;
      v6 = (char *)MmMapLockedPagesSpecifyCache((_MDL *)v2, 0, MmCached, 0i64, Param3, Priority);
    }
    if( v6 )
      return &v6[-*(unsigned int *)(v2 + 44) - *(_QWORD *)(v2 + 32) + (_QWORD)BufferVA];
    ViHalPreprocessOptions(
      (UINT64 *)((char *)&qword_140C12CD0 + 4),
      (PSTR)"Dma MDL %p not mapped in system VA.",
      0x22ui64,
      v2,
      0i64,
      0i64,
      v10);
    VfReportIssueWithOptions(0xE6ui64, 0x22u, v2, 0, 0, (UINT64 *)((char *)&qword_140C12CD0 + 4));
  }
  return 0i64;
}

Referenced by:

ViCopyBackModifiedBuffer
ViFlushDoubleBuffer
ViSwap