MmGetImageInformation
__int64 __fastcall MmGetImageInformation(VOID *EndingAddress, _QWORD *a2, _QWORD *a3, int *a4){
_ETHREAD *CurrentThread;
unsigned int v10;
int v11;
_EPROCESS *Process;
_MMVAD *v13;
if( (unsigned __int64)EndingAddress > 0x7FFFFFFEFFFFi64 )
return 3221225485i64;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v10 = 0;
v11 = 0;
Process = CurrentThread->Tcb.ApcState.Process;
if( (CurrentThread->SameThreadApcFlags & 3) == 0 )
{
v11 = 1;
LOCK_ADDRESS_SPACE_SHARED(CurrentThread, CurrentThread->Tcb.ApcState.Process);
}
v13 = MiCheckForConflictingVad(Process, EndingAddress, EndingAddress);
if( v13 )
{
if( (v13->Core.u.LongFlags & 0x70) == 32 )
{
*a2 = (v13->Core.StartingVpn | ((unsigned __int64)v13->Core.StartingVpnHigh << 32)) << 12;
*a3 = ((v13->Core.EndingVpn | ((unsigned __int64)v13->Core.EndingVpnHigh << 32))
- (v13->Core.StartingVpn | ((unsigned __int64)v13->Core.StartingVpnHigh << 32))
+ 1) << 12;
*a4 = *((_DWORD *)&v13->Subsection->ControlArea->Segment->u2.ImageInformation->InternalImageInformation + 3) & 1;
}
else
{
v10 = -1073741751;
}
}
else
{
v10 = -1073741800;
}
if( v11 == 1 )
UNLOCK_ADDRESS_SPACE_SHARED(CurrentThread, Process);
return v10;
}Referenced by:
EtwpLocateDbgIdForRegEntry
KiCheckUserAddressCetCompat
RtlGetImageBaseAndLoadConfig
RtlpLookupUserFunctionTable