AdtpBuildMessageString

INT64 __stdcall AdtpBuildMessageString(
        UINT64 MessageId,
        EVENT_DATA_DESCRIPTOR *pEtwDataDescriptor,
        WCHAR *pszStringBuffer,
        UINT64 *pdwCurBufferIndex,
        UINT8 *pFreeWhenDone){
  __int64 v6; 
  char *PoolWithTag; 
  char v8; 
  __int64 v9; 
  INT64 result; 
  char *v11; 
  if( !pszStringBuffer )
    return 3221225485i64;
  v6 = *(unsigned int *)pFreeWhenDone;
  if( (unsigned int)(v6 + 13) >= 0x400 )
  {
    PoolWithTag = (char *)ExAllocatePoolWithTag(PagedPool, 0x1Aui64, 0x6B416553ui64);
    if( !PoolWithTag )
      return 3221225495i64;
    v8 = 1;
  }
  else
  {
    PoolWithTag = (char *)pdwCurBufferIndex + 2 * v6;
    *(_DWORD *)pFreeWhenDone = v6 + 13;
    v8 = 0;
  }
  *v11 = v8;
  if( StringCchPrintfW((WCHAR *)PoolWithTag, 0xDui64, (WCHAR *)L"%%%%%u") < 0 )
  {
    if( *v11 == 1 )
    {
      ExFreePoolWithTag(PoolWithTag, 0);
      *v11 = 0;
    }
    return 3221225485i64;
  }
  v9 = -1i64;
  do
    ++v9;
  while( *(_WORD *)&PoolWithTag[2 * v9] );
  *(_QWORD *)pszStringBuffer = PoolWithTag;
  *((_DWORD *)pszStringBuffer + 2) = 2 * v9 + 2;
  result = 0i64;
  *((_DWORD *)pszStringBuffer + 3) = 0;
  return result;
}

Referenced by:

AdtpPackageParameters