RtlIpv6AddressToStringExW

NTSTATUS __stdcall RtlIpv6AddressToStringExW(
        in6_addr *Address,
        UINT64 ScopeId,
        UINT16 Port,
        WCHAR *AddressString,
        UINT64 *AddressStringLength){
  unsigned int v7; 
  WCHAR *p_Src; 
  WCHAR *v9; 
  WCHAR *v10; 
  unsigned int v11; 
  unsigned int v12; 
  __int16 Src; 
  WCHAR S; 
  char v16[14]; 

  v7 = ScopeId;
  if( !Address || !AddressStringLength || !AddressString && *(_DWORD *)AddressStringLength )
    return -1073741811;
  if( Port )
    Src = 91;
  p_Src = (WCHAR *)&Src;
  if( Port )
    p_Src = &S;
  v9 = RtlIpv6AddressToStringW(Address, p_Src, Port, (INT64)AddressString);
  v10 = v9;
  if( v7 )
    v10 = &v9[(int)swprintf_s(v9, (v16 - (char *)v9) >> 1, (WCHAR *)L"%%%u", v7)];
  if( Port )
    v10 += (int)swprintf_s(v10, (v16 - (char *)v10) >> 1, (WCHAR *)L"]:%u", (unsigned __int16)__ROR2__(Port, 8));
  v11 = *(_DWORD *)AddressStringLength;
  v12 = (((char *)v10 - (char *)&Src) >> 1) + 1;
  *(_DWORD *)AddressStringLength = v12;
  if( v11 < v12 )
    return -1073741811;
  memmove(AddressString, &Src, 2 * v12);
  return 0;
}

Referenced by:

No references.