MmRemoveImportOptimizationForDriverVerifier
NTSTATUS __stdcall MmRemoveImportOptimizationForDriverVerifier(INT64 a1){
int v2;
int v3;
NTSTATUS v4;
_SECTION *v5;
_OWORD *v6;
_QWORD *DynamicRelocations;
__int64 v8;
unsigned int v9;
unsigned __int16 **v10;
__int64 v11;
_OWORD *Pool;
unsigned int v13;
__int64 v14;
unsigned __int16 *v15;
size_t v16;
VOID *v17;
unsigned __int8 CurrentIrql;
ULONG_PTR Context[2];
__int64 v21;
INT64 v22;
INT64 v23[2];
INT64 v24[8];
memset(v24, 0i64, sizeof(v24));
v2 = 0;
*(_QWORD *)Context = 0i64;
v21 = 0i64;
*(_OWORD *)v23 = 0i64;
MiInitializeDriverPatchState(a1, (INT64)v24);
v22 = a1;
LOBYTE(v3) = MmHasImageBeenImportOptimized();
if( v3 )
{
if( (MiFlags & 0x10000) != 0 )
{
v4 = -1073740641;
}
else
{
if( KeIsNmiCallbackRegistered() )
goto LABEL_6;
v5 = *(_SECTION **)(a1 + 112);
v6 = 0i64;
if( v5 )
{
DynamicRelocations = MiSectionControlArea(v5)->u2.SeImageStub->DynamicRelocations;
if( DynamicRelocations )
v6 = (_OWORD *)DynamicRelocations[12];
}
else
{
v6 = *(_OWORD **)(a1 + 296);
}
v8 = *(_DWORD *)(a1 + 64) >> 12;
if( !v6 )
{
LABEL_6:
v4 = -1073741637;
}
else
{
v4 = MiLockAndMapEntireDriver(a1, v24, (_MDL **)v23);
if( v4 >= 0 )
{
v9 = 8 * v8 + 56;
HIDWORD(v21) = v9;
if( (_DWORD)v8 )
{
v10 = (unsigned __int16 **)v6 + 7;
v11 = (unsigned int)v8;
do
{
if( *v10 )
v2 += ((*v10)[1] >> 1) + ((*v10)[2] >> 1) + (**v10 >> 2);
++v10;
--v11;
}
while( v11 );
}
Pool = MiAllocatePool(64i64, v9 + 4 * ((_DWORD)v8 + v2 + 2 * (_DWORD)v8), 0x66766D4Dui64);
v23[1] = (INT64)Pool;
if( Pool )
{
v13 = 0;
*Pool = *v6;
Pool[1] = v6[1];
Pool[2] = v6[2];
*(_QWORD *)(v23[1] + 16) = 0i64;
*(_QWORD *)(v23[1] + 24) = 0i64;
*(_QWORD *)(v23[1] + 48) = v23[1] + v9;
if( (_DWORD)v8 )
{
v14 = 56i64;
do
{
v15 = *(unsigned __int16 **)((char *)v6 + v14);
if( v15 )
{
v16 = v15[1] + 12 + v15[2] + *v15;
v17 = (VOID *)(*(_QWORD *)(v23[1] + 48) + v13);
*(_QWORD *)(v14 + v23[1]) = v17;
memmove(v17, v15, v16);
v13 += v16;
}
v14 += 8i64;
--v8;
}
while( v8 );
}
CurrentIrql = KeGetCurrentIrql();
__writecr8(0xCui64);
Context[1] = KeQueryActiveProcessorCountEx(0xFFFFu);
Context[0] = Context[1];
v4 = KeIpiGenericCall((PKIPI_BROADCAST_WORKER)MmRemoveImportOptimizationWorker, (ULONG_PTR)Context);
__writecr8(CurrentIrql);
}
else
{
v4 = -1073741670;
}
}
}
}
}
else
{
v4 = 0;
}
MiUnlockEntireDriver((UINT64 *)v24, v23[0]);
if( v23[1] )
ExFreePoolWithTag((PVOID)v23[1], 0);
return v4;
}Referenced by:
VfDriverEnableVerifier