MmAddVerifierThunks

NTSTATUS __stdcall MmAddVerifierThunks(VOID *ThunkBuffer, UINT64 ThunkBufferSize){
  unsigned int v2; 
  INT8 v4; 
  INT64 v5; 
  int v6; 
  _QWORD *v7; 
  unsigned int v8; 
  _ETHREAD *Lock; 
  _LIST_ENTRY *v11; 
  _KLDR_DATA_TABLE_ENTRY *v12; 
  _LIST_ENTRY *Flink; 
  int v14; 
  INT64 *v15; 
  char *v16; 
  unsigned __int64 v17; 
  NTSTATUS v18; 

  v2 = ThunkBufferSize;
  if( (MiFlags & 1) == 0 )
    return -1073741637;
  v6 = 0;
  if( !VfIsVerifierEnabled()
    || (*(&stru_140CF2E80 + 1826) & 0xFFAFFFFF) == 0
    && (*(&stru_140CF2E80 + 7308) & 2) == 0
    && (*(&stru_140CF2E80 + 7308) & 4) == 0 )
  {
    return -1073741637;
  }
  v7 = ThunkBuffer;
  v8 = v2 >> 4;
  if( !(v2 >> 4) )
    return -1073741585;
  Lock = MmAcquireLoadLock(v5, v4);
  v11 = MiLookupDataTableEntry(*(VOID **)ThunkBuffer, 0i64);
  v12 = (_KLDR_DATA_TABLE_ENTRY *)v11;
  if( v11 )
  {
    Flink = v11[3].Flink;
    v14 = 0;
    v15 = (INT64 *)PsLoadedModuleList;
    v16 = (char *)Flink + LODWORD(v11[4].Flink);
    while( v15 != &PsLoadedModuleList )
    {
      if( v11 == (_LIST_ENTRY *)v15 )
        goto LABEL_21;
      if( (unsigned int)++v14 >= 2 )
        break;
      v15 = (INT64 *)*v15;
    }
    if( !v8 )
    {
LABEL_20:
      v18 = VfThunkAddDriverThunks(ThunkBuffer, v2, v12);
      MmReleaseLoadLock(Lock);
      return v18;
    }
    while( *v7 >= (unsigned __int64)Flink )
    {
      if( *v7 >= (unsigned __int64)v16 )
        break;
      v17 = v7[1];
      if( v17 < (unsigned __int64)Flink || v17 >= (unsigned __int64)v16 )
        break;
      v7 += 2;
      if( ++v6 >= v8 )
        goto LABEL_20;
    }
  }
LABEL_21:
  MmReleaseLoadLock(Lock);
  return -1073741584;
}

Referenced by:

NtSetSystemInformation