ViCheckMdlLength

UINT64 __stdcall ViCheckMdlLength(_MDL *Mdl, UINT64 Offset, UINT64 Length){
  UINT64 ByteCount; 
  unsigned int v5; 
  unsigned int v6; 

  if( !(_DWORD)Length )
    return 0i64;
  if( Mdl )
  {
    do
    {
      ByteCount = Mdl->ByteCount;
      if( Offset <= ByteCount )
        break;
      Mdl = Mdl->Next;
      Offset -= ByteCount;
    }
    while( Mdl );
    while( Mdl && (_DWORD)Length )
    {
      v5 = Mdl->ByteCount;
      Mdl = Mdl->Next;
      v6 = v5 - Offset;
      if( v6 >= (unsigned int)Length )
        v6 = Length;
      LODWORD(Length) = Length - v6;
      LODWORD(Offset) = 0;
    }
  }
  return(unsigned int)Length;
}

Referenced by:

VfBuildScatterGatherList
VfBuildScatterGatherListEx
VfGetScatterGatherList
VfGetScatterGatherListEx
VfMapTransfer
VfMapTransferEx