MmGetImageInformation
INT64 __fastcall MmGetImageInformation(UINT64 a1, _QWORD *a2, _QWORD *a3, INT64 *a4){
_ETHREAD *CurrentThread;
unsigned int v10;
int v11;
INT64 v12;
INT64 **v13;
if( a1 > 0x7FFFFFFEFFFFi64 )
return 3221225485i64;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v10 = 0;
v11 = 0;
v12 = *((_QWORD *)CurrentThread + 23);
if( (*((_DWORD *)CurrentThread + 326) & 3) == 0 )
{
v11 = 1;
LOCK_ADDRESS_SPACE_SHARED(CurrentThread, *((_EPROCESS **)CurrentThread + 23));
}
v13 = MiCheckForConflictingVad(v12, a1, a1);
if( v13 )
{
if( ((_DWORD)v13[6] & 0x70) == 32 )
{
*a2 = (*((unsigned int *)v13 + 6) | ((unsigned __int64)*((unsigned __int8 *)v13 + 32) << 32)) << 12;
*a3 = ((*((unsigned int *)v13 + 7) | ((unsigned __int64)*((unsigned __int8 *)v13 + 33) << 32))
- (*((unsigned int *)v13 + 6) | ((unsigned __int64)*((unsigned __int8 *)v13 + 32) << 32))
+ 1) << 12;
*(_DWORD *)a4 = *(_DWORD *)(*(_QWORD *)(*(_QWORD *)*v13[9] + 56i64) + 76i64) & 1;
}
else
{
v10 = -1073741751;
}
}
else
{
v10 = -1073741800;
}
if( v11 == 1 )
UNLOCK_ADDRESS_SPACE_SHARED((__int64)CurrentThread, v12);
return v10;
}Referenced by:
EtwpLocateDbgIdForRegEntry
KiCheckUserAddressCetCompat
RtlGetImageBaseAndLoadConfig
RtlpLookupUserFunctionTable