IopInitializeTriageDumpData

VOID __stdcall IopInitializeTriageDumpData(){
  struct _KTRIAGE_DUMP_DATA_ARRAY *PoolWithTag; 
  struct _KTRIAGE_DUMP_DATA_ARRAY *v1; 
  SIZE_T v2; 
  unsigned int i; 
  if( !IopTriageDumpDataArray )
  {
    PoolWithTag = (struct _KTRIAGE_DUMP_DATA_ARRAY *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x4030ui64, 0x72546F49ui64);
    IopTriageDumpDataArray = PoolWithTag;
    v1 = PoolWithTag;
    if( PoolWithTag )
    {
      if( KeInitializeTriageDumpDataArray(PoolWithTag, 0x4030u) < 0 )
        goto LABEL_9;
      if( IopNumTriageDumpDataBlocks )
      {
        for( i = 0; i < IopNumTriageDumpDataBlocks; ++i )
          KeAddTriageDumpDataBlock(
            v1,
            IopTriageDumpDataBlocks[2 * i],
            (PVOID)(_mm_srli_si128(*(__m128i *)&IopTriageDumpDataBlocks[2 * i], 8).m128i_u64[0]
                  - IopTriageDumpDataBlocks[2 * i]),
            v2);
      }
      IopBugCheckTriageDumpDataCallbackRecord.State = 0;
      if( !KeRegisterBugCheckReasonCallback(
              &IopBugCheckTriageDumpDataCallbackRecord,
              IoBugCheckTriageDumpDataCallback,
              KbCallbackTriageDumpData,
              (PUCHAR)"IoTriageDumpData") )
      {
LABEL_9:
        if( IopTriageDumpDataArray )
        {
          ExFreePoolWithTag(IopTriageDumpDataArray, 0x72546F49u);
          IopTriageDumpDataArray = 0i64;
        }
      }
    }
  }
}

Referenced by:

IoInitSystemPreDrivers