AuthzBasepCopyoutClaimAttributeValues
INT64 __fastcall AuthzBasepCopyoutClaimAttributeValues(INT64 a1, INT64 a2, UINT64 a3, INT64 a4, INT64 pSizeUsed){
unsigned int v5;
UINT64 v6;
unsigned __int16 v9;
__int64 v10;
UINT64 v11;
INT64 v12;
__int64 *v13;
UINT64 v14;
WCHAR *v15;
unsigned int v16;
UINT64 v17;
WCHAR *v18;
__int64 v19;
__int64 v20;
UINT64 v21;
INT64 v22;
__int64 *v23;
UINT64 v24;
unsigned int v25;
UINT64 v26;
WCHAR *v27;
__int64 v28;
__int64 v29;
UINT64 v30;
INT64 v31;
__int64 *v32;
unsigned int v33;
UINT64 v34;
WCHAR *v35;
__int64 v36;
UINT64 v37;
INT64 v38;
_QWORD *v39;
unsigned int v40;
__int64 v41;
v5 = 0;
v6 = a3 + a4;
if( a3 + a4 < a3 )
return(unsigned int)-2147483643;
*(_QWORD *)pSizeUsed = 0i64;
v9 = *(_WORD *)(a1 + 48);
if( !v9 )
return(unsigned int)-1073741811;
if( v9 > 2u )
{
switch( v9 )
{
case 3u:
v29 = 8i64 * *(unsigned int *)(a1 + 60);
v30 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
if( v30 + v29 <= v6 )
{
*(_QWORD *)(a2 + 24) = v30;
v31 = a1 + 72;
v32 = *(__int64 **)(a1 + 72);
v15 = (WCHAR *)(v29 + v30);
v33 = 0;
while( v32 != (__int64 *)v31 )
{
v34 = *((unsigned __int16 *)v32 + 20) + 2i64;
v35 = (WCHAR *)((char *)v15 + v34);
if( (unsigned __int64)v15 + v34 > v6 )
return(unsigned int)-2147483643;
*(_QWORD *)(((a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64) + 8i64 * v33) = v15;
RtlStringCbCopyNW(v15, v34, (PWCHAR)v32[6], v34 - 2);
v32 = (__int64 *)*v32;
v15 = v35;
++v33;
}
goto LABEL_33;
}
return(unsigned int)-2147483643;
case 4u:
v20 = 16i64 * *(unsigned int *)(a1 + 60);
v21 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
if( v21 + v20 <= v6 )
{
*(_QWORD *)(a2 + 24) = v21;
v22 = a1 + 72;
v23 = *(__int64 **)(a1 + 72);
v24 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
v15 = (WCHAR *)(v20 + v21);
v25 = 0;
while( v23 != (__int64 *)v22 )
{
v26 = *((unsigned __int16 *)v23 + 24) + 2i64;
v27 = (WCHAR *)((char *)v15 + v26);
if( (unsigned __int64)v15 + v26 > v6 )
return(unsigned int)-2147483643;
v28 = 2i64 * v25;
*(_QWORD *)(v24 + 8 * v28) = v23[5];
*(_QWORD *)(v24 + 8 * v28 + 8) = v15;
RtlStringCbCopyNW(v15, v26, (PWCHAR)v23[7], v26 - 2);
v23 = (__int64 *)*v23;
v15 = v27;
++v25;
}
goto LABEL_33;
}
return(unsigned int)-2147483643;
case 5u:
goto LABEL_10;
}
if( v9 != 6 )
{
if( v9 == 16 )
{
LABEL_10:
v10 = 16i64 * *(unsigned int *)(a1 + 60);
v11 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
if( v11 + v10 <= v6 )
{
*(_QWORD *)(a2 + 24) = v11;
v12 = a1 + 72;
v13 = *(__int64 **)(a1 + 72);
v14 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
v15 = (WCHAR *)(v10 + v11);
v16 = 0;
while( v13 != (__int64 *)v12 )
{
v17 = *((unsigned int *)v13 + 12);
v18 = (WCHAR *)((char *)v15 + v17);
if( (unsigned __int64)v15 + v17 > v6 )
return(unsigned int)-2147483643;
v19 = 2i64 * v16;
*(_QWORD *)(v14 + 8 * v19) = v15;
*(_DWORD *)(v14 + 8 * v19 + 8) = v17;
memmove((UINT8 *)v15, (UINT8 *)v13[5], v17);
v13 = (__int64 *)*v13;
v15 = v18;
++v16;
}
goto LABEL_33;
}
return(unsigned int)-2147483643;
}
return(unsigned int)-1073741811;
}
}
v36 = 8i64 * *(unsigned int *)(a1 + 60);
v37 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
if( v37 + v36 <= v6 )
{
v38 = a1 + 72;
*(_QWORD *)(a2 + 24) = v37;
v39 = *(_QWORD **)(a1 + 72);
v40 = 0;
while( v39 != (_QWORD *)v38 )
{
v41 = v40++;
*(_QWORD *)(v37 + 8 * v41) = v39[5];
v39 = (_QWORD *)*v39;
}
v15 = (WCHAR *)(v36 + v37);
LABEL_33:
*(_QWORD *)pSizeUsed = (char *)v15 - a3;
return v5;
}
return(unsigned int)-2147483643;
}Referenced by:
AuthzBasepCopyoutClaimAttributes