MmAddVerifierSpecialThunks

NTSTATUS __fastcall MmAddVerifierSpecialThunks(UINT64 a1, INT8 *a2, UINT64 a3){
  unsigned int v3; 
  INT8 v6; 
  INT64 v7; 
  int v8; 
  unsigned int v9; 
  _ETHREAD *Lock; 
  _LIST_ENTRY *v12; 
  _KLDR_DATA_TABLE_ENTRY *v13; 
  unsigned __int64 Flink; 
  unsigned __int64 v15; 
  INT8 *v16; 
  NTSTATUS v17; 
  unsigned __int64 retaddr; 

  v3 = a3;
  if( (MiFlags & 1) == 0 )
    return -1073741637;
  v8 = 0;
  if( !VfIsVerifierEnabled()
    || (*(&stru_140CF2E80 + 1826) & 0xFFAFFFFF) == 0
    && (*(&stru_140CF2E80 + 7308) & 2) == 0
    && (*(&stru_140CF2E80 + 7308) & 4) == 0 )
  {
    return -1073741637;
  }
  v9 = v3 >> 4;
  if( !(v3 >> 4) )
    return -1073741583;
  Lock = MmAcquireLoadLock(v7, v6);
  v12 = MiLookupDataTableEntry((VOID *)a1, 0i64);
  v13 = (_KLDR_DATA_TABLE_ENTRY *)v12;
  if( v12
    && (Flink = (unsigned __int64)v12[3].Flink, retaddr >= Flink)
    && (v15 = Flink + LODWORD(v12[4].Flink), retaddr < v15) )
  {
    if( v9 )
    {
      v16 = a2 + 8;
      while( *(_QWORD *)v16 >= Flink && *(_QWORD *)v16 < v15 )
      {
        v16 += 16;
        if( ++v8 >= v9 )
          goto LABEL_16;
      }
      v17 = -1073741584;
    }
    else
    {
LABEL_16:
      v17 = VfThunkAddSpecialDriverThunks(a1, a2, v3, v13);
    }
  }
  else
  {
    v17 = -1073741585;
  }
  MmReleaseLoadLock(Lock);
  return v17;
}

Referenced by:

No references.