RtlIpv6AddressToStringExA

NTSTATUS __stdcall RtlIpv6AddressToStringExA(
        in6_addr *Address,
        UINT64 ScopeId,
        UINT16 Port,
        INT8 *AddressString,
        UINT64 *AddressStringLength){
  unsigned int v7; 
  char v8; 
  char *p_Src; 
  INT8 *v10; 
  INT8 *v11; 
  int v12; 
  size_t v13; 
  size_t v14; 
  char Src; 
  char S; 
  char v18[15]; 

  v7 = ScopeId;
  if( !Address || !AddressStringLength || !AddressString && *(_DWORD *)AddressStringLength )
    return -1073741811;
  v8 = Src;
  if( Port )
    v8 = 91;
  p_Src = &Src;
  Src = v8;
  if( Port )
    p_Src = &S;
  v10 = RtlIpv6AddressToStringA(Address, p_Src);
  v11 = v10;
  if( v7 )
    v11 = &v10[(int)sprintf_s(v10, v18 - v10, (INT8 *)"%%%u", v7)];
  if( Port )
    LODWORD(v11) = sprintf_s(v11, v18 - v11, (INT8 *)"]:%u", (unsigned __int16)__ROR2__(Port, 8)) + (_DWORD)v11;
  v13 = *(_DWORD *)AddressStringLength;
  v14 = (_DWORD)v11 - (v12 + 32) + 1;
  *(_DWORD *)AddressStringLength = v14;
  if( v13 < v14 )
    return -1073741811;
  memmove(AddressString, &Src, v14);
  return 0;
}

Referenced by:

No references.