PspMapSystemDll
NTSTATUS __stdcall PspMapSystemDll(
_EPROCESS *Process,
PSP_SYSTEM_DLL_DATA *DllData,
UINT64 UseLargePages,
UINT64 InitialMap){
int v5;
int v6;
VOID *v8;
bool v9;
unsigned __int64 v10;
int v11;
INT64 v13;
__int64 v14;
__int64 v15;
INT64 v16;
INT64 v17;
INT64 v18;
INT64 v19;
INT64 v20;
INT64 v21;
INT64 v22;
INT64 v23;
_MEMORY_RANGE_ENTRY VirtualAddresses;
__int128 v25;
__int64 v26;
INT64 v27[2];
__int128 v28;
int VmInformation;
v5 = InitialMap;
v6 = UseLargePages;
v8 = (VOID *)PspReferenceSystemDll((_EX_FAST_REF *)DllData);
if( !v8 )
return -1073741823;
v21 = 0i64;
v23 = 0i64;
v22 = 0i64;
v27[0] = 1i64;
v27[1] = (INT64)&v25;
v26 = 0i64;
v28 = 0i64;
LOBYTE(v28) = 5;
v9 = (DllData[4] & 8) == 0;
v25 = 0i64;
*((_QWORD *)&v28 + 1) = 32i64;
v10 = _mm_srli_si128((__m128i)0i64, 8).m128i_u64[0];
if( v9 )
v10 = 0x7FFFFFFEFFFFi64;
LODWORD(v20) = 0;
LODWORD(v19) = 2;
*((_QWORD *)&v25 + 1) = v10;
LODWORD(v18) = 4;
LODWORD(v16) = v6 != 0 ? 0x20000000 : 0;
v11 = MmMapViewOfSectionEx(v8, (INT64)Process, &v21, (INT64)&v23, (INT64)&v22, v16, v18, (INT64)v27, v19, v20, 0i64);
ObFastDereferenceObject((_EX_FAST_REF *)DllData, v8);
if( v11 != 1073741827 )
goto LABEL_5;
if( Process != PsInitialSystemProcess )
{
v11 = -1073741800;
LABEL_5:
if( v11 < 0 )
return v11;
}
if( v5 )
{
v13 = v21;
v11 = 0;
LODWORD(v14) = RtlImageNtHeader(v21);
if( *(_WORD *)(v14 + 24) == 267 )
v15 = *(unsigned int *)(v14 + 52);
else
v15 = *(_QWORD *)(v14 + 48);
*((_QWORD *)DllData + 5) = v15;
*((_QWORD *)DllData + 6) = v13;
return v11;
}
if( *((_QWORD *)DllData + 5) == v21 )
{
VirtualAddresses.VirtualAddress = (PVOID)v21;
LODWORD(v17) = 4;
VmInformation = 1;
*(_QWORD *)&VirtualAddresses.NumberOfBytes = 4096i64;
ZwSetInformationVirtualMemory(
(VOID *)0xFFFFFFFFFFFFFFFFi64,
(_VIRTUAL_MEMORY_INFORMATION_CLASS)4,
1ui64,
&VirtualAddresses,
&VmInformation,
v17);
return v11;
}
return -1073741823;
}Referenced by:
PsMapSystemDlls
PspInitPhase3
PspLocateSystemDll