PiUEventCopyEventData

__int64 __fastcall PiUEventCopyEventData(__int64 a1, unsigned int a2, __int64 a3){
  NTSTATUS v3; 
  __int64 v6; 
  __int64 v7; 
  size_t v8; 
  unsigned int v9; 
  int v10; 
  __int64 v12; 
  const VOID *v13; 
  __int64 v14; 
  size_t v15; 
  WCHAR *v16; 
  __int64 v17; 
  UINT64 pcchLength; 

  v3 = 0;
  pcchLength = 0i64;
  if( a2 < 0x40 || *(_DWORD *)(a3 + 64) > a2 )
    return(unsigned int)-1073741789;
  *(_BYTE *)(a1 + 4) = *(_BYTE *)(a3 + 68);
  *(_BYTE *)(a1 + 5) = *(_BYTE *)(a3 + 69);
  *(_DWORD *)(a1 + 8) = *(_DWORD *)(a3 + 88);
  *(_OWORD *)(a1 + 12) = *(_OWORD *)(a3 + 72);
  if( *(_DWORD *)(a3 + 88) == 1 )
  {
    *(_DWORD *)(a1 + 52) = -1;
    *(_DWORD *)(a1 + 56) = 0;
    *(_DWORD *)(a1 + 28) = 1;
    *(_OWORD *)(a1 + 36) = 0i64;
    *(_DWORD *)a1 = 60;
    return(unsigned int)v3;
  }
  if( *(_DWORD *)(a3 + 88) == 2 )
  {
    v13 = (const VOID *)(a3 + 136);
    v3 = RtlStringCchLengthW((WCHAR *)(a3 + 136), 0x7FFFui64, &pcchLength);
    if( v3 < 0 )
      return(unsigned int)v3;
    v9 = 2 * pcchLength + 54;
    if( a2 >= v9 )
    {
      v15 = 2 * pcchLength + 2;
      *(_OWORD *)(a1 + 36) = *(_OWORD *)(v14 + 120);
      memmove((VOID *)(a1 + 52), v13, v15);
      v3 = CmSetDeviceInterfacePathFormat(v16, a1 + 52);
      if( v3 < 0 )
        return(unsigned int)v3;
      *(_DWORD *)(a1 + 28) = 0;
      goto LABEL_10;
    }
    return(unsigned int)-1073741789;
  }
  if( *(_DWORD *)(a3 + 88) != 3 )
  {
    if( *(_DWORD *)(a3 + 88) != 4 )
    {
      if( *(_DWORD *)(a3 + 88) == 9 )
      {
        v3 = RtlStringCchLengthW((WCHAR *)(a3 + 120), 0xC8ui64, &pcchLength);
        if( v3 < 0 )
          return(unsigned int)v3;
        v9 = 2 * pcchLength + 38;
        if( a2 >= v9 )
        {
          memmove((VOID *)(a1 + 36), (const VOID *)(v17 + 120), 2 * pcchLength + 2);
          *(_DWORD *)(a1 + 28) = 3;
          goto LABEL_10;
        }
        return(unsigned int)-1073741789;
      }
      if( *(_DWORD *)(a3 + 88) != 10 && *(_DWORD *)(a3 + 88) != 11 )
        return(unsigned int)-1073741811;
    }
    v3 = RtlStringCchLengthW((WCHAR *)(a3 + 120), 0xC8ui64, &pcchLength);
    if( v3 < 0 )
      return(unsigned int)v3;
    v9 = 2 * pcchLength + 38;
    if( a2 >= v9 )
    {
      memmove((VOID *)(a1 + 36), (const VOID *)(v12 + 120), 2 * pcchLength + 2);
      *(_DWORD *)(a1 + 28) = 2;
      goto LABEL_10;
    }
    return(unsigned int)-1073741789;
  }
  v3 = RtlStringCchLengthW((WCHAR *)(a3 + 128), 0xC8ui64, &pcchLength);
  if( v3 >= 0 && pcchLength )
  {
    v7 = (2 * (_DWORD)pcchLength + 89) & 0xFFFFFFF8;
    v8 = *(unsigned __int16 *)(v7 + v6 + 74) - 36;
    v9 = v8 + 60;
    if( a2 >= v8 + 60 )
    {
      *(_OWORD *)(a1 + 36) = *(_OWORD *)(v7 + v6 + 76);
      v10 = *(_DWORD *)(v7 + v6 + 104);
      *(_DWORD *)(a1 + 56) = v8;
      *(_DWORD *)(a1 + 52) = v10;
      memmove((VOID *)(a1 + 60), (const VOID *)(v7 + v6 + 108), v8);
      *(_DWORD *)(a1 + 28) = 1;
LABEL_10:
      *(_DWORD *)a1 = v9;
      return(unsigned int)v3;
    }
    return(unsigned int)-1073741789;
  }
  return(unsigned int)v3;
}

Referenced by:

PiUEventHandleGetEvent