MmAddVerifierThunks

NTSTATUS __stdcall MmAddVerifierThunks(PVOID ThunkBuffer, ULONG ThunkBufferSize){
  int v4; 
  unsigned __int64 *v5; 
  ULONG v6; 
  _ETHREAD *Lock; 
  INT64 v9; 
  __int64 v10; 
  _KLDR_DATA_TABLE_ENTRY *v11; 
  unsigned __int64 v12; 
  int v13; 
  PVOID *v14; 
  unsigned __int64 v15; 
  unsigned __int64 v16; 
  NTSTATUS v17; 
  if( (MiFlags & 1) == 0 )
    return -1073741637;
  v4 = 0;
  if( !(unsigned int)VfIsVerifierEnabled()
    || (VfRuleClasses & 0xFFAFFFFF) == 0
    && (VfRuleClasses & 0x200000000i64) == 0
    && (VfRuleClasses & 0x400000000i64) == 0 )
  {
    return -1073741637;
  }
  v5 = (unsigned __int64 *)ThunkBuffer;
  v6 = ThunkBufferSize >> 4;
  if( !(ThunkBufferSize >> 4) )
    return -1073741585;
  Lock = MmAcquireLoadLock();
  v10 = MiLookupDataTableEntry(*(_QWORD *)ThunkBuffer, 0i64, v9);
  v11 = (_KLDR_DATA_TABLE_ENTRY *)v10;
  if( v10 )
  {
    v12 = *(_QWORD *)(v10 + 48);
    v13 = 0;
    v14 = (PVOID *)PsLoadedModuleList;
    v15 = v12 + *(unsigned int *)(v10 + 64);
    while( v14 != &PsLoadedModuleList )
    {
      if( (PVOID *)v10 == v14 )
        goto LABEL_21;
      if( (unsigned int)++v13 >= 2 )
        break;
      v14 = (PVOID *)*v14;
    }
    if( !v6 )
    {
LABEL_20:
      v17 = VfThunkAddDriverThunks(ThunkBuffer, ThunkBufferSize, v11);
      MmReleaseLoadLock(Lock);
      return v17;
    }
    while( *v5 >= v12 )
    {
      if( *v5 >= v15 )
        break;
      v16 = v5[1];
      if( v16 < v12 || v16 >= v15 )
        break;
      v5 += 2;
      if( ++v4 >= v6 )
        goto LABEL_20;
    }
  }
LABEL_21:
  MmReleaseLoadLock(Lock);
  return -1073741584;
}

Referenced by:

NtSetSystemInformation