KiTpSetupCompletion

__int64 __fastcall KiTpSetupCompletion(ULONG_PTR a1, char a2, const void *a3, void *a4, unsigned int Size, __int64 a6){
  unsigned int v10; 
  int ImageData; 
  *(_OWORD *)a6 = 0i64;
  *(_OWORD *)(a6 + 16) = 0i64;
  *(_QWORD *)(a6 + 32) = 0i64;
  v10 = 4096 - ((unsigned __int16)a3 & 0xFFF);
  if( v10 > 0xF )
    v10 = 15;
  ImageData = KiTpReadImageData(a1, a2, a3, (void *)(a6 + 6), v10);
  if( ImageData >= 0 )
  {
    *(_BYTE *)(a6 + 5) = v10;
    ImageData = KiTpParseInstruction((CHAR *)a6);
    if( ImageData == -1073741306 )
    {
      if( v10 >= 0xF )
        return(unsigned int)ImageData;
      *(_OWORD *)a6 = 0i64;
      *(_OWORD *)(a6 + 16) = 0i64;
      *(_QWORD *)(a6 + 32) = 0i64;
      ImageData = KiTpReadImageData(a1, a2, a3, (void *)(a6 + 6), 0xFu);
      if( ImageData < 0 )
        return(unsigned int)ImageData;
      *(_BYTE *)(a6 + 5) = 15;
      ImageData = KiTpParseInstruction((CHAR *)a6);
    }
    if( ImageData >= 0 )
      memmove((UINT8 *)a4, (UINT8 *)(a6 + 6), Size);
  }
  return(unsigned int)ImageData;
}

Referenced by:

KeSetTracepoint