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