EmpMapPhysicalAddress
VOID *__stdcall EmpMapPhysicalAddress(VOID **SectionHandle, VOID **BaseAddress, _KAPC_STATE *ApcState){
VOID **v3;
VOID *v4;
VOID **v5;
char *v7;
UINT64 AllocationType;
UINT64 Win32Protect;
_LARGE_INTEGER SectionOffset;
_UNICODE_STRING DestinationString;
_OBJECT_ATTRIBUTES ObjectAttributes;
UINT64 CommitSize;
VOID *BaseAddressa;
_KAPC_STATE *ApcStatea;
CommitSize = (UINT64)SectionHandle;
*(_QWORD *)&ObjectAttributes.Length = 48i64;
v4 = 0i64;
*(_QWORD *)&ObjectAttributes.Attributes = 576i64;
*v3 = 0i64;
v5 = v3;
DestinationString = 0i64;
RtlInitUnicodeString(&DestinationString, L"\\Device\\PhysicalMemory");
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.ObjectName = &DestinationString;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
if( ZwOpenSection((VOID **)ApcState, 4ui64, &ObjectAttributes) >= 0 )
{
BaseAddressa = 0i64;
CommitSize = 8i64;
SectionOffset.QuadPart = 1044480i64;
KiStackAttachProcess(PsInitialSystemProcess, 0i64, ApcStatea);
LODWORD(Win32Protect) = 4;
LODWORD(AllocationType) = 0;
if( ZwMapViewOfSection(
ApcState->ApcListHead[0].Flink,
(VOID *)0xFFFFFFFFFFFFFFFFi64,
&BaseAddressa,
0i64,
CommitSize,
&SectionOffset,
&CommitSize,
ViewUnmap,
AllocationType,
Win32Protect) < 0 )
{
KiUnstackDetachProcess(ApcStatea, 0i64);
ZwClose((_HANDLE)ApcState->ApcListHead[0].Flink);
ApcState->ApcListHead[0].Flink = 0i64;
}
else
{
v7 = (char *)BaseAddressa;
*v5 = BaseAddressa;
return v7 + 4085;
}
}
return v4;
}Referenced by:
EmpCacheBiosDate