KsepIsModuleShimmed

INT64 __fastcall KsepIsModuleShimmed(INT64 a1, INT64 a2, _QWORD *a3){
  unsigned int v3; 
  _ETHREAD *CurrentThread; 
  _QWORD **v8; 
  _QWORD *v9; 
  _QWORD *v11; 
  v3 = 0;
  if( !a2 || !a1 || !a3 )
    return 0i64;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  *a3 = 0i64;
  --*((_WORD *)CurrentThread + 242);
  ExAcquirePushLockExclusiveEx((UINT64)&qword_140C50350, 0i64);
  v8 = (_QWORD **)(a1 + 32);
  v9 = *v8;
  while( v9 != v8 )
  {
    v11 = v9;
    v9 = (_QWORD *)*v9;
    if( v11[2] == a2 )
    {
      *a3 = v11;
      v3 = 1;
      break;
    }
  }
  if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&qword_140C50350, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((volatile INT64 *)&qword_140C50350);
  KeAbPostRelease(&qword_140C50350);
  KeLeaveCriticalRegion();
  return v3;
}

Referenced by:

KseDriverUnloadImage
KsepGetShimCallbacksForDriver
KsepGetShimsForDriver