EmpMapPhysicalAddress
NTSTATUS __stdcall EmpMapPhysicalAddress(PVOID *SectionHandle, PVOID *BaseAddress, KAPC_STATE *ApcState){
PVOID *v3;
NTSTATUS v4;
PVOID *v5;
int v7;
UINT64 AllocationType;
UINT64 Win32Protect;
LARGE_INTEGER SectionOffset;
struct _UNICODE_STRING DestinationString;
struct _OBJECT_ATTRIBUTES ObjectAttributes;
SIZE_T CommitSize;
PVOID BaseAddressa;
_KAPC_STATE *ApcStatea;
CommitSize = (SIZE_T)SectionHandle;
*(_QWORD *)&ObjectAttributes.Length = 48i64;
v4 = 0;
*(_QWORD *)&ObjectAttributes.Attributes = 576i64;
*v3 = 0i64;
v5 = v3;
DestinationString = 0i64;
RtlInitUnicodeString(&DestinationString, L"\\Device\\PhysicalMemory", (WCHAR)ApcState);
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.ObjectName = &DestinationString;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
if( ZwOpenSection((PVOID *)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,
(PVOID)0xFFFFFFFFFFFFFFFFi64,
&BaseAddressa,
0i64,
CommitSize,
&SectionOffset,
&CommitSize,
ViewUnmap,
AllocationType,
Win32Protect) < 0 )
{
KiUnstackDetachProcess(ApcStatea, 0i64);
ZwClose(ApcState->ApcListHead[0].Flink);
ApcState->ApcListHead[0].Flink = 0i64;
}
else
{
v7 = (int)BaseAddressa;
*v5 = BaseAddressa;
return v7 + 4085;
}
}
return v4;
}Referenced by:
EmpCacheBiosDate