MiDereferenceImports
VOID __stdcall MiDereferenceImports(_LOAD_IMPORTS *ImportList){
_LOAD_IMPORTS *v1;
unsigned int v2;
__int64 v3;
VOID *v4;
__int128 v5;
if( ImportList != (_LOAD_IMPORTS *)1 )
{
v1 = ImportList;
v5 = 0i64;
if( ImportList != (_LOAD_IMPORTS *)-2i64 )
{
if( ((unsigned __int8)ImportList & 1) != 0 )
{
*(_QWORD *)&v5 = 1i64;
*((_QWORD *)&v5 + 1) = (unsigned __int64)ImportList & 0xFFFFFFFFFFFFFFFEui64;
v1 = (_LOAD_IMPORTS *)&v5;
}
v2 = 0;
if( *(_QWORD *)v1 )
{
v3 = 0i64;
do
{
v4 = *(VOID **)&v1[2 * v3 + 2];
if( !v4 )
break;
if( MiUnloadApproved(*(_KLDR_DATA_TABLE_ENTRY **)&v1[2 * v3 + 2]) == 1 )
MiUnloadSystemImage(v4, 0xFFFFFFFFui64);
v3 = ++v2;
}
while( (unsigned __int64)v2 < *(_QWORD *)v1 );
}
}
}
}Referenced by:
MiResolveImageReferences