MiLockAndMapEntireDriver
NTSTATUS __stdcall MiLockAndMapEntireDriver(INT64 a1, INT64 *a2, _MDL **a3){
_MDL *v6;
INT64 v7;
int v8;
UINT64 v9;
unsigned int v10;
_MDL *Mdl;
_MDL *v12;
_MMSUPPORT_INSTANCE *AnyMultiplexedVm;
UINT64 v14;
UINT64 v15;
INT64 v17;
INT64 a6;
LODWORD(a6) = 0;
v6 = 0i64;
v7 = 0i64;
v8 = MiPrepareDriverPatchState((INT64)a2);
if( v8 >= 0 )
{
v9 = *(unsigned int *)(a1 + 64);
v10 = (*(_DWORD *)(a1 + 64) >> 12) + ((*(_DWORD *)(a1 + 64) & 0xFFF) != 0);
if( a3 )
{
Mdl = IoAllocateMdl(*(VOID **)(a1 + 48), v9, 0, 0, 0i64);
v6 = Mdl;
if( !Mdl )
return -1073741670;
v7 = (INT64)&Mdl[1];
if( v10 )
{
v12 = Mdl + 1;
v9 = v10;
do
{
v12->Next = (_MDL *)*(&stru_140C4DB30 + 497);
v12 = (_MDL *)((char *)v12 + 8);
--v9;
}
while( v9 );
}
}
AnyMultiplexedVm = MiGetAnyMultiplexedVm(MiWorkingSetTypeSystemViews, (VOID *)v9);
v8 = MiLockDriverPageRange(a2, (INT64)AnyMultiplexedVm, 0i64, v14, 2, (INT64)v6);
if( v8 >= 0 && a3 )
{
v15 = (UINT64)MiReservePtes((_MI_SYSTEM_PTE_TYPE *)((char *)&stru_140C4DB30 + 4432), v10);
if( v15 )
{
LODWORD(v17) = 4;
v8 = MiFillSystemPtes(v15, v10, v7, 4ui64, v17, (INT64)&a6);
v6->MdlFlags |= 1u;
v6->MappedSystemVa = (void *)((__int64)((v15 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16);
*a3 = v6;
v6 = 0i64;
}
else
{
v8 = -1073741670;
}
}
if( v6 )
IoFreeMdl(v6);
}
return v8;
}Referenced by:
MmRemoveImportOptimizationForDriverVerifier