ExpCovQueryLoadedModule

__int64 __fastcall ExpCovQueryLoadedModule(
        __int64 a1,
        char a2,
        unsigned int a3,
        __int64 a4,
        unsigned int *a5,
        unsigned int *a6){
  __int64 v6; 
  __int64 v7; 
  int FriendlyName; 
  size_t v12; 
  size_t Length; 
  unsigned int v14; 
  unsigned int v15; 
  __int64 v16; 
  unsigned __int16 MaximumLength; 
  wchar_t *Buffer; 
  VOID *v19; 
  _UNICODE_STRING UnicodeString[3]; 

  v6 = *(_QWORD *)(a1 + 128);
  v7 = a1 + 72;
  *(_QWORD *)&UnicodeString[0].Length = 0i64;
  UnicodeString[0].Buffer = 0i64;
  FriendlyName = ExpCovReadFriendlyName(v6, (_UNICODE_STRING *)(a1 + 72), UnicodeString);
  if( FriendlyName >= 0 )
  {
    v12 = *(_DWORD *)(a1 + 124);
    if( !a2 )
      v12 -= *(_DWORD *)(v6 + 28);
    Length = UnicodeString[0].Length;
    if( v12 < 0xFFFFFFE0 )
    {
      v14 = UnicodeString[0].Length + v12 + 32;
      if( v14 < 0x20 )
        v14 = -1;
    }
    else
    {
      v14 = -1;
    }
    *a6 = v14;
    if( v14 == -1 )
    {
      DbgPrintEx(0x7Eu, 2u, "COV: Overflow when calculating RequiredLengthForCurrentModule for %wZ\n", v7);
LABEL_10:
      FriendlyName = -1073741675;
      goto LABEL_17;
    }
    v15 = *a5 + v14;
    if( v15 < *a5 )
    {
      DbgPrintEx(0x7Eu, 2u, "COV: Overflow when calculating total required length for %wZ\n", v7);
      goto LABEL_10;
    }
    *a5 = v15;
    if( a3 >= v15 )
    {
      *(_DWORD *)a4 = v14;
      *(_DWORD *)(a4 + 4) = 1;
      *(_DWORD *)(a4 + 24) = v12;
      v16 = v12;
      memmove((VOID *)(a4 + 28), *(const VOID **)(a1 + 128), v12);
      MaximumLength = UnicodeString[0].MaximumLength;
      Buffer = UnicodeString[0].Buffer;
      v19 = (VOID *)(v16 + a4 + 32);
      *(_QWORD *)(a4 + 16) = v19;
      *(_WORD *)(a4 + 8) = Length;
      *(_WORD *)(a4 + 10) = MaximumLength;
      memmove(v19, Buffer, Length);
      if( a2 )
        memset((VOID *)(v6 + *(unsigned int *)(v6 + 32)), 0i64, *(_DWORD *)(v6 + 28));
    }
    else
    {
      FriendlyName = -1073741820;
    }
  }
LABEL_17:
  if( UnicodeString[0].Buffer )
    RtlFreeAnsiString(UnicodeString);
  return(unsigned int)FriendlyName;
}

Referenced by:

ExpCovQueryInfoCallBack