ViFreeMapRegistersToFile

INT64 __fastcall ViFreeMapRegistersToFile(INT64 a1, INT64 a2, UINT64 a3){
  unsigned int v3; 
  unsigned __int64 v5; 
  INT64 result; 
  INT64 v7; 
  v3 = *(_DWORD *)(a1 + 32);
  if( (_DWORD)a3 )
  {
    v5 = ((a2 & 0xFFF) + (unsigned __int64)(unsigned int)a3 + 4095) >> 12;
    if( (unsigned int)v5 >= v3 )
      LODWORD(v5) = *(_DWORD *)(a1 + 32);
  }
  else
  {
    if( v3 > 1 )
      v3 = 1;
    LODWORD(v5) = v3;
  }
  result = (INT64)ViFindMappedRegisterInFile(a1, a2, 0i64);
  if( result )
  {
    if( (_DWORD)v5 )
    {
      v7 = result + 12;
      do
      {
        if( !*(_QWORD *)(v7 - 12) )
          break;
        ViCheckTag(
          (PVOID)(*(_QWORD *)(v7 + 4) + 4096i64 + (*(_DWORD *)(v7 - 12) & 0xFFF)),
          *(unsigned int *)(v7 - 4),
          1ui64,
          3u);
        *(_DWORD *)v7 &= 0xFFFFFFFC;
        *(_QWORD *)(v7 - 12) = 0i64;
        *(_DWORD *)(v7 - 4) = 0;
        v7 += 32i64;
        _InterlockedDecrement((volatile signed __int32 *)(a1 + 32));
        LODWORD(v5) = v5 - 1;
      }
      while( (_DWORD)v5 );
    }
    return 1i64;
  }
  return result;
}

Referenced by:

ViFlushDoubleBuffer