MmIsFileMapped
__int64 __fastcall MmIsFileMapped(ULONG_PTR a1, __int64 a2){
_SECTION_OBJECT_POINTERS *v2;
unsigned int v3;
__int64 v4;
_ETHREAD *CurrentThread;
int v6;
_QWORD *v7;
_QWORD *i;
_QWORD **v9;
INT64 v10;
_QWORD *v11;
_QWORD *v12;
_CONTROL_AREA **v13;
_CONTROL_AREA *v14;
_FILE_OBJECT *v15;
_KAPC_STATE ApcState;
v2 = *(_SECTION_OBJECT_POINTERS **)(a2 + 40);
memset(&ApcState, 0, sizeof(ApcState));
v3 = 0;
v4 = a1;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( *((_QWORD *)CurrentThread + 23) == a1 )
{
v6 = 0;
}
else
{
KiStackAttachProcess((_KPROCESS *)a1, 0i64, &ApcState);
v6 = 1;
}
LOCK_ADDRESS_SPACE_SHARED(CurrentThread, (_EPROCESS *)v4);
v7 = *(_QWORD **)(v4 + 2008);
i = 0i64;
while( v7 )
{
i = v7;
v7 = (_QWORD *)*v7;
}
if( i )
{
do
{
v9 = (_QWORD **)i[1];
v10 = (INT64)i;
v11 = i;
if( v9 )
{
v12 = *v9;
for( i = (_QWORD *)i[1]; v12; v12 = (_QWORD *)*v12 )
i = v12;
}
else
{
while( 1 )
{
i = (_QWORD *)(i[2] & 0xFFFFFFFFFFFFFFFCui64);
if( !i || (_QWORD *)*i == v11 )
break;
v11 = i;
}
}
if( (*(_DWORD *)(v10 + 48) & 0x100000) == 0 )
{
MiLockVadShared((INT64)CurrentThread, v10);
if( !(unsigned int)MiVadDeleted(v10) )
{
v13 = *(_CONTROL_AREA ***)(v10 + 72);
v14 = *v13;
if( *((_QWORD *)*v13 + 8) )
{
v15 = MiReferenceControlAreaFile(*v13);
if( v15->SectionObjectPointer == v2 )
v3 = 1;
MiDereferenceControlAreaFile((__int64)v14, (unsigned __int64)v15);
}
}
MiUnlockVadShared((INT64)CurrentThread, v10);
if( v3 == 1 )
break;
}
}
while( i );
v4 = a1;
}
UNLOCK_ADDRESS_SPACE_SHARED((__int64)CurrentThread, v4);
if( v6 == 1 )
KiUnstackDetachProcess(&ApcState, 0i64);
return v3;
}Referenced by:
IopQueryProcessIdsUsingFile