VfInitializeBranchTracing

NTSTATUS __stdcall VfInitializeBranchTracing(){
  int v1; 
  __int64 v2; 
  VOID **PoolWithTag; 
  _QWORD *v4; 
  __int64 v5; 
  PVOID *v6; 
  int v7; 

  if( (MmVerifierData & 0x8000000) == 0 )
    return -1073741822;
  if( VfBTSInitialized )
    return -1073740758;
  if( !(unsigned int)ViIsBTSSupported() )
    return -1073740759;
  memset(VfBTSDataManagementArea, 0i64, sizeof(VfBTSDataManagementArea));
  if( (_DWORD)ViVerifyBTSBufferSize )
    v1 = 24 * ViVerifyBTSBufferSize;
  else
    v1 = 240000;
  LODWORD(ViVerifyBTSBufferSize) = v1;
  v2 = 0i64;
  if( (_DWORD)KeNumberProcessors_0 )
  {
    while( (unsigned int)v2 < 0x500 )
    {
      PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x58ui64, 1834177602i64);
      VfBTSDataManagementArea[v2] = (__int64)PoolWithTag;
      if( !PoolWithTag )
        goto LABEL_15;
      *(_QWORD *)VfBTSDataManagementArea[v2] = ExAllocatePoolWithTag(
                                                 0x200ui64,
                                                 (unsigned int)ViVerifyBTSBufferSize,
                                                 1649628226i64);
      v4 = (_QWORD *)VfBTSDataManagementArea[v2];
      if( !*v4 )
        goto LABEL_15;
      v4[1] = *v4;
      *(_QWORD *)(VfBTSDataManagementArea[v2] + 24) = 0i64;
      *(_QWORD *)(VfBTSDataManagementArea[v2] + 16) = *(_QWORD *)VfBTSDataManagementArea[v2]
                                                    + (unsigned int)ViVerifyBTSBufferSize
                                                    + 1i64;
      v5 = VfBTSDataManagementArea[v2];
      v2 = (unsigned int)(v2 + 1);
      *(_QWORD *)(v5 + 80) = 0i64;
      if( (unsigned int)v2 >= (unsigned int)KeNumberProcessors_0 )
        goto LABEL_14;
    }
    return -1073740759;
  }
LABEL_14:
  if( !(unsigned int)ViSetupBTSPerProcNoEnable() )
  {
LABEL_15:
    if( (unsigned int)v2 < 0x500 )
    {
      do
      {
        v6 = (PVOID *)VfBTSDataManagementArea[v2];
        if( v6 )
        {
          if( *v6 )
          {
            ExFreePoolWithTag(*v6, 0x62535442u);
            *(_QWORD *)VfBTSDataManagementArea[v2] = 0i64;
            v6 = (PVOID *)VfBTSDataManagementArea[v2];
          }
          ExFreePoolWithTag(v6, 0x6D535442u);
          VfBTSDataManagementArea[v2] = 0i64;
        }
        v7 = v2;
        v2 = (unsigned int)(v2 - 1);
      }
      while( v7 );
    }
    return -1073740759;
  }
  VfBTSInitialized = 1;
  return 0;
}

Referenced by:

VfNotifyVerifierOfEvent