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