MmAddVerifierSpecialThunks

NTSTATUS __stdcall MmAddVerifierSpecialThunks(ULONG_PTR EntryRoutine, PVOID ThunkBuffer, ULONG ThunkBufferSize){
  int v6; 
  ULONG v7; 
  _ETHREAD *Lock; 
  INT64 v10; 
  __int64 v11; 
  __int64 v12; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 
  unsigned __int64 *v15; 
  NTSTATUS v16; 
  unsigned __int64 retaddr; 
  if( (MiFlags & 1) == 0 )
    return -1073741637;
  v6 = 0;
  if( !(unsigned int)VfIsVerifierEnabled()
    || (VfRuleClasses & 0xFFAFFFFF) == 0
    && (VfRuleClasses & 0x200000000i64) == 0
    && (VfRuleClasses & 0x400000000i64) == 0 )
  {
    return -1073741637;
  }
  v7 = ThunkBufferSize >> 4;
  if( !(ThunkBufferSize >> 4) )
    return -1073741583;
  Lock = MmAcquireLoadLock();
  v11 = MiLookupDataTableEntry(EntryRoutine, 0i64, v10);
  v12 = v11;
  if( v11 && (v13 = *(_QWORD *)(v11 + 48), retaddr >= v13) && (v14 = v13 + *(unsigned int *)(v11 + 64), retaddr < v14) )
  {
    if( v7 )
    {
      v15 = (unsigned __int64 *)((char *)ThunkBuffer + 8);
      while( *v15 >= v13 && *v15 < v14 )
      {
        v15 += 2;
        if( ++v6 >= v7 )
          goto LABEL_16;
      }
      v16 = -1073741584;
    }
    else
    {
LABEL_16:
      v16 = VfThunkAddSpecialDriverThunks(EntryRoutine, ThunkBuffer, ThunkBufferSize, v12);
    }
  }
  else
  {
    v16 = -1073741585;
  }
  MmReleaseLoadLock(Lock);
  return v16;
}

Referenced by:

No references.