MiHandleDriverNonPagedSections
NTSTATUS __stdcall MiHandleDriverNonPagedSections(
_KLDR_DATA_TABLE_ENTRY *DataTableEntry,
UINT64 LoadFlags,
UINT64 MakeResident){
void *DllBase;
int v5;
char v6;
int v7;
unsigned int v8;
_MMPTE *v9;
unsigned int v10;
unsigned int v11;
_MMPTE *v12;
NTSTATUS v13;
_MMPTE *v14;
unsigned int v16;
_MMPTE *LastPte;
unsigned int v18;
_MMPTE *FirstPte;
FirstPte = 0i64;
DllBase = DataTableEntry->DllBase;
v5 = MakeResident;
LastPte = 0i64;
v6 = LoadFlags;
if( MI_IS_PHYSICAL_ADDRESS(DllBase) )
return 0;
v7 = 0;
v8 = 1;
if( v5 == 1 )
{
if( (dword_140CFA174 & 1) == 0 && (v6 & 2) == 0 )
{
if( (v6 & 1) == 0 )
MiDisablePagingOfDriver(DataTableEntry);
v8 = !(v6 & 1) + 1;
goto LABEL_8;
}
v10 = ((v6 & 1) == 0) + 1;
v11 = 0;
v12 = 0i64;
while( 1 )
{
v13 = MiSnapDriverRange(DataTableEntry, v11, 8ui64, 0i64, &FirstPte);
v14 = FirstPte;
v11 = v13;
if( !FirstPte )
goto LABEL_17;
if( v12 )
{
if( FirstPte == v12 )
return v7;
MiUnlockCodePage(FirstPte, LastPte);
LABEL_17:
if( !v11 )
return v7;
}
else
{
v7 = MiLockCode(DataTableEntry, FirstPte, LastPte, v10);
if( v7 >= 0 )
goto LABEL_17;
v11 = 0;
v12 = v14;
}
}
}
if( (dword_140CFA174 & 1) != 0 )
{
v16 = 0;
do
{
v16 = MiSnapDriverRange(DataTableEntry, v16, 8ui64, 0i64, &FirstPte);
if( FirstPte )
MiUnlockCodePage(FirstPte, LastPte);
}
while( v16 );
return 0;
}
LABEL_8:
v18 = 0;
v9 = 0i64;
while( (int)MiFindDriverNonPagedSections((__int64)DataTableEntry, &v18, &FirstPte, &LastPte) >= 0 )
{
if( v5 == 1 )
{
v7 = MiLockCode(DataTableEntry, FirstPte, LastPte, v8);
if( v7 < 0 )
{
v9 = FirstPte;
v5 = 0;
v18 = 0;
}
}
else
{
if( FirstPte == v9 )
return v7;
MiUnlockCodePage(FirstPte, LastPte);
}
}
return v7;
}Referenced by:
MiApplyHotPatchToLoadedDriver
MiSessionRemoveImage
MmLoadSystemImageEx